diff --git a/_index.html b/_index.html
deleted file mode 100644
index 24211e5..0000000
--- a/_index.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<div id="midcolumn">
-	<h1>Acceleo</h1>
-
-	<div id="overview_prezi" class="homeitem3col">
-		<script>
-			if (document.cookie.indexOf('eclipse_cookieconsent_status') > -1) {
-				jQuery("div").html('<iframe id="iframe_container" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen="" width="550" height="400" src="https://prezi.com/embed/x6hayuahe6xm/?bgcolor=ffffff&lock_to_path=0&autoplay=0&autohide_ctrls=0&landing_data=bHVZZmNaNDBIWmlSa1k1MmNRK3VoaXFhTktOYzU5Ynl1eWtiVVRLK2V4VTRzaXZPRmFEaFNGMWdvUEdCWk1oYTVVND0&landing_sign=og5Hwo_QhZhYTA8Cr4ZJmKvuZhc_L2CLj45TqDl3fMQ#"></iframe>');
-			} else {
-				var p = document.createElement('p');
-				p.innerHTML="Please, allow Cookies & Eclipse Foundation Privacy Policy below to be able to load the Acceleo overview prezi presentation.";
-				document.getElementById("overview_prezi").appendChild(p);
-			}
-		</script>
-	</div>
-
-	<div class="homeitem3col">
-		<h3>About Acceleo</h3>
-		<p>
-			<a href="http://wiki.eclipse.org/Acceleo">Acceleo</a> is a pragmatic implementation of the <a href="http://www.omg.org/">Object Management Group (OMG)</a> <a href="http://www.omg.org/spec/MOFM2T/1.0/">MOF Model to Text Language (MTL)</a> standard. You do not need to be an expert to start using the plug-ins and create your first code generator : using the provided example projects and the powerful completion feature of the Acceleo editor, it is very easy to get started and understand the basic principles.
-		</p>
-	    <p>
-			Acceleo is the result of several man-years of R&amp;D started in the French company Obeo. Junction between the OMG MTL standard, its team's experience with industrial code generation and the latest research advances into the M2T field, it offers outstanding advantages : High ability to customize, Interoperability, Easy kick off, and much more!
-		</p>
-	</div>
-
-	<div class="homeitem3col">
-		<h3>User Experience</h3>
-		<p>
-			The Acceleo generation module Editor supports the user with most of the features you would expect from modern IDEs : content assist, quick outline, navigation links to the declaration of model elements, template elements and variables, quick fixes, refactoring, syntax highlighting, occurences highlighting... and so much more!
-		</p>
-	</div>
-
-	<div class="homeitem3col">
-		<h3>Discovering features...</h3>
-		<p>
-			Read the <a href="/acceleo/support">documentation</a> and join the discussion on the <a href="http://www.eclipse.org/forums/index.php?t=thread&amp;frm_id=24&" rel="nofollow">newsgroup</a>.
-		</p>
-	</div>
-</div>
-
-<div id="rightcolumn">
-	<div class="sideitem" id="obeo">
-		<a href="http://www.obeo.fr" title="Main Obeo website"><img src="images/logo/logo_obeo.png"/></a>
-	</div>
-
-	<div class="sideitem">
-		<h6>Get Acceleo</h6>
-		<ul>
-			<li><a href="https://marketplace.eclipse.org/content/acceleo#undefined">Install Acceleo</a> from the marketplace,</li>
-			<li><a href="http://eclipse.org/acceleo/downloads/">Download Acceleo</a> from the update sites.</li>
-			
-  		</ul>
-	</div>
-</div>
diff --git a/_projectCommon.php b/_projectCommon.php
deleted file mode 100644
index aceb0f1..0000000
--- a/_projectCommon.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-	# Set the theme for your project's web pages.
-	# See the Committer Tools "How Do I" for list of themes
-	# https://dev.eclipse.org/committers/
-	# Optional: defaults to system theme
-	$theme = "solstice";
-
-	# Define your project-wide Nav bars here.
-	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
-	# these are optional
-
-	$Menu->setMenuItemList(array());
-	$Menu->addMenuItem("Home", "/acceleo", "_self");
-	$Menu->addMenuItem("Download", "/acceleo/downloads", "_self");
-	$Menu->addMenuItem("Support", "/acceleo/support", "_self");
-	$Menu->addMenuItem("Developers", "/acceleo/developers", "_self");
-	$Menu->addMenuItem("Awards", "/acceleo/awards", "_self");
-	
-	$Nav->setLinkList(array());
-	$Nav->addNavSeparator("About this project", "https://projects.eclipse.org/projects/modeling.acceleo", "", 1  );
-	$Nav->addCustomNav("Wiki", "http://wiki.eclipse.org/Acceleo", 	"_self", 2);
-	$Nav->addCustomNav("Newsgroup", "http://www.eclipse.org/forums/index.php?t=thread&frm_id=24&", "_self", 2);
-	$Nav->addCustomNav("Project Plan", "https://projects.eclipse.org/projects/modeling.m2t.acceleo/documentation", "_self", 2);
-	$Nav->addCustomNav("Bugs", "https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=VERIFIED&list_id=9161179&product=Acceleo&query_format=advanced", 	"_self", 2);
-	$Nav->addCustomNav("File a Bug", "https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Acceleo", 	"_self", 2);
-
-	$Nav->addNavSeparator("Developers", "https://projects.eclipse.org/projects/modeling.m2t.acceleo/developer", "", 1  );
-	$Nav->addCustomNav("Git", "http://git.eclipse.org/c/acceleo/org.eclipse.acceleo.git/", "_self", 2);
-	$Nav->addCustomNav("Gerrit", "https://git.eclipse.org/r/#/admin/projects/acceleo/org.eclipse.acceleo", "_self", 2);
-	$Nav->addCustomNav("Mailing List", "https://dev.eclipse.org/mailman/listinfo/m2t-dev", "_self", 2);
-
-	$Nav->addNavSeparator("Related Projects", "https://www.eclipse.org/modeling", "", 1  );
-	$Nav->addCustomNav("EMF", "https://www.eclipse.org/modeling/emf", "_self", 2);
-	$Nav->addCustomNav("Sirius", "https://www.eclipse.org/sirius", "_self", 2);
-	
-	# $App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/acceleo/style_acceleo.css"/>' . "\n\t");
-	
-	$App->Promotion = TRUE;
-	$App->SetGoogleAnalyticsTrackingCode("UA-16777490-1");
-?>
diff --git a/assets/css/bootstrap.css b/assets/css/bootstrap.css
deleted file mode 100644
index 7d519a6..0000000
--- a/assets/css/bootstrap.css
+++ /dev/null
@@ -1,3363 +0,0 @@
-/*!
- * Bootstrap v2.0.0
- *
- * Copyright 2012 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
- */
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-nav,
-section {
-  display: block;
-}
-audio, canvas, video {
-  display: inline-block;
-  *display: inline;
-  *zoom: 1;
-}
-audio:not([controls]) {
-  display: none;
-}
-html {
-  font-size: 100%;
-  -webkit-text-size-adjust: 100%;
-  -ms-text-size-adjust: 100%;
-}
-a:focus {
-  outline: thin dotted;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-a:hover, a:active {
-  outline: 0;
-}
-sub, sup {
-  position: relative;
-  font-size: 75%;
-  line-height: 0;
-  vertical-align: baseline;
-}
-sup {
-  top: -0.5em;
-}
-sub {
-  bottom: -0.25em;
-}
-img {
-  max-width: 100%;
-  height: auto;
-  border: 0;
-  -ms-interpolation-mode: bicubic;
-}
-button,
-input,
-select,
-textarea {
-  margin: 0;
-  font-size: 100%;
-  vertical-align: middle;
-}
-button, input {
-  *overflow: visible;
-  line-height: normal;
-}
-button::-moz-focus-inner, input::-moz-focus-inner {
-  padding: 0;
-  border: 0;
-}
-button,
-input[type="button"],
-input[type="reset"],
-input[type="submit"] {
-  cursor: pointer;
-  -webkit-appearance: button;
-}
-input[type="search"] {
-  -webkit-appearance: textfield;
-  -webkit-box-sizing: content-box;
-  -moz-box-sizing: content-box;
-  box-sizing: content-box;
-}
-input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button {
-  -webkit-appearance: none;
-}
-textarea {
-  overflow: auto;
-  vertical-align: top;
-}
-body {
-  margin: 0;
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-size: 13px;
-  line-height: 18px;
-  color: #333333;
-  background-color: #ffffff;
-}
-a {
-  color: #0088cc;
-  text-decoration: none;
-}
-a:hover {
-  color: #005580;
-  text-decoration: underline;
-}
-.row {
-  margin-left: -20px;
-  *zoom: 1;
-}
-.row:before, .row:after {
-  display: table;
-  content: "";
-}
-.row:after {
-  clear: both;
-}
-[class*="span"] {
-  float: left;
-  margin-left: 20px;
-}
-.span1 {
-  width: 60px;
-}
-.span2 {
-  width: 140px;
-}
-.span3 {
-  width: 220px;
-}
-.span4 {
-  width: 300px;
-}
-.span5 {
-  width: 380px;
-}
-.span6 {
-  width: 460px;
-}
-.span7 {
-  width: 540px;
-}
-.span8 {
-  width: 620px;
-}
-.span9 {
-  width: 700px;
-}
-.span10 {
-  width: 780px;
-}
-.span11 {
-  width: 860px;
-}
-.span12, .container {
-  width: 940px;
-}
-.offset1 {
-  margin-left: 100px;
-}
-.offset2 {
-  margin-left: 180px;
-}
-.offset3 {
-  margin-left: 260px;
-}
-.offset4 {
-  margin-left: 340px;
-}
-.offset5 {
-  margin-left: 420px;
-}
-.offset6 {
-  margin-left: 500px;
-}
-.offset7 {
-  margin-left: 580px;
-}
-.offset8 {
-  margin-left: 660px;
-}
-.offset9 {
-  margin-left: 740px;
-}
-.offset10 {
-  margin-left: 820px;
-}
-.offset11 {
-  margin-left: 900px;
-}
-.row-fluid {
-  width: 100%;
-  *zoom: 1;
-}
-.row-fluid:before, .row-fluid:after {
-  display: table;
-  content: "";
-}
-.row-fluid:after {
-  clear: both;
-}
-.row-fluid > [class*="span"] {
-  float: left;
-  margin-left: 2.127659574%;
-}
-.row-fluid > [class*="span"]:first-child {
-  margin-left: 0;
-}
-.row-fluid .span1 {
-  width: 6.382978723%;
-}
-.row-fluid .span2 {
-  width: 14.89361702%;
-}
-.row-fluid .span3 {
-  width: 23.404255317%;
-}
-.row-fluid .span4 {
-  width: 31.914893614%;
-}
-.row-fluid .span5 {
-  width: 40.425531911%;
-}
-.row-fluid .span6 {
-  width: 48.93617020799999%;
-}
-.row-fluid .span7 {
-  width: 57.446808505%;
-}
-.row-fluid .span8 {
-  width: 65.95744680199999%;
-}
-.row-fluid .span9 {
-  width: 74.468085099%;
-}
-.row-fluid .span10 {
-  width: 82.97872339599999%;
-}
-.row-fluid .span11 {
-  width: 91.489361693%;
-}
-.row-fluid .span12 {
-  width: 99.99999998999999%;
-}
-.container {
-  width: 940px;
-  margin-left: auto;
-  margin-right: auto;
-  *zoom: 1;
-}
-.container:before, .container:after {
-  display: table;
-  content: "";
-}
-.container:after {
-  clear: both;
-}
-.container-fluid {
-  padding-left: 20px;
-  padding-right: 20px;
-  *zoom: 1;
-}
-.container-fluid:before, .container-fluid:after {
-  display: table;
-  content: "";
-}
-.container-fluid:after {
-  clear: both;
-}
-p {
-  margin: 0 0 9px;
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-size: 13px;
-  line-height: 18px;
-}
-p small {
-  font-size: 11px;
-  color: #999999;
-}
-.lead {
-  margin-bottom: 18px;
-  font-size: 20px;
-  font-weight: 200;
-  line-height: 27px;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
-  margin: 0;
-  font-weight: bold;
-  color: #333333;
-  text-rendering: optimizelegibility;
-}
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small {
-  font-weight: normal;
-  color: #999999;
-}
-h1 {
-  font-size: 30px;
-  line-height: 36px;
-}
-h1 small {
-  font-size: 18px;
-}
-h2 {
-  font-size: 24px;
-  line-height: 36px;
-}
-h2 small {
-  font-size: 18px;
-}
-h3 {
-  line-height: 27px;
-  font-size: 18px;
-}
-h3 small {
-  font-size: 14px;
-}
-h4, h5, h6 {
-  line-height: 18px;
-}
-h4 {
-  font-size: 14px;
-}
-h4 small {
-  font-size: 12px;
-}
-h5 {
-  font-size: 12px;
-}
-h6 {
-  font-size: 11px;
-  color: #999999;
-  text-transform: uppercase;
-}
-.page-header {
-  padding-bottom: 17px;
-  margin: 18px 0;
-  border-bottom: 1px solid #eeeeee;
-}
-.page-header h1 {
-  line-height: 1;
-}
-ul, ol {
-  padding: 0;
-  margin: 0 0 9px 25px;
-}
-ul ul,
-ul ol,
-ol ol,
-ol ul {
-  margin-bottom: 0;
-}
-ul {
-  list-style: disc;
-}
-ol {
-  list-style: decimal;
-}
-li {
-  line-height: 18px;
-}
-ul.unstyled {
-  margin-left: 0;
-  list-style: none;
-}
-dl {
-  margin-bottom: 18px;
-}
-dt, dd {
-  line-height: 18px;
-}
-dt {
-  font-weight: bold;
-}
-dd {
-  margin-left: 9px;
-}
-hr {
-  margin: 18px 0;
-  border: 0;
-  border-top: 1px solid #e5e5e5;
-  border-bottom: 1px solid #ffffff;
-}
-strong {
-  font-weight: bold;
-}
-em {
-  font-style: italic;
-}
-.muted {
-  color: #999999;
-}
-abbr {
-  font-size: 90%;
-  text-transform: uppercase;
-  border-bottom: 1px dotted #ddd;
-  cursor: help;
-}
-blockquote {
-  padding: 0 0 0 15px;
-  margin: 0 0 18px;
-  border-left: 5px solid #eeeeee;
-}
-blockquote p {
-  margin-bottom: 0;
-  font-size: 16px;
-  font-weight: 300;
-  line-height: 22.5px;
-}
-blockquote small {
-  display: block;
-  line-height: 18px;
-  color: #999999;
-}
-blockquote small:before {
-  content: '\2014 \00A0';
-}
-blockquote.pull-right {
-  float: right;
-  padding-left: 0;
-  padding-right: 15px;
-  border-left: 0;
-  border-right: 5px solid #eeeeee;
-}
-blockquote.pull-right p, blockquote.pull-right small {
-  text-align: right;
-}
-q:before,
-q:after,
-blockquote:before,
-blockquote:after {
-  content: "";
-}
-address {
-  display: block;
-  margin-bottom: 18px;
-  line-height: 18px;
-  font-style: normal;
-}
-small {
-  font-size: 100%;
-}
-cite {
-  font-style: normal;
-}
-code, pre {
-  padding: 0 3px 2px;
-  font-family: Menlo, Monaco, "Courier New", monospace;
-  font-size: 12px;
-  color: #333333;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-}
-code {
-  padding: 3px 4px;
-  color: #d14;
-  background-color: #f7f7f9;
-  border: 1px solid #e1e1e8;
-}
-pre {
-  display: block;
-  padding: 8.5px;
-  margin: 0 0 9px;
-  font-size: 12px;
-  line-height: 18px;
-  background-color: #f5f5f5;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, 0.15);
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-  white-space: pre;
-  white-space: pre-wrap;
-  word-break: break-all;
-}
-pre.prettyprint {
-  margin-bottom: 18px;
-}
-pre code {
-  padding: 0;
-  background-color: transparent;
-}
-form {
-  margin: 0 0 18px;
-}
-fieldset {
-  padding: 0;
-  margin: 0;
-  border: 0;
-}
-legend {
-  display: block;
-  width: 100%;
-  padding: 0;
-  margin-bottom: 27px;
-  font-size: 19.5px;
-  line-height: 36px;
-  color: #333333;
-  border: 0;
-  border-bottom: 1px solid #eee;
-}
-label,
-input,
-button,
-select,
-textarea {
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-size: 13px;
-  font-weight: normal;
-  line-height: 18px;
-}
-label {
-  display: block;
-  margin-bottom: 5px;
-  color: #333333;
-}
-input,
-textarea,
-select,
-.uneditable-input {
-  display: inline-block;
-  width: 210px;
-  height: 18px;
-  padding: 4px;
-  margin-bottom: 9px;
-  font-size: 13px;
-  line-height: 18px;
-  color: #555555;
-  border: 1px solid #ccc;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-}
-.uneditable-textarea {
-  width: auto;
-  height: auto;
-}
-label input, label textarea, label select {
-  display: block;
-}
-input[type="image"], input[type="checkbox"], input[type="radio"] {
-  width: auto;
-  height: auto;
-  padding: 0;
-  margin: 3px 0;
-  *margin-top: 0;
-  /* IE7 */
-
-  line-height: normal;
-  border: 0;
-  cursor: pointer;
-  border-radius: 0 \0/;
-}
-input[type="file"] {
-  padding: initial;
-  line-height: initial;
-  border: initial;
-  background-color: #ffffff;
-  background-color: initial;
-  -webkit-box-shadow: none;
-  -moz-box-shadow: none;
-  box-shadow: none;
-}
-input[type="button"], input[type="reset"], input[type="submit"] {
-  width: auto;
-  height: auto;
-}
-select, input[type="file"] {
-  height: 28px;
-  /* In IE7, the height of the select element cannot be changed by height, only font-size */
-
-  *margin-top: 4px;
-  /* For IE7, add top margin to align select with labels */
-
-  line-height: 28px;
-}
-select {
-  width: 220px;
-  background-color: #ffffff;
-}
-select[multiple], select[size] {
-  height: auto;
-}
-input[type="image"] {
-  -webkit-box-shadow: none;
-  -moz-box-shadow: none;
-  box-shadow: none;
-}
-textarea {
-  height: auto;
-}
-input[type="hidden"] {
-  display: none;
-}
-.radio, .checkbox {
-  padding-left: 18px;
-}
-.radio input[type="radio"], .checkbox input[type="checkbox"] {
-  float: left;
-  margin-left: -18px;
-}
-.controls > .radio:first-child, .controls > .checkbox:first-child {
-  padding-top: 5px;
-}
-.radio.inline, .checkbox.inline {
-  display: inline-block;
-  margin-bottom: 0;
-  vertical-align: middle;
-}
-.radio.inline + .radio.inline, .checkbox.inline + .checkbox.inline {
-  margin-left: 10px;
-}
-.controls > .radio.inline:first-child, .controls > .checkbox.inline:first-child {
-  padding-top: 0;
-}
-input, textarea {
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
-  -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
-  -ms-transition: border linear 0.2s, box-shadow linear 0.2s;
-  -o-transition: border linear 0.2s, box-shadow linear 0.2s;
-  transition: border linear 0.2s, box-shadow linear 0.2s;
-}
-input:focus, textarea:focus {
-  border-color: rgba(82, 168, 236, 0.8);
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-  outline: 0;
-  outline: thin dotted \9;
-  /* IE6-8 */
-
-}
-input[type="file"]:focus, input[type="checkbox"]:focus, select:focus {
-  -webkit-box-shadow: none;
-  -moz-box-shadow: none;
-  box-shadow: none;
-  outline: thin dotted;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-.input-mini {
-  width: 60px;
-}
-.input-small {
-  width: 90px;
-}
-.input-medium {
-  width: 150px;
-}
-.input-large {
-  width: 210px;
-}
-.input-xlarge {
-  width: 270px;
-}
-.input-xxlarge {
-  width: 530px;
-}
-input[class*="span"],
-select[class*="span"],
-textarea[class*="span"],
-.uneditable-input {
-  float: none;
-  margin-left: 0;
-}
-input.span1, textarea.span1, .uneditable-input.span1 {
-  width: 50px;
-}
-input.span2, textarea.span2, .uneditable-input.span2 {
-  width: 130px;
-}
-input.span3, textarea.span3, .uneditable-input.span3 {
-  width: 210px;
-}
-input.span4, textarea.span4, .uneditable-input.span4 {
-  width: 290px;
-}
-input.span5, textarea.span5, .uneditable-input.span5 {
-  width: 370px;
-}
-input.span6, textarea.span6, .uneditable-input.span6 {
-  width: 450px;
-}
-input.span7, textarea.span7, .uneditable-input.span7 {
-  width: 530px;
-}
-input.span8, textarea.span8, .uneditable-input.span8 {
-  width: 610px;
-}
-input.span9, textarea.span9, .uneditable-input.span9 {
-  width: 690px;
-}
-input.span10, textarea.span10, .uneditable-input.span10 {
-  width: 770px;
-}
-input.span11, textarea.span11, .uneditable-input.span11 {
-  width: 850px;
-}
-input.span12, textarea.span12, .uneditable-input.span12 {
-  width: 930px;
-}
-input[disabled],
-select[disabled],
-textarea[disabled],
-input[readonly],
-select[readonly],
-textarea[readonly] {
-  background-color: #f5f5f5;
-  border-color: #ddd;
-  cursor: not-allowed;
-}
-.control-group.warning > label, .control-group.warning .help-block, .control-group.warning .help-inline {
-  color: #c09853;
-}
-.control-group.warning input, .control-group.warning select, .control-group.warning textarea {
-  color: #c09853;
-  border-color: #c09853;
-}
-.control-group.warning input:focus, .control-group.warning select:focus, .control-group.warning textarea:focus {
-  border-color: #a47e3c;
-  -webkit-box-shadow: 0 0 6px #dbc59e;
-  -moz-box-shadow: 0 0 6px #dbc59e;
-  box-shadow: 0 0 6px #dbc59e;
-}
-.control-group.warning .input-prepend .add-on, .control-group.warning .input-append .add-on {
-  color: #c09853;
-  background-color: #fcf8e3;
-  border-color: #c09853;
-}
-.control-group.error > label, .control-group.error .help-block, .control-group.error .help-inline {
-  color: #b94a48;
-}
-.control-group.error input, .control-group.error select, .control-group.error textarea {
-  color: #b94a48;
-  border-color: #b94a48;
-}
-.control-group.error input:focus, .control-group.error select:focus, .control-group.error textarea:focus {
-  border-color: #953b39;
-  -webkit-box-shadow: 0 0 6px #d59392;
-  -moz-box-shadow: 0 0 6px #d59392;
-  box-shadow: 0 0 6px #d59392;
-}
-.control-group.error .input-prepend .add-on, .control-group.error .input-append .add-on {
-  color: #b94a48;
-  background-color: #f2dede;
-  border-color: #b94a48;
-}
-.control-group.success > label, .control-group.success .help-block, .control-group.success .help-inline {
-  color: #468847;
-}
-.control-group.success input, .control-group.success select, .control-group.success textarea {
-  color: #468847;
-  border-color: #468847;
-}
-.control-group.success input:focus, .control-group.success select:focus, .control-group.success textarea:focus {
-  border-color: #356635;
-  -webkit-box-shadow: 0 0 6px #7aba7b;
-  -moz-box-shadow: 0 0 6px #7aba7b;
-  box-shadow: 0 0 6px #7aba7b;
-}
-.control-group.success .input-prepend .add-on, .control-group.success .input-append .add-on {
-  color: #468847;
-  background-color: #dff0d8;
-  border-color: #468847;
-}
-input:focus:required:invalid, textarea:focus:required:invalid, select:focus:required:invalid {
-  color: #b94a48;
-  border-color: #ee5f5b;
-}
-input:focus:required:invalid:focus, textarea:focus:required:invalid:focus, select:focus:required:invalid:focus {
-  border-color: #e9322d;
-  -webkit-box-shadow: 0 0 6px #f8b9b7;
-  -moz-box-shadow: 0 0 6px #f8b9b7;
-  box-shadow: 0 0 6px #f8b9b7;
-}
-.form-actions {
-  padding: 17px 20px 18px;
-  margin-top: 18px;
-  margin-bottom: 18px;
-  background-color: #f5f5f5;
-  border-top: 1px solid #ddd;
-}
-.uneditable-input {
-  display: block;
-  background-color: #ffffff;
-  border-color: #eee;
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
-  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
-  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
-  cursor: not-allowed;
-}
-:-moz-placeholder {
-  color: #999999;
-}
-::-webkit-input-placeholder {
-  color: #999999;
-}
-.help-block {
-  margin-top: 5px;
-  margin-bottom: 0;
-  color: #999999;
-}
-.help-inline {
-  display: inline-block;
-  *display: inline;
-  /* IE7 inline-block hack */
-
-  *zoom: 1;
-  margin-bottom: 9px;
-  vertical-align: middle;
-  padding-left: 5px;
-}
-.input-prepend, .input-append {
-  margin-bottom: 5px;
-  *zoom: 1;
-}
-.input-prepend:before,
-.input-append:before,
-.input-prepend:after,
-.input-append:after {
-  display: table;
-  content: "";
-}
-.input-prepend:after, .input-append:after {
-  clear: both;
-}
-.input-prepend input,
-.input-append input,
-.input-prepend .uneditable-input,
-.input-append .uneditable-input {
-  -webkit-border-radius: 0 3px 3px 0;
-  -moz-border-radius: 0 3px 3px 0;
-  border-radius: 0 3px 3px 0;
-}
-.input-prepend input:focus,
-.input-append input:focus,
-.input-prepend .uneditable-input:focus,
-.input-append .uneditable-input:focus {
-  position: relative;
-  z-index: 2;
-}
-.input-prepend .uneditable-input, .input-append .uneditable-input {
-  border-left-color: #ccc;
-}
-.input-prepend .add-on, .input-append .add-on {
-  float: left;
-  display: block;
-  width: auto;
-  min-width: 16px;
-  height: 18px;
-  margin-right: -1px;
-  padding: 4px 5px;
-  font-weight: normal;
-  line-height: 18px;
-  color: #999999;
-  text-align: center;
-  text-shadow: 0 1px 0 #ffffff;
-  background-color: #f5f5f5;
-  border: 1px solid #ccc;
-  -webkit-border-radius: 3px 0 0 3px;
-  -moz-border-radius: 3px 0 0 3px;
-  border-radius: 3px 0 0 3px;
-}
-.input-prepend .active, .input-append .active {
-  background-color: #a9dba9;
-  border-color: #46a546;
-}
-.input-prepend .add-on {
-  *margin-top: 1px;
-  /* IE6-7 */
-
-}
-.input-append input, .input-append .uneditable-input {
-  float: left;
-  -webkit-border-radius: 3px 0 0 3px;
-  -moz-border-radius: 3px 0 0 3px;
-  border-radius: 3px 0 0 3px;
-}
-.input-append .uneditable-input {
-  border-right-color: #ccc;
-}
-.input-append .add-on {
-  margin-right: 0;
-  margin-left: -1px;
-  -webkit-border-radius: 0 3px 3px 0;
-  -moz-border-radius: 0 3px 3px 0;
-  border-radius: 0 3px 3px 0;
-}
-.input-append input:first-child {
-  *margin-left: -160px;
-}
-.input-append input:first-child + .add-on {
-  *margin-left: -21px;
-}
-.search-query {
-  padding-left: 14px;
-  padding-right: 14px;
-  margin-bottom: 0;
-  -webkit-border-radius: 14px;
-  -moz-border-radius: 14px;
-  border-radius: 14px;
-}
-.form-search input,
-.form-inline input,
-.form-horizontal input,
-.form-search textarea,
-.form-inline textarea,
-.form-horizontal textarea,
-.form-search select,
-.form-inline select,
-.form-horizontal select,
-.form-search .help-inline,
-.form-inline .help-inline,
-.form-horizontal .help-inline,
-.form-search .uneditable-input,
-.form-inline .uneditable-input,
-.form-horizontal .uneditable-input {
-  display: inline-block;
-  margin-bottom: 0;
-}
-.form-search label,
-.form-inline label,
-.form-search .input-append,
-.form-inline .input-append,
-.form-search .input-prepend,
-.form-inline .input-prepend {
-  display: inline-block;
-}
-.form-search .input-append .add-on,
-.form-inline .input-prepend .add-on,
-.form-search .input-append .add-on,
-.form-inline .input-prepend .add-on {
-  vertical-align: middle;
-}
-.control-group {
-  margin-bottom: 9px;
-}
-.form-horizontal legend + .control-group {
-  margin-top: 18px;
-  -webkit-margin-top-collapse: separate;
-}
-.form-horizontal .control-group {
-  margin-bottom: 18px;
-  *zoom: 1;
-}
-.form-horizontal .control-group:before, .form-horizontal .control-group:after {
-  display: table;
-  content: "";
-}
-.form-horizontal .control-group:after {
-  clear: both;
-}
-.form-horizontal .control-group > label {
-  float: left;
-  width: 140px;
-  padding-top: 5px;
-  text-align: right;
-}
-.form-horizontal .controls {
-  margin-left: 160px;
-}
-.form-horizontal .form-actions {
-  padding-left: 160px;
-}
-table {
-  max-width: 100%;
-  border-collapse: collapse;
-  border-spacing: 0;
-}
-.table {
-  width: 100%;
-  margin-bottom: 18px;
-}
-.table th, .table td {
-  padding: 8px;
-  line-height: 18px;
-  text-align: left;
-  border-top: 1px solid #ddd;
-}
-.table th {
-  font-weight: bold;
-  vertical-align: bottom;
-}
-.table td {
-  vertical-align: top;
-}
-.table thead:first-child tr th, .table thead:first-child tr td {
-  border-top: 0;
-}
-.table tbody + tbody {
-  border-top: 2px solid #ddd;
-}
-.table-condensed th, .table-condensed td {
-  padding: 4px 5px;
-}
-.table-bordered {
-  border: 1px solid #ddd;
-  border-collapse: separate;
-  *border-collapse: collapsed;
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-}
-.table-bordered th + th,
-.table-bordered td + td,
-.table-bordered th + td,
-.table-bordered td + th {
-  border-left: 1px solid #ddd;
-}
-.table-bordered thead:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child td {
-  border-top: 0;
-}
-.table-bordered thead:first-child tr:first-child th:first-child, .table-bordered tbody:first-child tr:first-child td:first-child {
-  -webkit-border-radius: 4px 0 0 0;
-  -moz-border-radius: 4px 0 0 0;
-  border-radius: 4px 0 0 0;
-}
-.table-bordered thead:first-child tr:first-child th:last-child, .table-bordered tbody:first-child tr:first-child td:last-child {
-  -webkit-border-radius: 0 4px 0 0;
-  -moz-border-radius: 0 4px 0 0;
-  border-radius: 0 4px 0 0;
-}
-.table-bordered thead:last-child tr:last-child th:first-child, .table-bordered tbody:last-child tr:last-child td:first-child {
-  -webkit-border-radius: 0 0 0 4px;
-  -moz-border-radius: 0 0 0 4px;
-  border-radius: 0 0 0 4px;
-}
-.table-bordered thead:last-child tr:last-child th:last-child, .table-bordered tbody:last-child tr:last-child td:last-child {
-  -webkit-border-radius: 0 0 4px 0;
-  -moz-border-radius: 0 0 4px 0;
-  border-radius: 0 0 4px 0;
-}
-.table-striped tbody tr:nth-child(odd) td, .table-striped tbody tr:nth-child(odd) th {
-  background-color: #f9f9f9;
-}
-table .span1 {
-  float: none;
-  width: 44px;
-  margin-left: 0;
-}
-table .span2 {
-  float: none;
-  width: 124px;
-  margin-left: 0;
-}
-table .span3 {
-  float: none;
-  width: 204px;
-  margin-left: 0;
-}
-table .span4 {
-  float: none;
-  width: 284px;
-  margin-left: 0;
-}
-table .span5 {
-  float: none;
-  width: 364px;
-  margin-left: 0;
-}
-table .span6 {
-  float: none;
-  width: 444px;
-  margin-left: 0;
-}
-table .span7 {
-  float: none;
-  width: 524px;
-  margin-left: 0;
-}
-table .span8 {
-  float: none;
-  width: 604px;
-  margin-left: 0;
-}
-table .span9 {
-  float: none;
-  width: 684px;
-  margin-left: 0;
-}
-table .span10 {
-  float: none;
-  width: 764px;
-  margin-left: 0;
-}
-table .span11 {
-  float: none;
-  width: 844px;
-  margin-left: 0;
-}
-table .span12 {
-  float: none;
-  width: 924px;
-  margin-left: 0;
-}
-[class*="icon-"] {
-  display: inline-block;
-  width: 14px;
-  height: 14px;
-  vertical-align: text-top;
-  background-image: url(../img/glyphicons-halflings.png);
-  background-position: 14px 14px;
-  background-repeat: no-repeat;
-  *margin-right: .3em;
-}
-[class*="icon-"]:last-child {
-  *margin-left: 0;
-}
-.icon-white {
-  background-image: url(../img/glyphicons-halflings-white.png);
-}
-.icon-glass {
-  background-position: 0      0;
-}
-.icon-music {
-  background-position: -24px 0;
-}
-.icon-search {
-  background-position: -48px 0;
-}
-.icon-envelope {
-  background-position: -72px 0;
-}
-.icon-heart {
-  background-position: -96px 0;
-}
-.icon-star {
-  background-position: -120px 0;
-}
-.icon-star-empty {
-  background-position: -144px 0;
-}
-.icon-user {
-  background-position: -168px 0;
-}
-.icon-film {
-  background-position: -192px 0;
-}
-.icon-th-large {
-  background-position: -216px 0;
-}
-.icon-th {
-  background-position: -240px 0;
-}
-.icon-th-list {
-  background-position: -264px 0;
-}
-.icon-ok {
-  background-position: -288px 0;
-}
-.icon-remove {
-  background-position: -312px 0;
-}
-.icon-zoom-in {
-  background-position: -336px 0;
-}
-.icon-zoom-out {
-  background-position: -360px 0;
-}
-.icon-off {
-  background-position: -384px 0;
-}
-.icon-signal {
-  background-position: -408px 0;
-}
-.icon-cog {
-  background-position: -432px 0;
-}
-.icon-trash {
-  background-position: -456px 0;
-}
-.icon-home {
-  background-position: 0 -24px;
-}
-.icon-file {
-  background-position: -24px -24px;
-}
-.icon-time {
-  background-position: -48px -24px;
-}
-.icon-road {
-  background-position: -72px -24px;
-}
-.icon-download-alt {
-  background-position: -96px -24px;
-}
-.icon-download {
-  background-position: -120px -24px;
-}
-.icon-upload {
-  background-position: -144px -24px;
-}
-.icon-inbox {
-  background-position: -168px -24px;
-}
-.icon-play-circle {
-  background-position: -192px -24px;
-}
-.icon-repeat {
-  background-position: -216px -24px;
-}
-.icon-refresh {
-  background-position: -240px -24px;
-}
-.icon-list-alt {
-  background-position: -264px -24px;
-}
-.icon-lock {
-  background-position: -287px -24px;
-}
-.icon-flag {
-  background-position: -312px -24px;
-}
-.icon-headphones {
-  background-position: -336px -24px;
-}
-.icon-volume-off {
-  background-position: -360px -24px;
-}
-.icon-volume-down {
-  background-position: -384px -24px;
-}
-.icon-volume-up {
-  background-position: -408px -24px;
-}
-.icon-qrcode {
-  background-position: -432px -24px;
-}
-.icon-barcode {
-  background-position: -456px -24px;
-}
-.icon-tag {
-  background-position: 0 -48px;
-}
-.icon-tags {
-  background-position: -25px -48px;
-}
-.icon-book {
-  background-position: -48px -48px;
-}
-.icon-bookmark {
-  background-position: -72px -48px;
-}
-.icon-print {
-  background-position: -96px -48px;
-}
-.icon-camera {
-  background-position: -120px -48px;
-}
-.icon-font {
-  background-position: -144px -48px;
-}
-.icon-bold {
-  background-position: -167px -48px;
-}
-.icon-italic {
-  background-position: -192px -48px;
-}
-.icon-text-height {
-  background-position: -216px -48px;
-}
-.icon-text-width {
-  background-position: -240px -48px;
-}
-.icon-align-left {
-  background-position: -264px -48px;
-}
-.icon-align-center {
-  background-position: -288px -48px;
-}
-.icon-align-right {
-  background-position: -312px -48px;
-}
-.icon-align-justify {
-  background-position: -336px -48px;
-}
-.icon-list {
-  background-position: -360px -48px;
-}
-.icon-indent-left {
-  background-position: -384px -48px;
-}
-.icon-indent-right {
-  background-position: -408px -48px;
-}
-.icon-facetime-video {
-  background-position: -432px -48px;
-}
-.icon-picture {
-  background-position: -456px -48px;
-}
-.icon-pencil {
-  background-position: 0 -72px;
-}
-.icon-map-marker {
-  background-position: -24px -72px;
-}
-.icon-adjust {
-  background-position: -48px -72px;
-}
-.icon-tint {
-  background-position: -72px -72px;
-}
-.icon-edit {
-  background-position: -96px -72px;
-}
-.icon-share {
-  background-position: -120px -72px;
-}
-.icon-check {
-  background-position: -144px -72px;
-}
-.icon-move {
-  background-position: -168px -72px;
-}
-.icon-step-backward {
-  background-position: -192px -72px;
-}
-.icon-fast-backward {
-  background-position: -216px -72px;
-}
-.icon-backward {
-  background-position: -240px -72px;
-}
-.icon-play {
-  background-position: -264px -72px;
-}
-.icon-pause {
-  background-position: -288px -72px;
-}
-.icon-stop {
-  background-position: -312px -72px;
-}
-.icon-forward {
-  background-position: -336px -72px;
-}
-.icon-fast-forward {
-  background-position: -360px -72px;
-}
-.icon-step-forward {
-  background-position: -384px -72px;
-}
-.icon-eject {
-  background-position: -408px -72px;
-}
-.icon-chevron-left {
-  background-position: -432px -72px;
-}
-.icon-chevron-right {
-  background-position: -456px -72px;
-}
-.icon-plus-sign {
-  background-position: 0 -96px;
-}
-.icon-minus-sign {
-  background-position: -24px -96px;
-}
-.icon-remove-sign {
-  background-position: -48px -96px;
-}
-.icon-ok-sign {
-  background-position: -72px -96px;
-}
-.icon-question-sign {
-  background-position: -96px -96px;
-}
-.icon-info-sign {
-  background-position: -120px -96px;
-}
-.icon-screenshot {
-  background-position: -144px -96px;
-}
-.icon-remove-circle {
-  background-position: -168px -96px;
-}
-.icon-ok-circle {
-  background-position: -192px -96px;
-}
-.icon-ban-circle {
-  background-position: -216px -96px;
-}
-.icon-arrow-left {
-  background-position: -240px -96px;
-}
-.icon-arrow-right {
-  background-position: -264px -96px;
-}
-.icon-arrow-up {
-  background-position: -289px -96px;
-}
-.icon-arrow-down {
-  background-position: -312px -96px;
-}
-.icon-share-alt {
-  background-position: -336px -96px;
-}
-.icon-resize-full {
-  background-position: -360px -96px;
-}
-.icon-resize-small {
-  background-position: -384px -96px;
-}
-.icon-plus {
-  background-position: -408px -96px;
-}
-.icon-minus {
-  background-position: -433px -96px;
-}
-.icon-asterisk {
-  background-position: -456px -96px;
-}
-.icon-exclamation-sign {
-  background-position: 0 -120px;
-}
-.icon-gift {
-  background-position: -24px -120px;
-}
-.icon-leaf {
-  background-position: -48px -120px;
-}
-.icon-fire {
-  background-position: -72px -120px;
-}
-.icon-eye-open {
-  background-position: -96px -120px;
-}
-.icon-eye-close {
-  background-position: -120px -120px;
-}
-.icon-warning-sign {
-  background-position: -144px -120px;
-}
-.icon-plane {
-  background-position: -168px -120px;
-}
-.icon-calendar {
-  background-position: -192px -120px;
-}
-.icon-random {
-  background-position: -216px -120px;
-}
-.icon-comment {
-  background-position: -240px -120px;
-}
-.icon-magnet {
-  background-position: -264px -120px;
-}
-.icon-chevron-up {
-  background-position: -288px -120px;
-}
-.icon-chevron-down {
-  background-position: -313px -119px;
-}
-.icon-retweet {
-  background-position: -336px -120px;
-}
-.icon-shopping-cart {
-  background-position: -360px -120px;
-}
-.icon-folder-close {
-  background-position: -384px -120px;
-}
-.icon-folder-open {
-  background-position: -408px -120px;
-}
-.icon-resize-vertical {
-  background-position: -432px -119px;
-}
-.icon-resize-horizontal {
-  background-position: -456px -118px;
-}
-.dropdown {
-  position: relative;
-}
-.dropdown-toggle {
-  *margin-bottom: -3px;
-}
-.dropdown-toggle:active, .open .dropdown-toggle {
-  outline: 0;
-}
-.caret {
-  display: inline-block;
-  width: 0;
-  height: 0;
-  text-indent: -99999px;
-  *text-indent: 0;
-  vertical-align: top;
-  border-left: 4px solid transparent;
-  border-right: 4px solid transparent;
-  border-top: 4px solid #000000;
-  opacity: 0.3;
-  filter: alpha(opacity=30);
-  content: "\2193";
-}
-.dropdown .caret {
-  margin-top: 8px;
-  margin-left: 2px;
-}
-.dropdown:hover .caret, .open.dropdown .caret {
-  opacity: 1;
-  filter: alpha(opacity=100);
-}
-.dropdown-menu {
-  position: absolute;
-  top: 100%;
-  left: 0;
-  z-index: 1000;
-  float: left;
-  display: none;
-  min-width: 160px;
-  max-width: 220px;
-  _width: 160px;
-  padding: 4px 0;
-  margin: 0;
-  list-style: none;
-  background-color: #ffffff;
-  border-color: #ccc;
-  border-color: rgba(0, 0, 0, 0.2);
-  border-style: solid;
-  border-width: 1px;
-  -webkit-border-radius: 0 0 5px 5px;
-  -moz-border-radius: 0 0 5px 5px;
-  border-radius: 0 0 5px 5px;
-  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  -webkit-background-clip: padding-box;
-  -moz-background-clip: padding;
-  background-clip: padding-box;
-  *border-right-width: 2px;
-  *border-bottom-width: 2px;
-}
-.dropdown-menu.bottom-up {
-  top: auto;
-  bottom: 100%;
-  margin-bottom: 2px;
-}
-.dropdown-menu .divider {
-  height: 1px;
-  margin: 5px 1px;
-  overflow: hidden;
-  background-color: #e5e5e5;
-  border-bottom: 1px solid #ffffff;
-  *width: 100%;
-  *margin: -5px 0 5px;
-}
-.dropdown-menu a {
-  display: block;
-  padding: 3px 15px;
-  clear: both;
-  font-weight: normal;
-  line-height: 18px;
-  color: #555555;
-  white-space: nowrap;
-}
-.dropdown-menu li > a:hover, .dropdown-menu .active > a, .dropdown-menu .active > a:hover {
-  color: #ffffff;
-  text-decoration: none;
-  background-color: #0088cc;
-}
-.dropdown.open {
-  *z-index: 1000;
-}
-.dropdown.open .dropdown-toggle {
-  color: #ffffff;
-  background: #ccc;
-  background: rgba(0, 0, 0, 0.3);
-}
-.dropdown.open .dropdown-menu {
-  display: block;
-}
-.typeahead {
-  margin-top: 2px;
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-}
-.well {
-  min-height: 20px;
-  padding: 19px;
-  margin-bottom: 20px;
-  background-color: #f5f5f5;
-  border: 1px solid #eee;
-  border: 1px solid rgba(0, 0, 0, 0.05);
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-}
-.well blockquote {
-  border-color: #ddd;
-  border-color: rgba(0, 0, 0, 0.15);
-}
-.fade {
-  -webkit-transition: opacity 0.15s linear;
-  -moz-transition: opacity 0.15s linear;
-  -ms-transition: opacity 0.15s linear;
-  -o-transition: opacity 0.15s linear;
-  transition: opacity 0.15s linear;
-  opacity: 0;
-}
-.fade.in {
-  opacity: 1;
-}
-.collapse {
-  -webkit-transition: height 0.35s ease;
-  -moz-transition: height 0.35s ease;
-  -ms-transition: height 0.35s ease;
-  -o-transition: height 0.35s ease;
-  transition: height 0.35s ease;
-  position: relative;
-  overflow: hidden;
-  height: 0;
-}
-.collapse.in {
-  height: auto;
-}
-.close {
-  float: right;
-  font-size: 20px;
-  font-weight: bold;
-  line-height: 18px;
-  color: #000000;
-  text-shadow: 0 1px 0 #ffffff;
-  opacity: 0.2;
-  filter: alpha(opacity=20);
-}
-.close:hover {
-  color: #000000;
-  text-decoration: none;
-  opacity: 0.4;
-  filter: alpha(opacity=40);
-  cursor: pointer;
-}
-.btn {
-  display: inline-block;
-  padding: 4px 10px 4px;
-  font-size: 13px;
-  line-height: 18px;
-  color: #333333;
-  text-align: center;
-  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
-  background-color: #fafafa;
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));
-  background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
-  background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);
-  background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
-  background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
-  background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
-  background-repeat: no-repeat;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
-  border: 1px solid #ccc;
-  border-bottom-color: #bbb;
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  cursor: pointer;
-  *margin-left: .3em;
-}
-.btn:first-child {
-  *margin-left: 0;
-}
-.btn:hover {
-  color: #333333;
-  text-decoration: none;
-  background-color: #e6e6e6;
-  background-position: 0 -15px;
-  -webkit-transition: background-position 0.1s linear;
-  -moz-transition: background-position 0.1s linear;
-  -ms-transition: background-position 0.1s linear;
-  -o-transition: background-position 0.1s linear;
-  transition: background-position 0.1s linear;
-}
-.btn:focus {
-  outline: thin dotted;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-.btn.active, .btn:active {
-  background-image: none;
-  -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-  background-color: #e6e6e6;
-  background-color: #d9d9d9 \9;
-  color: rgba(0, 0, 0, 0.5);
-  outline: 0;
-}
-.btn.disabled, .btn[disabled] {
-  cursor: default;
-  background-image: none;
-  background-color: #e6e6e6;
-  opacity: 0.65;
-  filter: alpha(opacity=65);
-  -webkit-box-shadow: none;
-  -moz-box-shadow: none;
-  box-shadow: none;
-}
-.btn-large {
-  padding: 9px 14px;
-  font-size: 15px;
-  line-height: normal;
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  border-radius: 5px;
-}
-.btn-large .icon {
-  margin-top: 1px;
-}
-.btn-small {
-  padding: 5px 9px;
-  font-size: 11px;
-  line-height: 16px;
-}
-.btn-small .icon {
-  margin-top: -1px;
-}
-.btn-primary,
-.btn-primary:hover,
-.btn-warning,
-.btn-warning:hover,
-.btn-danger,
-.btn-danger:hover,
-.btn-success,
-.btn-success:hover,
-.btn-info,
-.btn-info:hover {
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  color: #ffffff;
-}
-.btn-primary.active,
-.btn-warning.active,
-.btn-danger.active,
-.btn-success.active,
-.btn-info.active {
-  color: rgba(255, 255, 255, 0.75);
-}
-.btn-primary {
-  background-color: #006dcc;
-  background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
-  background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
-  background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
-  background-image: -o-linear-gradient(top, #0088cc, #0044cc);
-  background-image: linear-gradient(top, #0088cc, #0044cc);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
-  border-color: #0044cc #0044cc #002a80;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-primary:hover,
-.btn-primary:active,
-.btn-primary.active,
-.btn-primary.disabled,
-.btn-primary[disabled] {
-  background-color: #0044cc;
-}
-.btn-primary:active, .btn-primary.active {
-  background-color: #003399 \9;
-}
-.btn-warning {
-  background-color: #faa732;
-  background-image: -moz-linear-gradient(top, #fbb450, #f89406);
-  background-image: -ms-linear-gradient(top, #fbb450, #f89406);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
-  background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
-  background-image: -o-linear-gradient(top, #fbb450, #f89406);
-  background-image: linear-gradient(top, #fbb450, #f89406);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);
-  border-color: #f89406 #f89406 #ad6704;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-warning:hover,
-.btn-warning:active,
-.btn-warning.active,
-.btn-warning.disabled,
-.btn-warning[disabled] {
-  background-color: #f89406;
-}
-.btn-warning:active, .btn-warning.active {
-  background-color: #c67605 \9;
-}
-.btn-danger {
-  background-color: #da4f49;
-  background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);
-  background-image: -ms-linear-gradient(top, #ee5f5b, #bd362f);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));
-  background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);
-  background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);
-  background-image: linear-gradient(top, #ee5f5b, #bd362f);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);
-  border-color: #bd362f #bd362f #802420;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-danger:hover,
-.btn-danger:active,
-.btn-danger.active,
-.btn-danger.disabled,
-.btn-danger[disabled] {
-  background-color: #bd362f;
-}
-.btn-danger:active, .btn-danger.active {
-  background-color: #942a25 \9;
-}
-.btn-success {
-  background-color: #5bb75b;
-  background-image: -moz-linear-gradient(top, #62c462, #51a351);
-  background-image: -ms-linear-gradient(top, #62c462, #51a351);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));
-  background-image: -webkit-linear-gradient(top, #62c462, #51a351);
-  background-image: -o-linear-gradient(top, #62c462, #51a351);
-  background-image: linear-gradient(top, #62c462, #51a351);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);
-  border-color: #51a351 #51a351 #387038;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-success:hover,
-.btn-success:active,
-.btn-success.active,
-.btn-success.disabled,
-.btn-success[disabled] {
-  background-color: #51a351;
-}
-.btn-success:active, .btn-success.active {
-  background-color: #408140 \9;
-}
-.btn-info {
-  background-color: #49afcd;
-  background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: -ms-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));
-  background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: linear-gradient(top, #5bc0de, #2f96b4);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);
-  border-color: #2f96b4 #2f96b4 #1f6377;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-info:hover,
-.btn-info:active,
-.btn-info.active,
-.btn-info.disabled,
-.btn-info[disabled] {
-  background-color: #2f96b4;
-}
-.btn-info:active, .btn-info.active {
-  background-color: #24748c \9;
-}
-button.btn, input[type="submit"].btn {
-  *padding-top: 2px;
-  *padding-bottom: 2px;
-}
-button.btn::-moz-focus-inner, input[type="submit"].btn::-moz-focus-inner {
-  padding: 0;
-  border: 0;
-}
-button.btn.large, input[type="submit"].btn.large {
-  *padding-top: 7px;
-  *padding-bottom: 7px;
-}
-button.btn.small, input[type="submit"].btn.small {
-  *padding-top: 3px;
-  *padding-bottom: 3px;
-}
-.btn-group {
-  position: relative;
-  *zoom: 1;
-  *margin-left: .3em;
-}
-.btn-group:before, .btn-group:after {
-  display: table;
-  content: "";
-}
-.btn-group:after {
-  clear: both;
-}
-.btn-group:first-child {
-  *margin-left: 0;
-}
-.btn-group + .btn-group {
-  margin-left: 5px;
-}
-.btn-toolbar {
-  margin-top: 9px;
-  margin-bottom: 9px;
-}
-.btn-toolbar .btn-group {
-  display: inline-block;
-  *display: inline;
-  /* IE7 inline-block hack */
-
-  *zoom: 1;
-}
-.btn-group .btn {
-  position: relative;
-  float: left;
-  margin-left: -1px;
-  -webkit-border-radius: 0;
-  -moz-border-radius: 0;
-  border-radius: 0;
-}
-.btn-group .btn:first-child {
-  margin-left: 0;
-  -webkit-border-top-left-radius: 4px;
-  -moz-border-radius-topleft: 4px;
-  border-top-left-radius: 4px;
-  -webkit-border-bottom-left-radius: 4px;
-  -moz-border-radius-bottomleft: 4px;
-  border-bottom-left-radius: 4px;
-}
-.btn-group .btn:last-child, .btn-group .dropdown-toggle {
-  -webkit-border-top-right-radius: 4px;
-  -moz-border-radius-topright: 4px;
-  border-top-right-radius: 4px;
-  -webkit-border-bottom-right-radius: 4px;
-  -moz-border-radius-bottomright: 4px;
-  border-bottom-right-radius: 4px;
-}
-.btn-group .btn.large:first-child {
-  margin-left: 0;
-  -webkit-border-top-left-radius: 6px;
-  -moz-border-radius-topleft: 6px;
-  border-top-left-radius: 6px;
-  -webkit-border-bottom-left-radius: 6px;
-  -moz-border-radius-bottomleft: 6px;
-  border-bottom-left-radius: 6px;
-}
-.btn-group .btn.large:last-child, .btn-group .large.dropdown-toggle {
-  -webkit-border-top-right-radius: 6px;
-  -moz-border-radius-topright: 6px;
-  border-top-right-radius: 6px;
-  -webkit-border-bottom-right-radius: 6px;
-  -moz-border-radius-bottomright: 6px;
-  border-bottom-right-radius: 6px;
-}
-.btn-group .btn:hover,
-.btn-group .btn:focus,
-.btn-group .btn:active,
-.btn-group .btn.active {
-  z-index: 2;
-}
-.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle {
-  outline: 0;
-}
-.btn-group .dropdown-toggle {
-  padding-left: 8px;
-  padding-right: 8px;
-  -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  *padding-top: 5px;
-  *padding-bottom: 5px;
-}
-.btn-group.open {
-  *z-index: 1000;
-}
-.btn-group.open .dropdown-menu {
-  display: block;
-  margin-top: 1px;
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  border-radius: 5px;
-}
-.btn-group.open .dropdown-toggle {
-  background-image: none;
-  -webkit-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-.btn .caret {
-  margin-top: 7px;
-  margin-left: 0;
-}
-.btn:hover .caret, .open.btn-group .caret {
-  opacity: 1;
-  filter: alpha(opacity=100);
-}
-.btn-primary .caret,
-.btn-danger .caret,
-.btn-info .caret,
-.btn-success .caret {
-  border-top-color: #ffffff;
-  opacity: 0.75;
-  filter: alpha(opacity=75);
-}
-.btn-small .caret {
-  margin-top: 4px;
-}
-.alert {
-  padding: 8px 35px 8px 14px;
-  margin-bottom: 18px;
-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
-  background-color: #fcf8e3;
-  border: 1px solid #fbeed5;
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-}
-.alert, .alert-heading {
-  color: #c09853;
-}
-.alert .close {
-  position: relative;
-  top: -2px;
-  right: -21px;
-  line-height: 18px;
-}
-.alert-success {
-  background-color: #dff0d8;
-  border-color: #d6e9c6;
-}
-.alert-success, .alert-success .alert-heading {
-  color: #468847;
-}
-.alert-danger, .alert-error {
-  background-color: #f2dede;
-  border-color: #eed3d7;
-}
-.alert-danger,
-.alert-error,
-.alert-danger .alert-heading,
-.alert-error .alert-heading {
-  color: #b94a48;
-}
-.alert-info {
-  background-color: #d9edf7;
-  border-color: #bce8f1;
-}
-.alert-info, .alert-info .alert-heading {
-  color: #3a87ad;
-}
-.alert-block {
-  padding-top: 14px;
-  padding-bottom: 14px;
-}
-.alert-block > p, .alert-block > ul {
-  margin-bottom: 0;
-}
-.alert-block p + p {
-  margin-top: 5px;
-}
-.nav {
-  margin-left: 0;
-  margin-bottom: 18px;
-  list-style: none;
-}
-.nav > li > a {
-  display: block;
-}
-.nav > li > a:hover {
-  text-decoration: none;
-  background-color: #eeeeee;
-}
-.nav-list {
-  padding-left: 14px;
-  padding-right: 14px;
-  margin-bottom: 0;
-}
-.nav-list > li > a, .nav-list .nav-header {
-  display: block;
-  padding: 3px 15px;
-  margin-left: -15px;
-  margin-right: -15px;
-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
-}
-.nav-list .nav-header {
-  font-size: 11px;
-  font-weight: bold;
-  line-height: 18px;
-  color: #999999;
-  text-transform: uppercase;
-}
-.nav-list > li + .nav-header {
-  margin-top: 9px;
-}
-.nav-list .active > a {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
-  background-color: #0088cc;
-}
-.nav-list .icon {
-  margin-right: 2px;
-}
-.nav-tabs, .nav-pills {
-  *zoom: 1;
-}
-.nav-tabs:before,
-.nav-pills:before,
-.nav-tabs:after,
-.nav-pills:after {
-  display: table;
-  content: "";
-}
-.nav-tabs:after, .nav-pills:after {
-  clear: both;
-}
-.nav-tabs > li, .nav-pills > li {
-  float: left;
-}
-.nav-tabs > li > a, .nav-pills > li > a {
-  padding-right: 12px;
-  padding-left: 12px;
-  margin-right: 2px;
-  line-height: 14px;
-}
-.nav-tabs {
-  border-bottom: 1px solid #ddd;
-}
-.nav-tabs > li {
-  margin-bottom: -1px;
-}
-.nav-tabs > li > a {
-  padding-top: 9px;
-  padding-bottom: 9px;
-  border: 1px solid transparent;
-  -webkit-border-radius: 4px 4px 0 0;
-  -moz-border-radius: 4px 4px 0 0;
-  border-radius: 4px 4px 0 0;
-}
-.nav-tabs > li > a:hover {
-  border-color: #eeeeee #eeeeee #dddddd;
-}
-.nav-tabs > .active > a, .nav-tabs > .active > a:hover {
-  color: #555555;
-  background-color: #ffffff;
-  border: 1px solid #ddd;
-  border-bottom-color: transparent;
-  cursor: default;
-}
-.nav-pills > li > a {
-  padding-top: 8px;
-  padding-bottom: 8px;
-  margin-top: 2px;
-  margin-bottom: 2px;
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  border-radius: 5px;
-}
-.nav-pills .active > a, .nav-pills .active > a:hover {
-  color: #ffffff;
-  background-color: #0088cc;
-}
-.nav-stacked > li {
-  float: none;
-}
-.nav-stacked > li > a {
-  margin-right: 0;
-}
-.nav-tabs.nav-stacked {
-  border-bottom: 0;
-}
-.nav-tabs.nav-stacked > li > a {
-  border: 1px solid #ddd;
-  -webkit-border-radius: 0;
-  -moz-border-radius: 0;
-  border-radius: 0;
-}
-.nav-tabs.nav-stacked > li:first-child > a {
-  -webkit-border-radius: 4px 4px 0 0;
-  -moz-border-radius: 4px 4px 0 0;
-  border-radius: 4px 4px 0 0;
-}
-.nav-tabs.nav-stacked > li:last-child > a {
-  -webkit-border-radius: 0 0 4px 4px;
-  -moz-border-radius: 0 0 4px 4px;
-  border-radius: 0 0 4px 4px;
-}
-.nav-tabs.nav-stacked > li > a:hover {
-  border-color: #ddd;
-  z-index: 2;
-}
-.nav-pills.nav-stacked > li > a {
-  margin-bottom: 3px;
-}
-.nav-pills.nav-stacked > li:last-child > a {
-  margin-bottom: 1px;
-}
-.nav-tabs .dropdown-menu, .nav-pills .dropdown-menu {
-  margin-top: 1px;
-  border-width: 1px;
-}
-.nav-pills .dropdown-menu {
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-}
-.nav-tabs .dropdown-toggle .caret, .nav-pills .dropdown-toggle .caret {
-  border-top-color: #0088cc;
-  margin-top: 6px;
-}
-.nav-tabs .dropdown-toggle:hover .caret, .nav-pills .dropdown-toggle:hover .caret {
-  border-top-color: #005580;
-}
-.nav-tabs .active .dropdown-toggle .caret, .nav-pills .active .dropdown-toggle .caret {
-  border-top-color: #333333;
-}
-.nav > .dropdown.active > a:hover {
-  color: #000000;
-  cursor: pointer;
-}
-.nav-tabs .open .dropdown-toggle, .nav-pills .open .dropdown-toggle, .nav > .open.active > a:hover {
-  color: #ffffff;
-  background-color: #999999;
-  border-color: #999999;
-}
-.nav .open .caret, .nav .open.active .caret, .nav .open a:hover .caret {
-  border-top-color: #ffffff;
-  opacity: 1;
-  filter: alpha(opacity=100);
-}
-.tabs-stacked .open > a:hover {
-  border-color: #999999;
-}
-.tabbable {
-  *zoom: 1;
-}
-.tabbable:before, .tabbable:after {
-  display: table;
-  content: "";
-}
-.tabbable:after {
-  clear: both;
-}
-.tabs-below .nav-tabs, .tabs-right .nav-tabs, .tabs-left .nav-tabs {
-  border-bottom: 0;
-}
-.tab-content > .tab-pane, .pill-content > .pill-pane {
-  display: none;
-}
-.tab-content > .active, .pill-content > .active {
-  display: block;
-}
-.tabs-below .nav-tabs {
-  border-top: 1px solid #ddd;
-}
-.tabs-below .nav-tabs > li {
-  margin-top: -1px;
-  margin-bottom: 0;
-}
-.tabs-below .nav-tabs > li > a {
-  -webkit-border-radius: 0 0 4px 4px;
-  -moz-border-radius: 0 0 4px 4px;
-  border-radius: 0 0 4px 4px;
-}
-.tabs-below .nav-tabs > li > a:hover {
-  border-bottom-color: transparent;
-  border-top-color: #ddd;
-}
-.tabs-below .nav-tabs .active > a, .tabs-below .nav-tabs .active > a:hover {
-  border-color: transparent #ddd #ddd #ddd;
-}
-.tabs-left .nav-tabs > li, .tabs-right .nav-tabs > li {
-  float: none;
-}
-.tabs-left .nav-tabs > li > a, .tabs-right .nav-tabs > li > a {
-  min-width: 74px;
-  margin-right: 0;
-  margin-bottom: 3px;
-}
-.tabs-left .nav-tabs {
-  float: left;
-  margin-right: 19px;
-  border-right: 1px solid #ddd;
-}
-.tabs-left .nav-tabs > li > a {
-  margin-right: -1px;
-  -webkit-border-radius: 4px 0 0 4px;
-  -moz-border-radius: 4px 0 0 4px;
-  border-radius: 4px 0 0 4px;
-}
-.tabs-left .nav-tabs > li > a:hover {
-  border-color: #eeeeee #dddddd #eeeeee #eeeeee;
-}
-.tabs-left .nav-tabs .active > a, .tabs-left .nav-tabs .active > a:hover {
-  border-color: #ddd transparent #ddd #ddd;
-  *border-right-color: #ffffff;
-}
-.tabs-right .nav-tabs {
-  float: right;
-  margin-left: 19px;
-  border-left: 1px solid #ddd;
-}
-.tabs-right .nav-tabs > li > a {
-  margin-left: -1px;
-  -webkit-border-radius: 0 4px 4px 0;
-  -moz-border-radius: 0 4px 4px 0;
-  border-radius: 0 4px 4px 0;
-}
-.tabs-right .nav-tabs > li > a:hover {
-  border-color: #eeeeee #eeeeee #eeeeee #dddddd;
-}
-.tabs-right .nav-tabs .active > a, .tabs-right .nav-tabs .active > a:hover {
-  border-color: #ddd #ddd #ddd transparent;
-  *border-left-color: #ffffff;
-}
-.navbar {
-  overflow: visible;
-  margin-bottom: 18px;
-}
-.navbar-inner {
-  padding-left: 20px;
-  padding-right: 20px;
-  background-color: #2c2c2c;
-  background-image: -moz-linear-gradient(top, #333333, #222222);
-  background-image: -ms-linear-gradient(top, #333333, #222222);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));
-  background-image: -webkit-linear-gradient(top, #333333, #222222);
-  background-image: -o-linear-gradient(top, #333333, #222222);
-  background-image: linear-gradient(top, #333333, #222222);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-}
-.btn-navbar {
-  display: none;
-  float: right;
-  padding: 7px 10px;
-  margin-left: 5px;
-  margin-right: 5px;
-  background-color: #2c2c2c;
-  background-image: -moz-linear-gradient(top, #333333, #222222);
-  background-image: -ms-linear-gradient(top, #333333, #222222);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));
-  background-image: -webkit-linear-gradient(top, #333333, #222222);
-  background-image: -o-linear-gradient(top, #333333, #222222);
-  background-image: linear-gradient(top, #333333, #222222);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
-  border-color: #222222 #222222 #000000;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
-  -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
-}
-.btn-navbar:hover,
-.btn-navbar:active,
-.btn-navbar.active,
-.btn-navbar.disabled,
-.btn-navbar[disabled] {
-  background-color: #222222;
-}
-.btn-navbar:active, .btn-navbar.active {
-  background-color: #080808 \9;
-}
-.btn-navbar .icon-bar {
-  display: block;
-  width: 18px;
-  height: 2px;
-  background-color: #f5f5f5;
-  -webkit-border-radius: 1px;
-  -moz-border-radius: 1px;
-  border-radius: 1px;
-  -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
-  -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
-  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
-}
-.btn-navbar .icon-bar + .icon-bar {
-  margin-top: 3px;
-}
-.nav-collapse.collapse {
-  height: auto;
-}
-.navbar .brand:hover {
-  text-decoration: none;
-}
-.navbar .brand {
-  float: left;
-  display: block;
-  padding: 8px 20px 12px;
-  margin-left: -20px;
-  font-size: 20px;
-  font-weight: 200;
-  line-height: 1;
-  color: #ffffff;
-}
-.navbar .navbar-text {
-  margin-bottom: 0;
-  line-height: 40px;
-  color: #999999;
-}
-.navbar .navbar-text a:hover {
-  color: #ffffff;
-  background-color: transparent;
-}
-.navbar .btn, .navbar .btn-group {
-  margin-top: 5px;
-}
-.navbar .btn-group .btn {
-  margin-top: 0;
-}
-.navbar-form {
-  margin-bottom: 0;
-  *zoom: 1;
-}
-.navbar-form:before, .navbar-form:after {
-  display: table;
-  content: "";
-}
-.navbar-form:after {
-  clear: both;
-}
-.navbar-form input, .navbar-form select {
-  display: inline-block;
-  margin-top: 5px;
-  margin-bottom: 0;
-}
-.navbar-form .radio, .navbar-form .checkbox {
-  margin-top: 5px;
-}
-.navbar-form input[type="image"], .navbar-form input[type="checkbox"], .navbar-form input[type="radio"] {
-  margin-top: 3px;
-}
-.navbar-search {
-  position: relative;
-  float: left;
-  margin-top: 6px;
-  margin-bottom: 0;
-}
-.navbar-search .search-query {
-  padding: 4px 9px;
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-size: 13px;
-  font-weight: normal;
-  line-height: 1;
-  color: #ffffff;
-  color: rgba(255, 255, 255, 0.75);
-  background: #666;
-  background: rgba(255, 255, 255, 0.3);
-  border: 1px solid #111;
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);
-  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);
-  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);
-  -webkit-transition: none;
-  -moz-transition: none;
-  -ms-transition: none;
-  -o-transition: none;
-  transition: none;
-}
-.navbar-search .search-query :-moz-placeholder {
-  color: #eeeeee;
-}
-.navbar-search .search-query::-webkit-input-placeholder {
-  color: #eeeeee;
-}
-.navbar-search .search-query:hover {
-  color: #ffffff;
-  background-color: #999999;
-  background-color: rgba(255, 255, 255, 0.5);
-}
-.navbar-search .search-query:focus, .navbar-search .search-query.focused {
-  padding: 5px 10px;
-  color: #333333;
-  text-shadow: 0 1px 0 #ffffff;
-  background-color: #ffffff;
-  border: 0;
-  -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
-  -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
-  box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
-  outline: 0;
-}
-.navbar-fixed-top {
-  position: fixed;
-  top: 0;
-  right: 0;
-  left: 0;
-  z-index: 1030;
-}
-.navbar-fixed-top .navbar-inner {
-  padding-left: 0;
-  padding-right: 0;
-  -webkit-border-radius: 0;
-  -moz-border-radius: 0;
-  border-radius: 0;
-}
-.navbar .nav {
-  position: relative;
-  left: 0;
-  display: block;
-  float: left;
-  margin: 0 10px 0 0;
-}
-.navbar .nav.pull-right {
-  float: right;
-}
-.navbar .nav > li {
-  display: block;
-  float: left;
-}
-.navbar .nav > li > a {
-  float: none;
-  padding: 10px 10px 11px;
-  line-height: 19px;
-  color: #999999;
-  text-decoration: none;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-}
-.navbar .nav > li > a:hover {
-  background-color: transparent;
-  color: #ffffff;
-  text-decoration: none;
-}
-.navbar .nav .active > a, .navbar .nav .active > a:hover {
-  color: #ffffff;
-  text-decoration: none;
-  background-color: #222222;
-  background-color: rgba(0, 0, 0, 0.5);
-}
-.navbar .divider-vertical {
-  height: 40px;
-  width: 1px;
-  margin: 0 9px;
-  overflow: hidden;
-  background-color: #222222;
-  border-right: 1px solid #333333;
-}
-.navbar .nav.pull-right {
-  margin-left: 10px;
-  margin-right: 0;
-}
-.navbar .dropdown-menu {
-  margin-top: 1px;
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-}
-.navbar .dropdown-menu:before {
-  content: '';
-  display: inline-block;
-  border-left: 7px solid transparent;
-  border-right: 7px solid transparent;
-  border-bottom: 7px solid #ccc;
-  border-bottom-color: rgba(0, 0, 0, 0.2);
-  position: absolute;
-  top: -7px;
-  left: 9px;
-}
-.navbar .dropdown-menu:after {
-  content: '';
-  display: inline-block;
-  border-left: 6px solid transparent;
-  border-right: 6px solid transparent;
-  border-bottom: 6px solid #ffffff;
-  position: absolute;
-  top: -6px;
-  left: 10px;
-}
-.navbar .nav .dropdown-toggle .caret, .navbar .nav .open.dropdown .caret {
-  border-top-color: #ffffff;
-}
-.navbar .nav .active .caret {
-  opacity: 1;
-  filter: alpha(opacity=100);
-}
-.navbar .nav .open > .dropdown-toggle, .navbar .nav .active > .dropdown-toggle, .navbar .nav .open.active > .dropdown-toggle {
-  background-color: transparent;
-}
-.navbar .nav .active > .dropdown-toggle:hover {
-  color: #ffffff;
-}
-.navbar .nav.pull-right .dropdown-menu {
-  left: auto;
-  right: 0;
-}
-.navbar .nav.pull-right .dropdown-menu:before {
-  left: auto;
-  right: 12px;
-}
-.navbar .nav.pull-right .dropdown-menu:after {
-  left: auto;
-  right: 13px;
-}
-.breadcrumb {
-  padding: 7px 14px;
-  margin: 0 0 18px;
-  background-color: #fbfbfb;
-  background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5);
-  background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));
-  background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5);
-  background-image: -o-linear-gradient(top, #ffffff, #f5f5f5);
-  background-image: linear-gradient(top, #ffffff, #f5f5f5);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);
-  border: 1px solid #ddd;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-  -webkit-box-shadow: inset 0 1px 0 #ffffff;
-  -moz-box-shadow: inset 0 1px 0 #ffffff;
-  box-shadow: inset 0 1px 0 #ffffff;
-}
-.breadcrumb li {
-  display: inline;
-  text-shadow: 0 1px 0 #ffffff;
-}
-.breadcrumb .divider {
-  padding: 0 5px;
-  color: #999999;
-}
-.breadcrumb .active a {
-  color: #333333;
-}
-.pagination {
-  height: 36px;
-  margin: 18px 0;
-}
-.pagination ul {
-  display: inline-block;
-  *display: inline;
-  /* IE7 inline-block hack */
-
-  *zoom: 1;
-  margin-left: 0;
-  margin-bottom: 0;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-.pagination li {
-  display: inline;
-}
-.pagination a {
-  float: left;
-  padding: 0 14px;
-  line-height: 34px;
-  text-decoration: none;
-  border: 1px solid #ddd;
-  border-left-width: 0;
-}
-.pagination a:hover, .pagination .active a {
-  background-color: #f5f5f5;
-}
-.pagination .active a {
-  color: #999999;
-  cursor: default;
-}
-.pagination .disabled a, .pagination .disabled a:hover {
-  color: #999999;
-  background-color: transparent;
-  cursor: default;
-}
-.pagination li:first-child a {
-  border-left-width: 1px;
-  -webkit-border-radius: 3px 0 0 3px;
-  -moz-border-radius: 3px 0 0 3px;
-  border-radius: 3px 0 0 3px;
-}
-.pagination li:last-child a {
-  -webkit-border-radius: 0 3px 3px 0;
-  -moz-border-radius: 0 3px 3px 0;
-  border-radius: 0 3px 3px 0;
-}
-.pagination-centered {
-  text-align: center;
-}
-.pagination-right {
-  text-align: right;
-}
-.pager {
-  margin-left: 0;
-  margin-bottom: 18px;
-  list-style: none;
-  text-align: center;
-  *zoom: 1;
-}
-.pager:before, .pager:after {
-  display: table;
-  content: "";
-}
-.pager:after {
-  clear: both;
-}
-.pager li {
-  display: inline;
-}
-.pager a {
-  display: inline-block;
-  padding: 5px 14px;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  -webkit-border-radius: 15px;
-  -moz-border-radius: 15px;
-  border-radius: 15px;
-}
-.pager a:hover {
-  text-decoration: none;
-  background-color: #f5f5f5;
-}
-.pager .next a {
-  float: right;
-}
-.pager .previous a {
-  float: left;
-}
-.modal-open .dropdown-menu {
-  z-index: 2050;
-}
-.modal-open .dropdown.open {
-  *z-index: 2050;
-}
-.modal-open .popover {
-  z-index: 2060;
-}
-.modal-open .tooltip {
-  z-index: 2070;
-}
-.modal-backdrop {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 1040;
-  background-color: #000000;
-}
-.modal-backdrop.fade {
-  opacity: 0;
-}
-.modal-backdrop, .modal-backdrop.fade.in {
-  opacity: 0.8;
-  filter: alpha(opacity=80);
-}
-.modal {
-  position: fixed;
-  top: 50%;
-  left: 50%;
-  z-index: 1050;
-  max-height: 500px;
-  overflow: auto;
-  width: 560px;
-  margin: -250px 0 0 -280px;
-  background-color: #ffffff;
-  border: 1px solid #999;
-  border: 1px solid rgba(0, 0, 0, 0.3);
-  *border: 1px solid #999;
-  /* IE6-7 */
-
-  -webkit-border-radius: 6px;
-  -moz-border-radius: 6px;
-  border-radius: 6px;
-  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  -webkit-background-clip: padding-box;
-  -moz-background-clip: padding-box;
-  background-clip: padding-box;
-}
-.modal.fade {
-  -webkit-transition: opacity .3s linear, top .3s ease-out;
-  -moz-transition: opacity .3s linear, top .3s ease-out;
-  -ms-transition: opacity .3s linear, top .3s ease-out;
-  -o-transition: opacity .3s linear, top .3s ease-out;
-  transition: opacity .3s linear, top .3s ease-out;
-  top: -25%;
-}
-.modal.fade.in {
-  top: 50%;
-}
-.modal-header {
-  padding: 9px 15px;
-  border-bottom: 1px solid #eee;
-}
-.modal-header .close {
-  margin-top: 2px;
-}
-.modal-body {
-  padding: 15px;
-}
-.modal-footer {
-  padding: 14px 15px 15px;
-  margin-bottom: 0;
-  background-color: #f5f5f5;
-  border-top: 1px solid #ddd;
-  -webkit-border-radius: 0 0 6px 6px;
-  -moz-border-radius: 0 0 6px 6px;
-  border-radius: 0 0 6px 6px;
-  -webkit-box-shadow: inset 0 1px 0 #ffffff;
-  -moz-box-shadow: inset 0 1px 0 #ffffff;
-  box-shadow: inset 0 1px 0 #ffffff;
-  *zoom: 1;
-}
-.modal-footer:before, .modal-footer:after {
-  display: table;
-  content: "";
-}
-.modal-footer:after {
-  clear: both;
-}
-.modal-footer .btn {
-  float: right;
-  margin-left: 5px;
-  margin-bottom: 0;
-}
-.tooltip {
-  position: absolute;
-  z-index: 1020;
-  display: block;
-  visibility: visible;
-  padding: 5px;
-  font-size: 11px;
-  opacity: 0;
-  filter: alpha(opacity=0);
-}
-.tooltip.in {
-  opacity: 0.8;
-  filter: alpha(opacity=80);
-}
-.tooltip.top {
-  margin-top: -2px;
-}
-.tooltip.right {
-  margin-left: 2px;
-}
-.tooltip.bottom {
-  margin-top: 2px;
-}
-.tooltip.left {
-  margin-left: -2px;
-}
-.tooltip.top .tooltip-arrow {
-  bottom: 0;
-  left: 50%;
-  margin-left: -5px;
-  border-left: 5px solid transparent;
-  border-right: 5px solid transparent;
-  border-top: 5px solid #000000;
-}
-.tooltip.left .tooltip-arrow {
-  top: 50%;
-  right: 0;
-  margin-top: -5px;
-  border-top: 5px solid transparent;
-  border-bottom: 5px solid transparent;
-  border-left: 5px solid #000000;
-}
-.tooltip.bottom .tooltip-arrow {
-  top: 0;
-  left: 50%;
-  margin-left: -5px;
-  border-left: 5px solid transparent;
-  border-right: 5px solid transparent;
-  border-bottom: 5px solid #000000;
-}
-.tooltip.right .tooltip-arrow {
-  top: 50%;
-  left: 0;
-  margin-top: -5px;
-  border-top: 5px solid transparent;
-  border-bottom: 5px solid transparent;
-  border-right: 5px solid #000000;
-}
-.tooltip-inner {
-  max-width: 200px;
-  padding: 3px 8px;
-  color: #ffffff;
-  text-align: center;
-  text-decoration: none;
-  background-color: #000000;
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-}
-.tooltip-arrow {
-  position: absolute;
-  width: 0;
-  height: 0;
-}
-.popover {
-  position: absolute;
-  top: 0;
-  left: 0;
-  z-index: 1010;
-  display: none;
-  padding: 5px;
-}
-.popover.top {
-  margin-top: -5px;
-}
-.popover.right {
-  margin-left: 5px;
-}
-.popover.bottom {
-  margin-top: 5px;
-}
-.popover.left {
-  margin-left: -5px;
-}
-.popover.top .arrow {
-  bottom: 0;
-  left: 50%;
-  margin-left: -5px;
-  border-left: 5px solid transparent;
-  border-right: 5px solid transparent;
-  border-top: 5px solid #000000;
-}
-.popover.right .arrow {
-  top: 50%;
-  left: 0;
-  margin-top: -5px;
-  border-top: 5px solid transparent;
-  border-bottom: 5px solid transparent;
-  border-right: 5px solid #000000;
-}
-.popover.bottom .arrow {
-  top: 0;
-  left: 50%;
-  margin-left: -5px;
-  border-left: 5px solid transparent;
-  border-right: 5px solid transparent;
-  border-bottom: 5px solid #000000;
-}
-.popover.left .arrow {
-  top: 50%;
-  right: 0;
-  margin-top: -5px;
-  border-top: 5px solid transparent;
-  border-bottom: 5px solid transparent;
-  border-left: 5px solid #000000;
-}
-.popover .arrow {
-  position: absolute;
-  width: 0;
-  height: 0;
-}
-.popover-inner {
-  padding: 3px;
-  width: 280px;
-  overflow: hidden;
-  background: #000000;
-  background: rgba(0, 0, 0, 0.8);
-  -webkit-border-radius: 6px;
-  -moz-border-radius: 6px;
-  border-radius: 6px;
-  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-}
-.popover-title {
-  padding: 9px 15px;
-  line-height: 1;
-  background-color: #f5f5f5;
-  border-bottom: 1px solid #eee;
-  -webkit-border-radius: 3px 3px 0 0;
-  -moz-border-radius: 3px 3px 0 0;
-  border-radius: 3px 3px 0 0;
-}
-.popover-content {
-  padding: 14px;
-  background-color: #ffffff;
-  -webkit-border-radius: 0 0 3px 3px;
-  -moz-border-radius: 0 0 3px 3px;
-  border-radius: 0 0 3px 3px;
-  -webkit-background-clip: padding-box;
-  -moz-background-clip: padding-box;
-  background-clip: padding-box;
-}
-.popover-content p, .popover-content ul, .popover-content ol {
-  margin-bottom: 0;
-}
-.thumbnails {
-  margin-left: -20px;
-  list-style: none;
-  *zoom: 1;
-}
-.thumbnails:before, .thumbnails:after {
-  display: table;
-  content: "";
-}
-.thumbnails:after {
-  clear: both;
-}
-.thumbnails > li {
-  float: left;
-  margin: 0 0 18px 20px;
-}
-.thumbnail {
-  display: block;
-  padding: 4px;
-  line-height: 1;
-  border: 1px solid #ddd;
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
-  -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-a.thumbnail:hover {
-  border-color: #0088cc;
-  -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
-  -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
-  box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
-}
-.thumbnail > img {
-  display: block;
-  max-width: 100%;
-  margin-left: auto;
-  margin-right: auto;
-}
-.thumbnail .caption {
-  padding: 9px;
-}
-.label {
-  padding: 1px 3px 2px;
-  font-size: 9.75px;
-  font-weight: bold;
-  color: #ffffff;
-  text-transform: uppercase;
-  background-color: #999999;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-}
-.label-important {
-  background-color: #b94a48;
-}
-.label-warning {
-  background-color: #f89406;
-}
-.label-success {
-  background-color: #468847;
-}
-.label-info {
-  background-color: #3a87ad;
-}
-@-webkit-keyframes progress-bar-stripes {
-  from {
-    background-position: 0 0;
-  }
-  to {
-    background-position: 40px 0;
-  }
-}
-@-moz-keyframes progress-bar-stripes {
-  from {
-    background-position: 0 0;
-  }
-  to {
-    background-position: 40px 0;
-  }
-}
-@keyframes progress-bar-stripes {
-  from {
-    background-position: 0 0;
-  }
-  to {
-    background-position: 40px 0;
-  }
-}
-.progress {
-  overflow: hidden;
-  height: 18px;
-  margin-bottom: 18px;
-  background-color: #f7f7f7;
-  background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);
-  background-image: -ms-linear-gradient(top, #f5f5f5, #f9f9f9);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));
-  background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9);
-  background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9);
-  background-image: linear-gradient(top, #f5f5f5, #f9f9f9);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-}
-.progress .bar {
-  width: 0%;
-  height: 18px;
-  color: #ffffff;
-  font-size: 12px;
-  text-align: center;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #0e90d2;
-  background-image: -moz-linear-gradient(top, #149bdf, #0480be);
-  background-image: -ms-linear-gradient(top, #149bdf, #0480be);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));
-  background-image: -webkit-linear-gradient(top, #149bdf, #0480be);
-  background-image: -o-linear-gradient(top, #149bdf, #0480be);
-  background-image: linear-gradient(top, #149bdf, #0480be);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);
-  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-  -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-  -webkit-transition: width 0.6s ease;
-  -moz-transition: width 0.6s ease;
-  -ms-transition: width 0.6s ease;
-  -o-transition: width 0.6s ease;
-  transition: width 0.6s ease;
-}
-.progress-striped .bar {
-  background-color: #62c462;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
-  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  -webkit-background-size: 40px 40px;
-  -moz-background-size: 40px 40px;
-  -o-background-size: 40px 40px;
-  background-size: 40px 40px;
-}
-.progress.active .bar {
-  -webkit-animation: progress-bar-stripes 2s linear infinite;
-  -moz-animation: progress-bar-stripes 2s linear infinite;
-  animation: progress-bar-stripes 2s linear infinite;
-}
-.progress-danger .bar {
-  background-color: #dd514c;
-  background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));
-  background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: linear-gradient(top, #ee5f5b, #c43c35);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
-}
-.progress-danger.progress-striped .bar {
-  background-color: #ee5f5b;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
-  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.progress-success .bar {
-  background-color: #5eb95e;
-  background-image: -moz-linear-gradient(top, #62c462, #57a957);
-  background-image: -ms-linear-gradient(top, #62c462, #57a957);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));
-  background-image: -webkit-linear-gradient(top, #62c462, #57a957);
-  background-image: -o-linear-gradient(top, #62c462, #57a957);
-  background-image: linear-gradient(top, #62c462, #57a957);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
-}
-.progress-success.progress-striped .bar {
-  background-color: #62c462;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
-  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.progress-info .bar {
-  background-color: #4bb1cf;
-  background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));
-  background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: linear-gradient(top, #5bc0de, #339bb9);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);
-}
-.progress-info.progress-striped .bar {
-  background-color: #5bc0de;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
-  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.accordion {
-  margin-bottom: 18px;
-}
-.accordion-group {
-  margin-bottom: 2px;
-  border: 1px solid #e5e5e5;
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-}
-.accordion-heading {
-  border-bottom: 0;
-}
-.accordion-heading .accordion-toggle {
-  display: block;
-  padding: 8px 15px;
-}
-.accordion-inner {
-  padding: 9px 15px;
-  border-top: 1px solid #e5e5e5;
-}
-.carousel {
-  position: relative;
-  margin-bottom: 18px;
-  line-height: 1;
-}
-.carousel-inner {
-  overflow: hidden;
-  width: 100%;
-  position: relative;
-}
-.carousel .item {
-  display: none;
-  position: relative;
-  -webkit-transition: 0.6s ease-in-out left;
-  -moz-transition: 0.6s ease-in-out left;
-  -ms-transition: 0.6s ease-in-out left;
-  -o-transition: 0.6s ease-in-out left;
-  transition: 0.6s ease-in-out left;
-}
-.carousel .item > img {
-  display: block;
-  line-height: 1;
-}
-.carousel .active, .carousel .next, .carousel .prev {
-  display: block;
-}
-.carousel .active {
-  left: 0;
-}
-.carousel .next, .carousel .prev {
-  position: absolute;
-  top: 0;
-  width: 100%;
-}
-.carousel .next {
-  left: 100%;
-}
-.carousel .prev {
-  left: -100%;
-}
-.carousel .next.left, .carousel .prev.right {
-  left: 0;
-}
-.carousel .active.left {
-  left: -100%;
-}
-.carousel .active.right {
-  left: 100%;
-}
-.carousel-control {
-  position: absolute;
-  top: 40%;
-  left: 15px;
-  width: 40px;
-  height: 40px;
-  margin-top: -20px;
-  font-size: 60px;
-  font-weight: 100;
-  line-height: 30px;
-  color: #ffffff;
-  text-align: center;
-  background: #222222;
-  border: 3px solid #ffffff;
-  -webkit-border-radius: 23px;
-  -moz-border-radius: 23px;
-  border-radius: 23px;
-  opacity: 0.5;
-  filter: alpha(opacity=50);
-}
-.carousel-control.right {
-  left: auto;
-  right: 15px;
-}
-.carousel-control:hover {
-  color: #ffffff;
-  text-decoration: none;
-  opacity: 0.9;
-  filter: alpha(opacity=90);
-}
-.carousel-caption {
-  position: absolute;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  padding: 10px 15px 5px;
-  background: #333333;
-  background: rgba(0, 0, 0, 0.75);
-}
-.carousel-caption h4, .carousel-caption p {
-  color: #ffffff;
-}
-.hero-unit {
-  padding: 60px;
-  margin-bottom: 30px;
-  background-color: #f5f5f5;
-  -webkit-border-radius: 6px;
-  -moz-border-radius: 6px;
-  border-radius: 6px;
-}
-.hero-unit h1 {
-  margin-bottom: 0;
-  font-size: 60px;
-  line-height: 1;
-  letter-spacing: -1px;
-}
-.hero-unit p {
-  font-size: 18px;
-  font-weight: 200;
-  line-height: 27px;
-}
-.pull-right {
-  float: right;
-}
-.pull-left {
-  float: left;
-}
-.hide {
-  display: none;
-}
-.show {
-  display: block;
-}
-.invisible {
-  visibility: hidden;
-}
diff --git a/assets/css/docs.css b/assets/css/docs.css
deleted file mode 100644
index ab9a080..0000000
--- a/assets/css/docs.css
+++ /dev/null
@@ -1,252 +0,0 @@
-body {
-  position: relative;
-  background-color: #fff;
-  background-repeat: repeat-x;
-  background-position: 0 40px;
-}
-
-section {
-  padding-top: 30px;
-}
-
-hr.soften {
-  height: 1px;
-  margin: 54px 0;
-  background-image: -webkit-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0));
-  background-image:    -moz-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0));
-  background-image:     -ms-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0));
-  background-image:      -o-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0));
-  border: 0;
-}
-
-.jumbotron {
-  position: relative;
-}
-.jumbotron h1 {
-  margin-bottom: 9px;
-  font-size: 81px;
-  letter-spacing: -1px;
-  line-height: 1;
-}
-.jumbotron p {
-  margin-bottom: 18px;
-  font-size: 25px;
-  font-weight: 300;
-  line-height: 36px;
-  color: #333;
-}
-.jumbotron .btn-large {
-  font-size: 20px;
-  font-weight: normal;
-  padding: 14px 24px;
-  margin-right: 10px;
-  -webkit-border-radius: 6px;
-     -moz-border-radius: 6px;
-          border-radius: 6px;
-}
-.jumbotron .download-info {
-  font-size: 16px;
-  color: #999;
-}
-
-/* Masthead (docs home) */
-.masthead {
-  padding-top: 36px;
-  margin-bottom: 72px;
-}
-.masthead h1,
-.masthead p {
-  text-align: center;
-}
-.masthead h1 {
-  margin-bottom: 18px;
-}
-.masthead p {
-  margin: 0 5% 18px;
-  font-size: 30px;
-  line-height: 36px;
-}
-
-.subhead {
-  padding-top: 40px;
-  padding-bottom: 0;
-  border-bottom: 0;
-}
-.subhead h1,
-.subhead p {
-  margin-right: 0;
-}
-.subhead h1 {
-  font-size: 54px;
-}
-
-.subnav {
-  width: 100%;
-  height: 36px;
-  background-color: #eeeeee; /* Old browsers */
-  background-repeat: repeat-x; /* Repeat the gradient */
-  background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); /* FF3.6+ */
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f5f5f5), color-stop(100%,#eeeeee)); /* Chrome,Safari4+ */
-  background-image: -webkit-linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* Chrome 10+,Safari 5.1+ */
-  background-image: -ms-linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* IE10+ */
-  background-image: -o-linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* Opera 11.10+ */
-  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); /* IE6-9 */
-  background-image: linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* W3C */
-  border: 1px solid #e5e5e5;
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-}
-.subnav .nav {
-  margin-bottom: 0;
-}
-.subnav .nav > li > a {
-  margin: 0;
-  padding-top:    11px;
-  padding-bottom: 11px;
-  border-left: 1px solid #f5f5f5;
-  border-right: 1px solid #e5e5e5;
-  -webkit-border-radius: 0;
-     -moz-border-radius: 0;
-          border-radius: 0;
-}
-.subnav .nav > .active > a,
-.subnav .nav > .active > a:hover {
-  padding-left: 13px;
-  color: #777;
-  background-color: #e9e9e9;
-  border-right-color: #ddd;
-  border-left: 0;
-  -webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,.05);
-     -moz-box-shadow: inset 0 3px 5px rgba(0,0,0,.05);
-          box-shadow: inset 0 3px 5px rgba(0,0,0,.05);
-}
-.subnav .nav > .active > a .caret,
-.subnav .nav > .active > a:hover .caret {
-  border-top-color: #777;
-}
-.subnav .nav > li:first-child > a,
-.subnav .nav > li:first-child > a:hover {
-  border-left: 0;
-  padding-left: 12px;
-  -webkit-border-radius: 4px 0 0 4px;
-     -moz-border-radius: 4px 0 0 4px;
-          border-radius: 4px 0 0 4px;
-}
-.subnav .nav > li:last-child > a {
-  border-right: 0;
-}
-.subnav .dropdown-menu {
-  -webkit-border-radius: 0 0 4px 4px;
-     -moz-border-radius: 0 0 4px 4px;
-          border-radius: 0 0 4px 4px;
-}
-
-.quick-links {
-  min-height: 30px;
-  padding: 5px 20px;
-  margin: 36px 0;
-  list-style: none;
-  text-align: center;
-  overflow: hidden;
-}
-.quick-links li {
-  display: inline;
-  margin: 0 5px;
-}
-.quick-links .divider {
-  color: #999;
-}
-
-.marketing .row {
-  margin-bottom: 9px;
-}
-.marketing h1 {
-  margin: 36px 0 27px;
-  font-size: 40px;
-  font-weight: 300;
-  text-align: center;
-}
-.marketing h2,
-.marketing h3 {
-  font-weight: 300;
-}
-.marketing h2 {
-  font-size: 22px;
-}
-.marketing p {
-  margin-right: 10px;
-}
-.marketing .bs-icon {
-  float: left;
-  margin: 7px 10px 0 0;
-  opacity: .8;
-}
-.marketing .small-bs-icon {
-  float: left;
-  margin: 4px 5px 0 0;
-}
-
-.footer {
-  margin-top: 45px;
-  padding: 35px 0 36px;
-  border-top: 1px solid #e5e5e5;
-}
-.footer p {
-  margin-bottom: 0;
-  color: #555;
-}
-
-pre.prettyprint {
-  overflow: hidden;
-}
-
-.browser-support {
-  max-width: 100%;
-}
-
-h2 + table,
-h3 + table,
-h4 + table,
-h2 + .row {
-  margin-top: 5px;
-}
-
-form.well {
-  padding: 14px;
-}
-
-/* Tighten up spacing */
-.well hr {
-  margin: 18px 0;
-}
-
-.recommended {
-  color: #468847;
-  background-color: #DFF0D8;
-}
-
-code,pre {
-	color: #25587E;
-}
-
-code {
-  background-color: #fafafc !important;
-  border: none !important;
-}
-
-.label-danger {
-  background-color: #d9534f;
-}
-
-body, p, li {
-    line-height: 20px;    
-    font-size: 16px;
-    margin-bottom: 24px;
-}
-
-li {
-    line-height: 18px;    
-    font-size: 16px;
-    margin-bottom: 10px;
-}
diff --git a/assets/js/bootstrap/bootstrap.js b/assets/js/bootstrap/bootstrap.js
deleted file mode 100644
index 49aceca..0000000
--- a/assets/js/bootstrap/bootstrap.js
+++ /dev/null
@@ -1,1734 +0,0 @@
-/* ===================================================
- * bootstrap-transition.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#transitions
- * ===================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
-
-!function( $ ) {
-
-  $(function () {
-
-    "use strict"
-
-    /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
-     * ======================================================= */
-
-    $.support.transition = (function () {
-      var thisBody = document.body || document.documentElement
-        , thisStyle = thisBody.style
-        , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
-
-      return support && {
-        end: (function () {
-          var transitionEnd = "TransitionEnd"
-          if ( $.browser.webkit ) {
-          	transitionEnd = "webkitTransitionEnd"
-          } else if ( $.browser.mozilla ) {
-          	transitionEnd = "transitionend"
-          } else if ( $.browser.opera ) {
-          	transitionEnd = "oTransitionEnd"
-          }
-          return transitionEnd
-        }())
-      }
-    })()
-
-  })
-  
-}( window.jQuery )
-
-/* =========================================================
- * bootstrap-modal.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#modals
- * =========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================= */
-
-
-!function( $ ){
-
-  "use strict"
-
- /* MODAL CLASS DEFINITION
-  * ====================== */
-
-  var Modal = function ( content, options ) {
-    this.options = options
-    this.$element = $(content)
-      .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
-  }
-
-  Modal.prototype = {
-
-      constructor: Modal
-
-    , toggle: function () {
-        return this[!this.isShown ? 'show' : 'hide']()
-      }
-
-    , show: function () {
-        var that = this
-
-        if (this.isShown) return
-
-        $('body').addClass('modal-open')
-
-        this.isShown = true
-        this.$element.trigger('show')
-
-        escape.call(this)
-        backdrop.call(this, function () {
-          var transition = $.support.transition && that.$element.hasClass('fade')
-
-          !that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position
-
-          that.$element
-            .show()
-
-          if (transition) {
-            that.$element[0].offsetWidth // force reflow
-          }
-
-          that.$element.addClass('in')
-
-          transition ?
-            that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
-            that.$element.trigger('shown')
-
-        })
-      }
-
-    , hide: function ( e ) {
-        e && e.preventDefault()
-
-        if (!this.isShown) return
-
-        var that = this
-        this.isShown = false
-
-        $('body').removeClass('modal-open')
-
-        escape.call(this)
-
-        this.$element
-          .trigger('hide')
-          .removeClass('in')
-
-        $.support.transition && this.$element.hasClass('fade') ?
-          hideWithTransition.call(this) :
-          hideModal.call(this)
-      }
-
-  }
-
-
- /* MODAL PRIVATE METHODS
-  * ===================== */
-
-  function hideWithTransition() {
-    var that = this
-      , timeout = setTimeout(function () {
-          that.$element.off($.support.transition.end)
-          hideModal.call(that)
-        }, 500)
-
-    this.$element.one($.support.transition.end, function () {
-      clearTimeout(timeout)
-      hideModal.call(that)
-    })
-  }
-
-  function hideModal( that ) {
-    this.$element
-      .hide()
-      .trigger('hidden')
-
-    backdrop.call(this)
-  }
-
-  function backdrop( callback ) {
-    var that = this
-      , animate = this.$element.hasClass('fade') ? 'fade' : ''
-
-    if (this.isShown && this.options.backdrop) {
-      var doAnimate = $.support.transition && animate
-
-      this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
-        .appendTo(document.body)
-
-      if (this.options.backdrop != 'static') {
-        this.$backdrop.click($.proxy(this.hide, this))
-      }
-
-      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
-
-      this.$backdrop.addClass('in')
-
-      doAnimate ?
-        this.$backdrop.one($.support.transition.end, callback) :
-        callback()
-
-    } else if (!this.isShown && this.$backdrop) {
-      this.$backdrop.removeClass('in')
-
-      $.support.transition && this.$element.hasClass('fade')?
-        this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) :
-        removeBackdrop.call(this)
-
-    } else if (callback) {
-      callback()
-    }
-  }
-
-  function removeBackdrop() {
-    this.$backdrop.remove()
-    this.$backdrop = null
-  }
-
-  function escape() {
-    var that = this
-    if (this.isShown && this.options.keyboard) {
-      $(document).on('keyup.dismiss.modal', function ( e ) {
-        e.which == 27 && that.hide()
-      })
-    } else if (!this.isShown) {
-      $(document).off('keyup.dismiss.modal')
-    }
-  }
-
-
- /* MODAL PLUGIN DEFINITION
-  * ======================= */
-
-  $.fn.modal = function ( option ) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('modal')
-        , options = $.extend({}, $.fn.modal.defaults, typeof option == 'object' && option)
-      if (!data) $this.data('modal', (data = new Modal(this, options)))
-      if (typeof option == 'string') data[option]()
-      else if (options.show) data.show()
-    })
-  }
-
-  $.fn.modal.defaults = {
-      backdrop: true
-    , keyboard: true
-    , show: true
-  }
-
-  $.fn.modal.Constructor = Modal
-
-
- /* MODAL DATA-API
-  * ============== */
-
-  $(function () {
-    $('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
-      var $this = $(this), href
-        , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
-        , option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data())
-
-      e.preventDefault()
-      $target.modal(option)
-    })
-  })
-
-}( window.jQuery )
-
-/* ============================================================
- * bootstrap-dropdown.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#dropdowns
- * ============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
-
-
-!function( $ ){
-
-  "use strict"
-
- /* DROPDOWN CLASS DEFINITION
-  * ========================= */
-
-  var toggle = '[data-toggle="dropdown"]'
-    , Dropdown = function ( element ) {
-        var $el = $(element).on('click.dropdown.data-api', this.toggle)
-        $('html').on('click.dropdown.data-api', function () {
-          $el.parent().removeClass('open')
-        })
-      }
-
-  Dropdown.prototype = {
-
-    constructor: Dropdown
-
-  , toggle: function ( e ) {
-      var $this = $(this)
-        , selector = $this.attr('data-target')
-        , $parent
-        , isActive
-
-      if (!selector) {
-        selector = $this.attr('href')
-        selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
-      }
-
-      $parent = $(selector)
-      $parent.length || ($parent = $this.parent())
-
-      isActive = $parent.hasClass('open')
-
-      clearMenus()
-      !isActive && $parent.toggleClass('open')
-
-      return false
-    }
-
-  }
-
-  function clearMenus() {
-    $(toggle).parent().removeClass('open')
-  }
-
-
-  /* DROPDOWN PLUGIN DEFINITION
-   * ========================== */
-
-  $.fn.dropdown = function ( option ) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('dropdown')
-      if (!data) $this.data('dropdown', (data = new Dropdown(this)))
-      if (typeof option == 'string') data[option].call($this)
-    })
-  }
-
-  $.fn.dropdown.Constructor = Dropdown
-
-
-  /* APPLY TO STANDARD DROPDOWN ELEMENTS
-   * =================================== */
-
-  $(function () {
-    $('html').on('click.dropdown.data-api', clearMenus)
-    $('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
-  })
-
-}( window.jQuery )
-
-/* =============================================================
- * bootstrap-scrollspy.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#scrollspy
- * =============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================== */
-
-!function ( $ ) {
-
-  "use strict"
-
-  /* SCROLLSPY CLASS DEFINITION
-   * ========================== */
-
-  function ScrollSpy( element, options) {
-    var process = $.proxy(this.process, this)
-      , $element = $(element).is('body') ? $(window) : $(element)
-      , href
-    this.options = $.extend({}, $.fn.scrollspy.defaults, options)
-    this.$scrollElement = $element.on('scroll.scroll.data-api', process)
-    this.selector = (this.options.target
-      || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
-      || '') + ' .nav li > a'
-    this.$body = $('body').on('click.scroll.data-api', this.selector, process)
-    this.refresh()
-    this.process()
-  }
-
-  ScrollSpy.prototype = {
-
-      constructor: ScrollSpy
-
-    , refresh: function () {
-        this.targets = this.$body
-          .find(this.selector)
-          .map(function () {
-            var href = $(this).attr('href')
-            return /^#\w/.test(href) && $(href).length ? href : null
-          })
-
-        this.offsets = $.map(this.targets, function (id) {
-          return $(id).position().top
-        })
-      }
-
-    , process: function () {
-        var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
-          , offsets = this.offsets
-          , targets = this.targets
-          , activeTarget = this.activeTarget
-          , i
-
-        for (i = offsets.length; i--;) {
-          activeTarget != targets[i]
-            && scrollTop >= offsets[i]
-            && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
-            && this.activate( targets[i] )
-        }
-      }
-
-    , activate: function (target) {
-        var active
-
-        this.activeTarget = target
-
-        this.$body
-          .find(this.selector).parent('.active')
-          .removeClass('active')
-
-        active = this.$body
-          .find(this.selector + '[href="' + target + '"]')
-          .parent('li')
-          .addClass('active')
-
-        if ( active.parent('.dropdown-menu') )  {
-          active.closest('li.dropdown').addClass('active')
-        }
-      }
-
-  }
-
-
- /* SCROLLSPY PLUGIN DEFINITION
-  * =========================== */
-
-  $.fn.scrollspy = function ( option ) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('scrollspy')
-        , options = typeof option == 'object' && option
-      if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.scrollspy.Constructor = ScrollSpy
-
-  $.fn.scrollspy.defaults = {
-    offset: 10
-  }
-
-
- /* SCROLLSPY DATA-API
-  * ================== */
-
-  $(function () {
-    $('[data-spy="scroll"]').each(function () {
-      var $spy = $(this)
-      $spy.scrollspy($spy.data())
-    })
-  })
-
-}( window.jQuery )
-
-/* ========================================================
- * bootstrap-tab.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#tabs
- * ========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ======================================================== */
-
-
-!function( $ ){
-
-  "use strict"
-
- /* TAB CLASS DEFINITION
-  * ==================== */
-
-  var Tab = function ( element ) {
-    this.element = $(element)
-  }
-
-  Tab.prototype = {
-
-    constructor: Tab
-
-  , show: function () {
-      var $this = this.element
-        , $ul = $this.closest('ul:not(.dropdown-menu)')
-        , selector = $this.attr('data-target')
-        , previous
-        , $target
-
-      if (!selector) {
-        selector = $this.attr('href')
-        selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
-      }
-
-      if ( $this.parent('li').hasClass('active') ) return
-
-      previous = $ul.find('.active a').last()[0]
-
-      $this.trigger({
-        type: 'show'
-      , relatedTarget: previous
-      })
-
-      $target = $(selector)
-
-      this.activate($this.parent('li'), $ul)
-      this.activate($target, $target.parent(), function () {
-        $this.trigger({
-          type: 'shown'
-        , relatedTarget: previous
-        })
-      })
-    }
-
-  , activate: function ( element, container, callback) {
-      var $active = container.find('> .active')
-        , transition = callback
-            && $.support.transition
-            && $active.hasClass('fade')
-
-      function next() {
-        $active
-          .removeClass('active')
-          .find('> .dropdown-menu > .active')
-          .removeClass('active')
-
-        element.addClass('active')
-
-        if (transition) {
-          element[0].offsetWidth // reflow for transition
-          element.addClass('in')
-        } else {
-          element.removeClass('fade')
-        }
-
-        if ( element.parent('.dropdown-menu') ) {
-          element.closest('li.dropdown').addClass('active')
-        }
-
-        callback && callback()
-      }
-
-      transition ?
-        $active.one($.support.transition.end, next) :
-        next()
-
-      $active.removeClass('in')
-    }
-  }
-
-
- /* TAB PLUGIN DEFINITION
-  * ===================== */
-
-  $.fn.tab = function ( option ) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('tab')
-      if (!data) $this.data('tab', (data = new Tab(this)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.tab.Constructor = Tab
-
-
- /* TAB DATA-API
-  * ============ */
-
-  $(function () {
-    $('body').on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
-      e.preventDefault()
-      $(this).tab('show')
-    })
-  })
-
-}( window.jQuery )
-
-/* ===========================================================
- * bootstrap-tooltip.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#tooltips
- * Inspired by the original jQuery.tipsy by Jason Frame
- * ===========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
-
-!function( $ ) {
-
-  "use strict"
-
- /* TOOLTIP PUBLIC CLASS DEFINITION
-  * =============================== */
-
-  var Tooltip = function ( element, options ) {
-    this.init('tooltip', element, options)
-  }
-
-  Tooltip.prototype = {
-
-    constructor: Tooltip
-
-  , init: function ( type, element, options ) {
-      var eventIn
-        , eventOut
-
-      this.type = type
-      this.$element = $(element)
-      this.options = this.getOptions(options)
-      this.enabled = true
-
-      if (this.options.trigger != 'manual') {
-        eventIn  = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
-        eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
-        this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))
-        this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))
-      }
-
-      this.options.selector ?
-        (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
-        this.fixTitle()
-    }
-
-  , getOptions: function ( options ) {
-      options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
-
-      if (options.delay && typeof options.delay == 'number') {
-        options.delay = {
-          show: options.delay
-        , hide: options.delay
-        }
-      }
-
-      return options
-    }
-
-  , enter: function ( e ) {
-      var self = $(e.currentTarget)[this.type](this._options).data(this.type)
-
-      if (!self.options.delay || !self.options.delay.show) {
-        self.show()
-      } else {
-        self.hoverState = 'in'
-        setTimeout(function() {
-          if (self.hoverState == 'in') {
-            self.show()
-          }
-        }, self.options.delay.show)
-      }
-    }
-
-  , leave: function ( e ) {
-      var self = $(e.currentTarget)[this.type](this._options).data(this.type)
-
-      if (!self.options.delay || !self.options.delay.hide) {
-        self.hide()
-      } else {
-        self.hoverState = 'out'
-        setTimeout(function() {
-          if (self.hoverState == 'out') {
-            self.hide()
-          }
-        }, self.options.delay.hide)
-      }
-    }
-
-  , show: function () {
-      var $tip
-        , inside
-        , pos
-        , actualWidth
-        , actualHeight
-        , placement
-        , tp
-
-      if (this.hasContent() && this.enabled) {
-        $tip = this.tip()
-        this.setContent()
-
-        if (this.options.animation) {
-          $tip.addClass('fade')
-        }
-
-        placement = typeof this.options.placement == 'function' ?
-          this.options.placement.call(this, $tip[0], this.$element[0]) :
-          this.options.placement
-
-        inside = /in/.test(placement)
-
-        $tip
-          .remove()
-          .css({ top: 0, left: 0, display: 'block' })
-          .appendTo(inside ? this.$element : document.body)
-
-        pos = this.getPosition(inside)
-
-        actualWidth = $tip[0].offsetWidth
-        actualHeight = $tip[0].offsetHeight
-
-        switch (inside ? placement.split(' ')[1] : placement) {
-          case 'bottom':
-            tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
-            break
-          case 'top':
-            tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
-            break
-          case 'left':
-            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
-            break
-          case 'right':
-            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
-            break
-        }
-
-        $tip
-          .css(tp)
-          .addClass(placement)
-          .addClass('in')
-      }
-    }
-
-  , setContent: function () {
-      var $tip = this.tip()
-      $tip.find('.tooltip-inner').html(this.getTitle())
-      $tip.removeClass('fade in top bottom left right')
-    }
-
-  , hide: function () {
-      var that = this
-        , $tip = this.tip()
-
-      $tip.removeClass('in')
-
-      function removeWithAnimation() {
-        var timeout = setTimeout(function () {
-          $tip.off($.support.transition.end).remove()
-        }, 500)
-
-        $tip.one($.support.transition.end, function () {
-          clearTimeout(timeout)
-          $tip.remove()
-        })
-      }
-
-      $.support.transition && this.$tip.hasClass('fade') ?
-        removeWithAnimation() :
-        $tip.remove()
-    }
-
-  , fixTitle: function () {
-      var $e = this.$element
-      if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
-        $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
-      }
-    }
-
-  , hasContent: function () {
-      return this.getTitle()
-    }
-
-  , getPosition: function (inside) {
-      return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
-        width: this.$element[0].offsetWidth
-      , height: this.$element[0].offsetHeight
-      })
-    }
-
-  , getTitle: function () {
-      var title
-        , $e = this.$element
-        , o = this.options
-
-      title = $e.attr('data-original-title')
-        || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
-
-      title = title.toString().replace(/(^\s*|\s*$)/, "")
-
-      return title
-    }
-
-  , tip: function () {
-      return this.$tip = this.$tip || $(this.options.template)
-    }
-
-  , validate: function () {
-      if (!this.$element[0].parentNode) {
-        this.hide()
-        this.$element = null
-        this.options = null
-      }
-    }
-
-  , enable: function () {
-      this.enabled = true
-    }
-
-  , disable: function () {
-      this.enabled = false
-    }
-
-  , toggleEnabled: function () {
-      this.enabled = !this.enabled
-    }
-
-  , toggle: function () {
-      this[this.tip().hasClass('in') ? 'hide' : 'show']()
-    }
-
-  }
-
-
- /* TOOLTIP PLUGIN DEFINITION
-  * ========================= */
-
-  $.fn.tooltip = function ( option ) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('tooltip')
-        , options = typeof option == 'object' && option
-      if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.tooltip.Constructor = Tooltip
-
-  $.fn.tooltip.defaults = {
-    animation: true
-  , delay: 0
-  , selector: false
-  , placement: 'top'
-  , trigger: 'hover'
-  , title: ''
-  , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
-  }
-
-}( window.jQuery )
-
-/* ===========================================================
- * bootstrap-popover.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#popovers
- * ===========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * =========================================================== */
-
-
-!function( $ ) {
-
- "use strict"
-
-  var Popover = function ( element, options ) {
-    this.init('popover', element, options)
-  }
-
-  /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
-     ========================================== */
-
-  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
-
-    constructor: Popover
-
-  , setContent: function () {
-      var $tip = this.tip()
-        , title = this.getTitle()
-        , content = this.getContent()
-
-      $tip.find('.popover-title')[ $.type(title) == 'object' ? 'append' : 'html' ](title)
-      $tip.find('.popover-content > *')[ $.type(content) == 'object' ? 'append' : 'html' ](content)
-
-      $tip.removeClass('fade top bottom left right in')
-    }
-
-  , hasContent: function () {
-      return this.getTitle() || this.getContent()
-    }
-
-  , getContent: function () {
-      var content
-        , $e = this.$element
-        , o = this.options
-
-      content = $e.attr('data-content')
-        || (typeof o.content == 'function' ? o.content.call($e[0]) :  o.content)
-
-      content = content.toString().replace(/(^\s*|\s*$)/, "")
-
-      return content
-    }
-
-  , tip: function() {
-      if (!this.$tip) {
-        this.$tip = $(this.options.template)
-      }
-      return this.$tip
-    }
-
-  })
-
-
- /* POPOVER PLUGIN DEFINITION
-  * ======================= */
-
-  $.fn.popover = function ( option ) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('popover')
-        , options = typeof option == 'object' && option
-      if (!data) $this.data('popover', (data = new Popover(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.popover.Constructor = Popover
-
-  $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
-    placement: 'right'
-  , content: ''
-  , template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'
-  })
-
-}( window.jQuery )
-
-/* ==========================================================
- * bootstrap-alert.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#alerts
- * ==========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
-
-
-!function( $ ){
-
-  "use strict"
-
- /* ALERT CLASS DEFINITION
-  * ====================== */
-
-  var dismiss = '[data-dismiss="alert"]'
-    , Alert = function ( el ) {
-        $(el).on('click', dismiss, this.close)
-      }
-
-  Alert.prototype = {
-
-    constructor: Alert
-
-  , close: function ( e ) {
-      var $this = $(this)
-        , selector = $this.attr('data-target')
-        , $parent
-
-      if (!selector) {
-        selector = $this.attr('href')
-        selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
-      }
-
-      $parent = $(selector)
-      $parent.trigger('close')
-
-      e && e.preventDefault()
-
-      $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
-
-      $parent.removeClass('in')
-
-      function removeElement() {
-        $parent.remove()
-        $parent.trigger('closed')
-      }
-
-      $.support.transition && $parent.hasClass('fade') ?
-        $parent.on($.support.transition.end, removeElement) :
-        removeElement()
-    }
-
-  }
-
-
- /* ALERT PLUGIN DEFINITION
-  * ======================= */
-
-  $.fn.alert = function ( option ) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('alert')
-      if (!data) $this.data('alert', (data = new Alert(this)))
-      if (typeof option == 'string') data[option].call($this)
-    })
-  }
-
-  $.fn.alert.Constructor = Alert
-
-
- /* ALERT DATA-API
-  * ============== */
-
-  $(function () {
-    $('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
-  })
-
-}( window.jQuery )
-
-/* ============================================================
- * bootstrap-button.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#buttons
- * ============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
-
-!function( $ ){
-
-  "use strict"
-
- /* BUTTON PUBLIC CLASS DEFINITION
-  * ============================== */
-
-  var Button = function ( element, options ) {
-    this.$element = $(element)
-    this.options = $.extend({}, $.fn.button.defaults, options)
-  }
-
-  Button.prototype = {
-
-      constructor: Button
-
-    , setState: function ( state ) {
-        var d = 'disabled'
-          , $el = this.$element
-          , data = $el.data()
-          , val = $el.is('input') ? 'val' : 'html'
-
-        state = state + 'Text'
-        data.resetText || $el.data('resetText', $el[val]())
-
-        $el[val](data[state] || this.options[state])
-
-        // push to event loop to allow forms to submit
-        setTimeout(function () {
-          state == 'loadingText' ?
-            $el.addClass(d).attr(d, d) :
-            $el.removeClass(d).removeAttr(d)
-        }, 0)
-      }
-
-    , toggle: function () {
-        var $parent = this.$element.parent('[data-toggle="buttons-radio"]')
-
-        $parent && $parent
-          .find('.active')
-          .removeClass('active')
-
-        this.$element.toggleClass('active')
-      }
-
-  }
-
-
- /* BUTTON PLUGIN DEFINITION
-  * ======================== */
-
-  $.fn.button = function ( option ) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('button')
-        , options = typeof option == 'object' && option
-      if (!data) $this.data('button', (data = new Button(this, options)))
-      if (option == 'toggle') data.toggle()
-      else if (option) data.setState(option)
-    })
-  }
-
-  $.fn.button.defaults = {
-    loadingText: 'loading...'
-  }
-
-  $.fn.button.Constructor = Button
-
-
- /* BUTTON DATA-API
-  * =============== */
-
-  $(function () {
-    $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) {
-      $(e.target).button('toggle')
-    })
-  })
-
-}( window.jQuery )
-
-/* =============================================================
- * bootstrap-collapse.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#collapse
- * =============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
-
-!function( $ ){
-
-  "use strict"
-
-  var Collapse = function ( element, options ) {
-  	this.$element = $(element)
-    this.options = $.extend({}, $.fn.collapse.defaults, options)
-
-    if (this.options["parent"]) {
-      this.$parent = $(this.options["parent"])
-    }
-
-    this.options.toggle && this.toggle()
-  }
-
-  Collapse.prototype = {
-
-    constructor: Collapse
-
-  , dimension: function () {
-      var hasWidth = this.$element.hasClass('width')
-      return hasWidth ? 'width' : 'height'
-    }
-
-  , show: function () {
-      var dimension = this.dimension()
-        , scroll = $.camelCase(['scroll', dimension].join('-'))
-        , actives = this.$parent && this.$parent.find('.in')
-        , hasData
-
-      if (actives && actives.length) {
-        hasData = actives.data('collapse')
-        actives.collapse('hide')
-        hasData || actives.data('collapse', null)
-      }
-
-      this.$element[dimension](0)
-      this.transition('addClass', 'show', 'shown')
-      this.$element[dimension](this.$element[0][scroll])
-
-    }
-
-  , hide: function () {
-      var dimension = this.dimension()
-      this.reset(this.$element[dimension]())
-      this.transition('removeClass', 'hide', 'hidden')
-      this.$element[dimension](0)
-    }
-
-  , reset: function ( size ) {
-      var dimension = this.dimension()
-
-      this.$element
-        .removeClass('collapse')
-        [dimension](size || 'auto')
-        [0].offsetWidth
-
-      this.$element.addClass('collapse')
-    }
-
-  , transition: function ( method, startEvent, completeEvent ) {
-      var that = this
-        , complete = function () {
-            if (startEvent == 'show') that.reset()
-            that.$element.trigger(completeEvent)
-          }
-
-      this.$element
-        .trigger(startEvent)
-        [method]('in')
-
-      $.support.transition && this.$element.hasClass('collapse') ?
-        this.$element.one($.support.transition.end, complete) :
-        complete()
-  	}
-
-  , toggle: function () {
-      this[this.$element.hasClass('in') ? 'hide' : 'show']()
-  	}
-
-  }
-
-  /* COLLAPSIBLE PLUGIN DEFINITION
-  * ============================== */
-
-  $.fn.collapse = function ( option ) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('collapse')
-        , options = typeof option == 'object' && option
-      if (!data) $this.data('collapse', (data = new Collapse(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.collapse.defaults = {
-    toggle: true
-  }
-
-  $.fn.collapse.Constructor = Collapse
-
-
- /* COLLAPSIBLE DATA-API
-  * ==================== */
-
-  $(function () {
-    $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) {
-      var $this = $(this), href
-        , target = $this.attr('data-target')
-          || e.preventDefault()
-          || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
-        , option = $(target).data('collapse') ? 'toggle' : $this.data()
-      $(target).collapse(option)
-    })
-  })
-
-}( window.jQuery )
-
-/* ==========================================================
- * bootstrap-carousel.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#carousel
- * ==========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
-
-
-!function( $ ){
-
-  "use strict"
-
- /* CAROUSEL CLASS DEFINITION
-  * ========================= */
-
-  var Carousel = function (element, options) {
-    this.$element = $(element)
-    this.options = $.extend({}, $.fn.carousel.defaults, options)
-    this.options.slide && this.slide(this.options.slide)
-  }
-
-  Carousel.prototype = {
-
-    cycle: function () {
-      this.interval = setInterval($.proxy(this.next, this), this.options.interval)
-      return this
-    }
-
-  , to: function (pos) {
-      var $active = this.$element.find('.active')
-        , children = $active.parent().children()
-        , activePos = children.index($active)
-        , that = this
-
-      if (pos > (children.length - 1) || pos < 0) return
-
-      if (this.sliding) {
-        return this.$element.one('slid', function () {
-          that.to(pos)
-        })
-      }
-
-      if (activePos == pos) {
-        return this.pause().cycle()
-      }
-
-      return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))
-    }
-
-  , pause: function () {
-      clearInterval(this.interval)
-      return this
-    }
-
-  , next: function () {
-      if (this.sliding) return
-      return this.slide('next')
-    }
-
-  , prev: function () {
-      if (this.sliding) return
-      return this.slide('prev')
-    }
-
-  , slide: function (type, next) {
-      var $active = this.$element.find('.active')
-        , $next = next || $active[type]()
-        , isCycling = this.interval
-        , direction = type == 'next' ? 'left' : 'right'
-        , fallback  = type == 'next' ? 'first' : 'last'
-        , that = this
-
-      this.sliding = true
-
-      isCycling && this.pause()
-
-      $next = $next.length ? $next : this.$element.find('.item')[fallback]()
-
-      if (!$.support.transition && this.$element.hasClass('slide')) {
-        this.$element.trigger('slide')
-        $active.removeClass('active')
-        $next.addClass('active')
-        this.sliding = false
-        this.$element.trigger('slid')
-      } else {
-        $next.addClass(type)
-        $next[0].offsetWidth // force reflow
-        $active.addClass(direction)
-        $next.addClass(direction)
-        this.$element.trigger('slide')
-        this.$element.one($.support.transition.end, function () {
-          $next.removeClass([type, direction].join(' ')).addClass('active')
-          $active.removeClass(['active', direction].join(' '))
-          that.sliding = false
-          setTimeout(function () { that.$element.trigger('slid') }, 0)
-        })
-      }
-
-      isCycling && this.cycle()
-
-      return this
-    }
-
-  }
-
-
- /* CAROUSEL PLUGIN DEFINITION
-  * ========================== */
-
-  $.fn.carousel = function ( option ) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('carousel')
-        , options = typeof option == 'object' && option
-      if (!data) $this.data('carousel', (data = new Carousel(this, options)))
-      if (typeof option == 'number') data.to(option)
-      else if (typeof option == 'string' || (option = options.slide)) data[option]()
-      else data.cycle()
-    })
-  }
-
-  $.fn.carousel.defaults = {
-    interval: 5000
-  }
-
-  $.fn.carousel.Constructor = Carousel
-
-
- /* CAROUSEL DATA-API
-  * ================= */
-
-  $(function () {
-    $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) {
-      var $this = $(this), href
-        , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
-        , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data())
-      $target.carousel(options)
-      e.preventDefault()
-    })
-  })
-
-}( window.jQuery )
-
-/* =============================================================
- * bootstrap-typeahead.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#typeahead
- * =============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
-
-!function( $ ){
-
-  "use strict"
-
-  var Typeahead = function ( element, options ) {
-    this.$element = $(element)
-    this.options = $.extend({}, $.fn.typeahead.defaults, options)
-    this.matcher = this.options.matcher || this.matcher
-    this.sorter = this.options.sorter || this.sorter
-    this.highlighter = this.options.highlighter || this.highlighter
-    this.$menu = $(this.options.menu).appendTo('body')
-    this.source = this.options.source
-    this.shown = false
-    this.listen()
-  }
-
-  Typeahead.prototype = {
-
-    constructor: Typeahead
-
-  , select: function () {
-      var val = this.$menu.find('.active').attr('data-value')
-      this.$element.val(val)
-      return this.hide()
-    }
-
-  , show: function () {
-      var pos = $.extend({}, this.$element.offset(), {
-        height: this.$element[0].offsetHeight
-      })
-
-      this.$menu.css({
-        top: pos.top + pos.height
-      , left: pos.left
-      })
-
-      this.$menu.show()
-      this.shown = true
-      return this
-    }
-
-  , hide: function () {
-      this.$menu.hide()
-      this.shown = false
-      return this
-    }
-
-  , lookup: function (event) {
-      var that = this
-        , items
-        , q
-
-      this.query = this.$element.val()
-
-      if (!this.query) {
-        return this.shown ? this.hide() : this
-      }
-
-      items = $.grep(this.source, function (item) {
-        if (that.matcher(item)) return item
-      })
-
-      items = this.sorter(items)
-
-      if (!items.length) {
-        return this.shown ? this.hide() : this
-      }
-
-      return this.render(items.slice(0, this.options.items)).show()
-    }
-
-  , matcher: function (item) {
-      return ~item.toLowerCase().indexOf(this.query.toLowerCase())
-    }
-
-  , sorter: function (items) {
-      var beginswith = []
-        , caseSensitive = []
-        , caseInsensitive = []
-        , item
-
-      while (item = items.shift()) {
-        if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
-        else if (~item.indexOf(this.query)) caseSensitive.push(item)
-        else caseInsensitive.push(item)
-      }
-
-      return beginswith.concat(caseSensitive, caseInsensitive)
-    }
-
-  , highlighter: function (item) {
-      return item.replace(new RegExp('(' + this.query + ')', 'ig'), function ($1, match) {
-        return '<strong>' + match + '</strong>'
-      })
-    }
-
-  , render: function (items) {
-      var that = this
-
-      items = $(items).map(function (i, item) {
-        i = $(that.options.item).attr('data-value', item)
-        i.find('a').html(that.highlighter(item))
-        return i[0]
-      })
-
-      items.first().addClass('active')
-      this.$menu.html(items)
-      return this
-    }
-
-  , next: function (event) {
-      var active = this.$menu.find('.active').removeClass('active')
-        , next = active.next()
-
-      if (!next.length) {
-        next = $(this.$menu.find('li')[0])
-      }
-
-      next.addClass('active')
-    }
-
-  , prev: function (event) {
-      var active = this.$menu.find('.active').removeClass('active')
-        , prev = active.prev()
-
-      if (!prev.length) {
-        prev = this.$menu.find('li').last()
-      }
-
-      prev.addClass('active')
-    }
-
-  , listen: function () {
-      this.$element
-        .on('blur',     $.proxy(this.blur, this))
-        .on('keypress', $.proxy(this.keypress, this))
-        .on('keyup',    $.proxy(this.keyup, this))
-
-      if ($.browser.webkit || $.browser.msie) {
-        this.$element.on('keydown', $.proxy(this.keypress, this))
-      }
-
-      this.$menu
-        .on('click', $.proxy(this.click, this))
-        .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
-    }
-
-  , keyup: function (e) {
-      e.stopPropagation()
-      e.preventDefault()
-
-      switch(e.keyCode) {
-        case 40: // down arrow
-        case 38: // up arrow
-          break
-
-        case 9: // tab
-        case 13: // enter
-          if (!this.shown) return
-          this.select()
-          break
-
-        case 27: // escape
-          this.hide()
-          break
-
-        default:
-          this.lookup()
-      }
-
-  }
-
-  , keypress: function (e) {
-      e.stopPropagation()
-      if (!this.shown) return
-
-      switch(e.keyCode) {
-        case 9: // tab
-        case 13: // enter
-        case 27: // escape
-          e.preventDefault()
-          break
-
-        case 38: // up arrow
-          e.preventDefault()
-          this.prev()
-          break
-
-        case 40: // down arrow
-          e.preventDefault()
-          this.next()
-          break
-      }
-    }
-
-  , blur: function (e) {
-      var that = this
-      e.stopPropagation()
-      e.preventDefault()
-      setTimeout(function () { that.hide() }, 150)
-    }
-
-  , click: function (e) {
-      e.stopPropagation()
-      e.preventDefault()
-      this.select()
-    }
-
-  , mouseenter: function (e) {
-      this.$menu.find('.active').removeClass('active')
-      $(e.currentTarget).addClass('active')
-    }
-
-  }
-
-
-  /* TYPEAHEAD PLUGIN DEFINITION
-   * =========================== */
-
-  $.fn.typeahead = function ( option ) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('typeahead')
-        , options = typeof option == 'object' && option
-      if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.typeahead.defaults = {
-    source: []
-  , items: 8
-  , menu: '<ul class="typeahead dropdown-menu"></ul>'
-  , item: '<li><a href="#"></a></li>'
-  }
-
-  $.fn.typeahead.Constructor = Typeahead
-
-
- /* TYPEAHEAD DATA-API
-  * ================== */
-
-  $(function () {
-    $('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
-      var $this = $(this)
-      if ($this.data('typeahead')) return
-      e.preventDefault()
-      $this.typeahead($this.data())
-    })
-  })
-
-}( window.jQuery )
diff --git a/assets/js/jquery/jquery-1.7.1.js b/assets/js/jquery/jquery-1.7.1.js
deleted file mode 100644
index 74ce411..0000000
--- a/assets/js/jquery/jquery-1.7.1.js
+++ /dev/null
@@ -1,9266 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.7.1
- * http://jquery.com/
- *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Mon Nov 21 21:11:03 2011 -0500
- */
-(function( window, undefined ) {
-
-// Use the correct document accordingly with window argument (sandbox)
-var document = window.document,
-	navigator = window.navigator,
-	location = window.location;
-var jQuery = (function() {
-
-// Define a local copy of jQuery
-var jQuery = function( selector, context ) {
-		// The jQuery object is actually just the init constructor 'enhanced'
-		return new jQuery.fn.init( selector, context, rootjQuery );
-	},
-
-	// Map over jQuery in case of overwrite
-	_jQuery = window.jQuery,
-
-	// Map over the $ in case of overwrite
-	_$ = window.$,
-
-	// A central reference to the root jQuery(document)
-	rootjQuery,
-
-	// A simple way to check for HTML strings or ID strings
-	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
-	quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
-
-	// Check if a string has a non-whitespace character in it
-	rnotwhite = /\S/,
-
-	// Used for trimming whitespace
-	trimLeft = /^\s+/,
-	trimRight = /\s+$/,
-
-	// Match a standalone tag
-	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
-
-	// JSON RegExp
-	rvalidchars = /^[\],:{}\s]*$/,
-	rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
-	rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
-	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
-
-	// Useragent RegExp
-	rwebkit = /(webkit)[ \/]([\w.]+)/,
-	ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
-	rmsie = /(msie) ([\w.]+)/,
-	rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
-
-	// Matches dashed string for camelizing
-	rdashAlpha = /-([a-z]|[0-9])/ig,
-	rmsPrefix = /^-ms-/,
-
-	// Used by jQuery.camelCase as callback to replace()
-	fcamelCase = function( all, letter ) {
-		return ( letter + "" ).toUpperCase();
-	},
-
-	// Keep a UserAgent string for use with jQuery.browser
-	userAgent = navigator.userAgent,
-
-	// For matching the engine and version of the browser
-	browserMatch,
-
-	// The deferred used on DOM ready
-	readyList,
-
-	// The ready event handler
-	DOMContentLoaded,
-
-	// Save a reference to some core methods
-	toString = Object.prototype.toString,
-	hasOwn = Object.prototype.hasOwnProperty,
-	push = Array.prototype.push,
-	slice = Array.prototype.slice,
-	trim = String.prototype.trim,
-	indexOf = Array.prototype.indexOf,
-
-	// [[Class]] -> type pairs
-	class2type = {};
-
-jQuery.fn = jQuery.prototype = {
-	constructor: jQuery,
-	init: function( selector, context, rootjQuery ) {
-		var match, elem, ret, doc;
-
-		// Handle $(""), $(null), or $(undefined)
-		if ( !selector ) {
-			return this;
-		}
-
-		// Handle $(DOMElement)
-		if ( selector.nodeType ) {
-			this.context = this[0] = selector;
-			this.length = 1;
-			return this;
-		}
-
-		// The body element only exists once, optimize finding it
-		if ( selector === "body" && !context && document.body ) {
-			this.context = document;
-			this[0] = document.body;
-			this.selector = selector;
-			this.length = 1;
-			return this;
-		}
-
-		// Handle HTML strings
-		if ( typeof selector === "string" ) {
-			// Are we dealing with HTML string or an ID?
-			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
-				// Assume that strings that start and end with <> are HTML and skip the regex check
-				match = [ null, selector, null ];
-
-			} else {
-				match = quickExpr.exec( selector );
-			}
-
-			// Verify a match, and that no context was specified for #id
-			if ( match && (match[1] || !context) ) {
-
-				// HANDLE: $(html) -> $(array)
-				if ( match[1] ) {
-					context = context instanceof jQuery ? context[0] : context;
-					doc = ( context ? context.ownerDocument || context : document );
-
-					// If a single string is passed in and it's a single tag
-					// just do a createElement and skip the rest
-					ret = rsingleTag.exec( selector );
-
-					if ( ret ) {
-						if ( jQuery.isPlainObject( context ) ) {
-							selector = [ document.createElement( ret[1] ) ];
-							jQuery.fn.attr.call( selector, context, true );
-
-						} else {
-							selector = [ doc.createElement( ret[1] ) ];
-						}
-
-					} else {
-						ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
-						selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes;
-					}
-
-					return jQuery.merge( this, selector );
-
-				// HANDLE: $("#id")
-				} else {
-					elem = document.getElementById( match[2] );
-
-					// Check parentNode to catch when Blackberry 4.6 returns
-					// nodes that are no longer in the document #6963
-					if ( elem && elem.parentNode ) {
-						// Handle the case where IE and Opera return items
-						// by name instead of ID
-						if ( elem.id !== match[2] ) {
-							return rootjQuery.find( selector );
-						}
-
-						// Otherwise, we inject the element directly into the jQuery object
-						this.length = 1;
-						this[0] = elem;
-					}
-
-					this.context = document;
-					this.selector = selector;
-					return this;
-				}
-
-			// HANDLE: $(expr, $(...))
-			} else if ( !context || context.jquery ) {
-				return ( context || rootjQuery ).find( selector );
-
-			// HANDLE: $(expr, context)
-			// (which is just equivalent to: $(context).find(expr)
-			} else {
-				return this.constructor( context ).find( selector );
-			}
-
-		// HANDLE: $(function)
-		// Shortcut for document ready
-		} else if ( jQuery.isFunction( selector ) ) {
-			return rootjQuery.ready( selector );
-		}
-
-		if ( selector.selector !== undefined ) {
-			this.selector = selector.selector;
-			this.context = selector.context;
-		}
-
-		return jQuery.makeArray( selector, this );
-	},
-
-	// Start with an empty selector
-	selector: "",
-
-	// The current version of jQuery being used
-	jquery: "1.7.1",
-
-	// The default length of a jQuery object is 0
-	length: 0,
-
-	// The number of elements contained in the matched element set
-	size: function() {
-		return this.length;
-	},
-
-	toArray: function() {
-		return slice.call( this, 0 );
-	},
-
-	// Get the Nth element in the matched element set OR
-	// Get the whole matched element set as a clean array
-	get: function( num ) {
-		return num == null ?
-
-			// Return a 'clean' array
-			this.toArray() :
-
-			// Return just the object
-			( num < 0 ? this[ this.length + num ] : this[ num ] );
-	},
-
-	// Take an array of elements and push it onto the stack
-	// (returning the new matched element set)
-	pushStack: function( elems, name, selector ) {
-		// Build a new jQuery matched element set
-		var ret = this.constructor();
-
-		if ( jQuery.isArray( elems ) ) {
-			push.apply( ret, elems );
-
-		} else {
-			jQuery.merge( ret, elems );
-		}
-
-		// Add the old object onto the stack (as a reference)
-		ret.prevObject = this;
-
-		ret.context = this.context;
-
-		if ( name === "find" ) {
-			ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
-		} else if ( name ) {
-			ret.selector = this.selector + "." + name + "(" + selector + ")";
-		}
-
-		// Return the newly-formed element set
-		return ret;
-	},
-
-	// Execute a callback for every element in the matched set.
-	// (You can seed the arguments with an array of args, but this is
-	// only used internally.)
-	each: function( callback, args ) {
-		return jQuery.each( this, callback, args );
-	},
-
-	ready: function( fn ) {
-		// Attach the listeners
-		jQuery.bindReady();
-
-		// Add the callback
-		readyList.add( fn );
-
-		return this;
-	},
-
-	eq: function( i ) {
-		i = +i;
-		return i === -1 ?
-			this.slice( i ) :
-			this.slice( i, i + 1 );
-	},
-
-	first: function() {
-		return this.eq( 0 );
-	},
-
-	last: function() {
-		return this.eq( -1 );
-	},
-
-	slice: function() {
-		return this.pushStack( slice.apply( this, arguments ),
-			"slice", slice.call(arguments).join(",") );
-	},
-
-	map: function( callback ) {
-		return this.pushStack( jQuery.map(this, function( elem, i ) {
-			return callback.call( elem, i, elem );
-		}));
-	},
-
-	end: function() {
-		return this.prevObject || this.constructor(null);
-	},
-
-	// For internal use only.
-	// Behaves like an Array's method, not like a jQuery method.
-	push: push,
-	sort: [].sort,
-	splice: [].splice
-};
-
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-jQuery.extend = jQuery.fn.extend = function() {
-	var options, name, src, copy, copyIsArray, clone,
-		target = arguments[0] || {},
-		i = 1,
-		length = arguments.length,
-		deep = false;
-
-	// Handle a deep copy situation
-	if ( typeof target === "boolean" ) {
-		deep = target;
-		target = arguments[1] || {};
-		// skip the boolean and the target
-		i = 2;
-	}
-
-	// Handle case when target is a string or something (possible in deep copy)
-	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
-		target = {};
-	}
-
-	// extend jQuery itself if only one argument is passed
-	if ( length === i ) {
-		target = this;
-		--i;
-	}
-
-	for ( ; i < length; i++ ) {
-		// Only deal with non-null/undefined values
-		if ( (options = arguments[ i ]) != null ) {
-			// Extend the base object
-			for ( name in options ) {
-				src = target[ name ];
-				copy = options[ name ];
-
-				// Prevent never-ending loop
-				if ( target === copy ) {
-					continue;
-				}
-
-				// Recurse if we're merging plain objects or arrays
-				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
-					if ( copyIsArray ) {
-						copyIsArray = false;
-						clone = src && jQuery.isArray(src) ? src : [];
-
-					} else {
-						clone = src && jQuery.isPlainObject(src) ? src : {};
-					}
-
-					// Never move original objects, clone them
-					target[ name ] = jQuery.extend( deep, clone, copy );
-
-				// Don't bring in undefined values
-				} else if ( copy !== undefined ) {
-					target[ name ] = copy;
-				}
-			}
-		}
-	}
-
-	// Return the modified object
-	return target;
-};
-
-jQuery.extend({
-	noConflict: function( deep ) {
-		if ( window.$ === jQuery ) {
-			window.$ = _$;
-		}
-
-		if ( deep && window.jQuery === jQuery ) {
-			window.jQuery = _jQuery;
-		}
-
-		return jQuery;
-	},
-
-	// Is the DOM ready to be used? Set to true once it occurs.
-	isReady: false,
-
-	// A counter to track how many items to wait for before
-	// the ready event fires. See #6781
-	readyWait: 1,
-
-	// Hold (or release) the ready event
-	holdReady: function( hold ) {
-		if ( hold ) {
-			jQuery.readyWait++;
-		} else {
-			jQuery.ready( true );
-		}
-	},
-
-	// Handle when the DOM is ready
-	ready: function( wait ) {
-		// Either a released hold or an DOMready/load event and not yet ready
-		if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
-			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-			if ( !document.body ) {
-				return setTimeout( jQuery.ready, 1 );
-			}
-
-			// Remember that the DOM is ready
-			jQuery.isReady = true;
-
-			// If a normal DOM Ready event fired, decrement, and wait if need be
-			if ( wait !== true && --jQuery.readyWait > 0 ) {
-				return;
-			}
-
-			// If there are functions bound, to execute
-			readyList.fireWith( document, [ jQuery ] );
-
-			// Trigger any bound ready events
-			if ( jQuery.fn.trigger ) {
-				jQuery( document ).trigger( "ready" ).off( "ready" );
-			}
-		}
-	},
-
-	bindReady: function() {
-		if ( readyList ) {
-			return;
-		}
-
-		readyList = jQuery.Callbacks( "once memory" );
-
-		// Catch cases where $(document).ready() is called after the
-		// browser event has already occurred.
-		if ( document.readyState === "complete" ) {
-			// Handle it asynchronously to allow scripts the opportunity to delay ready
-			return setTimeout( jQuery.ready, 1 );
-		}
-
-		// Mozilla, Opera and webkit nightlies currently support this event
-		if ( document.addEventListener ) {
-			// Use the handy event callback
-			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-
-			// A fallback to window.onload, that will always work
-			window.addEventListener( "load", jQuery.ready, false );
-
-		// If IE event model is used
-		} else if ( document.attachEvent ) {
-			// ensure firing before onload,
-			// maybe late but safe also for iframes
-			document.attachEvent( "onreadystatechange", DOMContentLoaded );
-
-			// A fallback to window.onload, that will always work
-			window.attachEvent( "onload", jQuery.ready );
-
-			// If IE and not a frame
-			// continually check to see if the document is ready
-			var toplevel = false;
-
-			try {
-				toplevel = window.frameElement == null;
-			} catch(e) {}
-
-			if ( document.documentElement.doScroll && toplevel ) {
-				doScrollCheck();
-			}
-		}
-	},
-
-	// See test/unit/core.js for details concerning isFunction.
-	// Since version 1.3, DOM methods and functions like alert
-	// aren't supported. They return false on IE (#2968).
-	isFunction: function( obj ) {
-		return jQuery.type(obj) === "function";
-	},
-
-	isArray: Array.isArray || function( obj ) {
-		return jQuery.type(obj) === "array";
-	},
-
-	// A crude way of determining if an object is a window
-	isWindow: function( obj ) {
-		return obj && typeof obj === "object" && "setInterval" in obj;
-	},
-
-	isNumeric: function( obj ) {
-		return !isNaN( parseFloat(obj) ) && isFinite( obj );
-	},
-
-	type: function( obj ) {
-		return obj == null ?
-			String( obj ) :
-			class2type[ toString.call(obj) ] || "object";
-	},
-
-	isPlainObject: function( obj ) {
-		// Must be an Object.
-		// Because of IE, we also have to check the presence of the constructor property.
-		// Make sure that DOM nodes and window objects don't pass through, as well
-		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
-			return false;
-		}
-
-		try {
-			// Not own constructor property must be Object
-			if ( obj.constructor &&
-				!hasOwn.call(obj, "constructor") &&
-				!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
-				return false;
-			}
-		} catch ( e ) {
-			// IE8,9 Will throw exceptions on certain host objects #9897
-			return false;
-		}
-
-		// Own properties are enumerated firstly, so to speed up,
-		// if last one is own, then all properties are own.
-
-		var key;
-		for ( key in obj ) {}
-
-		return key === undefined || hasOwn.call( obj, key );
-	},
-
-	isEmptyObject: function( obj ) {
-		for ( var name in obj ) {
-			return false;
-		}
-		return true;
-	},
-
-	error: function( msg ) {
-		throw new Error( msg );
-	},
-
-	parseJSON: function( data ) {
-		if ( typeof data !== "string" || !data ) {
-			return null;
-		}
-
-		// Make sure leading/trailing whitespace is removed (IE can't handle it)
-		data = jQuery.trim( data );
-
-		// Attempt to parse using the native JSON parser first
-		if ( window.JSON && window.JSON.parse ) {
-			return window.JSON.parse( data );
-		}
-
-		// Make sure the incoming data is actual JSON
-		// Logic borrowed from http://json.org/json2.js
-		if ( rvalidchars.test( data.replace( rvalidescape, "@" )
-			.replace( rvalidtokens, "]" )
-			.replace( rvalidbraces, "")) ) {
-
-			return ( new Function( "return " + data ) )();
-
-		}
-		jQuery.error( "Invalid JSON: " + data );
-	},
-
-	// Cross-browser xml parsing
-	parseXML: function( data ) {
-		var xml, tmp;
-		try {
-			if ( window.DOMParser ) { // Standard
-				tmp = new DOMParser();
-				xml = tmp.parseFromString( data , "text/xml" );
-			} else { // IE
-				xml = new ActiveXObject( "Microsoft.XMLDOM" );
-				xml.async = "false";
-				xml.loadXML( data );
-			}
-		} catch( e ) {
-			xml = undefined;
-		}
-		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
-			jQuery.error( "Invalid XML: " + data );
-		}
-		return xml;
-	},
-
-	noop: function() {},
-
-	// Evaluates a script in a global context
-	// Workarounds based on findings by Jim Driscoll
-	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
-	globalEval: function( data ) {
-		if ( data && rnotwhite.test( data ) ) {
-			// We use execScript on Internet Explorer
-			// We use an anonymous function so that context is window
-			// rather than jQuery in Firefox
-			( window.execScript || function( data ) {
-				window[ "eval" ].call( window, data );
-			} )( data );
-		}
-	},
-
-	// Convert dashed to camelCase; used by the css and data modules
-	// Microsoft forgot to hump their vendor prefix (#9572)
-	camelCase: function( string ) {
-		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
-	},
-
-	nodeName: function( elem, name ) {
-		return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
-	},
-
-	// args is for internal usage only
-	each: function( object, callback, args ) {
-		var name, i = 0,
-			length = object.length,
-			isObj = length === undefined || jQuery.isFunction( object );
-
-		if ( args ) {
-			if ( isObj ) {
-				for ( name in object ) {
-					if ( callback.apply( object[ name ], args ) === false ) {
-						break;
-					}
-				}
-			} else {
-				for ( ; i < length; ) {
-					if ( callback.apply( object[ i++ ], args ) === false ) {
-						break;
-					}
-				}
-			}
-
-		// A special, fast, case for the most common use of each
-		} else {
-			if ( isObj ) {
-				for ( name in object ) {
-					if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
-						break;
-					}
-				}
-			} else {
-				for ( ; i < length; ) {
-					if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
-						break;
-					}
-				}
-			}
-		}
-
-		return object;
-	},
-
-	// Use native String.trim function wherever possible
-	trim: trim ?
-		function( text ) {
-			return text == null ?
-				"" :
-				trim.call( text );
-		} :
-
-		// Otherwise use our own trimming functionality
-		function( text ) {
-			return text == null ?
-				"" :
-				text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
-		},
-
-	// results is for internal usage only
-	makeArray: function( array, results ) {
-		var ret = results || [];
-
-		if ( array != null ) {
-			// The window, strings (and functions) also have 'length'
-			// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
-			var type = jQuery.type( array );
-
-			if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
-				push.call( ret, array );
-			} else {
-				jQuery.merge( ret, array );
-			}
-		}
-
-		return ret;
-	},
-
-	inArray: function( elem, array, i ) {
-		var len;
-
-		if ( array ) {
-			if ( indexOf ) {
-				return indexOf.call( array, elem, i );
-			}
-
-			len = array.length;
-			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
-
-			for ( ; i < len; i++ ) {
-				// Skip accessing in sparse arrays
-				if ( i in array && array[ i ] === elem ) {
-					return i;
-				}
-			}
-		}
-
-		return -1;
-	},
-
-	merge: function( first, second ) {
-		var i = first.length,
-			j = 0;
-
-		if ( typeof second.length === "number" ) {
-			for ( var l = second.length; j < l; j++ ) {
-				first[ i++ ] = second[ j ];
-			}
-
-		} else {
-			while ( second[j] !== undefined ) {
-				first[ i++ ] = second[ j++ ];
-			}
-		}
-
-		first.length = i;
-
-		return first;
-	},
-
-	grep: function( elems, callback, inv ) {
-		var ret = [], retVal;
-		inv = !!inv;
-
-		// Go through the array, only saving the items
-		// that pass the validator function
-		for ( var i = 0, length = elems.length; i < length; i++ ) {
-			retVal = !!callback( elems[ i ], i );
-			if ( inv !== retVal ) {
-				ret.push( elems[ i ] );
-			}
-		}
-
-		return ret;
-	},
-
-	// arg is for internal usage only
-	map: function( elems, callback, arg ) {
-		var value, key, ret = [],
-			i = 0,
-			length = elems.length,
-			// jquery objects are treated as arrays
-			isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
-
-		// Go through the array, translating each of the items to their
-		if ( isArray ) {
-			for ( ; i < length; i++ ) {
-				value = callback( elems[ i ], i, arg );
-
-				if ( value != null ) {
-					ret[ ret.length ] = value;
-				}
-			}
-
-		// Go through every key on the object,
-		} else {
-			for ( key in elems ) {
-				value = callback( elems[ key ], key, arg );
-
-				if ( value != null ) {
-					ret[ ret.length ] = value;
-				}
-			}
-		}
-
-		// Flatten any nested arrays
-		return ret.concat.apply( [], ret );
-	},
-
-	// A global GUID counter for objects
-	guid: 1,
-
-	// Bind a function to a context, optionally partially applying any
-	// arguments.
-	proxy: function( fn, context ) {
-		if ( typeof context === "string" ) {
-			var tmp = fn[ context ];
-			context = fn;
-			fn = tmp;
-		}
-
-		// Quick check to determine if target is callable, in the spec
-		// this throws a TypeError, but we will just return undefined.
-		if ( !jQuery.isFunction( fn ) ) {
-			return undefined;
-		}
-
-		// Simulated bind
-		var args = slice.call( arguments, 2 ),
-			proxy = function() {
-				return fn.apply( context, args.concat( slice.call( arguments ) ) );
-			};
-
-		// Set the guid of unique handler to the same of original handler, so it can be removed
-		proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
-
-		return proxy;
-	},
-
-	// Mutifunctional method to get and set values to a collection
-	// The value/s can optionally be executed if it's a function
-	access: function( elems, key, value, exec, fn, pass ) {
-		var length = elems.length;
-
-		// Setting many attributes
-		if ( typeof key === "object" ) {
-			for ( var k in key ) {
-				jQuery.access( elems, k, key[k], exec, fn, value );
-			}
-			return elems;
-		}
-
-		// Setting one attribute
-		if ( value !== undefined ) {
-			// Optionally, function values get executed if exec is true
-			exec = !pass && exec && jQuery.isFunction(value);
-
-			for ( var i = 0; i < length; i++ ) {
-				fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
-			}
-
-			return elems;
-		}
-
-		// Getting an attribute
-		return length ? fn( elems[0], key ) : undefined;
-	},
-
-	now: function() {
-		return ( new Date() ).getTime();
-	},
-
-	// Use of jQuery.browser is frowned upon.
-	// More details: http://docs.jquery.com/Utilities/jQuery.browser
-	uaMatch: function( ua ) {
-		ua = ua.toLowerCase();
-
-		var match = rwebkit.exec( ua ) ||
-			ropera.exec( ua ) ||
-			rmsie.exec( ua ) ||
-			ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
-			[];
-
-		return { browser: match[1] || "", version: match[2] || "0" };
-	},
-
-	sub: function() {
-		function jQuerySub( selector, context ) {
-			return new jQuerySub.fn.init( selector, context );
-		}
-		jQuery.extend( true, jQuerySub, this );
-		jQuerySub.superclass = this;
-		jQuerySub.fn = jQuerySub.prototype = this();
-		jQuerySub.fn.constructor = jQuerySub;
-		jQuerySub.sub = this.sub;
-		jQuerySub.fn.init = function init( selector, context ) {
-			if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
-				context = jQuerySub( context );
-			}
-
-			return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
-		};
-		jQuerySub.fn.init.prototype = jQuerySub.fn;
-		var rootjQuerySub = jQuerySub(document);
-		return jQuerySub;
-	},
-
-	browser: {}
-});
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
-	class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-browserMatch = jQuery.uaMatch( userAgent );
-if ( browserMatch.browser ) {
-	jQuery.browser[ browserMatch.browser ] = true;
-	jQuery.browser.version = browserMatch.version;
-}
-
-// Deprecated, use jQuery.browser.webkit instead
-if ( jQuery.browser.webkit ) {
-	jQuery.browser.safari = true;
-}
-
-// IE doesn't match non-breaking spaces with \s
-if ( rnotwhite.test( "\xA0" ) ) {
-	trimLeft = /^[\s\xA0]+/;
-	trimRight = /[\s\xA0]+$/;
-}
-
-// All jQuery objects should point back to these
-rootjQuery = jQuery(document);
-
-// Cleanup functions for the document ready method
-if ( document.addEventListener ) {
-	DOMContentLoaded = function() {
-		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-		jQuery.ready();
-	};
-
-} else if ( document.attachEvent ) {
-	DOMContentLoaded = function() {
-		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-		if ( document.readyState === "complete" ) {
-			document.detachEvent( "onreadystatechange", DOMContentLoaded );
-			jQuery.ready();
-		}
-	};
-}
-
-// The DOM ready check for Internet Explorer
-function doScrollCheck() {
-	if ( jQuery.isReady ) {
-		return;
-	}
-
-	try {
-		// If IE is used, use the trick by Diego Perini
-		// http://javascript.nwbox.com/IEContentLoaded/
-		document.documentElement.doScroll("left");
-	} catch(e) {
-		setTimeout( doScrollCheck, 1 );
-		return;
-	}
-
-	// and execute any waiting functions
-	jQuery.ready();
-}
-
-return jQuery;
-
-})();
-
-
-// String to Object flags format cache
-var flagsCache = {};
-
-// Convert String-formatted flags into Object-formatted ones and store in cache
-function createFlags( flags ) {
-	var object = flagsCache[ flags ] = {},
-		i, length;
-	flags = flags.split( /\s+/ );
-	for ( i = 0, length = flags.length; i < length; i++ ) {
-		object[ flags[i] ] = true;
-	}
-	return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- *	flags:	an optional list of space-separated flags that will change how
- *			the callback list behaves
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible flags:
- *
- *	once:			will ensure the callback list can only be fired once (like a Deferred)
- *
- *	memory:			will keep track of previous values and will call any callback added
- *					after the list has been fired right away with the latest "memorized"
- *					values (like a Deferred)
- *
- *	unique:			will ensure a callback can only be added once (no duplicate in the list)
- *
- *	stopOnFalse:	interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( flags ) {
-
-	// Convert flags from String-formatted to Object-formatted
-	// (we check in cache first)
-	flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {};
-
-	var // Actual callback list
-		list = [],
-		// Stack of fire calls for repeatable lists
-		stack = [],
-		// Last fire value (for non-forgettable lists)
-		memory,
-		// Flag to know if list is currently firing
-		firing,
-		// First callback to fire (used internally by add and fireWith)
-		firingStart,
-		// End of the loop when firing
-		firingLength,
-		// Index of currently firing callback (modified by remove if needed)
-		firingIndex,
-		// Add one or several callbacks to the list
-		add = function( args ) {
-			var i,
-				length,
-				elem,
-				type,
-				actual;
-			for ( i = 0, length = args.length; i < length; i++ ) {
-				elem = args[ i ];
-				type = jQuery.type( elem );
-				if ( type === "array" ) {
-					// Inspect recursively
-					add( elem );
-				} else if ( type === "function" ) {
-					// Add if not in unique mode and callback is not in
-					if ( !flags.unique || !self.has( elem ) ) {
-						list.push( elem );
-					}
-				}
-			}
-		},
-		// Fire callbacks
-		fire = function( context, args ) {
-			args = args || [];
-			memory = !flags.memory || [ context, args ];
-			firing = true;
-			firingIndex = firingStart || 0;
-			firingStart = 0;
-			firingLength = list.length;
-			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
-				if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
-					memory = true; // Mark as halted
-					break;
-				}
-			}
-			firing = false;
-			if ( list ) {
-				if ( !flags.once ) {
-					if ( stack && stack.length ) {
-						memory = stack.shift();
-						self.fireWith( memory[ 0 ], memory[ 1 ] );
-					}
-				} else if ( memory === true ) {
-					self.disable();
-				} else {
-					list = [];
-				}
-			}
-		},
-		// Actual Callbacks object
-		self = {
-			// Add a callback or a collection of callbacks to the list
-			add: function() {
-				if ( list ) {
-					var length = list.length;
-					add( arguments );
-					// Do we need to add the callbacks to the
-					// current firing batch?
-					if ( firing ) {
-						firingLength = list.length;
-					// With memory, if we're not firing then
-					// we should call right away, unless previous
-					// firing was halted (stopOnFalse)
-					} else if ( memory && memory !== true ) {
-						firingStart = length;
-						fire( memory[ 0 ], memory[ 1 ] );
-					}
-				}
-				return this;
-			},
-			// Remove a callback from the list
-			remove: function() {
-				if ( list ) {
-					var args = arguments,
-						argIndex = 0,
-						argLength = args.length;
-					for ( ; argIndex < argLength ; argIndex++ ) {
-						for ( var i = 0; i < list.length; i++ ) {
-							if ( args[ argIndex ] === list[ i ] ) {
-								// Handle firingIndex and firingLength
-								if ( firing ) {
-									if ( i <= firingLength ) {
-										firingLength--;
-										if ( i <= firingIndex ) {
-											firingIndex--;
-										}
-									}
-								}
-								// Remove the element
-								list.splice( i--, 1 );
-								// If we have some unicity property then
-								// we only need to do this once
-								if ( flags.unique ) {
-									break;
-								}
-							}
-						}
-					}
-				}
-				return this;
-			},
-			// Control if a given callback is in the list
-			has: function( fn ) {
-				if ( list ) {
-					var i = 0,
-						length = list.length;
-					for ( ; i < length; i++ ) {
-						if ( fn === list[ i ] ) {
-							return true;
-						}
-					}
-				}
-				return false;
-			},
-			// Remove all callbacks from the list
-			empty: function() {
-				list = [];
-				return this;
-			},
-			// Have the list do nothing anymore
-			disable: function() {
-				list = stack = memory = undefined;
-				return this;
-			},
-			// Is it disabled?
-			disabled: function() {
-				return !list;
-			},
-			// Lock the list in its current state
-			lock: function() {
-				stack = undefined;
-				if ( !memory || memory === true ) {
-					self.disable();
-				}
-				return this;
-			},
-			// Is it locked?
-			locked: function() {
-				return !stack;
-			},
-			// Call all callbacks with the given context and arguments
-			fireWith: function( context, args ) {
-				if ( stack ) {
-					if ( firing ) {
-						if ( !flags.once ) {
-							stack.push( [ context, args ] );
-						}
-					} else if ( !( flags.once && memory ) ) {
-						fire( context, args );
-					}
-				}
-				return this;
-			},
-			// Call all the callbacks with the given arguments
-			fire: function() {
-				self.fireWith( this, arguments );
-				return this;
-			},
-			// To know if the callbacks have already been called at least once
-			fired: function() {
-				return !!memory;
-			}
-		};
-
-	return self;
-};
-
-
-
-
-var // Static reference to slice
-	sliceDeferred = [].slice;
-
-jQuery.extend({
-
-	Deferred: function( func ) {
-		var doneList = jQuery.Callbacks( "once memory" ),
-			failList = jQuery.Callbacks( "once memory" ),
-			progressList = jQuery.Callbacks( "memory" ),
-			state = "pending",
-			lists = {
-				resolve: doneList,
-				reject: failList,
-				notify: progressList
-			},
-			promise = {
-				done: doneList.add,
-				fail: failList.add,
-				progress: progressList.add,
-
-				state: function() {
-					return state;
-				},
-
-				// Deprecated
-				isResolved: doneList.fired,
-				isRejected: failList.fired,
-
-				then: function( doneCallbacks, failCallbacks, progressCallbacks ) {
-					deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );
-					return this;
-				},
-				always: function() {
-					deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
-					return this;
-				},
-				pipe: function( fnDone, fnFail, fnProgress ) {
-					return jQuery.Deferred(function( newDefer ) {
-						jQuery.each( {
-							done: [ fnDone, "resolve" ],
-							fail: [ fnFail, "reject" ],
-							progress: [ fnProgress, "notify" ]
-						}, function( handler, data ) {
-							var fn = data[ 0 ],
-								action = data[ 1 ],
-								returned;
-							if ( jQuery.isFunction( fn ) ) {
-								deferred[ handler ](function() {
-									returned = fn.apply( this, arguments );
-									if ( returned && jQuery.isFunction( returned.promise ) ) {
-										returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify );
-									} else {
-										newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
-									}
-								});
-							} else {
-								deferred[ handler ]( newDefer[ action ] );
-							}
-						});
-					}).promise();
-				},
-				// Get a promise for this deferred
-				// If obj is provided, the promise aspect is added to the object
-				promise: function( obj ) {
-					if ( obj == null ) {
-						obj = promise;
-					} else {
-						for ( var key in promise ) {
-							obj[ key ] = promise[ key ];
-						}
-					}
-					return obj;
-				}
-			},
-			deferred = promise.promise({}),
-			key;
-
-		for ( key in lists ) {
-			deferred[ key ] = lists[ key ].fire;
-			deferred[ key + "With" ] = lists[ key ].fireWith;
-		}
-
-		// Handle state
-		deferred.done( function() {
-			state = "resolved";
-		}, failList.disable, progressList.lock ).fail( function() {
-			state = "rejected";
-		}, doneList.disable, progressList.lock );
-
-		// Call given func if any
-		if ( func ) {
-			func.call( deferred, deferred );
-		}
-
-		// All done!
-		return deferred;
-	},
-
-	// Deferred helper
-	when: function( firstParam ) {
-		var args = sliceDeferred.call( arguments, 0 ),
-			i = 0,
-			length = args.length,
-			pValues = new Array( length ),
-			count = length,
-			pCount = length,
-			deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
-				firstParam :
-				jQuery.Deferred(),
-			promise = deferred.promise();
-		function resolveFunc( i ) {
-			return function( value ) {
-				args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
-				if ( !( --count ) ) {
-					deferred.resolveWith( deferred, args );
-				}
-			};
-		}
-		function progressFunc( i ) {
-			return function( value ) {
-				pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
-				deferred.notifyWith( promise, pValues );
-			};
-		}
-		if ( length > 1 ) {
-			for ( ; i < length; i++ ) {
-				if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) {
-					args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) );
-				} else {
-					--count;
-				}
-			}
-			if ( !count ) {
-				deferred.resolveWith( deferred, args );
-			}
-		} else if ( deferred !== firstParam ) {
-			deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
-		}
-		return promise;
-	}
-});
-
-
-
-
-jQuery.support = (function() {
-
-	var support,
-		all,
-		a,
-		select,
-		opt,
-		input,
-		marginDiv,
-		fragment,
-		tds,
-		events,
-		eventName,
-		i,
-		isSupported,
-		div = document.createElement( "div" ),
-		documentElement = document.documentElement;
-
-	// Preliminary tests
-	div.setAttribute("className", "t");
-	div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-
-	all = div.getElementsByTagName( "*" );
-	a = div.getElementsByTagName( "a" )[ 0 ];
-
-	// Can't get basic test support
-	if ( !all || !all.length || !a ) {
-		return {};
-	}
-
-	// First batch of supports tests
-	select = document.createElement( "select" );
-	opt = select.appendChild( document.createElement("option") );
-	input = div.getElementsByTagName( "input" )[ 0 ];
-
-	support = {
-		// IE strips leading whitespace when .innerHTML is used
-		leadingWhitespace: ( div.firstChild.nodeType === 3 ),
-
-		// Make sure that tbody elements aren't automatically inserted
-		// IE will insert them into empty tables
-		tbody: !div.getElementsByTagName("tbody").length,
-
-		// Make sure that link elements get serialized correctly by innerHTML
-		// This requires a wrapper element in IE
-		htmlSerialize: !!div.getElementsByTagName("link").length,
-
-		// Get the style information from getAttribute
-		// (IE uses .cssText instead)
-		style: /top/.test( a.getAttribute("style") ),
-
-		// Make sure that URLs aren't manipulated
-		// (IE normalizes it by default)
-		hrefNormalized: ( a.getAttribute("href") === "/a" ),
-
-		// Make sure that element opacity exists
-		// (IE uses filter instead)
-		// Use a regex to work around a WebKit issue. See #5145
-		opacity: /^0.55/.test( a.style.opacity ),
-
-		// Verify style float existence
-		// (IE uses styleFloat instead of cssFloat)
-		cssFloat: !!a.style.cssFloat,
-
-		// Make sure that if no value is specified for a checkbox
-		// that it defaults to "on".
-		// (WebKit defaults to "" instead)
-		checkOn: ( input.value === "on" ),
-
-		// Make sure that a selected-by-default option has a working selected property.
-		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
-		optSelected: opt.selected,
-
-		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
-		getSetAttribute: div.className !== "t",
-
-		// Tests for enctype support on a form(#6743)
-		enctype: !!document.createElement("form").enctype,
-
-		// Makes sure cloning an html5 element does not cause problems
-		// Where outerHTML is undefined, this still works
-		html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
-
-		// Will be defined later
-		submitBubbles: true,
-		changeBubbles: true,
-		focusinBubbles: false,
-		deleteExpando: true,
-		noCloneEvent: true,
-		inlineBlockNeedsLayout: false,
-		shrinkWrapBlocks: false,
-		reliableMarginRight: true
-	};
-
-	// Make sure checked status is properly cloned
-	input.checked = true;
-	support.noCloneChecked = input.cloneNode( true ).checked;
-
-	// Make sure that the options inside disabled selects aren't marked as disabled
-	// (WebKit marks them as disabled)
-	select.disabled = true;
-	support.optDisabled = !opt.disabled;
-
-	// Test to see if it's possible to delete an expando from an element
-	// Fails in Internet Explorer
-	try {
-		delete div.test;
-	} catch( e ) {
-		support.deleteExpando = false;
-	}
-
-	if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
-		div.attachEvent( "onclick", function() {
-			// Cloning a node shouldn't copy over any
-			// bound event handlers (IE does this)
-			support.noCloneEvent = false;
-		});
-		div.cloneNode( true ).fireEvent( "onclick" );
-	}
-
-	// Check if a radio maintains its value
-	// after being appended to the DOM
-	input = document.createElement("input");
-	input.value = "t";
-	input.setAttribute("type", "radio");
-	support.radioValue = input.value === "t";
-
-	input.setAttribute("checked", "checked");
-	div.appendChild( input );
-	fragment = document.createDocumentFragment();
-	fragment.appendChild( div.lastChild );
-
-	// WebKit doesn't clone checked state correctly in fragments
-	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
-	// Check if a disconnected checkbox will retain its checked
-	// value of true after appended to the DOM (IE6/7)
-	support.appendChecked = input.checked;
-
-	fragment.removeChild( input );
-	fragment.appendChild( div );
-
-	div.innerHTML = "";
-
-	// Check if div with explicit width and no margin-right incorrectly
-	// gets computed margin-right based on width of container. For more
-	// info see bug #3333
-	// Fails in WebKit before Feb 2011 nightlies
-	// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-	if ( window.getComputedStyle ) {
-		marginDiv = document.createElement( "div" );
-		marginDiv.style.width = "0";
-		marginDiv.style.marginRight = "0";
-		div.style.width = "2px";
-		div.appendChild( marginDiv );
-		support.reliableMarginRight =
-			( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
-	}
-
-	// Technique from Juriy Zaytsev
-	// http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
-	// We only care about the case where non-standard event systems
-	// are used, namely in IE. Short-circuiting here helps us to
-	// avoid an eval call (in setAttribute) which can cause CSP
-	// to go haywire. See: https://developer.mozilla.org/en/Security/CSP
-	if ( div.attachEvent ) {
-		for( i in {
-			submit: 1,
-			change: 1,
-			focusin: 1
-		}) {
-			eventName = "on" + i;
-			isSupported = ( eventName in div );
-			if ( !isSupported ) {
-				div.setAttribute( eventName, "return;" );
-				isSupported = ( typeof div[ eventName ] === "function" );
-			}
-			support[ i + "Bubbles" ] = isSupported;
-		}
-	}
-
-	fragment.removeChild( div );
-
-	// Null elements to avoid leaks in IE
-	fragment = select = opt = marginDiv = div = input = null;
-
-	// Run tests that need a body at doc ready
-	jQuery(function() {
-		var container, outer, inner, table, td, offsetSupport,
-			conMarginTop, ptlm, vb, style, html,
-			body = document.getElementsByTagName("body")[0];
-
-		if ( !body ) {
-			// Return for frameset docs that don't have a body
-			return;
-		}
-
-		conMarginTop = 1;
-		ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";
-		vb = "visibility:hidden;border:0;";
-		style = "style='" + ptlm + "border:5px solid #000;padding:0;'";
-		html = "<div " + style + "><div></div></div>" +
-			"<table " + style + " cellpadding='0' cellspacing='0'>" +
-			"<tr><td></td></tr></table>";
-
-		container = document.createElement("div");
-		container.style.cssText = vb + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
-		body.insertBefore( container, body.firstChild );
-
-		// Construct the test element
-		div = document.createElement("div");
-		container.appendChild( div );
-
-		// Check if table cells still have offsetWidth/Height when they are set
-		// to display:none and there are still other visible table cells in a
-		// table row; if so, offsetWidth/Height are not reliable for use when
-		// determining if an element has been hidden directly using
-		// display:none (it is still safe to use offsets if a parent element is
-		// hidden; don safety goggles and see bug #4512 for more information).
-		// (only IE 8 fails this test)
-		div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
-		tds = div.getElementsByTagName( "td" );
-		isSupported = ( tds[ 0 ].offsetHeight === 0 );
-
-		tds[ 0 ].style.display = "";
-		tds[ 1 ].style.display = "none";
-
-		// Check if empty table cells still have offsetWidth/Height
-		// (IE <= 8 fail this test)
-		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
-
-		// Figure out if the W3C box model works as expected
-		div.innerHTML = "";
-		div.style.width = div.style.paddingLeft = "1px";
-		jQuery.boxModel = support.boxModel = div.offsetWidth === 2;
-
-		if ( typeof div.style.zoom !== "undefined" ) {
-			// Check if natively block-level elements act like inline-block
-			// elements when setting their display to 'inline' and giving
-			// them layout
-			// (IE < 8 does this)
-			div.style.display = "inline";
-			div.style.zoom = 1;
-			support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
-
-			// Check if elements with layout shrink-wrap their children
-			// (IE 6 does this)
-			div.style.display = "";
-			div.innerHTML = "<div style='width:4px;'></div>";
-			support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
-		}
-
-		div.style.cssText = ptlm + vb;
-		div.innerHTML = html;
-
-		outer = div.firstChild;
-		inner = outer.firstChild;
-		td = outer.nextSibling.firstChild.firstChild;
-
-		offsetSupport = {
-			doesNotAddBorder: ( inner.offsetTop !== 5 ),
-			doesAddBorderForTableAndCells: ( td.offsetTop === 5 )
-		};
-
-		inner.style.position = "fixed";
-		inner.style.top = "20px";
-
-		// safari subtracts parent border width here which is 5px
-		offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 );
-		inner.style.position = inner.style.top = "";
-
-		outer.style.overflow = "hidden";
-		outer.style.position = "relative";
-
-		offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 );
-		offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop );
-
-		body.removeChild( container );
-		div  = container = null;
-
-		jQuery.extend( support, offsetSupport );
-	});
-
-	return support;
-})();
-
-
-
-
-var rbrace = /^(?:\{.*\}|\[.*\])$/,
-	rmultiDash = /([A-Z])/g;
-
-jQuery.extend({
-	cache: {},
-
-	// Please use with caution
-	uuid: 0,
-
-	// Unique for each copy of jQuery on the page
-	// Non-digits removed to match rinlinejQuery
-	expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
-
-	// The following elements throw uncatchable exceptions if you
-	// attempt to add expando properties to them.
-	noData: {
-		"embed": true,
-		// Ban all objects except for Flash (which handle expandos)
-		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
-		"applet": true
-	},
-
-	hasData: function( elem ) {
-		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
-		return !!elem && !isEmptyDataObject( elem );
-	},
-
-	data: function( elem, name, data, pvt /* Internal Use Only */ ) {
-		if ( !jQuery.acceptData( elem ) ) {
-			return;
-		}
-
-		var privateCache, thisCache, ret,
-			internalKey = jQuery.expando,
-			getByName = typeof name === "string",
-
-			// We have to handle DOM nodes and JS objects differently because IE6-7
-			// can't GC object references properly across the DOM-JS boundary
-			isNode = elem.nodeType,
-
-			// Only DOM nodes need the global jQuery cache; JS object data is
-			// attached directly to the object so GC can occur automatically
-			cache = isNode ? jQuery.cache : elem,
-
-			// Only defining an ID for JS objects if its cache already exists allows
-			// the code to shortcut on the same path as a DOM node with no cache
-			id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey,
-			isEvents = name === "events";
-
-		// Avoid doing any more work than we need to when trying to get data on an
-		// object that has no data at all
-		if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) {
-			return;
-		}
-
-		if ( !id ) {
-			// Only DOM nodes need a new unique ID for each element since their data
-			// ends up in the global cache
-			if ( isNode ) {
-				elem[ internalKey ] = id = ++jQuery.uuid;
-			} else {
-				id = internalKey;
-			}
-		}
-
-		if ( !cache[ id ] ) {
-			cache[ id ] = {};
-
-			// Avoids exposing jQuery metadata on plain JS objects when the object
-			// is serialized using JSON.stringify
-			if ( !isNode ) {
-				cache[ id ].toJSON = jQuery.noop;
-			}
-		}
-
-		// An object can be passed to jQuery.data instead of a key/value pair; this gets
-		// shallow copied over onto the existing cache
-		if ( typeof name === "object" || typeof name === "function" ) {
-			if ( pvt ) {
-				cache[ id ] = jQuery.extend( cache[ id ], name );
-			} else {
-				cache[ id ].data = jQuery.extend( cache[ id ].data, name );
-			}
-		}
-
-		privateCache = thisCache = cache[ id ];
-
-		// jQuery data() is stored in a separate object inside the object's internal data
-		// cache in order to avoid key collisions between internal data and user-defined
-		// data.
-		if ( !pvt ) {
-			if ( !thisCache.data ) {
-				thisCache.data = {};
-			}
-
-			thisCache = thisCache.data;
-		}
-
-		if ( data !== undefined ) {
-			thisCache[ jQuery.camelCase( name ) ] = data;
-		}
-
-		// Users should not attempt to inspect the internal events object using jQuery.data,
-		// it is undocumented and subject to change. But does anyone listen? No.
-		if ( isEvents && !thisCache[ name ] ) {
-			return privateCache.events;
-		}
-
-		// Check for both converted-to-camel and non-converted data property names
-		// If a data property was specified
-		if ( getByName ) {
-
-			// First Try to find as-is property data
-			ret = thisCache[ name ];
-
-			// Test for null|undefined property data
-			if ( ret == null ) {
-
-				// Try to find the camelCased property
-				ret = thisCache[ jQuery.camelCase( name ) ];
-			}
-		} else {
-			ret = thisCache;
-		}
-
-		return ret;
-	},
-
-	removeData: function( elem, name, pvt /* Internal Use Only */ ) {
-		if ( !jQuery.acceptData( elem ) ) {
-			return;
-		}
-
-		var thisCache, i, l,
-
-			// Reference to internal data cache key
-			internalKey = jQuery.expando,
-
-			isNode = elem.nodeType,
-
-			// See jQuery.data for more information
-			cache = isNode ? jQuery.cache : elem,
-
-			// See jQuery.data for more information
-			id = isNode ? elem[ internalKey ] : internalKey;
-
-		// If there is already no cache entry for this object, there is no
-		// purpose in continuing
-		if ( !cache[ id ] ) {
-			return;
-		}
-
-		if ( name ) {
-
-			thisCache = pvt ? cache[ id ] : cache[ id ].data;
-
-			if ( thisCache ) {
-
-				// Support array or space separated string names for data keys
-				if ( !jQuery.isArray( name ) ) {
-
-					// try the string as a key before any manipulation
-					if ( name in thisCache ) {
-						name = [ name ];
-					} else {
-
-						// split the camel cased version by spaces unless a key with the spaces exists
-						name = jQuery.camelCase( name );
-						if ( name in thisCache ) {
-							name = [ name ];
-						} else {
-							name = name.split( " " );
-						}
-					}
-				}
-
-				for ( i = 0, l = name.length; i < l; i++ ) {
-					delete thisCache[ name[i] ];
-				}
-
-				// If there is no data left in the cache, we want to continue
-				// and let the cache object itself get destroyed
-				if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
-					return;
-				}
-			}
-		}
-
-		// See jQuery.data for more information
-		if ( !pvt ) {
-			delete cache[ id ].data;
-
-			// Don't destroy the parent cache unless the internal data object
-			// had been the only thing left in it
-			if ( !isEmptyDataObject(cache[ id ]) ) {
-				return;
-			}
-		}
-
-		// Browsers that fail expando deletion also refuse to delete expandos on
-		// the window, but it will allow it on all other JS objects; other browsers
-		// don't care
-		// Ensure that `cache` is not a window object #10080
-		if ( jQuery.support.deleteExpando || !cache.setInterval ) {
-			delete cache[ id ];
-		} else {
-			cache[ id ] = null;
-		}
-
-		// We destroyed the cache and need to eliminate the expando on the node to avoid
-		// false lookups in the cache for entries that no longer exist
-		if ( isNode ) {
-			// IE does not allow us to delete expando properties from nodes,
-			// nor does it have a removeAttribute function on Document nodes;
-			// we must handle all of these cases
-			if ( jQuery.support.deleteExpando ) {
-				delete elem[ internalKey ];
-			} else if ( elem.removeAttribute ) {
-				elem.removeAttribute( internalKey );
-			} else {
-				elem[ internalKey ] = null;
-			}
-		}
-	},
-
-	// For internal use only.
-	_data: function( elem, name, data ) {
-		return jQuery.data( elem, name, data, true );
-	},
-
-	// A method for determining if a DOM node can handle the data expando
-	acceptData: function( elem ) {
-		if ( elem.nodeName ) {
-			var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
-
-			if ( match ) {
-				return !(match === true || elem.getAttribute("classid") !== match);
-			}
-		}
-
-		return true;
-	}
-});
-
-jQuery.fn.extend({
-	data: function( key, value ) {
-		var parts, attr, name,
-			data = null;
-
-		if ( typeof key === "undefined" ) {
-			if ( this.length ) {
-				data = jQuery.data( this[0] );
-
-				if ( this[0].nodeType === 1 && !jQuery._data( this[0], "parsedAttrs" ) ) {
-					attr = this[0].attributes;
-					for ( var i = 0, l = attr.length; i < l; i++ ) {
-						name = attr[i].name;
-
-						if ( name.indexOf( "data-" ) === 0 ) {
-							name = jQuery.camelCase( name.substring(5) );
-
-							dataAttr( this[0], name, data[ name ] );
-						}
-					}
-					jQuery._data( this[0], "parsedAttrs", true );
-				}
-			}
-
-			return data;
-
-		} else if ( typeof key === "object" ) {
-			return this.each(function() {
-				jQuery.data( this, key );
-			});
-		}
-
-		parts = key.split(".");
-		parts[1] = parts[1] ? "." + parts[1] : "";
-
-		if ( value === undefined ) {
-			data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
-
-			// Try to fetch any internally stored data first
-			if ( data === undefined && this.length ) {
-				data = jQuery.data( this[0], key );
-				data = dataAttr( this[0], key, data );
-			}
-
-			return data === undefined && parts[1] ?
-				this.data( parts[0] ) :
-				data;
-
-		} else {
-			return this.each(function() {
-				var self = jQuery( this ),
-					args = [ parts[0], value ];
-
-				self.triggerHandler( "setData" + parts[1] + "!", args );
-				jQuery.data( this, key, value );
-				self.triggerHandler( "changeData" + parts[1] + "!", args );
-			});
-		}
-	},
-
-	removeData: function( key ) {
-		return this.each(function() {
-			jQuery.removeData( this, key );
-		});
-	}
-});
-
-function dataAttr( elem, key, data ) {
-	// If nothing was found internally, try to fetch any
-	// data from the HTML5 data-* attribute
-	if ( data === undefined && elem.nodeType === 1 ) {
-
-		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
-		data = elem.getAttribute( name );
-
-		if ( typeof data === "string" ) {
-			try {
-				data = data === "true" ? true :
-				data === "false" ? false :
-				data === "null" ? null :
-				jQuery.isNumeric( data ) ? parseFloat( data ) :
-					rbrace.test( data ) ? jQuery.parseJSON( data ) :
-					data;
-			} catch( e ) {}
-
-			// Make sure we set the data so it isn't changed later
-			jQuery.data( elem, key, data );
-
-		} else {
-			data = undefined;
-		}
-	}
-
-	return data;
-}
-
-// checks a cache object for emptiness
-function isEmptyDataObject( obj ) {
-	for ( var name in obj ) {
-
-		// if the public data object is empty, the private is still empty
-		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
-			continue;
-		}
-		if ( name !== "toJSON" ) {
-			return false;
-		}
-	}
-
-	return true;
-}
-
-
-
-
-function handleQueueMarkDefer( elem, type, src ) {
-	var deferDataKey = type + "defer",
-		queueDataKey = type + "queue",
-		markDataKey = type + "mark",
-		defer = jQuery._data( elem, deferDataKey );
-	if ( defer &&
-		( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
-		( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
-		// Give room for hard-coded callbacks to fire first
-		// and eventually mark/queue something else on the element
-		setTimeout( function() {
-			if ( !jQuery._data( elem, queueDataKey ) &&
-				!jQuery._data( elem, markDataKey ) ) {
-				jQuery.removeData( elem, deferDataKey, true );
-				defer.fire();
-			}
-		}, 0 );
-	}
-}
-
-jQuery.extend({
-
-	_mark: function( elem, type ) {
-		if ( elem ) {
-			type = ( type || "fx" ) + "mark";
-			jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );
-		}
-	},
-
-	_unmark: function( force, elem, type ) {
-		if ( force !== true ) {
-			type = elem;
-			elem = force;
-			force = false;
-		}
-		if ( elem ) {
-			type = type || "fx";
-			var key = type + "mark",
-				count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );
-			if ( count ) {
-				jQuery._data( elem, key, count );
-			} else {
-				jQuery.removeData( elem, key, true );
-				handleQueueMarkDefer( elem, type, "mark" );
-			}
-		}
-	},
-
-	queue: function( elem, type, data ) {
-		var q;
-		if ( elem ) {
-			type = ( type || "fx" ) + "queue";
-			q = jQuery._data( elem, type );
-
-			// Speed up dequeue by getting out quickly if this is just a lookup
-			if ( data ) {
-				if ( !q || jQuery.isArray(data) ) {
-					q = jQuery._data( elem, type, jQuery.makeArray(data) );
-				} else {
-					q.push( data );
-				}
-			}
-			return q || [];
-		}
-	},
-
-	dequeue: function( elem, type ) {
-		type = type || "fx";
-
-		var queue = jQuery.queue( elem, type ),
-			fn = queue.shift(),
-			hooks = {};
-
-		// If the fx queue is dequeued, always remove the progress sentinel
-		if ( fn === "inprogress" ) {
-			fn = queue.shift();
-		}
-
-		if ( fn ) {
-			// Add a progress sentinel to prevent the fx queue from being
-			// automatically dequeued
-			if ( type === "fx" ) {
-				queue.unshift( "inprogress" );
-			}
-
-			jQuery._data( elem, type + ".run", hooks );
-			fn.call( elem, function() {
-				jQuery.dequeue( elem, type );
-			}, hooks );
-		}
-
-		if ( !queue.length ) {
-			jQuery.removeData( elem, type + "queue " + type + ".run", true );
-			handleQueueMarkDefer( elem, type, "queue" );
-		}
-	}
-});
-
-jQuery.fn.extend({
-	queue: function( type, data ) {
-		if ( typeof type !== "string" ) {
-			data = type;
-			type = "fx";
-		}
-
-		if ( data === undefined ) {
-			return jQuery.queue( this[0], type );
-		}
-		return this.each(function() {
-			var queue = jQuery.queue( this, type, data );
-
-			if ( type === "fx" && queue[0] !== "inprogress" ) {
-				jQuery.dequeue( this, type );
-			}
-		});
-	},
-	dequeue: function( type ) {
-		return this.each(function() {
-			jQuery.dequeue( this, type );
-		});
-	},
-	// Based off of the plugin by Clint Helfers, with permission.
-	// http://blindsignals.com/index.php/2009/07/jquery-delay/
-	delay: function( time, type ) {
-		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
-		type = type || "fx";
-
-		return this.queue( type, function( next, hooks ) {
-			var timeout = setTimeout( next, time );
-			hooks.stop = function() {
-				clearTimeout( timeout );
-			};
-		});
-	},
-	clearQueue: function( type ) {
-		return this.queue( type || "fx", [] );
-	},
-	// Get a promise resolved when queues of a certain type
-	// are emptied (fx is the type by default)
-	promise: function( type, object ) {
-		if ( typeof type !== "string" ) {
-			object = type;
-			type = undefined;
-		}
-		type = type || "fx";
-		var defer = jQuery.Deferred(),
-			elements = this,
-			i = elements.length,
-			count = 1,
-			deferDataKey = type + "defer",
-			queueDataKey = type + "queue",
-			markDataKey = type + "mark",
-			tmp;
-		function resolve() {
-			if ( !( --count ) ) {
-				defer.resolveWith( elements, [ elements ] );
-			}
-		}
-		while( i-- ) {
-			if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
-					( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
-						jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
-					jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) {
-				count++;
-				tmp.add( resolve );
-			}
-		}
-		resolve();
-		return defer.promise();
-	}
-});
-
-
-
-
-var rclass = /[\n\t\r]/g,
-	rspace = /\s+/,
-	rreturn = /\r/g,
-	rtype = /^(?:button|input)$/i,
-	rfocusable = /^(?:button|input|object|select|textarea)$/i,
-	rclickable = /^a(?:rea)?$/i,
-	rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
-	getSetAttribute = jQuery.support.getSetAttribute,
-	nodeHook, boolHook, fixSpecified;
-
-jQuery.fn.extend({
-	attr: function( name, value ) {
-		return jQuery.access( this, name, value, true, jQuery.attr );
-	},
-
-	removeAttr: function( name ) {
-		return this.each(function() {
-			jQuery.removeAttr( this, name );
-		});
-	},
-
-	prop: function( name, value ) {
-		return jQuery.access( this, name, value, true, jQuery.prop );
-	},
-
-	removeProp: function( name ) {
-		name = jQuery.propFix[ name ] || name;
-		return this.each(function() {
-			// try/catch handles cases where IE balks (such as removing a property on window)
-			try {
-				this[ name ] = undefined;
-				delete this[ name ];
-			} catch( e ) {}
-		});
-	},
-
-	addClass: function( value ) {
-		var classNames, i, l, elem,
-			setClass, c, cl;
-
-		if ( jQuery.isFunction( value ) ) {
-			return this.each(function( j ) {
-				jQuery( this ).addClass( value.call(this, j, this.className) );
-			});
-		}
-
-		if ( value && typeof value === "string" ) {
-			classNames = value.split( rspace );
-
-			for ( i = 0, l = this.length; i < l; i++ ) {
-				elem = this[ i ];
-
-				if ( elem.nodeType === 1 ) {
-					if ( !elem.className && classNames.length === 1 ) {
-						elem.className = value;
-
-					} else {
-						setClass = " " + elem.className + " ";
-
-						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
-							if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
-								setClass += classNames[ c ] + " ";
-							}
-						}
-						elem.className = jQuery.trim( setClass );
-					}
-				}
-			}
-		}
-
-		return this;
-	},
-
-	removeClass: function( value ) {
-		var classNames, i, l, elem, className, c, cl;
-
-		if ( jQuery.isFunction( value ) ) {
-			return this.each(function( j ) {
-				jQuery( this ).removeClass( value.call(this, j, this.className) );
-			});
-		}
-
-		if ( (value && typeof value === "string") || value === undefined ) {
-			classNames = ( value || "" ).split( rspace );
-
-			for ( i = 0, l = this.length; i < l; i++ ) {
-				elem = this[ i ];
-
-				if ( elem.nodeType === 1 && elem.className ) {
-					if ( value ) {
-						className = (" " + elem.className + " ").replace( rclass, " " );
-						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
-							className = className.replace(" " + classNames[ c ] + " ", " ");
-						}
-						elem.className = jQuery.trim( className );
-
-					} else {
-						elem.className = "";
-					}
-				}
-			}
-		}
-
-		return this;
-	},
-
-	toggleClass: function( value, stateVal ) {
-		var type = typeof value,
-			isBool = typeof stateVal === "boolean";
-
-		if ( jQuery.isFunction( value ) ) {
-			return this.each(function( i ) {
-				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
-			});
-		}
-
-		return this.each(function() {
-			if ( type === "string" ) {
-				// toggle individual class names
-				var className,
-					i = 0,
-					self = jQuery( this ),
-					state = stateVal,
-					classNames = value.split( rspace );
-
-				while ( (className = classNames[ i++ ]) ) {
-					// check each className given, space seperated list
-					state = isBool ? state : !self.hasClass( className );
-					self[ state ? "addClass" : "removeClass" ]( className );
-				}
-
-			} else if ( type === "undefined" || type === "boolean" ) {
-				if ( this.className ) {
-					// store className if set
-					jQuery._data( this, "__className__", this.className );
-				}
-
-				// toggle whole className
-				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
-			}
-		});
-	},
-
-	hasClass: function( selector ) {
-		var className = " " + selector + " ",
-			i = 0,
-			l = this.length;
-		for ( ; i < l; i++ ) {
-			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
-				return true;
-			}
-		}
-
-		return false;
-	},
-
-	val: function( value ) {
-		var hooks, ret, isFunction,
-			elem = this[0];
-
-		if ( !arguments.length ) {
-			if ( elem ) {
-				hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
-
-				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
-					return ret;
-				}
-
-				ret = elem.value;
-
-				return typeof ret === "string" ?
-					// handle most common string cases
-					ret.replace(rreturn, "") :
-					// handle cases where value is null/undef or number
-					ret == null ? "" : ret;
-			}
-
-			return;
-		}
-
-		isFunction = jQuery.isFunction( value );
-
-		return this.each(function( i ) {
-			var self = jQuery(this), val;
-
-			if ( this.nodeType !== 1 ) {
-				return;
-			}
-
-			if ( isFunction ) {
-				val = value.call( this, i, self.val() );
-			} else {
-				val = value;
-			}
-
-			// Treat null/undefined as ""; convert numbers to string
-			if ( val == null ) {
-				val = "";
-			} else if ( typeof val === "number" ) {
-				val += "";
-			} else if ( jQuery.isArray( val ) ) {
-				val = jQuery.map(val, function ( value ) {
-					return value == null ? "" : value + "";
-				});
-			}
-
-			hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
-
-			// If set returns undefined, fall back to normal setting
-			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
-				this.value = val;
-			}
-		});
-	}
-});
-
-jQuery.extend({
-	valHooks: {
-		option: {
-			get: function( elem ) {
-				// attributes.value is undefined in Blackberry 4.7 but
-				// uses .value. See #6932
-				var val = elem.attributes.value;
-				return !val || val.specified ? elem.value : elem.text;
-			}
-		},
-		select: {
-			get: function( elem ) {
-				var value, i, max, option,
-					index = elem.selectedIndex,
-					values = [],
-					options = elem.options,
-					one = elem.type === "select-one";
-
-				// Nothing was selected
-				if ( index < 0 ) {
-					return null;
-				}
-
-				// Loop through all the selected options
-				i = one ? index : 0;
-				max = one ? index + 1 : options.length;
-				for ( ; i < max; i++ ) {
-					option = options[ i ];
-
-					// Don't return options that are disabled or in a disabled optgroup
-					if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
-							(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
-
-						// Get the specific value for the option
-						value = jQuery( option ).val();
-
-						// We don't need an array for one selects
-						if ( one ) {
-							return value;
-						}
-
-						// Multi-Selects return an array
-						values.push( value );
-					}
-				}
-
-				// Fixes Bug #2551 -- select.val() broken in IE after form.reset()
-				if ( one && !values.length && options.length ) {
-					return jQuery( options[ index ] ).val();
-				}
-
-				return values;
-			},
-
-			set: function( elem, value ) {
-				var values = jQuery.makeArray( value );
-
-				jQuery(elem).find("option").each(function() {
-					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
-				});
-
-				if ( !values.length ) {
-					elem.selectedIndex = -1;
-				}
-				return values;
-			}
-		}
-	},
-
-	attrFn: {
-		val: true,
-		css: true,
-		html: true,
-		text: true,
-		data: true,
-		width: true,
-		height: true,
-		offset: true
-	},
-
-	attr: function( elem, name, value, pass ) {
-		var ret, hooks, notxml,
-			nType = elem.nodeType;
-
-		// don't get/set attributes on text, comment and attribute nodes
-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-			return;
-		}
-
-		if ( pass && name in jQuery.attrFn ) {
-			return jQuery( elem )[ name ]( value );
-		}
-
-		// Fallback to prop when attributes are not supported
-		if ( typeof elem.getAttribute === "undefined" ) {
-			return jQuery.prop( elem, name, value );
-		}
-
-		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
-		// All attributes are lowercase
-		// Grab necessary hook if one is defined
-		if ( notxml ) {
-			name = name.toLowerCase();
-			hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
-		}
-
-		if ( value !== undefined ) {
-
-			if ( value === null ) {
-				jQuery.removeAttr( elem, name );
-				return;
-
-			} else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
-				return ret;
-
-			} else {
-				elem.setAttribute( name, "" + value );
-				return value;
-			}
-
-		} else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
-			return ret;
-
-		} else {
-
-			ret = elem.getAttribute( name );
-
-			// Non-existent attributes return null, we normalize to undefined
-			return ret === null ?
-				undefined :
-				ret;
-		}
-	},
-
-	removeAttr: function( elem, value ) {
-		var propName, attrNames, name, l,
-			i = 0;
-
-		if ( value && elem.nodeType === 1 ) {
-			attrNames = value.toLowerCase().split( rspace );
-			l = attrNames.length;
-
-			for ( ; i < l; i++ ) {
-				name = attrNames[ i ];
-
-				if ( name ) {
-					propName = jQuery.propFix[ name ] || name;
-
-					// See #9699 for explanation of this approach (setting first, then removal)
-					jQuery.attr( elem, name, "" );
-					elem.removeAttribute( getSetAttribute ? name : propName );
-
-					// Set corresponding property to false for boolean attributes
-					if ( rboolean.test( name ) && propName in elem ) {
-						elem[ propName ] = false;
-					}
-				}
-			}
-		}
-	},
-
-	attrHooks: {
-		type: {
-			set: function( elem, value ) {
-				// We can't allow the type property to be changed (since it causes problems in IE)
-				if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
-					jQuery.error( "type property can't be changed" );
-				} else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
-					// Setting the type on a radio button after the value resets the value in IE6-9
-					// Reset value to it's default in case type is set after value
-					// This is for element creation
-					var val = elem.value;
-					elem.setAttribute( "type", value );
-					if ( val ) {
-						elem.value = val;
-					}
-					return value;
-				}
-			}
-		},
-		// Use the value property for back compat
-		// Use the nodeHook for button elements in IE6/7 (#1954)
-		value: {
-			get: function( elem, name ) {
-				if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
-					return nodeHook.get( elem, name );
-				}
-				return name in elem ?
-					elem.value :
-					null;
-			},
-			set: function( elem, value, name ) {
-				if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
-					return nodeHook.set( elem, value, name );
-				}
-				// Does not return so that setAttribute is also used
-				elem.value = value;
-			}
-		}
-	},
-
-	propFix: {
-		tabindex: "tabIndex",
-		readonly: "readOnly",
-		"for": "htmlFor",
-		"class": "className",
-		maxlength: "maxLength",
-		cellspacing: "cellSpacing",
-		cellpadding: "cellPadding",
-		rowspan: "rowSpan",
-		colspan: "colSpan",
-		usemap: "useMap",
-		frameborder: "frameBorder",
-		contenteditable: "contentEditable"
-	},
-
-	prop: function( elem, name, value ) {
-		var ret, hooks, notxml,
-			nType = elem.nodeType;
-
-		// don't get/set properties on text, comment and attribute nodes
-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-			return;
-		}
-
-		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
-		if ( notxml ) {
-			// Fix name and attach hooks
-			name = jQuery.propFix[ name ] || name;
-			hooks = jQuery.propHooks[ name ];
-		}
-
-		if ( value !== undefined ) {
-			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
-				return ret;
-
-			} else {
-				return ( elem[ name ] = value );
-			}
-
-		} else {
-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
-				return ret;
-
-			} else {
-				return elem[ name ];
-			}
-		}
-	},
-
-	propHooks: {
-		tabIndex: {
-			get: function( elem ) {
-				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
-				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
-				var attributeNode = elem.getAttributeNode("tabindex");
-
-				return attributeNode && attributeNode.specified ?
-					parseInt( attributeNode.value, 10 ) :
-					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
-						0 :
-						undefined;
-			}
-		}
-	}
-});
-
-// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional)
-jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex;
-
-// Hook for boolean attributes
-boolHook = {
-	get: function( elem, name ) {
-		// Align boolean attributes with corresponding properties
-		// Fall back to attribute presence where some booleans are not supported
-		var attrNode,
-			property = jQuery.prop( elem, name );
-		return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
-			name.toLowerCase() :
-			undefined;
-	},
-	set: function( elem, value, name ) {
-		var propName;
-		if ( value === false ) {
-			// Remove boolean attributes when set to false
-			jQuery.removeAttr( elem, name );
-		} else {
-			// value is true since we know at this point it's type boolean and not false
-			// Set boolean attributes to the same name and set the DOM property
-			propName = jQuery.propFix[ name ] || name;
-			if ( propName in elem ) {
-				// Only set the IDL specifically if it already exists on the element
-				elem[ propName ] = true;
-			}
-
-			elem.setAttribute( name, name.toLowerCase() );
-		}
-		return name;
-	}
-};
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !getSetAttribute ) {
-
-	fixSpecified = {
-		name: true,
-		id: true
-	};
-
-	// Use this for any attribute in IE6/7
-	// This fixes almost every IE6/7 issue
-	nodeHook = jQuery.valHooks.button = {
-		get: function( elem, name ) {
-			var ret;
-			ret = elem.getAttributeNode( name );
-			return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ?
-				ret.nodeValue :
-				undefined;
-		},
-		set: function( elem, value, name ) {
-			// Set the existing or create a new attribute node
-			var ret = elem.getAttributeNode( name );
-			if ( !ret ) {
-				ret = document.createAttribute( name );
-				elem.setAttributeNode( ret );
-			}
-			return ( ret.nodeValue = value + "" );
-		}
-	};
-
-	// Apply the nodeHook to tabindex
-	jQuery.attrHooks.tabindex.set = nodeHook.set;
-
-	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
-	// This is for removals
-	jQuery.each([ "width", "height" ], function( i, name ) {
-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
-			set: function( elem, value ) {
-				if ( value === "" ) {
-					elem.setAttribute( name, "auto" );
-					return value;
-				}
-			}
-		});
-	});
-
-	// Set contenteditable to false on removals(#10429)
-	// Setting to empty string throws an error as an invalid value
-	jQuery.attrHooks.contenteditable = {
-		get: nodeHook.get,
-		set: function( elem, value, name ) {
-			if ( value === "" ) {
-				value = "false";
-			}
-			nodeHook.set( elem, value, name );
-		}
-	};
-}
-
-
-// Some attributes require a special call on IE
-if ( !jQuery.support.hrefNormalized ) {
-	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
-			get: function( elem ) {
-				var ret = elem.getAttribute( name, 2 );
-				return ret === null ? undefined : ret;
-			}
-		});
-	});
-}
-
-if ( !jQuery.support.style ) {
-	jQuery.attrHooks.style = {
-		get: function( elem ) {
-			// Return undefined in the case of empty string
-			// Normalize to lowercase since IE uppercases css property names
-			return elem.style.cssText.toLowerCase() || undefined;
-		},
-		set: function( elem, value ) {
-			return ( elem.style.cssText = "" + value );
-		}
-	};
-}
-
-// Safari mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !jQuery.support.optSelected ) {
-	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
-		get: function( elem ) {
-			var parent = elem.parentNode;
-
-			if ( parent ) {
-				parent.selectedIndex;
-
-				// Make sure that it also works with optgroups, see #5701
-				if ( parent.parentNode ) {
-					parent.parentNode.selectedIndex;
-				}
-			}
-			return null;
-		}
-	});
-}
-
-// IE6/7 call enctype encoding
-if ( !jQuery.support.enctype ) {
-	jQuery.propFix.enctype = "encoding";
-}
-
-// Radios and checkboxes getter/setter
-if ( !jQuery.support.checkOn ) {
-	jQuery.each([ "radio", "checkbox" ], function() {
-		jQuery.valHooks[ this ] = {
-			get: function( elem ) {
-				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
-				return elem.getAttribute("value") === null ? "on" : elem.value;
-			}
-		};
-	});
-}
-jQuery.each([ "radio", "checkbox" ], function() {
-	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
-		set: function( elem, value ) {
-			if ( jQuery.isArray( value ) ) {
-				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
-			}
-		}
-	});
-});
-
-
-
-
-var rformElems = /^(?:textarea|input|select)$/i,
-	rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/,
-	rhoverHack = /\bhover(\.\S+)?\b/,
-	rkeyEvent = /^key/,
-	rmouseEvent = /^(?:mouse|contextmenu)|click/,
-	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
-	rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
-	quickParse = function( selector ) {
-		var quick = rquickIs.exec( selector );
-		if ( quick ) {
-			//   0  1    2   3
-			// [ _, tag, id, class ]
-			quick[1] = ( quick[1] || "" ).toLowerCase();
-			quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" );
-		}
-		return quick;
-	},
-	quickIs = function( elem, m ) {
-		var attrs = elem.attributes || {};
-		return (
-			(!m[1] || elem.nodeName.toLowerCase() === m[1]) &&
-			(!m[2] || (attrs.id || {}).value === m[2]) &&
-			(!m[3] || m[3].test( (attrs[ "class" ] || {}).value ))
-		);
-	},
-	hoverHack = function( events ) {
-		return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
-	};
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
-	add: function( elem, types, handler, data, selector ) {
-
-		var elemData, eventHandle, events,
-			t, tns, type, namespaces, handleObj,
-			handleObjIn, quick, handlers, special;
-
-		// Don't attach events to noData or text/comment nodes (allow plain objects tho)
-		if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
-			return;
-		}
-
-		// Caller can pass in an object of custom data in lieu of the handler
-		if ( handler.handler ) {
-			handleObjIn = handler;
-			handler = handleObjIn.handler;
-		}
-
-		// Make sure that the handler has a unique ID, used to find/remove it later
-		if ( !handler.guid ) {
-			handler.guid = jQuery.guid++;
-		}
-
-		// Init the element's event structure and main handler, if this is the first
-		events = elemData.events;
-		if ( !events ) {
-			elemData.events = events = {};
-		}
-		eventHandle = elemData.handle;
-		if ( !eventHandle ) {
-			elemData.handle = eventHandle = function( e ) {
-				// Discard the second event of a jQuery.event.trigger() and
-				// when an event is called after a page has unloaded
-				return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
-					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
-					undefined;
-			};
-			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
-			eventHandle.elem = elem;
-		}
-
-		// Handle multiple events separated by a space
-		// jQuery(...).bind("mouseover mouseout", fn);
-		types = jQuery.trim( hoverHack(types) ).split( " " );
-		for ( t = 0; t < types.length; t++ ) {
-
-			tns = rtypenamespace.exec( types[t] ) || [];
-			type = tns[1];
-			namespaces = ( tns[2] || "" ).split( "." ).sort();
-
-			// If event changes its type, use the special event handlers for the changed type
-			special = jQuery.event.special[ type ] || {};
-
-			// If selector defined, determine special event api type, otherwise given type
-			type = ( selector ? special.delegateType : special.bindType ) || type;
-
-			// Update special based on newly reset type
-			special = jQuery.event.special[ type ] || {};
-
-			// handleObj is passed to all event handlers
-			handleObj = jQuery.extend({
-				type: type,
-				origType: tns[1],
-				data: data,
-				handler: handler,
-				guid: handler.guid,
-				selector: selector,
-				quick: quickParse( selector ),
-				namespace: namespaces.join(".")
-			}, handleObjIn );
-
-			// Init the event handler queue if we're the first
-			handlers = events[ type ];
-			if ( !handlers ) {
-				handlers = events[ type ] = [];
-				handlers.delegateCount = 0;
-
-				// Only use addEventListener/attachEvent if the special events handler returns false
-				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-					// Bind the global event handler to the element
-					if ( elem.addEventListener ) {
-						elem.addEventListener( type, eventHandle, false );
-
-					} else if ( elem.attachEvent ) {
-						elem.attachEvent( "on" + type, eventHandle );
-					}
-				}
-			}
-
-			if ( special.add ) {
-				special.add.call( elem, handleObj );
-
-				if ( !handleObj.handler.guid ) {
-					handleObj.handler.guid = handler.guid;
-				}
-			}
-
-			// Add to the element's handler list, delegates in front
-			if ( selector ) {
-				handlers.splice( handlers.delegateCount++, 0, handleObj );
-			} else {
-				handlers.push( handleObj );
-			}
-
-			// Keep track of which events have ever been used, for event optimization
-			jQuery.event.global[ type ] = true;
-		}
-
-		// Nullify elem to prevent memory leaks in IE
-		elem = null;
-	},
-
-	global: {},
-
-	// Detach an event or set of events from an element
-	remove: function( elem, types, handler, selector, mappedTypes ) {
-
-		var elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
-			t, tns, type, origType, namespaces, origCount,
-			j, events, special, handle, eventType, handleObj;
-
-		if ( !elemData || !(events = elemData.events) ) {
-			return;
-		}
-
-		// Once for each type.namespace in types; type may be omitted
-		types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
-		for ( t = 0; t < types.length; t++ ) {
-			tns = rtypenamespace.exec( types[t] ) || [];
-			type = origType = tns[1];
-			namespaces = tns[2];
-
-			// Unbind all events (on this namespace, if provided) for the element
-			if ( !type ) {
-				for ( type in events ) {
-					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
-				}
-				continue;
-			}
-
-			special = jQuery.event.special[ type ] || {};
-			type = ( selector? special.delegateType : special.bindType ) || type;
-			eventType = events[ type ] || [];
-			origCount = eventType.length;
-			namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
-
-			// Remove matching events
-			for ( j = 0; j < eventType.length; j++ ) {
-				handleObj = eventType[ j ];
-
-				if ( ( mappedTypes || origType === handleObj.origType ) &&
-					 ( !handler || handler.guid === handleObj.guid ) &&
-					 ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
-					 ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
-					eventType.splice( j--, 1 );
-
-					if ( handleObj.selector ) {
-						eventType.delegateCount--;
-					}
-					if ( special.remove ) {
-						special.remove.call( elem, handleObj );
-					}
-				}
-			}
-
-			// Remove generic event handler if we removed something and no more handlers exist
-			// (avoids potential for endless recursion during removal of special event handlers)
-			if ( eventType.length === 0 && origCount !== eventType.length ) {
-				if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
-					jQuery.removeEvent( elem, type, elemData.handle );
-				}
-
-				delete events[ type ];
-			}
-		}
-
-		// Remove the expando if it's no longer used
-		if ( jQuery.isEmptyObject( events ) ) {
-			handle = elemData.handle;
-			if ( handle ) {
-				handle.elem = null;
-			}
-
-			// removeData also checks for emptiness and clears the expando if empty
-			// so use it instead of delete
-			jQuery.removeData( elem, [ "events", "handle" ], true );
-		}
-	},
-
-	// Events that are safe to short-circuit if no handlers are attached.
-	// Native DOM events should not be added, they may have inline handlers.
-	customEvent: {
-		"getData": true,
-		"setData": true,
-		"changeData": true
-	},
-
-	trigger: function( event, data, elem, onlyHandlers ) {
-		// Don't do events on text and comment nodes
-		if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
-			return;
-		}
-
-		// Event object or event type
-		var type = event.type || event,
-			namespaces = [],
-			cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;
-
-		// focus/blur morphs to focusin/out; ensure we're not firing them right now
-		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
-			return;
-		}
-
-		if ( type.indexOf( "!" ) >= 0 ) {
-			// Exclusive events trigger only for the exact event (no namespaces)
-			type = type.slice(0, -1);
-			exclusive = true;
-		}
-
-		if ( type.indexOf( "." ) >= 0 ) {
-			// Namespaced trigger; create a regexp to match event type in handle()
-			namespaces = type.split(".");
-			type = namespaces.shift();
-			namespaces.sort();
-		}
-
-		if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
-			// No jQuery handlers for this event type, and it can't have inline handlers
-			return;
-		}
-
-		// Caller can pass in an Event, Object, or just an event type string
-		event = typeof event === "object" ?
-			// jQuery.Event object
-			event[ jQuery.expando ] ? event :
-			// Object literal
-			new jQuery.Event( type, event ) :
-			// Just the event type (string)
-			new jQuery.Event( type );
-
-		event.type = type;
-		event.isTrigger = true;
-		event.exclusive = exclusive;
-		event.namespace = namespaces.join( "." );
-		event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
-		ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
-
-		// Handle a global trigger
-		if ( !elem ) {
-
-			// TODO: Stop taunting the data cache; remove global events and always attach to document
-			cache = jQuery.cache;
-			for ( i in cache ) {
-				if ( cache[ i ].events && cache[ i ].events[ type ] ) {
-					jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
-				}
-			}
-			return;
-		}
-
-		// Clean up the event in case it is being reused
-		event.result = undefined;
-		if ( !event.target ) {
-			event.target = elem;
-		}
-
-		// Clone any incoming data and prepend the event, creating the handler arg list
-		data = data != null ? jQuery.makeArray( data ) : [];
-		data.unshift( event );
-
-		// Allow special events to draw outside the lines
-		special = jQuery.event.special[ type ] || {};
-		if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
-			return;
-		}
-
-		// Determine event propagation path in advance, per W3C events spec (#9951)
-		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
-		eventPath = [[ elem, special.bindType || type ]];
-		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
-			bubbleType = special.delegateType || type;
-			cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
-			old = null;
-			for ( ; cur; cur = cur.parentNode ) {
-				eventPath.push([ cur, bubbleType ]);
-				old = cur;
-			}
-
-			// Only add window if we got to document (e.g., not plain obj or detached DOM)
-			if ( old && old === elem.ownerDocument ) {
-				eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
-			}
-		}
-
-		// Fire handlers on the event path
-		for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
-
-			cur = eventPath[i][0];
-			event.type = eventPath[i][1];
-
-			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
-			if ( handle ) {
-				handle.apply( cur, data );
-			}
-			// Note that this is a bare JS function and not a jQuery handler
-			handle = ontype && cur[ ontype ];
-			if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
-				event.preventDefault();
-			}
-		}
-		event.type = type;
-
-		// If nobody prevented the default action, do it now
-		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
-			if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
-				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
-
-				// Call a native DOM method on the target with the same name name as the event.
-				// Can't use an .isFunction() check here because IE6/7 fails that test.
-				// Don't do default actions on window, that's where global variables be (#6170)
-				// IE<9 dies on focus/blur to hidden element (#1486)
-				if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
-
-					// Don't re-trigger an onFOO event when we call its FOO() method
-					old = elem[ ontype ];
-
-					if ( old ) {
-						elem[ ontype ] = null;
-					}
-
-					// Prevent re-triggering of the same event, since we already bubbled it above
-					jQuery.event.triggered = type;
-					elem[ type ]();
-					jQuery.event.triggered = undefined;
-
-					if ( old ) {
-						elem[ ontype ] = old;
-					}
-				}
-			}
-		}
-
-		return event.result;
-	},
-
-	dispatch: function( event ) {
-
-		// Make a writable jQuery.Event from the native event object
-		event = jQuery.event.fix( event || window.event );
-
-		var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
-			delegateCount = handlers.delegateCount,
-			args = [].slice.call( arguments, 0 ),
-			run_all = !event.exclusive && !event.namespace,
-			handlerQueue = [],
-			i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related;
-
-		// Use the fix-ed jQuery.Event rather than the (read-only) native event
-		args[0] = event;
-		event.delegateTarget = this;
-
-		// Determine handlers that should run if there are delegated events
-		// Avoid disabled elements in IE (#6911) and non-left-click bubbling in Firefox (#3861)
-		if ( delegateCount && !event.target.disabled && !(event.button && event.type === "click") ) {
-
-			// Pregenerate a single jQuery object for reuse with .is()
-			jqcur = jQuery(this);
-			jqcur.context = this.ownerDocument || this;
-
-			for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
-				selMatch = {};
-				matches = [];
-				jqcur[0] = cur;
-				for ( i = 0; i < delegateCount; i++ ) {
-					handleObj = handlers[ i ];
-					sel = handleObj.selector;
-
-					if ( selMatch[ sel ] === undefined ) {
-						selMatch[ sel ] = (
-							handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel )
-						);
-					}
-					if ( selMatch[ sel ] ) {
-						matches.push( handleObj );
-					}
-				}
-				if ( matches.length ) {
-					handlerQueue.push({ elem: cur, matches: matches });
-				}
-			}
-		}
-
-		// Add the remaining (directly-bound) handlers
-		if ( handlers.length > delegateCount ) {
-			handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
-		}
-
-		// Run delegates first; they may want to stop propagation beneath us
-		for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
-			matched = handlerQueue[ i ];
-			event.currentTarget = matched.elem;
-
-			for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
-				handleObj = matched.matches[ j ];
-
-				// Triggered event must either 1) be non-exclusive and have no namespace, or
-				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
-				if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
-
-					event.data = handleObj.data;
-					event.handleObj = handleObj;
-
-					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
-							.apply( matched.elem, args );
-
-					if ( ret !== undefined ) {
-						event.result = ret;
-						if ( ret === false ) {
-							event.preventDefault();
-							event.stopPropagation();
-						}
-					}
-				}
-			}
-		}
-
-		return event.result;
-	},
-
-	// Includes some event props shared by KeyEvent and MouseEvent
-	// *** attrChange attrName relatedNode srcElement  are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
-	props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
-
-	fixHooks: {},
-
-	keyHooks: {
-		props: "char charCode key keyCode".split(" "),
-		filter: function( event, original ) {
-
-			// Add which for key events
-			if ( event.which == null ) {
-				event.which = original.charCode != null ? original.charCode : original.keyCode;
-			}
-
-			return event;
-		}
-	},
-
-	mouseHooks: {
-		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
-		filter: function( event, original ) {
-			var eventDoc, doc, body,
-				button = original.button,
-				fromElement = original.fromElement;
-
-			// Calculate pageX/Y if missing and clientX/Y available
-			if ( event.pageX == null && original.clientX != null ) {
-				eventDoc = event.target.ownerDocument || document;
-				doc = eventDoc.documentElement;
-				body = eventDoc.body;
-
-				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
-				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
-			}
-
-			// Add relatedTarget, if necessary
-			if ( !event.relatedTarget && fromElement ) {
-				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
-			}
-
-			// Add which for click: 1 === left; 2 === middle; 3 === right
-			// Note: button is not normalized, so don't use it
-			if ( !event.which && button !== undefined ) {
-				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
-			}
-
-			return event;
-		}
-	},
-
-	fix: function( event ) {
-		if ( event[ jQuery.expando ] ) {
-			return event;
-		}
-
-		// Create a writable copy of the event object and normalize some properties
-		var i, prop,
-			originalEvent = event,
-			fixHook = jQuery.event.fixHooks[ event.type ] || {},
-			copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
-		event = jQuery.Event( originalEvent );
-
-		for ( i = copy.length; i; ) {
-			prop = copy[ --i ];
-			event[ prop ] = originalEvent[ prop ];
-		}
-
-		// Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
-		if ( !event.target ) {
-			event.target = originalEvent.srcElement || document;
-		}
-
-		// Target should not be a text node (#504, Safari)
-		if ( event.target.nodeType === 3 ) {
-			event.target = event.target.parentNode;
-		}
-
-		// For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8)
-		if ( event.metaKey === undefined ) {
-			event.metaKey = event.ctrlKey;
-		}
-
-		return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
-	},
-
-	special: {
-		ready: {
-			// Make sure the ready event is setup
-			setup: jQuery.bindReady
-		},
-
-		load: {
-			// Prevent triggered image.load events from bubbling to window.load
-			noBubble: true
-		},
-
-		focus: {
-			delegateType: "focusin"
-		},
-		blur: {
-			delegateType: "focusout"
-		},
-
-		beforeunload: {
-			setup: function( data, namespaces, eventHandle ) {
-				// We only want to do this special case on windows
-				if ( jQuery.isWindow( this ) ) {
-					this.onbeforeunload = eventHandle;
-				}
-			},
-
-			teardown: function( namespaces, eventHandle ) {
-				if ( this.onbeforeunload === eventHandle ) {
-					this.onbeforeunload = null;
-				}
-			}
-		}
-	},
-
-	simulate: function( type, elem, event, bubble ) {
-		// Piggyback on a donor event to simulate a different one.
-		// Fake originalEvent to avoid donor's stopPropagation, but if the
-		// simulated event prevents default then we do the same on the donor.
-		var e = jQuery.extend(
-			new jQuery.Event(),
-			event,
-			{ type: type,
-				isSimulated: true,
-				originalEvent: {}
-			}
-		);
-		if ( bubble ) {
-			jQuery.event.trigger( e, null, elem );
-		} else {
-			jQuery.event.dispatch.call( elem, e );
-		}
-		if ( e.isDefaultPrevented() ) {
-			event.preventDefault();
-		}
-	}
-};
-
-// Some plugins are using, but it's undocumented/deprecated and will be removed.
-// The 1.7 special event interface should provide all the hooks needed now.
-jQuery.event.handle = jQuery.event.dispatch;
-
-jQuery.removeEvent = document.removeEventListener ?
-	function( elem, type, handle ) {
-		if ( elem.removeEventListener ) {
-			elem.removeEventListener( type, handle, false );
-		}
-	} :
-	function( elem, type, handle ) {
-		if ( elem.detachEvent ) {
-			elem.detachEvent( "on" + type, handle );
-		}
-	};
-
-jQuery.Event = function( src, props ) {
-	// Allow instantiation without the 'new' keyword
-	if ( !(this instanceof jQuery.Event) ) {
-		return new jQuery.Event( src, props );
-	}
-
-	// Event object
-	if ( src && src.type ) {
-		this.originalEvent = src;
-		this.type = src.type;
-
-		// Events bubbling up the document may have been marked as prevented
-		// by a handler lower down the tree; reflect the correct value.
-		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
-			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
-
-	// Event type
-	} else {
-		this.type = src;
-	}
-
-	// Put explicitly provided properties onto the event object
-	if ( props ) {
-		jQuery.extend( this, props );
-	}
-
-	// Create a timestamp if incoming event doesn't have one
-	this.timeStamp = src && src.timeStamp || jQuery.now();
-
-	// Mark it as fixed
-	this[ jQuery.expando ] = true;
-};
-
-function returnFalse() {
-	return false;
-}
-function returnTrue() {
-	return true;
-}
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
-	preventDefault: function() {
-		this.isDefaultPrevented = returnTrue;
-
-		var e = this.originalEvent;
-		if ( !e ) {
-			return;
-		}
-
-		// if preventDefault exists run it on the original event
-		if ( e.preventDefault ) {
-			e.preventDefault();
-
-		// otherwise set the returnValue property of the original event to false (IE)
-		} else {
-			e.returnValue = false;
-		}
-	},
-	stopPropagation: function() {
-		this.isPropagationStopped = returnTrue;
-
-		var e = this.originalEvent;
-		if ( !e ) {
-			return;
-		}
-		// if stopPropagation exists run it on the original event
-		if ( e.stopPropagation ) {
-			e.stopPropagation();
-		}
-		// otherwise set the cancelBubble property of the original event to true (IE)
-		e.cancelBubble = true;
-	},
-	stopImmediatePropagation: function() {
-		this.isImmediatePropagationStopped = returnTrue;
-		this.stopPropagation();
-	},
-	isDefaultPrevented: returnFalse,
-	isPropagationStopped: returnFalse,
-	isImmediatePropagationStopped: returnFalse
-};
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-jQuery.each({
-	mouseenter: "mouseover",
-	mouseleave: "mouseout"
-}, function( orig, fix ) {
-	jQuery.event.special[ orig ] = {
-		delegateType: fix,
-		bindType: fix,
-
-		handle: function( event ) {
-			var target = this,
-				related = event.relatedTarget,
-				handleObj = event.handleObj,
-				selector = handleObj.selector,
-				ret;
-
-			// For mousenter/leave call the handler if related is outside the target.
-			// NB: No relatedTarget if the mouse left/entered the browser window
-			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
-				event.type = handleObj.origType;
-				ret = handleObj.handler.apply( this, arguments );
-				event.type = fix;
-			}
-			return ret;
-		}
-	};
-});
-
-// IE submit delegation
-if ( !jQuery.support.submitBubbles ) {
-
-	jQuery.event.special.submit = {
-		setup: function() {
-			// Only need this for delegated form submit events
-			if ( jQuery.nodeName( this, "form" ) ) {
-				return false;
-			}
-
-			// Lazy-add a submit handler when a descendant form may potentially be submitted
-			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
-				// Node name check avoids a VML-related crash in IE (#9807)
-				var elem = e.target,
-					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
-				if ( form && !form._submit_attached ) {
-					jQuery.event.add( form, "submit._submit", function( event ) {
-						// If form was submitted by the user, bubble the event up the tree
-						if ( this.parentNode && !event.isTrigger ) {
-							jQuery.event.simulate( "submit", this.parentNode, event, true );
-						}
-					});
-					form._submit_attached = true;
-				}
-			});
-			// return undefined since we don't need an event listener
-		},
-
-		teardown: function() {
-			// Only need this for delegated form submit events
-			if ( jQuery.nodeName( this, "form" ) ) {
-				return false;
-			}
-
-			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
-			jQuery.event.remove( this, "._submit" );
-		}
-	};
-}
-
-// IE change delegation and checkbox/radio fix
-if ( !jQuery.support.changeBubbles ) {
-
-	jQuery.event.special.change = {
-
-		setup: function() {
-
-			if ( rformElems.test( this.nodeName ) ) {
-				// IE doesn't fire change on a check/radio until blur; trigger it on click
-				// after a propertychange. Eat the blur-change in special.change.handle.
-				// This still fires onchange a second time for check/radio after blur.
-				if ( this.type === "checkbox" || this.type === "radio" ) {
-					jQuery.event.add( this, "propertychange._change", function( event ) {
-						if ( event.originalEvent.propertyName === "checked" ) {
-							this._just_changed = true;
-						}
-					});
-					jQuery.event.add( this, "click._change", function( event ) {
-						if ( this._just_changed && !event.isTrigger ) {
-							this._just_changed = false;
-							jQuery.event.simulate( "change", this, event, true );
-						}
-					});
-				}
-				return false;
-			}
-			// Delegated event; lazy-add a change handler on descendant inputs
-			jQuery.event.add( this, "beforeactivate._change", function( e ) {
-				var elem = e.target;
-
-				if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {
-					jQuery.event.add( elem, "change._change", function( event ) {
-						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
-							jQuery.event.simulate( "change", this.parentNode, event, true );
-						}
-					});
-					elem._change_attached = true;
-				}
-			});
-		},
-
-		handle: function( event ) {
-			var elem = event.target;
-
-			// Swallow native change events from checkbox/radio, we already triggered them above
-			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
-				return event.handleObj.handler.apply( this, arguments );
-			}
-		},
-
-		teardown: function() {
-			jQuery.event.remove( this, "._change" );
-
-			return rformElems.test( this.nodeName );
-		}
-	};
-}
-
-// Create "bubbling" focus and blur events
-if ( !jQuery.support.focusinBubbles ) {
-	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
-		// Attach a single capturing handler while someone wants focusin/focusout
-		var attaches = 0,
-			handler = function( event ) {
-				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
-			};
-
-		jQuery.event.special[ fix ] = {
-			setup: function() {
-				if ( attaches++ === 0 ) {
-					document.addEventListener( orig, handler, true );
-				}
-			},
-			teardown: function() {
-				if ( --attaches === 0 ) {
-					document.removeEventListener( orig, handler, true );
-				}
-			}
-		};
-	});
-}
-
-jQuery.fn.extend({
-
-	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
-		var origFn, type;
-
-		// Types can be a map of types/handlers
-		if ( typeof types === "object" ) {
-			// ( types-Object, selector, data )
-			if ( typeof selector !== "string" ) {
-				// ( types-Object, data )
-				data = selector;
-				selector = undefined;
-			}
-			for ( type in types ) {
-				this.on( type, selector, data, types[ type ], one );
-			}
-			return this;
-		}
-
-		if ( data == null && fn == null ) {
-			// ( types, fn )
-			fn = selector;
-			data = selector = undefined;
-		} else if ( fn == null ) {
-			if ( typeof selector === "string" ) {
-				// ( types, selector, fn )
-				fn = data;
-				data = undefined;
-			} else {
-				// ( types, data, fn )
-				fn = data;
-				data = selector;
-				selector = undefined;
-			}
-		}
-		if ( fn === false ) {
-			fn = returnFalse;
-		} else if ( !fn ) {
-			return this;
-		}
-
-		if ( one === 1 ) {
-			origFn = fn;
-			fn = function( event ) {
-				// Can use an empty set, since event contains the info
-				jQuery().off( event );
-				return origFn.apply( this, arguments );
-			};
-			// Use same guid so caller can remove using origFn
-			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
-		}
-		return this.each( function() {
-			jQuery.event.add( this, types, fn, data, selector );
-		});
-	},
-	one: function( types, selector, data, fn ) {
-		return this.on.call( this, types, selector, data, fn, 1 );
-	},
-	off: function( types, selector, fn ) {
-		if ( types && types.preventDefault && types.handleObj ) {
-			// ( event )  dispatched jQuery.Event
-			var handleObj = types.handleObj;
-			jQuery( types.delegateTarget ).off(
-				handleObj.namespace? handleObj.type + "." + handleObj.namespace : handleObj.type,
-				handleObj.selector,
-				handleObj.handler
-			);
-			return this;
-		}
-		if ( typeof types === "object" ) {
-			// ( types-object [, selector] )
-			for ( var type in types ) {
-				this.off( type, selector, types[ type ] );
-			}
-			return this;
-		}
-		if ( selector === false || typeof selector === "function" ) {
-			// ( types [, fn] )
-			fn = selector;
-			selector = undefined;
-		}
-		if ( fn === false ) {
-			fn = returnFalse;
-		}
-		return this.each(function() {
-			jQuery.event.remove( this, types, fn, selector );
-		});
-	},
-
-	bind: function( types, data, fn ) {
-		return this.on( types, null, data, fn );
-	},
-	unbind: function( types, fn ) {
-		return this.off( types, null, fn );
-	},
-
-	live: function( types, data, fn ) {
-		jQuery( this.context ).on( types, this.selector, data, fn );
-		return this;
-	},
-	die: function( types, fn ) {
-		jQuery( this.context ).off( types, this.selector || "**", fn );
-		return this;
-	},
-
-	delegate: function( selector, types, data, fn ) {
-		return this.on( types, selector, data, fn );
-	},
-	undelegate: function( selector, types, fn ) {
-		// ( namespace ) or ( selector, types [, fn] )
-		return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
-	},
-
-	trigger: function( type, data ) {
-		return this.each(function() {
-			jQuery.event.trigger( type, data, this );
-		});
-	},
-	triggerHandler: function( type, data ) {
-		if ( this[0] ) {
-			return jQuery.event.trigger( type, data, this[0], true );
-		}
-	},
-
-	toggle: function( fn ) {
-		// Save reference to arguments for access in closure
-		var args = arguments,
-			guid = fn.guid || jQuery.guid++,
-			i = 0,
-			toggler = function( event ) {
-				// Figure out which function to execute
-				var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
-				jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
-
-				// Make sure that clicks stop
-				event.preventDefault();
-
-				// and execute the function
-				return args[ lastToggle ].apply( this, arguments ) || false;
-			};
-
-		// link all the functions, so any of them can unbind this click handler
-		toggler.guid = guid;
-		while ( i < args.length ) {
-			args[ i++ ].guid = guid;
-		}
-
-		return this.click( toggler );
-	},
-
-	hover: function( fnOver, fnOut ) {
-		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
-	}
-});
-
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
-	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
-	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
-
-	// Handle event binding
-	jQuery.fn[ name ] = function( data, fn ) {
-		if ( fn == null ) {
-			fn = data;
-			data = null;
-		}
-
-		return arguments.length > 0 ?
-			this.on( name, null, data, fn ) :
-			this.trigger( name );
-	};
-
-	if ( jQuery.attrFn ) {
-		jQuery.attrFn[ name ] = true;
-	}
-
-	if ( rkeyEvent.test( name ) ) {
-		jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
-	}
-
-	if ( rmouseEvent.test( name ) ) {
-		jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
-	}
-});
-
-
-
-/*!
- * Sizzle CSS Selector Engine
- *  Copyright 2011, The Dojo Foundation
- *  Released under the MIT, BSD, and GPL Licenses.
- *  More information: http://sizzlejs.com/
- */
-(function(){
-
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
-	expando = "sizcache" + (Math.random() + '').replace('.', ''),
-	done = 0,
-	toString = Object.prototype.toString,
-	hasDuplicate = false,
-	baseHasDuplicate = true,
-	rBackslash = /\\/g,
-	rReturn = /\r\n/g,
-	rNonWord = /\W/;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-//   Thus far that includes Google Chrome.
-[0, 0].sort(function() {
-	baseHasDuplicate = false;
-	return 0;
-});
-
-var Sizzle = function( selector, context, results, seed ) {
-	results = results || [];
-	context = context || document;
-
-	var origContext = context;
-
-	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
-		return [];
-	}
-	
-	if ( !selector || typeof selector !== "string" ) {
-		return results;
-	}
-
-	var m, set, checkSet, extra, ret, cur, pop, i,
-		prune = true,
-		contextXML = Sizzle.isXML( context ),
-		parts = [],
-		soFar = selector;
-	
-	// Reset the position of the chunker regexp (start from head)
-	do {
-		chunker.exec( "" );
-		m = chunker.exec( soFar );
-
-		if ( m ) {
-			soFar = m[3];
-		
-			parts.push( m[1] );
-		
-			if ( m[2] ) {
-				extra = m[3];
-				break;
-			}
-		}
-	} while ( m );
-
-	if ( parts.length > 1 && origPOS.exec( selector ) ) {
-
-		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
-			set = posProcess( parts[0] + parts[1], context, seed );
-
-		} else {
-			set = Expr.relative[ parts[0] ] ?
-				[ context ] :
-				Sizzle( parts.shift(), context );
-
-			while ( parts.length ) {
-				selector = parts.shift();
-
-				if ( Expr.relative[ selector ] ) {
-					selector += parts.shift();
-				}
-				
-				set = posProcess( selector, set, seed );
-			}
-		}
-
-	} else {
-		// Take a shortcut and set the context if the root selector is an ID
-		// (but not if it'll be faster if the inner selector is an ID)
-		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
-				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
-
-			ret = Sizzle.find( parts.shift(), context, contextXML );
-			context = ret.expr ?
-				Sizzle.filter( ret.expr, ret.set )[0] :
-				ret.set[0];
-		}
-
-		if ( context ) {
-			ret = seed ?
-				{ expr: parts.pop(), set: makeArray(seed) } :
-				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
-
-			set = ret.expr ?
-				Sizzle.filter( ret.expr, ret.set ) :
-				ret.set;
-
-			if ( parts.length > 0 ) {
-				checkSet = makeArray( set );
-
-			} else {
-				prune = false;
-			}
-
-			while ( parts.length ) {
-				cur = parts.pop();
-				pop = cur;
-
-				if ( !Expr.relative[ cur ] ) {
-					cur = "";
-				} else {
-					pop = parts.pop();
-				}
-
-				if ( pop == null ) {
-					pop = context;
-				}
-
-				Expr.relative[ cur ]( checkSet, pop, contextXML );
-			}
-
-		} else {
-			checkSet = parts = [];
-		}
-	}
-
-	if ( !checkSet ) {
-		checkSet = set;
-	}
-
-	if ( !checkSet ) {
-		Sizzle.error( cur || selector );
-	}
-
-	if ( toString.call(checkSet) === "[object Array]" ) {
-		if ( !prune ) {
-			results.push.apply( results, checkSet );
-
-		} else if ( context && context.nodeType === 1 ) {
-			for ( i = 0; checkSet[i] != null; i++ ) {
-				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
-					results.push( set[i] );
-				}
-			}
-
-		} else {
-			for ( i = 0; checkSet[i] != null; i++ ) {
-				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
-					results.push( set[i] );
-				}
-			}
-		}
-
-	} else {
-		makeArray( checkSet, results );
-	}
-
-	if ( extra ) {
-		Sizzle( extra, origContext, results, seed );
-		Sizzle.uniqueSort( results );
-	}
-
-	return results;
-};
-
-Sizzle.uniqueSort = function( results ) {
-	if ( sortOrder ) {
-		hasDuplicate = baseHasDuplicate;
-		results.sort( sortOrder );
-
-		if ( hasDuplicate ) {
-			for ( var i = 1; i < results.length; i++ ) {
-				if ( results[i] === results[ i - 1 ] ) {
-					results.splice( i--, 1 );
-				}
-			}
-		}
-	}
-
-	return results;
-};
-
-Sizzle.matches = function( expr, set ) {
-	return Sizzle( expr, null, null, set );
-};
-
-Sizzle.matchesSelector = function( node, expr ) {
-	return Sizzle( expr, null, null, [node] ).length > 0;
-};
-
-Sizzle.find = function( expr, context, isXML ) {
-	var set, i, len, match, type, left;
-
-	if ( !expr ) {
-		return [];
-	}
-
-	for ( i = 0, len = Expr.order.length; i < len; i++ ) {
-		type = Expr.order[i];
-		
-		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
-			left = match[1];
-			match.splice( 1, 1 );
-
-			if ( left.substr( left.length - 1 ) !== "\\" ) {
-				match[1] = (match[1] || "").replace( rBackslash, "" );
-				set = Expr.find[ type ]( match, context, isXML );
-
-				if ( set != null ) {
-					expr = expr.replace( Expr.match[ type ], "" );
-					break;
-				}
-			}
-		}
-	}
-
-	if ( !set ) {
-		set = typeof context.getElementsByTagName !== "undefined" ?
-			context.getElementsByTagName( "*" ) :
-			[];
-	}
-
-	return { set: set, expr: expr };
-};
-
-Sizzle.filter = function( expr, set, inplace, not ) {
-	var match, anyFound,
-		type, found, item, filter, left,
-		i, pass,
-		old = expr,
-		result = [],
-		curLoop = set,
-		isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
-
-	while ( expr && set.length ) {
-		for ( type in Expr.filter ) {
-			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
-				filter = Expr.filter[ type ];
-				left = match[1];
-
-				anyFound = false;
-
-				match.splice(1,1);
-
-				if ( left.substr( left.length - 1 ) === "\\" ) {
-					continue;
-				}
-
-				if ( curLoop === result ) {
-					result = [];
-				}
-
-				if ( Expr.preFilter[ type ] ) {
-					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
-					if ( !match ) {
-						anyFound = found = true;
-
-					} else if ( match === true ) {
-						continue;
-					}
-				}
-
-				if ( match ) {
-					for ( i = 0; (item = curLoop[i]) != null; i++ ) {
-						if ( item ) {
-							found = filter( item, match, i, curLoop );
-							pass = not ^ found;
-
-							if ( inplace && found != null ) {
-								if ( pass ) {
-									anyFound = true;
-
-								} else {
-									curLoop[i] = false;
-								}
-
-							} else if ( pass ) {
-								result.push( item );
-								anyFound = true;
-							}
-						}
-					}
-				}
-
-				if ( found !== undefined ) {
-					if ( !inplace ) {
-						curLoop = result;
-					}
-
-					expr = expr.replace( Expr.match[ type ], "" );
-
-					if ( !anyFound ) {
-						return [];
-					}
-
-					break;
-				}
-			}
-		}
-
-		// Improper expression
-		if ( expr === old ) {
-			if ( anyFound == null ) {
-				Sizzle.error( expr );
-
-			} else {
-				break;
-			}
-		}
-
-		old = expr;
-	}
-
-	return curLoop;
-};
-
-Sizzle.error = function( msg ) {
-	throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Utility function for retreiving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-var getText = Sizzle.getText = function( elem ) {
-    var i, node,
-		nodeType = elem.nodeType,
-		ret = "";
-
-	if ( nodeType ) {
-		if ( nodeType === 1 || nodeType === 9 ) {
-			// Use textContent || innerText for elements
-			if ( typeof elem.textContent === 'string' ) {
-				return elem.textContent;
-			} else if ( typeof elem.innerText === 'string' ) {
-				// Replace IE's carriage returns
-				return elem.innerText.replace( rReturn, '' );
-			} else {
-				// Traverse it's children
-				for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
-					ret += getText( elem );
-				}
-			}
-		} else if ( nodeType === 3 || nodeType === 4 ) {
-			return elem.nodeValue;
-		}
-	} else {
-
-		// If no nodeType, this is expected to be an array
-		for ( i = 0; (node = elem[i]); i++ ) {
-			// Do not traverse comment nodes
-			if ( node.nodeType !== 8 ) {
-				ret += getText( node );
-			}
-		}
-	}
-	return ret;
-};
-
-var Expr = Sizzle.selectors = {
-	order: [ "ID", "NAME", "TAG" ],
-
-	match: {
-		ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
-		CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
-		NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
-		ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
-		TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
-		CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
-		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
-		PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
-	},
-
-	leftMatch: {},
-
-	attrMap: {
-		"class": "className",
-		"for": "htmlFor"
-	},
-
-	attrHandle: {
-		href: function( elem ) {
-			return elem.getAttribute( "href" );
-		},
-		type: function( elem ) {
-			return elem.getAttribute( "type" );
-		}
-	},
-
-	relative: {
-		"+": function(checkSet, part){
-			var isPartStr = typeof part === "string",
-				isTag = isPartStr && !rNonWord.test( part ),
-				isPartStrNotTag = isPartStr && !isTag;
-
-			if ( isTag ) {
-				part = part.toLowerCase();
-			}
-
-			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
-				if ( (elem = checkSet[i]) ) {
-					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
-					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
-						elem || false :
-						elem === part;
-				}
-			}
-
-			if ( isPartStrNotTag ) {
-				Sizzle.filter( part, checkSet, true );
-			}
-		},
-
-		">": function( checkSet, part ) {
-			var elem,
-				isPartStr = typeof part === "string",
-				i = 0,
-				l = checkSet.length;
-
-			if ( isPartStr && !rNonWord.test( part ) ) {
-				part = part.toLowerCase();
-
-				for ( ; i < l; i++ ) {
-					elem = checkSet[i];
-
-					if ( elem ) {
-						var parent = elem.parentNode;
-						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
-					}
-				}
-
-			} else {
-				for ( ; i < l; i++ ) {
-					elem = checkSet[i];
-
-					if ( elem ) {
-						checkSet[i] = isPartStr ?
-							elem.parentNode :
-							elem.parentNode === part;
-					}
-				}
-
-				if ( isPartStr ) {
-					Sizzle.filter( part, checkSet, true );
-				}
-			}
-		},
-
-		"": function(checkSet, part, isXML){
-			var nodeCheck,
-				doneName = done++,
-				checkFn = dirCheck;
-
-			if ( typeof part === "string" && !rNonWord.test( part ) ) {
-				part = part.toLowerCase();
-				nodeCheck = part;
-				checkFn = dirNodeCheck;
-			}
-
-			checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
-		},
-
-		"~": function( checkSet, part, isXML ) {
-			var nodeCheck,
-				doneName = done++,
-				checkFn = dirCheck;
-
-			if ( typeof part === "string" && !rNonWord.test( part ) ) {
-				part = part.toLowerCase();
-				nodeCheck = part;
-				checkFn = dirNodeCheck;
-			}
-
-			checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
-		}
-	},
-
-	find: {
-		ID: function( match, context, isXML ) {
-			if ( typeof context.getElementById !== "undefined" && !isXML ) {
-				var m = context.getElementById(match[1]);
-				// Check parentNode to catch when Blackberry 4.6 returns
-				// nodes that are no longer in the document #6963
-				return m && m.parentNode ? [m] : [];
-			}
-		},
-
-		NAME: function( match, context ) {
-			if ( typeof context.getElementsByName !== "undefined" ) {
-				var ret = [],
-					results = context.getElementsByName( match[1] );
-
-				for ( var i = 0, l = results.length; i < l; i++ ) {
-					if ( results[i].getAttribute("name") === match[1] ) {
-						ret.push( results[i] );
-					}
-				}
-
-				return ret.length === 0 ? null : ret;
-			}
-		},
-
-		TAG: function( match, context ) {
-			if ( typeof context.getElementsByTagName !== "undefined" ) {
-				return context.getElementsByTagName( match[1] );
-			}
-		}
-	},
-	preFilter: {
-		CLASS: function( match, curLoop, inplace, result, not, isXML ) {
-			match = " " + match[1].replace( rBackslash, "" ) + " ";
-
-			if ( isXML ) {
-				return match;
-			}
-
-			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
-				if ( elem ) {
-					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
-						if ( !inplace ) {
-							result.push( elem );
-						}
-
-					} else if ( inplace ) {
-						curLoop[i] = false;
-					}
-				}
-			}
-
-			return false;
-		},
-
-		ID: function( match ) {
-			return match[1].replace( rBackslash, "" );
-		},
-
-		TAG: function( match, curLoop ) {
-			return match[1].replace( rBackslash, "" ).toLowerCase();
-		},
-
-		CHILD: function( match ) {
-			if ( match[1] === "nth" ) {
-				if ( !match[2] ) {
-					Sizzle.error( match[0] );
-				}
-
-				match[2] = match[2].replace(/^\+|\s*/g, '');
-
-				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
-				var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
-					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
-					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
-				// calculate the numbers (first)n+(last) including if they are negative
-				match[2] = (test[1] + (test[2] || 1)) - 0;
-				match[3] = test[3] - 0;
-			}
-			else if ( match[2] ) {
-				Sizzle.error( match[0] );
-			}
-
-			// TODO: Move to normal caching system
-			match[0] = done++;
-
-			return match;
-		},
-
-		ATTR: function( match, curLoop, inplace, result, not, isXML ) {
-			var name = match[1] = match[1].replace( rBackslash, "" );
-			
-			if ( !isXML && Expr.attrMap[name] ) {
-				match[1] = Expr.attrMap[name];
-			}
-
-			// Handle if an un-quoted value was used
-			match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
-
-			if ( match[2] === "~=" ) {
-				match[4] = " " + match[4] + " ";
-			}
-
-			return match;
-		},
-
-		PSEUDO: function( match, curLoop, inplace, result, not ) {
-			if ( match[1] === "not" ) {
-				// If we're dealing with a complex expression, or a simple one
-				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
-					match[3] = Sizzle(match[3], null, null, curLoop);
-
-				} else {
-					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
-
-					if ( !inplace ) {
-						result.push.apply( result, ret );
-					}
-
-					return false;
-				}
-
-			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
-				return true;
-			}
-			
-			return match;
-		},
-
-		POS: function( match ) {
-			match.unshift( true );
-
-			return match;
-		}
-	},
-	
-	filters: {
-		enabled: function( elem ) {
-			return elem.disabled === false && elem.type !== "hidden";
-		},
-
-		disabled: function( elem ) {
-			return elem.disabled === true;
-		},
-
-		checked: function( elem ) {
-			return elem.checked === true;
-		},
-		
-		selected: function( elem ) {
-			// Accessing this property makes selected-by-default
-			// options in Safari work properly
-			if ( elem.parentNode ) {
-				elem.parentNode.selectedIndex;
-			}
-			
-			return elem.selected === true;
-		},
-
-		parent: function( elem ) {
-			return !!elem.firstChild;
-		},
-
-		empty: function( elem ) {
-			return !elem.firstChild;
-		},
-
-		has: function( elem, i, match ) {
-			return !!Sizzle( match[3], elem ).length;
-		},
-
-		header: function( elem ) {
-			return (/h\d/i).test( elem.nodeName );
-		},
-
-		text: function( elem ) {
-			var attr = elem.getAttribute( "type" ), type = elem.type;
-			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) 
-			// use getAttribute instead to test this case
-			return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
-		},
-
-		radio: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
-		},
-
-		checkbox: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
-		},
-
-		file: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
-		},
-
-		password: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
-		},
-
-		submit: function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return (name === "input" || name === "button") && "submit" === elem.type;
-		},
-
-		image: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
-		},
-
-		reset: function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return (name === "input" || name === "button") && "reset" === elem.type;
-		},
-
-		button: function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return name === "input" && "button" === elem.type || name === "button";
-		},
-
-		input: function( elem ) {
-			return (/input|select|textarea|button/i).test( elem.nodeName );
-		},
-
-		focus: function( elem ) {
-			return elem === elem.ownerDocument.activeElement;
-		}
-	},
-	setFilters: {
-		first: function( elem, i ) {
-			return i === 0;
-		},
-
-		last: function( elem, i, match, array ) {
-			return i === array.length - 1;
-		},
-
-		even: function( elem, i ) {
-			return i % 2 === 0;
-		},
-
-		odd: function( elem, i ) {
-			return i % 2 === 1;
-		},
-
-		lt: function( elem, i, match ) {
-			return i < match[3] - 0;
-		},
-
-		gt: function( elem, i, match ) {
-			return i > match[3] - 0;
-		},
-
-		nth: function( elem, i, match ) {
-			return match[3] - 0 === i;
-		},
-
-		eq: function( elem, i, match ) {
-			return match[3] - 0 === i;
-		}
-	},
-	filter: {
-		PSEUDO: function( elem, match, i, array ) {
-			var name = match[1],
-				filter = Expr.filters[ name ];
-
-			if ( filter ) {
-				return filter( elem, i, match, array );
-
-			} else if ( name === "contains" ) {
-				return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
-
-			} else if ( name === "not" ) {
-				var not = match[3];
-
-				for ( var j = 0, l = not.length; j < l; j++ ) {
-					if ( not[j] === elem ) {
-						return false;
-					}
-				}
-
-				return true;
-
-			} else {
-				Sizzle.error( name );
-			}
-		},
-
-		CHILD: function( elem, match ) {
-			var first, last,
-				doneName, parent, cache,
-				count, diff,
-				type = match[1],
-				node = elem;
-
-			switch ( type ) {
-				case "only":
-				case "first":
-					while ( (node = node.previousSibling) )	 {
-						if ( node.nodeType === 1 ) { 
-							return false; 
-						}
-					}
-
-					if ( type === "first" ) { 
-						return true; 
-					}
-
-					node = elem;
-
-				case "last":
-					while ( (node = node.nextSibling) )	 {
-						if ( node.nodeType === 1 ) { 
-							return false; 
-						}
-					}
-
-					return true;
-
-				case "nth":
-					first = match[2];
-					last = match[3];
-
-					if ( first === 1 && last === 0 ) {
-						return true;
-					}
-					
-					doneName = match[0];
-					parent = elem.parentNode;
-	
-					if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
-						count = 0;
-						
-						for ( node = parent.firstChild; node; node = node.nextSibling ) {
-							if ( node.nodeType === 1 ) {
-								node.nodeIndex = ++count;
-							}
-						} 
-
-						parent[ expando ] = doneName;
-					}
-					
-					diff = elem.nodeIndex - last;
-
-					if ( first === 0 ) {
-						return diff === 0;
-
-					} else {
-						return ( diff % first === 0 && diff / first >= 0 );
-					}
-			}
-		},
-
-		ID: function( elem, match ) {
-			return elem.nodeType === 1 && elem.getAttribute("id") === match;
-		},
-
-		TAG: function( elem, match ) {
-			return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
-		},
-		
-		CLASS: function( elem, match ) {
-			return (" " + (elem.className || elem.getAttribute("class")) + " ")
-				.indexOf( match ) > -1;
-		},
-
-		ATTR: function( elem, match ) {
-			var name = match[1],
-				result = Sizzle.attr ?
-					Sizzle.attr( elem, name ) :
-					Expr.attrHandle[ name ] ?
-					Expr.attrHandle[ name ]( elem ) :
-					elem[ name ] != null ?
-						elem[ name ] :
-						elem.getAttribute( name ),
-				value = result + "",
-				type = match[2],
-				check = match[4];
-
-			return result == null ?
-				type === "!=" :
-				!type && Sizzle.attr ?
-				result != null :
-				type === "=" ?
-				value === check :
-				type === "*=" ?
-				value.indexOf(check) >= 0 :
-				type === "~=" ?
-				(" " + value + " ").indexOf(check) >= 0 :
-				!check ?
-				value && result !== false :
-				type === "!=" ?
-				value !== check :
-				type === "^=" ?
-				value.indexOf(check) === 0 :
-				type === "$=" ?
-				value.substr(value.length - check.length) === check :
-				type === "|=" ?
-				value === check || value.substr(0, check.length + 1) === check + "-" :
-				false;
-		},
-
-		POS: function( elem, match, i, array ) {
-			var name = match[2],
-				filter = Expr.setFilters[ name ];
-
-			if ( filter ) {
-				return filter( elem, i, match, array );
-			}
-		}
-	}
-};
-
-var origPOS = Expr.match.POS,
-	fescape = function(all, num){
-		return "\\" + (num - 0 + 1);
-	};
-
-for ( var type in Expr.match ) {
-	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
-	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
-}
-
-var makeArray = function( array, results ) {
-	array = Array.prototype.slice.call( array, 0 );
-
-	if ( results ) {
-		results.push.apply( results, array );
-		return results;
-	}
-	
-	return array;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-// Also verifies that the returned array holds DOM nodes
-// (which is not the case in the Blackberry browser)
-try {
-	Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
-
-// Provide a fallback method if it does not work
-} catch( e ) {
-	makeArray = function( array, results ) {
-		var i = 0,
-			ret = results || [];
-
-		if ( toString.call(array) === "[object Array]" ) {
-			Array.prototype.push.apply( ret, array );
-
-		} else {
-			if ( typeof array.length === "number" ) {
-				for ( var l = array.length; i < l; i++ ) {
-					ret.push( array[i] );
-				}
-
-			} else {
-				for ( ; array[i]; i++ ) {
-					ret.push( array[i] );
-				}
-			}
-		}
-
-		return ret;
-	};
-}
-
-var sortOrder, siblingCheck;
-
-if ( document.documentElement.compareDocumentPosition ) {
-	sortOrder = function( a, b ) {
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-		}
-
-		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
-			return a.compareDocumentPosition ? -1 : 1;
-		}
-
-		return a.compareDocumentPosition(b) & 4 ? -1 : 1;
-	};
-
-} else {
-	sortOrder = function( a, b ) {
-		// The nodes are identical, we can exit early
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-
-		// Fallback to using sourceIndex (in IE) if it's available on both nodes
-		} else if ( a.sourceIndex && b.sourceIndex ) {
-			return a.sourceIndex - b.sourceIndex;
-		}
-
-		var al, bl,
-			ap = [],
-			bp = [],
-			aup = a.parentNode,
-			bup = b.parentNode,
-			cur = aup;
-
-		// If the nodes are siblings (or identical) we can do a quick check
-		if ( aup === bup ) {
-			return siblingCheck( a, b );
-
-		// If no parents were found then the nodes are disconnected
-		} else if ( !aup ) {
-			return -1;
-
-		} else if ( !bup ) {
-			return 1;
-		}
-
-		// Otherwise they're somewhere else in the tree so we need
-		// to build up a full list of the parentNodes for comparison
-		while ( cur ) {
-			ap.unshift( cur );
-			cur = cur.parentNode;
-		}
-
-		cur = bup;
-
-		while ( cur ) {
-			bp.unshift( cur );
-			cur = cur.parentNode;
-		}
-
-		al = ap.length;
-		bl = bp.length;
-
-		// Start walking down the tree looking for a discrepancy
-		for ( var i = 0; i < al && i < bl; i++ ) {
-			if ( ap[i] !== bp[i] ) {
-				return siblingCheck( ap[i], bp[i] );
-			}
-		}
-
-		// We ended someplace up the tree so do a sibling check
-		return i === al ?
-			siblingCheck( a, bp[i], -1 ) :
-			siblingCheck( ap[i], b, 1 );
-	};
-
-	siblingCheck = function( a, b, ret ) {
-		if ( a === b ) {
-			return ret;
-		}
-
-		var cur = a.nextSibling;
-
-		while ( cur ) {
-			if ( cur === b ) {
-				return -1;
-			}
-
-			cur = cur.nextSibling;
-		}
-
-		return 1;
-	};
-}
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
-	// We're going to inject a fake input element with a specified name
-	var form = document.createElement("div"),
-		id = "script" + (new Date()).getTime(),
-		root = document.documentElement;
-
-	form.innerHTML = "<a name='" + id + "'/>";
-
-	// Inject it into the root element, check its status, and remove it quickly
-	root.insertBefore( form, root.firstChild );
-
-	// The workaround has to do additional checks after a getElementById
-	// Which slows things down for other browsers (hence the branching)
-	if ( document.getElementById( id ) ) {
-		Expr.find.ID = function( match, context, isXML ) {
-			if ( typeof context.getElementById !== "undefined" && !isXML ) {
-				var m = context.getElementById(match[1]);
-
-				return m ?
-					m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
-						[m] :
-						undefined :
-					[];
-			}
-		};
-
-		Expr.filter.ID = function( elem, match ) {
-			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
-
-			return elem.nodeType === 1 && node && node.nodeValue === match;
-		};
-	}
-
-	root.removeChild( form );
-
-	// release memory in IE
-	root = form = null;
-})();
-
-(function(){
-	// Check to see if the browser returns only elements
-	// when doing getElementsByTagName("*")
-
-	// Create a fake element
-	var div = document.createElement("div");
-	div.appendChild( document.createComment("") );
-
-	// Make sure no comments are found
-	if ( div.getElementsByTagName("*").length > 0 ) {
-		Expr.find.TAG = function( match, context ) {
-			var results = context.getElementsByTagName( match[1] );
-
-			// Filter out possible comments
-			if ( match[1] === "*" ) {
-				var tmp = [];
-
-				for ( var i = 0; results[i]; i++ ) {
-					if ( results[i].nodeType === 1 ) {
-						tmp.push( results[i] );
-					}
-				}
-
-				results = tmp;
-			}
-
-			return results;
-		};
-	}
-
-	// Check to see if an attribute returns normalized href attributes
-	div.innerHTML = "<a href='#'></a>";
-
-	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
-			div.firstChild.getAttribute("href") !== "#" ) {
-
-		Expr.attrHandle.href = function( elem ) {
-			return elem.getAttribute( "href", 2 );
-		};
-	}
-
-	// release memory in IE
-	div = null;
-})();
-
-if ( document.querySelectorAll ) {
-	(function(){
-		var oldSizzle = Sizzle,
-			div = document.createElement("div"),
-			id = "__sizzle__";
-
-		div.innerHTML = "<p class='TEST'></p>";
-
-		// Safari can't handle uppercase or unicode characters when
-		// in quirks mode.
-		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
-			return;
-		}
-	
-		Sizzle = function( query, context, extra, seed ) {
-			context = context || document;
-
-			// Only use querySelectorAll on non-XML documents
-			// (ID selectors don't work in non-HTML documents)
-			if ( !seed && !Sizzle.isXML(context) ) {
-				// See if we find a selector to speed up
-				var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
-				
-				if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
-					// Speed-up: Sizzle("TAG")
-					if ( match[1] ) {
-						return makeArray( context.getElementsByTagName( query ), extra );
-					
-					// Speed-up: Sizzle(".CLASS")
-					} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
-						return makeArray( context.getElementsByClassName( match[2] ), extra );
-					}
-				}
-				
-				if ( context.nodeType === 9 ) {
-					// Speed-up: Sizzle("body")
-					// The body element only exists once, optimize finding it
-					if ( query === "body" && context.body ) {
-						return makeArray( [ context.body ], extra );
-						
-					// Speed-up: Sizzle("#ID")
-					} else if ( match && match[3] ) {
-						var elem = context.getElementById( match[3] );
-
-						// Check parentNode to catch when Blackberry 4.6 returns
-						// nodes that are no longer in the document #6963
-						if ( elem && elem.parentNode ) {
-							// Handle the case where IE and Opera return items
-							// by name instead of ID
-							if ( elem.id === match[3] ) {
-								return makeArray( [ elem ], extra );
-							}
-							
-						} else {
-							return makeArray( [], extra );
-						}
-					}
-					
-					try {
-						return makeArray( context.querySelectorAll(query), extra );
-					} catch(qsaError) {}
-
-				// qSA works strangely on Element-rooted queries
-				// We can work around this by specifying an extra ID on the root
-				// and working up from there (Thanks to Andrew Dupont for the technique)
-				// IE 8 doesn't work on object elements
-				} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
-					var oldContext = context,
-						old = context.getAttribute( "id" ),
-						nid = old || id,
-						hasParent = context.parentNode,
-						relativeHierarchySelector = /^\s*[+~]/.test( query );
-
-					if ( !old ) {
-						context.setAttribute( "id", nid );
-					} else {
-						nid = nid.replace( /'/g, "\\$&" );
-					}
-					if ( relativeHierarchySelector && hasParent ) {
-						context = context.parentNode;
-					}
-
-					try {
-						if ( !relativeHierarchySelector || hasParent ) {
-							return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
-						}
-
-					} catch(pseudoError) {
-					} finally {
-						if ( !old ) {
-							oldContext.removeAttribute( "id" );
-						}
-					}
-				}
-			}
-		
-			return oldSizzle(query, context, extra, seed);
-		};
-
-		for ( var prop in oldSizzle ) {
-			Sizzle[ prop ] = oldSizzle[ prop ];
-		}
-
-		// release memory in IE
-		div = null;
-	})();
-}
-
-(function(){
-	var html = document.documentElement,
-		matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
-
-	if ( matches ) {
-		// Check to see if it's possible to do matchesSelector
-		// on a disconnected node (IE 9 fails this)
-		var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
-			pseudoWorks = false;
-
-		try {
-			// This should fail with an exception
-			// Gecko does not error, returns false instead
-			matches.call( document.documentElement, "[test!='']:sizzle" );
-	
-		} catch( pseudoError ) {
-			pseudoWorks = true;
-		}
-
-		Sizzle.matchesSelector = function( node, expr ) {
-			// Make sure that attribute selectors are quoted
-			expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
-
-			if ( !Sizzle.isXML( node ) ) {
-				try { 
-					if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
-						var ret = matches.call( node, expr );
-
-						// IE 9's matchesSelector returns false on disconnected nodes
-						if ( ret || !disconnectedMatch ||
-								// As well, disconnected nodes are said to be in a document
-								// fragment in IE 9, so check for that
-								node.document && node.document.nodeType !== 11 ) {
-							return ret;
-						}
-					}
-				} catch(e) {}
-			}
-
-			return Sizzle(expr, null, null, [node]).length > 0;
-		};
-	}
-})();
-
-(function(){
-	var div = document.createElement("div");
-
-	div.innerHTML = "<div class='test e'></div><div class='test'></div>";
-
-	// Opera can't find a second classname (in 9.6)
-	// Also, make sure that getElementsByClassName actually exists
-	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
-		return;
-	}
-
-	// Safari caches class attributes, doesn't catch changes (in 3.2)
-	div.lastChild.className = "e";
-
-	if ( div.getElementsByClassName("e").length === 1 ) {
-		return;
-	}
-	
-	Expr.order.splice(1, 0, "CLASS");
-	Expr.find.CLASS = function( match, context, isXML ) {
-		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
-			return context.getElementsByClassName(match[1]);
-		}
-	};
-
-	// release memory in IE
-	div = null;
-})();
-
-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
-	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-		var elem = checkSet[i];
-
-		if ( elem ) {
-			var match = false;
-
-			elem = elem[dir];
-
-			while ( elem ) {
-				if ( elem[ expando ] === doneName ) {
-					match = checkSet[elem.sizset];
-					break;
-				}
-
-				if ( elem.nodeType === 1 && !isXML ){
-					elem[ expando ] = doneName;
-					elem.sizset = i;
-				}
-
-				if ( elem.nodeName.toLowerCase() === cur ) {
-					match = elem;
-					break;
-				}
-
-				elem = elem[dir];
-			}
-
-			checkSet[i] = match;
-		}
-	}
-}
-
-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
-	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-		var elem = checkSet[i];
-
-		if ( elem ) {
-			var match = false;
-			
-			elem = elem[dir];
-
-			while ( elem ) {
-				if ( elem[ expando ] === doneName ) {
-					match = checkSet[elem.sizset];
-					break;
-				}
-
-				if ( elem.nodeType === 1 ) {
-					if ( !isXML ) {
-						elem[ expando ] = doneName;
-						elem.sizset = i;
-					}
-
-					if ( typeof cur !== "string" ) {
-						if ( elem === cur ) {
-							match = true;
-							break;
-						}
-
-					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
-						match = elem;
-						break;
-					}
-				}
-
-				elem = elem[dir];
-			}
-
-			checkSet[i] = match;
-		}
-	}
-}
-
-if ( document.documentElement.contains ) {
-	Sizzle.contains = function( a, b ) {
-		return a !== b && (a.contains ? a.contains(b) : true);
-	};
-
-} else if ( document.documentElement.compareDocumentPosition ) {
-	Sizzle.contains = function( a, b ) {
-		return !!(a.compareDocumentPosition(b) & 16);
-	};
-
-} else {
-	Sizzle.contains = function() {
-		return false;
-	};
-}
-
-Sizzle.isXML = function( elem ) {
-	// documentElement is verified for cases where it doesn't yet exist
-	// (such as loading iframes in IE - #4833) 
-	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
-
-	return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-var posProcess = function( selector, context, seed ) {
-	var match,
-		tmpSet = [],
-		later = "",
-		root = context.nodeType ? [context] : context;
-
-	// Position selectors must be done after the filter
-	// And so must :not(positional) so we move all PSEUDOs to the end
-	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
-		later += match[0];
-		selector = selector.replace( Expr.match.PSEUDO, "" );
-	}
-
-	selector = Expr.relative[selector] ? selector + "*" : selector;
-
-	for ( var i = 0, l = root.length; i < l; i++ ) {
-		Sizzle( selector, root[i], tmpSet, seed );
-	}
-
-	return Sizzle.filter( later, tmpSet );
-};
-
-// EXPOSE
-// Override sizzle attribute retrieval
-Sizzle.attr = jQuery.attr;
-Sizzle.selectors.attrMap = {};
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.filters;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-})();
-
-
-var runtil = /Until$/,
-	rparentsprev = /^(?:parents|prevUntil|prevAll)/,
-	// Note: This RegExp should be improved, or likely pulled from Sizzle
-	rmultiselector = /,/,
-	isSimple = /^.[^:#\[\.,]*$/,
-	slice = Array.prototype.slice,
-	POS = jQuery.expr.match.POS,
-	// methods guaranteed to produce a unique set when starting from a unique set
-	guaranteedUnique = {
-		children: true,
-		contents: true,
-		next: true,
-		prev: true
-	};
-
-jQuery.fn.extend({
-	find: function( selector ) {
-		var self = this,
-			i, l;
-
-		if ( typeof selector !== "string" ) {
-			return jQuery( selector ).filter(function() {
-				for ( i = 0, l = self.length; i < l; i++ ) {
-					if ( jQuery.contains( self[ i ], this ) ) {
-						return true;
-					}
-				}
-			});
-		}
-
-		var ret = this.pushStack( "", "find", selector ),
-			length, n, r;
-
-		for ( i = 0, l = this.length; i < l; i++ ) {
-			length = ret.length;
-			jQuery.find( selector, this[i], ret );
-
-			if ( i > 0 ) {
-				// Make sure that the results are unique
-				for ( n = length; n < ret.length; n++ ) {
-					for ( r = 0; r < length; r++ ) {
-						if ( ret[r] === ret[n] ) {
-							ret.splice(n--, 1);
-							break;
-						}
-					}
-				}
-			}
-		}
-
-		return ret;
-	},
-
-	has: function( target ) {
-		var targets = jQuery( target );
-		return this.filter(function() {
-			for ( var i = 0, l = targets.length; i < l; i++ ) {
-				if ( jQuery.contains( this, targets[i] ) ) {
-					return true;
-				}
-			}
-		});
-	},
-
-	not: function( selector ) {
-		return this.pushStack( winnow(this, selector, false), "not", selector);
-	},
-
-	filter: function( selector ) {
-		return this.pushStack( winnow(this, selector, true), "filter", selector );
-	},
-
-	is: function( selector ) {
-		return !!selector && ( 
-			typeof selector === "string" ?
-				// If this is a positional selector, check membership in the returned set
-				// so $("p:first").is("p:last") won't return true for a doc with two "p".
-				POS.test( selector ) ? 
-					jQuery( selector, this.context ).index( this[0] ) >= 0 :
-					jQuery.filter( selector, this ).length > 0 :
-				this.filter( selector ).length > 0 );
-	},
-
-	closest: function( selectors, context ) {
-		var ret = [], i, l, cur = this[0];
-		
-		// Array (deprecated as of jQuery 1.7)
-		if ( jQuery.isArray( selectors ) ) {
-			var level = 1;
-
-			while ( cur && cur.ownerDocument && cur !== context ) {
-				for ( i = 0; i < selectors.length; i++ ) {
-
-					if ( jQuery( cur ).is( selectors[ i ] ) ) {
-						ret.push({ selector: selectors[ i ], elem: cur, level: level });
-					}
-				}
-
-				cur = cur.parentNode;
-				level++;
-			}
-
-			return ret;
-		}
-
-		// String
-		var pos = POS.test( selectors ) || typeof selectors !== "string" ?
-				jQuery( selectors, context || this.context ) :
-				0;
-
-		for ( i = 0, l = this.length; i < l; i++ ) {
-			cur = this[i];
-
-			while ( cur ) {
-				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
-					ret.push( cur );
-					break;
-
-				} else {
-					cur = cur.parentNode;
-					if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
-						break;
-					}
-				}
-			}
-		}
-
-		ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
-
-		return this.pushStack( ret, "closest", selectors );
-	},
-
-	// Determine the position of an element within
-	// the matched set of elements
-	index: function( elem ) {
-
-		// No argument, return index in parent
-		if ( !elem ) {
-			return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
-		}
-
-		// index in selector
-		if ( typeof elem === "string" ) {
-			return jQuery.inArray( this[0], jQuery( elem ) );
-		}
-
-		// Locate the position of the desired element
-		return jQuery.inArray(
-			// If it receives a jQuery object, the first element is used
-			elem.jquery ? elem[0] : elem, this );
-	},
-
-	add: function( selector, context ) {
-		var set = typeof selector === "string" ?
-				jQuery( selector, context ) :
-				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
-			all = jQuery.merge( this.get(), set );
-
-		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
-			all :
-			jQuery.unique( all ) );
-	},
-
-	andSelf: function() {
-		return this.add( this.prevObject );
-	}
-});
-
-// A painfully simple check to see if an element is disconnected
-// from a document (should be improved, where feasible).
-function isDisconnected( node ) {
-	return !node || !node.parentNode || node.parentNode.nodeType === 11;
-}
-
-jQuery.each({
-	parent: function( elem ) {
-		var parent = elem.parentNode;
-		return parent && parent.nodeType !== 11 ? parent : null;
-	},
-	parents: function( elem ) {
-		return jQuery.dir( elem, "parentNode" );
-	},
-	parentsUntil: function( elem, i, until ) {
-		return jQuery.dir( elem, "parentNode", until );
-	},
-	next: function( elem ) {
-		return jQuery.nth( elem, 2, "nextSibling" );
-	},
-	prev: function( elem ) {
-		return jQuery.nth( elem, 2, "previousSibling" );
-	},
-	nextAll: function( elem ) {
-		return jQuery.dir( elem, "nextSibling" );
-	},
-	prevAll: function( elem ) {
-		return jQuery.dir( elem, "previousSibling" );
-	},
-	nextUntil: function( elem, i, until ) {
-		return jQuery.dir( elem, "nextSibling", until );
-	},
-	prevUntil: function( elem, i, until ) {
-		return jQuery.dir( elem, "previousSibling", until );
-	},
-	siblings: function( elem ) {
-		return jQuery.sibling( elem.parentNode.firstChild, elem );
-	},
-	children: function( elem ) {
-		return jQuery.sibling( elem.firstChild );
-	},
-	contents: function( elem ) {
-		return jQuery.nodeName( elem, "iframe" ) ?
-			elem.contentDocument || elem.contentWindow.document :
-			jQuery.makeArray( elem.childNodes );
-	}
-}, function( name, fn ) {
-	jQuery.fn[ name ] = function( until, selector ) {
-		var ret = jQuery.map( this, fn, until );
-
-		if ( !runtil.test( name ) ) {
-			selector = until;
-		}
-
-		if ( selector && typeof selector === "string" ) {
-			ret = jQuery.filter( selector, ret );
-		}
-
-		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
-
-		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
-			ret = ret.reverse();
-		}
-
-		return this.pushStack( ret, name, slice.call( arguments ).join(",") );
-	};
-});
-
-jQuery.extend({
-	filter: function( expr, elems, not ) {
-		if ( not ) {
-			expr = ":not(" + expr + ")";
-		}
-
-		return elems.length === 1 ?
-			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
-			jQuery.find.matches(expr, elems);
-	},
-
-	dir: function( elem, dir, until ) {
-		var matched = [],
-			cur = elem[ dir ];
-
-		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
-			if ( cur.nodeType === 1 ) {
-				matched.push( cur );
-			}
-			cur = cur[dir];
-		}
-		return matched;
-	},
-
-	nth: function( cur, result, dir, elem ) {
-		result = result || 1;
-		var num = 0;
-
-		for ( ; cur; cur = cur[dir] ) {
-			if ( cur.nodeType === 1 && ++num === result ) {
-				break;
-			}
-		}
-
-		return cur;
-	},
-
-	sibling: function( n, elem ) {
-		var r = [];
-
-		for ( ; n; n = n.nextSibling ) {
-			if ( n.nodeType === 1 && n !== elem ) {
-				r.push( n );
-			}
-		}
-
-		return r;
-	}
-});
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, keep ) {
-
-	// Can't pass null or undefined to indexOf in Firefox 4
-	// Set to 0 to skip string check
-	qualifier = qualifier || 0;
-
-	if ( jQuery.isFunction( qualifier ) ) {
-		return jQuery.grep(elements, function( elem, i ) {
-			var retVal = !!qualifier.call( elem, i, elem );
-			return retVal === keep;
-		});
-
-	} else if ( qualifier.nodeType ) {
-		return jQuery.grep(elements, function( elem, i ) {
-			return ( elem === qualifier ) === keep;
-		});
-
-	} else if ( typeof qualifier === "string" ) {
-		var filtered = jQuery.grep(elements, function( elem ) {
-			return elem.nodeType === 1;
-		});
-
-		if ( isSimple.test( qualifier ) ) {
-			return jQuery.filter(qualifier, filtered, !keep);
-		} else {
-			qualifier = jQuery.filter( qualifier, filtered );
-		}
-	}
-
-	return jQuery.grep(elements, function( elem, i ) {
-		return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
-	});
-}
-
-
-
-
-function createSafeFragment( document ) {
-	var list = nodeNames.split( "|" ),
-	safeFrag = document.createDocumentFragment();
-
-	if ( safeFrag.createElement ) {
-		while ( list.length ) {
-			safeFrag.createElement(
-				list.pop()
-			);
-		}
-	}
-	return safeFrag;
-}
-
-var nodeNames = "abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|" +
-		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
-	rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
-	rleadingWhitespace = /^\s+/,
-	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
-	rtagName = /<([\w:]+)/,
-	rtbody = /<tbody/i,
-	rhtml = /<|&#?\w+;/,
-	rnoInnerhtml = /<(?:script|style)/i,
-	rnocache = /<(?:script|object|embed|option|style)/i,
-	rnoshimcache = new RegExp("<(?:" + nodeNames + ")", "i"),
-	// checked="checked" or checked
-	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
-	rscriptType = /\/(java|ecma)script/i,
-	rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
-	wrapMap = {
-		option: [ 1, "<select multiple='multiple'>", "</select>" ],
-		legend: [ 1, "<fieldset>", "</fieldset>" ],
-		thead: [ 1, "<table>", "</table>" ],
-		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
-		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
-		area: [ 1, "<map>", "</map>" ],
-		_default: [ 0, "", "" ]
-	},
-	safeFragment = createSafeFragment( document );
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-// IE can't serialize <link> and <script> tags normally
-if ( !jQuery.support.htmlSerialize ) {
-	wrapMap._default = [ 1, "div<div>", "</div>" ];
-}
-
-jQuery.fn.extend({
-	text: function( text ) {
-		if ( jQuery.isFunction(text) ) {
-			return this.each(function(i) {
-				var self = jQuery( this );
-
-				self.text( text.call(this, i, self.text()) );
-			});
-		}
-
-		if ( typeof text !== "object" && text !== undefined ) {
-			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
-		}
-
-		return jQuery.text( this );
-	},
-
-	wrapAll: function( html ) {
-		if ( jQuery.isFunction( html ) ) {
-			return this.each(function(i) {
-				jQuery(this).wrapAll( html.call(this, i) );
-			});
-		}
-
-		if ( this[0] ) {
-			// The elements to wrap the target around
-			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
-			if ( this[0].parentNode ) {
-				wrap.insertBefore( this[0] );
-			}
-
-			wrap.map(function() {
-				var elem = this;
-
-				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
-					elem = elem.firstChild;
-				}
-
-				return elem;
-			}).append( this );
-		}
-
-		return this;
-	},
-
-	wrapInner: function( html ) {
-		if ( jQuery.isFunction( html ) ) {
-			return this.each(function(i) {
-				jQuery(this).wrapInner( html.call(this, i) );
-			});
-		}
-
-		return this.each(function() {
-			var self = jQuery( this ),
-				contents = self.contents();
-
-			if ( contents.length ) {
-				contents.wrapAll( html );
-
-			} else {
-				self.append( html );
-			}
-		});
-	},
-
-	wrap: function( html ) {
-		var isFunction = jQuery.isFunction( html );
-
-		return this.each(function(i) {
-			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
-		});
-	},
-
-	unwrap: function() {
-		return this.parent().each(function() {
-			if ( !jQuery.nodeName( this, "body" ) ) {
-				jQuery( this ).replaceWith( this.childNodes );
-			}
-		}).end();
-	},
-
-	append: function() {
-		return this.domManip(arguments, true, function( elem ) {
-			if ( this.nodeType === 1 ) {
-				this.appendChild( elem );
-			}
-		});
-	},
-
-	prepend: function() {
-		return this.domManip(arguments, true, function( elem ) {
-			if ( this.nodeType === 1 ) {
-				this.insertBefore( elem, this.firstChild );
-			}
-		});
-	},
-
-	before: function() {
-		if ( this[0] && this[0].parentNode ) {
-			return this.domManip(arguments, false, function( elem ) {
-				this.parentNode.insertBefore( elem, this );
-			});
-		} else if ( arguments.length ) {
-			var set = jQuery.clean( arguments );
-			set.push.apply( set, this.toArray() );
-			return this.pushStack( set, "before", arguments );
-		}
-	},
-
-	after: function() {
-		if ( this[0] && this[0].parentNode ) {
-			return this.domManip(arguments, false, function( elem ) {
-				this.parentNode.insertBefore( elem, this.nextSibling );
-			});
-		} else if ( arguments.length ) {
-			var set = this.pushStack( this, "after", arguments );
-			set.push.apply( set, jQuery.clean(arguments) );
-			return set;
-		}
-	},
-
-	// keepData is for internal use only--do not document
-	remove: function( selector, keepData ) {
-		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
-			if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
-				if ( !keepData && elem.nodeType === 1 ) {
-					jQuery.cleanData( elem.getElementsByTagName("*") );
-					jQuery.cleanData( [ elem ] );
-				}
-
-				if ( elem.parentNode ) {
-					elem.parentNode.removeChild( elem );
-				}
-			}
-		}
-
-		return this;
-	},
-
-	empty: function() {
-		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
-			// Remove element nodes and prevent memory leaks
-			if ( elem.nodeType === 1 ) {
-				jQuery.cleanData( elem.getElementsByTagName("*") );
-			}
-
-			// Remove any remaining nodes
-			while ( elem.firstChild ) {
-				elem.removeChild( elem.firstChild );
-			}
-		}
-
-		return this;
-	},
-
-	clone: function( dataAndEvents, deepDataAndEvents ) {
-		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
-		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
-		return this.map( function () {
-			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
-		});
-	},
-
-	html: function( value ) {
-		if ( value === undefined ) {
-			return this[0] && this[0].nodeType === 1 ?
-				this[0].innerHTML.replace(rinlinejQuery, "") :
-				null;
-
-		// See if we can take a shortcut and just use innerHTML
-		} else if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
-			(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
-			!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
-
-			value = value.replace(rxhtmlTag, "<$1></$2>");
-
-			try {
-				for ( var i = 0, l = this.length; i < l; i++ ) {
-					// Remove element nodes and prevent memory leaks
-					if ( this[i].nodeType === 1 ) {
-						jQuery.cleanData( this[i].getElementsByTagName("*") );
-						this[i].innerHTML = value;
-					}
-				}
-
-			// If using innerHTML throws an exception, use the fallback method
-			} catch(e) {
-				this.empty().append( value );
-			}
-
-		} else if ( jQuery.isFunction( value ) ) {
-			this.each(function(i){
-				var self = jQuery( this );
-
-				self.html( value.call(this, i, self.html()) );
-			});
-
-		} else {
-			this.empty().append( value );
-		}
-
-		return this;
-	},
-
-	replaceWith: function( value ) {
-		if ( this[0] && this[0].parentNode ) {
-			// Make sure that the elements are removed from the DOM before they are inserted
-			// this can help fix replacing a parent with child elements
-			if ( jQuery.isFunction( value ) ) {
-				return this.each(function(i) {
-					var self = jQuery(this), old = self.html();
-					self.replaceWith( value.call( this, i, old ) );
-				});
-			}
-
-			if ( typeof value !== "string" ) {
-				value = jQuery( value ).detach();
-			}
-
-			return this.each(function() {
-				var next = this.nextSibling,
-					parent = this.parentNode;
-
-				jQuery( this ).remove();
-
-				if ( next ) {
-					jQuery(next).before( value );
-				} else {
-					jQuery(parent).append( value );
-				}
-			});
-		} else {
-			return this.length ?
-				this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
-				this;
-		}
-	},
-
-	detach: function( selector ) {
-		return this.remove( selector, true );
-	},
-
-	domManip: function( args, table, callback ) {
-		var results, first, fragment, parent,
-			value = args[0],
-			scripts = [];
-
-		// We can't cloneNode fragments that contain checked, in WebKit
-		if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
-			return this.each(function() {
-				jQuery(this).domManip( args, table, callback, true );
-			});
-		}
-
-		if ( jQuery.isFunction(value) ) {
-			return this.each(function(i) {
-				var self = jQuery(this);
-				args[0] = value.call(this, i, table ? self.html() : undefined);
-				self.domManip( args, table, callback );
-			});
-		}
-
-		if ( this[0] ) {
-			parent = value && value.parentNode;
-
-			// If we're in a fragment, just use that instead of building a new one
-			if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
-				results = { fragment: parent };
-
-			} else {
-				results = jQuery.buildFragment( args, this, scripts );
-			}
-
-			fragment = results.fragment;
-
-			if ( fragment.childNodes.length === 1 ) {
-				first = fragment = fragment.firstChild;
-			} else {
-				first = fragment.firstChild;
-			}
-
-			if ( first ) {
-				table = table && jQuery.nodeName( first, "tr" );
-
-				for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
-					callback.call(
-						table ?
-							root(this[i], first) :
-							this[i],
-						// Make sure that we do not leak memory by inadvertently discarding
-						// the original fragment (which might have attached data) instead of
-						// using it; in addition, use the original fragment object for the last
-						// item instead of first because it can end up being emptied incorrectly
-						// in certain situations (Bug #8070).
-						// Fragments from the fragment cache must always be cloned and never used
-						// in place.
-						results.cacheable || ( l > 1 && i < lastIndex ) ?
-							jQuery.clone( fragment, true, true ) :
-							fragment
-					);
-				}
-			}
-
-			if ( scripts.length ) {
-				jQuery.each( scripts, evalScript );
-			}
-		}
-
-		return this;
-	}
-});
-
-function root( elem, cur ) {
-	return jQuery.nodeName(elem, "table") ?
-		(elem.getElementsByTagName("tbody")[0] ||
-		elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
-		elem;
-}
-
-function cloneCopyEvent( src, dest ) {
-
-	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
-		return;
-	}
-
-	var type, i, l,
-		oldData = jQuery._data( src ),
-		curData = jQuery._data( dest, oldData ),
-		events = oldData.events;
-
-	if ( events ) {
-		delete curData.handle;
-		curData.events = {};
-
-		for ( type in events ) {
-			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
-				jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
-			}
-		}
-	}
-
-	// make the cloned public data object a copy from the original
-	if ( curData.data ) {
-		curData.data = jQuery.extend( {}, curData.data );
-	}
-}
-
-function cloneFixAttributes( src, dest ) {
-	var nodeName;
-
-	// We do not need to do anything for non-Elements
-	if ( dest.nodeType !== 1 ) {
-		return;
-	}
-
-	// clearAttributes removes the attributes, which we don't want,
-	// but also removes the attachEvent events, which we *do* want
-	if ( dest.clearAttributes ) {
-		dest.clearAttributes();
-	}
-
-	// mergeAttributes, in contrast, only merges back on the
-	// original attributes, not the events
-	if ( dest.mergeAttributes ) {
-		dest.mergeAttributes( src );
-	}
-
-	nodeName = dest.nodeName.toLowerCase();
-
-	// IE6-8 fail to clone children inside object elements that use
-	// the proprietary classid attribute value (rather than the type
-	// attribute) to identify the type of content to display
-	if ( nodeName === "object" ) {
-		dest.outerHTML = src.outerHTML;
-
-	} else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
-		// IE6-8 fails to persist the checked state of a cloned checkbox
-		// or radio button. Worse, IE6-7 fail to give the cloned element
-		// a checked appearance if the defaultChecked value isn't also set
-		if ( src.checked ) {
-			dest.defaultChecked = dest.checked = src.checked;
-		}
-
-		// IE6-7 get confused and end up setting the value of a cloned
-		// checkbox/radio button to an empty string instead of "on"
-		if ( dest.value !== src.value ) {
-			dest.value = src.value;
-		}
-
-	// IE6-8 fails to return the selected option to the default selected
-	// state when cloning options
-	} else if ( nodeName === "option" ) {
-		dest.selected = src.defaultSelected;
-
-	// IE6-8 fails to set the defaultValue to the correct value when
-	// cloning other types of input fields
-	} else if ( nodeName === "input" || nodeName === "textarea" ) {
-		dest.defaultValue = src.defaultValue;
-	}
-
-	// Event data gets referenced instead of copied if the expando
-	// gets copied too
-	dest.removeAttribute( jQuery.expando );
-}
-
-jQuery.buildFragment = function( args, nodes, scripts ) {
-	var fragment, cacheable, cacheresults, doc,
-	first = args[ 0 ];
-
-	// nodes may contain either an explicit document object,
-	// a jQuery collection or context object.
-	// If nodes[0] contains a valid object to assign to doc
-	if ( nodes && nodes[0] ) {
-		doc = nodes[0].ownerDocument || nodes[0];
-	}
-
-	// Ensure that an attr object doesn't incorrectly stand in as a document object
-	// Chrome and Firefox seem to allow this to occur and will throw exception
-	// Fixes #8950
-	if ( !doc.createDocumentFragment ) {
-		doc = document;
-	}
-
-	// Only cache "small" (1/2 KB) HTML strings that are associated with the main document
-	// Cloning options loses the selected state, so don't cache them
-	// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
-	// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
-	// Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
-	if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document &&
-		first.charAt(0) === "<" && !rnocache.test( first ) &&
-		(jQuery.support.checkClone || !rchecked.test( first )) &&
-		(jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
-
-		cacheable = true;
-
-		cacheresults = jQuery.fragments[ first ];
-		if ( cacheresults && cacheresults !== 1 ) {
-			fragment = cacheresults;
-		}
-	}
-
-	if ( !fragment ) {
-		fragment = doc.createDocumentFragment();
-		jQuery.clean( args, doc, fragment, scripts );
-	}
-
-	if ( cacheable ) {
-		jQuery.fragments[ first ] = cacheresults ? fragment : 1;
-	}
-
-	return { fragment: fragment, cacheable: cacheable };
-};
-
-jQuery.fragments = {};
-
-jQuery.each({
-	appendTo: "append",
-	prependTo: "prepend",
-	insertBefore: "before",
-	insertAfter: "after",
-	replaceAll: "replaceWith"
-}, function( name, original ) {
-	jQuery.fn[ name ] = function( selector ) {
-		var ret = [],
-			insert = jQuery( selector ),
-			parent = this.length === 1 && this[0].parentNode;
-
-		if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
-			insert[ original ]( this[0] );
-			return this;
-
-		} else {
-			for ( var i = 0, l = insert.length; i < l; i++ ) {
-				var elems = ( i > 0 ? this.clone(true) : this ).get();
-				jQuery( insert[i] )[ original ]( elems );
-				ret = ret.concat( elems );
-			}
-
-			return this.pushStack( ret, name, insert.selector );
-		}
-	};
-});
-
-function getAll( elem ) {
-	if ( typeof elem.getElementsByTagName !== "undefined" ) {
-		return elem.getElementsByTagName( "*" );
-
-	} else if ( typeof elem.querySelectorAll !== "undefined" ) {
-		return elem.querySelectorAll( "*" );
-
-	} else {
-		return [];
-	}
-}
-
-// Used in clean, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
-	if ( elem.type === "checkbox" || elem.type === "radio" ) {
-		elem.defaultChecked = elem.checked;
-	}
-}
-// Finds all inputs and passes them to fixDefaultChecked
-function findInputs( elem ) {
-	var nodeName = ( elem.nodeName || "" ).toLowerCase();
-	if ( nodeName === "input" ) {
-		fixDefaultChecked( elem );
-	// Skip scripts, get other children
-	} else if ( nodeName !== "script" && typeof elem.getElementsByTagName !== "undefined" ) {
-		jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
-	}
-}
-
-// Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js
-function shimCloneNode( elem ) {
-	var div = document.createElement( "div" );
-	safeFragment.appendChild( div );
-
-	div.innerHTML = elem.outerHTML;
-	return div.firstChild;
-}
-
-jQuery.extend({
-	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
-		var srcElements,
-			destElements,
-			i,
-			// IE<=8 does not properly clone detached, unknown element nodes
-			clone = jQuery.support.html5Clone || !rnoshimcache.test( "<" + elem.nodeName ) ?
-				elem.cloneNode( true ) :
-				shimCloneNode( elem );
-
-		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
-				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
-			// IE copies events bound via attachEvent when using cloneNode.
-			// Calling detachEvent on the clone will also remove the events
-			// from the original. In order to get around this, we use some
-			// proprietary methods to clear the events. Thanks to MooTools
-			// guys for this hotness.
-
-			cloneFixAttributes( elem, clone );
-
-			// Using Sizzle here is crazy slow, so we use getElementsByTagName instead
-			srcElements = getAll( elem );
-			destElements = getAll( clone );
-
-			// Weird iteration because IE will replace the length property
-			// with an element if you are cloning the body and one of the
-			// elements on the page has a name or id of "length"
-			for ( i = 0; srcElements[i]; ++i ) {
-				// Ensure that the destination node is not null; Fixes #9587
-				if ( destElements[i] ) {
-					cloneFixAttributes( srcElements[i], destElements[i] );
-				}
-			}
-		}
-
-		// Copy the events from the original to the clone
-		if ( dataAndEvents ) {
-			cloneCopyEvent( elem, clone );
-
-			if ( deepDataAndEvents ) {
-				srcElements = getAll( elem );
-				destElements = getAll( clone );
-
-				for ( i = 0; srcElements[i]; ++i ) {
-					cloneCopyEvent( srcElements[i], destElements[i] );
-				}
-			}
-		}
-
-		srcElements = destElements = null;
-
-		// Return the cloned set
-		return clone;
-	},
-
-	clean: function( elems, context, fragment, scripts ) {
-		var checkScriptType;
-
-		context = context || document;
-
-		// !context.createElement fails in IE with an error but returns typeof 'object'
-		if ( typeof context.createElement === "undefined" ) {
-			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
-		}
-
-		var ret = [], j;
-
-		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-			if ( typeof elem === "number" ) {
-				elem += "";
-			}
-
-			if ( !elem ) {
-				continue;
-			}
-
-			// Convert html string into DOM nodes
-			if ( typeof elem === "string" ) {
-				if ( !rhtml.test( elem ) ) {
-					elem = context.createTextNode( elem );
-				} else {
-					// Fix "XHTML"-style tags in all browsers
-					elem = elem.replace(rxhtmlTag, "<$1></$2>");
-
-					// Trim whitespace, otherwise indexOf won't work as expected
-					var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(),
-						wrap = wrapMap[ tag ] || wrapMap._default,
-						depth = wrap[0],
-						div = context.createElement("div");
-
-					// Append wrapper element to unknown element safe doc fragment
-					if ( context === document ) {
-						// Use the fragment we've already created for this document
-						safeFragment.appendChild( div );
-					} else {
-						// Use a fragment created with the owner document
-						createSafeFragment( context ).appendChild( div );
-					}
-
-					// Go to html and back, then peel off extra wrappers
-					div.innerHTML = wrap[1] + elem + wrap[2];
-
-					// Move to the right depth
-					while ( depth-- ) {
-						div = div.lastChild;
-					}
-
-					// Remove IE's autoinserted <tbody> from table fragments
-					if ( !jQuery.support.tbody ) {
-
-						// String was a <table>, *may* have spurious <tbody>
-						var hasBody = rtbody.test(elem),
-							tbody = tag === "table" && !hasBody ?
-								div.firstChild && div.firstChild.childNodes :
-
-								// String was a bare <thead> or <tfoot>
-								wrap[1] === "<table>" && !hasBody ?
-									div.childNodes :
-									[];
-
-						for ( j = tbody.length - 1; j >= 0 ; --j ) {
-							if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
-								tbody[ j ].parentNode.removeChild( tbody[ j ] );
-							}
-						}
-					}
-
-					// IE completely kills leading whitespace when innerHTML is used
-					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
-						div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
-					}
-
-					elem = div.childNodes;
-				}
-			}
-
-			// Resets defaultChecked for any radios and checkboxes
-			// about to be appended to the DOM in IE 6/7 (#8060)
-			var len;
-			if ( !jQuery.support.appendChecked ) {
-				if ( elem[0] && typeof (len = elem.length) === "number" ) {
-					for ( j = 0; j < len; j++ ) {
-						findInputs( elem[j] );
-					}
-				} else {
-					findInputs( elem );
-				}
-			}
-
-			if ( elem.nodeType ) {
-				ret.push( elem );
-			} else {
-				ret = jQuery.merge( ret, elem );
-			}
-		}
-
-		if ( fragment ) {
-			checkScriptType = function( elem ) {
-				return !elem.type || rscriptType.test( elem.type );
-			};
-			for ( i = 0; ret[i]; i++ ) {
-				if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
-					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
-
-				} else {
-					if ( ret[i].nodeType === 1 ) {
-						var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
-
-						ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
-					}
-					fragment.appendChild( ret[i] );
-				}
-			}
-		}
-
-		return ret;
-	},
-
-	cleanData: function( elems ) {
-		var data, id,
-			cache = jQuery.cache,
-			special = jQuery.event.special,
-			deleteExpando = jQuery.support.deleteExpando;
-
-		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-			if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
-				continue;
-			}
-
-			id = elem[ jQuery.expando ];
-
-			if ( id ) {
-				data = cache[ id ];
-
-				if ( data && data.events ) {
-					for ( var type in data.events ) {
-						if ( special[ type ] ) {
-							jQuery.event.remove( elem, type );
-
-						// This is a shortcut to avoid jQuery.event.remove's overhead
-						} else {
-							jQuery.removeEvent( elem, type, data.handle );
-						}
-					}
-
-					// Null the DOM reference to avoid IE6/7/8 leak (#7054)
-					if ( data.handle ) {
-						data.handle.elem = null;
-					}
-				}
-
-				if ( deleteExpando ) {
-					delete elem[ jQuery.expando ];
-
-				} else if ( elem.removeAttribute ) {
-					elem.removeAttribute( jQuery.expando );
-				}
-
-				delete cache[ id ];
-			}
-		}
-	}
-});
-
-function evalScript( i, elem ) {
-	if ( elem.src ) {
-		jQuery.ajax({
-			url: elem.src,
-			async: false,
-			dataType: "script"
-		});
-	} else {
-		jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
-	}
-
-	if ( elem.parentNode ) {
-		elem.parentNode.removeChild( elem );
-	}
-}
-
-
-
-
-var ralpha = /alpha\([^)]*\)/i,
-	ropacity = /opacity=([^)]*)/,
-	// fixed for IE9, see #8346
-	rupper = /([A-Z]|^ms)/g,
-	rnumpx = /^-?\d+(?:px)?$/i,
-	rnum = /^-?\d/,
-	rrelNum = /^([\-+])=([\-+.\de]+)/,
-
-	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
-	cssWidth = [ "Left", "Right" ],
-	cssHeight = [ "Top", "Bottom" ],
-	curCSS,
-
-	getComputedStyle,
-	currentStyle;
-
-jQuery.fn.css = function( name, value ) {
-	// Setting 'undefined' is a no-op
-	if ( arguments.length === 2 && value === undefined ) {
-		return this;
-	}
-
-	return jQuery.access( this, name, value, true, function( elem, name, value ) {
-		return value !== undefined ?
-			jQuery.style( elem, name, value ) :
-			jQuery.css( elem, name );
-	});
-};
-
-jQuery.extend({
-	// Add in style property hooks for overriding the default
-	// behavior of getting and setting a style property
-	cssHooks: {
-		opacity: {
-			get: function( elem, computed ) {
-				if ( computed ) {
-					// We should always get a number back from opacity
-					var ret = curCSS( elem, "opacity", "opacity" );
-					return ret === "" ? "1" : ret;
-
-				} else {
-					return elem.style.opacity;
-				}
-			}
-		}
-	},
-
-	// Exclude the following css properties to add px
-	cssNumber: {
-		"fillOpacity": true,
-		"fontWeight": true,
-		"lineHeight": true,
-		"opacity": true,
-		"orphans": true,
-		"widows": true,
-		"zIndex": true,
-		"zoom": true
-	},
-
-	// Add in properties whose names you wish to fix before
-	// setting or getting the value
-	cssProps: {
-		// normalize float css property
-		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
-	},
-
-	// Get and set the style property on a DOM Node
-	style: function( elem, name, value, extra ) {
-		// Don't set styles on text and comment nodes
-		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
-			return;
-		}
-
-		// Make sure that we're working with the right name
-		var ret, type, origName = jQuery.camelCase( name ),
-			style = elem.style, hooks = jQuery.cssHooks[ origName ];
-
-		name = jQuery.cssProps[ origName ] || origName;
-
-		// Check if we're setting a value
-		if ( value !== undefined ) {
-			type = typeof value;
-
-			// convert relative number strings (+= or -=) to relative numbers. #7345
-			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
-				value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
-				// Fixes bug #9237
-				type = "number";
-			}
-
-			// Make sure that NaN and null values aren't set. See: #7116
-			if ( value == null || type === "number" && isNaN( value ) ) {
-				return;
-			}
-
-			// If a number was passed in, add 'px' to the (except for certain CSS properties)
-			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
-				value += "px";
-			}
-
-			// If a hook was provided, use that value, otherwise just set the specified value
-			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
-				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
-				// Fixes bug #5509
-				try {
-					style[ name ] = value;
-				} catch(e) {}
-			}
-
-		} else {
-			// If a hook was provided get the non-computed value from there
-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
-				return ret;
-			}
-
-			// Otherwise just get the value from the style object
-			return style[ name ];
-		}
-	},
-
-	css: function( elem, name, extra ) {
-		var ret, hooks;
-
-		// Make sure that we're working with the right name
-		name = jQuery.camelCase( name );
-		hooks = jQuery.cssHooks[ name ];
-		name = jQuery.cssProps[ name ] || name;
-
-		// cssFloat needs a special treatment
-		if ( name === "cssFloat" ) {
-			name = "float";
-		}
-
-		// If a hook was provided get the computed value from there
-		if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
-			return ret;
-
-		// Otherwise, if a way to get the computed value exists, use that
-		} else if ( curCSS ) {
-			return curCSS( elem, name );
-		}
-	},
-
-	// A method for quickly swapping in/out CSS properties to get correct calculations
-	swap: function( elem, options, callback ) {
-		var old = {};
-
-		// Remember the old values, and insert the new ones
-		for ( var name in options ) {
-			old[ name ] = elem.style[ name ];
-			elem.style[ name ] = options[ name ];
-		}
-
-		callback.call( elem );
-
-		// Revert the old values
-		for ( name in options ) {
-			elem.style[ name ] = old[ name ];
-		}
-	}
-});
-
-// DEPRECATED, Use jQuery.css() instead
-jQuery.curCSS = jQuery.css;
-
-jQuery.each(["height", "width"], function( i, name ) {
-	jQuery.cssHooks[ name ] = {
-		get: function( elem, computed, extra ) {
-			var val;
-
-			if ( computed ) {
-				if ( elem.offsetWidth !== 0 ) {
-					return getWH( elem, name, extra );
-				} else {
-					jQuery.swap( elem, cssShow, function() {
-						val = getWH( elem, name, extra );
-					});
-				}
-
-				return val;
-			}
-		},
-
-		set: function( elem, value ) {
-			if ( rnumpx.test( value ) ) {
-				// ignore negative width and height values #1599
-				value = parseFloat( value );
-
-				if ( value >= 0 ) {
-					return value + "px";
-				}
-
-			} else {
-				return value;
-			}
-		}
-	};
-});
-
-if ( !jQuery.support.opacity ) {
-	jQuery.cssHooks.opacity = {
-		get: function( elem, computed ) {
-			// IE uses filters for opacity
-			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
-				( parseFloat( RegExp.$1 ) / 100 ) + "" :
-				computed ? "1" : "";
-		},
-
-		set: function( elem, value ) {
-			var style = elem.style,
-				currentStyle = elem.currentStyle,
-				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
-				filter = currentStyle && currentStyle.filter || style.filter || "";
-
-			// IE has trouble with opacity if it does not have layout
-			// Force it by setting the zoom level
-			style.zoom = 1;
-
-			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
-			if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
-
-				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
-				// if "filter:" is present at all, clearType is disabled, we want to avoid this
-				// style.removeAttribute is IE Only, but so apparently is this code path...
-				style.removeAttribute( "filter" );
-
-				// if there there is no filter style applied in a css rule, we are done
-				if ( currentStyle && !currentStyle.filter ) {
-					return;
-				}
-			}
-
-			// otherwise, set new filter values
-			style.filter = ralpha.test( filter ) ?
-				filter.replace( ralpha, opacity ) :
-				filter + " " + opacity;
-		}
-	};
-}
-
-jQuery(function() {
-	// This hook cannot be added until DOM ready because the support test
-	// for it is not run until after DOM ready
-	if ( !jQuery.support.reliableMarginRight ) {
-		jQuery.cssHooks.marginRight = {
-			get: function( elem, computed ) {
-				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-				// Work around by temporarily setting element display to inline-block
-				var ret;
-				jQuery.swap( elem, { "display": "inline-block" }, function() {
-					if ( computed ) {
-						ret = curCSS( elem, "margin-right", "marginRight" );
-					} else {
-						ret = elem.style.marginRight;
-					}
-				});
-				return ret;
-			}
-		};
-	}
-});
-
-if ( document.defaultView && document.defaultView.getComputedStyle ) {
-	getComputedStyle = function( elem, name ) {
-		var ret, defaultView, computedStyle;
-
-		name = name.replace( rupper, "-$1" ).toLowerCase();
-
-		if ( (defaultView = elem.ownerDocument.defaultView) &&
-				(computedStyle = defaultView.getComputedStyle( elem, null )) ) {
-			ret = computedStyle.getPropertyValue( name );
-			if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
-				ret = jQuery.style( elem, name );
-			}
-		}
-
-		return ret;
-	};
-}
-
-if ( document.documentElement.currentStyle ) {
-	currentStyle = function( elem, name ) {
-		var left, rsLeft, uncomputed,
-			ret = elem.currentStyle && elem.currentStyle[ name ],
-			style = elem.style;
-
-		// Avoid setting ret to empty string here
-		// so we don't default to auto
-		if ( ret === null && style && (uncomputed = style[ name ]) ) {
-			ret = uncomputed;
-		}
-
-		// From the awesome hack by Dean Edwards
-		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
-		// If we're not dealing with a regular pixel number
-		// but a number that has a weird ending, we need to convert it to pixels
-		if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
-
-			// Remember the original values
-			left = style.left;
-			rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
-
-			// Put in the new values to get a computed value out
-			if ( rsLeft ) {
-				elem.runtimeStyle.left = elem.currentStyle.left;
-			}
-			style.left = name === "fontSize" ? "1em" : ( ret || 0 );
-			ret = style.pixelLeft + "px";
-
-			// Revert the changed values
-			style.left = left;
-			if ( rsLeft ) {
-				elem.runtimeStyle.left = rsLeft;
-			}
-		}
-
-		return ret === "" ? "auto" : ret;
-	};
-}
-
-curCSS = getComputedStyle || currentStyle;
-
-function getWH( elem, name, extra ) {
-
-	// Start with offset property
-	var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
-		which = name === "width" ? cssWidth : cssHeight,
-		i = 0,
-		len = which.length;
-
-	if ( val > 0 ) {
-		if ( extra !== "border" ) {
-			for ( ; i < len; i++ ) {
-				if ( !extra ) {
-					val -= parseFloat( jQuery.css( elem, "padding" + which[ i ] ) ) || 0;
-				}
-				if ( extra === "margin" ) {
-					val += parseFloat( jQuery.css( elem, extra + which[ i ] ) ) || 0;
-				} else {
-					val -= parseFloat( jQuery.css( elem, "border" + which[ i ] + "Width" ) ) || 0;
-				}
-			}
-		}
-
-		return val + "px";
-	}
-
-	// Fall back to computed then uncomputed css if necessary
-	val = curCSS( elem, name, name );
-	if ( val < 0 || val == null ) {
-		val = elem.style[ name ] || 0;
-	}
-	// Normalize "", auto, and prepare for extra
-	val = parseFloat( val ) || 0;
-
-	// Add padding, border, margin
-	if ( extra ) {
-		for ( ; i < len; i++ ) {
-			val += parseFloat( jQuery.css( elem, "padding" + which[ i ] ) ) || 0;
-			if ( extra !== "padding" ) {
-				val += parseFloat( jQuery.css( elem, "border" + which[ i ] + "Width" ) ) || 0;
-			}
-			if ( extra === "margin" ) {
-				val += parseFloat( jQuery.css( elem, extra + which[ i ] ) ) || 0;
-			}
-		}
-	}
-
-	return val + "px";
-}
-
-if ( jQuery.expr && jQuery.expr.filters ) {
-	jQuery.expr.filters.hidden = function( elem ) {
-		var width = elem.offsetWidth,
-			height = elem.offsetHeight;
-
-		return ( width === 0 && height === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
-	};
-
-	jQuery.expr.filters.visible = function( elem ) {
-		return !jQuery.expr.filters.hidden( elem );
-	};
-}
-
-
-
-
-var r20 = /%20/g,
-	rbracket = /\[\]$/,
-	rCRLF = /\r?\n/g,
-	rhash = /#.*$/,
-	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
-	rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
-	// #7653, #8125, #8152: local protocol detection
-	rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
-	rnoContent = /^(?:GET|HEAD)$/,
-	rprotocol = /^\/\//,
-	rquery = /\?/,
-	rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
-	rselectTextarea = /^(?:select|textarea)/i,
-	rspacesAjax = /\s+/,
-	rts = /([?&])_=[^&]*/,
-	rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
-
-	// Keep a copy of the old load method
-	_load = jQuery.fn.load,
-
-	/* Prefilters
-	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
-	 * 2) These are called:
-	 *    - BEFORE asking for a transport
-	 *    - AFTER param serialization (s.data is a string if s.processData is true)
-	 * 3) key is the dataType
-	 * 4) the catchall symbol "*" can be used
-	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
-	 */
-	prefilters = {},
-
-	/* Transports bindings
-	 * 1) key is the dataType
-	 * 2) the catchall symbol "*" can be used
-	 * 3) selection will start with transport dataType and THEN go to "*" if needed
-	 */
-	transports = {},
-
-	// Document location
-	ajaxLocation,
-
-	// Document location segments
-	ajaxLocParts,
-
-	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
-	allTypes = ["*/"] + ["*"];
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
-	ajaxLocation = location.href;
-} catch( e ) {
-	// Use the href attribute of an A element
-	// since IE will modify it given document.location
-	ajaxLocation = document.createElement( "a" );
-	ajaxLocation.href = "";
-	ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
-	// dataTypeExpression is optional and defaults to "*"
-	return function( dataTypeExpression, func ) {
-
-		if ( typeof dataTypeExpression !== "string" ) {
-			func = dataTypeExpression;
-			dataTypeExpression = "*";
-		}
-
-		if ( jQuery.isFunction( func ) ) {
-			var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
-				i = 0,
-				length = dataTypes.length,
-				dataType,
-				list,
-				placeBefore;
-
-			// For each dataType in the dataTypeExpression
-			for ( ; i < length; i++ ) {
-				dataType = dataTypes[ i ];
-				// We control if we're asked to add before
-				// any existing element
-				placeBefore = /^\+/.test( dataType );
-				if ( placeBefore ) {
-					dataType = dataType.substr( 1 ) || "*";
-				}
-				list = structure[ dataType ] = structure[ dataType ] || [];
-				// then we add to the structure accordingly
-				list[ placeBefore ? "unshift" : "push" ]( func );
-			}
-		}
-	};
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
-		dataType /* internal */, inspected /* internal */ ) {
-
-	dataType = dataType || options.dataTypes[ 0 ];
-	inspected = inspected || {};
-
-	inspected[ dataType ] = true;
-
-	var list = structure[ dataType ],
-		i = 0,
-		length = list ? list.length : 0,
-		executeOnly = ( structure === prefilters ),
-		selection;
-
-	for ( ; i < length && ( executeOnly || !selection ); i++ ) {
-		selection = list[ i ]( options, originalOptions, jqXHR );
-		// If we got redirected to another dataType
-		// we try there if executing only and not done already
-		if ( typeof selection === "string" ) {
-			if ( !executeOnly || inspected[ selection ] ) {
-				selection = undefined;
-			} else {
-				options.dataTypes.unshift( selection );
-				selection = inspectPrefiltersOrTransports(
-						structure, options, originalOptions, jqXHR, selection, inspected );
-			}
-		}
-	}
-	// If we're only executing or nothing was selected
-	// we try the catchall dataType if not done already
-	if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
-		selection = inspectPrefiltersOrTransports(
-				structure, options, originalOptions, jqXHR, "*", inspected );
-	}
-	// unnecessary when only executing (prefilters)
-	// but it'll be ignored by the caller in that case
-	return selection;
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
-	var key, deep,
-		flatOptions = jQuery.ajaxSettings.flatOptions || {};
-	for ( key in src ) {
-		if ( src[ key ] !== undefined ) {
-			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
-		}
-	}
-	if ( deep ) {
-		jQuery.extend( true, target, deep );
-	}
-}
-
-jQuery.fn.extend({
-	load: function( url, params, callback ) {
-		if ( typeof url !== "string" && _load ) {
-			return _load.apply( this, arguments );
-
-		// Don't do a request if no elements are being requested
-		} else if ( !this.length ) {
-			return this;
-		}
-
-		var off = url.indexOf( " " );
-		if ( off >= 0 ) {
-			var selector = url.slice( off, url.length );
-			url = url.slice( 0, off );
-		}
-
-		// Default to a GET request
-		var type = "GET";
-
-		// If the second parameter was provided
-		if ( params ) {
-			// If it's a function
-			if ( jQuery.isFunction( params ) ) {
-				// We assume that it's the callback
-				callback = params;
-				params = undefined;
-
-			// Otherwise, build a param string
-			} else if ( typeof params === "object" ) {
-				params = jQuery.param( params, jQuery.ajaxSettings.traditional );
-				type = "POST";
-			}
-		}
-
-		var self = this;
-
-		// Request the remote document
-		jQuery.ajax({
-			url: url,
-			type: type,
-			dataType: "html",
-			data: params,
-			// Complete callback (responseText is used internally)
-			complete: function( jqXHR, status, responseText ) {
-				// Store the response as specified by the jqXHR object
-				responseText = jqXHR.responseText;
-				// If successful, inject the HTML into all the matched elements
-				if ( jqXHR.isResolved() ) {
-					// #4825: Get the actual response in case
-					// a dataFilter is present in ajaxSettings
-					jqXHR.done(function( r ) {
-						responseText = r;
-					});
-					// See if a selector was specified
-					self.html( selector ?
-						// Create a dummy div to hold the results
-						jQuery("<div>")
-							// inject the contents of the document in, removing the scripts
-							// to avoid any 'Permission Denied' errors in IE
-							.append(responseText.replace(rscript, ""))
-
-							// Locate the specified elements
-							.find(selector) :
-
-						// If not, just inject the full result
-						responseText );
-				}
-
-				if ( callback ) {
-					self.each( callback, [ responseText, status, jqXHR ] );
-				}
-			}
-		});
-
-		return this;
-	},
-
-	serialize: function() {
-		return jQuery.param( this.serializeArray() );
-	},
-
-	serializeArray: function() {
-		return this.map(function(){
-			return this.elements ? jQuery.makeArray( this.elements ) : this;
-		})
-		.filter(function(){
-			return this.name && !this.disabled &&
-				( this.checked || rselectTextarea.test( this.nodeName ) ||
-					rinput.test( this.type ) );
-		})
-		.map(function( i, elem ){
-			var val = jQuery( this ).val();
-
-			return val == null ?
-				null :
-				jQuery.isArray( val ) ?
-					jQuery.map( val, function( val, i ){
-						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-					}) :
-					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-		}).get();
-	}
-});
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
-	jQuery.fn[ o ] = function( f ){
-		return this.on( o, f );
-	};
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
-	jQuery[ method ] = function( url, data, callback, type ) {
-		// shift arguments if data argument was omitted
-		if ( jQuery.isFunction( data ) ) {
-			type = type || callback;
-			callback = data;
-			data = undefined;
-		}
-
-		return jQuery.ajax({
-			type: method,
-			url: url,
-			data: data,
-			success: callback,
-			dataType: type
-		});
-	};
-});
-
-jQuery.extend({
-
-	getScript: function( url, callback ) {
-		return jQuery.get( url, undefined, callback, "script" );
-	},
-
-	getJSON: function( url, data, callback ) {
-		return jQuery.get( url, data, callback, "json" );
-	},
-
-	// Creates a full fledged settings object into target
-	// with both ajaxSettings and settings fields.
-	// If target is omitted, writes into ajaxSettings.
-	ajaxSetup: function( target, settings ) {
-		if ( settings ) {
-			// Building a settings object
-			ajaxExtend( target, jQuery.ajaxSettings );
-		} else {
-			// Extending ajaxSettings
-			settings = target;
-			target = jQuery.ajaxSettings;
-		}
-		ajaxExtend( target, settings );
-		return target;
-	},
-
-	ajaxSettings: {
-		url: ajaxLocation,
-		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
-		global: true,
-		type: "GET",
-		contentType: "application/x-www-form-urlencoded",
-		processData: true,
-		async: true,
-		/*
-		timeout: 0,
-		data: null,
-		dataType: null,
-		username: null,
-		password: null,
-		cache: null,
-		traditional: false,
-		headers: {},
-		*/
-
-		accepts: {
-			xml: "application/xml, text/xml",
-			html: "text/html",
-			text: "text/plain",
-			json: "application/json, text/javascript",
-			"*": allTypes
-		},
-
-		contents: {
-			xml: /xml/,
-			html: /html/,
-			json: /json/
-		},
-
-		responseFields: {
-			xml: "responseXML",
-			text: "responseText"
-		},
-
-		// List of data converters
-		// 1) key format is "source_type destination_type" (a single space in-between)
-		// 2) the catchall symbol "*" can be used for source_type
-		converters: {
-
-			// Convert anything to text
-			"* text": window.String,
-
-			// Text to html (true = no transformation)
-			"text html": true,
-
-			// Evaluate text as a json expression
-			"text json": jQuery.parseJSON,
-
-			// Parse text as xml
-			"text xml": jQuery.parseXML
-		},
-
-		// For options that shouldn't be deep extended:
-		// you can add your own custom options here if
-		// and when you create one that shouldn't be
-		// deep extended (see ajaxExtend)
-		flatOptions: {
-			context: true,
-			url: true
-		}
-	},
-
-	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
-	ajaxTransport: addToPrefiltersOrTransports( transports ),
-
-	// Main method
-	ajax: function( url, options ) {
-
-		// If url is an object, simulate pre-1.5 signature
-		if ( typeof url === "object" ) {
-			options = url;
-			url = undefined;
-		}
-
-		// Force options to be an object
-		options = options || {};
-
-		var // Create the final options object
-			s = jQuery.ajaxSetup( {}, options ),
-			// Callbacks context
-			callbackContext = s.context || s,
-			// Context for global events
-			// It's the callbackContext if one was provided in the options
-			// and if it's a DOM node or a jQuery collection
-			globalEventContext = callbackContext !== s &&
-				( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
-						jQuery( callbackContext ) : jQuery.event,
-			// Deferreds
-			deferred = jQuery.Deferred(),
-			completeDeferred = jQuery.Callbacks( "once memory" ),
-			// Status-dependent callbacks
-			statusCode = s.statusCode || {},
-			// ifModified key
-			ifModifiedKey,
-			// Headers (they are sent all at once)
-			requestHeaders = {},
-			requestHeadersNames = {},
-			// Response headers
-			responseHeadersString,
-			responseHeaders,
-			// transport
-			transport,
-			// timeout handle
-			timeoutTimer,
-			// Cross-domain detection vars
-			parts,
-			// The jqXHR state
-			state = 0,
-			// To know if global events are to be dispatched
-			fireGlobals,
-			// Loop variable
-			i,
-			// Fake xhr
-			jqXHR = {
-
-				readyState: 0,
-
-				// Caches the header
-				setRequestHeader: function( name, value ) {
-					if ( !state ) {
-						var lname = name.toLowerCase();
-						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
-						requestHeaders[ name ] = value;
-					}
-					return this;
-				},
-
-				// Raw string
-				getAllResponseHeaders: function() {
-					return state === 2 ? responseHeadersString : null;
-				},
-
-				// Builds headers hashtable if needed
-				getResponseHeader: function( key ) {
-					var match;
-					if ( state === 2 ) {
-						if ( !responseHeaders ) {
-							responseHeaders = {};
-							while( ( match = rheaders.exec( responseHeadersString ) ) ) {
-								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
-							}
-						}
-						match = responseHeaders[ key.toLowerCase() ];
-					}
-					return match === undefined ? null : match;
-				},
-
-				// Overrides response content-type header
-				overrideMimeType: function( type ) {
-					if ( !state ) {
-						s.mimeType = type;
-					}
-					return this;
-				},
-
-				// Cancel the request
-				abort: function( statusText ) {
-					statusText = statusText || "abort";
-					if ( transport ) {
-						transport.abort( statusText );
-					}
-					done( 0, statusText );
-					return this;
-				}
-			};
-
-		// Callback for when everything is done
-		// It is defined here because jslint complains if it is declared
-		// at the end of the function (which would be more logical and readable)
-		function done( status, nativeStatusText, responses, headers ) {
-
-			// Called once
-			if ( state === 2 ) {
-				return;
-			}
-
-			// State is "done" now
-			state = 2;
-
-			// Clear timeout if it exists
-			if ( timeoutTimer ) {
-				clearTimeout( timeoutTimer );
-			}
-
-			// Dereference transport for early garbage collection
-			// (no matter how long the jqXHR object will be used)
-			transport = undefined;
-
-			// Cache response headers
-			responseHeadersString = headers || "";
-
-			// Set readyState
-			jqXHR.readyState = status > 0 ? 4 : 0;
-
-			var isSuccess,
-				success,
-				error,
-				statusText = nativeStatusText,
-				response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
-				lastModified,
-				etag;
-
-			// If successful, handle type chaining
-			if ( status >= 200 && status < 300 || status === 304 ) {
-
-				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-				if ( s.ifModified ) {
-
-					if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
-						jQuery.lastModified[ ifModifiedKey ] = lastModified;
-					}
-					if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
-						jQuery.etag[ ifModifiedKey ] = etag;
-					}
-				}
-
-				// If not modified
-				if ( status === 304 ) {
-
-					statusText = "notmodified";
-					isSuccess = true;
-
-				// If we have data
-				} else {
-
-					try {
-						success = ajaxConvert( s, response );
-						statusText = "success";
-						isSuccess = true;
-					} catch(e) {
-						// We have a parsererror
-						statusText = "parsererror";
-						error = e;
-					}
-				}
-			} else {
-				// We extract error from statusText
-				// then normalize statusText and status for non-aborts
-				error = statusText;
-				if ( !statusText || status ) {
-					statusText = "error";
-					if ( status < 0 ) {
-						status = 0;
-					}
-				}
-			}
-
-			// Set data for the fake xhr object
-			jqXHR.status = status;
-			jqXHR.statusText = "" + ( nativeStatusText || statusText );
-
-			// Success/Error
-			if ( isSuccess ) {
-				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
-			} else {
-				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
-			}
-
-			// Status-dependent callbacks
-			jqXHR.statusCode( statusCode );
-			statusCode = undefined;
-
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
-						[ jqXHR, s, isSuccess ? success : error ] );
-			}
-
-			// Complete
-			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
-				// Handle the global AJAX counter
-				if ( !( --jQuery.active ) ) {
-					jQuery.event.trigger( "ajaxStop" );
-				}
-			}
-		}
-
-		// Attach deferreds
-		deferred.promise( jqXHR );
-		jqXHR.success = jqXHR.done;
-		jqXHR.error = jqXHR.fail;
-		jqXHR.complete = completeDeferred.add;
-
-		// Status-dependent callbacks
-		jqXHR.statusCode = function( map ) {
-			if ( map ) {
-				var tmp;
-				if ( state < 2 ) {
-					for ( tmp in map ) {
-						statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
-					}
-				} else {
-					tmp = map[ jqXHR.status ];
-					jqXHR.then( tmp, tmp );
-				}
-			}
-			return this;
-		};
-
-		// Remove hash character (#7531: and string promotion)
-		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
-		// We also use the url parameter if available
-		s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
-		// Extract dataTypes list
-		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
-
-		// Determine if a cross-domain request is in order
-		if ( s.crossDomain == null ) {
-			parts = rurl.exec( s.url.toLowerCase() );
-			s.crossDomain = !!( parts &&
-				( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
-					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
-						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
-			);
-		}
-
-		// Convert data if not already a string
-		if ( s.data && s.processData && typeof s.data !== "string" ) {
-			s.data = jQuery.param( s.data, s.traditional );
-		}
-
-		// Apply prefilters
-		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
-		// If request was aborted inside a prefiler, stop there
-		if ( state === 2 ) {
-			return false;
-		}
-
-		// We can fire global events as of now if asked to
-		fireGlobals = s.global;
-
-		// Uppercase the type
-		s.type = s.type.toUpperCase();
-
-		// Determine if request has content
-		s.hasContent = !rnoContent.test( s.type );
-
-		// Watch for a new set of requests
-		if ( fireGlobals && jQuery.active++ === 0 ) {
-			jQuery.event.trigger( "ajaxStart" );
-		}
-
-		// More options handling for requests with no content
-		if ( !s.hasContent ) {
-
-			// If data is available, append data to url
-			if ( s.data ) {
-				s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
-				// #9682: remove data so that it's not used in an eventual retry
-				delete s.data;
-			}
-
-			// Get ifModifiedKey before adding the anti-cache parameter
-			ifModifiedKey = s.url;
-
-			// Add anti-cache in url if needed
-			if ( s.cache === false ) {
-
-				var ts = jQuery.now(),
-					// try replacing _= if it is there
-					ret = s.url.replace( rts, "$1_=" + ts );
-
-				// if nothing was replaced, add timestamp to the end
-				s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
-			}
-		}
-
-		// Set the correct header, if data is being sent
-		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
-			jqXHR.setRequestHeader( "Content-Type", s.contentType );
-		}
-
-		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-		if ( s.ifModified ) {
-			ifModifiedKey = ifModifiedKey || s.url;
-			if ( jQuery.lastModified[ ifModifiedKey ] ) {
-				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
-			}
-			if ( jQuery.etag[ ifModifiedKey ] ) {
-				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
-			}
-		}
-
-		// Set the Accepts header for the server, depending on the dataType
-		jqXHR.setRequestHeader(
-			"Accept",
-			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
-				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
-				s.accepts[ "*" ]
-		);
-
-		// Check for headers option
-		for ( i in s.headers ) {
-			jqXHR.setRequestHeader( i, s.headers[ i ] );
-		}
-
-		// Allow custom headers/mimetypes and early abort
-		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
-				// Abort if not done already
-				jqXHR.abort();
-				return false;
-
-		}
-
-		// Install callbacks on deferreds
-		for ( i in { success: 1, error: 1, complete: 1 } ) {
-			jqXHR[ i ]( s[ i ] );
-		}
-
-		// Get transport
-		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
-		// If no transport, we auto-abort
-		if ( !transport ) {
-			done( -1, "No Transport" );
-		} else {
-			jqXHR.readyState = 1;
-			// Send global event
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
-			}
-			// Timeout
-			if ( s.async && s.timeout > 0 ) {
-				timeoutTimer = setTimeout( function(){
-					jqXHR.abort( "timeout" );
-				}, s.timeout );
-			}
-
-			try {
-				state = 1;
-				transport.send( requestHeaders, done );
-			} catch (e) {
-				// Propagate exception as error if not done
-				if ( state < 2 ) {
-					done( -1, e );
-				// Simply rethrow otherwise
-				} else {
-					throw e;
-				}
-			}
-		}
-
-		return jqXHR;
-	},
-
-	// Serialize an array of form elements or a set of
-	// key/values into a query string
-	param: function( a, traditional ) {
-		var s = [],
-			add = function( key, value ) {
-				// If value is a function, invoke it and return its value
-				value = jQuery.isFunction( value ) ? value() : value;
-				s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
-			};
-
-		// Set traditional to true for jQuery <= 1.3.2 behavior.
-		if ( traditional === undefined ) {
-			traditional = jQuery.ajaxSettings.traditional;
-		}
-
-		// If an array was passed in, assume that it is an array of form elements.
-		if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
-			// Serialize the form elements
-			jQuery.each( a, function() {
-				add( this.name, this.value );
-			});
-
-		} else {
-			// If traditional, encode the "old" way (the way 1.3.2 or older
-			// did it), otherwise encode params recursively.
-			for ( var prefix in a ) {
-				buildParams( prefix, a[ prefix ], traditional, add );
-			}
-		}
-
-		// Return the resulting serialization
-		return s.join( "&" ).replace( r20, "+" );
-	}
-});
-
-function buildParams( prefix, obj, traditional, add ) {
-	if ( jQuery.isArray( obj ) ) {
-		// Serialize array item.
-		jQuery.each( obj, function( i, v ) {
-			if ( traditional || rbracket.test( prefix ) ) {
-				// Treat each array item as a scalar.
-				add( prefix, v );
-
-			} else {
-				// If array item is non-scalar (array or object), encode its
-				// numeric index to resolve deserialization ambiguity issues.
-				// Note that rack (as of 1.0.0) can't currently deserialize
-				// nested arrays properly, and attempting to do so may cause
-				// a server error. Possible fixes are to modify rack's
-				// deserialization algorithm or to provide an option or flag
-				// to force array serialization to be shallow.
-				buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
-			}
-		});
-
-	} else if ( !traditional && obj != null && typeof obj === "object" ) {
-		// Serialize object item.
-		for ( var name in obj ) {
-			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
-		}
-
-	} else {
-		// Serialize scalar item.
-		add( prefix, obj );
-	}
-}
-
-// This is still on the jQuery object... for now
-// Want to move this to jQuery.ajax some day
-jQuery.extend({
-
-	// Counter for holding the number of active queries
-	active: 0,
-
-	// Last-Modified header cache for next request
-	lastModified: {},
-	etag: {}
-
-});
-
-/* Handles responses to an ajax request:
- * - sets all responseXXX fields accordingly
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
-	var contents = s.contents,
-		dataTypes = s.dataTypes,
-		responseFields = s.responseFields,
-		ct,
-		type,
-		finalDataType,
-		firstDataType;
-
-	// Fill responseXXX fields
-	for ( type in responseFields ) {
-		if ( type in responses ) {
-			jqXHR[ responseFields[type] ] = responses[ type ];
-		}
-	}
-
-	// Remove auto dataType and get content-type in the process
-	while( dataTypes[ 0 ] === "*" ) {
-		dataTypes.shift();
-		if ( ct === undefined ) {
-			ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
-		}
-	}
-
-	// Check if we're dealing with a known content-type
-	if ( ct ) {
-		for ( type in contents ) {
-			if ( contents[ type ] && contents[ type ].test( ct ) ) {
-				dataTypes.unshift( type );
-				break;
-			}
-		}
-	}
-
-	// Check to see if we have a response for the expected dataType
-	if ( dataTypes[ 0 ] in responses ) {
-		finalDataType = dataTypes[ 0 ];
-	} else {
-		// Try convertible dataTypes
-		for ( type in responses ) {
-			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
-				finalDataType = type;
-				break;
-			}
-			if ( !firstDataType ) {
-				firstDataType = type;
-			}
-		}
-		// Or just use first one
-		finalDataType = finalDataType || firstDataType;
-	}
-
-	// If we found a dataType
-	// We add the dataType to the list if needed
-	// and return the corresponding response
-	if ( finalDataType ) {
-		if ( finalDataType !== dataTypes[ 0 ] ) {
-			dataTypes.unshift( finalDataType );
-		}
-		return responses[ finalDataType ];
-	}
-}
-
-// Chain conversions given the request and the original response
-function ajaxConvert( s, response ) {
-
-	// Apply the dataFilter if provided
-	if ( s.dataFilter ) {
-		response = s.dataFilter( response, s.dataType );
-	}
-
-	var dataTypes = s.dataTypes,
-		converters = {},
-		i,
-		key,
-		length = dataTypes.length,
-		tmp,
-		// Current and previous dataTypes
-		current = dataTypes[ 0 ],
-		prev,
-		// Conversion expression
-		conversion,
-		// Conversion function
-		conv,
-		// Conversion functions (transitive conversion)
-		conv1,
-		conv2;
-
-	// For each dataType in the chain
-	for ( i = 1; i < length; i++ ) {
-
-		// Create converters map
-		// with lowercased keys
-		if ( i === 1 ) {
-			for ( key in s.converters ) {
-				if ( typeof key === "string" ) {
-					converters[ key.toLowerCase() ] = s.converters[ key ];
-				}
-			}
-		}
-
-		// Get the dataTypes
-		prev = current;
-		current = dataTypes[ i ];
-
-		// If current is auto dataType, update it to prev
-		if ( current === "*" ) {
-			current = prev;
-		// If no auto and dataTypes are actually different
-		} else if ( prev !== "*" && prev !== current ) {
-
-			// Get the converter
-			conversion = prev + " " + current;
-			conv = converters[ conversion ] || converters[ "* " + current ];
-
-			// If there is no direct converter, search transitively
-			if ( !conv ) {
-				conv2 = undefined;
-				for ( conv1 in converters ) {
-					tmp = conv1.split( " " );
-					if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
-						conv2 = converters[ tmp[1] + " " + current ];
-						if ( conv2 ) {
-							conv1 = converters[ conv1 ];
-							if ( conv1 === true ) {
-								conv = conv2;
-							} else if ( conv2 === true ) {
-								conv = conv1;
-							}
-							break;
-						}
-					}
-				}
-			}
-			// If we found no converter, dispatch an error
-			if ( !( conv || conv2 ) ) {
-				jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
-			}
-			// If found converter is not an equivalence
-			if ( conv !== true ) {
-				// Convert with 1 or 2 converters accordingly
-				response = conv ? conv( response ) : conv2( conv1(response) );
-			}
-		}
-	}
-	return response;
-}
-
-
-
-
-var jsc = jQuery.now(),
-	jsre = /(\=)\?(&|$)|\?\?/i;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
-	jsonp: "callback",
-	jsonpCallback: function() {
-		return jQuery.expando + "_" + ( jsc++ );
-	}
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
-	var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
-		( typeof s.data === "string" );
-
-	if ( s.dataTypes[ 0 ] === "jsonp" ||
-		s.jsonp !== false && ( jsre.test( s.url ) ||
-				inspectData && jsre.test( s.data ) ) ) {
-
-		var responseContainer,
-			jsonpCallback = s.jsonpCallback =
-				jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
-			previous = window[ jsonpCallback ],
-			url = s.url,
-			data = s.data,
-			replace = "$1" + jsonpCallback + "$2";
-
-		if ( s.jsonp !== false ) {
-			url = url.replace( jsre, replace );
-			if ( s.url === url ) {
-				if ( inspectData ) {
-					data = data.replace( jsre, replace );
-				}
-				if ( s.data === data ) {
-					// Add callback manually
-					url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
-				}
-			}
-		}
-
-		s.url = url;
-		s.data = data;
-
-		// Install callback
-		window[ jsonpCallback ] = function( response ) {
-			responseContainer = [ response ];
-		};
-
-		// Clean-up function
-		jqXHR.always(function() {
-			// Set callback back to previous value
-			window[ jsonpCallback ] = previous;
-			// Call if it was a function and we have a response
-			if ( responseContainer && jQuery.isFunction( previous ) ) {
-				window[ jsonpCallback ]( responseContainer[ 0 ] );
-			}
-		});
-
-		// Use data converter to retrieve json after script execution
-		s.converters["script json"] = function() {
-			if ( !responseContainer ) {
-				jQuery.error( jsonpCallback + " was not called" );
-			}
-			return responseContainer[ 0 ];
-		};
-
-		// force json dataType
-		s.dataTypes[ 0 ] = "json";
-
-		// Delegate to script
-		return "script";
-	}
-});
-
-
-
-
-// Install script dataType
-jQuery.ajaxSetup({
-	accepts: {
-		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
-	},
-	contents: {
-		script: /javascript|ecmascript/
-	},
-	converters: {
-		"text script": function( text ) {
-			jQuery.globalEval( text );
-			return text;
-		}
-	}
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
-	if ( s.cache === undefined ) {
-		s.cache = false;
-	}
-	if ( s.crossDomain ) {
-		s.type = "GET";
-		s.global = false;
-	}
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
-	// This transport only deals with cross domain requests
-	if ( s.crossDomain ) {
-
-		var script,
-			head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
-
-		return {
-
-			send: function( _, callback ) {
-
-				script = document.createElement( "script" );
-
-				script.async = "async";
-
-				if ( s.scriptCharset ) {
-					script.charset = s.scriptCharset;
-				}
-
-				script.src = s.url;
-
-				// Attach handlers for all browsers
-				script.onload = script.onreadystatechange = function( _, isAbort ) {
-
-					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
-						// Handle memory leak in IE
-						script.onload = script.onreadystatechange = null;
-
-						// Remove the script
-						if ( head && script.parentNode ) {
-							head.removeChild( script );
-						}
-
-						// Dereference the script
-						script = undefined;
-
-						// Callback if not abort
-						if ( !isAbort ) {
-							callback( 200, "success" );
-						}
-					}
-				};
-				// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
-				// This arises when a base node is used (#2709 and #4378).
-				head.insertBefore( script, head.firstChild );
-			},
-
-			abort: function() {
-				if ( script ) {
-					script.onload( 0, 1 );
-				}
-			}
-		};
-	}
-});
-
-
-
-
-var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
-	xhrOnUnloadAbort = window.ActiveXObject ? function() {
-		// Abort all pending requests
-		for ( var key in xhrCallbacks ) {
-			xhrCallbacks[ key ]( 0, 1 );
-		}
-	} : false,
-	xhrId = 0,
-	xhrCallbacks;
-
-// Functions to create xhrs
-function createStandardXHR() {
-	try {
-		return new window.XMLHttpRequest();
-	} catch( e ) {}
-}
-
-function createActiveXHR() {
-	try {
-		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
-	} catch( e ) {}
-}
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
-	/* Microsoft failed to properly
-	 * implement the XMLHttpRequest in IE7 (can't request local files),
-	 * so we use the ActiveXObject when it is available
-	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
-	 * we need a fallback.
-	 */
-	function() {
-		return !this.isLocal && createStandardXHR() || createActiveXHR();
-	} :
-	// For all other browsers, use the standard XMLHttpRequest object
-	createStandardXHR;
-
-// Determine support properties
-(function( xhr ) {
-	jQuery.extend( jQuery.support, {
-		ajax: !!xhr,
-		cors: !!xhr && ( "withCredentials" in xhr )
-	});
-})( jQuery.ajaxSettings.xhr() );
-
-// Create transport if the browser can provide an xhr
-if ( jQuery.support.ajax ) {
-
-	jQuery.ajaxTransport(function( s ) {
-		// Cross domain only allowed if supported through XMLHttpRequest
-		if ( !s.crossDomain || jQuery.support.cors ) {
-
-			var callback;
-
-			return {
-				send: function( headers, complete ) {
-
-					// Get a new xhr
-					var xhr = s.xhr(),
-						handle,
-						i;
-
-					// Open the socket
-					// Passing null username, generates a login popup on Opera (#2865)
-					if ( s.username ) {
-						xhr.open( s.type, s.url, s.async, s.username, s.password );
-					} else {
-						xhr.open( s.type, s.url, s.async );
-					}
-
-					// Apply custom fields if provided
-					if ( s.xhrFields ) {
-						for ( i in s.xhrFields ) {
-							xhr[ i ] = s.xhrFields[ i ];
-						}
-					}
-
-					// Override mime type if needed
-					if ( s.mimeType && xhr.overrideMimeType ) {
-						xhr.overrideMimeType( s.mimeType );
-					}
-
-					// X-Requested-With header
-					// For cross-domain requests, seeing as conditions for a preflight are
-					// akin to a jigsaw puzzle, we simply never set it to be sure.
-					// (it can always be set on a per-request basis or even using ajaxSetup)
-					// For same-domain requests, won't change header if already provided.
-					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
-						headers[ "X-Requested-With" ] = "XMLHttpRequest";
-					}
-
-					// Need an extra try/catch for cross domain requests in Firefox 3
-					try {
-						for ( i in headers ) {
-							xhr.setRequestHeader( i, headers[ i ] );
-						}
-					} catch( _ ) {}
-
-					// Do send the request
-					// This may raise an exception which is actually
-					// handled in jQuery.ajax (so no try/catch here)
-					xhr.send( ( s.hasContent && s.data ) || null );
-
-					// Listener
-					callback = function( _, isAbort ) {
-
-						var status,
-							statusText,
-							responseHeaders,
-							responses,
-							xml;
-
-						// Firefox throws exceptions when accessing properties
-						// of an xhr when a network error occured
-						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
-						try {
-
-							// Was never called and is aborted or complete
-							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-
-								// Only called once
-								callback = undefined;
-
-								// Do not keep as active anymore
-								if ( handle ) {
-									xhr.onreadystatechange = jQuery.noop;
-									if ( xhrOnUnloadAbort ) {
-										delete xhrCallbacks[ handle ];
-									}
-								}
-
-								// If it's an abort
-								if ( isAbort ) {
-									// Abort it manually if needed
-									if ( xhr.readyState !== 4 ) {
-										xhr.abort();
-									}
-								} else {
-									status = xhr.status;
-									responseHeaders = xhr.getAllResponseHeaders();
-									responses = {};
-									xml = xhr.responseXML;
-
-									// Construct response list
-									if ( xml && xml.documentElement /* #4958 */ ) {
-										responses.xml = xml;
-									}
-									responses.text = xhr.responseText;
-
-									// Firefox throws an exception when accessing
-									// statusText for faulty cross-domain requests
-									try {
-										statusText = xhr.statusText;
-									} catch( e ) {
-										// We normalize with Webkit giving an empty statusText
-										statusText = "";
-									}
-
-									// Filter status for non standard behaviors
-
-									// If the request is local and we have data: assume a success
-									// (success with no data won't get notified, that's the best we
-									// can do given current implementations)
-									if ( !status && s.isLocal && !s.crossDomain ) {
-										status = responses.text ? 200 : 404;
-									// IE - #1450: sometimes returns 1223 when it should be 204
-									} else if ( status === 1223 ) {
-										status = 204;
-									}
-								}
-							}
-						} catch( firefoxAccessException ) {
-							if ( !isAbort ) {
-								complete( -1, firefoxAccessException );
-							}
-						}
-
-						// Call complete if needed
-						if ( responses ) {
-							complete( status, statusText, responses, responseHeaders );
-						}
-					};
-
-					// if we're in sync mode or it's in cache
-					// and has been retrieved directly (IE6 & IE7)
-					// we need to manually fire the callback
-					if ( !s.async || xhr.readyState === 4 ) {
-						callback();
-					} else {
-						handle = ++xhrId;
-						if ( xhrOnUnloadAbort ) {
-							// Create the active xhrs callbacks list if needed
-							// and attach the unload handler
-							if ( !xhrCallbacks ) {
-								xhrCallbacks = {};
-								jQuery( window ).unload( xhrOnUnloadAbort );
-							}
-							// Add to list of active xhrs callbacks
-							xhrCallbacks[ handle ] = callback;
-						}
-						xhr.onreadystatechange = callback;
-					}
-				},
-
-				abort: function() {
-					if ( callback ) {
-						callback(0,1);
-					}
-				}
-			};
-		}
-	});
-}
-
-
-
-
-var elemdisplay = {},
-	iframe, iframeDoc,
-	rfxtypes = /^(?:toggle|show|hide)$/,
-	rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
-	timerId,
-	fxAttrs = [
-		// height animations
-		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
-		// width animations
-		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
-		// opacity animations
-		[ "opacity" ]
-	],
-	fxNow;
-
-jQuery.fn.extend({
-	show: function( speed, easing, callback ) {
-		var elem, display;
-
-		if ( speed || speed === 0 ) {
-			return this.animate( genFx("show", 3), speed, easing, callback );
-
-		} else {
-			for ( var i = 0, j = this.length; i < j; i++ ) {
-				elem = this[ i ];
-
-				if ( elem.style ) {
-					display = elem.style.display;
-
-					// Reset the inline display of this element to learn if it is
-					// being hidden by cascaded rules or not
-					if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
-						display = elem.style.display = "";
-					}
-
-					// Set elements which have been overridden with display: none
-					// in a stylesheet to whatever the default browser style is
-					// for such an element
-					if ( display === "" && jQuery.css(elem, "display") === "none" ) {
-						jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
-					}
-				}
-			}
-
-			// Set the display of most of the elements in a second loop
-			// to avoid the constant reflow
-			for ( i = 0; i < j; i++ ) {
-				elem = this[ i ];
-
-				if ( elem.style ) {
-					display = elem.style.display;
-
-					if ( display === "" || display === "none" ) {
-						elem.style.display = jQuery._data( elem, "olddisplay" ) || "";
-					}
-				}
-			}
-
-			return this;
-		}
-	},
-
-	hide: function( speed, easing, callback ) {
-		if ( speed || speed === 0 ) {
-			return this.animate( genFx("hide", 3), speed, easing, callback);
-
-		} else {
-			var elem, display,
-				i = 0,
-				j = this.length;
-
-			for ( ; i < j; i++ ) {
-				elem = this[i];
-				if ( elem.style ) {
-					display = jQuery.css( elem, "display" );
-
-					if ( display !== "none" && !jQuery._data( elem, "olddisplay" ) ) {
-						jQuery._data( elem, "olddisplay", display );
-					}
-				}
-			}
-
-			// Set the display of the elements in a second loop
-			// to avoid the constant reflow
-			for ( i = 0; i < j; i++ ) {
-				if ( this[i].style ) {
-					this[i].style.display = "none";
-				}
-			}
-
-			return this;
-		}
-	},
-
-	// Save the old toggle function
-	_toggle: jQuery.fn.toggle,
-
-	toggle: function( fn, fn2, callback ) {
-		var bool = typeof fn === "boolean";
-
-		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
-			this._toggle.apply( this, arguments );
-
-		} else if ( fn == null || bool ) {
-			this.each(function() {
-				var state = bool ? fn : jQuery(this).is(":hidden");
-				jQuery(this)[ state ? "show" : "hide" ]();
-			});
-
-		} else {
-			this.animate(genFx("toggle", 3), fn, fn2, callback);
-		}
-
-		return this;
-	},
-
-	fadeTo: function( speed, to, easing, callback ) {
-		return this.filter(":hidden").css("opacity", 0).show().end()
-					.animate({opacity: to}, speed, easing, callback);
-	},
-
-	animate: function( prop, speed, easing, callback ) {
-		var optall = jQuery.speed( speed, easing, callback );
-
-		if ( jQuery.isEmptyObject( prop ) ) {
-			return this.each( optall.complete, [ false ] );
-		}
-
-		// Do not change referenced properties as per-property easing will be lost
-		prop = jQuery.extend( {}, prop );
-
-		function doAnimation() {
-			// XXX 'this' does not always have a nodeName when running the
-			// test suite
-
-			if ( optall.queue === false ) {
-				jQuery._mark( this );
-			}
-
-			var opt = jQuery.extend( {}, optall ),
-				isElement = this.nodeType === 1,
-				hidden = isElement && jQuery(this).is(":hidden"),
-				name, val, p, e,
-				parts, start, end, unit,
-				method;
-
-			// will store per property easing and be used to determine when an animation is complete
-			opt.animatedProperties = {};
-
-			for ( p in prop ) {
-
-				// property name normalization
-				name = jQuery.camelCase( p );
-				if ( p !== name ) {
-					prop[ name ] = prop[ p ];
-					delete prop[ p ];
-				}
-
-				val = prop[ name ];
-
-				// easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
-				if ( jQuery.isArray( val ) ) {
-					opt.animatedProperties[ name ] = val[ 1 ];
-					val = prop[ name ] = val[ 0 ];
-				} else {
-					opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
-				}
-
-				if ( val === "hide" && hidden || val === "show" && !hidden ) {
-					return opt.complete.call( this );
-				}
-
-				if ( isElement && ( name === "height" || name === "width" ) ) {
-					// Make sure that nothing sneaks out
-					// Record all 3 overflow attributes because IE does not
-					// change the overflow attribute when overflowX and
-					// overflowY are set to the same value
-					opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
-
-					// Set display property to inline-block for height/width
-					// animations on inline elements that are having width/height animated
-					if ( jQuery.css( this, "display" ) === "inline" &&
-							jQuery.css( this, "float" ) === "none" ) {
-
-						// inline-level elements accept inline-block;
-						// block-level elements need to be inline with layout
-						if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === "inline" ) {
-							this.style.display = "inline-block";
-
-						} else {
-							this.style.zoom = 1;
-						}
-					}
-				}
-			}
-
-			if ( opt.overflow != null ) {
-				this.style.overflow = "hidden";
-			}
-
-			for ( p in prop ) {
-				e = new jQuery.fx( this, opt, p );
-				val = prop[ p ];
-
-				if ( rfxtypes.test( val ) ) {
-
-					// Tracks whether to show or hide based on private
-					// data attached to the element
-					method = jQuery._data( this, "toggle" + p ) || ( val === "toggle" ? hidden ? "show" : "hide" : 0 );
-					if ( method ) {
-						jQuery._data( this, "toggle" + p, method === "show" ? "hide" : "show" );
-						e[ method ]();
-					} else {
-						e[ val ]();
-					}
-
-				} else {
-					parts = rfxnum.exec( val );
-					start = e.cur();
-
-					if ( parts ) {
-						end = parseFloat( parts[2] );
-						unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
-
-						// We need to compute starting value
-						if ( unit !== "px" ) {
-							jQuery.style( this, p, (end || 1) + unit);
-							start = ( (end || 1) / e.cur() ) * start;
-							jQuery.style( this, p, start + unit);
-						}
-
-						// If a +=/-= token was provided, we're doing a relative animation
-						if ( parts[1] ) {
-							end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
-						}
-
-						e.custom( start, end, unit );
-
-					} else {
-						e.custom( start, val, "" );
-					}
-				}
-			}
-
-			// For JS strict compliance
-			return true;
-		}
-
-		return optall.queue === false ?
-			this.each( doAnimation ) :
-			this.queue( optall.queue, doAnimation );
-	},
-
-	stop: function( type, clearQueue, gotoEnd ) {
-		if ( typeof type !== "string" ) {
-			gotoEnd = clearQueue;
-			clearQueue = type;
-			type = undefined;
-		}
-		if ( clearQueue && type !== false ) {
-			this.queue( type || "fx", [] );
-		}
-
-		return this.each(function() {
-			var index,
-				hadTimers = false,
-				timers = jQuery.timers,
-				data = jQuery._data( this );
-
-			// clear marker counters if we know they won't be
-			if ( !gotoEnd ) {
-				jQuery._unmark( true, this );
-			}
-
-			function stopQueue( elem, data, index ) {
-				var hooks = data[ index ];
-				jQuery.removeData( elem, index, true );
-				hooks.stop( gotoEnd );
-			}
-
-			if ( type == null ) {
-				for ( index in data ) {
-					if ( data[ index ] && data[ index ].stop && index.indexOf(".run") === index.length - 4 ) {
-						stopQueue( this, data, index );
-					}
-				}
-			} else if ( data[ index = type + ".run" ] && data[ index ].stop ){
-				stopQueue( this, data, index );
-			}
-
-			for ( index = timers.length; index--; ) {
-				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
-					if ( gotoEnd ) {
-
-						// force the next step to be the last
-						timers[ index ]( true );
-					} else {
-						timers[ index ].saveState();
-					}
-					hadTimers = true;
-					timers.splice( index, 1 );
-				}
-			}
-
-			// start the next in the queue if the last step wasn't forced
-			// timers currently will call their complete callbacks, which will dequeue
-			// but only if they were gotoEnd
-			if ( !( gotoEnd && hadTimers ) ) {
-				jQuery.dequeue( this, type );
-			}
-		});
-	}
-
-});
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
-	setTimeout( clearFxNow, 0 );
-	return ( fxNow = jQuery.now() );
-}
-
-function clearFxNow() {
-	fxNow = undefined;
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, num ) {
-	var obj = {};
-
-	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() {
-		obj[ this ] = type;
-	});
-
-	return obj;
-}
-
-// Generate shortcuts for custom animations
-jQuery.each({
-	slideDown: genFx( "show", 1 ),
-	slideUp: genFx( "hide", 1 ),
-	slideToggle: genFx( "toggle", 1 ),
-	fadeIn: { opacity: "show" },
-	fadeOut: { opacity: "hide" },
-	fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
-	jQuery.fn[ name ] = function( speed, easing, callback ) {
-		return this.animate( props, speed, easing, callback );
-	};
-});
-
-jQuery.extend({
-	speed: function( speed, easing, fn ) {
-		var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
-			complete: fn || !fn && easing ||
-				jQuery.isFunction( speed ) && speed,
-			duration: speed,
-			easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
-		};
-
-		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
-			opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
-
-		// normalize opt.queue - true/undefined/null -> "fx"
-		if ( opt.queue == null || opt.queue === true ) {
-			opt.queue = "fx";
-		}
-
-		// Queueing
-		opt.old = opt.complete;
-
-		opt.complete = function( noUnmark ) {
-			if ( jQuery.isFunction( opt.old ) ) {
-				opt.old.call( this );
-			}
-
-			if ( opt.queue ) {
-				jQuery.dequeue( this, opt.queue );
-			} else if ( noUnmark !== false ) {
-				jQuery._unmark( this );
-			}
-		};
-
-		return opt;
-	},
-
-	easing: {
-		linear: function( p, n, firstNum, diff ) {
-			return firstNum + diff * p;
-		},
-		swing: function( p, n, firstNum, diff ) {
-			return ( ( -Math.cos( p*Math.PI ) / 2 ) + 0.5 ) * diff + firstNum;
-		}
-	},
-
-	timers: [],
-
-	fx: function( elem, options, prop ) {
-		this.options = options;
-		this.elem = elem;
-		this.prop = prop;
-
-		options.orig = options.orig || {};
-	}
-
-});
-
-jQuery.fx.prototype = {
-	// Simple function for setting a style value
-	update: function() {
-		if ( this.options.step ) {
-			this.options.step.call( this.elem, this.now, this );
-		}
-
-		( jQuery.fx.step[ this.prop ] || jQuery.fx.step._default )( this );
-	},
-
-	// Get the current size
-	cur: function() {
-		if ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) {
-			return this.elem[ this.prop ];
-		}
-
-		var parsed,
-			r = jQuery.css( this.elem, this.prop );
-		// Empty strings, null, undefined and "auto" are converted to 0,
-		// complex values such as "rotate(1rad)" are returned as is,
-		// simple values such as "10px" are parsed to Float.
-		return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
-	},
-
-	// Start an animation from one number to another
-	custom: function( from, to, unit ) {
-		var self = this,
-			fx = jQuery.fx;
-
-		this.startTime = fxNow || createFxNow();
-		this.end = to;
-		this.now = this.start = from;
-		this.pos = this.state = 0;
-		this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
-
-		function t( gotoEnd ) {
-			return self.step( gotoEnd );
-		}
-
-		t.queue = this.options.queue;
-		t.elem = this.elem;
-		t.saveState = function() {
-			if ( self.options.hide && jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) {
-				jQuery._data( self.elem, "fxshow" + self.prop, self.start );
-			}
-		};
-
-		if ( t() && jQuery.timers.push(t) && !timerId ) {
-			timerId = setInterval( fx.tick, fx.interval );
-		}
-	},
-
-	// Simple 'show' function
-	show: function() {
-		var dataShow = jQuery._data( this.elem, "fxshow" + this.prop );
-
-		// Remember where we started, so that we can go back to it later
-		this.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop );
-		this.options.show = true;
-
-		// Begin the animation
-		// Make sure that we start at a small width/height to avoid any flash of content
-		if ( dataShow !== undefined ) {
-			// This show is picking up where a previous hide or show left off
-			this.custom( this.cur(), dataShow );
-		} else {
-			this.custom( this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur() );
-		}
-
-		// Start by showing the element
-		jQuery( this.elem ).show();
-	},
-
-	// Simple 'hide' function
-	hide: function() {
-		// Remember where we started, so that we can go back to it later
-		this.options.orig[ this.prop ] = jQuery._data( this.elem, "fxshow" + this.prop ) || jQuery.style( this.elem, this.prop );
-		this.options.hide = true;
-
-		// Begin the animation
-		this.custom( this.cur(), 0 );
-	},
-
-	// Each step of an animation
-	step: function( gotoEnd ) {
-		var p, n, complete,
-			t = fxNow || createFxNow(),
-			done = true,
-			elem = this.elem,
-			options = this.options;
-
-		if ( gotoEnd || t >= options.duration + this.startTime ) {
-			this.now = this.end;
-			this.pos = this.state = 1;
-			this.update();
-
-			options.animatedProperties[ this.prop ] = true;
-
-			for ( p in options.animatedProperties ) {
-				if ( options.animatedProperties[ p ] !== true ) {
-					done = false;
-				}
-			}
-
-			if ( done ) {
-				// Reset the overflow
-				if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
-
-					jQuery.each( [ "", "X", "Y" ], function( index, value ) {
-						elem.style[ "overflow" + value ] = options.overflow[ index ];
-					});
-				}
-
-				// Hide the element if the "hide" operation was done
-				if ( options.hide ) {
-					jQuery( elem ).hide();
-				}
-
-				// Reset the properties, if the item has been hidden or shown
-				if ( options.hide || options.show ) {
-					for ( p in options.animatedProperties ) {
-						jQuery.style( elem, p, options.orig[ p ] );
-						jQuery.removeData( elem, "fxshow" + p, true );
-						// Toggle data is no longer needed
-						jQuery.removeData( elem, "toggle" + p, true );
-					}
-				}
-
-				// Execute the complete function
-				// in the event that the complete function throws an exception
-				// we must ensure it won't be called twice. #5684
-
-				complete = options.complete;
-				if ( complete ) {
-
-					options.complete = false;
-					complete.call( elem );
-				}
-			}
-
-			return false;
-
-		} else {
-			// classical easing cannot be used with an Infinity duration
-			if ( options.duration == Infinity ) {
-				this.now = t;
-			} else {
-				n = t - this.startTime;
-				this.state = n / options.duration;
-
-				// Perform the easing function, defaults to swing
-				this.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration );
-				this.now = this.start + ( (this.end - this.start) * this.pos );
-			}
-			// Perform the next step of the animation
-			this.update();
-		}
-
-		return true;
-	}
-};
-
-jQuery.extend( jQuery.fx, {
-	tick: function() {
-		var timer,
-			timers = jQuery.timers,
-			i = 0;
-
-		for ( ; i < timers.length; i++ ) {
-			timer = timers[ i ];
-			// Checks the timer has not already been removed
-			if ( !timer() && timers[ i ] === timer ) {
-				timers.splice( i--, 1 );
-			}
-		}
-
-		if ( !timers.length ) {
-			jQuery.fx.stop();
-		}
-	},
-
-	interval: 13,
-
-	stop: function() {
-		clearInterval( timerId );
-		timerId = null;
-	},
-
-	speeds: {
-		slow: 600,
-		fast: 200,
-		// Default speed
-		_default: 400
-	},
-
-	step: {
-		opacity: function( fx ) {
-			jQuery.style( fx.elem, "opacity", fx.now );
-		},
-
-		_default: function( fx ) {
-			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
-				fx.elem.style[ fx.prop ] = fx.now + fx.unit;
-			} else {
-				fx.elem[ fx.prop ] = fx.now;
-			}
-		}
-	}
-});
-
-// Adds width/height step functions
-// Do not set anything below 0
-jQuery.each([ "width", "height" ], function( i, prop ) {
-	jQuery.fx.step[ prop ] = function( fx ) {
-		jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit );
-	};
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
-	jQuery.expr.filters.animated = function( elem ) {
-		return jQuery.grep(jQuery.timers, function( fn ) {
-			return elem === fn.elem;
-		}).length;
-	};
-}
-
-// Try to restore the default display value of an element
-function defaultDisplay( nodeName ) {
-
-	if ( !elemdisplay[ nodeName ] ) {
-
-		var body = document.body,
-			elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
-			display = elem.css( "display" );
-		elem.remove();
-
-		// If the simple way fails,
-		// get element's real default display by attaching it to a temp iframe
-		if ( display === "none" || display === "" ) {
-			// No iframe to use yet, so create it
-			if ( !iframe ) {
-				iframe = document.createElement( "iframe" );
-				iframe.frameBorder = iframe.width = iframe.height = 0;
-			}
-
-			body.appendChild( iframe );
-
-			// Create a cacheable copy of the iframe document on first call.
-			// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
-			// document to it; WebKit & Firefox won't allow reusing the iframe document.
-			if ( !iframeDoc || !iframe.createElement ) {
-				iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
-				iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "<!doctype html>" : "" ) + "<html><body>" );
-				iframeDoc.close();
-			}
-
-			elem = iframeDoc.createElement( nodeName );
-
-			iframeDoc.body.appendChild( elem );
-
-			display = jQuery.css( elem, "display" );
-			body.removeChild( iframe );
-		}
-
-		// Store the correct default display
-		elemdisplay[ nodeName ] = display;
-	}
-
-	return elemdisplay[ nodeName ];
-}
-
-
-
-
-var rtable = /^t(?:able|d|h)$/i,
-	rroot = /^(?:body|html)$/i;
-
-if ( "getBoundingClientRect" in document.documentElement ) {
-	jQuery.fn.offset = function( options ) {
-		var elem = this[0], box;
-
-		if ( options ) {
-			return this.each(function( i ) {
-				jQuery.offset.setOffset( this, options, i );
-			});
-		}
-
-		if ( !elem || !elem.ownerDocument ) {
-			return null;
-		}
-
-		if ( elem === elem.ownerDocument.body ) {
-			return jQuery.offset.bodyOffset( elem );
-		}
-
-		try {
-			box = elem.getBoundingClientRect();
-		} catch(e) {}
-
-		var doc = elem.ownerDocument,
-			docElem = doc.documentElement;
-
-		// Make sure we're not dealing with a disconnected DOM node
-		if ( !box || !jQuery.contains( docElem, elem ) ) {
-			return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
-		}
-
-		var body = doc.body,
-			win = getWindow(doc),
-			clientTop  = docElem.clientTop  || body.clientTop  || 0,
-			clientLeft = docElem.clientLeft || body.clientLeft || 0,
-			scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
-			scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
-			top  = box.top  + scrollTop  - clientTop,
-			left = box.left + scrollLeft - clientLeft;
-
-		return { top: top, left: left };
-	};
-
-} else {
-	jQuery.fn.offset = function( options ) {
-		var elem = this[0];
-
-		if ( options ) {
-			return this.each(function( i ) {
-				jQuery.offset.setOffset( this, options, i );
-			});
-		}
-
-		if ( !elem || !elem.ownerDocument ) {
-			return null;
-		}
-
-		if ( elem === elem.ownerDocument.body ) {
-			return jQuery.offset.bodyOffset( elem );
-		}
-
-		var computedStyle,
-			offsetParent = elem.offsetParent,
-			prevOffsetParent = elem,
-			doc = elem.ownerDocument,
-			docElem = doc.documentElement,
-			body = doc.body,
-			defaultView = doc.defaultView,
-			prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
-			top = elem.offsetTop,
-			left = elem.offsetLeft;
-
-		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
-			if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
-				break;
-			}
-
-			computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
-			top  -= elem.scrollTop;
-			left -= elem.scrollLeft;
-
-			if ( elem === offsetParent ) {
-				top  += elem.offsetTop;
-				left += elem.offsetLeft;
-
-				if ( jQuery.support.doesNotAddBorder && !(jQuery.support.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
-					top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
-					left += parseFloat( computedStyle.borderLeftWidth ) || 0;
-				}
-
-				prevOffsetParent = offsetParent;
-				offsetParent = elem.offsetParent;
-			}
-
-			if ( jQuery.support.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
-				top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
-				left += parseFloat( computedStyle.borderLeftWidth ) || 0;
-			}
-
-			prevComputedStyle = computedStyle;
-		}
-
-		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
-			top  += body.offsetTop;
-			left += body.offsetLeft;
-		}
-
-		if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
-			top  += Math.max( docElem.scrollTop, body.scrollTop );
-			left += Math.max( docElem.scrollLeft, body.scrollLeft );
-		}
-
-		return { top: top, left: left };
-	};
-}
-
-jQuery.offset = {
-
-	bodyOffset: function( body ) {
-		var top = body.offsetTop,
-			left = body.offsetLeft;
-
-		if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
-			top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
-			left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
-		}
-
-		return { top: top, left: left };
-	},
-
-	setOffset: function( elem, options, i ) {
-		var position = jQuery.css( elem, "position" );
-
-		// set position first, in-case top/left are set even on static elem
-		if ( position === "static" ) {
-			elem.style.position = "relative";
-		}
-
-		var curElem = jQuery( elem ),
-			curOffset = curElem.offset(),
-			curCSSTop = jQuery.css( elem, "top" ),
-			curCSSLeft = jQuery.css( elem, "left" ),
-			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
-			props = {}, curPosition = {}, curTop, curLeft;
-
-		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
-		if ( calculatePosition ) {
-			curPosition = curElem.position();
-			curTop = curPosition.top;
-			curLeft = curPosition.left;
-		} else {
-			curTop = parseFloat( curCSSTop ) || 0;
-			curLeft = parseFloat( curCSSLeft ) || 0;
-		}
-
-		if ( jQuery.isFunction( options ) ) {
-			options = options.call( elem, i, curOffset );
-		}
-
-		if ( options.top != null ) {
-			props.top = ( options.top - curOffset.top ) + curTop;
-		}
-		if ( options.left != null ) {
-			props.left = ( options.left - curOffset.left ) + curLeft;
-		}
-
-		if ( "using" in options ) {
-			options.using.call( elem, props );
-		} else {
-			curElem.css( props );
-		}
-	}
-};
-
-
-jQuery.fn.extend({
-
-	position: function() {
-		if ( !this[0] ) {
-			return null;
-		}
-
-		var elem = this[0],
-
-		// Get *real* offsetParent
-		offsetParent = this.offsetParent(),
-
-		// Get correct offsets
-		offset       = this.offset(),
-		parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
-
-		// Subtract element margins
-		// note: when an element has margin: auto the offsetLeft and marginLeft
-		// are the same in Safari causing offset.left to incorrectly be 0
-		offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
-		offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
-
-		// Add offsetParent borders
-		parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
-		parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
-
-		// Subtract the two offsets
-		return {
-			top:  offset.top  - parentOffset.top,
-			left: offset.left - parentOffset.left
-		};
-	},
-
-	offsetParent: function() {
-		return this.map(function() {
-			var offsetParent = this.offsetParent || document.body;
-			while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
-				offsetParent = offsetParent.offsetParent;
-			}
-			return offsetParent;
-		});
-	}
-});
-
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( ["Left", "Top"], function( i, name ) {
-	var method = "scroll" + name;
-
-	jQuery.fn[ method ] = function( val ) {
-		var elem, win;
-
-		if ( val === undefined ) {
-			elem = this[ 0 ];
-
-			if ( !elem ) {
-				return null;
-			}
-
-			win = getWindow( elem );
-
-			// Return the scroll offset
-			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
-				jQuery.support.boxModel && win.document.documentElement[ method ] ||
-					win.document.body[ method ] :
-				elem[ method ];
-		}
-
-		// Set the scroll offset
-		return this.each(function() {
-			win = getWindow( this );
-
-			if ( win ) {
-				win.scrollTo(
-					!i ? val : jQuery( win ).scrollLeft(),
-					 i ? val : jQuery( win ).scrollTop()
-				);
-
-			} else {
-				this[ method ] = val;
-			}
-		});
-	};
-});
-
-function getWindow( elem ) {
-	return jQuery.isWindow( elem ) ?
-		elem :
-		elem.nodeType === 9 ?
-			elem.defaultView || elem.parentWindow :
-			false;
-}
-
-
-
-
-// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
-jQuery.each([ "Height", "Width" ], function( i, name ) {
-
-	var type = name.toLowerCase();
-
-	// innerHeight and innerWidth
-	jQuery.fn[ "inner" + name ] = function() {
-		var elem = this[0];
-		return elem ?
-			elem.style ?
-			parseFloat( jQuery.css( elem, type, "padding" ) ) :
-			this[ type ]() :
-			null;
-	};
-
-	// outerHeight and outerWidth
-	jQuery.fn[ "outer" + name ] = function( margin ) {
-		var elem = this[0];
-		return elem ?
-			elem.style ?
-			parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
-			this[ type ]() :
-			null;
-	};
-
-	jQuery.fn[ type ] = function( size ) {
-		// Get window width or height
-		var elem = this[0];
-		if ( !elem ) {
-			return size == null ? null : this;
-		}
-
-		if ( jQuery.isFunction( size ) ) {
-			return this.each(function( i ) {
-				var self = jQuery( this );
-				self[ type ]( size.call( this, i, self[ type ]() ) );
-			});
-		}
-
-		if ( jQuery.isWindow( elem ) ) {
-			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
-			// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
-			var docElemProp = elem.document.documentElement[ "client" + name ],
-				body = elem.document.body;
-			return elem.document.compatMode === "CSS1Compat" && docElemProp ||
-				body && body[ "client" + name ] || docElemProp;
-
-		// Get document width or height
-		} else if ( elem.nodeType === 9 ) {
-			// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
-			return Math.max(
-				elem.documentElement["client" + name],
-				elem.body["scroll" + name], elem.documentElement["scroll" + name],
-				elem.body["offset" + name], elem.documentElement["offset" + name]
-			);
-
-		// Get or set width or height on the element
-		} else if ( size === undefined ) {
-			var orig = jQuery.css( elem, type ),
-				ret = parseFloat( orig );
-
-			return jQuery.isNumeric( ret ) ? ret : orig;
-
-		// Set the width or height on the element (default to pixels if value is unitless)
-		} else {
-			return this.css( type, typeof size === "string" ? size : size + "px" );
-		}
-	};
-
-});
-
-
-
-
-// Expose jQuery to the global object
-window.jQuery = window.$ = jQuery;
-
-// Expose jQuery as an AMD module, but only for AMD loaders that
-// understand the issues with loading multiple versions of jQuery
-// in a page that all might call define(). The loader will indicate
-// they have special allowances for multiple jQuery versions by
-// specifying define.amd.jQuery = true. Register as a named module,
-// since jQuery can be concatenated with other files that may use define,
-// but not use a proper concatenation script that understands anonymous
-// AMD modules. A named AMD is safest and most robust way to register.
-// Lowercase jquery is used because AMD module names are derived from
-// file names, and jQuery is normally delivered in a lowercase file name.
-// Do this after creating the global so that if an AMD module wants to call
-// noConflict to hide this version of jQuery, it will work.
-if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
-	define( "jquery", [], function () { return jQuery; } );
-}
-
-
-
-})( window );
\ No newline at end of file
diff --git a/assets/pics/AQL_overview.png b/assets/pics/AQL_overview.png
deleted file mode 100644
index 8abd117..0000000
--- a/assets/pics/AQL_overview.png
+++ /dev/null
Binary files differ
diff --git a/assets/pics/econtainer-eallcontents-select-name-startswith.jpg b/assets/pics/econtainer-eallcontents-select-name-startswith.jpg
deleted file mode 100644
index 7b30637..0000000
--- a/assets/pics/econtainer-eallcontents-select-name-startswith.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/econtainer-einverse-usecase.jpg b/assets/pics/econtainer-einverse-usecase.jpg
deleted file mode 100644
index 38735c2..0000000
--- a/assets/pics/econtainer-einverse-usecase.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/family_ecore.png b/assets/pics/family_ecore.png
deleted file mode 100644
index a642eab..0000000
--- a/assets/pics/family_ecore.png
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtainer-class.jpg b/assets/pics/self-econtainer-class.jpg
deleted file mode 100644
index db9afc5..0000000
--- a/assets/pics/self-econtainer-class.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtainer-econtainer.jpg b/assets/pics/self-econtainer-econtainer.jpg
deleted file mode 100644
index 16d0c49..0000000
--- a/assets/pics/self-econtainer-econtainer.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtainer-einverse-packagedelement.jpg b/assets/pics/self-econtainer-einverse-packagedelement.jpg
deleted file mode 100644
index 81de31c..0000000
--- a/assets/pics/self-econtainer-einverse-packagedelement.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtainer-einverse.jpg b/assets/pics/self-econtainer-einverse.jpg
deleted file mode 100644
index 991bd8f..0000000
--- a/assets/pics/self-econtainer-einverse.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtainer-model-eallcontents-components.jpg b/assets/pics/self-econtainer-model-eallcontents-components.jpg
deleted file mode 100644
index e108488..0000000
--- a/assets/pics/self-econtainer-model-eallcontents-components.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtainer-model-eallcontents-usecases.jpg b/assets/pics/self-econtainer-model-eallcontents-usecases.jpg
deleted file mode 100644
index c243a17..0000000
--- a/assets/pics/self-econtainer-model-eallcontents-usecases.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtainer-model-eallcontents.jpg b/assets/pics/self-econtainer-model-eallcontents.jpg
deleted file mode 100644
index 92961aa..0000000
--- a/assets/pics/self-econtainer-model-eallcontents.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtainer-model.jpg b/assets/pics/self-econtainer-model.jpg
deleted file mode 100644
index 5e45d6e..0000000
--- a/assets/pics/self-econtainer-model.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtainer-siblings.jpg b/assets/pics/self-econtainer-siblings.jpg
deleted file mode 100644
index e78208e..0000000
--- a/assets/pics/self-econtainer-siblings.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtainer.jpg b/assets/pics/self-econtainer.jpg
deleted file mode 100644
index d7bba0d..0000000
--- a/assets/pics/self-econtainer.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtainerorself.jpg b/assets/pics/self-econtainerorself.jpg
deleted file mode 100644
index 5ea20a4..0000000
--- a/assets/pics/self-econtainerorself.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtents-select-name-id.jpg b/assets/pics/self-econtents-select-name-id.jpg
deleted file mode 100644
index 44c7b83..0000000
--- a/assets/pics/self-econtents-select-name-id.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtents-select-name-notid.jpg b/assets/pics/self-econtents-select-name-notid.jpg
deleted file mode 100644
index 8e98738..0000000
--- a/assets/pics/self-econtents-select-name-notid.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtents-select-visibility.jpg b/assets/pics/self-econtents-select-visibility.jpg
deleted file mode 100644
index 4874695..0000000
--- a/assets/pics/self-econtents-select-visibility.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtents.jpg b/assets/pics/self-econtents.jpg
deleted file mode 100644
index f18ecaf..0000000
--- a/assets/pics/self-econtents.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self.econtainer-model-eallcontents-multipletypes.jpg b/assets/pics/self.econtainer-model-eallcontents-multipletypes.jpg
deleted file mode 100644
index 5f52fbd..0000000
--- a/assets/pics/self.econtainer-model-eallcontents-multipletypes.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self.jpg b/assets/pics/self.jpg
deleted file mode 100644
index e9186ab..0000000
--- a/assets/pics/self.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/simple-uml-ecore.jpg b/assets/pics/simple-uml-ecore.jpg
deleted file mode 100644
index abfe035..0000000
--- a/assets/pics/simple-uml-ecore.jpg
+++ /dev/null
Binary files differ
diff --git a/awards/_index.html b/awards/_index.html
deleted file mode 100644
index 2e8f552..0000000
--- a/awards/_index.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<div id="midcolumn">
-	<h1>Awards</h1>
-	
-	<div class="homeitem3col">
-		<h3>Open Innovation Award 2010</h3>
-		<a href="http://www.obeo.fr/pages/news/en#041010"><img src="../images/openInnovationAward.png" width="155" height="101" /></a>
-		<br />
-		<p style="text-align:justify">Obeo wins the Open Innovation Award with the presentation of the Acceleo project at the Open
-	 		World Forum 2010. This award is given to recognize the most innovative and game-changer open source solution in its
-	  		marketplace.
-	  	</p>
-	  	<p>
-	  		Acceleo, selected from 13 top nominees, received one of five prestigious trophies at the closing ceremony 
-	  		of the Open World Forum, awarded by a jury consisting of leading international experts in the world of open source.
-	   		More information about the Demo Cup: <a href="http://www.openworldforum.org/connect/awards">http://www.openworldforum.org/connect/awards</a>
-	   	</p>
-	   	<p>
-	   		After the Eclipse Community Award in 2009, this prize recognizes the constant efforts of the Acceleo team & community to provide a quality tool. 
-		</p>
-	</div>
-	<div class="homeitem3col">
-		<h3>Best Open Source Eclipse-Based Developer Tool 2009</h3>
-		<a href="http://www.eclipse.org/org/press-release/20090323_AwardsWinners.php"><img src="http://www.eclipse.org/images/awards/winner09.jpg" /></a>
-		<br />	
-		<p>
-			This award recognizes Top Technologies in the Eclipse Community. <a href="http://www.eclipse.org/org/press-release/20090323_AwardsWinners.php">More information about this award.</a>
-		</p>
-	</div>
-</div>
\ No newline at end of file
diff --git a/awards/index.php b/awards/index.php
deleted file mode 100644
index bda377f..0000000
--- a/awards/index.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
-	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
-	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
-
-	$App 	= new App();
-	$Nav	= new Nav();
-	$Menu 	= new Menu();
-
-	include($App->getProjectCommon());
-	
-	$pageTitle 		= "Awards";
-
-	$html = file_get_contents('_index.html');
-
-	# Generate the web page
-	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
-?>
diff --git a/common_assets/css/animate.css b/common_assets/css/animate.css
new file mode 100644
index 0000000..60f0c96
--- /dev/null
+++ b/common_assets/css/animate.css
@@ -0,0 +1,2744 @@
+@charset "UTF-8";
+
+
+/*!
+Animate.css - http://daneden.me/animate
+Licensed under the MIT license
+
+Copyright (c) 2013 Daniel Eden
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+.animated {
+  -webkit-animation-duration: 1s;
+  animation-duration: 1s;
+  -webkit-animation-fill-mode: both;
+  animation-fill-mode: both;
+}
+
+.animated.hinge {
+  -webkit-animation-duration: 2s;
+  animation-duration: 2s;
+}
+
+@-webkit-keyframes bounce {
+  0%, 20%, 50%, 80%, 100% {
+    -webkit-transform: translateY(0);
+    transform: translateY(0);
+  }
+
+  40% {
+    -webkit-transform: translateY(-30px);
+    transform: translateY(-30px);
+  }
+
+  60% {
+    -webkit-transform: translateY(-15px);
+    transform: translateY(-15px);
+  }
+}
+
+@keyframes bounce {
+  0%, 20%, 50%, 80%, 100% {
+    -webkit-transform: translateY(0);
+    -ms-transform: translateY(0);
+    transform: translateY(0);
+  }
+
+  40% {
+    -webkit-transform: translateY(-30px);
+    -ms-transform: translateY(-30px);
+    transform: translateY(-30px);
+  }
+
+  60% {
+    -webkit-transform: translateY(-15px);
+    -ms-transform: translateY(-15px);
+    transform: translateY(-15px);
+  }
+}
+
+.bounce {
+  -webkit-animation-name: bounce;
+  animation-name: bounce;
+}
+
+@-webkit-keyframes flash {
+  0%, 50%, 100% {
+    opacity: 1;
+  }
+
+  25%, 75% {
+    opacity: 0;
+  }
+}
+
+@keyframes flash {
+  0%, 50%, 100% {
+    opacity: 1;
+  }
+
+  25%, 75% {
+    opacity: 0;
+  }
+}
+
+.flash {
+  -webkit-animation-name: flash;
+  animation-name: flash;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes pulse {
+  0% {
+    -webkit-transform: scale(1);
+    transform: scale(1);
+  }
+
+  50% {
+    -webkit-transform: scale(1.1);
+    transform: scale(1.1);
+  }
+
+  100% {
+    -webkit-transform: scale(1);
+    transform: scale(1);
+  }
+}
+
+@keyframes pulse {
+  0% {
+    -webkit-transform: scale(1);
+    -ms-transform: scale(1);
+    transform: scale(1);
+  }
+
+  50% {
+    -webkit-transform: scale(1.1);
+    -ms-transform: scale(1.1);
+    transform: scale(1.1);
+  }
+
+  100% {
+    -webkit-transform: scale(1);
+    -ms-transform: scale(1);
+    transform: scale(1);
+  }
+}
+
+.pulse {
+  -webkit-animation-name: pulse;
+  animation-name: pulse;
+}
+
+@-webkit-keyframes shake {
+  0%, 100% {
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+
+  10%, 30%, 50%, 70%, 90% {
+    -webkit-transform: translateX(-10px);
+    transform: translateX(-10px);
+  }
+
+  20%, 40%, 60%, 80% {
+    -webkit-transform: translateX(10px);
+    transform: translateX(10px);
+  }
+}
+
+@keyframes shake {
+  0%, 100% {
+    -webkit-transform: translateX(0);
+    -ms-transform: translateX(0);
+    transform: translateX(0);
+  }
+
+  10%, 30%, 50%, 70%, 90% {
+    -webkit-transform: translateX(-10px);
+    -ms-transform: translateX(-10px);
+    transform: translateX(-10px);
+  }
+
+  20%, 40%, 60%, 80% {
+    -webkit-transform: translateX(10px);
+    -ms-transform: translateX(10px);
+    transform: translateX(10px);
+  }
+}
+
+.shake {
+  -webkit-animation-name: shake;
+  animation-name: shake;
+}
+
+@-webkit-keyframes swing {
+  20% {
+    -webkit-transform: rotate(15deg);
+    transform: rotate(15deg);
+  }
+
+  40% {
+    -webkit-transform: rotate(-10deg);
+    transform: rotate(-10deg);
+  }
+
+  60% {
+    -webkit-transform: rotate(5deg);
+    transform: rotate(5deg);
+  }
+
+  80% {
+    -webkit-transform: rotate(-5deg);
+    transform: rotate(-5deg);
+  }
+
+  100% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+}
+
+@keyframes swing {
+  20% {
+    -webkit-transform: rotate(15deg);
+    -ms-transform: rotate(15deg);
+    transform: rotate(15deg);
+  }
+
+  40% {
+    -webkit-transform: rotate(-10deg);
+    -ms-transform: rotate(-10deg);
+    transform: rotate(-10deg);
+  }
+
+  60% {
+    -webkit-transform: rotate(5deg);
+    -ms-transform: rotate(5deg);
+    transform: rotate(5deg);
+  }
+
+  80% {
+    -webkit-transform: rotate(-5deg);
+    -ms-transform: rotate(-5deg);
+    transform: rotate(-5deg);
+  }
+
+  100% {
+    -webkit-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+}
+
+.swing {
+  -webkit-transform-origin: top center;
+  -ms-transform-origin: top center;
+  transform-origin: top center;
+  -webkit-animation-name: swing;
+  animation-name: swing;
+}
+
+@-webkit-keyframes tada {
+  0% {
+    -webkit-transform: scale(1);
+    transform: scale(1);
+  }
+
+  10%, 20% {
+    -webkit-transform: scale(0.9) rotate(-3deg);
+    transform: scale(0.9) rotate(-3deg);
+  }
+
+  30%, 50%, 70%, 90% {
+    -webkit-transform: scale(1.1) rotate(3deg);
+    transform: scale(1.1) rotate(3deg);
+  }
+
+  40%, 60%, 80% {
+    -webkit-transform: scale(1.1) rotate(-3deg);
+    transform: scale(1.1) rotate(-3deg);
+  }
+
+  100% {
+    -webkit-transform: scale(1) rotate(0);
+    transform: scale(1) rotate(0);
+  }
+}
+
+@keyframes tada {
+  0% {
+    -webkit-transform: scale(1);
+    -ms-transform: scale(1);
+    transform: scale(1);
+  }
+
+  10%, 20% {
+    -webkit-transform: scale(0.9) rotate(-3deg);
+    -ms-transform: scale(0.9) rotate(-3deg);
+    transform: scale(0.9) rotate(-3deg);
+  }
+
+  30%, 50%, 70%, 90% {
+    -webkit-transform: scale(1.1) rotate(3deg);
+    -ms-transform: scale(1.1) rotate(3deg);
+    transform: scale(1.1) rotate(3deg);
+  }
+
+  40%, 60%, 80% {
+    -webkit-transform: scale(1.1) rotate(-3deg);
+    -ms-transform: scale(1.1) rotate(-3deg);
+    transform: scale(1.1) rotate(-3deg);
+  }
+
+  100% {
+    -webkit-transform: scale(1) rotate(0);
+    -ms-transform: scale(1) rotate(0);
+    transform: scale(1) rotate(0);
+  }
+}
+
+.tada {
+  -webkit-animation-name: tada;
+  animation-name: tada;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes wobble {
+  0% {
+    -webkit-transform: translateX(0%);
+    transform: translateX(0%);
+  }
+
+  15% {
+    -webkit-transform: translateX(-25%) rotate(-5deg);
+    transform: translateX(-25%) rotate(-5deg);
+  }
+
+  30% {
+    -webkit-transform: translateX(20%) rotate(3deg);
+    transform: translateX(20%) rotate(3deg);
+  }
+
+  45% {
+    -webkit-transform: translateX(-15%) rotate(-3deg);
+    transform: translateX(-15%) rotate(-3deg);
+  }
+
+  60% {
+    -webkit-transform: translateX(10%) rotate(2deg);
+    transform: translateX(10%) rotate(2deg);
+  }
+
+  75% {
+    -webkit-transform: translateX(-5%) rotate(-1deg);
+    transform: translateX(-5%) rotate(-1deg);
+  }
+
+  100% {
+    -webkit-transform: translateX(0%);
+    transform: translateX(0%);
+  }
+}
+
+@keyframes wobble {
+  0% {
+    -webkit-transform: translateX(0%);
+    -ms-transform: translateX(0%);
+    transform: translateX(0%);
+  }
+
+  15% {
+    -webkit-transform: translateX(-25%) rotate(-5deg);
+    -ms-transform: translateX(-25%) rotate(-5deg);
+    transform: translateX(-25%) rotate(-5deg);
+  }
+
+  30% {
+    -webkit-transform: translateX(20%) rotate(3deg);
+    -ms-transform: translateX(20%) rotate(3deg);
+    transform: translateX(20%) rotate(3deg);
+  }
+
+  45% {
+    -webkit-transform: translateX(-15%) rotate(-3deg);
+    -ms-transform: translateX(-15%) rotate(-3deg);
+    transform: translateX(-15%) rotate(-3deg);
+  }
+
+  60% {
+    -webkit-transform: translateX(10%) rotate(2deg);
+    -ms-transform: translateX(10%) rotate(2deg);
+    transform: translateX(10%) rotate(2deg);
+  }
+
+  75% {
+    -webkit-transform: translateX(-5%) rotate(-1deg);
+    -ms-transform: translateX(-5%) rotate(-1deg);
+    transform: translateX(-5%) rotate(-1deg);
+  }
+
+  100% {
+    -webkit-transform: translateX(0%);
+    -ms-transform: translateX(0%);
+    transform: translateX(0%);
+  }
+}
+
+.wobble {
+  -webkit-animation-name: wobble;
+  animation-name: wobble;
+}
+
+@-webkit-keyframes bounceIn {
+  0% {
+    opacity: 0;
+    -webkit-transform: scale(.3);
+    transform: scale(.3);
+  }
+
+  50% {
+    opacity: 1;
+    -webkit-transform: scale(1.05);
+    transform: scale(1.05);
+  }
+
+  70% {
+    -webkit-transform: scale(.9);
+    transform: scale(.9);
+  }
+
+  100% {
+    -webkit-transform: scale(1);
+    transform: scale(1);
+  }
+}
+
+@keyframes bounceIn {
+  0% {
+    opacity: 0;
+    -webkit-transform: scale(.3);
+    -ms-transform: scale(.3);
+    transform: scale(.3);
+  }
+
+  50% {
+    opacity: 1;
+    -webkit-transform: scale(1.05);
+    -ms-transform: scale(1.05);
+    transform: scale(1.05);
+  }
+
+  70% {
+    -webkit-transform: scale(.9);
+    -ms-transform: scale(.9);
+    transform: scale(.9);
+  }
+
+  100% {
+    -webkit-transform: scale(1);
+    -ms-transform: scale(1);
+    transform: scale(1);
+  }
+}
+
+.bounceIn {
+  -webkit-animation-name: bounceIn;
+  animation-name: bounceIn;
+}
+
+@-webkit-keyframes bounceInDown {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(-2000px);
+    transform: translateY(-2000px);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translateY(30px);
+    transform: translateY(30px);
+  }
+
+  80% {
+    -webkit-transform: translateY(-10px);
+    transform: translateY(-10px);
+  }
+
+  100% {
+    -webkit-transform: translateY(0);
+    transform: translateY(0);
+  }
+}
+
+@keyframes bounceInDown {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(-2000px);
+    -ms-transform: translateY(-2000px);
+    transform: translateY(-2000px);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translateY(30px);
+    -ms-transform: translateY(30px);
+    transform: translateY(30px);
+  }
+
+  80% {
+    -webkit-transform: translateY(-10px);
+    -ms-transform: translateY(-10px);
+    transform: translateY(-10px);
+  }
+
+  100% {
+    -webkit-transform: translateY(0);
+    -ms-transform: translateY(0);
+    transform: translateY(0);
+  }
+}
+
+.bounceInDown {
+  -webkit-animation-name: bounceInDown;
+  animation-name: bounceInDown;
+}
+
+@-webkit-keyframes bounceInLeft {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateX(-2000px);
+    transform: translateX(-2000px);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translateX(30px);
+    transform: translateX(30px);
+  }
+
+  80% {
+    -webkit-transform: translateX(-10px);
+    transform: translateX(-10px);
+  }
+
+  100% {
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+}
+
+@keyframes bounceInLeft {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateX(-2000px);
+    -ms-transform: translateX(-2000px);
+    transform: translateX(-2000px);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translateX(30px);
+    -ms-transform: translateX(30px);
+    transform: translateX(30px);
+  }
+
+  80% {
+    -webkit-transform: translateX(-10px);
+    -ms-transform: translateX(-10px);
+    transform: translateX(-10px);
+  }
+
+  100% {
+    -webkit-transform: translateX(0);
+    -ms-transform: translateX(0);
+    transform: translateX(0);
+  }
+}
+
+.bounceInLeft {
+  -webkit-animation-name: bounceInLeft;
+  animation-name: bounceInLeft;
+}
+
+@-webkit-keyframes bounceInRight {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateX(2000px);
+    transform: translateX(2000px);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translateX(-30px);
+    transform: translateX(-30px);
+  }
+
+  80% {
+    -webkit-transform: translateX(10px);
+    transform: translateX(10px);
+  }
+
+  100% {
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+}
+
+@keyframes bounceInRight {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateX(2000px);
+    -ms-transform: translateX(2000px);
+    transform: translateX(2000px);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translateX(-30px);
+    -ms-transform: translateX(-30px);
+    transform: translateX(-30px);
+  }
+
+  80% {
+    -webkit-transform: translateX(10px);
+    -ms-transform: translateX(10px);
+    transform: translateX(10px);
+  }
+
+  100% {
+    -webkit-transform: translateX(0);
+    -ms-transform: translateX(0);
+    transform: translateX(0);
+  }
+}
+
+.bounceInRight {
+  -webkit-animation-name: bounceInRight;
+  animation-name: bounceInRight;
+}
+
+@-webkit-keyframes bounceInUp {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(2000px);
+    transform: translateY(2000px);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translateY(-30px);
+    transform: translateY(-30px);
+  }
+
+  80% {
+    -webkit-transform: translateY(10px);
+    transform: translateY(10px);
+  }
+
+  100% {
+    -webkit-transform: translateY(0);
+    transform: translateY(0);
+  }
+}
+
+@keyframes bounceInUp {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(2000px);
+    -ms-transform: translateY(2000px);
+    transform: translateY(2000px);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translateY(-30px);
+    -ms-transform: translateY(-30px);
+    transform: translateY(-30px);
+  }
+
+  80% {
+    -webkit-transform: translateY(10px);
+    -ms-transform: translateY(10px);
+    transform: translateY(10px);
+  }
+
+  100% {
+    -webkit-transform: translateY(0);
+    -ms-transform: translateY(0);
+    transform: translateY(0);
+  }
+}
+
+.bounceInUp {
+  -webkit-animation-name: bounceInUp;
+  animation-name: bounceInUp;
+}
+
+@-webkit-keyframes bounceOut {
+  0% {
+    -webkit-transform: scale(1);
+    transform: scale(1);
+  }
+
+  25% {
+    -webkit-transform: scale(.95);
+    transform: scale(.95);
+  }
+
+  50% {
+    opacity: 1;
+    -webkit-transform: scale(1.1);
+    transform: scale(1.1);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: scale(.3);
+    transform: scale(.3);
+  }
+}
+
+@keyframes bounceOut {
+  0% {
+    -webkit-transform: scale(1);
+    -ms-transform: scale(1);
+    transform: scale(1);
+  }
+
+  25% {
+    -webkit-transform: scale(.95);
+    -ms-transform: scale(.95);
+    transform: scale(.95);
+  }
+
+  50% {
+    opacity: 1;
+    -webkit-transform: scale(1.1);
+    -ms-transform: scale(1.1);
+    transform: scale(1.1);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: scale(.3);
+    -ms-transform: scale(.3);
+    transform: scale(.3);
+  }
+}
+
+.bounceOut {
+  -webkit-animation-name: bounceOut;
+  animation-name: bounceOut;
+}
+
+@-webkit-keyframes bounceOutDown {
+  0% {
+    -webkit-transform: translateY(0);
+    transform: translateY(0);
+  }
+
+  20% {
+    opacity: 1;
+    -webkit-transform: translateY(-20px);
+    transform: translateY(-20px);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(2000px);
+    transform: translateY(2000px);
+  }
+}
+
+@keyframes bounceOutDown {
+  0% {
+    -webkit-transform: translateY(0);
+    -ms-transform: translateY(0);
+    transform: translateY(0);
+  }
+
+  20% {
+    opacity: 1;
+    -webkit-transform: translateY(-20px);
+    -ms-transform: translateY(-20px);
+    transform: translateY(-20px);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(2000px);
+    -ms-transform: translateY(2000px);
+    transform: translateY(2000px);
+  }
+}
+
+.bounceOutDown {
+  -webkit-animation-name: bounceOutDown;
+  animation-name: bounceOutDown;
+}
+
+@-webkit-keyframes bounceOutLeft {
+  0% {
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+
+  20% {
+    opacity: 1;
+    -webkit-transform: translateX(20px);
+    transform: translateX(20px);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateX(-2000px);
+    transform: translateX(-2000px);
+  }
+}
+
+@keyframes bounceOutLeft {
+  0% {
+    -webkit-transform: translateX(0);
+    -ms-transform: translateX(0);
+    transform: translateX(0);
+  }
+
+  20% {
+    opacity: 1;
+    -webkit-transform: translateX(20px);
+    -ms-transform: translateX(20px);
+    transform: translateX(20px);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateX(-2000px);
+    -ms-transform: translateX(-2000px);
+    transform: translateX(-2000px);
+  }
+}
+
+.bounceOutLeft {
+  -webkit-animation-name: bounceOutLeft;
+  animation-name: bounceOutLeft;
+}
+
+@-webkit-keyframes bounceOutRight {
+  0% {
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+
+  20% {
+    opacity: 1;
+    -webkit-transform: translateX(-20px);
+    transform: translateX(-20px);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateX(2000px);
+    transform: translateX(2000px);
+  }
+}
+
+@keyframes bounceOutRight {
+  0% {
+    -webkit-transform: translateX(0);
+    -ms-transform: translateX(0);
+    transform: translateX(0);
+  }
+
+  20% {
+    opacity: 1;
+    -webkit-transform: translateX(-20px);
+    -ms-transform: translateX(-20px);
+    transform: translateX(-20px);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateX(2000px);
+    -ms-transform: translateX(2000px);
+    transform: translateX(2000px);
+  }
+}
+
+.bounceOutRight {
+  -webkit-animation-name: bounceOutRight;
+  animation-name: bounceOutRight;
+}
+
+@-webkit-keyframes bounceOutUp {
+  0% {
+    -webkit-transform: translateY(0);
+    transform: translateY(0);
+  }
+
+  20% {
+    opacity: 1;
+    -webkit-transform: translateY(20px);
+    transform: translateY(20px);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(-2000px);
+    transform: translateY(-2000px);
+  }
+}
+
+@keyframes bounceOutUp {
+  0% {
+    -webkit-transform: translateY(0);
+    -ms-transform: translateY(0);
+    transform: translateY(0);
+  }
+
+  20% {
+    opacity: 1;
+    -webkit-transform: translateY(20px);
+    -ms-transform: translateY(20px);
+    transform: translateY(20px);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(-2000px);
+    -ms-transform: translateY(-2000px);
+    transform: translateY(-2000px);
+  }
+}
+
+.bounceOutUp {
+  -webkit-animation-name: bounceOutUp;
+  animation-name: bounceOutUp;
+}
+
+@-webkit-keyframes fadeIn {
+  0% {
+    opacity: 0;
+  }
+
+  100% {
+    opacity: 1;
+  }
+}
+
+@keyframes fadeIn {
+  0% {
+    opacity: 0;
+  }
+
+  100% {
+    opacity: 1;
+  }
+}
+
+.fadeIn {
+  -webkit-animation-name: fadeIn;
+  animation-name: fadeIn;
+}
+
+@-webkit-keyframes fadeInDown {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(-20px);
+    transform: translateY(-20px);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: translateY(0);
+    transform: translateY(0);
+  }
+}
+
+@keyframes fadeInDown {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(-20px);
+    -ms-transform: translateY(-20px);
+    transform: translateY(-20px);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: translateY(0);
+    -ms-transform: translateY(0);
+    transform: translateY(0);
+  }
+}
+
+.fadeInDown {
+  -webkit-animation-name: fadeInDown;
+  animation-name: fadeInDown;
+}
+
+@-webkit-keyframes fadeInDownBig {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(-2000px);
+    transform: translateY(-2000px);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: translateY(0);
+    transform: translateY(0);
+  }
+}
+
+@keyframes fadeInDownBig {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(-2000px);
+    -ms-transform: translateY(-2000px);
+    transform: translateY(-2000px);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: translateY(0);
+    -ms-transform: translateY(0);
+    transform: translateY(0);
+  }
+}
+
+.fadeInDownBig {
+  -webkit-animation-name: fadeInDownBig;
+  animation-name: fadeInDownBig;
+}
+
+@-webkit-keyframes fadeInLeft {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateX(-20px);
+    transform: translateX(-20px);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+}
+
+@keyframes fadeInLeft {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateX(-20px);
+    -ms-transform: translateX(-20px);
+    transform: translateX(-20px);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: translateX(0);
+    -ms-transform: translateX(0);
+    transform: translateX(0);
+  }
+}
+
+.fadeInLeft {
+  -webkit-animation-name: fadeInLeft;
+  animation-name: fadeInLeft;
+}
+
+@-webkit-keyframes fadeInLeftBig {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateX(-2000px);
+    transform: translateX(-2000px);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+}
+
+@keyframes fadeInLeftBig {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateX(-2000px);
+    -ms-transform: translateX(-2000px);
+    transform: translateX(-2000px);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: translateX(0);
+    -ms-transform: translateX(0);
+    transform: translateX(0);
+  }
+}
+
+.fadeInLeftBig {
+  -webkit-animation-name: fadeInLeftBig;
+  animation-name: fadeInLeftBig;
+}
+
+@-webkit-keyframes fadeInRight {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateX(20px);
+    transform: translateX(20px);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+}
+
+@keyframes fadeInRight {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateX(20px);
+    -ms-transform: translateX(20px);
+    transform: translateX(20px);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: translateX(0);
+    -ms-transform: translateX(0);
+    transform: translateX(0);
+  }
+}
+
+.fadeInRight {
+  -webkit-animation-name: fadeInRight;
+  animation-name: fadeInRight;
+}
+
+@-webkit-keyframes fadeInRightBig {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateX(2000px);
+    transform: translateX(2000px);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+}
+
+@keyframes fadeInRightBig {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateX(2000px);
+    -ms-transform: translateX(2000px);
+    transform: translateX(2000px);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: translateX(0);
+    -ms-transform: translateX(0);
+    transform: translateX(0);
+  }
+}
+
+.fadeInRightBig {
+  -webkit-animation-name: fadeInRightBig;
+  animation-name: fadeInRightBig;
+}
+
+@-webkit-keyframes fadeInUp {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(20px);
+    transform: translateY(20px);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: translateY(0);
+    transform: translateY(0);
+  }
+}
+
+@keyframes fadeInUp {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(20px);
+    -ms-transform: translateY(20px);
+    transform: translateY(20px);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: translateY(0);
+    -ms-transform: translateY(0);
+    transform: translateY(0);
+  }
+}
+
+.fadeInUp {
+  -webkit-animation-name: fadeInUp;
+  animation-name: fadeInUp;
+}
+
+@-webkit-keyframes fadeInUpBig {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(2000px);
+    transform: translateY(2000px);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: translateY(0);
+    transform: translateY(0);
+  }
+}
+
+@keyframes fadeInUpBig {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(2000px);
+    -ms-transform: translateY(2000px);
+    transform: translateY(2000px);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: translateY(0);
+    -ms-transform: translateY(0);
+    transform: translateY(0);
+  }
+}
+
+.fadeInUpBig {
+  -webkit-animation-name: fadeInUpBig;
+  animation-name: fadeInUpBig;
+}
+
+@-webkit-keyframes fadeOut {
+  0% {
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+  }
+}
+
+@keyframes fadeOut {
+  0% {
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+  }
+}
+
+.fadeOut {
+  -webkit-animation-name: fadeOut;
+  animation-name: fadeOut;
+}
+
+@-webkit-keyframes fadeOutDown {
+  0% {
+    opacity: 1;
+    -webkit-transform: translateY(0);
+    transform: translateY(0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(20px);
+    transform: translateY(20px);
+  }
+}
+
+@keyframes fadeOutDown {
+  0% {
+    opacity: 1;
+    -webkit-transform: translateY(0);
+    -ms-transform: translateY(0);
+    transform: translateY(0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(20px);
+    -ms-transform: translateY(20px);
+    transform: translateY(20px);
+  }
+}
+
+.fadeOutDown {
+  -webkit-animation-name: fadeOutDown;
+  animation-name: fadeOutDown;
+}
+
+@-webkit-keyframes fadeOutDownBig {
+  0% {
+    opacity: 1;
+    -webkit-transform: translateY(0);
+    transform: translateY(0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(2000px);
+    transform: translateY(2000px);
+  }
+}
+
+@keyframes fadeOutDownBig {
+  0% {
+    opacity: 1;
+    -webkit-transform: translateY(0);
+    -ms-transform: translateY(0);
+    transform: translateY(0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(2000px);
+    -ms-transform: translateY(2000px);
+    transform: translateY(2000px);
+  }
+}
+
+.fadeOutDownBig {
+  -webkit-animation-name: fadeOutDownBig;
+  animation-name: fadeOutDownBig;
+}
+
+@-webkit-keyframes fadeOutLeft {
+  0% {
+    opacity: 1;
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateX(-20px);
+    transform: translateX(-20px);
+  }
+}
+
+@keyframes fadeOutLeft {
+  0% {
+    opacity: 1;
+    -webkit-transform: translateX(0);
+    -ms-transform: translateX(0);
+    transform: translateX(0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateX(-20px);
+    -ms-transform: translateX(-20px);
+    transform: translateX(-20px);
+  }
+}
+
+.fadeOutLeft {
+  -webkit-animation-name: fadeOutLeft;
+  animation-name: fadeOutLeft;
+}
+
+@-webkit-keyframes fadeOutLeftBig {
+  0% {
+    opacity: 1;
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateX(-2000px);
+    transform: translateX(-2000px);
+  }
+}
+
+@keyframes fadeOutLeftBig {
+  0% {
+    opacity: 1;
+    -webkit-transform: translateX(0);
+    -ms-transform: translateX(0);
+    transform: translateX(0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateX(-2000px);
+    -ms-transform: translateX(-2000px);
+    transform: translateX(-2000px);
+  }
+}
+
+.fadeOutLeftBig {
+  -webkit-animation-name: fadeOutLeftBig;
+  animation-name: fadeOutLeftBig;
+}
+
+@-webkit-keyframes fadeOutRight {
+  0% {
+    opacity: 1;
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateX(20px);
+    transform: translateX(20px);
+  }
+}
+
+@keyframes fadeOutRight {
+  0% {
+    opacity: 1;
+    -webkit-transform: translateX(0);
+    -ms-transform: translateX(0);
+    transform: translateX(0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateX(20px);
+    -ms-transform: translateX(20px);
+    transform: translateX(20px);
+  }
+}
+
+.fadeOutRight {
+  -webkit-animation-name: fadeOutRight;
+  animation-name: fadeOutRight;
+}
+
+@-webkit-keyframes fadeOutRightBig {
+  0% {
+    opacity: 1;
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateX(2000px);
+    transform: translateX(2000px);
+  }
+}
+
+@keyframes fadeOutRightBig {
+  0% {
+    opacity: 1;
+    -webkit-transform: translateX(0);
+    -ms-transform: translateX(0);
+    transform: translateX(0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateX(2000px);
+    -ms-transform: translateX(2000px);
+    transform: translateX(2000px);
+  }
+}
+
+.fadeOutRightBig {
+  -webkit-animation-name: fadeOutRightBig;
+  animation-name: fadeOutRightBig;
+}
+
+@-webkit-keyframes fadeOutUp {
+  0% {
+    opacity: 1;
+    -webkit-transform: translateY(0);
+    transform: translateY(0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(-20px);
+    transform: translateY(-20px);
+  }
+}
+
+@keyframes fadeOutUp {
+  0% {
+    opacity: 1;
+    -webkit-transform: translateY(0);
+    -ms-transform: translateY(0);
+    transform: translateY(0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(-20px);
+    -ms-transform: translateY(-20px);
+    transform: translateY(-20px);
+  }
+}
+
+.fadeOutUp {
+  -webkit-animation-name: fadeOutUp;
+  animation-name: fadeOutUp;
+}
+
+@-webkit-keyframes fadeOutUpBig {
+  0% {
+    opacity: 1;
+    -webkit-transform: translateY(0);
+    transform: translateY(0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(-2000px);
+    transform: translateY(-2000px);
+  }
+}
+
+@keyframes fadeOutUpBig {
+  0% {
+    opacity: 1;
+    -webkit-transform: translateY(0);
+    -ms-transform: translateY(0);
+    transform: translateY(0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(-2000px);
+    -ms-transform: translateY(-2000px);
+    transform: translateY(-2000px);
+  }
+}
+
+.fadeOutUpBig {
+  -webkit-animation-name: fadeOutUpBig;
+  animation-name: fadeOutUpBig;
+}
+
+@-webkit-keyframes flip {
+  0% {
+    -webkit-transform: perspective(400px) translateZ(0) rotateY(0) scale(1);
+    transform: perspective(400px) translateZ(0) rotateY(0) scale(1);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);
+    transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+
+  50% {
+    -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
+    transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  80% {
+    -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);
+    transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  100% {
+    -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);
+    transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+}
+
+@keyframes flip {
+  0% {
+    -webkit-transform: perspective(400px) translateZ(0) rotateY(0) scale(1);
+    -ms-transform: perspective(400px) translateZ(0) rotateY(0) scale(1);
+    transform: perspective(400px) translateZ(0) rotateY(0) scale(1);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);
+    -ms-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);
+    transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+
+  50% {
+    -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
+    -ms-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
+    transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  80% {
+    -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);
+    -ms-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);
+    transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  100% {
+    -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);
+    -ms-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);
+    transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+}
+
+.animated.flip {
+  -webkit-backface-visibility: visible;
+  -ms-backface-visibility: visible;
+  backface-visibility: visible;
+  -webkit-animation-name: flip;
+  animation-name: flip;
+}
+
+@-webkit-keyframes flipInX {
+  0% {
+    -webkit-transform: perspective(400px) rotateX(90deg);
+    transform: perspective(400px) rotateX(90deg);
+    opacity: 0;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) rotateX(-10deg);
+    transform: perspective(400px) rotateX(-10deg);
+  }
+
+  70% {
+    -webkit-transform: perspective(400px) rotateX(10deg);
+    transform: perspective(400px) rotateX(10deg);
+  }
+
+  100% {
+    -webkit-transform: perspective(400px) rotateX(0deg);
+    transform: perspective(400px) rotateX(0deg);
+    opacity: 1;
+  }
+}
+
+@keyframes flipInX {
+  0% {
+    -webkit-transform: perspective(400px) rotateX(90deg);
+    -ms-transform: perspective(400px) rotateX(90deg);
+    transform: perspective(400px) rotateX(90deg);
+    opacity: 0;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) rotateX(-10deg);
+    -ms-transform: perspective(400px) rotateX(-10deg);
+    transform: perspective(400px) rotateX(-10deg);
+  }
+
+  70% {
+    -webkit-transform: perspective(400px) rotateX(10deg);
+    -ms-transform: perspective(400px) rotateX(10deg);
+    transform: perspective(400px) rotateX(10deg);
+  }
+
+  100% {
+    -webkit-transform: perspective(400px) rotateX(0deg);
+    -ms-transform: perspective(400px) rotateX(0deg);
+    transform: perspective(400px) rotateX(0deg);
+    opacity: 1;
+  }
+}
+
+.flipInX {
+  -webkit-backface-visibility: visible !important;
+  -ms-backface-visibility: visible !important;
+  backface-visibility: visible !important;
+  -webkit-animation-name: flipInX;
+  animation-name: flipInX;
+}
+
+@-webkit-keyframes flipInY {
+  0% {
+    -webkit-transform: perspective(400px) rotateY(90deg);
+    transform: perspective(400px) rotateY(90deg);
+    opacity: 0;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) rotateY(-10deg);
+    transform: perspective(400px) rotateY(-10deg);
+  }
+
+  70% {
+    -webkit-transform: perspective(400px) rotateY(10deg);
+    transform: perspective(400px) rotateY(10deg);
+  }
+
+  100% {
+    -webkit-transform: perspective(400px) rotateY(0deg);
+    transform: perspective(400px) rotateY(0deg);
+    opacity: 1;
+  }
+}
+
+@keyframes flipInY {
+  0% {
+    -webkit-transform: perspective(400px) rotateY(90deg);
+    -ms-transform: perspective(400px) rotateY(90deg);
+    transform: perspective(400px) rotateY(90deg);
+    opacity: 0;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) rotateY(-10deg);
+    -ms-transform: perspective(400px) rotateY(-10deg);
+    transform: perspective(400px) rotateY(-10deg);
+  }
+
+  70% {
+    -webkit-transform: perspective(400px) rotateY(10deg);
+    -ms-transform: perspective(400px) rotateY(10deg);
+    transform: perspective(400px) rotateY(10deg);
+  }
+
+  100% {
+    -webkit-transform: perspective(400px) rotateY(0deg);
+    -ms-transform: perspective(400px) rotateY(0deg);
+    transform: perspective(400px) rotateY(0deg);
+    opacity: 1;
+  }
+}
+
+.flipInY {
+  -webkit-backface-visibility: visible !important;
+  -ms-backface-visibility: visible !important;
+  backface-visibility: visible !important;
+  -webkit-animation-name: flipInY;
+  animation-name: flipInY;
+}
+
+@-webkit-keyframes flipOutX {
+  0% {
+    -webkit-transform: perspective(400px) rotateX(0deg);
+    transform: perspective(400px) rotateX(0deg);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform: perspective(400px) rotateX(90deg);
+    transform: perspective(400px) rotateX(90deg);
+    opacity: 0;
+  }
+}
+
+@keyframes flipOutX {
+  0% {
+    -webkit-transform: perspective(400px) rotateX(0deg);
+    -ms-transform: perspective(400px) rotateX(0deg);
+    transform: perspective(400px) rotateX(0deg);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform: perspective(400px) rotateX(90deg);
+    -ms-transform: perspective(400px) rotateX(90deg);
+    transform: perspective(400px) rotateX(90deg);
+    opacity: 0;
+  }
+}
+
+.flipOutX {
+  -webkit-animation-name: flipOutX;
+  animation-name: flipOutX;
+  -webkit-backface-visibility: visible !important;
+  -ms-backface-visibility: visible !important;
+  backface-visibility: visible !important;
+}
+
+@-webkit-keyframes flipOutY {
+  0% {
+    -webkit-transform: perspective(400px) rotateY(0deg);
+    transform: perspective(400px) rotateY(0deg);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform: perspective(400px) rotateY(90deg);
+    transform: perspective(400px) rotateY(90deg);
+    opacity: 0;
+  }
+}
+
+@keyframes flipOutY {
+  0% {
+    -webkit-transform: perspective(400px) rotateY(0deg);
+    -ms-transform: perspective(400px) rotateY(0deg);
+    transform: perspective(400px) rotateY(0deg);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform: perspective(400px) rotateY(90deg);
+    -ms-transform: perspective(400px) rotateY(90deg);
+    transform: perspective(400px) rotateY(90deg);
+    opacity: 0;
+  }
+}
+
+.flipOutY {
+  -webkit-backface-visibility: visible !important;
+  -ms-backface-visibility: visible !important;
+  backface-visibility: visible !important;
+  -webkit-animation-name: flipOutY;
+  animation-name: flipOutY;
+}
+
+@-webkit-keyframes lightSpeedIn {
+  0% {
+    -webkit-transform: translateX(100%) skewX(-30deg);
+    transform: translateX(100%) skewX(-30deg);
+    opacity: 0;
+  }
+
+  60% {
+    -webkit-transform: translateX(-20%) skewX(30deg);
+    transform: translateX(-20%) skewX(30deg);
+    opacity: 1;
+  }
+
+  80% {
+    -webkit-transform: translateX(0%) skewX(-15deg);
+    transform: translateX(0%) skewX(-15deg);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform: translateX(0%) skewX(0deg);
+    transform: translateX(0%) skewX(0deg);
+    opacity: 1;
+  }
+}
+
+@keyframes lightSpeedIn {
+  0% {
+    -webkit-transform: translateX(100%) skewX(-30deg);
+    -ms-transform: translateX(100%) skewX(-30deg);
+    transform: translateX(100%) skewX(-30deg);
+    opacity: 0;
+  }
+
+  60% {
+    -webkit-transform: translateX(-20%) skewX(30deg);
+    -ms-transform: translateX(-20%) skewX(30deg);
+    transform: translateX(-20%) skewX(30deg);
+    opacity: 1;
+  }
+
+  80% {
+    -webkit-transform: translateX(0%) skewX(-15deg);
+    -ms-transform: translateX(0%) skewX(-15deg);
+    transform: translateX(0%) skewX(-15deg);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform: translateX(0%) skewX(0deg);
+    -ms-transform: translateX(0%) skewX(0deg);
+    transform: translateX(0%) skewX(0deg);
+    opacity: 1;
+  }
+}
+
+.lightSpeedIn {
+  -webkit-animation-name: lightSpeedIn;
+  animation-name: lightSpeedIn;
+  -webkit-animation-timing-function: ease-out;
+  animation-timing-function: ease-out;
+}
+
+@-webkit-keyframes lightSpeedOut {
+  0% {
+    -webkit-transform: translateX(0%) skewX(0deg);
+    transform: translateX(0%) skewX(0deg);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform: translateX(100%) skewX(-30deg);
+    transform: translateX(100%) skewX(-30deg);
+    opacity: 0;
+  }
+}
+
+@keyframes lightSpeedOut {
+  0% {
+    -webkit-transform: translateX(0%) skewX(0deg);
+    -ms-transform: translateX(0%) skewX(0deg);
+    transform: translateX(0%) skewX(0deg);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform: translateX(100%) skewX(-30deg);
+    -ms-transform: translateX(100%) skewX(-30deg);
+    transform: translateX(100%) skewX(-30deg);
+    opacity: 0;
+  }
+}
+
+.lightSpeedOut {
+  -webkit-animation-name: lightSpeedOut;
+  animation-name: lightSpeedOut;
+  -webkit-animation-timing-function: ease-in;
+  animation-timing-function: ease-in;
+}
+
+@-webkit-keyframes rotateIn {
+  0% {
+    -webkit-transform-origin: center center;
+    transform-origin: center center;
+    -webkit-transform: rotate(-200deg);
+    transform: rotate(-200deg);
+    opacity: 0;
+  }
+
+  100% {
+    -webkit-transform-origin: center center;
+    transform-origin: center center;
+    -webkit-transform: rotate(0);
+    transform: rotate(0);
+    opacity: 1;
+  }
+}
+
+@keyframes rotateIn {
+  0% {
+    -webkit-transform-origin: center center;
+    -ms-transform-origin: center center;
+    transform-origin: center center;
+    -webkit-transform: rotate(-200deg);
+    -ms-transform: rotate(-200deg);
+    transform: rotate(-200deg);
+    opacity: 0;
+  }
+
+  100% {
+    -webkit-transform-origin: center center;
+    -ms-transform-origin: center center;
+    transform-origin: center center;
+    -webkit-transform: rotate(0);
+    -ms-transform: rotate(0);
+    transform: rotate(0);
+    opacity: 1;
+  }
+}
+
+.rotateIn {
+  -webkit-animation-name: rotateIn;
+  animation-name: rotateIn;
+}
+
+@-webkit-keyframes rotateInDownLeft {
+  0% {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate(-90deg);
+    transform: rotate(-90deg);
+    opacity: 0;
+  }
+
+  100% {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate(0);
+    transform: rotate(0);
+    opacity: 1;
+  }
+}
+
+@keyframes rotateInDownLeft {
+  0% {
+    -webkit-transform-origin: left bottom;
+    -ms-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate(-90deg);
+    -ms-transform: rotate(-90deg);
+    transform: rotate(-90deg);
+    opacity: 0;
+  }
+
+  100% {
+    -webkit-transform-origin: left bottom;
+    -ms-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate(0);
+    -ms-transform: rotate(0);
+    transform: rotate(0);
+    opacity: 1;
+  }
+}
+
+.rotateInDownLeft {
+  -webkit-animation-name: rotateInDownLeft;
+  animation-name: rotateInDownLeft;
+}
+
+@-webkit-keyframes rotateInDownRight {
+  0% {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+    opacity: 0;
+  }
+
+  100% {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate(0);
+    transform: rotate(0);
+    opacity: 1;
+  }
+}
+
+@keyframes rotateInDownRight {
+  0% {
+    -webkit-transform-origin: right bottom;
+    -ms-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate(90deg);
+    -ms-transform: rotate(90deg);
+    transform: rotate(90deg);
+    opacity: 0;
+  }
+
+  100% {
+    -webkit-transform-origin: right bottom;
+    -ms-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate(0);
+    -ms-transform: rotate(0);
+    transform: rotate(0);
+    opacity: 1;
+  }
+}
+
+.rotateInDownRight {
+  -webkit-animation-name: rotateInDownRight;
+  animation-name: rotateInDownRight;
+}
+
+@-webkit-keyframes rotateInUpLeft {
+  0% {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+    opacity: 0;
+  }
+
+  100% {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate(0);
+    transform: rotate(0);
+    opacity: 1;
+  }
+}
+
+@keyframes rotateInUpLeft {
+  0% {
+    -webkit-transform-origin: left bottom;
+    -ms-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate(90deg);
+    -ms-transform: rotate(90deg);
+    transform: rotate(90deg);
+    opacity: 0;
+  }
+
+  100% {
+    -webkit-transform-origin: left bottom;
+    -ms-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate(0);
+    -ms-transform: rotate(0);
+    transform: rotate(0);
+    opacity: 1;
+  }
+}
+
+.rotateInUpLeft {
+  -webkit-animation-name: rotateInUpLeft;
+  animation-name: rotateInUpLeft;
+}
+
+@-webkit-keyframes rotateInUpRight {
+  0% {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate(-90deg);
+    transform: rotate(-90deg);
+    opacity: 0;
+  }
+
+  100% {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate(0);
+    transform: rotate(0);
+    opacity: 1;
+  }
+}
+
+@keyframes rotateInUpRight {
+  0% {
+    -webkit-transform-origin: right bottom;
+    -ms-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate(-90deg);
+    -ms-transform: rotate(-90deg);
+    transform: rotate(-90deg);
+    opacity: 0;
+  }
+
+  100% {
+    -webkit-transform-origin: right bottom;
+    -ms-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate(0);
+    -ms-transform: rotate(0);
+    transform: rotate(0);
+    opacity: 1;
+  }
+}
+
+.rotateInUpRight {
+  -webkit-animation-name: rotateInUpRight;
+  animation-name: rotateInUpRight;
+}
+
+@-webkit-keyframes rotateOut {
+  0% {
+    -webkit-transform-origin: center center;
+    transform-origin: center center;
+    -webkit-transform: rotate(0);
+    transform: rotate(0);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform-origin: center center;
+    transform-origin: center center;
+    -webkit-transform: rotate(200deg);
+    transform: rotate(200deg);
+    opacity: 0;
+  }
+}
+
+@keyframes rotateOut {
+  0% {
+    -webkit-transform-origin: center center;
+    -ms-transform-origin: center center;
+    transform-origin: center center;
+    -webkit-transform: rotate(0);
+    -ms-transform: rotate(0);
+    transform: rotate(0);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform-origin: center center;
+    -ms-transform-origin: center center;
+    transform-origin: center center;
+    -webkit-transform: rotate(200deg);
+    -ms-transform: rotate(200deg);
+    transform: rotate(200deg);
+    opacity: 0;
+  }
+}
+
+.rotateOut {
+  -webkit-animation-name: rotateOut;
+  animation-name: rotateOut;
+}
+
+@-webkit-keyframes rotateOutDownLeft {
+  0% {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate(0);
+    transform: rotate(0);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+    opacity: 0;
+  }
+}
+
+@keyframes rotateOutDownLeft {
+  0% {
+    -webkit-transform-origin: left bottom;
+    -ms-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate(0);
+    -ms-transform: rotate(0);
+    transform: rotate(0);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform-origin: left bottom;
+    -ms-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate(90deg);
+    -ms-transform: rotate(90deg);
+    transform: rotate(90deg);
+    opacity: 0;
+  }
+}
+
+.rotateOutDownLeft {
+  -webkit-animation-name: rotateOutDownLeft;
+  animation-name: rotateOutDownLeft;
+}
+
+@-webkit-keyframes rotateOutDownRight {
+  0% {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate(0);
+    transform: rotate(0);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate(-90deg);
+    transform: rotate(-90deg);
+    opacity: 0;
+  }
+}
+
+@keyframes rotateOutDownRight {
+  0% {
+    -webkit-transform-origin: right bottom;
+    -ms-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate(0);
+    -ms-transform: rotate(0);
+    transform: rotate(0);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform-origin: right bottom;
+    -ms-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate(-90deg);
+    -ms-transform: rotate(-90deg);
+    transform: rotate(-90deg);
+    opacity: 0;
+  }
+}
+
+.rotateOutDownRight {
+  -webkit-animation-name: rotateOutDownRight;
+  animation-name: rotateOutDownRight;
+}
+
+@-webkit-keyframes rotateOutUpLeft {
+  0% {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate(0);
+    transform: rotate(0);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate(-90deg);
+    transform: rotate(-90deg);
+    opacity: 0;
+  }
+}
+
+@keyframes rotateOutUpLeft {
+  0% {
+    -webkit-transform-origin: left bottom;
+    -ms-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate(0);
+    -ms-transform: rotate(0);
+    transform: rotate(0);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform-origin: left bottom;
+    -ms-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate(-90deg);
+    -ms-transform: rotate(-90deg);
+    transform: rotate(-90deg);
+    opacity: 0;
+  }
+}
+
+.rotateOutUpLeft {
+  -webkit-animation-name: rotateOutUpLeft;
+  animation-name: rotateOutUpLeft;
+}
+
+@-webkit-keyframes rotateOutUpRight {
+  0% {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate(0);
+    transform: rotate(0);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+    opacity: 0;
+  }
+}
+
+@keyframes rotateOutUpRight {
+  0% {
+    -webkit-transform-origin: right bottom;
+    -ms-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate(0);
+    -ms-transform: rotate(0);
+    transform: rotate(0);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform-origin: right bottom;
+    -ms-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate(90deg);
+    -ms-transform: rotate(90deg);
+    transform: rotate(90deg);
+    opacity: 0;
+  }
+}
+
+.rotateOutUpRight {
+  -webkit-animation-name: rotateOutUpRight;
+  animation-name: rotateOutUpRight;
+}
+
+@-webkit-keyframes slideInDown {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(-2000px);
+    transform: translateY(-2000px);
+  }
+
+  100% {
+    -webkit-transform: translateY(0);
+    transform: translateY(0);
+  }
+}
+
+@keyframes slideInDown {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(-2000px);
+    -ms-transform: translateY(-2000px);
+    transform: translateY(-2000px);
+  }
+
+  100% {
+    -webkit-transform: translateY(0);
+    -ms-transform: translateY(0);
+    transform: translateY(0);
+  }
+}
+
+.slideInDown {
+  -webkit-animation-name: slideInDown;
+  animation-name: slideInDown;
+}
+
+@-webkit-keyframes slideInLeft {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateX(-2000px);
+    transform: translateX(-2000px);
+  }
+
+  100% {
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+}
+
+@keyframes slideInLeft {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateX(-2000px);
+    -ms-transform: translateX(-2000px);
+    transform: translateX(-2000px);
+  }
+
+  100% {
+    -webkit-transform: translateX(0);
+    -ms-transform: translateX(0);
+    transform: translateX(0);
+  }
+}
+
+.slideInLeft {
+  -webkit-animation-name: slideInLeft;
+  animation-name: slideInLeft;
+}
+
+@-webkit-keyframes slideInRight {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateX(2000px);
+    transform: translateX(2000px);
+  }
+
+  100% {
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+}
+
+@keyframes slideInRight {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateX(2000px);
+    -ms-transform: translateX(2000px);
+    transform: translateX(2000px);
+  }
+
+  100% {
+    -webkit-transform: translateX(0);
+    -ms-transform: translateX(0);
+    transform: translateX(0);
+  }
+}
+
+.slideInRight {
+  -webkit-animation-name: slideInRight;
+  animation-name: slideInRight;
+}
+
+@-webkit-keyframes slideOutLeft {
+  0% {
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateX(-2000px);
+    transform: translateX(-2000px);
+  }
+}
+
+@keyframes slideOutLeft {
+  0% {
+    -webkit-transform: translateX(0);
+    -ms-transform: translateX(0);
+    transform: translateX(0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateX(-2000px);
+    -ms-transform: translateX(-2000px);
+    transform: translateX(-2000px);
+  }
+}
+
+.slideOutLeft {
+  -webkit-animation-name: slideOutLeft;
+  animation-name: slideOutLeft;
+}
+
+@-webkit-keyframes slideOutRight {
+  0% {
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateX(2000px);
+    transform: translateX(2000px);
+  }
+}
+
+@keyframes slideOutRight {
+  0% {
+    -webkit-transform: translateX(0);
+    -ms-transform: translateX(0);
+    transform: translateX(0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateX(2000px);
+    -ms-transform: translateX(2000px);
+    transform: translateX(2000px);
+  }
+}
+
+.slideOutRight {
+  -webkit-animation-name: slideOutRight;
+  animation-name: slideOutRight;
+}
+
+@-webkit-keyframes slideOutUp {
+  0% {
+    -webkit-transform: translateY(0);
+    transform: translateY(0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(-2000px);
+    transform: translateY(-2000px);
+  }
+}
+
+@keyframes slideOutUp {
+  0% {
+    -webkit-transform: translateY(0);
+    -ms-transform: translateY(0);
+    transform: translateY(0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(-2000px);
+    -ms-transform: translateY(-2000px);
+    transform: translateY(-2000px);
+  }
+}
+
+.slideOutUp {
+  -webkit-animation-name: slideOutUp;
+  animation-name: slideOutUp;
+}
+
+@-webkit-keyframes hinge {
+  0% {
+    -webkit-transform: rotate(0);
+    transform: rotate(0);
+    -webkit-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+  }
+
+  20%, 60% {
+    -webkit-transform: rotate(80deg);
+    transform: rotate(80deg);
+    -webkit-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+  }
+
+  40% {
+    -webkit-transform: rotate(60deg);
+    transform: rotate(60deg);
+    -webkit-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+  }
+
+  80% {
+    -webkit-transform: rotate(60deg) translateY(0);
+    transform: rotate(60deg) translateY(0);
+    opacity: 1;
+    -webkit-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+  }
+
+  100% {
+    -webkit-transform: translateY(700px);
+    transform: translateY(700px);
+    opacity: 0;
+  }
+}
+
+@keyframes hinge {
+  0% {
+    -webkit-transform: rotate(0);
+    -ms-transform: rotate(0);
+    transform: rotate(0);
+    -webkit-transform-origin: top left;
+    -ms-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+  }
+
+  20%, 60% {
+    -webkit-transform: rotate(80deg);
+    -ms-transform: rotate(80deg);
+    transform: rotate(80deg);
+    -webkit-transform-origin: top left;
+    -ms-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+  }
+
+  40% {
+    -webkit-transform: rotate(60deg);
+    -ms-transform: rotate(60deg);
+    transform: rotate(60deg);
+    -webkit-transform-origin: top left;
+    -ms-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+  }
+
+  80% {
+    -webkit-transform: rotate(60deg) translateY(0);
+    -ms-transform: rotate(60deg) translateY(0);
+    transform: rotate(60deg) translateY(0);
+    opacity: 1;
+    -webkit-transform-origin: top left;
+    -ms-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+  }
+
+  100% {
+    -webkit-transform: translateY(700px);
+    -ms-transform: translateY(700px);
+    transform: translateY(700px);
+    opacity: 0;
+  }
+}
+
+.hinge {
+  -webkit-animation-name: hinge;
+  animation-name: hinge;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes rollIn {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateX(-100%) rotate(-120deg);
+    transform: translateX(-100%) rotate(-120deg);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: translateX(0px) rotate(0deg);
+    transform: translateX(0px) rotate(0deg);
+  }
+}
+
+@keyframes rollIn {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateX(-100%) rotate(-120deg);
+    -ms-transform: translateX(-100%) rotate(-120deg);
+    transform: translateX(-100%) rotate(-120deg);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: translateX(0px) rotate(0deg);
+    -ms-transform: translateX(0px) rotate(0deg);
+    transform: translateX(0px) rotate(0deg);
+  }
+}
+
+.rollIn {
+  -webkit-animation-name: rollIn;
+  animation-name: rollIn;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes rollOut {
+  0% {
+    opacity: 1;
+    -webkit-transform: translateX(0px) rotate(0deg);
+    transform: translateX(0px) rotate(0deg);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateX(100%) rotate(120deg);
+    transform: translateX(100%) rotate(120deg);
+  }
+}
+
+@keyframes rollOut {
+  0% {
+    opacity: 1;
+    -webkit-transform: translateX(0px) rotate(0deg);
+    -ms-transform: translateX(0px) rotate(0deg);
+    transform: translateX(0px) rotate(0deg);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateX(100%) rotate(120deg);
+    -ms-transform: translateX(100%) rotate(120deg);
+    transform: translateX(100%) rotate(120deg);
+  }
+}
+
+.rollOut {
+  -webkit-animation-name: rollOut;
+  animation-name: rollOut;
+}
diff --git a/common_assets/css/bootstrap.min.css b/common_assets/css/bootstrap.min.css
new file mode 100755
index 0000000..185ce53
--- /dev/null
+++ b/common_assets/css/bootstrap.min.css
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap v4.0.0 (https://getbootstrap.com)
+ * Copyright 2011-2018 The Bootstrap Authors
+ * Copyright 2011-2018 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;/* font-family:inherit; */font-weight:500;line-height:1.2;color:inherit;}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014 \00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::before,.was-validated .custom-file-input:valid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::before,.was-validated .custom-file-input:invalid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-control::before{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(2.25rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;-webkit-clip-path:none;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-muted{color:#6c757d!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}
+/*# sourceMappingURL=bootstrap.min.css.map */
\ No newline at end of file
diff --git a/common_assets/css/styles.css b/common_assets/css/styles.css
new file mode 100644
index 0000000..a508572
--- /dev/null
+++ b/common_assets/css/styles.css
@@ -0,0 +1,533 @@
+html {
+}
+body {
+  font-family: 'Lato', sans-serif;
+  font-size: 16px;
+  color: #777;
+  font-weight: 400;
+  padding-top: 80px;
+}
+h1,h2,h3,h4,h5,h6 {
+  color: #261e58;
+  font-weight: bold;
+}
+p {
+  line-height: 22px;
+  font-size: 16px;
+  font-weight: 400;
+}
+ul {
+  list-style: square;
+}
+h1 {font-size: 38px;}
+
+#intro h1 {
+    text-transform: uppercase;
+}
+.span-left {
+    margin-left: 40px;
+}
+.span-right {
+    margin-right: 40px;
+}
+h2 {
+  font-size: 26px;
+}
+code {
+  color:#009db5;
+}
+.text-uppercase {
+  letter-spacing: 2px;
+}
+a, .linked_title a:hover{
+	color: #FBB800;
+	text-decoration: none;
+}
+a:hover, a:active, a:focus, #top-bar .main-menu li#dwnld > a:hover, .linked_title a,
+#top-bar .main-menu li#dwnld > a:focus {
+  text-decoration: none;
+  color: #261e58;
+  outline: 0;
+}
+.row {
+  padding: 20px 0;
+}
+.row img {
+    padding: 20px;}
+.pa1 {
+  padding: 10px;
+}
+.pa2 {
+  padding: 20px;
+}
+.pa3 {
+  padding: 20px;
+}
+.pa4 {
+  padding: 40px;
+}
+.bg_indigo a:hover {color:#fff;}
+.bg_indigo a:focus {color:#FBB800;}
+.bg_indigo .btn-default:hover {
+background-color: #fff; 
+color: #261e58;
+}
+.btn {
+  font-size: 13px;
+  font-weight: 700;
+  padding: 16px 35px;
+  text-transform: uppercase;
+  margin-top: 30px;
+}
+.btn-default {
+   color: #fff;
+   background-color: #FBBF52;
+   border: 1px solid #FBBF52;
+   letter-spacing: 2px;
+}
+.btn-primary {
+    background-color: #fff;
+    color: #FBBF52;
+    border: 1px solid #FBBF52;
+    letter-spacing: 2px;
+}
+.btn-default.active, .btn-default.focus, .btn-default:active, .btn-default:focus, .btn-default:hover, .open>.dropdown-toggle.btn-default
+{
+	color: #FBBF52;
+    background-color: #261e58;
+    border: 1px solid #261e58;
+}
+.btn-primary:hover{
+	color: #FBBF52;
+    background-color: #261e58;
+}
+section {
+  padding: 40px;
+}
+.block-center {
+  float: none;
+  margin: 0 auto;
+}
+.left {
+	text-align: left;
+}
+.right {
+	text-align: right;
+}
+.title {
+  font-size: 30px;
+  line-height: 1.1;
+  font-weight: 300;
+  color: #261e58;
+  text-transform: uppercase;
+  margin-bottom: 20px;
+}
+.subtitle {
+  font-size: 24px;
+  font-weight: 600;
+  margin-bottom: 18px;
+  text-transform: uppercase;
+}
+.vcenter {
+  display: grid;
+  align-items: center;
+}
+.col-md-7 img {
+  width: 100%;
+}
+/* Menu - Navigation*/
+#top-bar {
+  background: #fff;
+  color: #fff;
+  -webkit-transition: all 0.2s ease-out 0s;
+  transition: all 0.2s ease-out 0s;
+  padding: 15px 0;
+  -webkit-box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.1);
+  box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.1);
+  border-bottom: 1px solid #dedede;
+}
+#top-bar .navbar-nav > li > a:hover {
+  background: transparent;
+}
+#top-bar.animated-header {
+  padding: 20px 0;
+  background: #ffffff;
+  box-shadow: none;
+}
+#top-bar .main-menu li > a {
+  display: block;
+  color: #444;
+  padding: 10px 15px;
+}
+#top-bar .main-menu li, footer ul li  {
+  position: relative;
+  list-style: none;
+  border-radius: 4px;
+}
+#top-bar .main-menu li a {
+  font-size: 14px;
+  font-weight: 500;
+  border-bottom: 2px solid transparent;
+  -webkit-transition: .3s all;
+  -o-transition: .3s all;
+  transition: .3s all;
+  text-transform: uppercase;
+}
+#top-bar .main-menu li a:hover {
+  color: #FBB800;
+}
+#top-bar .main-menu li#dwnld > a {
+  color: #FBB800;
+}
+#top-bar .main-menu li#dwnld > a:focus {
+background-color: transparent;
+}
+.navbar-header .navbar-brand {
+  padding: 5px 0;
+}
+.navbar-header .navbar-brand a {
+  height: auto;
+  display: inline-block;
+  margin-top: -10px;
+}
+.nav>li#dwnld {
+  background-color: #261e58;
+}
+.nav>li#dwnld:hover{
+  background-color: #FBB800;
+}
+.navbar-right .dropdown-menu {
+  right: auto;
+  left: 0;
+}
+.dropdown-menu > ul {
+  list-style: none;
+  padding: 15px;
+  margin-left: auto;
+  margin-right: auto;
+  margin-bottom: 0;
+  margin-top: -5px;
+  background: #fff;
+  background-color: #261e58;
+  box-shadow: 0 2px 0.09px rgba(0, 0, 0, 0.15);
+}
+.nav .open > a,
+.nav .open > a:focus {
+  background-color: transparent;
+}
+#top-bar .dropdown-menu > ul > li > a {
+  display: block;
+  font-size: 13px;
+  font-weight: 400;
+  line-height: normal;
+  text-decoration: none;
+  padding: 8px 0;
+  color: #fff;
+  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+}
+/* Colors
+-----------*/
+.bg_indigo {
+	background: #261e58;
+}
+.bg_lightest_grey {
+	background: #f9f9f9;
+}
+.txt_indigo {
+	color: #261e58;
+}
+.txt_purple {
+	color: #7667A3;
+}
+.txt_yellow {
+	color: #FBB800;
+}
+.txt_lightest_grey {
+	color: #bdbdbd;
+}
+.txt_white {
+color: #fff !important;
+}
+.call-to-action {
+  background-size: cover;
+  background-attachment: fixed;
+  padding: 80px 0;
+  text-align: center;
+  position: relative;
+  color: #fff;
+}
+.call-to-action .block {
+  position: relative;
+  z-index: 99;
+  color: #fff;
+}
+.call-to-action .block h2 {
+  margin-bottom: 15px;
+  color: #fff;
+}
+.call-to-action .block p {
+  margin-top: 20px;
+}
+#feature {
+  padding: 80px 0;
+}
+#feature .media {
+  margin: 0px 0 70px 0;
+}
+#feature .media .media-left {
+  padding-right: 25px;
+}
+#feature h3 {
+  color: #000;
+  font-size: 18px;
+  text-transform: uppercase;
+  text-align: center;
+  margin-bottom: 20px;
+  margin: 0px 0px 15px;
+  font-weight: 400;
+}
+#feature p {
+  line-height: 25px;
+  font-size: 14px;
+  color: #777777;
+}
+#feature .icon {
+  text-decoration: none;
+  color: #fff;
+  background-color: #FBB800;
+  height: 100px;
+  text-align: center;
+  width: 100px;
+  font-size: 50px;
+  line-height: 100px;
+  overflow: hidden;
+  -webkit-border-radius: 50%;
+  -moz-border-radius: 50%;
+  -ms-border-radius: 50%;
+  -o-border-radius: 50%;
+  text-shadow: #00a4ba 1px 1px, #00a4ba 2px 2px, #00a4ba 3px 3px, #00a4ba 4px 4px, #00a4ba 5px 5px, #00a4ba 6px 6px, #00a4ba 7px 7px, #00a4ba 8px 8px, #00a4ba 9px 9px, #00a4ba 10px 10px, #00a4ba 11px 11px, #00a4ba 12px 12px, #00a4ba 13px 13px, #00a4ba 14px 14px, #00a4ba 15px 15px, #00a4ba 16px 16px, #00a4ba 17px 17px, #00a4ba 18px 18px, #00a4ba 19px 19px, #00a4ba 20px 20px, #00a4ba 21px 21px, #00a4ba 22px 22px, #00a4ba 23px 23px, #00a4ba 24px 24px, #00a4ba 25px 25px, #00a4ba 26px 26px, #00a4ba 27px 27px, #00a4ba 28px 28px, #00a4ba 29px 29px, #00a4ba 30px 30px, #00a4ba 31px 31px, #00a4ba 32px 32px, #00a4ba 33px 33px, #00a4ba 34px 34px, #00a4ba 35px 35px, #00a4ba 36px 36px, #00a4ba 37px 37px, #00a4ba 38px 38px, #00a4ba 39px 39px, #00a4ba 40px 40px, #00a4ba 41px 41px, #00a4ba 42px 42px, #00a4ba 43px 43px, #00a4ba 44px 44px, #00a4ba 45px 45px, #00a4ba 46px 46px, #00a4ba 47px 47px, #00a4ba 48px 48px, #00a4ba 49px 49px, #00a4ba 50px 50px, #00a4ba 51px 51px, #00a4ba 52px 52px, #00a4ba 53px 53px, #00a4ba 54px 54px, #00a4ba 55px 55px, #00a4ba 56px 56px, #00a4ba 57px 57px, #00a4ba 58px 58px, #00a4ba 59px 59px, #00a4ba 60px 60px, #00a4ba 61px 61px, #00a4ba 62px 62px, #00a4ba 63px 63px, #00a4ba 64px 64px, #00a4ba 65px 65px, #00a4ba 66px 66px, #00a4ba 67px 67px, #00a4ba 68px 68px, #00a4ba 69px 69px, #00a4ba 70px 70px, #00a4ba 71px 71px, #00a4ba 72px 72px, #00a4ba 73px 73px, #00a4ba 74px 74px, #00a4ba 75px 75px, #00a4ba 76px 76px, #00a4ba 77px 77px, #00a4ba 78px 78px, #00a4ba 79px 79px, #00a4ba 80px 80px, #00a4ba 81px 81px, #00a4ba 82px 82px, #00a4ba 83px 83px, #00a4ba 84px 84px, #00a4ba 85px 85px, #00a4ba 86px 86px, #00a4ba 87px 87px, #00a4ba 88px 88px, #00a4ba 89px 89px, #00a4ba 90px 90px, #00a4ba 91px 91px, #00a4ba 92px 92px, #00a4ba 93px 93px, #00a4ba 94px 94px, #00a4ba 95px 95px, #00a4ba 96px 96px, #00a4ba 97px 97px, #00a4ba 98px 98px, #00a4ba 99px 99px, #00a4ba 100px 100px;
+}
+::-webkit-input-placeholder { /* Chrome/Opera/Safari */
+  color: #bdbdbd;
+}
+::-moz-placeholder { /* Firefox 19+ */
+  color: #bdbdbd;
+}
+:-ms-input-placeholder { /* IE 10+ */
+  color: #bdbdbd;
+}
+:-moz-placeholder { /* Firefox 18- */
+  color: #bdbdbd;
+}
+#map-canvas {
+  width: 100%;
+  height: 350px;
+  background-color: #CCC;
+}
+/* Footer */
+footer {
+  background: #261e58;
+  padding: 25px 0;
+  color: #fff;
+  border-top: 1px solid #dedede;
+}
+footer h6{
+    color: #fff;
+    font-weight: bolder;
+    font-size: 18px;
+}
+footer #copyright {
+  font-size: 12px;
+  margin-bottom: 0;
+  margin-top: 10px;
+}
+footer .row img {
+    padding: 0;
+}
+footer ul {padding-left: 0;}
+footer a {
+    font-size: 12px;
+    font-weight: 100;
+    color:#fff;
+}
+footer a:hover {color:#ccc;}
+/*------*/
+.fancybox-close {
+  background: url("../images/icons/close.png") no-repeat scroll 0 0 transparent;
+  height: 50px;
+  right: 0;
+  top: 0;
+  width: 50px;
+}
+.fancybox-next span {
+  background: url("../images/icons/right.png") no-repeat scroll center center #261e58;
+  height: 50px;
+  width: 50px;
+  right: 0;
+}
+.fancybox-prev span {
+  background: url("../images/icons/left.png") no-repeat scroll center center #261e58;
+  height: 50px;
+  width: 50px;
+  left: 0;
+}
+.fancybox-title h3 {
+  font-size: 15px;
+  margin: 0;
+}
+.fancybox-title {
+  padding: 15px 8px;
+}
+.wrapper_404 h1 {
+  font-size: 200px;
+  color: #FBB800;
+  line-height: 1;
+}
+.wrapper_404 h2 {
+  font-size: 50px;
+  margin-top: 0;
+}
+.company-description {
+  margin-top: 80px;
+}
+.company-description .block h3 {
+  margin-top: 0;
+}
+.company-description .block p {
+  color: #727272;
+}
+.about-feature {
+  margin-top: 50px;
+}
+.about-feature .block {
+  color: #fff;
+  width: 33.33%;
+  padding: 5%;
+  float: left;
+}
+.about-feature .block p {
+  font-weight: 300;
+}
+.about-feature .about-feature-1 {
+  background: #FBB800;
+}
+.about-feature .about-feature-2 {
+  background: #00B0C7;
+}
+.about-feature .about-feature-3 {
+  background: #00A6BB;
+}
+article {
+  padding: 30px 0;
+}
+.gallery {
+  padding: 100px;
+}
+.gallery figure .buttons {
+  left: 40%;
+}
+#videos .video_thumbnail p a {
+    position: relative;
+    display: block;
+    opacity: 1;
+    -webkit-transition: .7s;
+    -o-transition: .7s;
+    transition: .7s;
+}
+#videos .video_thumbnail p a::before {
+    font: normal normal normal 14px/1 FontAwesome;
+    content: "\f16a";
+    color: #261e58;
+    text-rendering: auto;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+    transform: translate(0, 0);
+    display: block;
+    position: absolute;
+    font-size: 40px;
+    opacity: 0.8;
+    top: 40%;
+    left: 43%;
+    z-index: 4;
+}
+#videos .video_thumbnail p a:hover::before {
+    color: #FBB800;
+    opacity: 1;
+}
+/* Tab Style
+------------- */
+.tab-content {
+    padding: 20px;
+    text-align: left;
+}
+.nav-tabs > li > a {
+    background: #dedede;
+    border: 1px solid transparent;
+    border-bottom: none;
+    padding: 10px 20px;
+    color: #fff;
+}
+.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
+    color: #002b3c;
+}
+.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus, .nav-tabs > li a:hover {
+    background: #ffffff;
+    border: 1px solid #eeeeee;
+    border-bottom: none;
+    color: #002b3c;
+}
+.nav-tabs > li > a {
+  text-transform: uppercase;
+  font-size: 14px;
+}
+.tab-content img, .arcadia-content img{
+	margin: 40px 0;
+}
+/* Table Style
+--------------- */
+.table>tbody>tr>td {text-align: left;} 
+/* Accordion Style
+--------------- */
+.dropdown_content {
+	margin-bottom: 20px;
+}
+.accordion h3 {
+	color: #FBB800;
+	margin-bottom: 5px; 
+}
+.dropdown_content .fa-plus, .dropdown_content .fa-caret-down {
+    float: right;
+    font-size: 25px;
+    font-weight: initial;
+}
+.next-section .caret {
+margin-top: -87px;
+border-top: 20px solid;
+border-right: 45px solid rgba(0, 0, 0, 0);
+border-left: 45px solid rgba(0, 0, 0, 0);
+text-align: center;
+}
+.dropdown_content .accordion-group {
+    border-bottom: 1px solid #dedede;
+    padding: 20px 0;
+}
+.dropdown_content .accordion-inner {
+    padding-top: 20px;
+}
+/* Responsive
+------------- */
+@media only screen and (max-width: 767px) {
+.row img.responsive {    
+    width: 100%;
+    height: 100%;
+}
+.row img {    
+  padding: 20px 0;
+}
+.navbar-brand {padding-left: .75rem;}
+h1 {font-size: 31px;}
+h4 {font-size: 20px;}
+.title {font-size: 28px;}
+.btn {padding: 8px 18px;}
+.span-right {margin-right: 4px;}
+}
\ No newline at end of file
diff --git a/common_assets/images/logos/favicon_acceleo.ico b/common_assets/images/logos/favicon_acceleo.ico
new file mode 100644
index 0000000..1b951cc
--- /dev/null
+++ b/common_assets/images/logos/favicon_acceleo.ico
Binary files differ
diff --git a/common_assets/images/logos/icon_acceleo.png b/common_assets/images/logos/icon_acceleo.png
new file mode 100644
index 0000000..7ab56bf
--- /dev/null
+++ b/common_assets/images/logos/icon_acceleo.png
Binary files differ
diff --git a/common_assets/images/logos/logo-eclipse-foundation.png b/common_assets/images/logos/logo-eclipse-foundation.png
new file mode 100755
index 0000000..b03e103
--- /dev/null
+++ b/common_assets/images/logos/logo-eclipse-foundation.png
Binary files differ
diff --git a/common_assets/images/logos/logo_acceleo.png b/common_assets/images/logos/logo_acceleo.png
new file mode 100644
index 0000000..4231444
--- /dev/null
+++ b/common_assets/images/logos/logo_acceleo.png
Binary files differ
diff --git a/common_assets/images/logos/logo_emf.jpg b/common_assets/images/logos/logo_emf.jpg
new file mode 100644
index 0000000..e7b2dc9
--- /dev/null
+++ b/common_assets/images/logos/logo_emf.jpg
Binary files differ
diff --git a/common_assets/images/logos/logo_emf.png b/common_assets/images/logos/logo_emf.png
new file mode 100644
index 0000000..4b549cf
--- /dev/null
+++ b/common_assets/images/logos/logo_emf.png
Binary files differ
diff --git a/common_assets/images/logos/logo_obeo.png b/common_assets/images/logos/logo_obeo.png
new file mode 100644
index 0000000..28ab21f
--- /dev/null
+++ b/common_assets/images/logos/logo_obeo.png
Binary files differ
diff --git a/common_assets/images/logos/logo_sirius.png b/common_assets/images/logos/logo_sirius.png
new file mode 100644
index 0000000..003ec55
--- /dev/null
+++ b/common_assets/images/logos/logo_sirius.png
Binary files differ
diff --git a/common_assets/js/magnific-popup.min.js b/common_assets/js/magnific-popup.min.js
new file mode 100644
index 0000000..21de27e
--- /dev/null
+++ b/common_assets/js/magnific-popup.min.js
@@ -0,0 +1,4 @@
+/*! Magnific Popup - v0.9.7 - 2013-10-10
+* http://dimsemenov.com/plugins/magnific-popup/
+* Copyright (c) 2013 Dmitry Semenov; */
+(function(e){var t,n,i,o,r,a,s,l="Close",c="BeforeClose",d="AfterClose",u="BeforeAppend",p="MarkupParse",f="Open",m="Change",g="mfp",v="."+g,h="mfp-ready",C="mfp-removing",y="mfp-prevent-close",w=function(){},b=!!window.jQuery,I=e(window),x=function(e,n){t.ev.on(g+e+v,n)},k=function(t,n,i,o){var r=document.createElement("div");return r.className="mfp-"+t,i&&(r.innerHTML=i),o?n&&n.appendChild(r):(r=e(r),n&&r.appendTo(n)),r},T=function(n,i){t.ev.triggerHandler(g+n,i),t.st.callbacks&&(n=n.charAt(0).toLowerCase()+n.slice(1),t.st.callbacks[n]&&t.st.callbacks[n].apply(t,e.isArray(i)?i:[i]))},E=function(){(t.st.focus?t.content.find(t.st.focus).eq(0):t.wrap).focus()},S=function(n){return n===s&&t.currTemplate.closeBtn||(t.currTemplate.closeBtn=e(t.st.closeMarkup.replace("%title%",t.st.tClose)),s=n),t.currTemplate.closeBtn},P=function(){e.magnificPopup.instance||(t=new w,t.init(),e.magnificPopup.instance=t)},_=function(n){if(!e(n).hasClass(y)){var i=t.st.closeOnContentClick,o=t.st.closeOnBgClick;if(i&&o)return!0;if(!t.content||e(n).hasClass("mfp-close")||t.preloader&&n===t.preloader[0])return!0;if(n===t.content[0]||e.contains(t.content[0],n)){if(i)return!0}else if(o&&e.contains(document,n))return!0;return!1}},O=function(){var e=document.createElement("p").style,t=["ms","O","Moz","Webkit"];if(void 0!==e.transition)return!0;for(;t.length;)if(t.pop()+"Transition"in e)return!0;return!1};w.prototype={constructor:w,init:function(){var n=navigator.appVersion;t.isIE7=-1!==n.indexOf("MSIE 7."),t.isIE8=-1!==n.indexOf("MSIE 8."),t.isLowIE=t.isIE7||t.isIE8,t.isAndroid=/android/gi.test(n),t.isIOS=/iphone|ipad|ipod/gi.test(n),t.supportsTransition=O(),t.probablyMobile=t.isAndroid||t.isIOS||/(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent),i=e(document.body),o=e(document),t.popupsCache={}},open:function(n){var i;if(n.isObj===!1){t.items=n.items.toArray(),t.index=0;var r,s=n.items;for(i=0;s.length>i;i++)if(r=s[i],r.parsed&&(r=r.el[0]),r===n.el[0]){t.index=i;break}}else t.items=e.isArray(n.items)?n.items:[n.items],t.index=n.index||0;if(t.isOpen)return t.updateItemHTML(),void 0;t.types=[],a="",t.ev=n.mainEl&&n.mainEl.length?n.mainEl.eq(0):o,n.key?(t.popupsCache[n.key]||(t.popupsCache[n.key]={}),t.currTemplate=t.popupsCache[n.key]):t.currTemplate={},t.st=e.extend(!0,{},e.magnificPopup.defaults,n),t.fixedContentPos="auto"===t.st.fixedContentPos?!t.probablyMobile:t.st.fixedContentPos,t.st.modal&&(t.st.closeOnContentClick=!1,t.st.closeOnBgClick=!1,t.st.showCloseBtn=!1,t.st.enableEscapeKey=!1),t.bgOverlay||(t.bgOverlay=k("bg").on("click"+v,function(){t.close()}),t.wrap=k("wrap").attr("tabindex",-1).on("click"+v,function(e){_(e.target)&&t.close()}),t.container=k("container",t.wrap)),t.contentContainer=k("content"),t.st.preloader&&(t.preloader=k("preloader",t.container,t.st.tLoading));var l=e.magnificPopup.modules;for(i=0;l.length>i;i++){var c=l[i];c=c.charAt(0).toUpperCase()+c.slice(1),t["init"+c].call(t)}T("BeforeOpen"),t.st.showCloseBtn&&(t.st.closeBtnInside?(x(p,function(e,t,n,i){n.close_replaceWith=S(i.type)}),a+=" mfp-close-btn-in"):t.wrap.append(S())),t.st.alignTop&&(a+=" mfp-align-top"),t.fixedContentPos?t.wrap.css({overflow:t.st.overflowY,overflowX:"hidden",overflowY:t.st.overflowY}):t.wrap.css({top:I.scrollTop(),position:"absolute"}),(t.st.fixedBgPos===!1||"auto"===t.st.fixedBgPos&&!t.fixedContentPos)&&t.bgOverlay.css({height:o.height(),position:"absolute"}),t.st.enableEscapeKey&&o.on("keyup"+v,function(e){27===e.keyCode&&t.close()}),I.on("resize"+v,function(){t.updateSize()}),t.st.closeOnContentClick||(a+=" mfp-auto-cursor"),a&&t.wrap.addClass(a);var d=t.wH=I.height(),u={};if(t.fixedContentPos&&t._hasScrollBar(d)){var m=t._getScrollbarSize();m&&(u.paddingRight=m)}t.fixedContentPos&&(t.isIE7?e("body, html").css("overflow","hidden"):u.overflow="hidden");var g=t.st.mainClass;return t.isIE7&&(g+=" mfp-ie7"),g&&t._addClassToMFP(g),t.updateItemHTML(),T("BuildControls"),e("html").css(u),t.bgOverlay.add(t.wrap).prependTo(document.body),t._lastFocusedEl=document.activeElement,setTimeout(function(){t.content?(t._addClassToMFP(h),E()):t.bgOverlay.addClass(h),o.on("focusin"+v,function(n){return n.target===t.wrap[0]||e.contains(t.wrap[0],n.target)?void 0:(E(),!1)})},16),t.isOpen=!0,t.updateSize(d),T(f),n},close:function(){t.isOpen&&(T(c),t.isOpen=!1,t.st.removalDelay&&!t.isLowIE&&t.supportsTransition?(t._addClassToMFP(C),setTimeout(function(){t._close()},t.st.removalDelay)):t._close())},_close:function(){T(l);var n=C+" "+h+" ";if(t.bgOverlay.detach(),t.wrap.detach(),t.container.empty(),t.st.mainClass&&(n+=t.st.mainClass+" "),t._removeClassFromMFP(n),t.fixedContentPos){var i={paddingRight:""};t.isIE7?e("body, html").css("overflow",""):i.overflow="",e("html").css(i)}o.off("keyup"+v+" focusin"+v),t.ev.off(v),t.wrap.attr("class","mfp-wrap").removeAttr("style"),t.bgOverlay.attr("class","mfp-bg"),t.container.attr("class","mfp-container"),!t.st.showCloseBtn||t.st.closeBtnInside&&t.currTemplate[t.currItem.type]!==!0||t.currTemplate.closeBtn&&t.currTemplate.closeBtn.detach(),t._lastFocusedEl&&e(t._lastFocusedEl).focus(),t.currItem=null,t.content=null,t.currTemplate=null,t.prevHeight=0,T(d)},updateSize:function(e){if(t.isIOS){var n=document.documentElement.clientWidth/window.innerWidth,i=window.innerHeight*n;t.wrap.css("height",i),t.wH=i}else t.wH=e||I.height();t.fixedContentPos||t.wrap.css("height",t.wH),T("Resize")},updateItemHTML:function(){var n=t.items[t.index];t.contentContainer.detach(),t.content&&t.content.detach(),n.parsed||(n=t.parseEl(t.index));var i=n.type;if(T("BeforeChange",[t.currItem?t.currItem.type:"",i]),t.currItem=n,!t.currTemplate[i]){var o=t.st[i]?t.st[i].markup:!1;T("FirstMarkupParse",o),t.currTemplate[i]=o?e(o):!0}r&&r!==n.type&&t.container.removeClass("mfp-"+r+"-holder");var a=t["get"+i.charAt(0).toUpperCase()+i.slice(1)](n,t.currTemplate[i]);t.appendContent(a,i),n.preloaded=!0,T(m,n),r=n.type,t.container.prepend(t.contentContainer),T("AfterChange")},appendContent:function(e,n){t.content=e,e?t.st.showCloseBtn&&t.st.closeBtnInside&&t.currTemplate[n]===!0?t.content.find(".mfp-close").length||t.content.append(S()):t.content=e:t.content="",T(u),t.container.addClass("mfp-"+n+"-holder"),t.contentContainer.append(t.content)},parseEl:function(n){var i=t.items[n],o=i.type;if(i=i.tagName?{el:e(i)}:{data:i,src:i.src},i.el){for(var r=t.types,a=0;r.length>a;a++)if(i.el.hasClass("mfp-"+r[a])){o=r[a];break}i.src=i.el.attr("data-mfp-src"),i.src||(i.src=i.el.attr("href"))}return i.type=o||t.st.type||"inline",i.index=n,i.parsed=!0,t.items[n]=i,T("ElementParse",i),t.items[n]},addGroup:function(e,n){var i=function(i){i.mfpEl=this,t._openClick(i,e,n)};n||(n={});var o="click.magnificPopup";n.mainEl=e,n.items?(n.isObj=!0,e.off(o).on(o,i)):(n.isObj=!1,n.delegate?e.off(o).on(o,n.delegate,i):(n.items=e,e.off(o).on(o,i)))},_openClick:function(n,i,o){var r=void 0!==o.midClick?o.midClick:e.magnificPopup.defaults.midClick;if(r||2!==n.which&&!n.ctrlKey&&!n.metaKey){var a=void 0!==o.disableOn?o.disableOn:e.magnificPopup.defaults.disableOn;if(a)if(e.isFunction(a)){if(!a.call(t))return!0}else if(a>I.width())return!0;n.type&&(n.preventDefault(),t.isOpen&&n.stopPropagation()),o.el=e(n.mfpEl),o.delegate&&(o.items=i.find(o.delegate)),t.open(o)}},updateStatus:function(e,i){if(t.preloader){n!==e&&t.container.removeClass("mfp-s-"+n),i||"loading"!==e||(i=t.st.tLoading);var o={status:e,text:i};T("UpdateStatus",o),e=o.status,i=o.text,t.preloader.html(i),t.preloader.find("a").on("click",function(e){e.stopImmediatePropagation()}),t.container.addClass("mfp-s-"+e),n=e}},_addClassToMFP:function(e){t.bgOverlay.addClass(e),t.wrap.addClass(e)},_removeClassFromMFP:function(e){this.bgOverlay.removeClass(e),t.wrap.removeClass(e)},_hasScrollBar:function(e){return(t.isIE7?o.height():document.body.scrollHeight)>(e||I.height())},_parseMarkup:function(t,n,i){var o;i.data&&(n=e.extend(i.data,n)),T(p,[t,n,i]),e.each(n,function(e,n){if(void 0===n||n===!1)return!0;if(o=e.split("_"),o.length>1){var i=t.find(v+"-"+o[0]);if(i.length>0){var r=o[1];"replaceWith"===r?i[0]!==n[0]&&i.replaceWith(n):"img"===r?i.is("img")?i.attr("src",n):i.replaceWith('<img src="'+n+'" class="'+i.attr("class")+'" />'):i.attr(o[1],n)}}else t.find(v+"-"+e).html(n)})},_getScrollbarSize:function(){if(void 0===t.scrollbarSize){var e=document.createElement("div");e.id="mfp-sbm",e.style.cssText="width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;",document.body.appendChild(e),t.scrollbarSize=e.offsetWidth-e.clientWidth,document.body.removeChild(e)}return t.scrollbarSize}},e.magnificPopup={instance:null,proto:w.prototype,modules:[],open:function(t,n){return P(),t=t?e.extend(!0,{},t):{},t.isObj=!0,t.index=n||0,this.instance.open(t)},close:function(){return e.magnificPopup.instance&&e.magnificPopup.instance.close()},registerModule:function(t,n){n.options&&(e.magnificPopup.defaults[t]=n.options),e.extend(this.proto,n.proto),this.modules.push(t)},defaults:{disableOn:0,key:null,midClick:!1,mainClass:"",preloader:!0,focus:"",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:!0,showCloseBtn:!0,enableEscapeKey:!0,modal:!1,alignTop:!1,removalDelay:0,fixedContentPos:"auto",fixedBgPos:"auto",overflowY:"auto",closeMarkup:'<button title="%title%" type="button" class="mfp-close">&times;</button>',tClose:"Close (Esc)",tLoading:"Loading..."}},e.fn.magnificPopup=function(n){P();var i=e(this);if("string"==typeof n)if("open"===n){var o,r=b?i.data("magnificPopup"):i[0].magnificPopup,a=parseInt(arguments[1],10)||0;r.items?o=r.items[a]:(o=i,r.delegate&&(o=o.find(r.delegate)),o=o.eq(a)),t._openClick({mfpEl:o},i,r)}else t.isOpen&&t[n].apply(t,Array.prototype.slice.call(arguments,1));else n=e.extend(!0,{},n),b?i.data("magnificPopup",n):i[0].magnificPopup=n,t.addGroup(i,n);return i};var z,M,B,H="inline",L=function(){B&&(M.after(B.addClass(z)).detach(),B=null)};e.magnificPopup.registerModule(H,{options:{hiddenClass:"hide",markup:"",tNotFound:"Content not found"},proto:{initInline:function(){t.types.push(H),x(l+"."+H,function(){L()})},getInline:function(n,i){if(L(),n.src){var o=t.st.inline,r=e(n.src);if(r.length){var a=r[0].parentNode;a&&a.tagName&&(M||(z=o.hiddenClass,M=k(z),z="mfp-"+z),B=r.after(M).detach().removeClass(z)),t.updateStatus("ready")}else t.updateStatus("error",o.tNotFound),r=e("<div>");return n.inlineElement=r,r}return t.updateStatus("ready"),t._parseMarkup(i,{},n),i}}});var A,F="ajax",j=function(){A&&i.removeClass(A)},N=function(){j(),t.req&&t.req.abort()};e.magnificPopup.registerModule(F,{options:{settings:null,cursor:"mfp-ajax-cur",tError:'<a href="%url%">The content</a> could not be loaded.'},proto:{initAjax:function(){t.types.push(F),A=t.st.ajax.cursor,x(l+"."+F,N),x("BeforeChange."+F,N)},getAjax:function(n){A&&i.addClass(A),t.updateStatus("loading");var o=e.extend({url:n.src,success:function(i,o,r){var a={data:i,xhr:r};T("ParseAjax",a),t.appendContent(e(a.data),F),n.finished=!0,j(),E(),setTimeout(function(){t.wrap.addClass(h)},16),t.updateStatus("ready"),T("AjaxContentAdded")},error:function(){j(),n.finished=n.loadError=!0,t.updateStatus("error",t.st.ajax.tError.replace("%url%",n.src))}},t.st.ajax.settings);return t.req=e.ajax(o),""}}});var W,R=function(n){if(n.data&&void 0!==n.data.title)return n.data.title;var i=t.st.image.titleSrc;if(i){if(e.isFunction(i))return i.call(t,n);if(n.el)return n.el.attr(i)||""}return""};e.magnificPopup.registerModule("image",{options:{markup:'<div class="mfp-figure"><div class="mfp-close"></div><div class="mfp-img"></div><div class="mfp-bottom-bar"><div class="mfp-title"></div><div class="mfp-counter"></div></div></div>',cursor:"mfp-zoom-out-cur",titleSrc:"title",verticalFit:!0,tError:'<a href="%url%">The image</a> could not be loaded.'},proto:{initImage:function(){var e=t.st.image,n=".image";t.types.push("image"),x(f+n,function(){"image"===t.currItem.type&&e.cursor&&i.addClass(e.cursor)}),x(l+n,function(){e.cursor&&i.removeClass(e.cursor),I.off("resize"+v)}),x("Resize"+n,t.resizeImage),t.isLowIE&&x("AfterChange",t.resizeImage)},resizeImage:function(){var e=t.currItem;if(e&&e.img&&t.st.image.verticalFit){var n=0;t.isLowIE&&(n=parseInt(e.img.css("padding-top"),10)+parseInt(e.img.css("padding-bottom"),10)),e.img.css("max-height",t.wH-n)}},_onImageHasSize:function(e){e.img&&(e.hasSize=!0,W&&clearInterval(W),e.isCheckingImgSize=!1,T("ImageHasSize",e),e.imgHidden&&(t.content&&t.content.removeClass("mfp-loading"),e.imgHidden=!1))},findImageSize:function(e){var n=0,i=e.img[0],o=function(r){W&&clearInterval(W),W=setInterval(function(){return i.naturalWidth>0?(t._onImageHasSize(e),void 0):(n>200&&clearInterval(W),n++,3===n?o(10):40===n?o(50):100===n&&o(500),void 0)},r)};o(1)},getImage:function(n,i){var o=0,r=function(){n&&(n.img[0].complete?(n.img.off(".mfploader"),n===t.currItem&&(t._onImageHasSize(n),t.updateStatus("ready")),n.hasSize=!0,n.loaded=!0,T("ImageLoadComplete")):(o++,200>o?setTimeout(r,100):a()))},a=function(){n&&(n.img.off(".mfploader"),n===t.currItem&&(t._onImageHasSize(n),t.updateStatus("error",s.tError.replace("%url%",n.src))),n.hasSize=!0,n.loaded=!0,n.loadError=!0)},s=t.st.image,l=i.find(".mfp-img");if(l.length){var c=document.createElement("img");c.className="mfp-img",n.img=e(c).on("load.mfploader",r).on("error.mfploader",a),c.src=n.src,l.is("img")&&(n.img=n.img.clone()),n.img[0].naturalWidth>0&&(n.hasSize=!0)}return t._parseMarkup(i,{title:R(n),img_replaceWith:n.img},n),t.resizeImage(),n.hasSize?(W&&clearInterval(W),n.loadError?(i.addClass("mfp-loading"),t.updateStatus("error",s.tError.replace("%url%",n.src))):(i.removeClass("mfp-loading"),t.updateStatus("ready")),i):(t.updateStatus("loading"),n.loading=!0,n.hasSize||(n.imgHidden=!0,i.addClass("mfp-loading"),t.findImageSize(n)),i)}}});var Z,q=function(){return void 0===Z&&(Z=void 0!==document.createElement("p").style.MozTransform),Z};e.magnificPopup.registerModule("zoom",{options:{enabled:!1,easing:"ease-in-out",duration:300,opener:function(e){return e.is("img")?e:e.find("img")}},proto:{initZoom:function(){var e,n=t.st.zoom,i=".zoom";if(n.enabled&&t.supportsTransition){var o,r,a=n.duration,s=function(e){var t=e.clone().removeAttr("style").removeAttr("class").addClass("mfp-animated-image"),i="all "+n.duration/1e3+"s "+n.easing,o={position:"fixed",zIndex:9999,left:0,top:0,"-webkit-backface-visibility":"hidden"},r="transition";return o["-webkit-"+r]=o["-moz-"+r]=o["-o-"+r]=o[r]=i,t.css(o),t},d=function(){t.content.css("visibility","visible")};x("BuildControls"+i,function(){if(t._allowZoom()){if(clearTimeout(o),t.content.css("visibility","hidden"),e=t._getItemToZoom(),!e)return d(),void 0;r=s(e),r.css(t._getOffset()),t.wrap.append(r),o=setTimeout(function(){r.css(t._getOffset(!0)),o=setTimeout(function(){d(),setTimeout(function(){r.remove(),e=r=null,T("ZoomAnimationEnded")},16)},a)},16)}}),x(c+i,function(){if(t._allowZoom()){if(clearTimeout(o),t.st.removalDelay=a,!e){if(e=t._getItemToZoom(),!e)return;r=s(e)}r.css(t._getOffset(!0)),t.wrap.append(r),t.content.css("visibility","hidden"),setTimeout(function(){r.css(t._getOffset())},16)}}),x(l+i,function(){t._allowZoom()&&(d(),r&&r.remove(),e=null)})}},_allowZoom:function(){return"image"===t.currItem.type},_getItemToZoom:function(){return t.currItem.hasSize?t.currItem.img:!1},_getOffset:function(n){var i;i=n?t.currItem.img:t.st.zoom.opener(t.currItem.el||t.currItem);var o=i.offset(),r=parseInt(i.css("padding-top"),10),a=parseInt(i.css("padding-bottom"),10);o.top-=e(window).scrollTop()-r;var s={width:i.width(),height:(b?i.innerHeight():i[0].offsetHeight)-a-r};return q()?s["-moz-transform"]=s.transform="translate("+o.left+"px,"+o.top+"px)":(s.left=o.left,s.top=o.top),s}}});var D="iframe",K="//about:blank",Y=function(e){if(t.currTemplate[D]){var n=t.currTemplate[D].find("iframe");n.length&&(e||(n[0].src=K),t.isIE8&&n.css("display",e?"block":"none"))}};e.magnificPopup.registerModule(D,{options:{markup:'<div class="mfp-iframe-scaler"><div class="mfp-close"></div><iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe></div>',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){t.types.push(D),x("BeforeChange",function(e,t,n){t!==n&&(t===D?Y():n===D&&Y(!0))}),x(l+"."+D,function(){Y()})},getIframe:function(n,i){var o=n.src,r=t.st.iframe;e.each(r.patterns,function(){return o.indexOf(this.index)>-1?(this.id&&(o="string"==typeof this.id?o.substr(o.lastIndexOf(this.id)+this.id.length,o.length):this.id.call(this,o)),o=this.src.replace("%id%",o),!1):void 0});var a={};return r.srcAction&&(a[r.srcAction]=o),t._parseMarkup(i,a,n),t.updateStatus("ready"),i}}});var U=function(e){var n=t.items.length;return e>n-1?e-n:0>e?n+e:e},G=function(e,t,n){return e.replace(/%curr%/gi,t+1).replace(/%total%/gi,n)};e.magnificPopup.registerModule("gallery",{options:{enabled:!1,arrowMarkup:'<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var n=t.st.gallery,i=".mfp-gallery",r=Boolean(e.fn.mfpFastClick);return t.direction=!0,n&&n.enabled?(a+=" mfp-gallery",x(f+i,function(){n.navigateByImgClick&&t.wrap.on("click"+i,".mfp-img",function(){return t.items.length>1?(t.next(),!1):void 0}),o.on("keydown"+i,function(e){37===e.keyCode?t.prev():39===e.keyCode&&t.next()})}),x("UpdateStatus"+i,function(e,n){n.text&&(n.text=G(n.text,t.currItem.index,t.items.length))}),x(p+i,function(e,i,o,r){var a=t.items.length;o.counter=a>1?G(n.tCounter,r.index,a):""}),x("BuildControls"+i,function(){if(t.items.length>1&&n.arrows&&!t.arrowLeft){var i=n.arrowMarkup,o=t.arrowLeft=e(i.replace(/%title%/gi,n.tPrev).replace(/%dir%/gi,"left")).addClass(y),a=t.arrowRight=e(i.replace(/%title%/gi,n.tNext).replace(/%dir%/gi,"right")).addClass(y),s=r?"mfpFastClick":"click";o[s](function(){t.prev()}),a[s](function(){t.next()}),t.isIE7&&(k("b",o[0],!1,!0),k("a",o[0],!1,!0),k("b",a[0],!1,!0),k("a",a[0],!1,!0)),t.container.append(o.add(a))}}),x(m+i,function(){t._preloadTimeout&&clearTimeout(t._preloadTimeout),t._preloadTimeout=setTimeout(function(){t.preloadNearbyImages(),t._preloadTimeout=null},16)}),x(l+i,function(){o.off(i),t.wrap.off("click"+i),t.arrowLeft&&r&&t.arrowLeft.add(t.arrowRight).destroyMfpFastClick(),t.arrowRight=t.arrowLeft=null}),void 0):!1},next:function(){t.direction=!0,t.index=U(t.index+1),t.updateItemHTML()},prev:function(){t.direction=!1,t.index=U(t.index-1),t.updateItemHTML()},goTo:function(e){t.direction=e>=t.index,t.index=e,t.updateItemHTML()},preloadNearbyImages:function(){var e,n=t.st.gallery.preload,i=Math.min(n[0],t.items.length),o=Math.min(n[1],t.items.length);for(e=1;(t.direction?o:i)>=e;e++)t._preloadItem(t.index+e);for(e=1;(t.direction?i:o)>=e;e++)t._preloadItem(t.index-e)},_preloadItem:function(n){if(n=U(n),!t.items[n].preloaded){var i=t.items[n];i.parsed||(i=t.parseEl(n)),T("LazyLoad",i),"image"===i.type&&(i.img=e('<img class="mfp-img" />').on("load.mfploader",function(){i.hasSize=!0}).on("error.mfploader",function(){i.hasSize=!0,i.loadError=!0,T("LazyLoadError",i)}).attr("src",i.src)),i.preloaded=!0}}}});var X="retina";e.magnificPopup.registerModule(X,{options:{replaceSrc:function(e){return e.src.replace(/\.\w+$/,function(e){return"@2x"+e})},ratio:1},proto:{initRetina:function(){if(window.devicePixelRatio>1){var e=t.st.retina,n=e.ratio;n=isNaN(n)?n():n,n>1&&(x("ImageHasSize."+X,function(e,t){t.img.css({"max-width":t.img[0].naturalWidth/n,width:"100%"})}),x("ElementParse."+X,function(t,i){i.src=e.replaceSrc(i,n)}))}}}}),function(){var t=1e3,n="ontouchstart"in window,i=function(){I.off("touchmove"+r+" touchend"+r)},o="mfpFastClick",r="."+o;e.fn.mfpFastClick=function(o){return e(this).each(function(){var a,s=e(this);if(n){var l,c,d,u,p,f;s.on("touchstart"+r,function(e){u=!1,f=1,p=e.originalEvent?e.originalEvent.touches[0]:e.touches[0],c=p.clientX,d=p.clientY,I.on("touchmove"+r,function(e){p=e.originalEvent?e.originalEvent.touches:e.touches,f=p.length,p=p[0],(Math.abs(p.clientX-c)>10||Math.abs(p.clientY-d)>10)&&(u=!0,i())}).on("touchend"+r,function(e){i(),u||f>1||(a=!0,e.preventDefault(),clearTimeout(l),l=setTimeout(function(){a=!1},t),o())})})}s.on("click"+r,function(){a||o()})})},e.fn.destroyMfpFastClick=function(){e(this).off("touchstart"+r+" click"+r),n&&I.off("touchmove"+r+" touchend"+r)}}()})(window.jQuery||window.Zepto);
\ No newline at end of file
diff --git a/common_assets/js/magnific-popup.video.js b/common_assets/js/magnific-popup.video.js
new file mode 100644
index 0000000..230e799
--- /dev/null
+++ b/common_assets/js/magnific-popup.video.js
@@ -0,0 +1 @@
+jQuery(document).ready(function($){$('.popup-youtube').magnificPopup({disableOn:700,type:'iframe',mainClass:'mfp-fade',removalDelay:160,preloader:!1,fixedContentPos:!1});$('.popup-gallery').magnificPopup({delegate:'a',type:'image',tLoading:'Loading image #%curr%...',mainClass:'mfp-img-mobile',gallery:{enabled:!0,navigateByImgClick:!0,preload:[0,1]},image:{tError:'<a href="%url%">The image #%curr%</a> could not be loaded.',titleSrc:function(item){return item.el.attr('title')+' '}}});$('.image-popup-vertical-fit').magnificPopup({type:'image',closeOnContentClick:!0,mainClass:'mfp-img-mobile',image:{verticalFit:!0}});$('.image-popup-fit-width').magnificPopup({type:'image',closeOnContentClick:!0,image:{verticalFit:!1}});$('.image-popup-no-margins').magnificPopup({type:'image',closeOnContentClick:!0,closeBtnInside:!1,fixedContentPos:!0,mainClass:'mfp-no-margins mfp-with-zoom',image:{verticalFit:!0},zoom:{enabled:!0,duration:300}})})
\ No newline at end of file
diff --git a/common_assets/js/wow.min.js b/common_assets/js/wow.min.js
new file mode 100644
index 0000000..9b4823c
--- /dev/null
+++ b/common_assets/js/wow.min.js
@@ -0,0 +1,2 @@
+/*! WOW - v1.0.2 - 2014-12-29
+* Copyright (c) 2014 Matthieu Aussaguel; Licensed MIT */(function(){var a,b,c,d,e,f=function(a,b){return function(){return a.apply(b,arguments)}},g=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};b=function(){function a(){}return a.prototype.extend=function(a,b){var c,d;for(c in b)d=b[c],null==a[c]&&(a[c]=d);return a},a.prototype.isMobile=function(a){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(a)},a.prototype.addEvent=function(a,b,c){return null!=a.addEventListener?a.addEventListener(b,c,!1):null!=a.attachEvent?a.attachEvent("on"+b,c):a[b]=c},a.prototype.removeEvent=function(a,b,c){return null!=a.removeEventListener?a.removeEventListener(b,c,!1):null!=a.detachEvent?a.detachEvent("on"+b,c):delete a[b]},a.prototype.innerHeight=function(){return"innerHeight"in window?window.innerHeight:document.documentElement.clientHeight},a}(),c=this.WeakMap||this.MozWeakMap||(c=function(){function a(){this.keys=[],this.values=[]}return a.prototype.get=function(a){var b,c,d,e,f;for(f=this.keys,b=d=0,e=f.length;e>d;b=++d)if(c=f[b],c===a)return this.values[b]},a.prototype.set=function(a,b){var c,d,e,f,g;for(g=this.keys,c=e=0,f=g.length;f>e;c=++e)if(d=g[c],d===a)return void(this.values[c]=b);return this.keys.push(a),this.values.push(b)},a}()),a=this.MutationObserver||this.WebkitMutationObserver||this.MozMutationObserver||(a=function(){function a(){"undefined"!=typeof console&&null!==console&&console.warn("MutationObserver is not supported by your browser."),"undefined"!=typeof console&&null!==console&&console.warn("WOW.js cannot detect dom mutations, please call .sync() after loading new content.")}return a.notSupported=!0,a.prototype.observe=function(){},a}()),d=this.getComputedStyle||function(a){return this.getPropertyValue=function(b){var c;return"float"===b&&(b="styleFloat"),e.test(b)&&b.replace(e,function(a,b){return b.toUpperCase()}),(null!=(c=a.currentStyle)?c[b]:void 0)||null},this},e=/(\-([a-z]){1})/g,this.WOW=function(){function e(a){null==a&&(a={}),this.scrollCallback=f(this.scrollCallback,this),this.scrollHandler=f(this.scrollHandler,this),this.start=f(this.start,this),this.scrolled=!0,this.config=this.util().extend(a,this.defaults),this.animationNameCache=new c}return e.prototype.defaults={boxClass:"wow",animateClass:"animated",offset:0,mobile:!0,live:!0},e.prototype.init=function(){var a;return this.element=window.document.documentElement,"interactive"===(a=document.readyState)||"complete"===a?this.start():this.util().addEvent(document,"DOMContentLoaded",this.start),this.finished=[]},e.prototype.start=function(){var b,c,d,e;if(this.stopped=!1,this.boxes=function(){var a,c,d,e;for(d=this.element.querySelectorAll("."+this.config.boxClass),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(b);return e}.call(this),this.all=function(){var a,c,d,e;for(d=this.boxes,e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(b);return e}.call(this),this.boxes.length)if(this.disabled())this.resetStyle();else for(e=this.boxes,c=0,d=e.length;d>c;c++)b=e[c],this.applyStyle(b,!0);return this.disabled()||(this.util().addEvent(window,"scroll",this.scrollHandler),this.util().addEvent(window,"resize",this.scrollHandler),this.interval=setInterval(this.scrollCallback,50)),this.config.live?new a(function(a){return function(b){var c,d,e,f,g;for(g=[],e=0,f=b.length;f>e;e++)d=b[e],g.push(function(){var a,b,e,f;for(e=d.addedNodes||[],f=[],a=0,b=e.length;b>a;a++)c=e[a],f.push(this.doSync(c));return f}.call(a));return g}}(this)).observe(document.body,{childList:!0,subtree:!0}):void 0},e.prototype.stop=function(){return this.stopped=!0,this.util().removeEvent(window,"scroll",this.scrollHandler),this.util().removeEvent(window,"resize",this.scrollHandler),null!=this.interval?clearInterval(this.interval):void 0},e.prototype.sync=function(){return a.notSupported?this.doSync(this.element):void 0},e.prototype.doSync=function(a){var b,c,d,e,f;if(null==a&&(a=this.element),1===a.nodeType){for(a=a.parentNode||a,e=a.querySelectorAll("."+this.config.boxClass),f=[],c=0,d=e.length;d>c;c++)b=e[c],g.call(this.all,b)<0?(this.boxes.push(b),this.all.push(b),this.stopped||this.disabled()?this.resetStyle():this.applyStyle(b,!0),f.push(this.scrolled=!0)):f.push(void 0);return f}},e.prototype.show=function(a){return this.applyStyle(a),a.className=""+a.className+" "+this.config.animateClass},e.prototype.applyStyle=function(a,b){var c,d,e;return d=a.getAttribute("data-wow-duration"),c=a.getAttribute("data-wow-delay"),e=a.getAttribute("data-wow-iteration"),this.animate(function(f){return function(){return f.customStyle(a,b,d,c,e)}}(this))},e.prototype.animate=function(){return"requestAnimationFrame"in window?function(a){return window.requestAnimationFrame(a)}:function(a){return a()}}(),e.prototype.resetStyle=function(){var a,b,c,d,e;for(d=this.boxes,e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(a.style.visibility="visible");return e},e.prototype.customStyle=function(a,b,c,d,e){return b&&this.cacheAnimationName(a),a.style.visibility=b?"hidden":"visible",c&&this.vendorSet(a.style,{animationDuration:c}),d&&this.vendorSet(a.style,{animationDelay:d}),e&&this.vendorSet(a.style,{animationIterationCount:e}),this.vendorSet(a.style,{animationName:b?"none":this.cachedAnimationName(a)}),a},e.prototype.vendors=["moz","webkit"],e.prototype.vendorSet=function(a,b){var c,d,e,f;f=[];for(c in b)d=b[c],a[""+c]=d,f.push(function(){var b,f,g,h;for(g=this.vendors,h=[],b=0,f=g.length;f>b;b++)e=g[b],h.push(a[""+e+c.charAt(0).toUpperCase()+c.substr(1)]=d);return h}.call(this));return f},e.prototype.vendorCSS=function(a,b){var c,e,f,g,h,i;for(e=d(a),c=e.getPropertyCSSValue(b),i=this.vendors,g=0,h=i.length;h>g;g++)f=i[g],c=c||e.getPropertyCSSValue("-"+f+"-"+b);return c},e.prototype.animationName=function(a){var b;try{b=this.vendorCSS(a,"animation-name").cssText}catch(c){b=d(a).getPropertyValue("animation-name")}return"none"===b?"":b},e.prototype.cacheAnimationName=function(a){return this.animationNameCache.set(a,this.animationName(a))},e.prototype.cachedAnimationName=function(a){return this.animationNameCache.get(a)},e.prototype.scrollHandler=function(){return this.scrolled=!0},e.prototype.scrollCallback=function(){var a;return!this.scrolled||(this.scrolled=!1,this.boxes=function(){var b,c,d,e;for(d=this.boxes,e=[],b=0,c=d.length;c>b;b++)a=d[b],a&&(this.isVisible(a)?this.show(a):e.push(a));return e}.call(this),this.boxes.length||this.config.live)?void 0:this.stop()},e.prototype.offsetTop=function(a){for(var b;void 0===a.offsetTop;)a=a.parentNode;for(b=a.offsetTop;a=a.offsetParent;)b+=a.offsetTop;return b},e.prototype.isVisible=function(a){var b,c,d,e,f;return c=a.getAttribute("data-wow-offset")||this.config.offset,f=window.pageYOffset,e=f+Math.min(this.element.clientHeight,this.util().innerHeight())-c,d=this.offsetTop(a),b=d+a.clientHeight,e>=d&&b>=f},e.prototype.util=function(){return null!=this._util?this._util:this._util=new b},e.prototype.disabled=function(){return!this.config.mobile&&this.util().isMobile(navigator.userAgent)},e}()}).call(this);
\ No newline at end of file
diff --git a/developers/_index.html b/developers/_index.html
deleted file mode 100644
index 0ea74ed..0000000
--- a/developers/_index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<div id="midcolumn">
-	<h2>Developers</h2>
-	<div class="contents">
-		<ul>
-			<li>
-				<b><a href="http://www.eclipse.org/projects/project_summary.php?projectid=modeling.acceleo"
-				title="Project Summary">Project Summary</a></b> - About this project.
-			</li>
-			<li>
-				<b><a href="repositoryDetails.php" title="Acceleo Repository Details">Source Code
-				Access</a></b> - get the code from Git!
-			</li>
-			<li>
-				<b><a href="https://dev.eclipse.org/mailman/listinfo/m2t-dev" title="m2t-dev
-				mailing list" rel="nofollow">Developer Mailing List</a></b> - Subscribe to the
-				developer list and get updates about the project's code aspects.
-			</li>
-			<li>
-				<b><a href="http://www.ohloh.net/p/acceleo-eclipse" title="Acceleo at Ohloh">
-				Acceleo at OpenHub</a></b> - Project's code aspects, metrics, comments ratio...
-			</li>
-		</ul>
-		<p>
-			Acceleo is actively looking for project contributors. There are many official and unofficial ways
-			to get involved. Please see <a href="http://wiki.eclipse.org/Acceleo/Wishlist">this wiki page</a> for some
-			ideas, and <a href="http://wiki.eclipse.org/Setting_up_a_development_environment_for_Acceleo">
-			this one</a> for information on how to set up your development environment.
-		</p>
-	</div>
-</div>
\ No newline at end of file
diff --git a/developers/_repositoryDetails.html b/developers/_repositoryDetails.html
deleted file mode 100644
index 9d6ff12..0000000
--- a/developers/_repositoryDetails.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<div class="acceleonavitem">
-	<h2>Browse Repository</h2>
-	<div class="contents">
-		<p>
-			The complete source code for Acceleo is publicly available from the Eclipse.org Git repository.
-		</p>
-
-		<p>
-			If you just want to browse the source code from your usual web browser without checking out all the
-			project's code in your environment, you can use this link:
-			<a href="http://git.eclipse.org/c/acceleo/org.eclipse.acceleo.git/">
-			Browse Acceleo source code</a>.
-		</p>
-		
-		<p>
-			In order to use the following repository location in Eclipse, copy the location URL, open the <i>Git repositories</i>
-			view (Window -> Show View -> Other -> Git Repository), then you can clone a repository thanks to a dedicated button in
-			the toolbar of the view. 
-		</p>
-		
-		<p>
-			In the first page of the wizard, you can enter the information of the Acceleo repository. You can just copy and paste one of
-			the location of the Acceleo repository found at the bottom of the <a href="http://git.eclipse.org/c/acceleo/org.eclipse.acceleo.git/">Acceleo repository page</a>.
-			
-			<ul>
-				<li>git://git.eclipse.org/gitroot/acceleo/org.eclipse.acceleo.git</li>
-				<li>ssh://git.eclipse.org/gitroot/acceleo/org.eclipse.acceleo.git</li>
-				<li>http://git.eclipse.org/gitroot/acceleo/org.eclipse.acceleo.git</li>
-			</ul>
-		</p>
-		
-		<p>
-			<img src="../images/git.png" title="Settings of the Acceleo repository"/>
-		</p>
-		
-		<p>
-			On the next page, you can configure the branches that you will checkout from the repository. It is recommended to checkout all the branches in order
-			to have all the source code of Acceleo.
-		</p>
-
-		<p>
-			<img src="../images/git-branches.png" title="Acceleo branches"/>
-		</p>
-		
-		<p>
-			Then you can configure where the repository will be cloned.
-		</p>
-		
-		<p>
-			<img src="../images/git-local.png" title="Local settings"/>
-		</p>
-		
-		<p>
-			After this, you can select the eclipse projects that will be imported in your workspace to start to work. 
-		</p>
-		
-		<p>
-			<img src="../images/git-import.png" title="Acceleo projects"/>
-		</p>
-		
-		<p>
-			<h2>Organization of the Acceleo source code</h2>
-			<ul>
-				<li>benchmark</li>
-				<li>doc</li>
-				<li>examples</li>
-				<li>features</li>
-				<li>maven</li>
-				<li>plugins (source code of the core of Acceleo)</li>
-				<li>releng</li>
-				<li>tests</li>
-			</ul>
-			It is recommended to checkout at least the "plugins" projects. The project "org.eclipse.acceleo-feature" in the feature folder contains
-			the necessary file to configure checkstyle and the eclipse formatter.
-		</p>
-	</div>
-</div>
\ No newline at end of file
diff --git a/developers/index.php b/developers/index.php
deleted file mode 100644
index 0e6bc77..0000000
--- a/developers/index.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
-	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
-	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
-	
-	$App 	= new App();
-	$Nav	= new Nav();
-	$Menu 	= new Menu();
-
-	include($App->getProjectCommon());
-	
-	$pageTitle 		= "Developers";
-
-	$html = file_get_contents('_index.html');
-
-	# Generate the web page
-	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
-?>
diff --git a/developers/repositoryDetails.php b/developers/repositoryDetails.php
deleted file mode 100644
index f3ab80e..0000000
--- a/developers/repositoryDetails.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
-	$pageTitle 		= "Acceleo - Developers - Repository Details";
-
-	$html  = '<div id="midcolumn">';
-	$html .= file_get_contents('_repositoryDetails.html');
-	$html .= "</div>";
-
-	# Generate the web page
-	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
-?>
diff --git a/documentation/aql.html b/documentation/aql.html
deleted file mode 100644
index d2478c1..0000000
--- a/documentation/aql.html
+++ /dev/null
@@ -1,4075 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<!--
-/********************************************************************************
-** Copyright (c) 2015 Obeo.
-** All rights reserved. This program and the accompanying materials
-** are made available under the terms of the Eclipse Public License v1.0
-** which accompanies this distribution, and is available at
-** http://www.eclipse.org/legal/epl-v10.html
-**
-** Contributors:
-**    Stephane Begaudeau (Obeo) - initial API and implementation
-*********************************************************************************/
--->
-<head>
-<meta charset="utf-8">
-<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="description" content="">
-<meta name="author" content="St&eacute;phane B&eacute;gaudeau">
-<!-- IE6-8 support of HTML elements -->
-<!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-<link href="../assets/css/bootstrap.css" rel="stylesheet">
-<link href="../assets/css/docs.css" rel="stylesheet">
-<title>Acceleo</title>
-</head>
-
-<body>
-	<div class="container">
-		<header class="jumbotron subhead" id="overview">
-			<!--<div class="subnav">
-       <ul class="nav nav-pills">
-        <li><a href="#introduction">Introduction</a></li>
-        <li><a href="#language">Language</a></li>
-        <li><a href="#operations">Operations</a></li>
-        <li><a href="#standalone">Stand Alone</a></li>
-        <li><a href="#migration">Migration</a></li>
-        <li><a href="#textproductionrules">Text Production Rules</a></li>
-        <li><a href="#onlineresources">Online Resources</a></li>
-      </ul>
-    </div>-->
-		</header>
-
-		<div class="jumbotron masthead">
-			<h1>Acceleo Query Language</h1>
-		</div>
-		<div class="marketing">
-			<h1>Query and navigate in EMF models</h1>
-		</div>
-
-		<section id="overview">
-			<div class="page-header">
-				<h1>Overview</h1>
-			</div>
-			<p>The Acceleo Query Language (AQL) is a language used to navigate and query an EMF model. In this document, you will find the description of all the services of the standard library of AQL.</p>
-		</section>
-
-
-		<h2 id="Introduction">Introduction</h2>
-		<p>
-			The Acceleo Query Language (AQL) is a language used to navigate and query an EMF model. In this document, you will find the description of the syntax, all the services and the standard library of AQL. <br />AQL as a query engine is small, simple, fast, extensible and it brings a richer validation
-			than the MTL interpreter.
-		</p>
-		<p>For those looking for a simple and fast interpreters for your EMF models, AQL can provide you with a lot of features, including:</p>
-		<ul>
-			<li>Support for static and dynamic Ecore models, no query compilation phase required.</li>
-			<li>The least possible overhead at evaluation time. During this phase, the evaluation goes forward and will not even try to validate or compile your expressions. Errors are tracked and captured along the way.</li>
-			<li>Strong validation: types are checked at validation time and the metamodels used are analyzed to do some basic type inference and avoid false positive errors.</li>
-			<li>Union types: In some context, a variable in a given query can have N potential types with N being often greater than one. AQL can embrace this fact without having to fall back to EObject as soon as there is more than one type.</li>
-			<li>A simple and straightforward implementation easily extensible with Java classes providing extension methods.</li>
-			<li>A very narrow dependency surface: AQL uses the very central parts of EMF, Guava and Antlr so that we could easily deploy AQL outside of Eclipse in a server or a standalone scenario.</li>
-		</ul>
-		<p>The AQL interpreter is used in Sirius with the prefix &#171;aql:&#187;.</p>
-		<h2 id="Syntax">Syntax</h2>
-		<h3 id="Basics">Basics</h3>
-		<p>
-			The syntax is very similar to the OCL syntax. An expression always starts with a variable <br />
-			<code>aVariable</code>
-		</p>
-		<p>
-			The variable named <strong>self</strong> represent the current object (think of it as the
-			<code>this</code>
-			in Java).
-		</p>
-		<p>Let&#8217;s consider the following metamodel :</p>
-		<p>
-			<img border="0" src="../assets/pics/family_ecore.png" />
-		</p>
-		<p>
-			From a variable one can access field or reference values using the
-			<code>.</code>
-			separator. <br />With
-			<code>self</code>
-			being an instance of <strong>Person</strong>,
-			<code>self.name</code>
-			returns the value of the attribute <strong>name</strong> and
-			<code>self.father</code>
-			return the father of the person.
-		</p>
-		<p>
-			If the attribute or the reference is multi-valued, then
-			<code>self.parents</code>
-			will return a collection.
-		</p>
-		<p>
-			Calls can be chained, as such
-			<code>self.parents.name</code>
-			will return a collection containing the names of the parents.
-		</p>
-		<p>
-			If one want to access the collection itself, then the separator
-			<code>-&gt;</code>
-			must be used, as such
-			<code>self.parents.name-&gt;size()</code>
-			will return the number of elements in the collection whereas
-			<code>self.parents.name.size()</code>
-			will return a collection containing <br />the sizes of each name.
-		</p>
-		<p>
-			AQL can also call methods modeled as EOperations or defined through Java services. The syntax denoting such a call is
-			<code>.</code>
-			for instance
-			<code>self.someCall()</code>
-			will call the <strong>someCall</strong> method and return the result.
-		</p>
-		<h3 id="Workingwithcollections">Working with collections</h3>
-		<p>
-			Filtering a collection is generaly done using either
-			<code>-&gt;filter(..)</code>
-			to keep elements of a given type or
-			<code>-&gt;select(..)</code>
-			to keep elements which are validating a given condition.
-		</p>
-		<p>
-			With
-			<code>self</code>
-			being an instance of <strong>Family</strong>,
-			<code>self.members-&gt;filter(family::Man)</code>
-			will return all the members of the family which are mens and
-			<code>self.members-&gt;select( p | p.name.startsWith('A'))</code>
-			will return all the members of the family which have a name starting by the letter &#8249;A&#8250;.
-		</p>
-		<p>
-			To access an element at a particular index you can use the operation
-			<code>-&gt;at(..)</code>
-			;
-			<code>self.members-&gt;at(1)</code>
-			will return the first person which is a member of the family (in that specific case it is probably better to use
-			<code>self.members-&gt;first()</code>
-		</p>
-		<p>
-			AQL has two kinds of collections, a
-			<code>Sequence</code>
-			which is a list, or an
-			<code>OrderedSet</code>
-			which does not allow doubles. You can convert a
-			<code>Sequence</code>
-			to an
-			<code>OrderedSet</code>
-			by as such :
-			<code>self.members-&gt;asSet()</code>
-		</p>
-		<p>You can also define a collection by extension using the following syntax:</p>
-		<ul>
-			<li><code>OrderedSet{self}</code> which returns a set containing the current EObject.</li>
-			<li><code>Sequence{self, self.eContainer()}</code> returns a sequence containing the current EObject and its parent.</li>
-		</ul>
-		<h3 id="Navigationaxes">Navigation axes</h3>
-		<p>AQL provides operations out of the box to browse the model. Most notably :</p>
-		<ul>
-			<li><code>self.eContainer()</code> returns the parent of the current object if there is one.</li>
-			<li><code>self.eAllContents(some::Type)</code> returns all direct and indirect children matching the given type.</li>
-			<li><code>self.eContents()</code> return all the direct children.</li>
-			<li><code>self.eInverse('father')</code> returns the cross reference of the reference named &#8249;father&#8250;. In this case it will return all the persons which have the current object (self) as a father.</li>
-		</ul>
-		<h3 id="Conditions">Conditions</h3>
-		<p>
-			AQL provides an <strong>If</strong> but it has to be an expression and not a statement. As such one <strong>has to define the else</strong>. Here is the syntax
-		</p>
-		<p>
-			<strong>if</strong>
-			<code>self.name.startsWith('a')</code>
-			<strong>then</strong>
-			<code>self</code>
-			<strong>else</strong>
-			<code>self.eContainer()</code>
-			<strong>endif</strong>
-		</p>
-		<h3 id="WalkthroughusinganUMLexample">Walkthrough using an UML example</h3>
-		<p>
-			Let&#8217;s move to a slightly more complex example to learn how to navigate through a model. We will work with a model instance from the following metamodel: a simplified view of the UML2 metamodel with <strong>Package</strong>, <strong>UseCase</strong>, <strong>Model</strong> or <strong>Component</strong>
-			instances.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/simple-uml-ecore.jpg" />
-		</p>
-		<p>
-			The following illustration demonstrate the result of the just typing
-			<code>self</code>
-			as a query. At the bottom every instance of the UML model is represented by a node with containment relationships from top to bottom and displaying the non-contained references in between those nodes through horizontal edges. The result of the query is highlighted in <strong>blue</strong>.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/self.jpg" />
-		</p>
-		<p>
-			The variable <strong>self</strong> here is the <strong>Class</strong> named &#171;Invoice&#187; in the model, as such the query
-			<code>self</code>
-			hightlight this instance.
-		</p>
-		<h4 id="eContainer">eContainer()</h4>
-		<p>
-			<img border="0" src="../assets/pics/self-econtainer.jpg" />
-		</p>
-		<p>
-			When using the query
-			<code>self.eContainer()</code>
-			the cursor move from the
-			<code>self</code>
-			variable to its most direct parent, here the <strong>Component</strong> instance named &#171;Accounting&#187;.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/self-econtainer-econtainer.jpg" />
-		</p>
-		<p>
-			Such calls can be chained and as such
-			<code>self.eContainer().eContainer()</code>
-			return the <strong>Component</strong> parents: the <strong>Package</strong> named &#171;Components&#187;.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/self-econtainer-model.jpg" />
-		</p>
-		<p>
-			The
-			<code>eContainer()</code>
-			call can also be used with a type parameter, in that case it will be transitively executed up to the point where an instance of the given type is found.
-		</p>
-		<p>
-			In this case then
-			<code>self.eContainer(uml::Model)</code>
-			goes up to the root of the graph. If no instance of the given type is found in the parents then the query returns an empty result.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/self-econtainer-class.jpg" />
-		</p>
-		<p>
-			<code>eContainer()</code>
-			or any other service using types as parameters will match both the given types or its subtypes. The only exception to this rule is the
-			<code>oclIsTypeOf(..)</code>
-			service which is intended to check only for the given type and not its subtypes.
-		</p>
-		<p>
-			When using the query
-			<code>self.eContainer(uml::Class)</code>
-			the result is an instance of <strong>Component</strong> as the <strong>Component</strong> type extends <strong>Class</strong> in the metamodel.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/self-econtainerorself.jpg" />
-		</p>
-		<p>
-			A variant of
-			<code>eContainer(..)</code>
-			named
-			<code>eContainerOrSelf(..)</code>
-			is provided it will first check the type of the current instance. As such the query
-			<code>self.eContainerOrSelf(uml::Class)</code>
-			when <strong>self</strong> is the &#171;Invoice&#187; class returns this instance.
-		</p>
-		<h4 id="eContents">eContents()</h4>
-		<p>
-			<img border="0" src="../assets/pics/self-econtents.jpg" />
-		</p>
-		<p>
-			One use
-			<code>eContainer()</code>
-			to go up in the parent. The
-			<code>eContents()</code>
-			axes is its counterpart and returns the direct children of the element.
-		</p>
-		<h4 id="select">select()</h4>
-		<p>
-			<img border="0" src="../assets/pics/self-econtents-select-name-id.jpg" />
-		</p>
-		<p>
-			The
-			<code>select(...)</code>
-			service can be used to filter elements from a list by veryfing a predicate. In the query
-			<code>self.eContents()-&gt;select(p | p.name = 'id')</code>
-			the query only returns the elements which have a name equal to <strong>"id"</strong>, in this case a single element.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/self-econtents-select-name-notid.jpg" />
-		</p>
-		<p>
-			Equality is checked with a single
-			<code>=</code>
-			, inequality is expressed with the operator
-			<code>&lt;&gt;</code>
-			.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/self-econtents-select-visibility.jpg" />
-		</p>
-		<p>
-			Comparing values with an enumeration is slightly different as the enumeration value should be explicitely qualified. In the
-			<code>self.eContents()-&gt;select(p | p.visibility = uml::VisibilityKind::private )</code>
-			query the expression
-			<code>uml::VisibilityKind::private</code>
-			denotes the enumeration literal named <strong>private</strong> which is contained in the <strong>VisibilityKind</strong> enumeration of the <strong>uml</strong> metamodel.
-		</p>
-		<h4 id="eAllContents">eAllContents()</h4>
-		<p>
-			<img border="0" src="../assets/pics/self-econtainer-model-eallcontents.jpg" />
-		</p>
-		<p>
-			The
-			<code>eAllContents()</code>
-			axe is used to browse direct and indirect children. It goes from the starting point to the leafs of the model. Here the expression starts with
-			<code>self.eContainer(uml::Model)</code>
-			which has we&#8217;ve seen before goes up until an instance of <strong>Model</strong> is found. From here
-			<code>eAllContents</code>
-			is executed returning all the direct and indirect childrens of the &#171;Travel Agency&#187; <strong>model</strong> instance.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/econtainer-eallcontents-select-name-startswith.jpg" />
-		</p>
-		<p>Just like any other collection it can be filtered to retrieve, for instace, the elements whose name is starting by the letter &#171;I&#187;.</p>
-		<p>
-			<img border="0" src="../assets/pics/self-econtainer-model-eallcontents-components.jpg" />
-		</p>
-		<p>
-			A type parameter can be used to retrieve the direct or indirect children of a specific type: here <strong>components</strong>.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/self-econtainer-model-eallcontents-usecases.jpg" />
-		</p>
-		<p>
-			Or <strong>use case</strong> instances.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/self.econtainer-model-eallcontents-multipletypes.jpg" />
-		</p>
-		<p>It is interesting to note that the parameter can also be a collection of types, enabling the retrieval of many elements through a single pass.</p>
-		<h4 id="eInverse">eInverse()</h4>
-		<p>
-			Queries using
-			<code>eAllContents</code>
-			must be designed with care as they tend to lead to an intense browsing of the model. In many cases they can be replaced with
-			<code>eInverse()</code>
-			calls to retrieve elements of interests.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/self-econtainer-einverse.jpg" />
-		</p>
-		<p>
-			<code>eInverse()</code>
-			returns any element which as a relationship with the current one. This relationship can be indifferently a containment one or not.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/econtainer-einverse-usecase.jpg" />
-		</p>
-		<p>
-			It is often of interest to restrict the type of elements we expect out of the
-			<code>eInverse()</code>
-			call. With the query
-			<code>self.eContainer().eInverse(uml::UseCase)</code>
-			only use cases instances will be returned, here the <strong>UseCase</strong> named &#171;to Invoice&#187; which refers to the &#171;Accounting&#187; <strong>Component</strong> through the reference named <strong>subject</strong>
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/self-econtainer-einverse-packagedelement.jpg" />
-		</p>
-		<p>
-			One can also be even more explicit and query for a specific reference name, here
-			<code>packagedElement</code>
-			: only the <strong>Package</strong> named &#171;Components&#187; refers to the &#171;Accounting&#187; <strong>Component</strong> through the reference named &#171;packagedElement&#187;.
-		</p>
-		<h2 id="LanguageReference">Language Reference</h2>
-		<p>These sections are listing all the services of the standard library of AQL.</p>
-		<section id="services">
-			<div class="page-header">
-				<h3>Services available for all types</h3>
-			</div>
-
-			<h3>String + Object : String</h3>
-			<p>Returns the concatenation of the current string and the given object "any" (as a String).</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'times ' + 42</td>
-						<td>'times 42'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Object + String : String</h3>
-			<p>Returns the concatenation of self (as a String) and the given string "s".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>42 + ' times'</td>
-						<td>'42 times'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Object <> Object : Boolean</h3>
-			<p>Indicates whether the object "o1" is a different object from the object "o2".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello' <> 'World'</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>'Hello' <> 'Hello'</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Object = Object : Boolean</h3>
-			<p>Indicates whether the object "o1" i"the same as the object "o2". For more information refer to the Object#equals(Object) method.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello' = 'World'</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>'Hello' = 'Hello'</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Object.oclAsType(Object) : Object</h3>
-			<p>Casts the current object to the given type.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>anEPackage.oclAsType(ecore::EPackage)</td>
-						<td>anEPackage</td>
-					</tr>
-					<tr>
-						<td>anEPackage.oclAsType(ecore::EClass)</td>
-						<td>anEPackage</td>
-					</tr>
-				</tbody>
-			</table>
-			<p>Contrary to Acceleo 3, the type is ignored, the given object will be returned directly.</p>
-			<h4>In other languages</h4>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Language</th>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Acceleo 3 (MTL)</td>
-						<td>anEPackage.oclAsType(ecore::EPackage)</td>
-						<td>anEPackage</td>
-					</tr>
-					<tr>
-						<td>Acceleo 3 (MTL)</td>
-						<td>anEPackage.oclAsType(ecore::EClass)</td>
-						<td>oclInvalid</td>
-					</tr>
-				</tbody>
-			</table>
-			<hr />
-
-			<h3>Object.oclIsKindOf(Object) : Boolean</h3>
-			<p>Evaluates to "true" if the type of the object o1 conforms to the type "classifier". That is, o1 is of type "classifier" or a subtype of "classifier".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>anEPackage.oclIsKindOf(ecore::EPackage)</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>anEPackage.oclIsKindOf(ecore::ENamedElement)</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Object.oclIsTypeOf(Object) : Boolean</h3>
-			<p>Evaluates to "true" if the object o1 if of the type "classifier" but not a subtype of the "classifier".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>anEPackage.oclIsKindOf(ecore::EPackage)</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>anEPackage.oclIsKindOf(ecore::ENamedElement)</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Object.toString() : String</h3>
-			<p>Returns a string representation of the current object.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>42.toString()</td>
-						<td>'42'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Object.trace() : String</h3>
-			<p>Returns a string representation of the current environment.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>42.trace()</td>
-						<td>'Metamodels: http://www.eclipse.org/emf/2002/Ecore Services: org.eclipse.acceleo.query.services.AnyServices public java.lang.String org.eclipse.acceleo.query.services.AnyServices.add(java.lang.Object,java.lang.String) ... receiver: 42 '</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-		</section>
-		<section id="services">
-			<div class="page-header">
-				<h3>Services available for Booleans</h3>
-			</div>
-
-			<h3>Boolean.and(Boolean) : Boolean</h3>
-			<p>Logical and.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>true and false</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>false and true</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>true and true</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>false and false</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Boolean.implies(Boolean) : Boolean</h3>
-			<p>Logical implies.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>true implies true</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>true implies false</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>false implies true</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>false implies false</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Boolean.not() : Boolean</h3>
-			<p>Logical negation.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>not true</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>not false</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Boolean.or(Boolean) : Boolean</h3>
-			<p>Logical or.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>true or false</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>false or true</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>true or true</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>false or false</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Boolean.xor(Boolean) : Boolean</h3>
-			<p>Logical xor.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>true xor true</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>true xor false</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>false xor true</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>false xor false</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-		</section>
-		<section id="services">
-			<div class="page-header">
-				<h3>Services available for Collections</h3>
-			</div>
-
-			<h3>OrderedSet + Collection : OrderedSet</h3>
-			<p>Returns the concatenation of the given collection into the current set.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'} + OrderedSet{'c', 'b', 'f'}</td>
-						<td>OrderedSet{'a', 'b', 'c', 'c', 'b', 'f'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p>The service addAll has been replaced by "add" in order to have access to the operator "+" between to sets</p>
-			<h4>In other languages</h4>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Language</th>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Acceleo 3 (MTL)</td>
-						<td>OrderedSet{'a', 'b', 'c'}.addAll(OrderedSet{'c', 'b', 'f'})</td>
-						<td>OrderedSet{'a', 'b', 'c', 'c', 'b', 'f'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<hr />
-
-			<h3>Sequence + Collection : Sequence</h3>
-			<p>Returns the concatenation of the given collection into the given sequence.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}.add(Sequence{'d', 'e'})</td>
-						<td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'} + OrderedSet{'c', 'e'}</td>
-						<td>Sequence{'a', 'b', 'c', 'c', 'e'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p>The service addAll has been replaced by "add" in order to have access to the operator "+" between to sequences</p>
-			<h4>In other languages</h4>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Language</th>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Acceleo 3 (MTL)</td>
-						<td>Sequence{'a', 'b', 'c'} + Sequence{'d', 'e'}</td>
-						<td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
-					</tr>
-					<tr>
-						<td>Acceleo 3 (MTL)</td>
-						<td>Sequence{'a', 'b', 'c'}.addAll(OrderedSet{'c', 'e'})</td>
-						<td>Sequence{'a', 'b', 'c', 'c', 'e'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<hr />
-
-			<h3>Collection->any( x | ... ) : Object</h3>
-			<p>Gets the first element in the current collection for which the value returned by the lambda evaluates to "true".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->any(str | str.size() = 1)</td>
-						<td>'a'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->asOrderedSet() : OrderedSet</h3>
-			<p>Returns a set representation of the specified collection. Returns the same object if it is a set already. This operation has the same behavior as "asSet()"</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->asOrderedSet()</td>
-						<td>OrderedSet{'a', 'b', 'c'}</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->asOrderedSet()</td>
-						<td>OrderedSet{'a', 'b', 'c'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->asSequence() : Sequence</h3>
-			<p>Returns a sequence representation of the specified collection. Returns the same object if it is already a sequence.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->asSequence()</td>
-						<td>Sequence{'a', 'b', 'c'}</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->asSequence()</td>
-						<td>Sequence{'a', 'b', 'c'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->asSet() : OrderedSet</h3>
-			<p>Returns a set representation of the specified collection. Returns the same object if it is already a set.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->asSet()</td>
-						<td>OrderedSet{'a', 'b', 'c'}</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b', 'c', 'c', 'a'}->asSet()</td>
-						<td>OrderedSet{'a', 'b', 'c'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->at(Integer) : Object</h3>
-			<p>Returns the element at the specified position in the sequence.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->at(1)</td>
-						<td>'a'</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->at(2)</td>
-						<td>'b'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->collect( x | ... ) : Sequence{Object}</h3>
-			<p>Returns a sequence containing the result of applying "lambda" on all elements contained in the current sequence, maintaining order.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->collect(str | str.toUpper())</td>
-						<td>Sequence{'A', 'B', 'C'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->collect( x | ... ) : OrderedSet{Object}</h3>
-			<p>Returns a set containing the result of applying "lambda" on all elements contained in the current set, maintaining order.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->collect(str | str.toUpper())</td>
-						<td>OrderedSet{'A', 'B', 'C'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->concat(Collection) : OrderedSet</h3>
-			<p>Returns the concatenation of the current set with the given collection.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}.concat(Sequence{'d', 'e'})</td>
-						<td>OrderedSet{'a', 'b', 'c', 'd', 'e'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<h4>In other languages</h4>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Language</th>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Acceleo 3 (MTL)</td>
-						<td>OrderedSet{'a', 'b', 'c'}.addAll(Sequence{'d', 'e'})</td>
-						<td>OrderedSet{'a', 'b', 'c', 'd', 'e'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<hr />
-
-			<h3>Sequence->concat(Collection) : Sequence</h3>
-			<p>Returns the concatenation of the current sequence with the given collection.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}.concat(Sequence{'d', 'e'})</td>
-						<td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<h4>In other languages</h4>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Language</th>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Acceleo 3 (MTL)</td>
-						<td>Sequence{'a', 'b', 'c'}.addAll(Sequence{'d', 'e'})</td>
-						<td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<hr />
-
-			<h3>OrderedSet->count(Object) : Integer</h3>
-			<p>Returns "1" if the current set contains the given object, "0" otherwise.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->count('d')</td>
-						<td>0</td>
-					</tr>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->count('a')</td>
-						<td>1</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence{Object}->count(Object) : Integer</h3>
-			<p>Counts the number of occurrences of the given object in the given sequence</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->count('d')</td>
-						<td>0</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->count('a')</td>
-						<td>1</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->excludes(Object) : Boolean</h3>
-			<p>Indicates if the given collection doesn't contain the given object.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->excludes('a')</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->excludes('d')</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->excludesAll(Collection) : Boolean</h3>
-			<p>Indicates if no elements from the second collection are contained in the first collection</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b'}->excludesAll(OrderedSet{'f'})</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b'}->excludesAll(OrderedSet{'a', 'f'})</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->excluding(Object) : OrderedSet</h3>
-			<p>Removes the given object from the current set.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->excluding('c')</td>
-						<td>OrderedSet{'a', 'b'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->excluding(Object) : Sequence</h3>
-			<p>Removes the given object from the current sequence.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->excluding('c')</td>
-						<td>Sequence{'a', 'b'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->exists( x | ... ) : Boolean</h3>
-			<p>Indicates if it exists an object from the given collection for which the given lambda evaluates to "true"</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->exists(str | str.size() > 5)</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->filter(EClassifier) : OrderedSet</h3>
-			<p>Keeps only instances of the given EClassifier from the given set.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{anEClass, anEAttribute, anEReference}->filter(ecore::EClass)</td>
-						<td>OrederedSet{anEClass}</td>
-					</tr>
-					<tr>
-						<td>OrderedSet{anEClass, anEAttribute}->filter(ecore::EStructuralFeature)</td>
-						<td>OrederedSet{anEAttribute}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->filter(OrderedSet{EClassifier}) : Sequence</h3>
-			<p>Keeps only instances of the given EClassifier in the given sequence.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{anEClass, anEAttribute, anEReference}->filter({ecore::EClass | ecore::EReference})</td>
-						<td>Sequence{anEClass, anEReference}</td>
-					</tr>
-					<tr>
-						<td>Sequence{anEClass, anEAttribute, anEPackage}->filter({ecore::EStructuralFeature | ecore::EPacakge})</td>
-						<td>Sequence{anEAttribute, anEPackage}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->filter(OrderedSet{EClassifier}) : OrderedSet</h3>
-			<p>Keeps only instances of the given set of EClassifier from the given set.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{anEClass, anEAttribute, anEReference}->filter({ecore::EClass | ecore::EReference})</td>
-						<td>OrderedSet{anEClass, anEReference}</td>
-					</tr>
-					<tr>
-						<td>OrderedSet{anEClass, anEAttribute, anEPackage}->filter({ecore::EStructuralFeature | ecore::EPacakge})</td>
-						<td>OrderedSet{anEAttribute, anEPackage}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->filter(EClassifier) : Sequence</h3>
-			<p>Keeps only instances of the given EClassifier in the given sequence.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{anEClass, anEAttribute, anEReference}->filter(ecore::EClass)</td>
-						<td>Sequence{anEClass}</td>
-					</tr>
-					<tr>
-						<td>Sequence{anEClass, anEAttribute}->filter(ecore::EStructuralFeature)</td>
-						<td>Sequence{anEAttribute}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->first() : Object</h3>
-			<p>Returns the first element of the specified Collection.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->first()</td>
-						<td>'a'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->forAll( x | ... ) : Boolean</h3>
-			<p>Indicates if all the objects from the given collection validate the given lamba</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'ccc'}->forAll(str | str.size() = 1)</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->forAll(str | str.size() = 1)</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->includes(Object) : Boolean</h3>
-			<p>Indicates if the given collection contains the given object.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->includes('a')</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->includes('d')</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->includesAll(Collection) : Boolean</h3>
-			<p>Indicates if all elements from the second collection are contained in the first collection</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->includesAll(OrderedSet{'a'})</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->includesAll(OrderedSet{'a', 'f'})</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->including(Object) : OrderedSet</h3>
-			<p>Adds the given object to the current set.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->including('d')</td>
-						<td>OrderedSet{'a', 'b', 'c', 'd'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->including(Object) : Sequence</h3>
-			<p>Adds the given object to the current sequence.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->including('d')</td>
-						<td>Sequence{'a', 'b', 'c', 'd'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->indexOf(Object) : Integer</h3>
-			<p>Returns the index of the given object in the given set ([1..size]).</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{1, 2, 3, 4}->indexOf(3)</td>
-						<td>3</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->indexOf(Object) : Integer</h3>
-			<p>Returns the index of the given object in the given sequence ([1..size]).</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{1, 2, 3, 4}->indexOf(3)</td>
-						<td>3</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->insertAt(Integer, Object) : OrderedSet</h3>
-			<p>Inserts the given object in a copy of the given set at the given position ([1..size]). If the given set already contains this object, it will be moved to the accurate position.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->insertAt(2, 'f')</td>
-						<td>Sequence{'a', 'f', 'b', 'c'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->insertAt(Integer, Object) : Sequence</h3>
-			<p>Inserts the given object in a copy of the given sequence at the given position ([1..size]).</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->insertAt(2, 'f')</td>
-						<td>Sequence{'a', 'f', 'b', 'c'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->intersection(Collection) : OrderedSet</h3>
-			<p>Creates a set with the elements from the given set that are also present in the given collection.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->intersection(OrderedSet{'a', 'f'})</td>
-						<td>OrderedSet{'a'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->intersection(Collection) : Sequence</h3>
-			<p>Creates a sequence with elements from the given sequence that are present in both the current sequence and the given other {@code Collection}. Iteration order will match that of the current sequence. Duplicates from the first list will all be kept in the result if they also are in the
-				second one, but duplicates from the second list will be dumped even if they are present in the first.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->intersection(OrderedSet{'a', 'f'})</td>
-						<td>Sequence{'a'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->isEmpty() : Boolean</h3>
-			<p>Returns "true" when the input collection is empty.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->isEmpty()</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>Sequence{}->isEmpty()</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->isUnique( x | ... ) : Boolean</h3>
-			<p>Indicates if the evaluation of the given lambda gives a different value for all elements of the given collection.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->isUnique(str | str.size())</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'bb', 'ccc'}->isUnique(str | str.size())</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->last() : Object</h3>
-			<p>Returns the last element of the given sequence.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->last()</td>
-						<td>'c'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->last() : Object</h3>
-			<p>Returns the last element of the given set.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->last()</td>
-						<td>'c'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->notEmpty() : Boolean</h3>
-			<p>Returns "true" when the input collection is not empty.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->notEmpty()</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>Sequence{}->notEmpty()</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->one( x | ... ) : Boolean</h3>
-			<p>Indicates if one and only one element of the given collection validates the given lambda.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->one(str | str.equals('a'))</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'a', 'c'}->one(str | str.equals('a'))</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->prepend(Object) : OrderedSet</h3>
-			<p>Inserts the given object in a copy of the given set at the first position. If the set already contained the given object, it is moved to the first position.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->prepend('f')</td>
-						<td>OrderedSet{'f', 'a', 'b', 'c'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->prepend(Object) : Sequence</h3>
-			<p>Inserts the given object in a copy of the given sequence at the first position.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->prepend('f')</td>
-						<td>Sequence{'f', 'a', 'b', 'c'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->reject( x | ... ) : OrderedSet</h3>
-			<p>Reject returns a filtered version of the specified set. Only elements for which the given "lambda" evaluates to false will be present in the returned set</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->reject(str | str.equals('a'))</td>
-						<td>OrderedSet{'b', 'c'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->reject( x | ... ) : Sequence</h3>
-			<p>Reject returns a filtered version of the specified sequence. Only elements for which the given "lambda" evaluates to false will be present in the returned sequence</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->reject(str | str.equals('a'))</td>
-						<td>Sequence{'b', 'c'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->reverse() : OrderedSet</h3>
-			<p>Returns the given set in reversed order.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->reverse()</td>
-						<td>OrderedSet{'c', 'b', 'a'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->reverse() : Sequence</h3>
-			<p>Returns the given sequence in reversed order.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->reverse()</td>
-						<td>Sequence{'c', 'b', 'a'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->select( x | ... ) : Sequence</h3>
-			<p>Select returns a filtered version of the specified sequence. Only elements for which the given "lambda" evaluates to true will be present in the returned sequence.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->select(str | str.equals('a'))</td>
-						<td>Sequence{'a'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->select( x | ... ) : OrderedSet</h3>
-			<p>Select returns a filtered version of the specified set. Only elements for which the given "lambda" evaluates to true will be present in the returned set.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->select(str | str.equals('a'))</td>
-						<td>OrderedSet{'a'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->sep(Object, Object, Object) : Sequence{Object}</h3>
-			<p>Inserts the given separator between each elements of the given collection, the given prefix before the first element, and the given suffix after the last element.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->sep('[', '-', ']')</td>
-						<td>Sequence{'[', 'a', '-', 'b', '-', 'c', ']'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->sep(Object) : Sequence{Object}</h3>
-			<p>Inserts the given separator between each elements of the given collection.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->sep('-')</td>
-						<td>Sequence{'a', '-', 'b', '-', 'c'}</td>
-					</tr>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->sep('-')</td>
-						<td>Sequence{'a', '-', 'b', '-', 'c'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->size() : Integer</h3>
-			<p>Returns the size of the specified collection</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->size()</td>
-						<td>3</td>
-					</tr>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c', 'd'}->size()</td>
-						<td>4</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->sortedBy( x | ... ) : Sequence</h3>
-			<p>Returns a sequence containing the elements of the original sequence ordered by the result of the given lamba</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'aa', 'bbb', 'c'}->sortedBy(str | str.size())</td>
-						<td>Sequence{'c', 'aa', 'bbb'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->sortedBy( x | ... ) : OrderedSet</h3>
-			<p>Returns a set containing the elements of the original set ordered by the result of the given lamba</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'aa', 'bbb', 'c'}->sortedBy(str | str.size())</td>
-						<td>OrderedSet{'c', 'aa', 'bbb'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence - Collection : Sequence</h3>
-			<p>Returns the difference of the current sequence and the given collection.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'} - Sequence{'c', 'b', 'f'}</td>
-						<td>Sequence{'a'}</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'} - OrderedSet{'c', 'b', 'f'}</td>
-						<td>Sequence{'a'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p>The service removeAll has been replaced by "sub" in order to have access to the operator "-" between to sequences</p>
-			<h4>In other languages</h4>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Language</th>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Acceleo 3 (MTL)</td>
-						<td>Sequence{'a', 'b', 'c'}.removeAll(Sequence{'c', 'b', 'f'})</td>
-						<td>Sequence{'a'}</td>
-					</tr>
-					<tr>
-						<td>Acceleo 3 (MTL)</td>
-						<td>Sequence{'a', 'b', 'c'}.removeAll(OrderedSet{'c', 'b', 'f'})</td>
-						<td>Sequence{'a'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<hr />
-
-			<h3>OrderedSet - Collection : OrderedSet</h3>
-			<p>Returns the difference of the current set and the given collection.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'} - OrderedSet{'c', 'b', 'f'}</td>
-						<td>OrderedSet{'a'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p>The service removeAll has been replaced by "sub" in order to have access to the operator "-" between to sets</p>
-			<h4>In other languages</h4>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Language</th>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Acceleo 3 (MTL)</td>
-						<td>OrderedSet{'a', 'b', 'c'}.removeAll(OrderedSet{'c', 'b', 'f'})</td>
-						<td>OrderedSet{'a'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<hr />
-
-			<h3>OrderedSet->subOrderedSet(Integer, Integer) : OrderedSet</h3>
-			<p>Returns a subset of the given set</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->subOrderedSet(1, 2)</td>
-						<td>OrderedSet{'a', 'b'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->subSequence(Integer, Integer) : Sequence</h3>
-			<p>Returns a subset of the given sequence</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->subSequence(1, 2)</td>
-						<td>Sequence{'a', 'b'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->sum() : Number</h3>
-			<p>Sums elements of the given collection if possible.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{1, 2, 3, 4}->sum()</td>
-						<td>10</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->union(Sequence) : Sequence</h3>
-			<p>Returns a sequence containing all the elements of the first and second sequences</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->union(Sequence{'d', 'c'})</td>
-						<td>Sequence{'a', 'b', 'c', 'd'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->union(OrderedSet) : OrderedSet</h3>
-			<p>Returns a set containing all the elements of the first and second sets</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->union(OrderedSet{'d', 'c'})</td>
-						<td>OrderedSet{'a', 'b', 'c', 'd'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-		</section>
-		<section id="services">
-			<div class="page-header">
-				<h3>Services available for Comparables</h3>
-			</div>
-
-			<h3>Comparable > Comparable : Boolean</h3>
-			<p>Compares "a" to "b" and return "true" if "a" is greater than "b".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello' > 'Abc'</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>'Hello' > 'Hello'</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Comparable >= Comparable : Boolean</h3>
-			<p>Compares "a" to "b" and return "true" if "a" is greater than or equal to "b".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello' >= 'Abc'</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>'Hello' >= 'Hello'</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Comparable < Comparable : Boolean</h3>
-			<p>Compares "a" to "b" and return "true" if "a" is less than "b".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello' < 'Hello'</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>'Hello' < 'World'</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Comparable <= Comparable : Boolean</h3>
-			<p>Compares "a" to "b" and return "true" if "a" is less than or equal to "b".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello' <='Hello'</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>'Hello' <='World'</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-		</section>
-		<section id="services">
-			<div class="page-header">
-				<h3>Services available for EObjects</h3>
-			</div>
-
-			<h3>EClass.allInstances() : Sequence{EObject}</h3>
-			<p>Returns all instances of the EClass</p>
-			<hr />
-
-			<h3>OrderedSet{EClass}->allInstances() : Sequence{EObject}</h3>
-			<p>Returns all instances of any EClass from the OrderedSet</p>
-			<hr />
-
-			<h3>EObject.eAllContents() : Sequence{EObject}</h3>
-			<p>Returns a sequence of the EObjects recursively contained in the specified root eObject.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>anEPackage.eAllContents()</td>
-						<td>Sequence{firstEClass, firstEAttribute, secondEClass, firstDataType}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>EObject.eAllContents(OrderedSet{EClass}) : Sequence{EObject}</h3>
-			<p>Returns a sequence of the EObjects recursively contained in the specified root eObject and that are instances of the specified EClass</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>anEPackage.eAllContents({ecore::EPackage | ecore::EClass})</td>
-						<td>Sequence{ePackage, eClass, ...}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>EObject.eAllContents(EClass) : Sequence{EObject}</h3>
-			<p>Returns a sequence of the EObjects recursively contained in the specified root eObject and that are instances of the specified EClass</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>anEPackage.eAllContents(ecore::EClass)</td>
-						<td>Sequence{firstEClass, secondEClass}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>EObject.eClass() : EClass</h3>
-			<p>Returns the EClass of the specified EObject</p>
-			<hr />
-
-			<h3>EObject.eContainer() : EObject</h3>
-			<p>Returns the container of the specified EObject</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>firstEAttribute.eContainer()</td>
-						<td>firstEClass</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>EObject.eContainer(EClass) : EObject</h3>
-			<p>Returns the first container of the specified EObject that matches the given type</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>firstEAttribute.eContainer(ecore::EPackage)</td>
-						<td>anEPackage</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>EObject.eContainerOrSelf(EClass) : EObject</h3>
-			<p>Returns self or the first container of the specified EObject that matches the given type</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>firstEAttribute.eContainerOrSelf(ecore::EAttribute)</td>
-						<td>firstEAttribute</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>EObject.eContainingFeature() : EStructuralFeature</h3>
-			<p>Returns the containing feature of the specified EObject</p>
-			<hr />
-
-			<h3>EObject.eContainmentFeature() : EReference</h3>
-			<p>Returns the containment feature of the specified EObject</p>
-			<hr />
-
-			<h3>EObject.eContents() : Sequence{EObject}</h3>
-			<p>Returns the contents of the specified EObject instance.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>anEPackage.eContents()</td>
-						<td>Sequence{firstEClass, secondEClass, firstDataType}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>EObject.eContents(EClass) : Sequence{EObject}</h3>
-			<p>Returns a sequence made of the instances of the specified type in the contents of the specified eObject.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>anEPackage.eContents(ecore::EDataType)</td>
-						<td>Sequence{firstDataType}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>EObject.eContents(OrderedSet{EClass}) : Sequence{EObject}</h3>
-			<p>Returns a sequence made of the instances of the specified types in the contents of the specified eObject.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>anEPackage.eContents({ecore::EPackage | ecore::EClass})</td>
-						<td>Sequence{SubEPackage, eClass, ... }</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>EObject.eCrossReferences() : Object</h3>
-			<p>Returns the list of all EObjects cross-referenced from the receiver.</p>
-			<hr />
-
-			<h3>EObject.eGet(String) : Object</h3>
-			<p>Handles calls to the operation "eGet". This will fetch the value of the feature named "featureName" on "source"</p>
-			<hr />
-
-			<h3>EObject.eInverse() : OrderedSet{EObject}</h3>
-			<p>Returns the set containing the inverse references.</p>
-			<hr />
-
-			<h3>EObject.eInverse(EClassifier) : OrderedSet{EObject}</h3>
-			<p>Returns the elements of the given type from the set of the inverse references of the receiver.</p>
-			<hr />
-
-			<h3>EObject.eInverse(String) : OrderedSet{EObject}</h3>
-			<p>Returns the elements from the set of the inverse references of the receiver that are referencing the receiver using a feature with the given name.</p>
-			<hr />
-		</section>
-		<section id="services">
-			<div class="page-header">
-				<h3>Services available for Resources and URIs</h3>
-			</div>
-
-			<h3>EObject.eResource() : Resource</h3>
-			<p>Returns the Resource containing the given EObject. This service is equivalent to a direct call to EObject#eResource().</p>
-			<hr />
-
-			<h3>URI.fileExtension() : String</h3>
-			<p>Returns the extension of the file referred to by the given URI. This service is equivalent to a direct call to URI#fileExtension()</p>
-			<hr />
-
-			<h3>Resource.getContents() : Sequence{EObject}</h3>
-			<p>Returns the direct content of the given Resource. This service is equivalent to a direct call to Resource#getContents()</p>
-			<hr />
-
-			<h3>Resource.getContents(EClass) : Sequence{EObject}</h3>
-			<p>Returns the EObjects of the given type from the direct content of the given Resource.</p>
-			<hr />
-
-			<h3>Resource.getURI() : URI</h3>
-			<p>Returns the URI of the given Resource. This service is equivalent to a direct call to Resource#getURI()</p>
-			<hr />
-
-			<h3>URI.isPlatformPlugin() : Boolean</h3>
-			<p>Returns "true" if the given URI is a platform plugin URI. This service is equivalent to a direct call to URI#isPlatformPlugin()</p>
-			<hr />
-
-			<h3>URI.isPlatformResource() : Boolean</h3>
-			<p>Returns "true" if the given URI is a platform resource URI. This service is equivalent to a direct call to URI#isPlatformResource()</p>
-			<hr />
-
-			<h3>URI.lastSegment() : String</h3>
-			<p>Returns the last segment of the given URI. This service is equivalent to a direct call to URI#lastSegment()</p>
-			<hr />
-		</section>
-		<section id="services">
-			<div class="page-header">
-				<h3>Services available for Strings</h3>
-			</div>
-
-			<h3>String + String : String</h3>
-			<p>Returns a string that is the result of the concatenation of the current string and the string "b".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello' + 'World'</td>
-						<td>HelloWorld</td>
-					</tr>
-				</tbody>
-			</table>
-			<p>This operation behaves like '+' between two strings.</p>
-			<hr />
-
-			<h3>String.concat(String) : String</h3>
-			<p>Returns a string that is the result of the concatenation of the current string and the string "b".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello'.concat('World')</td>
-						<td>HelloWorld</td>
-					</tr>
-				</tbody>
-			</table>
-			<p>This operation behaves like '+' between two strings.</p>
-			<hr />
-
-			<h3>String.contains(String) : Boolean</h3>
-			<p>Returns "true" if the current String contains the String "b"</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello'.contains('llo')</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.endsWith(String) : Boolean</h3>
-			<p>Returns true if the current String ends with the string "b".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello'.endsWidth('llo')</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.equalsIgnoreCase(String) : Boolean</h3>
-			<p>Returns true if the current String is equals to the String "b" without considering case in the comparison.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello'.equalsIgnoreCase('hello')</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.first(Integer) : String</h3>
-			<p>Returns the "n" first characters of the current String, or the current String itself if its size is less than "n".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloWorld'.first(5)</td>
-						<td>'Hello'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.index(String) : Integer</h3>
-			<p>Returns the index of the first occurrence "subString" in the current String, or -1 if "subString" is not in the current String. The index referential is 1 as in OCL and not 0.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloHello'.index('Hello')</td>
-						<td>1</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.index(String, Integer) : Integer</h3>
-			<p>Returns the index of the first occurrence "subString" in the current String from the given index, or -1 if "subString" is not in the current String. The index referential is 1 as in OCL and not 0.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloHello'.index('Hello', 2)</td>
-						<td>6</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.isAlpha() : Boolean</h3>
-			<p>Returns "true" if self consists only of alphabetical characters, "false" otherwise.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'abc123'.isAlpha()</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>'abcdef'.isAlpha()</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.isAlphaNum() : Boolean</h3>
-			<p>Returns "true" if self consists only of alphanumeric characters, "false" otherwise.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'abc123'.isAlphaNum()</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>'abcdef'.isAlphaNum()</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.last(Integer) : String</h3>
-			<p>Returns the "n" last characters of the current String, or the current String if its size is less than "n".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloWorld'.last(5)</td>
-						<td>'World'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.lastIndex(String, Integer) : Integer</h3>
-			<p>Returns the index of the last occurrence "subString" in the current String searching backward from the given index, or -1 if "subString" is not in the current String. The index referential is 1 as in OCL and not 0.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloHello'.lastIndex('Hello', 7)</td>
-						<td>1</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.lastIndex(String) : Integer</h3>
-			<p>Returns the index of the last occurrence of "subString" in the current String, "-1" if the current String doesn't contain this particular substring. The index referential is 1 as in OCL and not 0.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloHello'.lastIndex('World')</td>
-						<td>6</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.matches(String) : Boolean</h3>
-			<p>Returns "true" if the current String matches the given "regex".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello'.matches('*llo')</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.prefix(String) : String</h3>
-			<p>Returns the current String prefixed with the given "prefix".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'World'.prefix('Hello')</td>
-						<td>'HelloWorld'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.replace(String, String) : String</h3>
-			<p>Replaces the first substring of the current String that matches the regular expression "regex" with the String "replacement".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello'.replace('(.*)ll', 'Wh')</td>
-						<td>'Who'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.replaceAll(String, String) : String</h3>
-			<p>Replaces each substring of the current String that matches the given regular expression "regex" with the String "replacement".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'TestTest'.replace('.st', 'erminated')</td>
-						<td>'TerminatedTerminated'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.size() : Integer</h3>
-			<p>Return the length of the current String.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloWorld'.size()</td>
-						<td>10</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.startsWith(String) : Boolean</h3>
-			<p>Returns true if the current String starts with the string "b".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello'.startsWith('Hell')</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.strcmp(String) : Integer</h3>
-			<p>Returns an integer that is either negative, zero or positive depending on whether s1 is alphabetically less than, equal to or greater than self. Note that upper case letters come before lower case ones, so that 'AA' is closer to 'AC' than it is to 'Ab'.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'strcmp operation'.strcmp('strcmp')</td>
-						<td>10</td>
-					</tr>
-					<tr>
-						<td>'strcmp operation'.strcmp('strcmp operation')</td>
-						<td>0</td>
-					</tr>
-					<tr>
-						<td>'strcmp operation'.strcmp('strtok')</td>
-						<td>-17</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.strstr(String) : Boolean</h3>
-			<p>Searches r in self.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloWorld'.strstr('World')</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.substitute(String, String) : String</h3>
-			<p>Substitutes the first occurrence of the substring "r" in self by "t" and returns the resulting string. Will return self if it contains no occurrence of the substring r.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'WorldWorld'.substitute('World', 'Hello')</td>
-						<td>'HelloWorld'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.substituteAll(String, String) : String</h3>
-			<p>Substitutes all occurences of the substring "r" in self by "t" and returns the resulting string. Will return self if it contains no occurrence of the substring r.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'WorldWorld'.substituteAll('World', 'Hello')</td>
-						<td>'HelloHello'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.substring(Integer, Integer) : String</h3>
-			<p>Returns a string containing all characters from self starting from index lower up to index upper included. Both lower and upper parameters should be contained between 1 and self.size() included. Lower cannot be greater than upper.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloWorld'.substring(1, 5)</td>
-						<td>'Hello'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.substring(Integer) : String</h3>
-			<p>Returns a string containing all characters from self starting from index lower up to the end of the string included. The lower parameter should be contained between 1 and self.size() included. Lower cannot be greater than the size of the String.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloWorld'.substring(5)</td>
-						<td>'World'</td>
-					</tr>
-					<tr>
-						<td>'HelloWorld'.substring(1)</td>
-						<td>'HelloWorld'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.toInteger() : Integer</h3>
-			<p>Returns an integer of value equal to self</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'42'.toInteger()</td>
-						<td>42</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.toLower() : String</h3>
-			<p>Returns the current String with all characters transformed to lower case.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloWorld'.toLower()</td>
-						<td>'helloworld'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.toLowerFirst() : String</h3>
-			<p>Returns the self string with the first characters transformed to lower case.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloWorld'.toLowerFirst()</td>
-						<td>'helloWorld'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.toReal() : Double</h3>
-			<p>Returns a real of value equal to self</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'41.9'.toReal()</td>
-						<td>41.9</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.toUpper() : String</h3>
-			<p>Returns the current String with all characters transformed to upper case.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloWorld'.toUpper()</td>
-						<td>'HELLOWORLD'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.toUpperFirst() : String</h3>
-			<p>Returns the current String with the first characters transformed to upper case.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'helloworld'.toUpperFirst()</td>
-						<td>'Helloworld'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.tokenize(String) : Sequence{String}</h3>
-			<p>Splits the current String by using the given "delimiter" into a collection of String</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'a, b, c, d'.tokenize(', ')</td>
-						<td>['a', 'b', 'c', 'd']</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.tokenize() : Sequence{String}</h3>
-			<p>Splits the current String by whitespace delimiter into a collection of String</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'a, b, c, d'.tokenize()</td>
-						<td>['a,', 'b,', 'c,', 'd']</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.trim() : String</h3>
-			<p>Trims the given String.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>' Hello World '.trim()</td>
-						<td>'Hello World'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-		</section>
-
-		<h3 id="SyntaxReference">Syntax Reference</h3>
-		<h4 id="References">References</h4>
-		<table>
-			<tr>
-				<td style="text-align: left;"><em>variable_name</em></td>
-				<td>a reference to a variable</td>
-				<td>myVariable</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>.</strong> <em>feature_name</em></td>
-				<td>implicit collect</td>
-				<td>eClass.name</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>.</strong> <em>service_name</em> <strong>(</strong> ( <em>expression</em> ( <strong>,</strong> <em>expression</em> ) * ) ? <strong>)</strong></td>
-				<td>implicit collect</td>
-				<td>myVariable.toString()</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>-&gt;</strong> <em>service_name</em> <strong>(</strong> ( <em>expression</em> ( <strong>,</strong> <em>expression</em> ) * ) ? <strong>)</strong></td>
-				<td>call on the collection itself if the expression is not a collection it will be wrapped into an ordered set</td>
-				<td>mySequence-&gt;sep(&#8249;,&#8250;)</td>
-			</tr>
-		</table>
-		<h4 id="Operators">Operators</h4>
-		<table>
-			<tr>
-				<td style="text-align: left;"><strong>not</strong> <em>expression</em></td>
-				<td>call the not service</td>
-				<td>not eClass.interface</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>-</strong> <em>expression</em></td>
-				<td>call the unaryMin service</td>
-				<td>-3</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>+</strong> <em>expression</em></td>
-				<td>call the add service</td>
-				<td>2 + 2</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>-</strong> <em>expression</em></td>
-				<td>call the sub service</td>
-				<td>2 &#8211; 2</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>&#42;</strong> <em>expression</em></td>
-				<td>call the mult service</td>
-				<td>2 * 2</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>&#47;</strong> <em>expression</em></td>
-				<td>call the divOp service</td>
-				<td>2 / 2</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>&lt;=</strong> <em>expression</em></td>
-				<td>call the lessThanEqual service</td>
-				<td>2 &lt;= 2</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>&gt;=</strong> <em>expression</em></td>
-				<td>call the greaterThanEqual service</td>
-				<td>2 &gt;= 2</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>&lt;</strong> <em>expression</em></td>
-				<td>call the lessThan service</td>
-				<td>1 &lt; 2</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>&gt;</strong> <em>expression</em></td>
-				<td>call the greaterThan service</td>
-				<td>2 &gt; 1</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>&lt;&gt;</strong> <em>expression</em></td>
-				<td>call the differs service</td>
-				<td>1 &lt;&gt; 2</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>!=</strong> <em>expression</em></td>
-				<td>call the differs service</td>
-				<td>1 != 2</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>=</strong> <em>expression</em></td>
-				<td>call the equals service</td>
-				<td>1 = 1</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>and</strong> <em>expression</em></td>
-				<td>call the and service</td>
-				<td>eClass.interface and eClass.abstact</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>or</strong> <em>expression</em></td>
-				<td>call the or service</td>
-				<td>eClass.interface or eClass.abstact</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>xor</strong> <em>expression</em></td>
-				<td>call the xor service</td>
-				<td>eClass.interface xor eClass.abstact</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>implies</strong> <em>expression</em></td>
-				<td>call implies service</td>
-				<td>eClass.interface implies eClass.abstact</td>
-			</tr>
-		</table>
-		<h4 id="Structures">Structures</h4>
-		<table>
-			<tr>
-				<td style="text-align: left;"><strong>(</strong> <em>expression</em> <strong>)</strong></td>
-				<td>parenthesis are used to change priority during evaluation</td>
-				<td>(2 + 2 ) * 3</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>if</strong> <em>expression</em> <strong>then</strong> <em>expression</em> <strong>else</strong> <em>expression</em> <strong>endif</strong></td>
-				<td>conditional expression</td>
-				<td>if eClass.abstract then &#8249;blue&#8250; else &#8249;red&#8250; endif</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>let</strong> <em>new_variable_name</em> ( <strong>:</strong> <em>type_literal</em>)? ( <strong>,</strong> <em>new_variable_name</em> ( <strong>:</strong> <em>type_literal</em>)?)* <strong>in</strong> <em>expression</em></td>
-				<td>let allows to define variables in order to factorise expression</td>
-				<td>let container = self.eContainer() in container.eAllContents()</td>
-			</tr>
-		</table>
-		<h4 id="Literals">Literals</h4>
-		<table>
-			<tr>
-				<td style="text-align: left;"><strong>'</strong> <em>escaped_string</em> <strong>'</strong></td>
-				<td>you can use java style escape sequence <strong>\u0000</strong> <strong>\x00</strong> <strong>\\</strong> <strong>\'</strong> <strong>\b</strong> <strong>\t</strong> <strong>\n</strong> ...
-				</td>
-				<td>'TODO list:\n\t- walk the dog\n\t- make diner'</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;">[ <strong>0</strong> - <strong>9</strong>]+
-				</td>
-				<td>an integer</td>
-				<td>100</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;">[ <strong>0</strong> - <strong>9</strong>]+ <strong>.</strong> [ <strong>0</strong> - <strong>9</strong>]+
-				</td>
-				<td>a real</td>
-				<td>3.14</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>true</strong></td>
-				<td>the boolean value true</td>
-				<td>true</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>false</strong></td>
-				<td>the boolean value false</td>
-				<td>false</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>null</strong></td>
-				<td>the null value</td>
-				<td>null</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>Sequence{</strong> ( <em>expression</em> ( <strong>,</strong> <em>expression</em>) * ) ? <strong>}</strong></td>
-				<td>a sequence defined in extension</td>
-				<td>Sequence{1, 2, 3, 3}</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>OrderedSet{</strong> ( <em>expression</em> ( <strong>,</strong> <em>expression</em>) * ) ? <strong>}</strong></td>
-				<td>an ordered set defined in extension</td>
-				<td>OrderedSet{1, 2, 3}</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>epackage_name</em> <strong>::</strong> <em>eenum_name</em> <strong>::</strong> <em>eenum_literal_name</em></td>
-				<td>an EEnumLiteral</td>
-				<td>art::Color::blue</td>
-			</tr>
-		</table>
-		<h4 id="Typeliterals">Type literals</h4>
-		<table>
-			<tr>
-				<td style="text-align: left;"><strong>String</strong></td>
-				<td>the string type</td>
-				<td>String</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>Integer</strong></td>
-				<td>the integer type</td>
-				<td>Integer</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>Real</strong></td>
-				<td>the real type</td>
-				<td>Real</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>Boolean</strong></td>
-				<td>the string type</td>
-				<td>Boolean</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>Sequence(</strong> <em>type_litral</em> <strong>)</strong></td>
-				<td>a sequence type</td>
-				<td>Sequence(String)</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>OrderedSet(</strong> <em>type_litral</em> <strong>)</strong></td>
-				<td>an ordered set type</td>
-				<td>OrderedSet(String)</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>epackage_name</em> <strong>::</strong> <em>eclassifier_name</em></td>
-				<td>an eclassifier type</td>
-				<td>ecore::EPackage</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>{</strong> <em>epackage_name</em> <strong>::</strong> <em>eclassifier_name</em> (*</td>
-				<td>* <em>epackage_name</em> <strong>::</strong> <em>eclassifier_name</em>) * <strong>}</strong>
-				</td>
-				<td>a set of eclassifiers</td>
-				<td>{ecore::EPackage &#124; ecore::EClass}</td>
-			</tr>
-		</table>
-		<h2 id="MigratingfromMTLqueries">Migrating from MTL queries</h2>
-		<p>As languages, AQL and MTL are very close yet there are some notable differences:</p>
-		<h3 id="Implicitvariablereferences">Implicit variable references</h3>
-		<p>
-			There is no implicit variable reference. With this change, you can easily find out if you are using a feature of an object or a string representation of said object. As a result, instead of using
-			<code>something</code>
-			, you must use
-			<code>self.something</code>
-			if you want to access the feature named &#171;something&#187; of the current object or &#171;something&#187; if you want to retrieve the object named something.
-		</p>
-		<p>
-			In a lambda expression, you must now define the name of the variable used for the iteration in order to easily identify which variable is used by an expression. In Acceleo MTL, you can write
-			<code>Sequence{self}-&gt;collect(eAllContents(uml::Property))</code>
-			and Acceleo will use the implicit iterator as a source of the operation eAllContents.
-		</p>
-		<p>
-			The problem comes when using a lambda like
-			<code>Sequence{self}-&gt;collect(something)</code>
-			, we can&#8217;t know if &#171;something&#187; is a feature of &#171;self&#187; or if it is another variable.
-		</p>
-		<p>
-			Using AQL, you will now have to write either
-			<code>collect(m | m.eAllContents(uml::Property))</code>
-			or
-			<code>collect(m: uml::Model | eAllContents(uml::Property))</code>
-			.
-		</p>
-		<h3 id="Collectandflatten">Collect and flatten</h3>
-		<p>When a call or a feature acces is done on a collection the result is flattened for the first level. For instance a service returning a collection called on a collection will return a collection of elements and not a collection of collection of elements.</p>
-		<h3 id="TypeliteralschildrenEPackages">Type literals &amp; children EPackages</h3>
-		<p>
-			Type literals can&#8217;t be in the form someEPackage::someSubEPackage::SomeEClass but instead someSubEPackage::SomeEClass should be directly used. Note that the <b>name of the EPackage is mandatory</b>. Type literals are handled just like any other type.
-		</p>
-		<p>
-			Calls like
-			<code>self.eAllContents(self.eClass())</code>
-			are possible and will return all the children of type compatible with “self”.
-		</p>
-		<p>
-			Furthermore if you need a type literal as a parameter in your own service, you just have to have a first parameter with the type :
-			<code>Set&lt;EClass&gt;</code>
-			. Yes, that’s an important point, any type in AQL is possibly a union of several existing types, hence the collection here. As such the syntax for creating Sets or collections can be used as a substitute for type literals.
-		</p>
-		<h3 id="EnumerationliteralschildrenEPackages">Enumeration literals &amp; children EPackages</h3>
-		<p>Enumeration literal should be prefixed with the name of the containing EPacakge for instance &#171;myPackage::myEnum::value&#187;.</p>
-		<h3 id="Collections">Collections</h3>
-		<p>You can only have Sequences or OrderedSets as collections and as such the order of their elements is always deterministic. In Acceleo MTL, you had access to Sets, which are now OrderedSets and Bags, which are now Sequences. Those four kinds of collections were motivated by the fact that
-			Sequence and OrderedSet were ordered contrary to Sets and Bags. On another side, OrderedSets and Sets did not accept any duplicate contrary to Bags and Sequences.</p>
-		<p>By careful reviewing the use of those collections in various Acceleo generators and Sirius Designers we have quickly found out that the lack of determinism in the order of the collections Sets and Bags was a major issue for our users. As a result, only two collections remain, the Sequence
-			which can contain any kind of element and the OrderedSet which has a similar behavior except that it does not accept duplicates.</p>
-		<p>
-			Previously in Acceleo MTL, you could transform a literal into a collection by using the operator
-			<code>-&gt;</code>
-			on the literal directly. In Acceleo MTL, the collection created was a Bag which is not available anymore. It is recommended to use the extension notation like
-			<code>Sequence{self}</code>
-			or
-			<code>OrderedSet{self}</code>
-			. By default in AQL the created collection is an OrderedSet.
-		</p>
-		<h3 id="Renamedoperations">Renamed operations</h3>
-		<p>Some operations have been renamed. As such &#171;addAll&#187; and &#171;removeAll&#187; have been renamed &#171;add&#187; and &#171;sub&#187; because those two names are used by AQL in order to provide access to the operator &#171;+&#187; and &#171;-&#187;. As a result we can now write in
-			AQL &#171;firstSequence + secondSequence&#187; or &#171;firstSet - secondSet&#187;.</p>
-		<h3 id="Typing">Typing</h3>
-		<p>
-			AQL is way smarter than MTL regarding to the types of your expressions. As a result, you can combine expressions using multiple types quite easily. For example, this is a valid AQL expression
-			<code>self.eContents(uml::Class).add(self.eContents(ecore::EClass)).name</code>
-			. In Acceleo MTL, we could not use this behavior because Acceleo MTL had to fall back to the concept EObject which does not have a feature &#171;name&#187; while AQL knows that the collection contains objects that are either &#171;uml::Class&#187; or &#171;ecore::EClass&#187; and both of those
-			types have a feature named &#171;name&#187;.
-		</p>
-		<h3 id="nullhandling">null handling</h3>
-		<p>
-			AQL handles null (OclVoid) differently from ocl, a null value will not cause a failure but will be silently handled. <br />For example,
-			<code>null.oclIsKindOf(ecore::EClass)</code>
-			would have returned true for MTL/OCL, forcing users to use
-			<code>not self.oclIsUndefined() and self.oclIsKindOf(ecore::EClass)</code>
-			instead. This is no longer true in AQL, where &#171;null&#187; doesn&#8217;t conform to any type, so
-			<code>null.oclIsKindOf(ecore::EClass)</code>
-			will return false. Note that it&#8217;s still possible to &#171;cast&#187; null in any given classifier.
-			<code>null.oclAsType(ecore::EClass)</code>
-			will not fail at runtime.
-		</p>
-		<p>
-			Furthermore <strong>oclIsUndefined() does not exist in AQL</strong> and should be replaced by a
-			<code>... &lt;&gt; null</code>
-			expression.
-		</p>
-		<h2 id="MigratingfromAcceleo2queries">Migrating from Acceleo2 queries</h2>
-		<h3 id="EClassifierreferences">EClassifier references</h3>
-		<p>
-			All operations referencing a type are now using a type literal with the name of the EPackage and the name of the type instead of a string with the name of the type. As a result,
-			<code>eObject.eAllContents('EClass')</code>
-			would be translated using
-			<code>eObject.eAllContents('ecore::EClass')</code>
-			. This allows AQL to now in which EPackage to look for the type and as such, it improves the quality of the validation.
-		</p>
-		<h3 id="Typesandcast">Types and cast</h3>
-		<p>In order to test the type of an EObject, a common pattern in Acceleo 2 was to treat the EObject as a collection and filter said collection on the type desired to see if the size of the collection changed. In AQL, you have access to the operations oclIsTypeOf and oclIsKindOf. You can thus
-			test the type of an EObject with the expression &#171;eObject.oclIsKindOf(ecore::EStructuralFeature)&#187; or &#171;eObject.oclIsTypeOf(ecore::EAttribute)&#187;. You can use the operation oclIsKindOf to test if an object has the type of the given parameter or one of its subtype. On the other
-			hand, you can use the operation oclIsTypeOf to test if an object has exactly the type of the given parameter.</p>
-		<p>Casting in AQL is useless, since AQL is very understandable when it comes to types, it will always tries its best to evaluate your expression.</p>
-		<p>
-			Since AQL is very close to Acceleo MTL, you can find some additional documentation using the Acceleo equivalence documentation in the <a href="http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.acceleo.doc%2Fpages%2Freference%2Fmigration.html&amp;cp=5_3_4">Acceleo documentation</a>.
-		</p>
-		<h3 id="eContainerTypeName">eContainer(&#171;TypeName&#187;)</h3>
-		<p>
-			In Acceleo2
-			<code>self.eContainer("TypeName")</code>
-			actually had the behavior of returning self if it was matching the TypeName. As such, when migrating from an eContainer(..) call you should either make sure that this behavior is not needed or use the <br />compatibility method provided by AQL :
-			<code>self.eContainerOrSelf(some::Type)</code>
-		</p>
-		<h2 id="UsingAQLprogrammatically">Using AQL programmatically</h2>
-		<p>This section provide information and code snippet. It will help you to integrate AQL in your own tool.</p>
-		<p>Simple overview of AQL:</p>
-		<p>
-			<img border="0" src="../assets/pics/AQL_overview.png" />
-		</p>
-		<h3 id="Typevalidation">Type validation</h3>
-		<p>For each node of the AST we create a set of possible types as follow:</p>
-		<ul>
-			<li>for a VarRef we ask the environment for its possible types</li>
-			<li>for a FeatureAccess we look up the type of the feature in the registered metamodels</li>
-			<li>for a Call we look up the service in the service registry according to the possible types of its parameters (receiver is the first parameter). At this point there is a conversion from EMF to Java. The return type of the service is given by the IService.getType() method. At this point
-				there is a conversion form Java to EMF, one Java type can correspond to more than one EMF EClassifier. If no service can be found we try to find a corresponding EOperation if the receiver is an EObject.</li>
-		</ul>
-		<p>A special type NothingType is used to mark a problem on a given node of the AST. Those NothingTypes are then used to create validation messages. If an AST node has only NothingTypes validation messages will be set as errors for this node, otherwise they are set as warnings.</p>
-		<h3 id="Completion">Completion</h3>
-		<p>
-			The completion rely on the AST production and the type validation. <br />The identifier fragments preceding (prefix) and following (remaining) the cursor position are removed from the expression to parse. The prefix and remaining are used later to filter the proposals. Many filters can be
-			implemented: filter only on prefix, filter on prefix and remaining, same strategies with support for camel case, ...
-		</p>
-		<p>Completion on the AST:</p>
-		<ul>
-			<li>if there is no error node in the AST the completion provide any symbols that can follow an expression (&#171;+&#187;, &#171;-&#187;, ...).</li>
-			<li>if there is an ErrorExpression node in the AST the completion provides anything that can prefix an expression (&#171;not&#187;, &#171;-&#187;, variable name, type name, ...).</li>
-			<li>if there is an ErrorFeatureAccesOrCall node in the AST the completion provides feature and service names corresponding to the receiver possible types. It is also possible to add symbols that follow an expression if the prefix and remaining are already a valid feature or service name for
-				the receiver possible types.</li>
-			<li>if there is an ErrorCollectionCall node in the AST the completion provides collection service names. It is also possible to add symbols that follow an expression if the prefix and remaining are already a valid service name.</li>
-			<li>if there is an ErrorTypeLiteral node in the AST the completion provides EClassifier, EEnumLiteral names according to the state of the type description.</li>
-		</ul>
-		<h3 id="Creatingandsettingtheenvironment">Creating and setting the environment</h3>
-		<p>To get a fresh environment you can use one of the following snippet:</p>
-		<pre>
-			<code>IQueryEnvironment queryEnvironment = Query.newEnvironmentWithDefaultServices(null);
-</code>
-		</pre>
-		<p>To get an environment with predefined services.</p>
-		<p>or</p>
-		<pre>
-			<code>IQueryEnvironment queryEnvironment = Query.newEnvironment(null);
-</code>
-		</pre>
-		<p>To get an environment with no predefined services. It can be useful to create your own language primitives.</p>
-		<p>Note that you can also provide a CrossReferenceProvider to define the scope of cross references in your environment. See CrossReferencerToAQL for more details.</p>
-		<p>You can register new services Class as follow:</p>
-		<pre>
-			<code>ServiceRegistrationResult registrationResult = queryEnvironment.registerServicePackage(MyServices.class);
-</code>
-		</pre>
-		<p>The registration result contains information about services overrides.</p>
-		<p>You can also register your EPackages. Only registered EPackages are used to validate and evaluate AQL expression.</p>
-		<pre>
-			<code>queryEnvironment.registerEPackage(MyEPackage.eINSTANCE);
-</code>
-		</pre>
-		<p>In some cases you might also want to create custom mappings between an EClass and its Class. A basic case is the use of EMap:</p>
-		<pre>
-			<code>queryEnvironment.registerCustomClassMapping(EcorePackage.eINSTANCE.getEStringToStringMapEntry(), EStringToStringMapEntryImpl.class);
-</code>
-		</pre>
-		<p>By default the EClass is mapped to Map.Entry which is not an EObject. This prevents using services on EObject.</p>
-		<h3 id="BuildinganAQLexpression">Building an AQL expression</h3>
-		<p>The first step is building your expression from a String to an AST:</p>
-		<pre>
-			<code>QueryBuilderEngine builder = new QueryBuilderEngine(queryEnvironment);
-AstResult astResult = builder.build("self.name");
-</code>
-		</pre>
-		<h3 id="EvaluatinganAQLexpression">Evaluating an AQL expression</h3>
-		<p>To evaluate an AQL expression you can use the QueryEvaluationEngine</p>
-		<pre>
-			<code>QueryEvaluationEngine engine = new QueryEvaluationEngine(queryEnvironment);
-Map&lt;String, Object&gt; variables = Maps.newHashMap();
-variables.put("self", EcorePackage.eINSTANCE);
-EvaluationResult evaluationResult = engine.eval(astResult, variables);
-</code>
-		</pre>
-		<p>Here we only use one variable for demonstration purpose.</p>
-		<h3 id="ValidatinganAQLexpressionoptional">Validating an AQL expression (optional)</h3>
-		<p>This step is optional for evaluation. You can evaluate an AQL expression without validating it in the first place.</p>
-		<pre>
-			<code>Map&lt;String, Set&lt;IType&gt;&gt; variableTypes = new LinkedHashMap&lt;String, Set&lt;IType&gt;&gt;();
-Set&lt;IType&gt; selfTypes = new LinkedHashSet&lt;IType&gt;();
-selfTypes.add(new EClassifierType(queryEnvironment, EcorePackage.eINSTANCE.getEPackage()));
-variableTypes.put("self", selfTypes);
-AstValidator validator = new AstValidator(queryEnvironment, variableTypes);
-IValidationResult validationResult = validator.validate(astResult);
-</code>
-		</pre>
-		<h3 id="CompletinganAQLexpression">Completing an AQL expression</h3>
-		<p>To do this use the QueryCompletionEngine, it will build the query and validate it for you. It will also compute needed prefix and suffix if any:</p>
-		<pre>
-			<code>Map&lt;String, Set&lt;IType&gt;&gt; variableTypes = new LinkedHashMap&lt;String, Set&lt;IType&gt;&gt;();
-Set&lt;IType&gt; selfTypes = new LinkedHashSet&lt;IType&gt;();
-selfTypes.add(new EClassifierType(queryEnvironment, EcorePackage.eINSTANCE.getEPackage()));
-variableTypes.put("self", selfTypes);
-QueryCompletionEngine engine = new QueryCompletionEngine(queryEnvironment);
-ICompletionResult completionResult = engine.getCompletion("self.", 5, variableTypes);
-List&lt;ICompletionProposal&gt; proposals = completionResult.getProposals(new BasicFilter(completionResult));
-</code>
-		</pre>
-		<p>Here 5 is the offset where the completion should be computed in the given expression.</p>
-
-	</div>
-</body>
-
-</html>
diff --git a/documentation/aql_service_anyservices.html b/documentation/aql_service_anyservices.html
deleted file mode 100644
index 46b245d..0000000
--- a/documentation/aql_service_anyservices.html
+++ /dev/null
@@ -1,312 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<!--
-/********************************************************************************
-** Copyright (c) 2015 Obeo.
-** All rights reserved. This program and the accompanying materials
-** are made available under the terms of the Eclipse Public License v1.0
-** which accompanies this distribution, and is available at
-** http://www.eclipse.org/legal/epl-v10.html
-**
-** Contributors:
-**    Stephane Begaudeau (Obeo) - initial API and implementation
-*********************************************************************************/
--->
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <meta name="description" content="">
-    <meta name="author" content="St&eacute;phane B&eacute;gaudeau">
-    <!-- IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link href="../assets/css/bootstrap.css" rel="stylesheet">
-    <link href="../assets/css/docs.css" rel="stylesheet">
-    <title>Acceleo</title>
-  </head>
-
-  <body>
-    <div class="container">
-   <header class="jumbotron subhead" id="overview">
-    <h1>Acceleo Query Language Documentation</h1>
-    <!--<div class="subnav">
-       <ul class="nav nav-pills">
-        <li><a href="#introduction">Introduction</a></li>
-        <li><a href="#language">Language</a></li>
-        <li><a href="#operations">Operations</a></li>
-        <li><a href="#standalone">Stand Alone</a></li>
-        <li><a href="#migration">Migration</a></li>
-        <li><a href="#textproductionrules">Text Production Rules</a></li>
-        <li><a href="#onlineresources">Online Resources</a></li>
-      </ul>
-    </div>-->
-  </header>
-
-  <section id="services">
-    <div class="page-header">
-      <h1>Services available for all types</h1>
-    </div>
-
-        <h3>add(self: java.lang.String, any: java.lang.Object) = String</h3>
-        <p>
-          Returns the concatenation of the current string and the given object "any" (as a String).
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'times '.add(42)</td>
-              <td>'times 42'</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>add(self: java.lang.Object, s: java.lang.String) = String</h3>
-        <p>
-          Returns the concatenation of self (as a String) and the given string "s".
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>42.add(' times')</td>
-              <td>'42 times'</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>differs(o1: java.lang.Object, o2: java.lang.Object) = Boolean</h3>
-        <p>
-          Indicates whether the object "o1" is a different object from the object "o2".
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'Hello'.differs('World')</td>
-              <td>true</td>
-            </tr>
-            <tr>
-              <td>'Hello'.differs('Hello')</td>
-              <td>false</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>equals(o1: java.lang.Object, o2: java.lang.Object) = Boolean</h3>
-        <p>
-          Indicates whether the object "o1" is the same as the object "o2". For more information refer to the Object#equals(Object) method.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'Hello'.equals('World')</td>
-              <td>false</td>
-            </tr>
-            <tr>
-              <td>'Hello'.equals('Hello')</td>
-              <td>true</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>oclAsType(object: java.lang.Object, type: java.lang.Object) = Object</h3>
-        <p>
-          Casts the current object to the given type.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>anEPackage.oclAsType(ecore::EPackage)</td>
-              <td>anEPackage</td>
-            </tr>
-            <tr>
-              <td>anEPackage.oclAsType(ecore::EClass)</td>
-              <td>anEPackage</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          Contrary to Acceleo 3, the type is ignored, the given object will be returned directly.
-        </p>
-        <h4>In other languages</h4>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Language</th>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Acceleo 3 (MTL)</td>
-              <td>anEPackage.oclAsType(ecore::EPackage)</td>
-              <td>anEPackage</td>
-            </tr>
-            <tr>
-              <td>Acceleo 3 (MTL)</td>
-              <td>anEPackage.oclAsType(ecore::EClass)</td>
-              <td>oclInvalid</td>
-            </tr>
-          </tbody>
-        </table>
-        <hr />
-
-        <h3>oclIsKindOf(object: java.lang.Object, type: java.lang.Object) = Boolean</h3>
-        <p>
-          Evaluates to "true" if the type of the object o1 conforms to the type "classifier". That is, o1 is of type "classifier" or a subtype of "classifier".
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>anEPackage.oclIsKindOf(ecore::EPackage)</td>
-              <td>true</td>
-            </tr>
-            <tr>
-              <td>anEPackage.oclIsKindOf(ecore::ENamedElement)</td>
-              <td>true</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>oclIsTypeOf(object: java.lang.Object, type: java.lang.Object) = Boolean</h3>
-        <p>
-          Evaluates to "true" if the object o1 if of the type "classifier" but not a subtype of the "classifier".
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>anEPackage.oclIsTypeOf(ecore::EPackage)</td>
-              <td>true</td>
-            </tr>
-            <tr>
-              <td>anEPackage.oclIsTypeOf(ecore::ENamedElement)</td>
-              <td>false</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>toString(self: java.lang.Object) = String</h3>
-        <p>
-          Returns a string representation of the current object.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>42.toString()</td>
-              <td>'42'</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>trace(self: java.lang.Object) = String</h3>
-        <p>
-          Returns a string representation of the current environment.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>42.trace()</td>
-              <td>'Metamodels:
-	http://www.eclipse.org/emf/2002/Ecore
-Services:
-	org.eclipse.acceleo.query.services.AnyServices
-		public java.lang.String org.eclipse.acceleo.query.services.AnyServices.add(java.lang.Object,java.lang.String)
-		...
-receiver: 42
-'</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-  </section>
-
-    </div>
-  </body>
-
-</html>
diff --git a/documentation/aql_service_booleanservices.html b/documentation/aql_service_booleanservices.html
deleted file mode 100644
index 45048eb..0000000
--- a/documentation/aql_service_booleanservices.html
+++ /dev/null
@@ -1,223 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<!--
-/********************************************************************************
-** Copyright (c) 2015 Obeo.
-** All rights reserved. This program and the accompanying materials
-** are made available under the terms of the Eclipse Public License v1.0
-** which accompanies this distribution, and is available at
-** http://www.eclipse.org/legal/epl-v10.html
-**
-** Contributors:
-**    Stephane Begaudeau (Obeo) - initial API and implementation
-*********************************************************************************/
--->
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <meta name="description" content="">
-    <meta name="author" content="St&eacute;phane B&eacute;gaudeau">
-    <!-- IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link href="../assets/css/bootstrap.css" rel="stylesheet">
-    <link href="../assets/css/docs.css" rel="stylesheet">
-    <title>Acceleo</title>
-  </head>
-
-  <body>
-    <div class="container">
-   <header class="jumbotron subhead" id="overview">
-    <h1>Acceleo Query Language Documentation</h1>
-    <!--<div class="subnav">
-       <ul class="nav nav-pills">
-        <li><a href="#introduction">Introduction</a></li>
-        <li><a href="#language">Language</a></li>
-        <li><a href="#operations">Operations</a></li>
-        <li><a href="#standalone">Stand Alone</a></li>
-        <li><a href="#migration">Migration</a></li>
-        <li><a href="#textproductionrules">Text Production Rules</a></li>
-        <li><a href="#onlineresources">Online Resources</a></li>
-      </ul>
-    </div>-->
-  </header>
-
-  <section id="services">
-    <div class="page-header">
-      <h1>Services available for Booleans</h1>
-    </div>
-
-        <h3>and(op1: java.lang.Boolean, op2: java.lang.Boolean) = Boolean</h3>
-        <p>
-          Logical and.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>true and false</td>
-              <td>false</td>
-            </tr>
-            <tr>
-              <td>false and true</td>
-              <td>false</td>
-            </tr>
-            <tr>
-              <td>true and true</td>
-              <td>true</td>
-            </tr>
-            <tr>
-              <td>false and false</td>
-              <td>false</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>implies(op1: java.lang.Boolean, op2: java.lang.Boolean) = Boolean</h3>
-        <p>
-          Logical implies.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>true implies true</td>
-              <td>true</td>
-            </tr>
-            <tr>
-              <td>true implies false</td>
-              <td>false</td>
-            </tr>
-            <tr>
-              <td>false implies true</td>
-              <td>true</td>
-            </tr>
-            <tr>
-              <td>false implies false</td>
-              <td>true</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>not(op1: java.lang.Boolean) = Boolean</h3>
-        <p>
-          Logical negation.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>not true</td>
-              <td>false</td>
-            </tr>
-            <tr>
-              <td>not false</td>
-              <td>true</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>or(op1: java.lang.Boolean, op2: java.lang.Boolean) = Boolean</h3>
-        <p>
-          Logical or.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>true or false</td>
-              <td>true</td>
-            </tr>
-            <tr>
-              <td>false or true</td>
-              <td>true</td>
-            </tr>
-            <tr>
-              <td>true or true</td>
-              <td>true</td>
-            </tr>
-            <tr>
-              <td>false or false</td>
-              <td>false</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>xor(op1: java.lang.Boolean, op2: java.lang.Boolean) = Boolean</h3>
-        <p>
-          Logical xor.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>true xor true</td>
-              <td>false</td>
-            </tr>
-            <tr>
-              <td>true xor false</td>
-              <td>true</td>
-            </tr>
-            <tr>
-              <td>false xor true</td>
-              <td>true</td>
-            </tr>
-            <tr>
-              <td>false xor false</td>
-              <td>false</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-  </section>
-
-    </div>
-  </body>
-
-</html>
diff --git a/documentation/aql_service_collectionservices.html b/documentation/aql_service_collectionservices.html
deleted file mode 100644
index d4c9e02..0000000
--- a/documentation/aql_service_collectionservices.html
+++ /dev/null
@@ -1,1485 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<!--
-/********************************************************************************
-** Copyright (c) 2015 Obeo.
-** All rights reserved. This program and the accompanying materials
-** are made available under the terms of the Eclipse Public License v1.0
-** which accompanies this distribution, and is available at
-** http://www.eclipse.org/legal/epl-v10.html
-**
-** Contributors:
-**    Stephane Begaudeau (Obeo) - initial API and implementation
-*********************************************************************************/
--->
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <meta name="description" content="">
-    <meta name="author" content="St&eacute;phane B&eacute;gaudeau">
-    <!-- IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link href="../assets/css/bootstrap.css" rel="stylesheet">
-    <link href="../assets/css/docs.css" rel="stylesheet">
-    <title>Acceleo</title>
-  </head>
-
-  <body>
-    <div class="container">
-   <header class="jumbotron subhead" id="overview">
-    <h1>Acceleo Query Language Documentation</h1>
-    <!--<div class="subnav">
-       <ul class="nav nav-pills">
-        <li><a href="#introduction">Introduction</a></li>
-        <li><a href="#language">Language</a></li>
-        <li><a href="#operations">Operations</a></li>
-        <li><a href="#standalone">Stand Alone</a></li>
-        <li><a href="#migration">Migration</a></li>
-        <li><a href="#textproductionrules">Text Production Rules</a></li>
-        <li><a href="#onlineresources">Online Resources</a></li>
-      </ul>
-    </div>-->
-  </header>
-
-  <section id="services">
-    <div class="page-header">
-      <h1>Services available for Collections</h1>
-    </div>
-
-        <h3>add(sequence: java.util.List, collection: java.util.Collection) = List</h3>
-        <p>
-          Returns the concatenation of the given collection into the given sequence.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}.add(Sequence{'d', 'e'})</td>
-              <td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
-            </tr>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}.add(OrderedSet{'c', 'e'})</td>
-              <td>Sequence{'a', 'b', 'c', 'c', 'e'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          The service addAll has been replaced by "add" in order to have access to the operator "+" between to sequences
-        </p>
-        <h4>In other languages</h4>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Language</th>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Acceleo 3 (MTL)</td>
-              <td>Sequence{'a', 'b', 'c'}.addAll(Sequence{'d', 'e'})</td>
-              <td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
-            </tr>
-            <tr>
-              <td>Acceleo 3 (MTL)</td>
-              <td>Sequence{'a', 'b', 'c'}.addAll(OrderedSet{'c', 'e'})</td>
-              <td>Sequence{'a', 'b', 'c', 'c', 'e'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <hr />
-
-        <h3>add(set: java.util.Set, collection: java.util.Collection) = Set</h3>
-        <p>
-          Returns the concatenation of the given collection into the current set.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>OrderedSet{'a', 'b', 'c'}.add(OrderedSet{'c', 'b', 'f'})</td>
-              <td>OrderedSet{'a', 'b', 'c', 'c', 'b', 'f'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          The service addAll has been replaced by "add" in order to have access to the operator "+" between to sets
-        </p>
-        <h4>In other languages</h4>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Language</th>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Acceleo 3 (MTL)</td>
-              <td>OrderedSet{'a', 'b', 'c'}.addAll(OrderedSet{'c', 'b', 'f'})</td>
-              <td>OrderedSet{'a', 'b', 'c', 'c', 'b', 'f'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <hr />
-
-        <h3>any(collection: java.util.Collection, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = Object</h3>
-        <p>
-          Gets the first element in the current collection for which the value returned by the lambda evaluates to "true".
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->any(str | str.size() = 1)</td>
-              <td>'a'</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>asOrderedSet(collection: java.util.Collection) = Set</h3>
-        <p>
-          Returns a set representation of the specified collection. Returns the same object if it is a set already. This operation has the same behavior as "asSet()"
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>OrderedSet{'a', 'b', 'c'}->asOrderedSet()</td>
-              <td>OrderedSet{'a', 'b', 'c'}</td>
-            </tr>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->asOrderedSet()</td>
-              <td>OrderedSet{'a', 'b', 'c'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>asSequence(collection: java.util.Collection) = List</h3>
-        <p>
-          Returns a sequence representation of the specified collection. Returns the same object if it is already a sequence.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>OrderedSet{'a', 'b', 'c'}->asSequence()</td>
-              <td>Sequence{'a', 'b', 'c'}</td>
-            </tr>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->asSequence()</td>
-              <td>Sequence{'a', 'b', 'c'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>asSet(collection: java.util.Collection) = Set</h3>
-        <p>
-          Returns a set representation of the specified collection. Returns the same object if it is already a set.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>OrderedSet{'a', 'b', 'c'}->asSet()</td>
-              <td>OrderedSet{'a', 'b', 'c'}</td>
-            </tr>
-            <tr>
-              <td>Sequence{'a', 'b', 'c', 'c', 'a'}->asSet()</td>
-              <td>OrderedSet{'a', 'b', 'c'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>at(sequence: java.util.List, position: java.lang.Integer) = Object</h3>
-        <p>
-          Returns the element at the specified position in the sequence.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->at(1)</td>
-              <td>'a'</td>
-            </tr>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->at(2)</td>
-              <td>'b'</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>collect(sequence: java.util.List, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = List</h3>
-        <p>
-          Returns a sequence containing the result of applying "lambda" on all elements contained in the current sequence, maintaining order.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->collect(str | str.toUpper())</td>
-              <td>Sequence{'A', 'B', 'C'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>collect(set: java.util.Set, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = Set</h3>
-        <p>
-          Returns a set containing the result of applying "lambda" on all elements contained in the current set, maintaining order.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>OrderedSet{'a', 'b', 'c'}->collect(str | str.toUpper())</td>
-              <td>OrderedSet{'A', 'B', 'C'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>concat(sequence: java.util.List, collection: java.util.Collection) = List</h3>
-        <p>
-          Returns the concatenation of the current sequence with the given collection.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}.concat(Sequence{'d', 'e'})</td>
-              <td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <h4>In other languages</h4>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Language</th>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Acceleo 3 (MTL)</td>
-              <td>Sequence{'a', 'b', 'c'}.addAll(Sequence{'d', 'e'})</td>
-              <td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <hr />
-
-        <h3>count(sequence: java.util.List, object: java.lang.Object) = Integer</h3>
-        <p>
-          Counts the number of occurrences of the given object in the given sequence
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->count('d')</td>
-              <td>0</td>
-            </tr>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->count('a')</td>
-              <td>1</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>count(set: java.util.Set, object: java.lang.Object) = Integer</h3>
-        <p>
-          Returns "1" if the current set contains the given object, "0" otherwise.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>OrderedSet{'a', 'b', 'c'}->count('d')</td>
-              <td>0</td>
-            </tr>
-            <tr>
-              <td>OrderedSet{'a', 'b', 'c'}->count('a')</td>
-              <td>1</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>excludes(collection: java.util.Collection, object: java.lang.Object) = Boolean</h3>
-        <p>
-          Indicates if the given collection doesn't contain the given object.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->excludes('a')</td>
-              <td>false</td>
-            </tr>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->excludes('d')</td>
-              <td>true</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>excludesAll(collection1: java.util.Collection, collection2: java.util.Collection) = Boolean</h3>
-        <p>
-          Indicates if no elements from the second collection are contained in the first collection
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b'}->excludesAll(OrderedSet{'f'})</td>
-              <td>true</td>
-            </tr>
-            <tr>
-              <td>Sequence{'a', 'b'}->excludesAll(OrderedSet{'a', 'f'})</td>
-              <td>false</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>excluding(set: java.util.Set, object: java.lang.Object) = Set</h3>
-        <p>
-          Removes the given object from the current set.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>OrderedSet{'a', 'b', 'c'}->excluding('c')</td>
-              <td>OrderedSet{'a', 'b'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>excluding(sequence: java.util.List, object: java.lang.Object) = List</h3>
-        <p>
-          Removes the given object from the current sequence.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->excluding('c')</td>
-              <td>Sequence{'a', 'b'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>exists(collection: java.util.Collection, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = Boolean</h3>
-        <p>
-          Indicates if it exists an object from the given collection for which the given lambda evaluates to "true"
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->exists(str | str.size() > 5)</td>
-              <td>false</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>filter(sequence: java.util.List, eClassifiers: java.util.Set) = List</h3>
-        <p>
-          Keeps only instances of the given EClassifier in the given sequence.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{anEClass, anEAttribute, anEReference}->filter({ecore::EClass | ecore::EReference})</td>
-              <td>Sequence{anEClass, anEReference}</td>
-            </tr>
-            <tr>
-              <td>Sequence{anEClass, anEAttribute, anEPackage}->filter({ecore::EStructuralFeature | ecore::EPacakge})</td>
-              <td>Sequence{anEAttribute, anEPackage}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>filter(sequence: java.util.List, eClassifier: org.eclipse.emf.ecore.EClassifier) = List</h3>
-        <p>
-          Keeps only instances of the given EClassifier in the given sequence.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{anEClass, anEAttribute, anEReference}->filter(ecore::EClass)</td>
-              <td>Sequence{anEClass}</td>
-            </tr>
-            <tr>
-              <td>Sequence{anEClass, anEAttribute}->filter(ecore::EStructuralFeature)</td>
-              <td>Sequence{anEAttribute}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>filter(set: java.util.Set, eClassifiers: java.util.Set) = Set</h3>
-        <p>
-          Keeps only instances of the given set of EClassifier from the given set.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>OrderedSet{anEClass, anEAttribute, anEReference}->filter({ecore::EClass | ecore::EReference})</td>
-              <td>OrderedSet{anEClass, anEReference}</td>
-            </tr>
-            <tr>
-              <td>OrderedSet{anEClass, anEAttribute, anEPackage}->filter({ecore::EStructuralFeature | ecore::EPacakge})</td>
-              <td>OrderedSet{anEAttribute, anEPackage}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>filter(set: java.util.Set, eClassifier: org.eclipse.emf.ecore.EClassifier) = Set</h3>
-        <p>
-          Keeps only instances of the given EClassifier from the given set.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>OrderedSet{anEClass, anEAttribute, anEReference}->filter(ecore::EClass)</td>
-              <td>OrederedSet{anEClass}</td>
-            </tr>
-            <tr>
-              <td>OrderedSet{anEClass, anEAttribute}->filter(ecore::EStructuralFeature)</td>
-              <td>OrederedSet{anEAttribute}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>first(collection: java.util.Collection) = Object</h3>
-        <p>
-          Returns the first element of the specified Collection.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->first()</td>
-              <td>'a'</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>forAll(collection: java.util.Collection, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = Boolean</h3>
-        <p>
-          Indicates if all the objects from the given collection validate the given lamba
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'ccc'}->forAll(str | str.size() = 1)</td>
-              <td>false</td>
-            </tr>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->forAll(str | str.size() = 1)</td>
-              <td>false</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>includes(collection: java.util.Collection, object: java.lang.Object) = Boolean</h3>
-        <p>
-          Indicates if the given collection contains the given object.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->includes('a')</td>
-              <td>true</td>
-            </tr>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->includes('d')</td>
-              <td>false</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>includesAll(collection1: java.util.Collection, collection2: java.util.Collection) = Boolean</h3>
-        <p>
-          Indicates if all elements from the second collection are contained in the first collection
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->includesAll(OrderedSet{'a'})</td>
-              <td>true</td>
-            </tr>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->includesAll(OrderedSet{'a', 'f'})</td>
-              <td>false</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>including(sequence: java.util.List, object: java.lang.Object) = List</h3>
-        <p>
-          Adds the given object to the current sequence.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->including('d')</td>
-              <td>Sequence{'a', 'b', 'c', 'd'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>including(set: java.util.Set, object: java.lang.Object) = Set</h3>
-        <p>
-          Adds the given object to the current set.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>OrderedSet{'a', 'b', 'c'}->including('d')</td>
-              <td>OrderedSet{'a', 'b', 'c', 'd'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>indexOf(sequence: java.util.List, object: java.lang.Object) = Integer</h3>
-        <p>
-          Returns the index of the given object in the given sequence ([1..size]).
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{1, 2, 3, 4}->indexOf(3)</td>
-              <td>3</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>insertAt(sequence: java.util.List, position: java.lang.Integer, object: java.lang.Object) = List</h3>
-        <p>
-          Inserts the given object in a copy of the given sequence at the given position ([1..size]).
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->insertAt(2, 'f')</td>
-              <td>Sequence{'a', 'f', 'b', 'c'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>intersection(set: java.util.Set, collection: java.util.Collection) = Set</h3>
-        <p>
-          Creates a set with the elements from the given set that are also present in the given collection.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>OrderedSet{'a', 'b', 'c'}->intersection(OrderedSet{'a', 'f'})</td>
-              <td>OrderedSet{'a'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>intersection(sequence: java.util.List, collection: java.util.Collection) = List</h3>
-        <p>
-          Creates a sequence with elements from the given sequence that are present in both the current sequence and the given other {@code Collection}. Iteration order will match that of the current sequence. Duplicates from the first list will all be kept in the result if they also are in the second one, but duplicates from the second list will be dumped even if they are present in the first.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->intersection(OrderedSet{'a', 'f'})</td>
-              <td>Sequence{'a'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>isEmpty(collection: java.util.Collection) = Boolean</h3>
-        <p>
-          Returns "true" when the input collection is empty.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>OrderedSet{'a', 'b', 'c'}->isEmpty()</td>
-              <td>false</td>
-            </tr>
-            <tr>
-              <td>Sequence{}->isEmpty()</td>
-              <td>true</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>isUnique(collection: java.util.Collection, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = Boolean</h3>
-        <p>
-          Indicates if the evaluation of the given lambda gives a different value for all elements of the given collection.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->isUnique(str | str.size())</td>
-              <td>false</td>
-            </tr>
-            <tr>
-              <td>Sequence{'a', 'bb', 'ccc'}->isUnique(str | str.size())</td>
-              <td>true</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>last(sequence: java.util.List) = Object</h3>
-        <p>
-          Returns the last element of the given sequence.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->last()</td>
-              <td>'c'</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>notEmpty(collection: java.util.Collection) = Boolean</h3>
-        <p>
-          Returns "true" when the input collection is not empty.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>OrderedSet{'a', 'b', 'c'}->notEmpty()</td>
-              <td>true</td>
-            </tr>
-            <tr>
-              <td>Sequence{}->notEmpty()</td>
-              <td>false</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>one(collection: java.util.Collection, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = Boolean</h3>
-        <p>
-          Indicates if one and only one element of the given collection validates the given lambda.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->one(str | str.equals('a'))</td>
-              <td>true</td>
-            </tr>
-            <tr>
-              <td>Sequence{'a', 'a', 'c'}->one(str | str.equals('a'))</td>
-              <td>false</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>prepend(sequence: java.util.List, object: java.lang.Object) = List</h3>
-        <p>
-          Inserts the given object in a copy of the given sequence at the first position.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->prepend('f')</td>
-              <td>Sequence{'f', 'a', 'b', 'c'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>reject(sequence: java.util.List, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = List</h3>
-        <p>
-          Reject returns a filtered version of the specified sequence. Only elements for which the given "lambda" evaluates to false will be present in the returned sequence
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->reject(str | str.equals('a'))</td>
-              <td>Sequence{'b', 'c'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>reject(set: java.util.Set, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = Set</h3>
-        <p>
-          Reject returns a filtered version of the specified set. Only elements for which the given "lambda" evaluates to false will be present in the returned set
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>OrderedSet{'a', 'b', 'c'}->reject(str | str.equals('a'))</td>
-              <td>OrderedSet{'b', 'c'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>reverse(sequence: java.util.List) = List</h3>
-        <p>
-          Returns the given sequence in reversed order.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->reverse()</td>
-              <td>Sequence{'c', 'b', 'a'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>reverse(set: java.util.Set) = Set</h3>
-        <p>
-          Returns the given set in reversed order.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>OrderedSet{'a', 'b', 'c'}->reverse()</td>
-              <td>OrderedSet{'c', 'b', 'a'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>select(set: java.util.Set, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = Set</h3>
-        <p>
-          Select returns a filtered version of the specified set. Only elements for which the given "lambda" evaluates to true will be present in the returned set.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>OrderedSet{'a', 'b', 'c'}->select(str | str.equals('a'))</td>
-              <td>OrderedSet{'a'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>select(sequence: java.util.List, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = List</h3>
-        <p>
-          Select returns a filtered version of the specified sequence. Only elements for which the given "lambda" evaluates to true will be present in the returned sequence.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->select(str | str.equals('a'))</td>
-              <td>Sequence{'a'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>sep(collection: java.util.Collection, prefix: java.lang.Object, separator: java.lang.Object, suffix: java.lang.Object) = List</h3>
-        <p>
-          Inserts the given separator between each elements of the given collection, the given prefix before the first element, and the given suffix after the last element.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->sep('[', '-', ']')</td>
-              <td>Sequence{'[', 'a', '-', 'b', '-', 'c', ']'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>sep(collection: java.util.Collection, separator: java.lang.Object) = List</h3>
-        <p>
-          Inserts the given separator between each elements of the given collection.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->sep('-')</td>
-              <td>Sequence{'a', '-', 'b', '-', 'c'}</td>
-            </tr>
-            <tr>
-              <td>OrderedSet{'a', 'b', 'c'}->sep('-')</td>
-              <td>Sequence{'a', '-', 'b', '-', 'c'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>size(collection: java.util.Collection) = Integer</h3>
-        <p>
-          Returns the size of the specified collection
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->size()</td>
-              <td>3</td>
-            </tr>
-            <tr>
-              <td>OrderedSet{'a', 'b', 'c', 'd'}->size()</td>
-              <td>4</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>sortedBy(collection: java.util.Collection, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = List</h3>
-        <p>
-          Returns a sequence containing the elements of the original collection ordered by the result of the given lamba
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'aa', 'bbb', 'c'}->sortedBy(str | str.size())</td>
-              <td>Sequence{'c', 'aa', 'bbb'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>sub(set: java.util.Set, collection: java.util.Collection) = Set</h3>
-        <p>
-          Returns the difference of the current set and the given collection.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>OrderedSet{'a', 'b', 'c'}.sub(OrderedSet{'c', 'b', 'f'})</td>
-              <td>OrderedSet{'a'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          The service removeAll has been replaced by "sub" in order to have access to the operator "-" between to sets
-        </p>
-        <h4>In other languages</h4>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Language</th>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Acceleo 3 (MTL)</td>
-              <td>OrderedSet{'a', 'b', 'c'}.removeAll(OrderedSet{'c', 'b', 'f'})</td>
-              <td>OrderedSet{'a'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <hr />
-
-        <h3>sub(sequence: java.util.List, collection: java.util.Collection) = List</h3>
-        <p>
-          Returns the difference of the current sequence and the given collection.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}.sub(Sequence{'c', 'b', 'f'})</td>
-              <td>Sequence{'a'}</td>
-            </tr>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}.sub(OrderedSet{'c', 'b', 'f'})</td>
-              <td>Sequence{'a'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          The service removeAll has been replaced by "sub" in order to have access to the operator "-" between to sequences
-        </p>
-        <h4>In other languages</h4>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Language</th>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Acceleo 3 (MTL)</td>
-              <td>Sequence{'a', 'b', 'c'}.removeAll(Sequence{'c', 'b', 'f'})</td>
-              <td>Sequence{'a'}</td>
-            </tr>
-            <tr>
-              <td>Acceleo 3 (MTL)</td>
-              <td>Sequence{'a', 'b', 'c'}.removeAll(OrderedSet{'c', 'b', 'f'})</td>
-              <td>Sequence{'a'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <hr />
-
-        <h3>subOrderedSet(set: java.util.Set, startIndex: java.lang.Integer, startIndex: java.lang.Integer) = Set</h3>
-        <p>
-          Returns a subset of the given set
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>OrderedSet{'a', 'b', 'c'}->subOrderedSet(1, 2)</td>
-              <td>OrderedSet{'a', 'b'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>subSequence(sequence: java.util.List, startIndex: java.lang.Integer, startIndex: java.lang.Integer) = List</h3>
-        <p>
-          Returns a subset of the given sequence
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->subSequence(1, 2)</td>
-              <td>Sequence{'a', 'b'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>sum(collection: java.util.Collection) = Double</h3>
-        <p>
-          Sums elements of the given collection if possible.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{1, 2, 3, 4}->sum()</td>
-              <td>10</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>union(set1: java.util.Set, set2: java.util.Set) = Set</h3>
-        <p>
-          Returns a set containing all the elements of the first and second sets
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>OrderedSet{'a', 'b', 'c'}->union(OrderedSet{'d', 'c'})</td>
-              <td>OrderedSet{'a', 'b', 'c', 'd'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>union(sequence1: java.util.List, sequence2: java.util.List) = List</h3>
-        <p>
-          Returns a sequence containing all the elements of the first and second sequences
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>Sequence{'a', 'b', 'c'}->union(Sequence{'d', 'c'})</td>
-              <td>Sequence{'a', 'b', 'c', 'd'}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-  </section>
-
-    </div>
-  </body>
-
-</html>
diff --git a/documentation/aql_service_comparableservices.html b/documentation/aql_service_comparableservices.html
deleted file mode 100644
index 536e327..0000000
--- a/documentation/aql_service_comparableservices.html
+++ /dev/null
@@ -1,164 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<!--
-/********************************************************************************
-** Copyright (c) 2015 Obeo.
-** All rights reserved. This program and the accompanying materials
-** are made available under the terms of the Eclipse Public License v1.0
-** which accompanies this distribution, and is available at
-** http://www.eclipse.org/legal/epl-v10.html
-**
-** Contributors:
-**    Stephane Begaudeau (Obeo) - initial API and implementation
-*********************************************************************************/
--->
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <meta name="description" content="">
-    <meta name="author" content="St&eacute;phane B&eacute;gaudeau">
-    <!-- IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link href="../assets/css/bootstrap.css" rel="stylesheet">
-    <link href="../assets/css/docs.css" rel="stylesheet">
-    <title>Acceleo</title>
-  </head>
-
-  <body>
-    <div class="container">
-   <header class="jumbotron subhead" id="overview">
-    <h1>Acceleo Query Language Documentation</h1>
-    <!--<div class="subnav">
-       <ul class="nav nav-pills">
-        <li><a href="#introduction">Introduction</a></li>
-        <li><a href="#language">Language</a></li>
-        <li><a href="#operations">Operations</a></li>
-        <li><a href="#standalone">Stand Alone</a></li>
-        <li><a href="#migration">Migration</a></li>
-        <li><a href="#textproductionrules">Text Production Rules</a></li>
-        <li><a href="#onlineresources">Online Resources</a></li>
-      </ul>
-    </div>-->
-  </header>
-
-  <section id="services">
-    <div class="page-header">
-      <h1>Services available for Comparables</h1>
-    </div>
-
-        <h3>greaterThan(a: java.lang.Comparable, b: java.lang.Comparable) = Boolean</h3>
-        <p>
-          Compares "a" to "b" and return "true" if "a" is greater than "b".
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'Hello'.greaterThan('Abc')</td>
-              <td>true</td>
-            </tr>
-            <tr>
-              <td>'Hello'.greaterThan('Hello')</td>
-              <td>false</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>greaterThanEqual(a: java.lang.Comparable, b: java.lang.Comparable) = Boolean</h3>
-        <p>
-          Compares "a" to "b" and return "true" if "a" is greater than or equal to "b".
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'Hello'.greaterThanEqual('Abc')</td>
-              <td>true</td>
-            </tr>
-            <tr>
-              <td>'Hello'.greaterThanEqual('Hello')</td>
-              <td>true</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>lessThan(a: java.lang.Comparable, b: java.lang.Comparable) = Boolean</h3>
-        <p>
-          Compares "a" to "b" and return "true" if "a" is less than "b".
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'Hello'.lessThan('Hello')</td>
-              <td>false</td>
-            </tr>
-            <tr>
-              <td>'Hello'.lessThan('World')</td>
-              <td>true</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>lessThanEqual(a: java.lang.Comparable, b: java.lang.Comparable) = Boolean</h3>
-        <p>
-          Compares "a" to "b" and return "true" if "a" is less than or equal to "b".
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'Hello'.lessThanEqual('Hello')</td>
-              <td>true</td>
-            </tr>
-            <tr>
-              <td>'Hello'.lessThanEqual('World')</td>
-              <td>true</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-  </section>
-
-    </div>
-  </body>
-
-</html>
diff --git a/documentation/aql_service_eobjectservices.html b/documentation/aql_service_eobjectservices.html
deleted file mode 100644
index a9a2e4b..0000000
--- a/documentation/aql_service_eobjectservices.html
+++ /dev/null
@@ -1,323 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<!--
-/********************************************************************************
-** Copyright (c) 2015 Obeo.
-** All rights reserved. This program and the accompanying materials
-** are made available under the terms of the Eclipse Public License v1.0
-** which accompanies this distribution, and is available at
-** http://www.eclipse.org/legal/epl-v10.html
-**
-** Contributors:
-**    Stephane Begaudeau (Obeo) - initial API and implementation
-*********************************************************************************/
--->
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <meta name="description" content="">
-    <meta name="author" content="St&eacute;phane B&eacute;gaudeau">
-    <!-- IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link href="../assets/css/bootstrap.css" rel="stylesheet">
-    <link href="../assets/css/docs.css" rel="stylesheet">
-    <title>Acceleo</title>
-  </head>
-
-  <body>
-    <div class="container">
-   <header class="jumbotron subhead" id="overview">
-    <h1>Acceleo Query Language Documentation</h1>
-    <!--<div class="subnav">
-       <ul class="nav nav-pills">
-        <li><a href="#introduction">Introduction</a></li>
-        <li><a href="#language">Language</a></li>
-        <li><a href="#operations">Operations</a></li>
-        <li><a href="#standalone">Stand Alone</a></li>
-        <li><a href="#migration">Migration</a></li>
-        <li><a href="#textproductionrules">Text Production Rules</a></li>
-        <li><a href="#onlineresources">Online Resources</a></li>
-      </ul>
-    </div>-->
-  </header>
-
-  <section id="services">
-    <div class="page-header">
-      <h1>Services available for EObjects</h1>
-    </div>
-
-        <h3>allInstances(type: org.eclipse.emf.ecore.EClass) = List</h3>
-        <p>
-          Returns all instances of the EClass
-        </p>
-        <hr />
-
-        <h3>allInstances(types: java.util.Set) = List</h3>
-        <p>
-          Returns all instances of any EClass from the OrderedSet
-        </p>
-        <hr />
-
-        <h3>eAllContents(eObject: org.eclipse.emf.ecore.EObject) = List</h3>
-        <p>
-          Returns a sequence of the EObjects recursively contained in the specified root eObject.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>anEPackage.eAllContents()</td>
-              <td>Sequence{firstEClass, firstEAttribute, secondEClass, firstDataType}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>eAllContents(eObject: org.eclipse.emf.ecore.EObject, type: org.eclipse.emf.ecore.EClass) = List</h3>
-        <p>
-          Returns a sequence of the EObjects recursively contained in the specified root eObject and that are instances of the specified EClass
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>anEPackage.eAllContents(ecore::EClass)</td>
-              <td>Sequence{firstEClass, secondEClass}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>eAllContents(eObject: org.eclipse.emf.ecore.EObject, types: java.util.Set) = List</h3>
-        <p>
-          Returns a sequence of the EObjects recursively contained in the specified root eObject and that are instances of the specified EClass
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>anEPackage.eAllContents({ecore::EPackage | ecore::EClass})</td>
-              <td>Sequence{ePackage, eClass, ...}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>eClass(eObject: org.eclipse.emf.ecore.EObject) = EClass</h3>
-        <p>
-          Returns the EClass of the specified EObject
-        </p>
-        <hr />
-
-        <h3>eContainer(eObject: org.eclipse.emf.ecore.EObject, type: org.eclipse.emf.ecore.EClass) = EObject</h3>
-        <p>
-          Returns the first container of the specified EObject that matches the given type
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>firstEAttribute.eContainer(ecore::EPackage)</td>
-              <td>anEPackage</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>eContainer(eObject: org.eclipse.emf.ecore.EObject) = EObject</h3>
-        <p>
-          Returns the container of the specified EObject
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>firstEAttribute.eContainer()</td>
-              <td>firstEClass</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>eContainerOrSelf(eObject: org.eclipse.emf.ecore.EObject, type: org.eclipse.emf.ecore.EClass) = EObject</h3>
-        <p>
-          Returns self or the first container of the specified EObject that matches the given type
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>firstEAttribute.eContainerOrSelf(ecore::EAttribute)</td>
-              <td>firstEAttribute</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>eContainingFeature(eObject: org.eclipse.emf.ecore.EObject) = EStructuralFeature</h3>
-        <p>
-          Returns the containing feature of the specified EObject
-        </p>
-        <hr />
-
-        <h3>eContainmentFeature(eObject: org.eclipse.emf.ecore.EObject) = EReference</h3>
-        <p>
-          Returns the containment feature of the specified EObject
-        </p>
-        <hr />
-
-        <h3>eContents(eObject: org.eclipse.emf.ecore.EObject, types: java.util.Set) = List</h3>
-        <p>
-          Returns a sequence made of the instances of the specified types in the contents of the specified eObject.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>anEPackage.eContents({ecore::EPackage | ecore::EClass})</td>
-              <td>Sequence{SubEPackage, eClass, ... }</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>eContents(eObject: org.eclipse.emf.ecore.EObject, type: org.eclipse.emf.ecore.EClass) = List</h3>
-        <p>
-          Returns a sequence made of the instances of the specified type in the contents of the specified eObject.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>anEPackage.eContents(ecore::EDataType)</td>
-              <td>Sequence{firstDataType}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>eContents(eObject: org.eclipse.emf.ecore.EObject) = List</h3>
-        <p>
-          Returns the contents of the specified EObject instance.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>anEPackage.eContents()</td>
-              <td>Sequence{firstEClass, secondEClass, firstDataType}</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>eCrossReferences(eObject: org.eclipse.emf.ecore.EObject) = Object</h3>
-        <p>
-          Returns the list of all EObjects cross-referenced from the receiver.
-        </p>
-        <hr />
-
-        <h3>eGet(eObject: org.eclipse.emf.ecore.EObject, featureName: java.lang.String) = Object</h3>
-        <p>
-          Handles calls to the operation "eGet". This will fetch the value of the feature named "featureName" on "source"
-        </p>
-        <hr />
-
-        <h3>eInverse(eObject: org.eclipse.emf.ecore.EObject, featureName: java.lang.String) = Set</h3>
-        <p>
-          Returns the elements from the set of the inverse references of the receiver that are referencing the receiver using a feature with the given name.
-        </p>
-        <hr />
-
-        <h3>eInverse(eObject: org.eclipse.emf.ecore.EObject, type: org.eclipse.emf.ecore.EClassifier) = Set</h3>
-        <p>
-          Returns the elements of the given type from the set of the inverse references of the receiver.
-        </p>
-        <hr />
-
-        <h3>eInverse(eObject: org.eclipse.emf.ecore.EObject) = Set</h3>
-        <p>
-          Returns the set containing the inverse references.
-        </p>
-        <hr />
-  </section>
-
-    </div>
-  </body>
-
-</html>
diff --git a/documentation/aql_service_resourceservices.html b/documentation/aql_service_resourceservices.html
deleted file mode 100644
index b338605..0000000
--- a/documentation/aql_service_resourceservices.html
+++ /dev/null
@@ -1,104 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<!--
-/********************************************************************************
-** Copyright (c) 2015 Obeo.
-** All rights reserved. This program and the accompanying materials
-** are made available under the terms of the Eclipse Public License v1.0
-** which accompanies this distribution, and is available at
-** http://www.eclipse.org/legal/epl-v10.html
-**
-** Contributors:
-**    Stephane Begaudeau (Obeo) - initial API and implementation
-*********************************************************************************/
--->
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <meta name="description" content="">
-    <meta name="author" content="St&eacute;phane B&eacute;gaudeau">
-    <!-- IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link href="../assets/css/bootstrap.css" rel="stylesheet">
-    <link href="../assets/css/docs.css" rel="stylesheet">
-    <title>Acceleo</title>
-  </head>
-
-  <body>
-    <div class="container">
-   <header class="jumbotron subhead" id="overview">
-    <h1>Acceleo Query Language Documentation</h1>
-    <!--<div class="subnav">
-       <ul class="nav nav-pills">
-        <li><a href="#introduction">Introduction</a></li>
-        <li><a href="#language">Language</a></li>
-        <li><a href="#operations">Operations</a></li>
-        <li><a href="#standalone">Stand Alone</a></li>
-        <li><a href="#migration">Migration</a></li>
-        <li><a href="#textproductionrules">Text Production Rules</a></li>
-        <li><a href="#onlineresources">Online Resources</a></li>
-      </ul>
-    </div>-->
-  </header>
-
-  <section id="services">
-    <div class="page-header">
-      <h1>Services available for Resources and URIs</h1>
-    </div>
-
-        <h3>eResource(eObject: org.eclipse.emf.ecore.EObject) = Resource</h3>
-        <p>
-          Returns the Resource containing the given EObject. This service is equivalent to a direct call to EObject#eResource().
-        </p>
-        <hr />
-
-        <h3>fileExtension(uri: org.eclipse.emf.common.util.URI) = String</h3>
-        <p>
-          Returns the extension of the file referred to by the given URI. This service is equivalent to a direct call to URI#fileExtension()
-        </p>
-        <hr />
-
-        <h3>getContents(resource: org.eclipse.emf.ecore.resource.Resource, type: org.eclipse.emf.ecore.EClass) = List</h3>
-        <p>
-          Returns the EObjects of the given type from the direct content of the given Resource.
-        </p>
-        <hr />
-
-        <h3>getContents(resource: org.eclipse.emf.ecore.resource.Resource) = List</h3>
-        <p>
-          Returns the direct content of the given Resource. This service is equivalent to a direct call to Resource#getContents()
-        </p>
-        <hr />
-
-        <h3>getURI(resource: org.eclipse.emf.ecore.resource.Resource) = URI</h3>
-        <p>
-          Returns the URI of the given Resource. This service is equivalent to a direct call to Resource#getURI()
-        </p>
-        <hr />
-
-        <h3>isPlatformPlugin(uri: org.eclipse.emf.common.util.URI) = Boolean</h3>
-        <p>
-          Returns "true" if the given URI is a platform plugin URI. This service is equivalent to a direct call to URI#isPlatformPlugin()
-        </p>
-        <hr />
-
-        <h3>isPlatformResource(uri: org.eclipse.emf.common.util.URI) = Boolean</h3>
-        <p>
-          Returns "true" if the given URI is a platform resource URI. This service is equivalent to a direct call to URI#isPlatformResource()
-        </p>
-        <hr />
-
-        <h3>lastSegment(uri: org.eclipse.emf.common.util.URI) = String</h3>
-        <p>
-          Returns the last segment of the given URI. This service is equivalent to a direct call to URI#lastSegment()
-        </p>
-        <hr />
-  </section>
-
-    </div>
-  </body>
-
-</html>
diff --git a/documentation/aql_service_stringservices.html b/documentation/aql_service_stringservices.html
deleted file mode 100644
index 852d86c..0000000
--- a/documentation/aql_service_stringservices.html
+++ /dev/null
@@ -1,858 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<!--
-/********************************************************************************
-** Copyright (c) 2015 Obeo.
-** All rights reserved. This program and the accompanying materials
-** are made available under the terms of the Eclipse Public License v1.0
-** which accompanies this distribution, and is available at
-** http://www.eclipse.org/legal/epl-v10.html
-**
-** Contributors:
-**    Stephane Begaudeau (Obeo) - initial API and implementation
-*********************************************************************************/
--->
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <meta name="description" content="">
-    <meta name="author" content="St&eacute;phane B&eacute;gaudeau">
-    <!-- IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <link href="../assets/css/bootstrap.css" rel="stylesheet">
-    <link href="../assets/css/docs.css" rel="stylesheet">
-    <title>Acceleo</title>
-  </head>
-
-  <body>
-    <div class="container">
-   <header class="jumbotron subhead" id="overview">
-    <h1>Acceleo Query Language Documentation</h1>
-    <!--<div class="subnav">
-       <ul class="nav nav-pills">
-        <li><a href="#introduction">Introduction</a></li>
-        <li><a href="#language">Language</a></li>
-        <li><a href="#operations">Operations</a></li>
-        <li><a href="#standalone">Stand Alone</a></li>
-        <li><a href="#migration">Migration</a></li>
-        <li><a href="#textproductionrules">Text Production Rules</a></li>
-        <li><a href="#onlineresources">Online Resources</a></li>
-      </ul>
-    </div>-->
-  </header>
-
-  <section id="services">
-    <div class="page-header">
-      <h1>Services available for Strings</h1>
-    </div>
-
-        <h3>add(self: java.lang.String, b: java.lang.String) = String</h3>
-        <p>
-          Returns a string that is the result of the concatenation of the current string and the string "b".
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'Hello'.add('World')</td>
-              <td>HelloWorld</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          This operation behaves like '+' between two strings.
-        </p>
-        <hr />
-
-        <h3>concat(self: java.lang.String, b: java.lang.String) = String</h3>
-        <p>
-          Returns a string that is the result of the concatenation of the current string and the string "b".
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'Hello'.concat('World')</td>
-              <td>HelloWorld</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          This operation behaves like '+' between two strings.
-        </p>
-        <hr />
-
-        <h3>contains(self: java.lang.String, b: java.lang.String) = Boolean</h3>
-        <p>
-          Returns "true" if the current String contains the String "b"
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'Hello'.contains('llo')</td>
-              <td>true</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>endsWith(self: java.lang.String, b: java.lang.String) = Boolean</h3>
-        <p>
-          Returns true if the current String ends with the string "b".
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'Hello'.endsWidth('llo')</td>
-              <td>true</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>equalsIgnoreCase(self: java.lang.String, b: java.lang.String) = Boolean</h3>
-        <p>
-          Returns true if the current String is equals to the String "b" without considering case in the comparison.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'Hello'.equalsIgnoreCase('hello')</td>
-              <td>true</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>first(self: java.lang.String, n: java.lang.Integer) = String</h3>
-        <p>
-          Returns the "n" first characters of the current String, or the current String itself if its size is less than "n".
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'HelloWorld'.first(5)</td>
-              <td>'Hello'</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>index(self: java.lang.String, subString: java.lang.String) = Integer</h3>
-        <p>
-          Returns the index of the first occurrence "subString" in the current String, or -1 if "subString" is not in the current String. The index referential is 1 as in OCL and not 0.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'HelloHello'.index('Hello')</td>
-              <td>1</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>index(self: java.lang.String, subString: java.lang.String, indexString: java.lang.Integer) = Integer</h3>
-        <p>
-          Returns the index of the first occurrence "subString" in the current String from the given index, or -1 if "subString" is not in the current String. The index referential is 1 as in OCL and not 0.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'HelloHello'.index('Hello', 2)</td>
-              <td>6</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>isAlpha(self: java.lang.String) = Boolean</h3>
-        <p>
-          Returns "true" if self consists only of alphabetical characters, "false" otherwise.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'abc123'.isAlpha()</td>
-              <td>false</td>
-            </tr>
-            <tr>
-              <td>'abcdef'.isAlpha()</td>
-              <td>true</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>isAlphaNum(self: java.lang.String) = Boolean</h3>
-        <p>
-          Returns "true" if self consists only of alphanumeric characters, "false" otherwise.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'abc123'.isAlphaNum()</td>
-              <td>true</td>
-            </tr>
-            <tr>
-              <td>'abcdef'.isAlphaNum()</td>
-              <td>true</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>last(self: java.lang.String, n: java.lang.Integer) = String</h3>
-        <p>
-          Returns the "n" last characters of the current String, or the current String if its size is less than "n".
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'HelloWorld'.last(5)</td>
-              <td>'World'</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>lastIndex(self: java.lang.String, subString: java.lang.String, indexString: java.lang.Integer) = Integer</h3>
-        <p>
-          Returns the index of the last occurrence "subString" in the current String searching backward from the given index, or -1 if "subString" is not in the current String. The index referential is 1 as in OCL and not 0.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'HelloHello'.lastIndex('Hello', 7)</td>
-              <td>1</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>lastIndex(self: java.lang.String, subString: java.lang.String) = Integer</h3>
-        <p>
-          Returns the index of the last occurrence of "subString" in the current String, "-1" if the current String doesn't contain this particular substring. The index referential is 1 as in OCL and not 0.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'HelloHello'.lastIndex('World')</td>
-              <td>6</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>matches(self: java.lang.String, regex: java.lang.String) = Boolean</h3>
-        <p>
-          Returns "true" if the current String matches the given "regex".
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'Hello'.matches('*llo')</td>
-              <td>true</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>prefix(self: java.lang.String, prefix: java.lang.String) = String</h3>
-        <p>
-          Returns the current String prefixed with the given "prefix".
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'World'.prefix('Hello')</td>
-              <td>'HelloWorld'</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>replace(self: java.lang.String, regex: java.lang.String, replacement: java.lang.String) = String</h3>
-        <p>
-          Replaces the first substring of the current String that matches the regular expression "regex" with the String "replacement".
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'Hello'.replace('(.*)ll', 'Wh')</td>
-              <td>'Who'</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>replaceAll(self: java.lang.String, regex: java.lang.String, replacement: java.lang.String) = String</h3>
-        <p>
-          Replaces each substring of the current String that matches the given regular expression "regex" with the String "replacement".
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'TestTest'.replace('.st', 'erminated')</td>
-              <td>'TerminatedTerminated'</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>size(self: java.lang.String) = Integer</h3>
-        <p>
-          Return the length of the current String.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'HelloWorld'.size()</td>
-              <td>10</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>startsWith(self: java.lang.String, b: java.lang.String) = Boolean</h3>
-        <p>
-          Returns true if the current String starts with the string "b".
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'Hello'.startsWith('Hell')</td>
-              <td>true</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>strcmp(self: java.lang.String, s1: java.lang.String) = Integer</h3>
-        <p>
-          Returns an integer that is either negative, zero or positive depending on whether s1 is alphabetically less than, equal to or greater than self. Note that upper case letters come before lower case ones, so that 'AA' is closer to 'AC' than it is to 'Ab'.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'strcmp operation'.strcmp('strcmp')</td>
-              <td>10</td>
-            </tr>
-            <tr>
-              <td>'strcmp operation'.strcmp('strcmp operation')</td>
-              <td>0</td>
-            </tr>
-            <tr>
-              <td>'strcmp operation'.strcmp('strtok')</td>
-              <td>-17</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>strstr(self: java.lang.String, r: java.lang.String) = Boolean</h3>
-        <p>
-          Searches r in self.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'HelloWorld'.strstr('World')</td>
-              <td>true</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>substitute(self: java.lang.String, r: java.lang.String, t: java.lang.String) = String</h3>
-        <p>
-          Substitutes the first occurrence of the substring "r" in self by "t" and returns the resulting string. Will return self if it contains no occurrence of the substring r.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'WorldWorld'.substitute('World', 'Hello')</td>
-              <td>'HelloWorld'</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>substituteAll(self: java.lang.String, r: java.lang.String, t: java.lang.String) = String</h3>
-        <p>
-          Substitutes all occurences of the substring "r" in self by "t" and returns the resulting string. Will return self if it contains no occurrence of the substring r.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'WorldWorld'.substituteAll('World', 'Hello')</td>
-              <td>'HelloHello'</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>substring(self: java.lang.String, lower: java.lang.Integer, upper: java.lang.Integer) = String</h3>
-        <p>
-          Returns a string containing all characters from self starting from index lower up to index upper included. Both lower and upper parameters should be contained between 1 and self.size() included. Lower cannot be greater than upper.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'HelloWorld'.substring(1, 5)</td>
-              <td>'Hello'</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>substring(self: java.lang.String, lower: java.lang.Integer) = String</h3>
-        <p>
-          Returns a string containing all characters from self starting from index lower up to the end of the string included. The lower parameter should be contained between 1 and self.size() included. Lower cannot be greater than the size of the String.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'HelloWorld'.substring(5)</td>
-              <td>'World'</td>
-            </tr>
-            <tr>
-              <td>'HelloWorld'.substring(1)</td>
-              <td>'HelloWorld'</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>toInteger(self: java.lang.String) = Integer</h3>
-        <p>
-          Returns an integer of value equal to self
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'42'.toInteger()</td>
-              <td>42</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>toLower(self: java.lang.String) = String</h3>
-        <p>
-          Returns the current String with all characters transformed to lower case.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'HelloWorld'.toLower()</td>
-              <td>'helloworld'</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>toLowerFirst(self: java.lang.String) = String</h3>
-        <p>
-          Returns the self string with the first characters transformed to lower case.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'HelloWorld'.toLowerFirst()</td>
-              <td>'helloWorld'</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>toReal(self: java.lang.String) = Double</h3>
-        <p>
-          Returns a real of value equal to self
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'41.9'.toReal()</td>
-              <td>41.9</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>toUpper(self: java.lang.String) = String</h3>
-        <p>
-          Returns the current String with all characters transformed to upper case.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'HelloWorld'.toUpper()</td>
-              <td>'HELLOWORLD'</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>toUpperFirst(self: java.lang.String) = String</h3>
-        <p>
-          Returns the current String with the first characters transformed to upper case.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'helloworld'.toUpperFirst()</td>
-              <td>'Helloworld'</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>tokenize(self: java.lang.String, delimiter: java.lang.String) = List</h3>
-        <p>
-          Splits the current String by using the given "delimiter" into a collection of String
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'a, b, c, d'.tokenize(', ')</td>
-              <td>['a', 'b', 'c', 'd']</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>tokenize(self: java.lang.String) = List</h3>
-        <p>
-          Splits the current String by whitespace delimiter into a collection of String
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'a, b, c, d'.tokenize()</td>
-              <td>['a,', 'b,', 'c,', 'd']</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-
-        <h3>trim(self: java.lang.String) = String</h3>
-        <p>
-          Trims the given String.
-        </p>
-        <table class="table table-striped table-bordered table-condensed">
-          <thead>
-            <tr>
-              <th>Expression</th>
-              <th>Result</th>
-            </tr>
-          </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
-          <tbody>
-            <tr>
-              <td>'  Hello World   '.trim()</td>
-              <td>'Hello World'</td>
-            </tr>
-          </tbody>
-        </table>
-        <p>
-          
-        </p>
-        <hr />
-  </section>
-
-    </div>
-  </body>
-
-</html>
diff --git a/documentation/index.html b/documentation/index.html
deleted file mode 100644
index d2478c1..0000000
--- a/documentation/index.html
+++ /dev/null
@@ -1,4075 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<!--
-/********************************************************************************
-** Copyright (c) 2015 Obeo.
-** All rights reserved. This program and the accompanying materials
-** are made available under the terms of the Eclipse Public License v1.0
-** which accompanies this distribution, and is available at
-** http://www.eclipse.org/legal/epl-v10.html
-**
-** Contributors:
-**    Stephane Begaudeau (Obeo) - initial API and implementation
-*********************************************************************************/
--->
-<head>
-<meta charset="utf-8">
-<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="description" content="">
-<meta name="author" content="St&eacute;phane B&eacute;gaudeau">
-<!-- IE6-8 support of HTML elements -->
-<!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-<link href="../assets/css/bootstrap.css" rel="stylesheet">
-<link href="../assets/css/docs.css" rel="stylesheet">
-<title>Acceleo</title>
-</head>
-
-<body>
-	<div class="container">
-		<header class="jumbotron subhead" id="overview">
-			<!--<div class="subnav">
-       <ul class="nav nav-pills">
-        <li><a href="#introduction">Introduction</a></li>
-        <li><a href="#language">Language</a></li>
-        <li><a href="#operations">Operations</a></li>
-        <li><a href="#standalone">Stand Alone</a></li>
-        <li><a href="#migration">Migration</a></li>
-        <li><a href="#textproductionrules">Text Production Rules</a></li>
-        <li><a href="#onlineresources">Online Resources</a></li>
-      </ul>
-    </div>-->
-		</header>
-
-		<div class="jumbotron masthead">
-			<h1>Acceleo Query Language</h1>
-		</div>
-		<div class="marketing">
-			<h1>Query and navigate in EMF models</h1>
-		</div>
-
-		<section id="overview">
-			<div class="page-header">
-				<h1>Overview</h1>
-			</div>
-			<p>The Acceleo Query Language (AQL) is a language used to navigate and query an EMF model. In this document, you will find the description of all the services of the standard library of AQL.</p>
-		</section>
-
-
-		<h2 id="Introduction">Introduction</h2>
-		<p>
-			The Acceleo Query Language (AQL) is a language used to navigate and query an EMF model. In this document, you will find the description of the syntax, all the services and the standard library of AQL. <br />AQL as a query engine is small, simple, fast, extensible and it brings a richer validation
-			than the MTL interpreter.
-		</p>
-		<p>For those looking for a simple and fast interpreters for your EMF models, AQL can provide you with a lot of features, including:</p>
-		<ul>
-			<li>Support for static and dynamic Ecore models, no query compilation phase required.</li>
-			<li>The least possible overhead at evaluation time. During this phase, the evaluation goes forward and will not even try to validate or compile your expressions. Errors are tracked and captured along the way.</li>
-			<li>Strong validation: types are checked at validation time and the metamodels used are analyzed to do some basic type inference and avoid false positive errors.</li>
-			<li>Union types: In some context, a variable in a given query can have N potential types with N being often greater than one. AQL can embrace this fact without having to fall back to EObject as soon as there is more than one type.</li>
-			<li>A simple and straightforward implementation easily extensible with Java classes providing extension methods.</li>
-			<li>A very narrow dependency surface: AQL uses the very central parts of EMF, Guava and Antlr so that we could easily deploy AQL outside of Eclipse in a server or a standalone scenario.</li>
-		</ul>
-		<p>The AQL interpreter is used in Sirius with the prefix &#171;aql:&#187;.</p>
-		<h2 id="Syntax">Syntax</h2>
-		<h3 id="Basics">Basics</h3>
-		<p>
-			The syntax is very similar to the OCL syntax. An expression always starts with a variable <br />
-			<code>aVariable</code>
-		</p>
-		<p>
-			The variable named <strong>self</strong> represent the current object (think of it as the
-			<code>this</code>
-			in Java).
-		</p>
-		<p>Let&#8217;s consider the following metamodel :</p>
-		<p>
-			<img border="0" src="../assets/pics/family_ecore.png" />
-		</p>
-		<p>
-			From a variable one can access field or reference values using the
-			<code>.</code>
-			separator. <br />With
-			<code>self</code>
-			being an instance of <strong>Person</strong>,
-			<code>self.name</code>
-			returns the value of the attribute <strong>name</strong> and
-			<code>self.father</code>
-			return the father of the person.
-		</p>
-		<p>
-			If the attribute or the reference is multi-valued, then
-			<code>self.parents</code>
-			will return a collection.
-		</p>
-		<p>
-			Calls can be chained, as such
-			<code>self.parents.name</code>
-			will return a collection containing the names of the parents.
-		</p>
-		<p>
-			If one want to access the collection itself, then the separator
-			<code>-&gt;</code>
-			must be used, as such
-			<code>self.parents.name-&gt;size()</code>
-			will return the number of elements in the collection whereas
-			<code>self.parents.name.size()</code>
-			will return a collection containing <br />the sizes of each name.
-		</p>
-		<p>
-			AQL can also call methods modeled as EOperations or defined through Java services. The syntax denoting such a call is
-			<code>.</code>
-			for instance
-			<code>self.someCall()</code>
-			will call the <strong>someCall</strong> method and return the result.
-		</p>
-		<h3 id="Workingwithcollections">Working with collections</h3>
-		<p>
-			Filtering a collection is generaly done using either
-			<code>-&gt;filter(..)</code>
-			to keep elements of a given type or
-			<code>-&gt;select(..)</code>
-			to keep elements which are validating a given condition.
-		</p>
-		<p>
-			With
-			<code>self</code>
-			being an instance of <strong>Family</strong>,
-			<code>self.members-&gt;filter(family::Man)</code>
-			will return all the members of the family which are mens and
-			<code>self.members-&gt;select( p | p.name.startsWith('A'))</code>
-			will return all the members of the family which have a name starting by the letter &#8249;A&#8250;.
-		</p>
-		<p>
-			To access an element at a particular index you can use the operation
-			<code>-&gt;at(..)</code>
-			;
-			<code>self.members-&gt;at(1)</code>
-			will return the first person which is a member of the family (in that specific case it is probably better to use
-			<code>self.members-&gt;first()</code>
-		</p>
-		<p>
-			AQL has two kinds of collections, a
-			<code>Sequence</code>
-			which is a list, or an
-			<code>OrderedSet</code>
-			which does not allow doubles. You can convert a
-			<code>Sequence</code>
-			to an
-			<code>OrderedSet</code>
-			by as such :
-			<code>self.members-&gt;asSet()</code>
-		</p>
-		<p>You can also define a collection by extension using the following syntax:</p>
-		<ul>
-			<li><code>OrderedSet{self}</code> which returns a set containing the current EObject.</li>
-			<li><code>Sequence{self, self.eContainer()}</code> returns a sequence containing the current EObject and its parent.</li>
-		</ul>
-		<h3 id="Navigationaxes">Navigation axes</h3>
-		<p>AQL provides operations out of the box to browse the model. Most notably :</p>
-		<ul>
-			<li><code>self.eContainer()</code> returns the parent of the current object if there is one.</li>
-			<li><code>self.eAllContents(some::Type)</code> returns all direct and indirect children matching the given type.</li>
-			<li><code>self.eContents()</code> return all the direct children.</li>
-			<li><code>self.eInverse('father')</code> returns the cross reference of the reference named &#8249;father&#8250;. In this case it will return all the persons which have the current object (self) as a father.</li>
-		</ul>
-		<h3 id="Conditions">Conditions</h3>
-		<p>
-			AQL provides an <strong>If</strong> but it has to be an expression and not a statement. As such one <strong>has to define the else</strong>. Here is the syntax
-		</p>
-		<p>
-			<strong>if</strong>
-			<code>self.name.startsWith('a')</code>
-			<strong>then</strong>
-			<code>self</code>
-			<strong>else</strong>
-			<code>self.eContainer()</code>
-			<strong>endif</strong>
-		</p>
-		<h3 id="WalkthroughusinganUMLexample">Walkthrough using an UML example</h3>
-		<p>
-			Let&#8217;s move to a slightly more complex example to learn how to navigate through a model. We will work with a model instance from the following metamodel: a simplified view of the UML2 metamodel with <strong>Package</strong>, <strong>UseCase</strong>, <strong>Model</strong> or <strong>Component</strong>
-			instances.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/simple-uml-ecore.jpg" />
-		</p>
-		<p>
-			The following illustration demonstrate the result of the just typing
-			<code>self</code>
-			as a query. At the bottom every instance of the UML model is represented by a node with containment relationships from top to bottom and displaying the non-contained references in between those nodes through horizontal edges. The result of the query is highlighted in <strong>blue</strong>.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/self.jpg" />
-		</p>
-		<p>
-			The variable <strong>self</strong> here is the <strong>Class</strong> named &#171;Invoice&#187; in the model, as such the query
-			<code>self</code>
-			hightlight this instance.
-		</p>
-		<h4 id="eContainer">eContainer()</h4>
-		<p>
-			<img border="0" src="../assets/pics/self-econtainer.jpg" />
-		</p>
-		<p>
-			When using the query
-			<code>self.eContainer()</code>
-			the cursor move from the
-			<code>self</code>
-			variable to its most direct parent, here the <strong>Component</strong> instance named &#171;Accounting&#187;.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/self-econtainer-econtainer.jpg" />
-		</p>
-		<p>
-			Such calls can be chained and as such
-			<code>self.eContainer().eContainer()</code>
-			return the <strong>Component</strong> parents: the <strong>Package</strong> named &#171;Components&#187;.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/self-econtainer-model.jpg" />
-		</p>
-		<p>
-			The
-			<code>eContainer()</code>
-			call can also be used with a type parameter, in that case it will be transitively executed up to the point where an instance of the given type is found.
-		</p>
-		<p>
-			In this case then
-			<code>self.eContainer(uml::Model)</code>
-			goes up to the root of the graph. If no instance of the given type is found in the parents then the query returns an empty result.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/self-econtainer-class.jpg" />
-		</p>
-		<p>
-			<code>eContainer()</code>
-			or any other service using types as parameters will match both the given types or its subtypes. The only exception to this rule is the
-			<code>oclIsTypeOf(..)</code>
-			service which is intended to check only for the given type and not its subtypes.
-		</p>
-		<p>
-			When using the query
-			<code>self.eContainer(uml::Class)</code>
-			the result is an instance of <strong>Component</strong> as the <strong>Component</strong> type extends <strong>Class</strong> in the metamodel.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/self-econtainerorself.jpg" />
-		</p>
-		<p>
-			A variant of
-			<code>eContainer(..)</code>
-			named
-			<code>eContainerOrSelf(..)</code>
-			is provided it will first check the type of the current instance. As such the query
-			<code>self.eContainerOrSelf(uml::Class)</code>
-			when <strong>self</strong> is the &#171;Invoice&#187; class returns this instance.
-		</p>
-		<h4 id="eContents">eContents()</h4>
-		<p>
-			<img border="0" src="../assets/pics/self-econtents.jpg" />
-		</p>
-		<p>
-			One use
-			<code>eContainer()</code>
-			to go up in the parent. The
-			<code>eContents()</code>
-			axes is its counterpart and returns the direct children of the element.
-		</p>
-		<h4 id="select">select()</h4>
-		<p>
-			<img border="0" src="../assets/pics/self-econtents-select-name-id.jpg" />
-		</p>
-		<p>
-			The
-			<code>select(...)</code>
-			service can be used to filter elements from a list by veryfing a predicate. In the query
-			<code>self.eContents()-&gt;select(p | p.name = 'id')</code>
-			the query only returns the elements which have a name equal to <strong>"id"</strong>, in this case a single element.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/self-econtents-select-name-notid.jpg" />
-		</p>
-		<p>
-			Equality is checked with a single
-			<code>=</code>
-			, inequality is expressed with the operator
-			<code>&lt;&gt;</code>
-			.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/self-econtents-select-visibility.jpg" />
-		</p>
-		<p>
-			Comparing values with an enumeration is slightly different as the enumeration value should be explicitely qualified. In the
-			<code>self.eContents()-&gt;select(p | p.visibility = uml::VisibilityKind::private )</code>
-			query the expression
-			<code>uml::VisibilityKind::private</code>
-			denotes the enumeration literal named <strong>private</strong> which is contained in the <strong>VisibilityKind</strong> enumeration of the <strong>uml</strong> metamodel.
-		</p>
-		<h4 id="eAllContents">eAllContents()</h4>
-		<p>
-			<img border="0" src="../assets/pics/self-econtainer-model-eallcontents.jpg" />
-		</p>
-		<p>
-			The
-			<code>eAllContents()</code>
-			axe is used to browse direct and indirect children. It goes from the starting point to the leafs of the model. Here the expression starts with
-			<code>self.eContainer(uml::Model)</code>
-			which has we&#8217;ve seen before goes up until an instance of <strong>Model</strong> is found. From here
-			<code>eAllContents</code>
-			is executed returning all the direct and indirect childrens of the &#171;Travel Agency&#187; <strong>model</strong> instance.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/econtainer-eallcontents-select-name-startswith.jpg" />
-		</p>
-		<p>Just like any other collection it can be filtered to retrieve, for instace, the elements whose name is starting by the letter &#171;I&#187;.</p>
-		<p>
-			<img border="0" src="../assets/pics/self-econtainer-model-eallcontents-components.jpg" />
-		</p>
-		<p>
-			A type parameter can be used to retrieve the direct or indirect children of a specific type: here <strong>components</strong>.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/self-econtainer-model-eallcontents-usecases.jpg" />
-		</p>
-		<p>
-			Or <strong>use case</strong> instances.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/self.econtainer-model-eallcontents-multipletypes.jpg" />
-		</p>
-		<p>It is interesting to note that the parameter can also be a collection of types, enabling the retrieval of many elements through a single pass.</p>
-		<h4 id="eInverse">eInverse()</h4>
-		<p>
-			Queries using
-			<code>eAllContents</code>
-			must be designed with care as they tend to lead to an intense browsing of the model. In many cases they can be replaced with
-			<code>eInverse()</code>
-			calls to retrieve elements of interests.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/self-econtainer-einverse.jpg" />
-		</p>
-		<p>
-			<code>eInverse()</code>
-			returns any element which as a relationship with the current one. This relationship can be indifferently a containment one or not.
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/econtainer-einverse-usecase.jpg" />
-		</p>
-		<p>
-			It is often of interest to restrict the type of elements we expect out of the
-			<code>eInverse()</code>
-			call. With the query
-			<code>self.eContainer().eInverse(uml::UseCase)</code>
-			only use cases instances will be returned, here the <strong>UseCase</strong> named &#171;to Invoice&#187; which refers to the &#171;Accounting&#187; <strong>Component</strong> through the reference named <strong>subject</strong>
-		</p>
-		<p>
-			<img border="0" src="../assets/pics/self-econtainer-einverse-packagedelement.jpg" />
-		</p>
-		<p>
-			One can also be even more explicit and query for a specific reference name, here
-			<code>packagedElement</code>
-			: only the <strong>Package</strong> named &#171;Components&#187; refers to the &#171;Accounting&#187; <strong>Component</strong> through the reference named &#171;packagedElement&#187;.
-		</p>
-		<h2 id="LanguageReference">Language Reference</h2>
-		<p>These sections are listing all the services of the standard library of AQL.</p>
-		<section id="services">
-			<div class="page-header">
-				<h3>Services available for all types</h3>
-			</div>
-
-			<h3>String + Object : String</h3>
-			<p>Returns the concatenation of the current string and the given object "any" (as a String).</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'times ' + 42</td>
-						<td>'times 42'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Object + String : String</h3>
-			<p>Returns the concatenation of self (as a String) and the given string "s".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>42 + ' times'</td>
-						<td>'42 times'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Object <> Object : Boolean</h3>
-			<p>Indicates whether the object "o1" is a different object from the object "o2".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello' <> 'World'</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>'Hello' <> 'Hello'</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Object = Object : Boolean</h3>
-			<p>Indicates whether the object "o1" i"the same as the object "o2". For more information refer to the Object#equals(Object) method.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello' = 'World'</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>'Hello' = 'Hello'</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Object.oclAsType(Object) : Object</h3>
-			<p>Casts the current object to the given type.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>anEPackage.oclAsType(ecore::EPackage)</td>
-						<td>anEPackage</td>
-					</tr>
-					<tr>
-						<td>anEPackage.oclAsType(ecore::EClass)</td>
-						<td>anEPackage</td>
-					</tr>
-				</tbody>
-			</table>
-			<p>Contrary to Acceleo 3, the type is ignored, the given object will be returned directly.</p>
-			<h4>In other languages</h4>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Language</th>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Acceleo 3 (MTL)</td>
-						<td>anEPackage.oclAsType(ecore::EPackage)</td>
-						<td>anEPackage</td>
-					</tr>
-					<tr>
-						<td>Acceleo 3 (MTL)</td>
-						<td>anEPackage.oclAsType(ecore::EClass)</td>
-						<td>oclInvalid</td>
-					</tr>
-				</tbody>
-			</table>
-			<hr />
-
-			<h3>Object.oclIsKindOf(Object) : Boolean</h3>
-			<p>Evaluates to "true" if the type of the object o1 conforms to the type "classifier". That is, o1 is of type "classifier" or a subtype of "classifier".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>anEPackage.oclIsKindOf(ecore::EPackage)</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>anEPackage.oclIsKindOf(ecore::ENamedElement)</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Object.oclIsTypeOf(Object) : Boolean</h3>
-			<p>Evaluates to "true" if the object o1 if of the type "classifier" but not a subtype of the "classifier".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>anEPackage.oclIsKindOf(ecore::EPackage)</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>anEPackage.oclIsKindOf(ecore::ENamedElement)</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Object.toString() : String</h3>
-			<p>Returns a string representation of the current object.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>42.toString()</td>
-						<td>'42'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Object.trace() : String</h3>
-			<p>Returns a string representation of the current environment.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>42.trace()</td>
-						<td>'Metamodels: http://www.eclipse.org/emf/2002/Ecore Services: org.eclipse.acceleo.query.services.AnyServices public java.lang.String org.eclipse.acceleo.query.services.AnyServices.add(java.lang.Object,java.lang.String) ... receiver: 42 '</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-		</section>
-		<section id="services">
-			<div class="page-header">
-				<h3>Services available for Booleans</h3>
-			</div>
-
-			<h3>Boolean.and(Boolean) : Boolean</h3>
-			<p>Logical and.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>true and false</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>false and true</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>true and true</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>false and false</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Boolean.implies(Boolean) : Boolean</h3>
-			<p>Logical implies.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>true implies true</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>true implies false</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>false implies true</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>false implies false</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Boolean.not() : Boolean</h3>
-			<p>Logical negation.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>not true</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>not false</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Boolean.or(Boolean) : Boolean</h3>
-			<p>Logical or.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>true or false</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>false or true</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>true or true</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>false or false</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Boolean.xor(Boolean) : Boolean</h3>
-			<p>Logical xor.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>true xor true</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>true xor false</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>false xor true</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>false xor false</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-		</section>
-		<section id="services">
-			<div class="page-header">
-				<h3>Services available for Collections</h3>
-			</div>
-
-			<h3>OrderedSet + Collection : OrderedSet</h3>
-			<p>Returns the concatenation of the given collection into the current set.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'} + OrderedSet{'c', 'b', 'f'}</td>
-						<td>OrderedSet{'a', 'b', 'c', 'c', 'b', 'f'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p>The service addAll has been replaced by "add" in order to have access to the operator "+" between to sets</p>
-			<h4>In other languages</h4>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Language</th>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Acceleo 3 (MTL)</td>
-						<td>OrderedSet{'a', 'b', 'c'}.addAll(OrderedSet{'c', 'b', 'f'})</td>
-						<td>OrderedSet{'a', 'b', 'c', 'c', 'b', 'f'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<hr />
-
-			<h3>Sequence + Collection : Sequence</h3>
-			<p>Returns the concatenation of the given collection into the given sequence.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}.add(Sequence{'d', 'e'})</td>
-						<td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'} + OrderedSet{'c', 'e'}</td>
-						<td>Sequence{'a', 'b', 'c', 'c', 'e'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p>The service addAll has been replaced by "add" in order to have access to the operator "+" between to sequences</p>
-			<h4>In other languages</h4>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Language</th>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Acceleo 3 (MTL)</td>
-						<td>Sequence{'a', 'b', 'c'} + Sequence{'d', 'e'}</td>
-						<td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
-					</tr>
-					<tr>
-						<td>Acceleo 3 (MTL)</td>
-						<td>Sequence{'a', 'b', 'c'}.addAll(OrderedSet{'c', 'e'})</td>
-						<td>Sequence{'a', 'b', 'c', 'c', 'e'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<hr />
-
-			<h3>Collection->any( x | ... ) : Object</h3>
-			<p>Gets the first element in the current collection for which the value returned by the lambda evaluates to "true".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->any(str | str.size() = 1)</td>
-						<td>'a'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->asOrderedSet() : OrderedSet</h3>
-			<p>Returns a set representation of the specified collection. Returns the same object if it is a set already. This operation has the same behavior as "asSet()"</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->asOrderedSet()</td>
-						<td>OrderedSet{'a', 'b', 'c'}</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->asOrderedSet()</td>
-						<td>OrderedSet{'a', 'b', 'c'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->asSequence() : Sequence</h3>
-			<p>Returns a sequence representation of the specified collection. Returns the same object if it is already a sequence.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->asSequence()</td>
-						<td>Sequence{'a', 'b', 'c'}</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->asSequence()</td>
-						<td>Sequence{'a', 'b', 'c'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->asSet() : OrderedSet</h3>
-			<p>Returns a set representation of the specified collection. Returns the same object if it is already a set.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->asSet()</td>
-						<td>OrderedSet{'a', 'b', 'c'}</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b', 'c', 'c', 'a'}->asSet()</td>
-						<td>OrderedSet{'a', 'b', 'c'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->at(Integer) : Object</h3>
-			<p>Returns the element at the specified position in the sequence.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->at(1)</td>
-						<td>'a'</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->at(2)</td>
-						<td>'b'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->collect( x | ... ) : Sequence{Object}</h3>
-			<p>Returns a sequence containing the result of applying "lambda" on all elements contained in the current sequence, maintaining order.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->collect(str | str.toUpper())</td>
-						<td>Sequence{'A', 'B', 'C'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->collect( x | ... ) : OrderedSet{Object}</h3>
-			<p>Returns a set containing the result of applying "lambda" on all elements contained in the current set, maintaining order.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->collect(str | str.toUpper())</td>
-						<td>OrderedSet{'A', 'B', 'C'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->concat(Collection) : OrderedSet</h3>
-			<p>Returns the concatenation of the current set with the given collection.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}.concat(Sequence{'d', 'e'})</td>
-						<td>OrderedSet{'a', 'b', 'c', 'd', 'e'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<h4>In other languages</h4>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Language</th>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Acceleo 3 (MTL)</td>
-						<td>OrderedSet{'a', 'b', 'c'}.addAll(Sequence{'d', 'e'})</td>
-						<td>OrderedSet{'a', 'b', 'c', 'd', 'e'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<hr />
-
-			<h3>Sequence->concat(Collection) : Sequence</h3>
-			<p>Returns the concatenation of the current sequence with the given collection.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}.concat(Sequence{'d', 'e'})</td>
-						<td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<h4>In other languages</h4>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Language</th>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Acceleo 3 (MTL)</td>
-						<td>Sequence{'a', 'b', 'c'}.addAll(Sequence{'d', 'e'})</td>
-						<td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<hr />
-
-			<h3>OrderedSet->count(Object) : Integer</h3>
-			<p>Returns "1" if the current set contains the given object, "0" otherwise.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->count('d')</td>
-						<td>0</td>
-					</tr>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->count('a')</td>
-						<td>1</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence{Object}->count(Object) : Integer</h3>
-			<p>Counts the number of occurrences of the given object in the given sequence</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->count('d')</td>
-						<td>0</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->count('a')</td>
-						<td>1</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->excludes(Object) : Boolean</h3>
-			<p>Indicates if the given collection doesn't contain the given object.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->excludes('a')</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->excludes('d')</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->excludesAll(Collection) : Boolean</h3>
-			<p>Indicates if no elements from the second collection are contained in the first collection</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b'}->excludesAll(OrderedSet{'f'})</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b'}->excludesAll(OrderedSet{'a', 'f'})</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->excluding(Object) : OrderedSet</h3>
-			<p>Removes the given object from the current set.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->excluding('c')</td>
-						<td>OrderedSet{'a', 'b'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->excluding(Object) : Sequence</h3>
-			<p>Removes the given object from the current sequence.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->excluding('c')</td>
-						<td>Sequence{'a', 'b'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->exists( x | ... ) : Boolean</h3>
-			<p>Indicates if it exists an object from the given collection for which the given lambda evaluates to "true"</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->exists(str | str.size() > 5)</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->filter(EClassifier) : OrderedSet</h3>
-			<p>Keeps only instances of the given EClassifier from the given set.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{anEClass, anEAttribute, anEReference}->filter(ecore::EClass)</td>
-						<td>OrederedSet{anEClass}</td>
-					</tr>
-					<tr>
-						<td>OrderedSet{anEClass, anEAttribute}->filter(ecore::EStructuralFeature)</td>
-						<td>OrederedSet{anEAttribute}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->filter(OrderedSet{EClassifier}) : Sequence</h3>
-			<p>Keeps only instances of the given EClassifier in the given sequence.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{anEClass, anEAttribute, anEReference}->filter({ecore::EClass | ecore::EReference})</td>
-						<td>Sequence{anEClass, anEReference}</td>
-					</tr>
-					<tr>
-						<td>Sequence{anEClass, anEAttribute, anEPackage}->filter({ecore::EStructuralFeature | ecore::EPacakge})</td>
-						<td>Sequence{anEAttribute, anEPackage}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->filter(OrderedSet{EClassifier}) : OrderedSet</h3>
-			<p>Keeps only instances of the given set of EClassifier from the given set.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{anEClass, anEAttribute, anEReference}->filter({ecore::EClass | ecore::EReference})</td>
-						<td>OrderedSet{anEClass, anEReference}</td>
-					</tr>
-					<tr>
-						<td>OrderedSet{anEClass, anEAttribute, anEPackage}->filter({ecore::EStructuralFeature | ecore::EPacakge})</td>
-						<td>OrderedSet{anEAttribute, anEPackage}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->filter(EClassifier) : Sequence</h3>
-			<p>Keeps only instances of the given EClassifier in the given sequence.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{anEClass, anEAttribute, anEReference}->filter(ecore::EClass)</td>
-						<td>Sequence{anEClass}</td>
-					</tr>
-					<tr>
-						<td>Sequence{anEClass, anEAttribute}->filter(ecore::EStructuralFeature)</td>
-						<td>Sequence{anEAttribute}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->first() : Object</h3>
-			<p>Returns the first element of the specified Collection.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->first()</td>
-						<td>'a'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->forAll( x | ... ) : Boolean</h3>
-			<p>Indicates if all the objects from the given collection validate the given lamba</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'ccc'}->forAll(str | str.size() = 1)</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->forAll(str | str.size() = 1)</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->includes(Object) : Boolean</h3>
-			<p>Indicates if the given collection contains the given object.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->includes('a')</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->includes('d')</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->includesAll(Collection) : Boolean</h3>
-			<p>Indicates if all elements from the second collection are contained in the first collection</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->includesAll(OrderedSet{'a'})</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->includesAll(OrderedSet{'a', 'f'})</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->including(Object) : OrderedSet</h3>
-			<p>Adds the given object to the current set.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->including('d')</td>
-						<td>OrderedSet{'a', 'b', 'c', 'd'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->including(Object) : Sequence</h3>
-			<p>Adds the given object to the current sequence.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->including('d')</td>
-						<td>Sequence{'a', 'b', 'c', 'd'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->indexOf(Object) : Integer</h3>
-			<p>Returns the index of the given object in the given set ([1..size]).</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{1, 2, 3, 4}->indexOf(3)</td>
-						<td>3</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->indexOf(Object) : Integer</h3>
-			<p>Returns the index of the given object in the given sequence ([1..size]).</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{1, 2, 3, 4}->indexOf(3)</td>
-						<td>3</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->insertAt(Integer, Object) : OrderedSet</h3>
-			<p>Inserts the given object in a copy of the given set at the given position ([1..size]). If the given set already contains this object, it will be moved to the accurate position.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->insertAt(2, 'f')</td>
-						<td>Sequence{'a', 'f', 'b', 'c'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->insertAt(Integer, Object) : Sequence</h3>
-			<p>Inserts the given object in a copy of the given sequence at the given position ([1..size]).</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->insertAt(2, 'f')</td>
-						<td>Sequence{'a', 'f', 'b', 'c'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->intersection(Collection) : OrderedSet</h3>
-			<p>Creates a set with the elements from the given set that are also present in the given collection.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->intersection(OrderedSet{'a', 'f'})</td>
-						<td>OrderedSet{'a'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->intersection(Collection) : Sequence</h3>
-			<p>Creates a sequence with elements from the given sequence that are present in both the current sequence and the given other {@code Collection}. Iteration order will match that of the current sequence. Duplicates from the first list will all be kept in the result if they also are in the
-				second one, but duplicates from the second list will be dumped even if they are present in the first.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->intersection(OrderedSet{'a', 'f'})</td>
-						<td>Sequence{'a'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->isEmpty() : Boolean</h3>
-			<p>Returns "true" when the input collection is empty.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->isEmpty()</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>Sequence{}->isEmpty()</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->isUnique( x | ... ) : Boolean</h3>
-			<p>Indicates if the evaluation of the given lambda gives a different value for all elements of the given collection.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->isUnique(str | str.size())</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'bb', 'ccc'}->isUnique(str | str.size())</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->last() : Object</h3>
-			<p>Returns the last element of the given sequence.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->last()</td>
-						<td>'c'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->last() : Object</h3>
-			<p>Returns the last element of the given set.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->last()</td>
-						<td>'c'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->notEmpty() : Boolean</h3>
-			<p>Returns "true" when the input collection is not empty.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->notEmpty()</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>Sequence{}->notEmpty()</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->one( x | ... ) : Boolean</h3>
-			<p>Indicates if one and only one element of the given collection validates the given lambda.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->one(str | str.equals('a'))</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'a', 'c'}->one(str | str.equals('a'))</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->prepend(Object) : OrderedSet</h3>
-			<p>Inserts the given object in a copy of the given set at the first position. If the set already contained the given object, it is moved to the first position.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->prepend('f')</td>
-						<td>OrderedSet{'f', 'a', 'b', 'c'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->prepend(Object) : Sequence</h3>
-			<p>Inserts the given object in a copy of the given sequence at the first position.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->prepend('f')</td>
-						<td>Sequence{'f', 'a', 'b', 'c'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->reject( x | ... ) : OrderedSet</h3>
-			<p>Reject returns a filtered version of the specified set. Only elements for which the given "lambda" evaluates to false will be present in the returned set</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->reject(str | str.equals('a'))</td>
-						<td>OrderedSet{'b', 'c'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->reject( x | ... ) : Sequence</h3>
-			<p>Reject returns a filtered version of the specified sequence. Only elements for which the given "lambda" evaluates to false will be present in the returned sequence</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->reject(str | str.equals('a'))</td>
-						<td>Sequence{'b', 'c'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->reverse() : OrderedSet</h3>
-			<p>Returns the given set in reversed order.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->reverse()</td>
-						<td>OrderedSet{'c', 'b', 'a'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->reverse() : Sequence</h3>
-			<p>Returns the given sequence in reversed order.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->reverse()</td>
-						<td>Sequence{'c', 'b', 'a'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->select( x | ... ) : Sequence</h3>
-			<p>Select returns a filtered version of the specified sequence. Only elements for which the given "lambda" evaluates to true will be present in the returned sequence.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->select(str | str.equals('a'))</td>
-						<td>Sequence{'a'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->select( x | ... ) : OrderedSet</h3>
-			<p>Select returns a filtered version of the specified set. Only elements for which the given "lambda" evaluates to true will be present in the returned set.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->select(str | str.equals('a'))</td>
-						<td>OrderedSet{'a'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->sep(Object, Object, Object) : Sequence{Object}</h3>
-			<p>Inserts the given separator between each elements of the given collection, the given prefix before the first element, and the given suffix after the last element.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->sep('[', '-', ']')</td>
-						<td>Sequence{'[', 'a', '-', 'b', '-', 'c', ']'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->sep(Object) : Sequence{Object}</h3>
-			<p>Inserts the given separator between each elements of the given collection.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->sep('-')</td>
-						<td>Sequence{'a', '-', 'b', '-', 'c'}</td>
-					</tr>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->sep('-')</td>
-						<td>Sequence{'a', '-', 'b', '-', 'c'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->size() : Integer</h3>
-			<p>Returns the size of the specified collection</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->size()</td>
-						<td>3</td>
-					</tr>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c', 'd'}->size()</td>
-						<td>4</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->sortedBy( x | ... ) : Sequence</h3>
-			<p>Returns a sequence containing the elements of the original sequence ordered by the result of the given lamba</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'aa', 'bbb', 'c'}->sortedBy(str | str.size())</td>
-						<td>Sequence{'c', 'aa', 'bbb'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->sortedBy( x | ... ) : OrderedSet</h3>
-			<p>Returns a set containing the elements of the original set ordered by the result of the given lamba</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'aa', 'bbb', 'c'}->sortedBy(str | str.size())</td>
-						<td>OrderedSet{'c', 'aa', 'bbb'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence - Collection : Sequence</h3>
-			<p>Returns the difference of the current sequence and the given collection.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'} - Sequence{'c', 'b', 'f'}</td>
-						<td>Sequence{'a'}</td>
-					</tr>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'} - OrderedSet{'c', 'b', 'f'}</td>
-						<td>Sequence{'a'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p>The service removeAll has been replaced by "sub" in order to have access to the operator "-" between to sequences</p>
-			<h4>In other languages</h4>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Language</th>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Acceleo 3 (MTL)</td>
-						<td>Sequence{'a', 'b', 'c'}.removeAll(Sequence{'c', 'b', 'f'})</td>
-						<td>Sequence{'a'}</td>
-					</tr>
-					<tr>
-						<td>Acceleo 3 (MTL)</td>
-						<td>Sequence{'a', 'b', 'c'}.removeAll(OrderedSet{'c', 'b', 'f'})</td>
-						<td>Sequence{'a'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<hr />
-
-			<h3>OrderedSet - Collection : OrderedSet</h3>
-			<p>Returns the difference of the current set and the given collection.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'} - OrderedSet{'c', 'b', 'f'}</td>
-						<td>OrderedSet{'a'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p>The service removeAll has been replaced by "sub" in order to have access to the operator "-" between to sets</p>
-			<h4>In other languages</h4>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Language</th>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Acceleo 3 (MTL)</td>
-						<td>OrderedSet{'a', 'b', 'c'}.removeAll(OrderedSet{'c', 'b', 'f'})</td>
-						<td>OrderedSet{'a'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<hr />
-
-			<h3>OrderedSet->subOrderedSet(Integer, Integer) : OrderedSet</h3>
-			<p>Returns a subset of the given set</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->subOrderedSet(1, 2)</td>
-						<td>OrderedSet{'a', 'b'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->subSequence(Integer, Integer) : Sequence</h3>
-			<p>Returns a subset of the given sequence</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->subSequence(1, 2)</td>
-						<td>Sequence{'a', 'b'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Collection->sum() : Number</h3>
-			<p>Sums elements of the given collection if possible.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{1, 2, 3, 4}->sum()</td>
-						<td>10</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Sequence->union(Sequence) : Sequence</h3>
-			<p>Returns a sequence containing all the elements of the first and second sequences</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>Sequence{'a', 'b', 'c'}->union(Sequence{'d', 'c'})</td>
-						<td>Sequence{'a', 'b', 'c', 'd'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>OrderedSet->union(OrderedSet) : OrderedSet</h3>
-			<p>Returns a set containing all the elements of the first and second sets</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>OrderedSet{'a', 'b', 'c'}->union(OrderedSet{'d', 'c'})</td>
-						<td>OrderedSet{'a', 'b', 'c', 'd'}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-		</section>
-		<section id="services">
-			<div class="page-header">
-				<h3>Services available for Comparables</h3>
-			</div>
-
-			<h3>Comparable > Comparable : Boolean</h3>
-			<p>Compares "a" to "b" and return "true" if "a" is greater than "b".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello' > 'Abc'</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>'Hello' > 'Hello'</td>
-						<td>false</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Comparable >= Comparable : Boolean</h3>
-			<p>Compares "a" to "b" and return "true" if "a" is greater than or equal to "b".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello' >= 'Abc'</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>'Hello' >= 'Hello'</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Comparable < Comparable : Boolean</h3>
-			<p>Compares "a" to "b" and return "true" if "a" is less than "b".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello' < 'Hello'</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>'Hello' < 'World'</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>Comparable <= Comparable : Boolean</h3>
-			<p>Compares "a" to "b" and return "true" if "a" is less than or equal to "b".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello' <='Hello'</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>'Hello' <='World'</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-		</section>
-		<section id="services">
-			<div class="page-header">
-				<h3>Services available for EObjects</h3>
-			</div>
-
-			<h3>EClass.allInstances() : Sequence{EObject}</h3>
-			<p>Returns all instances of the EClass</p>
-			<hr />
-
-			<h3>OrderedSet{EClass}->allInstances() : Sequence{EObject}</h3>
-			<p>Returns all instances of any EClass from the OrderedSet</p>
-			<hr />
-
-			<h3>EObject.eAllContents() : Sequence{EObject}</h3>
-			<p>Returns a sequence of the EObjects recursively contained in the specified root eObject.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>anEPackage.eAllContents()</td>
-						<td>Sequence{firstEClass, firstEAttribute, secondEClass, firstDataType}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>EObject.eAllContents(OrderedSet{EClass}) : Sequence{EObject}</h3>
-			<p>Returns a sequence of the EObjects recursively contained in the specified root eObject and that are instances of the specified EClass</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>anEPackage.eAllContents({ecore::EPackage | ecore::EClass})</td>
-						<td>Sequence{ePackage, eClass, ...}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>EObject.eAllContents(EClass) : Sequence{EObject}</h3>
-			<p>Returns a sequence of the EObjects recursively contained in the specified root eObject and that are instances of the specified EClass</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>anEPackage.eAllContents(ecore::EClass)</td>
-						<td>Sequence{firstEClass, secondEClass}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>EObject.eClass() : EClass</h3>
-			<p>Returns the EClass of the specified EObject</p>
-			<hr />
-
-			<h3>EObject.eContainer() : EObject</h3>
-			<p>Returns the container of the specified EObject</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>firstEAttribute.eContainer()</td>
-						<td>firstEClass</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>EObject.eContainer(EClass) : EObject</h3>
-			<p>Returns the first container of the specified EObject that matches the given type</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>firstEAttribute.eContainer(ecore::EPackage)</td>
-						<td>anEPackage</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>EObject.eContainerOrSelf(EClass) : EObject</h3>
-			<p>Returns self or the first container of the specified EObject that matches the given type</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>firstEAttribute.eContainerOrSelf(ecore::EAttribute)</td>
-						<td>firstEAttribute</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>EObject.eContainingFeature() : EStructuralFeature</h3>
-			<p>Returns the containing feature of the specified EObject</p>
-			<hr />
-
-			<h3>EObject.eContainmentFeature() : EReference</h3>
-			<p>Returns the containment feature of the specified EObject</p>
-			<hr />
-
-			<h3>EObject.eContents() : Sequence{EObject}</h3>
-			<p>Returns the contents of the specified EObject instance.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>anEPackage.eContents()</td>
-						<td>Sequence{firstEClass, secondEClass, firstDataType}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>EObject.eContents(EClass) : Sequence{EObject}</h3>
-			<p>Returns a sequence made of the instances of the specified type in the contents of the specified eObject.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>anEPackage.eContents(ecore::EDataType)</td>
-						<td>Sequence{firstDataType}</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>EObject.eContents(OrderedSet{EClass}) : Sequence{EObject}</h3>
-			<p>Returns a sequence made of the instances of the specified types in the contents of the specified eObject.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>anEPackage.eContents({ecore::EPackage | ecore::EClass})</td>
-						<td>Sequence{SubEPackage, eClass, ... }</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>EObject.eCrossReferences() : Object</h3>
-			<p>Returns the list of all EObjects cross-referenced from the receiver.</p>
-			<hr />
-
-			<h3>EObject.eGet(String) : Object</h3>
-			<p>Handles calls to the operation "eGet". This will fetch the value of the feature named "featureName" on "source"</p>
-			<hr />
-
-			<h3>EObject.eInverse() : OrderedSet{EObject}</h3>
-			<p>Returns the set containing the inverse references.</p>
-			<hr />
-
-			<h3>EObject.eInverse(EClassifier) : OrderedSet{EObject}</h3>
-			<p>Returns the elements of the given type from the set of the inverse references of the receiver.</p>
-			<hr />
-
-			<h3>EObject.eInverse(String) : OrderedSet{EObject}</h3>
-			<p>Returns the elements from the set of the inverse references of the receiver that are referencing the receiver using a feature with the given name.</p>
-			<hr />
-		</section>
-		<section id="services">
-			<div class="page-header">
-				<h3>Services available for Resources and URIs</h3>
-			</div>
-
-			<h3>EObject.eResource() : Resource</h3>
-			<p>Returns the Resource containing the given EObject. This service is equivalent to a direct call to EObject#eResource().</p>
-			<hr />
-
-			<h3>URI.fileExtension() : String</h3>
-			<p>Returns the extension of the file referred to by the given URI. This service is equivalent to a direct call to URI#fileExtension()</p>
-			<hr />
-
-			<h3>Resource.getContents() : Sequence{EObject}</h3>
-			<p>Returns the direct content of the given Resource. This service is equivalent to a direct call to Resource#getContents()</p>
-			<hr />
-
-			<h3>Resource.getContents(EClass) : Sequence{EObject}</h3>
-			<p>Returns the EObjects of the given type from the direct content of the given Resource.</p>
-			<hr />
-
-			<h3>Resource.getURI() : URI</h3>
-			<p>Returns the URI of the given Resource. This service is equivalent to a direct call to Resource#getURI()</p>
-			<hr />
-
-			<h3>URI.isPlatformPlugin() : Boolean</h3>
-			<p>Returns "true" if the given URI is a platform plugin URI. This service is equivalent to a direct call to URI#isPlatformPlugin()</p>
-			<hr />
-
-			<h3>URI.isPlatformResource() : Boolean</h3>
-			<p>Returns "true" if the given URI is a platform resource URI. This service is equivalent to a direct call to URI#isPlatformResource()</p>
-			<hr />
-
-			<h3>URI.lastSegment() : String</h3>
-			<p>Returns the last segment of the given URI. This service is equivalent to a direct call to URI#lastSegment()</p>
-			<hr />
-		</section>
-		<section id="services">
-			<div class="page-header">
-				<h3>Services available for Strings</h3>
-			</div>
-
-			<h3>String + String : String</h3>
-			<p>Returns a string that is the result of the concatenation of the current string and the string "b".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello' + 'World'</td>
-						<td>HelloWorld</td>
-					</tr>
-				</tbody>
-			</table>
-			<p>This operation behaves like '+' between two strings.</p>
-			<hr />
-
-			<h3>String.concat(String) : String</h3>
-			<p>Returns a string that is the result of the concatenation of the current string and the string "b".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello'.concat('World')</td>
-						<td>HelloWorld</td>
-					</tr>
-				</tbody>
-			</table>
-			<p>This operation behaves like '+' between two strings.</p>
-			<hr />
-
-			<h3>String.contains(String) : Boolean</h3>
-			<p>Returns "true" if the current String contains the String "b"</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello'.contains('llo')</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.endsWith(String) : Boolean</h3>
-			<p>Returns true if the current String ends with the string "b".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello'.endsWidth('llo')</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.equalsIgnoreCase(String) : Boolean</h3>
-			<p>Returns true if the current String is equals to the String "b" without considering case in the comparison.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello'.equalsIgnoreCase('hello')</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.first(Integer) : String</h3>
-			<p>Returns the "n" first characters of the current String, or the current String itself if its size is less than "n".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloWorld'.first(5)</td>
-						<td>'Hello'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.index(String) : Integer</h3>
-			<p>Returns the index of the first occurrence "subString" in the current String, or -1 if "subString" is not in the current String. The index referential is 1 as in OCL and not 0.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloHello'.index('Hello')</td>
-						<td>1</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.index(String, Integer) : Integer</h3>
-			<p>Returns the index of the first occurrence "subString" in the current String from the given index, or -1 if "subString" is not in the current String. The index referential is 1 as in OCL and not 0.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloHello'.index('Hello', 2)</td>
-						<td>6</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.isAlpha() : Boolean</h3>
-			<p>Returns "true" if self consists only of alphabetical characters, "false" otherwise.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'abc123'.isAlpha()</td>
-						<td>false</td>
-					</tr>
-					<tr>
-						<td>'abcdef'.isAlpha()</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.isAlphaNum() : Boolean</h3>
-			<p>Returns "true" if self consists only of alphanumeric characters, "false" otherwise.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'abc123'.isAlphaNum()</td>
-						<td>true</td>
-					</tr>
-					<tr>
-						<td>'abcdef'.isAlphaNum()</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.last(Integer) : String</h3>
-			<p>Returns the "n" last characters of the current String, or the current String if its size is less than "n".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloWorld'.last(5)</td>
-						<td>'World'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.lastIndex(String, Integer) : Integer</h3>
-			<p>Returns the index of the last occurrence "subString" in the current String searching backward from the given index, or -1 if "subString" is not in the current String. The index referential is 1 as in OCL and not 0.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloHello'.lastIndex('Hello', 7)</td>
-						<td>1</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.lastIndex(String) : Integer</h3>
-			<p>Returns the index of the last occurrence of "subString" in the current String, "-1" if the current String doesn't contain this particular substring. The index referential is 1 as in OCL and not 0.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloHello'.lastIndex('World')</td>
-						<td>6</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.matches(String) : Boolean</h3>
-			<p>Returns "true" if the current String matches the given "regex".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello'.matches('*llo')</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.prefix(String) : String</h3>
-			<p>Returns the current String prefixed with the given "prefix".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'World'.prefix('Hello')</td>
-						<td>'HelloWorld'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.replace(String, String) : String</h3>
-			<p>Replaces the first substring of the current String that matches the regular expression "regex" with the String "replacement".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello'.replace('(.*)ll', 'Wh')</td>
-						<td>'Who'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.replaceAll(String, String) : String</h3>
-			<p>Replaces each substring of the current String that matches the given regular expression "regex" with the String "replacement".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'TestTest'.replace('.st', 'erminated')</td>
-						<td>'TerminatedTerminated'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.size() : Integer</h3>
-			<p>Return the length of the current String.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloWorld'.size()</td>
-						<td>10</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.startsWith(String) : Boolean</h3>
-			<p>Returns true if the current String starts with the string "b".</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'Hello'.startsWith('Hell')</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.strcmp(String) : Integer</h3>
-			<p>Returns an integer that is either negative, zero or positive depending on whether s1 is alphabetically less than, equal to or greater than self. Note that upper case letters come before lower case ones, so that 'AA' is closer to 'AC' than it is to 'Ab'.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'strcmp operation'.strcmp('strcmp')</td>
-						<td>10</td>
-					</tr>
-					<tr>
-						<td>'strcmp operation'.strcmp('strcmp operation')</td>
-						<td>0</td>
-					</tr>
-					<tr>
-						<td>'strcmp operation'.strcmp('strtok')</td>
-						<td>-17</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.strstr(String) : Boolean</h3>
-			<p>Searches r in self.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloWorld'.strstr('World')</td>
-						<td>true</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.substitute(String, String) : String</h3>
-			<p>Substitutes the first occurrence of the substring "r" in self by "t" and returns the resulting string. Will return self if it contains no occurrence of the substring r.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'WorldWorld'.substitute('World', 'Hello')</td>
-						<td>'HelloWorld'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.substituteAll(String, String) : String</h3>
-			<p>Substitutes all occurences of the substring "r" in self by "t" and returns the resulting string. Will return self if it contains no occurrence of the substring r.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'WorldWorld'.substituteAll('World', 'Hello')</td>
-						<td>'HelloHello'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.substring(Integer, Integer) : String</h3>
-			<p>Returns a string containing all characters from self starting from index lower up to index upper included. Both lower and upper parameters should be contained between 1 and self.size() included. Lower cannot be greater than upper.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloWorld'.substring(1, 5)</td>
-						<td>'Hello'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.substring(Integer) : String</h3>
-			<p>Returns a string containing all characters from self starting from index lower up to the end of the string included. The lower parameter should be contained between 1 and self.size() included. Lower cannot be greater than the size of the String.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloWorld'.substring(5)</td>
-						<td>'World'</td>
-					</tr>
-					<tr>
-						<td>'HelloWorld'.substring(1)</td>
-						<td>'HelloWorld'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.toInteger() : Integer</h3>
-			<p>Returns an integer of value equal to self</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'42'.toInteger()</td>
-						<td>42</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.toLower() : String</h3>
-			<p>Returns the current String with all characters transformed to lower case.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloWorld'.toLower()</td>
-						<td>'helloworld'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.toLowerFirst() : String</h3>
-			<p>Returns the self string with the first characters transformed to lower case.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloWorld'.toLowerFirst()</td>
-						<td>'helloWorld'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.toReal() : Double</h3>
-			<p>Returns a real of value equal to self</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'41.9'.toReal()</td>
-						<td>41.9</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.toUpper() : String</h3>
-			<p>Returns the current String with all characters transformed to upper case.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'HelloWorld'.toUpper()</td>
-						<td>'HELLOWORLD'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.toUpperFirst() : String</h3>
-			<p>Returns the current String with the first characters transformed to upper case.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'helloworld'.toUpperFirst()</td>
-						<td>'Helloworld'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.tokenize(String) : Sequence{String}</h3>
-			<p>Splits the current String by using the given "delimiter" into a collection of String</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'a, b, c, d'.tokenize(', ')</td>
-						<td>['a', 'b', 'c', 'd']</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.tokenize() : Sequence{String}</h3>
-			<p>Splits the current String by whitespace delimiter into a collection of String</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>'a, b, c, d'.tokenize()</td>
-						<td>['a,', 'b,', 'c,', 'd']</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-
-			<h3>String.trim() : String</h3>
-			<p>Trims the given String.</p>
-			<table class="table table-striped table-bordered table-condensed">
-				<thead>
-					<tr>
-						<th>Expression</th>
-						<th>Result</th>
-					</tr>
-				</thead>
-				<colgroup>
-					<col width="60%" />
-					<col width="40%" />
-				</colgroup>
-				<tbody>
-					<tr>
-						<td>' Hello World '.trim()</td>
-						<td>'Hello World'</td>
-					</tr>
-				</tbody>
-			</table>
-			<p></p>
-			<hr />
-		</section>
-
-		<h3 id="SyntaxReference">Syntax Reference</h3>
-		<h4 id="References">References</h4>
-		<table>
-			<tr>
-				<td style="text-align: left;"><em>variable_name</em></td>
-				<td>a reference to a variable</td>
-				<td>myVariable</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>.</strong> <em>feature_name</em></td>
-				<td>implicit collect</td>
-				<td>eClass.name</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>.</strong> <em>service_name</em> <strong>(</strong> ( <em>expression</em> ( <strong>,</strong> <em>expression</em> ) * ) ? <strong>)</strong></td>
-				<td>implicit collect</td>
-				<td>myVariable.toString()</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>-&gt;</strong> <em>service_name</em> <strong>(</strong> ( <em>expression</em> ( <strong>,</strong> <em>expression</em> ) * ) ? <strong>)</strong></td>
-				<td>call on the collection itself if the expression is not a collection it will be wrapped into an ordered set</td>
-				<td>mySequence-&gt;sep(&#8249;,&#8250;)</td>
-			</tr>
-		</table>
-		<h4 id="Operators">Operators</h4>
-		<table>
-			<tr>
-				<td style="text-align: left;"><strong>not</strong> <em>expression</em></td>
-				<td>call the not service</td>
-				<td>not eClass.interface</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>-</strong> <em>expression</em></td>
-				<td>call the unaryMin service</td>
-				<td>-3</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>+</strong> <em>expression</em></td>
-				<td>call the add service</td>
-				<td>2 + 2</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>-</strong> <em>expression</em></td>
-				<td>call the sub service</td>
-				<td>2 &#8211; 2</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>&#42;</strong> <em>expression</em></td>
-				<td>call the mult service</td>
-				<td>2 * 2</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>&#47;</strong> <em>expression</em></td>
-				<td>call the divOp service</td>
-				<td>2 / 2</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>&lt;=</strong> <em>expression</em></td>
-				<td>call the lessThanEqual service</td>
-				<td>2 &lt;= 2</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>&gt;=</strong> <em>expression</em></td>
-				<td>call the greaterThanEqual service</td>
-				<td>2 &gt;= 2</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>&lt;</strong> <em>expression</em></td>
-				<td>call the lessThan service</td>
-				<td>1 &lt; 2</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>&gt;</strong> <em>expression</em></td>
-				<td>call the greaterThan service</td>
-				<td>2 &gt; 1</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>&lt;&gt;</strong> <em>expression</em></td>
-				<td>call the differs service</td>
-				<td>1 &lt;&gt; 2</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>!=</strong> <em>expression</em></td>
-				<td>call the differs service</td>
-				<td>1 != 2</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>=</strong> <em>expression</em></td>
-				<td>call the equals service</td>
-				<td>1 = 1</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>and</strong> <em>expression</em></td>
-				<td>call the and service</td>
-				<td>eClass.interface and eClass.abstact</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>or</strong> <em>expression</em></td>
-				<td>call the or service</td>
-				<td>eClass.interface or eClass.abstact</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>xor</strong> <em>expression</em></td>
-				<td>call the xor service</td>
-				<td>eClass.interface xor eClass.abstact</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>expression</em> <strong>implies</strong> <em>expression</em></td>
-				<td>call implies service</td>
-				<td>eClass.interface implies eClass.abstact</td>
-			</tr>
-		</table>
-		<h4 id="Structures">Structures</h4>
-		<table>
-			<tr>
-				<td style="text-align: left;"><strong>(</strong> <em>expression</em> <strong>)</strong></td>
-				<td>parenthesis are used to change priority during evaluation</td>
-				<td>(2 + 2 ) * 3</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>if</strong> <em>expression</em> <strong>then</strong> <em>expression</em> <strong>else</strong> <em>expression</em> <strong>endif</strong></td>
-				<td>conditional expression</td>
-				<td>if eClass.abstract then &#8249;blue&#8250; else &#8249;red&#8250; endif</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>let</strong> <em>new_variable_name</em> ( <strong>:</strong> <em>type_literal</em>)? ( <strong>,</strong> <em>new_variable_name</em> ( <strong>:</strong> <em>type_literal</em>)?)* <strong>in</strong> <em>expression</em></td>
-				<td>let allows to define variables in order to factorise expression</td>
-				<td>let container = self.eContainer() in container.eAllContents()</td>
-			</tr>
-		</table>
-		<h4 id="Literals">Literals</h4>
-		<table>
-			<tr>
-				<td style="text-align: left;"><strong>'</strong> <em>escaped_string</em> <strong>'</strong></td>
-				<td>you can use java style escape sequence <strong>\u0000</strong> <strong>\x00</strong> <strong>\\</strong> <strong>\'</strong> <strong>\b</strong> <strong>\t</strong> <strong>\n</strong> ...
-				</td>
-				<td>'TODO list:\n\t- walk the dog\n\t- make diner'</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;">[ <strong>0</strong> - <strong>9</strong>]+
-				</td>
-				<td>an integer</td>
-				<td>100</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;">[ <strong>0</strong> - <strong>9</strong>]+ <strong>.</strong> [ <strong>0</strong> - <strong>9</strong>]+
-				</td>
-				<td>a real</td>
-				<td>3.14</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>true</strong></td>
-				<td>the boolean value true</td>
-				<td>true</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>false</strong></td>
-				<td>the boolean value false</td>
-				<td>false</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>null</strong></td>
-				<td>the null value</td>
-				<td>null</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>Sequence{</strong> ( <em>expression</em> ( <strong>,</strong> <em>expression</em>) * ) ? <strong>}</strong></td>
-				<td>a sequence defined in extension</td>
-				<td>Sequence{1, 2, 3, 3}</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>OrderedSet{</strong> ( <em>expression</em> ( <strong>,</strong> <em>expression</em>) * ) ? <strong>}</strong></td>
-				<td>an ordered set defined in extension</td>
-				<td>OrderedSet{1, 2, 3}</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>epackage_name</em> <strong>::</strong> <em>eenum_name</em> <strong>::</strong> <em>eenum_literal_name</em></td>
-				<td>an EEnumLiteral</td>
-				<td>art::Color::blue</td>
-			</tr>
-		</table>
-		<h4 id="Typeliterals">Type literals</h4>
-		<table>
-			<tr>
-				<td style="text-align: left;"><strong>String</strong></td>
-				<td>the string type</td>
-				<td>String</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>Integer</strong></td>
-				<td>the integer type</td>
-				<td>Integer</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>Real</strong></td>
-				<td>the real type</td>
-				<td>Real</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>Boolean</strong></td>
-				<td>the string type</td>
-				<td>Boolean</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>Sequence(</strong> <em>type_litral</em> <strong>)</strong></td>
-				<td>a sequence type</td>
-				<td>Sequence(String)</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>OrderedSet(</strong> <em>type_litral</em> <strong>)</strong></td>
-				<td>an ordered set type</td>
-				<td>OrderedSet(String)</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><em>epackage_name</em> <strong>::</strong> <em>eclassifier_name</em></td>
-				<td>an eclassifier type</td>
-				<td>ecore::EPackage</td>
-			</tr>
-			<tr>
-				<td style="text-align: left;"><strong>{</strong> <em>epackage_name</em> <strong>::</strong> <em>eclassifier_name</em> (*</td>
-				<td>* <em>epackage_name</em> <strong>::</strong> <em>eclassifier_name</em>) * <strong>}</strong>
-				</td>
-				<td>a set of eclassifiers</td>
-				<td>{ecore::EPackage &#124; ecore::EClass}</td>
-			</tr>
-		</table>
-		<h2 id="MigratingfromMTLqueries">Migrating from MTL queries</h2>
-		<p>As languages, AQL and MTL are very close yet there are some notable differences:</p>
-		<h3 id="Implicitvariablereferences">Implicit variable references</h3>
-		<p>
-			There is no implicit variable reference. With this change, you can easily find out if you are using a feature of an object or a string representation of said object. As a result, instead of using
-			<code>something</code>
-			, you must use
-			<code>self.something</code>
-			if you want to access the feature named &#171;something&#187; of the current object or &#171;something&#187; if you want to retrieve the object named something.
-		</p>
-		<p>
-			In a lambda expression, you must now define the name of the variable used for the iteration in order to easily identify which variable is used by an expression. In Acceleo MTL, you can write
-			<code>Sequence{self}-&gt;collect(eAllContents(uml::Property))</code>
-			and Acceleo will use the implicit iterator as a source of the operation eAllContents.
-		</p>
-		<p>
-			The problem comes when using a lambda like
-			<code>Sequence{self}-&gt;collect(something)</code>
-			, we can&#8217;t know if &#171;something&#187; is a feature of &#171;self&#187; or if it is another variable.
-		</p>
-		<p>
-			Using AQL, you will now have to write either
-			<code>collect(m | m.eAllContents(uml::Property))</code>
-			or
-			<code>collect(m: uml::Model | eAllContents(uml::Property))</code>
-			.
-		</p>
-		<h3 id="Collectandflatten">Collect and flatten</h3>
-		<p>When a call or a feature acces is done on a collection the result is flattened for the first level. For instance a service returning a collection called on a collection will return a collection of elements and not a collection of collection of elements.</p>
-		<h3 id="TypeliteralschildrenEPackages">Type literals &amp; children EPackages</h3>
-		<p>
-			Type literals can&#8217;t be in the form someEPackage::someSubEPackage::SomeEClass but instead someSubEPackage::SomeEClass should be directly used. Note that the <b>name of the EPackage is mandatory</b>. Type literals are handled just like any other type.
-		</p>
-		<p>
-			Calls like
-			<code>self.eAllContents(self.eClass())</code>
-			are possible and will return all the children of type compatible with “self”.
-		</p>
-		<p>
-			Furthermore if you need a type literal as a parameter in your own service, you just have to have a first parameter with the type :
-			<code>Set&lt;EClass&gt;</code>
-			. Yes, that’s an important point, any type in AQL is possibly a union of several existing types, hence the collection here. As such the syntax for creating Sets or collections can be used as a substitute for type literals.
-		</p>
-		<h3 id="EnumerationliteralschildrenEPackages">Enumeration literals &amp; children EPackages</h3>
-		<p>Enumeration literal should be prefixed with the name of the containing EPacakge for instance &#171;myPackage::myEnum::value&#187;.</p>
-		<h3 id="Collections">Collections</h3>
-		<p>You can only have Sequences or OrderedSets as collections and as such the order of their elements is always deterministic. In Acceleo MTL, you had access to Sets, which are now OrderedSets and Bags, which are now Sequences. Those four kinds of collections were motivated by the fact that
-			Sequence and OrderedSet were ordered contrary to Sets and Bags. On another side, OrderedSets and Sets did not accept any duplicate contrary to Bags and Sequences.</p>
-		<p>By careful reviewing the use of those collections in various Acceleo generators and Sirius Designers we have quickly found out that the lack of determinism in the order of the collections Sets and Bags was a major issue for our users. As a result, only two collections remain, the Sequence
-			which can contain any kind of element and the OrderedSet which has a similar behavior except that it does not accept duplicates.</p>
-		<p>
-			Previously in Acceleo MTL, you could transform a literal into a collection by using the operator
-			<code>-&gt;</code>
-			on the literal directly. In Acceleo MTL, the collection created was a Bag which is not available anymore. It is recommended to use the extension notation like
-			<code>Sequence{self}</code>
-			or
-			<code>OrderedSet{self}</code>
-			. By default in AQL the created collection is an OrderedSet.
-		</p>
-		<h3 id="Renamedoperations">Renamed operations</h3>
-		<p>Some operations have been renamed. As such &#171;addAll&#187; and &#171;removeAll&#187; have been renamed &#171;add&#187; and &#171;sub&#187; because those two names are used by AQL in order to provide access to the operator &#171;+&#187; and &#171;-&#187;. As a result we can now write in
-			AQL &#171;firstSequence + secondSequence&#187; or &#171;firstSet - secondSet&#187;.</p>
-		<h3 id="Typing">Typing</h3>
-		<p>
-			AQL is way smarter than MTL regarding to the types of your expressions. As a result, you can combine expressions using multiple types quite easily. For example, this is a valid AQL expression
-			<code>self.eContents(uml::Class).add(self.eContents(ecore::EClass)).name</code>
-			. In Acceleo MTL, we could not use this behavior because Acceleo MTL had to fall back to the concept EObject which does not have a feature &#171;name&#187; while AQL knows that the collection contains objects that are either &#171;uml::Class&#187; or &#171;ecore::EClass&#187; and both of those
-			types have a feature named &#171;name&#187;.
-		</p>
-		<h3 id="nullhandling">null handling</h3>
-		<p>
-			AQL handles null (OclVoid) differently from ocl, a null value will not cause a failure but will be silently handled. <br />For example,
-			<code>null.oclIsKindOf(ecore::EClass)</code>
-			would have returned true for MTL/OCL, forcing users to use
-			<code>not self.oclIsUndefined() and self.oclIsKindOf(ecore::EClass)</code>
-			instead. This is no longer true in AQL, where &#171;null&#187; doesn&#8217;t conform to any type, so
-			<code>null.oclIsKindOf(ecore::EClass)</code>
-			will return false. Note that it&#8217;s still possible to &#171;cast&#187; null in any given classifier.
-			<code>null.oclAsType(ecore::EClass)</code>
-			will not fail at runtime.
-		</p>
-		<p>
-			Furthermore <strong>oclIsUndefined() does not exist in AQL</strong> and should be replaced by a
-			<code>... &lt;&gt; null</code>
-			expression.
-		</p>
-		<h2 id="MigratingfromAcceleo2queries">Migrating from Acceleo2 queries</h2>
-		<h3 id="EClassifierreferences">EClassifier references</h3>
-		<p>
-			All operations referencing a type are now using a type literal with the name of the EPackage and the name of the type instead of a string with the name of the type. As a result,
-			<code>eObject.eAllContents('EClass')</code>
-			would be translated using
-			<code>eObject.eAllContents('ecore::EClass')</code>
-			. This allows AQL to now in which EPackage to look for the type and as such, it improves the quality of the validation.
-		</p>
-		<h3 id="Typesandcast">Types and cast</h3>
-		<p>In order to test the type of an EObject, a common pattern in Acceleo 2 was to treat the EObject as a collection and filter said collection on the type desired to see if the size of the collection changed. In AQL, you have access to the operations oclIsTypeOf and oclIsKindOf. You can thus
-			test the type of an EObject with the expression &#171;eObject.oclIsKindOf(ecore::EStructuralFeature)&#187; or &#171;eObject.oclIsTypeOf(ecore::EAttribute)&#187;. You can use the operation oclIsKindOf to test if an object has the type of the given parameter or one of its subtype. On the other
-			hand, you can use the operation oclIsTypeOf to test if an object has exactly the type of the given parameter.</p>
-		<p>Casting in AQL is useless, since AQL is very understandable when it comes to types, it will always tries its best to evaluate your expression.</p>
-		<p>
-			Since AQL is very close to Acceleo MTL, you can find some additional documentation using the Acceleo equivalence documentation in the <a href="http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.acceleo.doc%2Fpages%2Freference%2Fmigration.html&amp;cp=5_3_4">Acceleo documentation</a>.
-		</p>
-		<h3 id="eContainerTypeName">eContainer(&#171;TypeName&#187;)</h3>
-		<p>
-			In Acceleo2
-			<code>self.eContainer("TypeName")</code>
-			actually had the behavior of returning self if it was matching the TypeName. As such, when migrating from an eContainer(..) call you should either make sure that this behavior is not needed or use the <br />compatibility method provided by AQL :
-			<code>self.eContainerOrSelf(some::Type)</code>
-		</p>
-		<h2 id="UsingAQLprogrammatically">Using AQL programmatically</h2>
-		<p>This section provide information and code snippet. It will help you to integrate AQL in your own tool.</p>
-		<p>Simple overview of AQL:</p>
-		<p>
-			<img border="0" src="../assets/pics/AQL_overview.png" />
-		</p>
-		<h3 id="Typevalidation">Type validation</h3>
-		<p>For each node of the AST we create a set of possible types as follow:</p>
-		<ul>
-			<li>for a VarRef we ask the environment for its possible types</li>
-			<li>for a FeatureAccess we look up the type of the feature in the registered metamodels</li>
-			<li>for a Call we look up the service in the service registry according to the possible types of its parameters (receiver is the first parameter). At this point there is a conversion from EMF to Java. The return type of the service is given by the IService.getType() method. At this point
-				there is a conversion form Java to EMF, one Java type can correspond to more than one EMF EClassifier. If no service can be found we try to find a corresponding EOperation if the receiver is an EObject.</li>
-		</ul>
-		<p>A special type NothingType is used to mark a problem on a given node of the AST. Those NothingTypes are then used to create validation messages. If an AST node has only NothingTypes validation messages will be set as errors for this node, otherwise they are set as warnings.</p>
-		<h3 id="Completion">Completion</h3>
-		<p>
-			The completion rely on the AST production and the type validation. <br />The identifier fragments preceding (prefix) and following (remaining) the cursor position are removed from the expression to parse. The prefix and remaining are used later to filter the proposals. Many filters can be
-			implemented: filter only on prefix, filter on prefix and remaining, same strategies with support for camel case, ...
-		</p>
-		<p>Completion on the AST:</p>
-		<ul>
-			<li>if there is no error node in the AST the completion provide any symbols that can follow an expression (&#171;+&#187;, &#171;-&#187;, ...).</li>
-			<li>if there is an ErrorExpression node in the AST the completion provides anything that can prefix an expression (&#171;not&#187;, &#171;-&#187;, variable name, type name, ...).</li>
-			<li>if there is an ErrorFeatureAccesOrCall node in the AST the completion provides feature and service names corresponding to the receiver possible types. It is also possible to add symbols that follow an expression if the prefix and remaining are already a valid feature or service name for
-				the receiver possible types.</li>
-			<li>if there is an ErrorCollectionCall node in the AST the completion provides collection service names. It is also possible to add symbols that follow an expression if the prefix and remaining are already a valid service name.</li>
-			<li>if there is an ErrorTypeLiteral node in the AST the completion provides EClassifier, EEnumLiteral names according to the state of the type description.</li>
-		</ul>
-		<h3 id="Creatingandsettingtheenvironment">Creating and setting the environment</h3>
-		<p>To get a fresh environment you can use one of the following snippet:</p>
-		<pre>
-			<code>IQueryEnvironment queryEnvironment = Query.newEnvironmentWithDefaultServices(null);
-</code>
-		</pre>
-		<p>To get an environment with predefined services.</p>
-		<p>or</p>
-		<pre>
-			<code>IQueryEnvironment queryEnvironment = Query.newEnvironment(null);
-</code>
-		</pre>
-		<p>To get an environment with no predefined services. It can be useful to create your own language primitives.</p>
-		<p>Note that you can also provide a CrossReferenceProvider to define the scope of cross references in your environment. See CrossReferencerToAQL for more details.</p>
-		<p>You can register new services Class as follow:</p>
-		<pre>
-			<code>ServiceRegistrationResult registrationResult = queryEnvironment.registerServicePackage(MyServices.class);
-</code>
-		</pre>
-		<p>The registration result contains information about services overrides.</p>
-		<p>You can also register your EPackages. Only registered EPackages are used to validate and evaluate AQL expression.</p>
-		<pre>
-			<code>queryEnvironment.registerEPackage(MyEPackage.eINSTANCE);
-</code>
-		</pre>
-		<p>In some cases you might also want to create custom mappings between an EClass and its Class. A basic case is the use of EMap:</p>
-		<pre>
-			<code>queryEnvironment.registerCustomClassMapping(EcorePackage.eINSTANCE.getEStringToStringMapEntry(), EStringToStringMapEntryImpl.class);
-</code>
-		</pre>
-		<p>By default the EClass is mapped to Map.Entry which is not an EObject. This prevents using services on EObject.</p>
-		<h3 id="BuildinganAQLexpression">Building an AQL expression</h3>
-		<p>The first step is building your expression from a String to an AST:</p>
-		<pre>
-			<code>QueryBuilderEngine builder = new QueryBuilderEngine(queryEnvironment);
-AstResult astResult = builder.build("self.name");
-</code>
-		</pre>
-		<h3 id="EvaluatinganAQLexpression">Evaluating an AQL expression</h3>
-		<p>To evaluate an AQL expression you can use the QueryEvaluationEngine</p>
-		<pre>
-			<code>QueryEvaluationEngine engine = new QueryEvaluationEngine(queryEnvironment);
-Map&lt;String, Object&gt; variables = Maps.newHashMap();
-variables.put("self", EcorePackage.eINSTANCE);
-EvaluationResult evaluationResult = engine.eval(astResult, variables);
-</code>
-		</pre>
-		<p>Here we only use one variable for demonstration purpose.</p>
-		<h3 id="ValidatinganAQLexpressionoptional">Validating an AQL expression (optional)</h3>
-		<p>This step is optional for evaluation. You can evaluate an AQL expression without validating it in the first place.</p>
-		<pre>
-			<code>Map&lt;String, Set&lt;IType&gt;&gt; variableTypes = new LinkedHashMap&lt;String, Set&lt;IType&gt;&gt;();
-Set&lt;IType&gt; selfTypes = new LinkedHashSet&lt;IType&gt;();
-selfTypes.add(new EClassifierType(queryEnvironment, EcorePackage.eINSTANCE.getEPackage()));
-variableTypes.put("self", selfTypes);
-AstValidator validator = new AstValidator(queryEnvironment, variableTypes);
-IValidationResult validationResult = validator.validate(astResult);
-</code>
-		</pre>
-		<h3 id="CompletinganAQLexpression">Completing an AQL expression</h3>
-		<p>To do this use the QueryCompletionEngine, it will build the query and validate it for you. It will also compute needed prefix and suffix if any:</p>
-		<pre>
-			<code>Map&lt;String, Set&lt;IType&gt;&gt; variableTypes = new LinkedHashMap&lt;String, Set&lt;IType&gt;&gt;();
-Set&lt;IType&gt; selfTypes = new LinkedHashSet&lt;IType&gt;();
-selfTypes.add(new EClassifierType(queryEnvironment, EcorePackage.eINSTANCE.getEPackage()));
-variableTypes.put("self", selfTypes);
-QueryCompletionEngine engine = new QueryCompletionEngine(queryEnvironment);
-ICompletionResult completionResult = engine.getCompletion("self.", 5, variableTypes);
-List&lt;ICompletionProposal&gt; proposals = completionResult.getProposals(new BasicFilter(completionResult));
-</code>
-		</pre>
-		<p>Here 5 is the offset where the completion should be computed in the given expression.</p>
-
-	</div>
-</body>
-
-</html>
diff --git a/download.html b/download.html
new file mode 100644
index 0000000..e6c7a7b
--- /dev/null
+++ b/download.html
@@ -0,0 +1,180 @@
+<!DOCTYPE html>
+<html>
+
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+  
+    <title>Acceleo | Download</title>
+  
+    <meta name="description" content="">
+    <link rel="shortcut icon" type="image/png" href="/acceleo/common_assets/images/logos/favicon_acceleo.ico" />
+
+  
+    <link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
+    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">
+
+    <!-- Bootstrap CSS -->
+    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
+    <link rel="stylesheet" href="/acceleo/common_assets/css/styles.css">
+    <link rel="stylesheet" href="/acceleo/common_assets/css/animate.css">
+
+    <link rel="canonical" href="/acceleo/acceleo/download.html">
+
+    <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
+    <!-- Old version of font awesome for some icons -->
+    <script src="https://use.fontawesome.com/b51f77a16a.js"></script>    
+    <!-- Bootstrap JS -->
+    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm" crossorigin="anonymous"></script>
+    
+    <script type="text/javascript">
+        jQuery(function($){ $(".hasTooltip").tooltip({"html": true,"container": "body"}); });
+    </script>
+    <!-- Triggers tooltips -->
+    <script type="text/javascript">
+        jQuery(document).ready(function() {
+            jQuery('.hasTooltip').tooltip();
+        });
+    </script>
+</head>
+  
+  <body>
+
+    <!-- Navigation -->
+<header id="top-bar" class="navbar navbar-expand-lg fixed-top">
+    <div class="container">
+        <a class="navbar-brand" href="/acceleo">
+            <img src="/acceleo/common_assets/images/logos/logo_acceleo.png" alt="Logo Acceleo">
+        </a>
+        
+        <!-- /logo -->
+        <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive"
+            aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="fa fa-bars"></i>
+        </button>
+        <nav class="collapse navbar-collapse" id="navbarResponsive">
+            <div class="main-menu ml-auto">
+                <ul class="nav navbar-nav">
+                    <li>
+                        <a href="/acceleo/overview.html">Overview</a>
+                    </li>
+                    <li>
+                        <a href="/acceleo/features.html">Features</a>
+                    </li>
+                    <li>
+                        <a href="/acceleo/resources.html">Resources</a>
+                    </li>
+                    <li>
+                        <a href="/acceleo/support.html">Support</a>
+                    </li>
+                    <li id="dwnld">
+                        <a href="/acceleo/download.html">Download</a>
+                    </li>
+                </ul>
+            </div>
+        </nav>
+    </div>
+</header>
+
+    
+    <section>
+    <div class="container">
+        <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">Marketplace</h2> 
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s"></p>
+
+
+        <div class="row">
+            <div class="col-md-12">
+                <p>You can install Acceleo from the <a href="https://marketplace.eclipse.org/content/acceleo" target="_blank">Eclipse marketplace</a>.</p>
+                <p>Don’t know how to install a module from the marketplace? Have a look to the <a href="http://marketplace.eclipse.org/marketplace-client-intro">marketplace client introduction</a>.</p>
+            </div>
+        </div>
+    </div>
+</section>
+
+<section class="bg_lightest_grey">
+    <div class="container">
+        <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">Releases</h2> 
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s"></p>
+
+
+            <h3> Releases</h3>
+            <ul>
+            <li>3.7 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.7">http://download.eclipse.org/acceleo/updates/releases/3.7</a></li>
+            <li>3.6 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.6">http://download.eclipse.org/acceleo/updates/releases/3.6</a></li>
+            <li>3.5 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.5">http://download.eclipse.org/acceleo/updates/releases/3.5</a></li>
+            <li>3.4 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.4">http://download.eclipse.org/acceleo/updates/releases/3.4</a></li>
+            <li>3.3 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.3">http://download.eclipse.org/acceleo/updates/releases/3.3</a></li>
+            <li>3.2 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.2">http://download.eclipse.org/acceleo/updates/releases/3.2</a></li>
+            <li>3.1 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.1">http://download.eclipse.org/acceleo/updates/releases/3.1</a></li>
+            <li>3.0 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.0">http://download.eclipse.org/acceleo/updates/releases/3.0</a></li>
+            </ul>
+
+            <h3>Update sites</h3>
+            <ul>
+            <li>3.7.7 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.7/R201812041426">http://download.eclipse.org/acceleo/updates/releases/3.7/R201812041426</a></li>
+            <li>3.7.6 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.7/R201810050612">http://download.eclipse.org/acceleo/updates/releases/3.7/R201810050612</a></li>
+            <li>3.7.5 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.7/R201809121017">http://download.eclipse.org/acceleo/updates/releases/3.7/R201809121017</a></li>
+            <li>3.7.4 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.7/R201807201001">http://download.eclipse.org/acceleo/updates/releases/3.7/R201807201001</a></li>
+            <li>3.7.3 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.7/R201802240723">http://download.eclipse.org/acceleo/updates/releases/3.7/R201802240723</a></li>
+            <li>3.7.2 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.7/R201708211328">http://download.eclipse.org/acceleo/updates/releases/3.7/R201708211328</a></li>
+            <li>3.7.1 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.7/R201705121344">http://download.eclipse.org/acceleo/updates/releases/3.7/R201705121344</a></li>
+            <li>3.7.0 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.7/R201610150614">http://download.eclipse.org/acceleo/updates/releases/3.7/R201610150614</a></li>
+            </ul>
+    </div>       
+</section>
+
+<footer>
+  <div class="container">
+      <div class="row">    
+        
+<div class="col-md-3">
+    <p><a href="http://www.eclipse.org/"><img src="/acceleo/common_assets/images/logos/logo-eclipse-foundation.png" alt="Eclipse Foundation logo"></a></p>
+    <p id="copyright">Copyright © 2019 Eclipse Foundation, Inc.<br>All Rights Reserved.</p>
+</div>
+
+<div class="col-md-3">
+    <h6>Eclipse Foundation</h6>
+    <ul>
+        <li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
+        <li><a href="http://eclipse.org/">Eclipse</a></li>
+        <li><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
+        <li><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
+        <li><a href="http://www.eclipse.org/legal/">Legal</a></li>
+        <li><a href="http://www.eclipse.org/org/foundation/contact.php"> Contact Us</a></li>
+    </ul>
+</div>
+
+        
+<div class="col-md-3">
+    <h6>Project Links</h6>
+    <ul>
+        <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo">About this project</a></li>
+        <li><a href="http://wiki.eclipse.org/Acceleo">Wiki</a></li>
+        <li><a href="https://www.eclipse.org/forums/index.php?t=thread&frm_id=24&">Forum</a></li>
+        <li><a href="https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=VERIFIED&list_id=9161179&product=Acceleo&query_format=advanced">Bugs</a></li>
+        <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo/developer">Source Code</a></li>
+    </ul>
+</div>
+    </div>
+  </div>
+</footer>
+
+    
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous" defer></script>
+
+<script src="/acceleo//common_assets/js/wow.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.video.js" defer></script>
+<!-- Call wow function -->
+<script>
+        jQuery(document).ready(function(){
+            "use strict";
+            new WOW().init();
+        });
+</script>
+  
+  </body>
+</html>
diff --git a/downloads/_styles.css b/downloads/_styles.css
deleted file mode 100644
index 4bfea5b..0000000
--- a/downloads/_styles.css
+++ /dev/null
@@ -1,69 +0,0 @@
-#midcolumn {
-	padding-top: 10px;
-}
-
-#midcolumn li .repo-item {
-	margin-bottom: 0px;
-	padding-bottom: 0px;
-}
-
-.repo-item {
-	margin-top: 2px;
-	margin-bottom: 2px;
-}
-
-.repo-label1 { 
-  color: #000000;
-  font-size: 18pt;
-}
-
-.repo1 {
-  padding: 5px 5px 5px 0;
-  border-bottom: 3px solid #D4D4DD;
-}
-
-.repo-label2 { 
-  color: #000000;
-  font-size: 14pt;
-}
-
-.repo2 {
-  padding: 5px 5px 5px 0;
-}
-
-.drop-label { 
-  color: #000000;
-  font-size: 12pt;
-  font-weight: bold;
-  margin-bottom: 0;
-  margin-top: 0;
-  padding-bottom: 0;
-  padding-top: 0;
-}
-
-.drop {
-	margin-top: 0;
-	margin-bottom: 0;
-	padding: 5px 5px 0px 0;
-}
-
-.drop-info {
-	padding-top: 3px;
-}
-
-.drop-separator {
-	border: none;
-	border-bottom: 2px solid #D4D4DD;
-}
-
-.file-size {
-	text-align: right;
-}
-
-.level1 {
-	padding-right: 49px;
-}
-
-.level2 {
-	padding-right: 26px;
-}
diff --git a/downloads/background.jpg b/downloads/background.jpg
deleted file mode 100644
index 63b26e5..0000000
--- a/downloads/background.jpg
+++ /dev/null
Binary files differ
diff --git a/downloads/index.php b/downloads/index.php
deleted file mode 100644
index 93dee66..0000000
--- a/downloads/index.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
-	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
-	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
-
-	$App 	= new App();
-	$Nav	= new Nav();
-	$Menu 	= new Menu();
-
-	include($App->getProjectCommon());
-	
-	require_once($_SERVER["DOCUMENT_ROOT"] . "/modeling/includes/buildServer-common.php");
-	require_once($_SERVER["DOCUMENT_ROOT"] . "/modeling/includes/downloads-scripts.php");
-	require_once($_SERVER["DOCUMENT_ROOT"] . "/modeling/includes/scripts.php");
-	require_once("./custom-scripts.php");
-	
-	$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/modeling/includes/common.css"/>' . "\n\t");
-	$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/modeling/includes/downloads.css"/>' . "\n\t");
-	$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="styles.css"/>' . "\n\t");
-	$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="_styles.css"/>' . "\n\t");
-	$App->AddExtraHtmlHeader('<script src="/modeling/includes/downloads.js" type="text/javascript"></script>' . "\n\t");
-	
-	#### Project dependant variables ####
-	$projectTitle = "Acceleo";
-	$pageTitle = "Download";
-	// Path to the downloads area under http://downloads.eclipse.org (will be used by custom-scripts and various "eclipse" scripts)
-	$PR = "acceleo";
-	// absolute path to the site's home page (will be used by custom-scripts for images... should probably use css instead)
-	$websiteRoot = "/acceleo";
-	
-	# version => array of qualifiers
-	# ex : "3.3.0" => array("R201205291042")
-	$hiddenBuilds = array(
-	);
-	#### End variables ####
-	
-	$PWD = getPWD("downloads/drops");
-	$branches = loadDirSimple($PWD, ".*", "d");
-	rsort($branches);
-	
-	$buildtypes = array(
-		"R" => "Release",
-		"S" => "Stable",
-		"I" => "Integration",
-		"M" => "Maintenance",
-		"N" => "Nightly"
-	);
-	$buildTypes = getBuildTypes($branches, $buildtypes);
-	
-	// Retrieve the list of builds from the disk (folder list only)
-	$builds = getBuildsFrom($branches, $PWD);
-	
-	$builds = reorderAndSplitBuilds($builds, $buildTypes, $hiddenBuilds);
-	$releases = $builds[1];
-	$builds = $builds[0];
-	
-	$html = "<div id=\"midcolumn\">\n";
-	$html .= "<ul>\n";
-	$html .= generateHTMLReleaseList($releases, $projectTitle, $PR, $PWD, $websiteRoot);
-	$html .= generateHTMLBuildList($builds, $projectTitle, $PR, $PWD, $websiteRoot);
-	$html .= "</ul>\n";
-	$html .= "</div>\n\n";
-	
-	# Generate the web page
-	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
-?>
diff --git a/downloads/styles.css b/downloads/styles.css
deleted file mode 100644
index 0763ff7..0000000
--- a/downloads/styles.css
+++ /dev/null
@@ -1,102 +0,0 @@
-#leftcol {
-	margin-top: -20px;
-}
-
-#midcolumn {
-	width: 780px;
-	padding-top: 0px;
-	padding-right: 100px;
-	padding-left: 100px;
-	padding-bottom: 10px;
-}
-
-.sideitem {
-	background: url(/eclipse.org-common/themes/Nova/images/thinModalBg.png)
-		repeat-x scroll 0 0;
-}
-
-.sideitem h6 {
-	color: #575757;
-	font-size: 20px;
-	padding-top: -6px;
-}
-
-.areaIcon {
-	margin-left: 50px;
-}
-
-#leftnav li.separator {
-	margin-top: 20px;
-}
-
-#leftnav li.separatorNolink {
-	margin-top: 20px;
-	margin-left: 0;
-	padding-top: 5px;
-	padding-right: 0;
-	list-style-image: none;
-	border-top: 1px dotted #d4d4dd;
-	font-size: 12px;
-	font-weight: bold;
-	color: #575757;
-}
-
-#leftnav li.selected {
-	list-style-image:
-		url(/eclipse.org-common/themes/Nova/images/leftNavSelected.png);
-}
-
-#infoDiv {
-	margin-top: 80px;
-	margin-left: 45px;
-	width: 300px;
-	text-align: left;
-	font-size: 14px;
-	float: left;
-}
-
-.linkBlock {
-	margin-top: 20px;
-	margin-bottom: 20px;
-	margin-left: 20px;
-	float: left;
-	width: 460px;
-}
-
-.link img {
-	position: relative;
-	top: -20px;
-	float: left;
-	padding: 5px;
-}
-
-.link {
-	clear: both;
-	padding: 20px;
-}
-
-.link p.heading {
-	font-size: 16px;
-}
-
-.link p.subText {
-	font-size: 12px;
-}
-
-li p.heading {
-	font-size: 120%;
-	margin-bottom: 5px;
-	margin-top: 5px;
-	text-align: left;
-}
-
-li p.subText {
-	margin-top: 0px;
-	font-size: 80%;
-	text-align: left;
-	font-weight: normal;
-}
-
-.relatedLinks li {
-	list-style-image: none !important;
-}
\ No newline at end of file
diff --git a/features.html b/features.html
new file mode 100644
index 0000000..d8f2410
--- /dev/null
+++ b/features.html
@@ -0,0 +1,186 @@
+<!DOCTYPE html>
+<html>
+
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+  
+    <title>Acceleo | Features</title>
+  
+    <meta name="description" content="">
+    <link rel="shortcut icon" type="image/png" href="/acceleo/common_assets/images/logos/favicon_acceleo.ico" />
+
+  
+    <link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
+    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">
+
+    <!-- Bootstrap CSS -->
+    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
+    <link rel="stylesheet" href="/acceleo/common_assets/css/styles.css">
+    <link rel="stylesheet" href="/acceleo/common_assets/css/animate.css">
+
+    <link rel="canonical" href="/acceleo/acceleo/features.html">
+
+    <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
+    <!-- Old version of font awesome for some icons -->
+    <script src="https://use.fontawesome.com/b51f77a16a.js"></script>    
+    <!-- Bootstrap JS -->
+    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm" crossorigin="anonymous"></script>
+    
+    <script type="text/javascript">
+        jQuery(function($){ $(".hasTooltip").tooltip({"html": true,"container": "body"}); });
+    </script>
+    <!-- Triggers tooltips -->
+    <script type="text/javascript">
+        jQuery(document).ready(function() {
+            jQuery('.hasTooltip').tooltip();
+        });
+    </script>
+</head>
+  
+  <body>
+
+    <!-- Navigation -->
+<header id="top-bar" class="navbar navbar-expand-lg fixed-top">
+    <div class="container">
+        <a class="navbar-brand" href="/acceleo">
+            <img src="/acceleo/common_assets/images/logos/logo_acceleo.png" alt="Logo Acceleo">
+        </a>
+        
+        <!-- /logo -->
+        <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive"
+            aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="fa fa-bars"></i>
+        </button>
+        <nav class="collapse navbar-collapse" id="navbarResponsive">
+            <div class="main-menu ml-auto">
+                <ul class="nav navbar-nav">
+                    <li>
+                        <a href="/acceleo/overview.html">Overview</a>
+                    </li>
+                    <li>
+                        <a href="/acceleo/features.html">Features</a>
+                    </li>
+                    <li>
+                        <a href="/acceleo/resources.html">Resources</a>
+                    </li>
+                    <li>
+                        <a href="/acceleo/support.html">Support</a>
+                    </li>
+                    <li id="dwnld">
+                        <a href="/acceleo/download.html">Download</a>
+                    </li>
+                </ul>
+            </div>
+        </nav>
+    </div>
+</header>
+
+    
+    <section id="" class="text-center">
+    <div class="container">
+        <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">The Acceleo Language</h2> 
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s"></p>
+
+
+        <div class="row">
+            <div class="col-md-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">            
+                <p>Templates (Pre-conditions, Post-treatments, Variables, User-code) | Modules | Queries</p>
+        
+                <p><a class="btn btn-default wow fadeInUp" data-wow-delay=".6s" href="https://www.google.com/url?q=https://wiki.eclipse.org/Acceleo/User_Guide%23The_Acceleo_language&sa=D&ust=1534837733046000&usg=AFQjCNGp1VVo5q8VMWAbN4Nerp2f9lWQcg" target="_blank">Learn more</a></p>
+            </div>
+        </div>
+    </div>
+</section>
+
+<section class="bg_lightest_grey text-center">
+    <div class="container">
+        <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">The Acceleo Tooling</h2> 
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s"></p>
+
+
+        <div class="row">
+            <div class="col-md-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">            
+               <p>Syntax highlighting | Smart completion | Navigation to definitions and references | Errors detection <br> Quick fixes | Warning and informations support | Dynamic outline | Quick outline | Code folding <br>
+               Code templates | Customizable code templates | Documentation hover | Visible whitespace characters <br> Search of occurrences | Refactoring | Eclipse perspective | Profiler | Debugger
+
+                <p><a class="btn btn-default wow fadeInUp" data-wow-delay=".6s" href="https://wiki.eclipse.org/Acceleo/User_Guide#The_Acceleo_Tooling" target="_blank">Learn more</a></p>
+            </div>
+        </div>
+    </div>
+</section>
+
+<section class="text-center">
+    <div class="container">
+        <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">The Acceleo Runtime</h2> 
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s"></p>
+
+
+        <div class="row">
+            <div class="col-md-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">            
+               Compiler | 
+               Generation engine | 
+               Standalone mode | 
+               Integration (Ant, Maven or Java) | 
+        
+                <p><a class="btn btn-default wow fadeInUp" data-wow-delay=".6s" href="https://wiki.eclipse.org/Acceleo/User_Guide#Launching_an_Acceleo_generation" target="_blank">Learn more</a></p>
+            </div>
+        </div>
+    </div>
+</section>
+
+<footer>
+  <div class="container">
+      <div class="row">    
+        
+<div class="col-md-3">
+    <p><a href="http://www.eclipse.org/"><img src="/acceleo/common_assets/images/logos/logo-eclipse-foundation.png" alt="Eclipse Foundation logo"></a></p>
+    <p id="copyright">Copyright © 2019 Eclipse Foundation, Inc.<br>All Rights Reserved.</p>
+</div>
+
+<div class="col-md-3">
+    <h6>Eclipse Foundation</h6>
+    <ul>
+        <li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
+        <li><a href="http://eclipse.org/">Eclipse</a></li>
+        <li><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
+        <li><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
+        <li><a href="http://www.eclipse.org/legal/">Legal</a></li>
+        <li><a href="http://www.eclipse.org/org/foundation/contact.php"> Contact Us</a></li>
+    </ul>
+</div>
+
+        
+<div class="col-md-3">
+    <h6>Project Links</h6>
+    <ul>
+        <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo">About this project</a></li>
+        <li><a href="http://wiki.eclipse.org/Acceleo">Wiki</a></li>
+        <li><a href="https://www.eclipse.org/forums/index.php?t=thread&frm_id=24&">Forum</a></li>
+        <li><a href="https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=VERIFIED&list_id=9161179&product=Acceleo&query_format=advanced">Bugs</a></li>
+        <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo/developer">Source Code</a></li>
+    </ul>
+</div>
+    </div>
+  </div>
+</footer>
+
+    
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous" defer></script>
+
+<script src="/acceleo//common_assets/js/wow.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.video.js" defer></script>
+<!-- Call wow function -->
+<script>
+        jQuery(document).ready(function(){
+            "use strict";
+            new WOW().init();
+        });
+</script>
+  
+  </body>
+</html>
diff --git a/images/16/go-down.png b/images/16/go-down.png
deleted file mode 100644
index 3dd7fcc..0000000
--- a/images/16/go-down.png
+++ /dev/null
Binary files differ
diff --git a/images/16/package-x-generic.png b/images/16/package-x-generic.png
deleted file mode 100644
index 9015426..0000000
--- a/images/16/package-x-generic.png
+++ /dev/null
Binary files differ
diff --git a/images/22/package-x-generic.png b/images/22/package-x-generic.png
deleted file mode 100644
index dc76287..0000000
--- a/images/22/package-x-generic.png
+++ /dev/null
Binary files differ
diff --git a/images/Acceleo.png b/images/Acceleo.png
deleted file mode 100644
index c2165ac..0000000
--- a/images/Acceleo.png
+++ /dev/null
Binary files differ
diff --git a/images/Acceleo2.png b/images/Acceleo2.png
deleted file mode 100644
index fe208b1..0000000
--- a/images/Acceleo2.png
+++ /dev/null
Binary files differ
diff --git a/images/EclipseLiveIcon.png b/images/EclipseLiveIcon.png
deleted file mode 100644
index dbd7def..0000000
--- a/images/EclipseLiveIcon.png
+++ /dev/null
Binary files differ
diff --git a/images/Maintenance.png b/images/Maintenance.png
deleted file mode 100644
index 7f9b861..0000000
--- a/images/Maintenance.png
+++ /dev/null
Binary files differ
diff --git a/images/aql/AQL_overview.png b/images/aql/AQL_overview.png
deleted file mode 100644
index 8abd117..0000000
--- a/images/aql/AQL_overview.png
+++ /dev/null
Binary files differ
diff --git a/images/backgroundAcceleoEclipse.png b/images/backgroundAcceleoEclipse.png
deleted file mode 100644
index 2958088..0000000
--- a/images/backgroundAcceleoEclipse.png
+++ /dev/null
Binary files differ
diff --git a/images/backgroundAcceleoEclipse1.png b/images/backgroundAcceleoEclipse1.png
deleted file mode 100644
index 6d9f13f..0000000
--- a/images/backgroundAcceleoEclipse1.png
+++ /dev/null
Binary files differ
diff --git a/images/backgroundAcceleoEclipse2.png b/images/backgroundAcceleoEclipse2.png
deleted file mode 100644
index b464a19..0000000
--- a/images/backgroundAcceleoEclipse2.png
+++ /dev/null
Binary files differ
diff --git a/images/backgroundMainEmpty.png b/images/backgroundMainEmpty.png
deleted file mode 100644
index 9487b21..0000000
--- a/images/backgroundMainEmpty.png
+++ /dev/null
Binary files differ
diff --git a/images/banners/Layer 0.jpg b/images/banners/Layer 0.jpg
new file mode 100644
index 0000000..c0b8a91
--- /dev/null
+++ b/images/banners/Layer 0.jpg
Binary files differ
diff --git a/images/banners/banner_acceleo_overview.jpg b/images/banners/banner_acceleo_overview.jpg
new file mode 100644
index 0000000..001b90b
--- /dev/null
+++ b/images/banners/banner_acceleo_overview.jpg
Binary files differ
diff --git a/images/banners/banner_acceleo_overview.webp b/images/banners/banner_acceleo_overview.webp
new file mode 100644
index 0000000..b96af0c
--- /dev/null
+++ b/images/banners/banner_acceleo_overview.webp
Binary files differ
diff --git a/images/buttonDocumentation_empty.png b/images/buttonDocumentation_empty.png
deleted file mode 100644
index 8e3877e..0000000
--- a/images/buttonDocumentation_empty.png
+++ /dev/null
Binary files differ
diff --git a/images/buttonDownload_empty.png b/images/buttonDownload_empty.png
deleted file mode 100644
index 693a98c..0000000
--- a/images/buttonDownload_empty.png
+++ /dev/null
Binary files differ
diff --git a/images/buttonInvolved_empty.png b/images/buttonInvolved_empty.png
deleted file mode 100644
index 8bbc845..0000000
--- a/images/buttonInvolved_empty.png
+++ /dev/null
Binary files differ
diff --git a/images/buttonSupport_empty.png b/images/buttonSupport_empty.png
deleted file mode 100644
index b22fc84..0000000
--- a/images/buttonSupport_empty.png
+++ /dev/null
Binary files differ
diff --git a/images/click.png b/images/click.png
deleted file mode 100644
index 4ffbc43..0000000
--- a/images/click.png
+++ /dev/null
Binary files differ
diff --git a/images/discovery.png b/images/discovery.png
deleted file mode 100644
index e36e90b..0000000
--- a/images/discovery.png
+++ /dev/null
Binary files differ
diff --git a/images/downloadButton.png b/images/downloadButton.png
deleted file mode 100644
index 4cad191..0000000
--- a/images/downloadButton.png
+++ /dev/null
Binary files differ
diff --git a/images/downloadButtonUnderline.png b/images/downloadButtonUnderline.png
deleted file mode 100644
index ae92474..0000000
--- a/images/downloadButtonUnderline.png
+++ /dev/null
Binary files differ
diff --git a/images/git-branches.png b/images/git-branches.png
deleted file mode 100644
index 72c23a3..0000000
--- a/images/git-branches.png
+++ /dev/null
Binary files differ
diff --git a/images/git-import.png b/images/git-import.png
deleted file mode 100644
index 9c2e274..0000000
--- a/images/git-import.png
+++ /dev/null
Binary files differ
diff --git a/images/git-local.png b/images/git-local.png
deleted file mode 100644
index 5c9f153..0000000
--- a/images/git-local.png
+++ /dev/null
Binary files differ
diff --git a/images/git.png b/images/git.png
deleted file mode 100644
index f42ea99..0000000
--- a/images/git.png
+++ /dev/null
Binary files differ
diff --git a/images/icon.png b/images/icon.png
deleted file mode 100644
index 4c4b16e..0000000
--- a/images/icon.png
+++ /dev/null
Binary files differ
diff --git a/images/iconWebinar.gif b/images/iconWebinar.gif
deleted file mode 100644
index 5d9aa1c..0000000
--- a/images/iconWebinar.gif
+++ /dev/null
Binary files differ
diff --git a/images/icons/community.png b/images/icons/community.png
deleted file mode 100644
index 8a43990..0000000
--- a/images/icons/community.png
+++ /dev/null
Binary files differ
diff --git a/images/icons/development.png b/images/icons/development.png
deleted file mode 100644
index 7b28ebb..0000000
--- a/images/icons/development.png
+++ /dev/null
Binary files differ
diff --git a/images/icons/documentation.png b/images/icons/documentation.png
deleted file mode 100644
index ba8f6b4..0000000
--- a/images/icons/documentation.png
+++ /dev/null
Binary files differ
diff --git a/images/icons/presentation.png b/images/icons/presentation.png
deleted file mode 100644
index c953737..0000000
--- a/images/icons/presentation.png
+++ /dev/null
Binary files differ
diff --git a/images/icons/support.png b/images/icons/support.png
deleted file mode 100644
index 92eb0ef..0000000
--- a/images/icons/support.png
+++ /dev/null
Binary files differ
diff --git a/images/icons/training.png b/images/icons/training.png
deleted file mode 100644
index 117ccc7..0000000
--- a/images/icons/training.png
+++ /dev/null
Binary files differ
diff --git a/images/icons/video.png b/images/icons/video.png
deleted file mode 100644
index a1900dc..0000000
--- a/images/icons/video.png
+++ /dev/null
Binary files differ
diff --git a/images/illustrations/acceleo_overview.png b/images/illustrations/acceleo_overview.png
new file mode 100755
index 0000000..18b7a19
--- /dev/null
+++ b/images/illustrations/acceleo_overview.png
Binary files differ
diff --git a/images/install_1.png b/images/install_1.png
deleted file mode 100644
index 238d9d1..0000000
--- a/images/install_1.png
+++ /dev/null
Binary files differ
diff --git a/images/install_2_releases.png b/images/install_2_releases.png
deleted file mode 100644
index d44b612..0000000
--- a/images/install_2_releases.png
+++ /dev/null
Binary files differ
diff --git a/images/install_3.png b/images/install_3.png
deleted file mode 100644
index 15d548e..0000000
--- a/images/install_3.png
+++ /dev/null
Binary files differ
diff --git a/images/link_obj.gif b/images/link_obj.gif
deleted file mode 100644
index 5fd9c94..0000000
--- a/images/link_obj.gif
+++ /dev/null
Binary files differ
diff --git a/images/logo/acceleo_icon_24.png b/images/logo/acceleo_icon_24.png
deleted file mode 100644
index dac63cb..0000000
--- a/images/logo/acceleo_icon_24.png
+++ /dev/null
Binary files differ
diff --git a/images/logo/logo-acceleo-blanc.jpg b/images/logo/logo-acceleo-blanc.jpg
deleted file mode 100644
index bd39339..0000000
--- a/images/logo/logo-acceleo-blanc.jpg
+++ /dev/null
Binary files differ
diff --git a/images/logo/logo_acceleo_transparent.png b/images/logo/logo_acceleo_transparent.png
deleted file mode 100644
index ac4a92f..0000000
--- a/images/logo/logo_acceleo_transparent.png
+++ /dev/null
Binary files differ
diff --git a/images/logo/logo_acceleo_transparent_260.png b/images/logo/logo_acceleo_transparent_260.png
deleted file mode 100644
index 07b3e36..0000000
--- a/images/logo/logo_acceleo_transparent_260.png
+++ /dev/null
Binary files differ
diff --git a/images/logo/logo_obeo.png b/images/logo/logo_obeo.png
deleted file mode 100644
index 62d19eb..0000000
--- a/images/logo/logo_obeo.png
+++ /dev/null
Binary files differ
diff --git a/images/newAndNoteworthy.png b/images/newAndNoteworthy.png
deleted file mode 100644
index e53729e..0000000
--- a/images/newAndNoteworthy.png
+++ /dev/null
Binary files differ
diff --git a/images/nova_faux_override.jpg b/images/nova_faux_override.jpg
deleted file mode 100644
index 5c49e41..0000000
--- a/images/nova_faux_override.jpg
+++ /dev/null
Binary files differ
diff --git a/images/openDiscovery.png b/images/openDiscovery.png
deleted file mode 100644
index 2c8be67..0000000
--- a/images/openDiscovery.png
+++ /dev/null
Binary files differ
diff --git a/images/openInnovationAward.png b/images/openInnovationAward.png
deleted file mode 100644
index 1111103..0000000
--- a/images/openInnovationAward.png
+++ /dev/null
Binary files differ
diff --git a/images/rss2.gif b/images/rss2.gif
deleted file mode 100644
index 1b80108..0000000
--- a/images/rss2.gif
+++ /dev/null
Binary files differ
diff --git a/images/screenshots/downloads.png b/images/screenshots/downloads.png
new file mode 100644
index 0000000..08a441a
--- /dev/null
+++ b/images/screenshots/downloads.png
Binary files differ
diff --git a/images/screenshots/overview.png b/images/screenshots/overview.png
new file mode 100644
index 0000000..61da88b
--- /dev/null
+++ b/images/screenshots/overview.png
Binary files differ
diff --git a/images/screenshots/user_experience.png b/images/screenshots/user_experience.png
new file mode 100644
index 0000000..090c153
--- /dev/null
+++ b/images/screenshots/user_experience.png
Binary files differ
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..a147c98
--- /dev/null
+++ b/index.html
@@ -0,0 +1,324 @@
+<!DOCTYPE html>
+<html>
+
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+  
+    <title>Acceleo | Home</title>
+  
+    <meta name="description" content="">
+    <link rel="shortcut icon" type="image/png" href="/acceleo/common_assets/images/logos/favicon_acceleo.ico" />
+
+  
+    <link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
+    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">
+
+    <!-- Bootstrap CSS -->
+    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
+    <link rel="stylesheet" href="/acceleo/common_assets/css/styles.css">
+    <link rel="stylesheet" href="/acceleo/common_assets/css/animate.css">
+
+    <link rel="canonical" href="/acceleo/acceleo/">
+
+    <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
+    <!-- Old version of font awesome for some icons -->
+    <script src="https://use.fontawesome.com/b51f77a16a.js"></script>    
+    <!-- Bootstrap JS -->
+    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm" crossorigin="anonymous"></script>
+    
+    <script type="text/javascript">
+        jQuery(function($){ $(".hasTooltip").tooltip({"html": true,"container": "body"}); });
+    </script>
+    <!-- Triggers tooltips -->
+    <script type="text/javascript">
+        jQuery(document).ready(function() {
+            jQuery('.hasTooltip').tooltip();
+        });
+    </script>
+</head>
+  
+  <body>
+
+    <!-- Navigation -->
+<header id="top-bar" class="navbar navbar-expand-lg fixed-top">
+    <div class="container">
+        <a class="navbar-brand" href="/acceleo">
+            <img src="/acceleo/common_assets/images/logos/logo_acceleo.png" alt="Logo Acceleo">
+        </a>
+        
+        <!-- /logo -->
+        <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive"
+            aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="fa fa-bars"></i>
+        </button>
+        <nav class="collapse navbar-collapse" id="navbarResponsive">
+            <div class="main-menu ml-auto">
+                <ul class="nav navbar-nav">
+                    <li>
+                        <a href="/acceleo/overview.html">Overview</a>
+                    </li>
+                    <li>
+                        <a href="/acceleo/features.html">Features</a>
+                    </li>
+                    <li>
+                        <a href="/acceleo/resources.html">Resources</a>
+                    </li>
+                    <li>
+                        <a href="/acceleo/support.html">Support</a>
+                    </li>
+                    <li id="dwnld">
+                        <a href="/acceleo/download.html">Download</a>
+                    </li>
+                </ul>
+            </div>
+        </nav>
+    </div>
+</header>
+
+    
+    <section id="intro" class="">
+    <div class="container">
+        <div class="row align-items-end">
+            <div class="col-md-5 col-xs-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+    <h1>Generate anything from any EMF model</h1>
+    <p>Acceleo is the result of several man-years of R&D started in the French company Obeo. <br>Junction between the OMG MTL standard, its team's experience with industrial code generation and the latest research advances into the M2T field, it offers outstanding advantages : High ability to customize, Interoperability, Easy kick off, and much more!</p>
+    <p>
+        <a href="download.html" class="btn btn-default span-right wow fadeInUp animated" data-wow-delay=".6s" target="_self">
+            Download
+        </a>
+        <a href="overview.html" class="btn btn-primary wow fadeInUp animated" data-wow-delay=".6s" target="_self">
+            Overview
+        </a>
+    </p>                                
+</div>
+    
+<div class="col-md-7 col-xs-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+    <p>
+        <a href="#" class="wow fadeInUp animated" data-wow-delay=".6s" target="_self">
+            <img src="images/illustrations/acceleo_overview.png" alt="Some text">
+        </a>
+    </p>                                
+</div>
+        </div>
+        </div>
+    </div>
+</section>
+
+<section id="" class="bg_lightest_grey text-center">
+    <div class="container">
+            <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">Easily create custom code generators</h2> 
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s"></p>
+
+
+
+        <div class="row">
+            <div class="col-md-4 col-xs-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+    <div>
+        <i class="fas fa-key fa-3x pa2 txt_indigo" aria-hidden="true"></i>
+    </div>                                
+    <div>
+        <h4>Open Source</h4>
+        <p>Acceleo is an open template-based source code generation technology developed inside of the Eclipse Foundation. As such, you can use it freely, fork it and even contribute back.
+                </p>
+        <p><a href=""> <i class="" aria-hidden="true"></i>
+        </a></p>                                
+    </div>
+</div>
+
+
+
+
+            <div class="col-md-4 col-xs-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+    <div>
+        <i class="fas fa-palette fa-3x pa2 txt_indigo" aria-hidden="true"></i>
+    </div>                                
+    <div>
+        <h4>Versatile</h4>
+        <p>Code generators are often limited to a set of technologies. With its template based approach, Acceleo can generate code for any kind of languages. If you can write it, Acceleo can generate it.</p>
+        <p><a href=""> <i class="" aria-hidden="true"></i>
+        </a></p>                                
+    </div>
+</div>
+
+
+
+           
+            <div class="col-md-4 col-xs-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+    <div>
+        <i class="fas fa-lock-open fa-3x pa2 txt_indigo" aria-hidden="true"></i>
+    </div>                                
+    <div>
+        <h4>Stand Alone</h4>
+        <p>Acceleo does not lock you inside of the Eclipse environment, as such you can build and run your generator easily out of Eclipse. Acceleo provides a brand new Maven integration.</p>
+        <p><a href=""> <i class="" aria-hidden="true"></i>
+        </a></p>                                
+    </div>
+</div>
+
+
+
+        </div>
+
+
+        <div class="row">
+                 <div class="col-md-6 col-xs-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+    <div>
+        <i class="fas fa-plug fa-3x pa2 txt_indigo" aria-hidden="true"></i>
+    </div>                                
+    <div>
+        <h4>Integrated in Eclipse</h4>
+        <p>Acceleo is deeply integrated in the Eclipse IDE with a full fledged editor with syntax highlighting, real time error detection, quick fixes, refactoring and much more. It also comes with dedicated views to help you navigate within your code generator and quickly access code generation design patterns.</p>
+        <p><a href=""> <i class="" aria-hidden="true"></i>
+        </a></p>                                
+    </div>
+</div>
+
+
+
+
+    
+                <div class="col-md-6 col-xs-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+    <div>
+        <i class="fas fa-step-forward fa-3x pa2 txt_indigo" aria-hidden="true"></i>
+    </div>                                
+    <div>
+        <h4>Incremental Generation</h4>
+        <p>Whether you are considering it or not, you will one day have to modify manually your generated code and you want to keep your modification even if you are regenerating your code. Acceleo lets you define protected areas in which you can safely modify the generated.</p>
+        <p><a href=""> <i class="" aria-hidden="true"></i>
+        </a></p>                                
+    </div>
+</div>
+
+
+
+            </div>
+    </div>
+</section>
+
+<section id="" class="text-center">
+    <div class="container">
+        <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">Need Support?</h2> 
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s"></p>
+
+
+
+    <div class="row">
+        <div class="col-md-4 col-xs-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+    <div>
+        <i class="fas fa-file-alt fa-3x pa2 txt_indigo" aria-hidden="true"></i>
+    </div>                                
+    <div>
+        <h4>Documentation</h4>
+        <p>Learn how to use Acceleo, thanks to online complete user guides and reference manuals</p>
+        <p><a href="resources">Learn more <i class="fas fa-arrow-alt-circle-right" aria-hidden="true"></i>
+        </a></p>                                
+    </div>
+</div>
+
+
+
+
+        <div class="col-md-4 col-xs-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+    <div>
+        <i class="fas fa-comment fa-3x pa2 txt_indigo" aria-hidden="true"></i>
+    </div>                                
+    <div>
+        <h4>Forum</h4>
+        <p>Find relevant posts/answers. No solution yet to your concern? Come and ask your question    </p>
+        <p><a href="https://www.eclipse.org/forums/index.php?t=thread&frm_id=24&">Learn more <i class="fas fa-arrow-alt-circle-right" aria-hidden="true"></i>
+        </a></p>                                
+    </div>
+</div>
+
+
+
+
+        <div class="col-md-4 col-xs-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+    <div>
+        <i class="fas fa-life-ring fa-3x pa2 txt_indigo" aria-hidden="true"></i>
+    </div>                                
+    <div>
+        <h4>Professional support</h4>
+        <p>Obeo, leader of Acceleo’s development, provides training, expertise, custom development and support plans</p>
+        <p><a href="https://www.obeo.fr/en/services">Learn more <i class="fas fa-arrow-alt-circle-right" aria-hidden="true"></i>
+        </a></p>                                
+    </div>
+</div>
+
+
+
+    </div>
+    </div>
+</section>
+
+<section id="" class="bg_lightest_grey text-center">
+    <div class="container">
+        <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">Project Lead</h2> 
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s"></p>
+
+
+        <div class="row">
+            <div class="col-md-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">            
+                <p><a href="http://www.obeo.fr" title="Logo Obeo"><img src="/acceleo/common_assets/images/logos/logo_obeo.png"></a></p>
+            </div>
+        </div>
+    </div>       
+</div>
+</section>
+
+<footer>
+  <div class="container">
+      <div class="row">    
+        
+<div class="col-md-3">
+    <p><a href="http://www.eclipse.org/"><img src="/acceleo/common_assets/images/logos/logo-eclipse-foundation.png" alt="Eclipse Foundation logo"></a></p>
+    <p id="copyright">Copyright © 2019 Eclipse Foundation, Inc.<br>All Rights Reserved.</p>
+</div>
+
+<div class="col-md-3">
+    <h6>Eclipse Foundation</h6>
+    <ul>
+        <li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
+        <li><a href="http://eclipse.org/">Eclipse</a></li>
+        <li><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
+        <li><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
+        <li><a href="http://www.eclipse.org/legal/">Legal</a></li>
+        <li><a href="http://www.eclipse.org/org/foundation/contact.php"> Contact Us</a></li>
+    </ul>
+</div>
+
+        
+<div class="col-md-3">
+    <h6>Project Links</h6>
+    <ul>
+        <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo">About this project</a></li>
+        <li><a href="http://wiki.eclipse.org/Acceleo">Wiki</a></li>
+        <li><a href="https://www.eclipse.org/forums/index.php?t=thread&frm_id=24&">Forum</a></li>
+        <li><a href="https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=VERIFIED&list_id=9161179&product=Acceleo&query_format=advanced">Bugs</a></li>
+        <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo/developer">Source Code</a></li>
+    </ul>
+</div>
+    </div>
+  </div>
+</footer>
+
+    
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous" defer></script>
+
+<script src="/acceleo//common_assets/js/wow.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.video.js" defer></script>
+<!-- Call wow function -->
+<script>
+        jQuery(document).ready(function(){
+            "use strict";
+            new WOW().init();
+        });
+</script>
+  
+  </body>
+</html>
diff --git a/index.php b/index.php
deleted file mode 100644
index a92f11f..0000000
--- a/index.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php  
-	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
-	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
-	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
-
-	$App 	= new App();
-	$Nav	= new Nav();
-	$Menu 	= new Menu();
-
-	include($App->getProjectCommon());
-
-	$pageKeywords	= "acceleo, dsl, modeling, domain specific language, textual, generator, code generator, emf, mofm2t, dsl, metamodel, free, open source, uml";
-	$pageAuthor		= "Obeo";
-	$pageTitle 		= "Acceleo";
-
-	$html = file_get_contents('_index.html');
-	
-	# Generate the web page
-	$App->AddExtraHtmlHeader('<link href="https://plus.google.com/114651471803085159652/" rel="publisher" />' . "\n\t");
-	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
-?>
diff --git a/downloads/custom-scripts.php b/js/custom-scripts.php
similarity index 100%
rename from downloads/custom-scripts.php
rename to js/custom-scripts.php
diff --git a/overview.html b/overview.html
new file mode 100644
index 0000000..94c786b
--- /dev/null
+++ b/overview.html
@@ -0,0 +1,210 @@
+<!DOCTYPE html>
+<html>
+
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+  
+    <title>Acceleo | Overview</title>
+  
+    <meta name="description" content="">
+    <link rel="shortcut icon" type="image/png" href="/acceleo/common_assets/images/logos/favicon_acceleo.ico" />
+
+  
+    <link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
+    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">
+
+    <!-- Bootstrap CSS -->
+    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
+    <link rel="stylesheet" href="/acceleo/common_assets/css/styles.css">
+    <link rel="stylesheet" href="/acceleo/common_assets/css/animate.css">
+
+    <link rel="canonical" href="/acceleo/acceleo/overview.html">
+
+    <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
+    <!-- Old version of font awesome for some icons -->
+    <script src="https://use.fontawesome.com/b51f77a16a.js"></script>    
+    <!-- Bootstrap JS -->
+    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm" crossorigin="anonymous"></script>
+    
+    <script type="text/javascript">
+        jQuery(function($){ $(".hasTooltip").tooltip({"html": true,"container": "body"}); });
+    </script>
+    <!-- Triggers tooltips -->
+    <script type="text/javascript">
+        jQuery(document).ready(function() {
+            jQuery('.hasTooltip').tooltip();
+        });
+    </script>
+</head>
+  
+  <body>
+
+    <!-- Navigation -->
+<header id="top-bar" class="navbar navbar-expand-lg fixed-top">
+    <div class="container">
+        <a class="navbar-brand" href="/acceleo">
+            <img src="/acceleo/common_assets/images/logos/logo_acceleo.png" alt="Logo Acceleo">
+        </a>
+        
+        <!-- /logo -->
+        <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive"
+            aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="fa fa-bars"></i>
+        </button>
+        <nav class="collapse navbar-collapse" id="navbarResponsive">
+            <div class="main-menu ml-auto">
+                <ul class="nav navbar-nav">
+                    <li>
+                        <a href="/acceleo/overview.html">Overview</a>
+                    </li>
+                    <li>
+                        <a href="/acceleo/features.html">Features</a>
+                    </li>
+                    <li>
+                        <a href="/acceleo/resources.html">Resources</a>
+                    </li>
+                    <li>
+                        <a href="/acceleo/support.html">Support</a>
+                    </li>
+                    <li id="dwnld">
+                        <a href="/acceleo/download.html">Download</a>
+                    </li>
+                </ul>
+            </div>
+        </nav>
+    </div>
+</header>
+
+    
+    <section>
+    <div class="container">
+       
+        <div class="row">
+    <div class="col-md-5 order-1 wow fadeInLeft animated" data-wow-delay=".1s">
+        <h3>What is Acceleo?</h3>
+        
+            <p>Acceleo is a template-based technology including authoring tools to create custom code generators. It allows you to automatically
+                produce any kind of source code from any data source available in EMF format.
+            </p>
+            <p>It offers outstanding advantages:</p>
+            <ul>
+                <li> high ability to customize</li>
+                <li> interoperability</li>
+                <li>easy kick off</li>
+            </ul>
+            <p>A pragmatic implementation of the Object Management Group (OMG) MOF Model to Text Language (MTL) standard, Acceleo is
+                the result of several man-years of R&D started in the <a href=" https://www.obeo.fr" target="_blank">Obeo</a> company.</p>
+            
+        <p><a href="https://projects.eclipse.org/projects/modeling.acceleo" target="_blank">Project page  <i class="fas fa-arrow-alt-circle-right" aria-hidden="true"></i></a></p>
+    </div>
+    <div class="col-md-7 order-2 wow fadeInUp animated" data-wow-delay=".2s">
+        <img src="images/screenshots/overview.png" alt="Acceleo - Overview">
+    </div>
+</div>
+    </div>
+</section>
+
+<section class="bg_lightest_grey">
+    <div class="container">
+        <div class="row">
+    <div class="col-md-5 order-2 wow fadeInLeft animated" data-wow-delay=".1s">
+        <h3>Discover</h3>
+        
+            <p>You do not need to be an expert to start using the plug-ins and create your first code generator : using the provided example projects and the powerful completion feature of the Acceleo editor, it is very easy to get started and understand the basic principles.</p>
+            <p>The Acceleo generation module Editor supports the user with most of the features you would expect from modern IDEs:</p>
+            <ul>
+                <li> content assist</li>
+                <li> quick outline</li>
+                <li> navigation links to the declaration of model elements</li>
+                <li> template elements and variables</li>
+                <li> quick fixes</li>
+                <li> refactoring</li>
+                <li> syntax highlighting</li>
+                <li> ... and so much more!</li>
+            </ul>
+            
+        <p><a href="http://wiki.eclipse.org/Acceleo/Features" target="_self    ">Learn more  <i class="fas fa-arrow-alt-circle-right" aria-hidden="true"></i></a></p>
+    </div>
+    <div class="col-md-7 order-1 wow fadeInUp animated" data-wow-delay=".2s">
+        <img src="images/screenshots/user_experience.png" alt="Acceleo - User Experience">
+    </div>
+</div>           
+    </div>
+</section>
+
+<section class="text-center">
+    <div class="container">
+        <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">Related Projects</h2> 
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s"></p>
+
+
+        <div class="row">
+            <div class="col-md-5 offset-md-1 col-xs-12 vcenter wow fadeInLeft" data-wow-duration="500ms" data-wow-delay="300ms"><a href="http://www.eclipse.org/modeling/emf/" title="Logo Eclipse EMF"><img src="/acceleo/common_assets/images/logos/logo_emf.jpg"></a></div>
+            <div class="col-md-5 col-xs-12 vcenter wow fadeInLeft" data-wow-duration="500ms" data-wow-delay="300ms"><a href="http://www.eclipse.org/sirius/" title="Logo Eclipse Sirius"><img src="/acceleo/common_assets/images/logos/logo_sirius.png"></a></div>
+
+            <!--<div class="col-md-12 wow fadeInLeft" data-wow-duration="500ms" data-wow-delay="300ms">          
+            <div class="col-md-4 offset-md-2 col-xs-12 wow fadeInLeft" data-wow-duration="500ms" data-wow-delay="300ms">            
+                <p><a href="http://www.eclipse.org/modeling/emf/" title="Logo Eclipse EMF"><img src="/common_assets/images/logos/logo_emf.jpg"></a></p>
+            </div>
+            <div class="col-md-4 col-xs-12 wow fadeInLeft" data-wow-duration="500ms" data-wow-delay="300ms">            
+                <p><a href="http://www.eclipse.org/sirius/" title="Logo Eclipse Sirius"><img src="/common_assets/images/logos/logo_sirius.png"></a></p>
+            </div>-->
+        </div>
+        
+    </div>       
+</section>
+
+<footer>
+  <div class="container">
+      <div class="row">    
+        
+<div class="col-md-3">
+    <p><a href="http://www.eclipse.org/"><img src="/acceleo/common_assets/images/logos/logo-eclipse-foundation.png" alt="Eclipse Foundation logo"></a></p>
+    <p id="copyright">Copyright © 2019 Eclipse Foundation, Inc.<br>All Rights Reserved.</p>
+</div>
+
+<div class="col-md-3">
+    <h6>Eclipse Foundation</h6>
+    <ul>
+        <li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
+        <li><a href="http://eclipse.org/">Eclipse</a></li>
+        <li><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
+        <li><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
+        <li><a href="http://www.eclipse.org/legal/">Legal</a></li>
+        <li><a href="http://www.eclipse.org/org/foundation/contact.php"> Contact Us</a></li>
+    </ul>
+</div>
+
+        
+<div class="col-md-3">
+    <h6>Project Links</h6>
+    <ul>
+        <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo">About this project</a></li>
+        <li><a href="http://wiki.eclipse.org/Acceleo">Wiki</a></li>
+        <li><a href="https://www.eclipse.org/forums/index.php?t=thread&frm_id=24&">Forum</a></li>
+        <li><a href="https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=VERIFIED&list_id=9161179&product=Acceleo&query_format=advanced">Bugs</a></li>
+        <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo/developer">Source Code</a></li>
+    </ul>
+</div>
+    </div>
+  </div>
+</footer>
+
+    
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous" defer></script>
+
+<script src="/acceleo//common_assets/js/wow.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.video.js" defer></script>
+<!-- Call wow function -->
+<script>
+        jQuery(document).ready(function(){
+            "use strict";
+            new WOW().init();
+        });
+</script>
+  
+  </body>
+</html>
diff --git a/project-info/overview.html b/project-info/overview.html
deleted file mode 100644
index ac4bb64..0000000
--- a/project-info/overview.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<p>
-	<a href="http://www.eclipse.org/acceleo">Acceleo</a> is an open source code generator implementing
-	the <a href="http://www.omg.org/">OMG</a>'s <a href="http://www.omg.org/spec/MOFM2T/1.0/">MOF Model
-	to Text Language (MTL)</a> standard that uses any <a href="http://eclipse.org/modeling/emf/">EMF</a>
-	based models (UML, SysML, domain specific models...) to generate any kind of code (Java, C, PHP...)
-	while keeping the traceability of the generated text.
-</p>
-<p>
-	You do not need to be an expert to start using the plug-ins and create your first code generator : using the provided
-	example projects and the powerful completion feature of the Acceleo editor, it is very easy to get started and
-	understand the basic principles.
-</p>
-<p>
-	You can get a quick glance at Acceleo with the demonstration that was presented
-	<a href="http://www.obeo.fr/videos/acceleo-eclipse/eclipse-modeling-runaway-acceleo.htm">at the Eclipse Modeling
-	Runaway 2010</a>.
-</p>
-<p>
-	More information is available on the wiki page for <a href="http://wiki.eclipse.org/Acceleo">Acceleo</a>.
-</p>
-<p>
-	The <a href="http://acceleo.org/pages/home">Acceleo</a> project was started 4 years ago. Over the years, it
-	steadily grew from its first stable release up to its 2.x versions. Yet, the team has been more and more
-	convinced that the future of code generation lied in the OMG <a href="http://www.omg.org/spec/MOFM2T/1.0/">MTL</a>
-	specification, and that it was the way to go for the project. The reference implementation we provide within the
-	Eclipse M2T project, Acceleo 3.0, combines nice tooling, simple syntax and efficient code generation with all the
-	pragmatism we had with the 2.x stream.
-</p>
\ No newline at end of file
diff --git a/resources.html b/resources.html
new file mode 100644
index 0000000..d664860
--- /dev/null
+++ b/resources.html
@@ -0,0 +1,185 @@
+<!DOCTYPE html>
+<html>
+
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+  
+    <title>Acceleo | Home</title>
+  
+    <meta name="description" content="">
+    <link rel="shortcut icon" type="image/png" href="/acceleo/common_assets/images/logos/favicon_acceleo.ico" />
+
+  
+    <link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
+    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">
+
+    <!-- Bootstrap CSS -->
+    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
+    <link rel="stylesheet" href="/acceleo/common_assets/css/styles.css">
+    <link rel="stylesheet" href="/acceleo/common_assets/css/animate.css">
+
+    <link rel="canonical" href="/acceleo/acceleo/resources.html">
+
+    <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
+    <!-- Old version of font awesome for some icons -->
+    <script src="https://use.fontawesome.com/b51f77a16a.js"></script>    
+    <!-- Bootstrap JS -->
+    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm" crossorigin="anonymous"></script>
+    
+    <script type="text/javascript">
+        jQuery(function($){ $(".hasTooltip").tooltip({"html": true,"container": "body"}); });
+    </script>
+    <!-- Triggers tooltips -->
+    <script type="text/javascript">
+        jQuery(document).ready(function() {
+            jQuery('.hasTooltip').tooltip();
+        });
+    </script>
+</head>
+  
+  <body>
+
+    <!-- Navigation -->
+<header id="top-bar" class="navbar navbar-expand-lg fixed-top">
+    <div class="container">
+        <a class="navbar-brand" href="/acceleo">
+            <img src="/acceleo/common_assets/images/logos/logo_acceleo.png" alt="Logo Acceleo">
+        </a>
+        
+        <!-- /logo -->
+        <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive"
+            aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="fa fa-bars"></i>
+        </button>
+        <nav class="collapse navbar-collapse" id="navbarResponsive">
+            <div class="main-menu ml-auto">
+                <ul class="nav navbar-nav">
+                    <li>
+                        <a href="/acceleo/overview.html">Overview</a>
+                    </li>
+                    <li>
+                        <a href="/acceleo/features.html">Features</a>
+                    </li>
+                    <li>
+                        <a href="/acceleo/resources.html">Resources</a>
+                    </li>
+                    <li>
+                        <a href="/acceleo/support.html">Support</a>
+                    </li>
+                    <li id="dwnld">
+                        <a href="/acceleo/download.html">Download</a>
+                    </li>
+                </ul>
+            </div>
+        </nav>
+    </div>
+</header>
+
+    
+    <section id="" class="text-center">
+    <div class="container">
+      
+        <div class="row">
+            <div class="col-sm-4 col-xs-12 wow fadeInLeft animated" data-wow-duration="300ms" data-wow-delay="0ms">
+                <div><i class="fas fa-play-circle fa-3x pa2 txt_indigo" aria-hidden="true"></i></div>
+                <h4>Tutorials</h4>
+                <p><a data-wow-delay=".1s" href="https://www.google.com/url?q=https://wiki.eclipse.org/Acceleo/Getting_Started&sa=D&ust=1534837733047000&usg=AFQjCNHUt1ukFD_VDvqN6orjXEQAAz-IKA" target="_blank">Create your First Acceleo Generator <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
+                <p><a data-wow-delay=".2s" href="https://www.google.com/url?q=https://wiki.eclipse.org/Acceleo/Videos/TopcasedDays2011&sa=D&ust=1534837733050000&usg=AFQjCNHMFibMYHa60zVe8e0vbJEXSB35gw" target="_blank">Android code generation <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
+            </div>
+            <div class="col-sm-4 col-xs-12 wow fadeInLeft animated" data-wow-duration="300ms" data-wow-delay="0ms">
+                <div><i class="fas fa-file-alt fa-3x pa2 txt_indigo" aria-hidden="true"></i></div>
+                <h4>Documentation</h4>
+                <p><a href="http://help.eclipse.org/photon/index.jsp?topic=/org.eclipse.acceleo.doc/pages/index.html" target="_blank">
+                    Reference documentation <i class="fa fa-external-link" aria-hidden="true"></i></a> <i class="fa fa-info-circle hasTooltip txt_lightest_grey" title="This documentation is included in the Help Content of Eclipse. Within your Eclipse, go to Help / Help Contents and navigate to the Acceleo Model To Text section" data-toggle="tooltip" data-placement="bottom" data-original-title="This documentation is included in the Help Content of Eclipse. Within your Eclipse, go to Help / Help Contents and navigate to the Acceleo Model To Text section"></i></p>
+                <p><a href="https://wiki.eclipse.org/Acceleo/Acceleo_Operations_Reference" target="_blank">Acceleo Operations Reference <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
+                <p><a href="https://wiki.eclipse.org/Acceleo/OCL_Operations_Reference" target="_blank">OCL Operations Reference <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
+                <p><a href="https://wiki.eclipse.org/Acceleo/User_Guide" target="_blank">User Guide <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
+                <p><a href="https://www.obeo.fr/en/acceleo-best-practices" target="_blank">Best Practices <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
+                <p><a href="https://wiki.eclipse.org/Acceleo" target="_blank">Acceleo Wiki <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
+            </div>
+            
+            <div class="col-sm-4 col-xs-12 wow fadeInLeft animated" data-wow-duration="300ms" data-wow-delay="100ms">
+                <div><i class="fas fa-folder-open fa-3x pa2 txt_indigo" aria-hidden="true"></i></div>
+                <h4>Developers Resources</h4>
+                <p><a href="https://projects.eclipse.org/projects/modeling.acceleo" target="_blank">About this project <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
+                <p><a href="http://git.eclipse.org/c/acceleo/org.eclipse.acceleo.git/" target="_blank">
+                    Git <i class="fa fa-external-link" aria-hidden="true"></i></a> <i class="fa fa-info-circle hasTooltip txt_lightest_grey" title="Source Code Access" data-toggle="tooltip" data-placement="bottom" data-original-title="Source Code Access"></i></p>
+                <p><a href="https://git.eclipse.org/r/#/admin/projects/acceleo/org.eclipse.acceleo" target="_blank">
+                    Gerrit <i class="fa fa-external-link" aria-hidden="true"></i></a> <i class="fa fa-info-circle hasTooltip txt_lightest_grey" title="Code review" data-toggle="tooltip" data-placement="bottom" data-original-title="Code review"></i></p>
+                <p><a href="https://accounts.eclipse.org/mailing-list/acceleo-dev" target="_blank">
+                    Developer Mailing List <i class="fa fa-external-link" aria-hidden="true"></i></a> <i class="fa fa-info-circle hasTooltip txt_lightest_grey" title="Subscribe to the developer list and get updates about the project's code aspects" data-toggle="tooltip" data-placement="bottom" data-original-title="Subscribe to the developer list and get updates about the project's code aspects"></i></p>
+                <p><a href="https://www.openhub.net/p/acceleo-eclipse" target="_blank">
+                    Acceleo at OpenHub <i class="fa fa-external-link" aria-hidden="true"></i></a> <i class="fa fa-info-circle hasTooltip txt_lightest_grey" title="Project's code aspects, metrics, comments ratio..." data-toggle="tooltip" data-placement="bottom" data-original-title="Project's code aspects, metrics, comments ratio..."></i></p>
+            </div>
+        </div>
+
+    </div>
+</section>
+
+<section class="bg_lightest_grey text-center">
+    <div class="container">
+        <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">Contribute</h2> 
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s">Acceleo is actively looking for project contributors. <br><br>There are many official and unofficial ways
+                    to get involved. <br>Please see <a href='http://wiki.eclipse.org/Acceleo/Wishlist'>this wiki page</a> for some
+                    ideas, and <a href='http://wiki.eclipse.org/Setting_up_a_development_environment_for_Acceleo'>
+                    this one</a> for information on how to set up your development environment.
+                </p>
+
+
+    </div>       
+</section>
+
+<footer>
+  <div class="container">
+      <div class="row">    
+        
+<div class="col-md-3">
+    <p><a href="http://www.eclipse.org/"><img src="/acceleo/common_assets/images/logos/logo-eclipse-foundation.png" alt="Eclipse Foundation logo"></a></p>
+    <p id="copyright">Copyright © 2019 Eclipse Foundation, Inc.<br>All Rights Reserved.</p>
+</div>
+
+<div class="col-md-3">
+    <h6>Eclipse Foundation</h6>
+    <ul>
+        <li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
+        <li><a href="http://eclipse.org/">Eclipse</a></li>
+        <li><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
+        <li><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
+        <li><a href="http://www.eclipse.org/legal/">Legal</a></li>
+        <li><a href="http://www.eclipse.org/org/foundation/contact.php"> Contact Us</a></li>
+    </ul>
+</div>
+
+        
+<div class="col-md-3">
+    <h6>Project Links</h6>
+    <ul>
+        <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo">About this project</a></li>
+        <li><a href="http://wiki.eclipse.org/Acceleo">Wiki</a></li>
+        <li><a href="https://www.eclipse.org/forums/index.php?t=thread&frm_id=24&">Forum</a></li>
+        <li><a href="https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=VERIFIED&list_id=9161179&product=Acceleo&query_format=advanced">Bugs</a></li>
+        <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo/developer">Source Code</a></li>
+    </ul>
+</div>
+    </div>
+  </div>
+</footer>
+
+    
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous" defer></script>
+
+<script src="/acceleo//common_assets/js/wow.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.video.js" defer></script>
+<!-- Call wow function -->
+<script>
+        jQuery(document).ready(function(){
+            "use strict";
+            new WOW().init();
+        });
+</script>
+  
+  </body>
+</html>
diff --git a/script/rss2html.php b/script/rss2html.php
deleted file mode 100644
index 19657f2..0000000
--- a/script/rss2html.php
+++ /dev/null
@@ -1,282 +0,0 @@
-<?php
-/* Copyright (c) 2010 Obeo.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     Obeo - initial API and implementation
- */
-// URL of the feed that is to be converted. Can be either URL or absolute URI
-$feedURL = "/home/data/httpd/writable/acceleo/rss20.xml";
-
-// Limits the number of items that is to be displayed to the first n
-$limitItem = 5;
-
-// Limits the length of the displayed items' title to the first n characters
-// -1 means the title length will not be limited
-$limitTitleLength = -1;
-
-// Limits the length of the displayed items' content to the first n characters
-// -1 means the description will not be limited
-// 0 Disables the description altogether
-$limitDescriptionLength = 0;
-
-// See http://www.php.net/manual/en/function.date.php for date formats
-// Here, we use "June 1st, 2010" for example
-$dateFormat = "F jS, Y";
-
-class RSS2HTML {
-	var $readError;
-
-	function convert() {
-		GLOBAL $limitItem;
-		GLOBAL $limitTitleLength;
-		GLOBAL $limitDescriptionLength;
-		GLOBAL $dateFormat;
-
-		$result = "";
-		$xmlString = $this->readFeed();
-		if ($xmlString === FALSE) {
-			$result = $this->readError;
-			return $result;
-		}
-
-		$xmlParser = xml_parser_create();
-		$rssParser = new RSSParser();
-		xml_set_object($xmlParser, $rssParser);
-		xml_set_element_handler($xmlParser, "startElement", "endElement");
-		xml_set_character_data_handler($xmlParser, "characterData");
-		$parseResult = xml_parse($xmlParser, $xmlString, TRUE);
-		if ($parseResult == 0) {
-			$result = xml_error_string(xml_get_error_code($xmlParser));
-			$result .= "\nat ".xml_get_current_line_number($xmlParser);
-			$result .= ":".xml_get_current_column_number($xmlParser);
-			return $result;
-		}
-
-		$itemCount = min($limitItem, count($rssParser->items));
-		
-		if ($itemCount > 0) {
-			$feedLink = $rssParser->feed->link;
-			// Custom fix for planet Acceleo : we don't have the accurate link
-			$feedLink = "http://www.acceleo.org/planet/rss20.xml";
-			$feedTitle = $rssParser->feed->title;
-			
-			$result = "<h6><a class='rss' href='$feedLink'><img align='right' src='images/rss2.gif' alt='RSS Feed'/></a>";
-			$result .= "<a href='$feedLink'>$feedTitle</a></h6>\n";
-			
-			$result .= "<div class=\"modal\">\n<ul>\n";
-			for ($i = 0; $i < $itemCount; $i++) {
-				$item = $rssParser->items[$i];
-				$itemTitle = $this->limitLength($item->title, $limitTitleLength);
-				// Custom fix for planet Acceleo : trim the title up to the first ":"
-				$itemTitle = trim(substr(strstr($itemTitle, ":"), 1));
-				$itemDescription = "";
-				if ($limitDescriptionLength > 0) {
-					$itemDescription = $this->limitLength($item->description, $limitDescriptionLength);
-				}
-				$itemPubDate = date($dateFormat, $item->pubDate_time);
-				
-				$result .= "<li>\n";
-				$result .= "<a href='$item->link' display='block'>$itemTitle</a><br/>\n";
-				if (strlen($itemDescription) > 0) {
-					$result .= "$itemDescription<br/>\n";
-					$result .= "<span class='posted'>$itemPubDate</span><br/>\n";
-					$result .= "<a href='$item->link'>read more...</a><br/>\n";
-				} else {
-					$result .= "<span class='posted'>$itemPubDate</span><br/>\n";
-				}
-				$result .= "</li>\n";
-			}
-			$result .= "</ul>\n</div>\n";
-		}
-		return $result;
-	}
-
-	/*
-	 * Reads the feed denoted by URL $feedURL in memory.
-	 */
-	function readFeed() {
-		GLOBAL $feedURL;
-
-		if (strpos($feedURL, "http") === 0) {
-			$parsedURL = parse_url($feedURL);
-
-			$host = $parsedURL['host'];
-			$path = $parsedURL['path'];
-
-			$result = "";
-
-			$ip = gethostbyname($host);
-			$handle = @fsockopen($ip, 80, &$errno, &$errstr, 10);
-			if(!$handle) {
-				$this->readError = $errstr;
-				return FALSE;
-			}
-
-			$httpRequest = "GET ".$path." HTTP/1.1\r\n";
-			$httpRequest .= "Host: ".$host."\r\n";
-			$httpRequest .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3\r\n";
-			$httpRequest .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
-			$httpRequest .= "Accept-Language: en-us,en;q=0.8,fr;q=0.5,fr-fr;q=0.3\r\n";
-			$httpRequest .= "Keep-Alive: 115\r\n";
-			$httpRequest .= "Connection: keep-alive\r\n";
-			$httpRequest .= "Referer: http://".$host."\r\n";
-			$httpRequest .= "\r\n";
-
-			fputs($handle, $httpRequest);
-
-			// Read the very first line of the header in order to retrieve the HTTP response code
-			$firstHeaderLine = fgets($handle, 1024);
-			$headerParts = explode(" ", $firstHeaderLine);
-			if ($headerParts[1] < 200 || $headerParts[1] >= 300) {
-				$this->readError = "HTTP ERROR: ".$headerParts[1];
-				@fclose($handle);
-				return FALSE;
-			}
-
-			$data = fread($handle, 16384);
-			while (!feof($handle)) {
-				$result .= $data;
-				$data = fread($handle, 16384);
-			}
-			fclose($handle);
-
-			// strip headers out of the result
-			$pos = strpos($result, "\r\n\r\n");
-			$result = substr($result, $pos + 4);
-		} else {
-			return file_get_contents($feedURL);
-		}
-
-		return $result;
-	}
-
-	/*
-	 * Limit the length of the given HTML String to the given number of characters. Take note that this will strip all html information
-	 * out of the text and only return the raw text itself (save for xml entities).
-	 */
-	function limitLength($initialValue, $limit = -1) {
-		if ($limit == -1 || strlen($initialValue) <= $limit) {
-			return $initialValue;
-		}
-
-		$result = "";
-		$pruneChar = FALSE;
-		for ($i = 0; $i < strlen($initialValue) && strlen($result) <= $limit; $i++) {
-			if (!$pruneChar && $initialValue[$i] == "<") {
-				$pruneChar = TRUE;
-			} elseif ($pruneChar && $initialValue[$i] == ">") {
-				$pruneChar = FALSE;
-			} else if (!$pruneChar) {
-				$result .= $initialValue[$i];
-			}
-		}
-
-		$lastSpace = strrchr($result, ' ');
-		if ($lastSpace != FALSE) {
-			$result = substr($result, 0, -strlen($lastSpace));
-			$result .= " [...]";
-		}
-
-		return $result;
-	}
-}
-
-class RSSParser {
-	var $tag = "";
-	var $currentItem = NULL;
-	var $insideChannel = FALSE;
-	var $insideItem = FALSE;
-
-	var $feed;
-	var $items = Array();
-
-	function startElement($parser, $tagName, $attrs) {
-		$this->tag = $tagName;
-		if ($tagName == "ITEM") {
-			$this->insideItem = TRUE;
-			$this->currentItem = new RSSItem();
-		} elseif ($tagName == "CHANNEL") {
-			$this->insideChannel = TRUE;
-			$this->feed = new Feed();
-		}
-	}
-
-	function endElement($parser, $tagName) {
-		$this->tag = "";
-		if ($tagName == "ITEM") {
-			$this->currentItem->pubDate = trim($this->currentItem->pubDate);
-			$this->currentItem->title = trim($this->currentItem->title);
-			$this->currentItem->description = trim($this->currentItem->description);
-			$this->currentItem->link = trim($this->currentItem->link);
-			$this->currentItem->author = trim($this->currentItem->author);
-
-			$this->currentItem->pubDate_time = strtotime($this->currentItem->pubDate);
-
-			$this->items[] = $this->currentItem;
-
-			$this->insideItem = FALSE;
-		} elseif ($tagName == "CHANNEL") {
-			$this->feed->title = trim($this->feed->title);
-			$this->feed->link = trim($this->feed->link);
-
-			$this->insideChannel = FALSE;
-		}
-	}
-
-	function characterData($parser, $data) {
-		if ($data != NULL && $data != "" && ($this->insideItem || $this->insideChannel)) {
-			switch ($this->tag) {
-				case "TITLE":
-					if ($this->insideItem) {
-						$this->currentItem->title .= $data;
-					} else if ($this->insideChannel) {
-						$this->feed->title .= $data;
-					}
-					break;
-
-				case "DESCRIPTION":
-					if ($this->insideItem) {
-						$this->currentItem->description .= $data;
-					}
-					break;
-
-				case "LINK":
-					if ($this->insideItem) {
-						$this->currentItem->link .= $data;
-					} else if ($this->insideChannel) {
-						$this->feed->link .= $data;
-					}
-					break;
-
-				case "PUBDATE":
-					$this->currentItem->pubDate .= $data;
-					break;
-
-				case "AUTHOR":
-					$this->currentItem->author .= $data;
-					break;
-
-				default:
-			}
-		}
-	}
-}
-
-class Feed {
-	var $title = "";
-	var $link = "";
-}
-
-class RSSItem {
-	var $title = "";
-	var $description = "";
-	var $link = "";
-	var $pubDate = "";
-	var $pubDate_time = 0;
-	var $author = "";
-}
-?>
\ No newline at end of file
diff --git a/style_acceleo.css b/style_acceleo.css
deleted file mode 100644
index 81ad545..0000000
--- a/style_acceleo.css
+++ /dev/null
@@ -1,301 +0,0 @@
-#header {
-	display: none;
-}
-
-#clickToHome {
-	
-}
-
-#novaContent {
-	background: url("images/backgroundAcceleoEclipse.png") no-repeat white;
-}
-
-#introText p.left {
-	text-align: justify;
-	width: 48%;
-	float: left;
-}
-
-#introText p.right {
-	text-align: justify;
-	width: 48%;
-	float: right;
-}
-
-#feature {
-	text-align: justify;
-	float: left;
-	width: 63%;
-	margin-right: 3%;
-}
-
-#feature_discovery {
-	text-align: justify;
-	float: left;
-	width: 30%;
-}
-
-#acceleoInAction {
-	text-align: justify;
-	float: left;
-	width: 63%;
-	margin-right: 3%;
-}
-
-#primaryLinks {
-	position: relative;
-	padding-left: 420px;
-	width: 560px;
-}
-
-#primaryLinks h3 {
-	visibility: hidden;
-	height: 0;
-}
-
-#primaryLinks ul li {
-	vertical-align: bottom;
-	display: inline-block;
-	list-style-type: none;
-	padding: 0;
-	margin: 0;
-}
-
-#primaryLinks ul .toTheRight {
-	margin-left: 150px;
-}
-
-#primaryLinks a:hover {
-	text-decoration: underline;
-	color: black;
-}
-
-#primaryLinks a {
-	display: inline-block;
-	list-style-type: none;
-	width: 180px;
-	height: 77px;
-	padding-top: 10px;
-	padding-left: 70px;
-	margin: 0;
-	color: black;
-}
-
-#primaryLinks strong {
-	font-size: larger;
-	display: block;
-	text-decoration: none;
-}
-
-#buttonDownload {
-	background: transparent url("images/buttonDownload_empty.png") no-repeat 0 0;
-}
-
-#buttonDownload:hover {
-	
-}
-
-#buttonDocumentation {
-	background: transparent url("images/buttonDocumentation_empty.png") no-repeat 0 0;
-}
-
-#buttonDocumentation:hover {
-	
-}
-
-#buttonSupport {
-	background: transparent url("images/buttonSupport_empty.png") no-repeat 0 0;
-}
-
-#buttonSupport:hover {
-	
-}
-
-#buttonInvolved {
-	background: transparent url("images/buttonInvolved_empty.png") no-repeat 0 0;
-}
-
-#buttonInvolved:hover {
-	
-}
-
-#screencast {
-	margin-bottom: 10px;
-}
-
-.maintenance a {
-	display: block;
-	height: 24px;
-	padding-left: 24px;
-	background: transparent url("images/logo/acceleo_icon_24.png") no-repeat
-		center left;
-}
-
-#maintenanceLink {
-	padding-left: 27px;
-	padding-top: 6px;
-}
-
-#obeo a {
-	display: block;
-	padding: 0;
-	margin-top: 10px;
-	margin-left: auto;
-	margin-right: auto;
-}
-
-#obeo img {
-	display: block;
-	width: 117px;
-	height: 60px;
-	margin-left: auto;
-	margin-right: auto;
-}
-
-#newAndNoteworthy a {
-	display: block;
-	width: 218px;
-	height: 51px;
-	padding: 0;
-	text-indent: -9000px;
-	background: transparent url("images/newAndNoteworthy.png") no-repeat 0 0;
-	margin-top: 10px;
-	margin-left: auto;
-	margin-right: auto;
-}
-
-#eclipseCommunityAward a {
-	display: block;
-	width: 144px;
-	height: 144px;
-	padding: 0;
-	text-indent: -9000px;
-	background: transparent url("http://www.eclipse.org/images/awards/winner09.jpg") no-repeat 0 0;
-	margin-top: 1px;
-	margin-left: auto;
-	margin-right: auto;
-}
-
-#OWFInnovationAward a {
-	display: block;
-	width: 189px;
-	height: 102px;
-	padding: 0;
-	text-indent: -9000px;
-	background: transparent url("images/openInnovationAward.png") no-repeat 0 0;
-	margin-top: 1px;
-	margin-left: auto;
-	margin-right: auto;
-}
-
-#olderNews {
-	padding-bottom: 5%;
-}
-
-#olderNews a {
-	float: right;
-	font-size: smaller;
-	margin-right: 5%;
-}
-
-.sideitem {
-	border-bottom: 1px dotted #d4d4dd;
-	margin-bottom: 10px;
-	padding-bottom: 5px;
-	clear: both;
-}
-
-.sideitem .modal {
-	background: #FFF url('/eclipse.org-common/themes/Nova/images/thinModalBg.png') repeat-x;
-	padding: 5px;
-}
-
-.sideitem h6 {
-	background-color: #e8e7dd;
-	border-bottom: 2px solid #FFF;
-	font-size: 14px;
-	font-weight: bold;
-	margin-bottom: 0px;
-	-moz-border-radius-topleft: 3px;
-	-moz-border-radius-topright: 3px;
-	padding: 8px 5px;
-}
-
-.sideitem li {
-	text-align: justify;
-	padding: 0 10px 5px 0;
-}
-
-.sideitem ul,.sideitem ol,.sideitem form,.sideitem p {
-	font-size: 12px;
-	padding: 5px;
-}
-
-#midcolumnhome {
-	width: 640px;
-	padding: 0 10px 10px 10px;
-	background: transparent;
-	float: left;
-	margin-right: 20px;
-}
-
-#midcolumn {
-	width: 780px;
-	padding: 0 100px 10px 100px;
-}
-
-#rightcolumn {
-	width: 260px;
-}
-
-h3 {
-	clear: both;
-}
-
-h7 {
-	font-weight: bold;
-	padding: 5px;
-}
-
-a strong {
-	text-decoration: underline;
-}
-
-.twtr-hd h4, .twtr-hd h3{
-clear:none;
-}
-.acceleonavitem h2 {
-	background-color: #e8e7dd;
-	border-bottom: 2px solid #FFF;
-	font-weight: bold;
-	margin-bottom: 0px;
-	-moz-border-radius-topleft:3px;
-	-moz-border-radius-topright:3px;
-	padding: 8px 5px;
-}
-
-.acceleonavitem .contents {
-	background: #FFF url('/eclipse.org-common/themes/Nova/images/thinModalBg.png') repeat-x;
-	padding: 5px;
-}
-
-#novaContent.faux
-{
-	background: url("images/backgroundAcceleoEclipse.png") no-repeat white;
-	padding-bottom: 0px;
-	padding-top: 0px;
-}
-
-#downloadtoc {
-	border: 1px solid #000000;
-	width: 180px;
-}
-
-#toctitle {
-	text-align: center;
-	font-weight: bold;
-}
-
-.toTheRight {
-	margin-left: 150px;
-}
\ No newline at end of file
diff --git a/support.html b/support.html
new file mode 100644
index 0000000..d9c8500
--- /dev/null
+++ b/support.html
@@ -0,0 +1,171 @@
+<!DOCTYPE html>
+<html>
+
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+  
+    <title>Acceleo | Support</title>
+  
+    <meta name="description" content="">
+    <link rel="shortcut icon" type="image/png" href="/acceleo/common_assets/images/logos/favicon_acceleo.ico" />
+
+  
+    <link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
+    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">
+
+    <!-- Bootstrap CSS -->
+    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
+    <link rel="stylesheet" href="/acceleo/common_assets/css/styles.css">
+    <link rel="stylesheet" href="/acceleo/common_assets/css/animate.css">
+
+    <link rel="canonical" href="/acceleo/acceleo/support.html">
+
+    <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
+    <!-- Old version of font awesome for some icons -->
+    <script src="https://use.fontawesome.com/b51f77a16a.js"></script>    
+    <!-- Bootstrap JS -->
+    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm" crossorigin="anonymous"></script>
+    
+    <script type="text/javascript">
+        jQuery(function($){ $(".hasTooltip").tooltip({"html": true,"container": "body"}); });
+    </script>
+    <!-- Triggers tooltips -->
+    <script type="text/javascript">
+        jQuery(document).ready(function() {
+            jQuery('.hasTooltip').tooltip();
+        });
+    </script>
+</head>
+  
+  <body>
+
+    <!-- Navigation -->
+<header id="top-bar" class="navbar navbar-expand-lg fixed-top">
+    <div class="container">
+        <a class="navbar-brand" href="/acceleo">
+            <img src="/acceleo/common_assets/images/logos/logo_acceleo.png" alt="Logo Acceleo">
+        </a>
+        
+        <!-- /logo -->
+        <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive"
+            aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="fa fa-bars"></i>
+        </button>
+        <nav class="collapse navbar-collapse" id="navbarResponsive">
+            <div class="main-menu ml-auto">
+                <ul class="nav navbar-nav">
+                    <li>
+                        <a href="/acceleo/overview.html">Overview</a>
+                    </li>
+                    <li>
+                        <a href="/acceleo/features.html">Features</a>
+                    </li>
+                    <li>
+                        <a href="/acceleo/resources.html">Resources</a>
+                    </li>
+                    <li>
+                        <a href="/acceleo/support.html">Support</a>
+                    </li>
+                    <li id="dwnld">
+                        <a href="/acceleo/download.html">Download</a>
+                    </li>
+                </ul>
+            </div>
+        </nav>
+    </div>
+</header>
+
+    
+    <section>
+    <div class="container">
+        <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">Community Support</h2> 
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s"></p>
+
+
+        <div class="row">
+            <div class="col-md-12">
+                <ul>
+                    <li class="wow fadeInLeft animated" data-wow-delay=".1s"><a href="http://www.eclipse.org/forums/index.php?t=thread&frm_id=24&" target="_blank">M2T Newsgroup</a> - Remember to prefix the subject of your Acceleo-related posts with "[Acceleo]"</li>
+                    <li class="wow fadeInLeft animated" data-wow-delay=".1s"><a href="http://stackoverflow.com/questions/tagged/acceleo" target="_blank">Acceleo on Stackoverflow</a> - Remember to tag your questions with the Acceleo tag</li>
+                    <li class="wow fadeInLeft animated" data-wow-delay=".1s"><a href="https://bugs.eclipse.org/bugs/buglist.cgi?classification=Modeling&product=Acceleo&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED" target="_blank">Acceleo Bugzilla</a> - Review and create Bugzilla entries</li>
+                </ul>
+            </div>
+        </div>
+    </div>
+</section>
+
+<section class="bg_lightest_grey">
+    <div class="container">
+        <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">Professional Services</h2> 
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s"></p>
+
+
+        <div class="row">
+            <div class="col-md-12">
+                <p class="wow fadeInDown animated" data-wow-delay=".1s">Obeo, creator of Acceleo, provides professional services to help you produce and maintain generators of industrial grade:</p>
+                <ul>
+                    <li class="wow fadeInLeft animated" data-wow-delay=".1s"><a  href="http://www.obeo.fr/en/services/support-maintenance" target="_blank">Support & maintenance</a></li>
+                    <li class="wow fadeInLeft animated" data-wow-delay=".2s"><a href="http://www.obeo.fr/en/services/training" target="_blank">Training</a></li>
+                    <li class="wow fadeInLeft animated" data-wow-delay=".3s"><a href="http://www.obeo.fr/en/services/coaching" target="_blank">Consulting & coaching</a></li>
+                    <li class="wow fadeInLeft animated" data-wow-delay=".4s"><a href="http://www.obeo.fr/en/services/custom-development" target="_blank">Custom development</a></li>
+                </ul>
+            </div>
+        </div>
+    </div>       
+</section>
+
+<footer>
+  <div class="container">
+      <div class="row">    
+        
+<div class="col-md-3">
+    <p><a href="http://www.eclipse.org/"><img src="/acceleo/common_assets/images/logos/logo-eclipse-foundation.png" alt="Eclipse Foundation logo"></a></p>
+    <p id="copyright">Copyright © 2019 Eclipse Foundation, Inc.<br>All Rights Reserved.</p>
+</div>
+
+<div class="col-md-3">
+    <h6>Eclipse Foundation</h6>
+    <ul>
+        <li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
+        <li><a href="http://eclipse.org/">Eclipse</a></li>
+        <li><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
+        <li><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
+        <li><a href="http://www.eclipse.org/legal/">Legal</a></li>
+        <li><a href="http://www.eclipse.org/org/foundation/contact.php"> Contact Us</a></li>
+    </ul>
+</div>
+
+        
+<div class="col-md-3">
+    <h6>Project Links</h6>
+    <ul>
+        <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo">About this project</a></li>
+        <li><a href="http://wiki.eclipse.org/Acceleo">Wiki</a></li>
+        <li><a href="https://www.eclipse.org/forums/index.php?t=thread&frm_id=24&">Forum</a></li>
+        <li><a href="https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=VERIFIED&list_id=9161179&product=Acceleo&query_format=advanced">Bugs</a></li>
+        <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo/developer">Source Code</a></li>
+    </ul>
+</div>
+    </div>
+  </div>
+</footer>
+
+    
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous" defer></script>
+
+<script src="/acceleo//common_assets/js/wow.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.video.js" defer></script>
+<!-- Call wow function -->
+<script>
+        jQuery(document).ready(function(){
+            "use strict";
+            new WOW().init();
+        });
+</script>
+  
+  </body>
+</html>
diff --git a/support/_index.html b/support/_index.html
deleted file mode 100644
index d03ed9d..0000000
--- a/support/_index.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<div id="midcolumn">
-
-	<div>
-		<h2>Getting Started</h2>
-		<div class="contents">
-			<ul>
-				<li>Tutorial: create your <a href="http://wiki.eclipse.org/Acceleo/Getting_Started">First Acceleo Generator</a></li>
-				<li>Complete <a href="https://wiki.eclipse.org/Acceleo/User_Guide">User Guide</a></li>
-				<li><a href="https://www.obeo.fr/en/acceleo-best-practices">Best Practices Guide</a></li>
-			</ul>
-		</div>
-	</div>
-
-	<div>
-		<h2>Documentation Portals</h2>
-		<div class="contents">
-			<p>The full documentation is included in the Help Content of Eclipse. Within your Eclipse, go to
-			<i>Help =&gt; Help Contents</i> and navigate to the <b>Acceleo Model To Text</b> section.</p>
-			<ul>
-				<li><a href="https://help.eclipse.org/topic/org.eclipse.acceleo.doc/pages/index.html?cp=5" rel="nofollow">Eclipse Help Center</a> : Online documentation of Eclipse</li>
-				<li><a href="http://wiki.eclipse.org/Acceleo">Acceleo wiki</a> : Acceleo featured on the Eclispepedia</li>
-			</ul>
-		</div>
-	</div>
-
-	<div>
-		<h2>Community Support</h2>
-		<div class="contents">
-			<ul>
-				<li>
-					<b><a href="http://www.eclipse.org/forums/index.php?t=thread&frm_id=24&" title="M2T
-					Newsgroup">M2T Newsgroup</a></b> - please, remember to prefix the subject of your
-					Acceleo-related posts with "[Acceleo]".
-				</li>
-				<li>
-					<b><a href="https://bugs.eclipse.org/bugs/buglist.cgi?classification=Modeling&product=Acceleo&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED"
-					title="Acceleo Bugs" rel="nofollow">Acceleo Bugzilla</a></b> - review and create Bugzilla
-					entries.
-				</li>
-				<li>
-					<b><a href="http://stackoverflow.com/questions/tagged/acceleo" title="Acceleo Stackoverflow"
-					rel="nofollow">Acceleo on Stackoverflow</a></b> - Remember to tag your questions with the
-					Acceleo tag.
-				</li>
-			</ul>
-		</div>
-	</div>
-
-	<div>
-		<h2>Professional Support and Training</h2>
-		<div class="contents">
-			<p>
-				Obeo, creator of Acceleo, provides professional services to help you produce and maintain generators of industrial grade:
-				<ul>
-					<li><a href="http://www.obeo.fr/en/services/training">Training</a></li>
-					<li><a href="http://www.obeo.fr/en/services/coaching">Consulting & coaching</a></li>
-					<li><a href="http://www.obeo.fr/en/services/custom-development">Custom development</a></li>
-					<li><a href="http://www.obeo.fr/en/services/support-maintenance">Support & maintenance</a></li>
-				</ul> 
-			</p>
-			<br />
-		</div>
-	</div>
-
-</div>
diff --git a/support/index.php b/support/index.php
deleted file mode 100644
index 2b07910..0000000
--- a/support/index.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
-	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
-	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
-
-	$App 	= new App();
-	$Nav	= new Nav();
-	$Menu 	= new Menu();
-
-	include($App->getProjectCommon());
-	
-	$pageTitle 		= "Support";
-
-	$html = file_get_contents('_index.html');
-	
-	# Generate the web page
-	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
-?>
diff --git a/test.html b/test.html
deleted file mode 100644
index 3ae6a15..0000000
--- a/test.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<div id="midcolumnhome">
-	<h3>Acceleo - transforming models into code</h3>
-	<div id="introText">
-		<p class="left">
-			<a href="http://wiki.eclipse.org/Acceleo">Acceleo</a> is a pragmatic implementation of the
-			<a href="http://www.omg.org/">Object Management Group (OMG)</a> <a href="http://www.omg.org/spec/MOFM2T/1.0/">
-			MOF Model to Text Language (MTL)</a> standard. You do not need to be an expert to start using the
-			plug-ins and create your first code generator : using the provided example projects and the powerful
-			completion feature of the Acceleo editor, it is very easy to get started and understand the basic principles.
-		</p>
-		<p class="right">
-			Acceleo is the result of several man-years of R&D started in the French company Obeo. Junction between the
-			OMG MTL standard, its team's experience with industrial code generation and the latest research advances into
-			the M2T field, it offers outstanding advantages : High ability to customize, Interoperability, Easy kick off,
-			Traceability Management, and many more!
-		</p>
-	</div>
-
-	<div id="screencast">
-		<a href="http://www.obeo.fr/videos/acceleo-eclipse/eclipse-modeling-runaway-acceleo.htm" title="See Acceleo in action" rel="nofollow">
-		<div class="prezi-player">
-			<style type="text/css" media="screen">
-				.prezi-player { width: 640px; }
-				.prezi-player-links { text-align: center; }
-			</style>
-			<object id="prezi_xpdkccxjlj-e" name="prezi_xpdkccxjlj-e" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="640" height="480">
-				<param name="movie" value="http://prezi.com/bin/preziloader.swf"/>
-				<param name="allowfullscreen" value="true"/>
-				<param name="allowscriptaccess" value="always"/>
-				<param name="bgcolor" value="#ffffff"/>
-				<param name="flashvars" value="prezi_id=xpdkccxjlj-e&amp;lock_to_path=0&amp;color=ffffff&amp;autoplay=yes&amp;autohide_ctrls=1"/>
-				<embed id="preziEmbed_xpdkccxjlj-e" name="preziEmbed_xpdkccxjlj-e" src="http://prezi.com/bin/preziloader.swf" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="640" height="480" bgcolor="#ffffff" flashvars="prezi_id=xpdkccxjlj-e&amp;lock_to_path=0&amp;color=ffffff&amp;autoplay=no&amp;autohide_ctrls=0"></embed>
-			</object>
-			<div class="prezi-player-links">
-				<p>
-					<a title="Acceleo at the Eclipse-OMG Workshop" href="http://prezi.com/xpdkccxjlj-e/acceleo-at-the-eclipse-omg-workshop/">Acceleo at the Eclipse-OMG Workshop 2012</a>
-				</p>
-			</div>
-		</div>
-	</div>
-
-	<h3>From Acceleo.org to Eclipse.org </h3>
-	<div id="introText">
-		<p class="left">
-			The <a href="http://acceleo.org/pages/home">Acceleo</a> project was started 4 years ago. Over the years, it
-			steadily grew from its first stable release up to its 2.x versions. Yet, the team has been more and more
-			convinced that the future of code generation lied in the OMG
-			<a href="http://www.omg.org/spec/MOFM2T/1.0/">MTL</a> specification, and that it was the way to go for the
-			project.
-		</p>
-		<p class="right">
-			The reference implementation we provide within the Eclipse M2T project, Acceleo 3, combines nice tooling,
-			simple syntax and efficient code generation with all the pragmatism we had with the 2.x stream.
-		</p>
-	</div>
-
-	<div id="feature">
-		<h4>User Experience</h4>
-		<p>
-			The Acceleo generation module Editor supports the user with most of the features you would expect from modern
-			IDEs : content assist, quick outline, navigation links to the declaration of model elements, template elements
-			and variables, quick fixes, refactoring, syntax highlighting, occurences highlighting... and so much more!
-		</p>
-	</div>
-
-
-	<div id="feature_discovery">
-		<h4>Discovering features...</h4>
-		<p>
-			Read the <a href="/acceleo/documentation">documentation</a>, join the discussion at the
-			<a href="http://www.eclipse.org/forums/index.php?t=thread&frm_id=24&" rel="nofollow">newsgroup</a>, or get in touch with
-			the team on <a href="https://twitter.com/#!/acceleo">Twitter</a> or <a href="https://plus.google.com/b/114651471803085159652/" rel="publisher">Google+</a>.
-		</p>
-	</div>
-	
-	<div id="acceleoInAction">
-		<h4>See it in action !</h4>
-		<p>
-			<a href="http://www.obeo.fr/videos/acceleo-eclipse/eclipse-modeling-runaway-acceleo.htm" rel="nofollow">
-			Acceleo used to create an Android application</a><br/>
-			<a href="http://literate.modeling.free.fr/modeling/acceleo/06-acceleo-editor-features.htm" rel="nofollow">
-			The Acceleo generation modules editor</a><br/>
-			<a href="http://live.eclipse.org/node/926">Helios In Action: Modeling</a>. Modeling components in Helios.<br/>
-			Take a look at the <a href="http://wiki.eclipse.org/Acceleo/Demonstrations">wiki page</a> for more !
-		</p>
-	</div>
-</div>
-
-<div id="rightcolumn">
-	<div class="sideitem" id="obeo">
-		<a href="http://www.obeo.fr" title="Main Obeo website"><img src="images/logo/logo_obeo.png"/></a>
-	</div>
-	
-	<div class="sideitem maintenance">
-		<a id="maintenanceLink" href="http://www.acceleo.org/pages/welcome/en" title="Maintenance 2.x stream website" rel="nofollow">
-		2.x legacy stream website</a>
-	</div>
-
-	<div class="sideitem">
-		<h6>Project Summary</h6>
-		<div class="modal">
-			<p>
-				Read more <a href="http://www.eclipse.org/projects/project_summary.php?projectid=modeling.acceleo">about
-				this project</a> and get all useful information and links about it in a nutshell.
-			</p>
-		</div>
-	</div>
-	
-	<div class="sideitem">
-		<h6><a href="awards">Awards</a></h6>
-		<div class="modal">
-			<br />
-			<div id="OWFInnovationAward"><a href="awards"></a></div>
-			<br />
-			<div id="olderNews"><a href="awards">See more...</a></div>
-		</div>
-	</div>
-
-	<div class="sideitem">
-%%HEADLINES%%
-	</div>
-</div>
