From df60dce04affbd11b19f9fb826e1dcaa6ae09b52 Mon Sep 17 00:00:00 2001
From: alaskowski <alaskowski@ethz.ch>
Date: Fri, 20 Jan 2023 09:14:37 +0100
Subject: [PATCH] SSDM-13329 Moved deep_sequencing_unit and openbis_contrib to
 another repository:
 https://sissource.ethz.ch/openbis/openbis-private/openbis-dsu.ethz.ch

---
 deep_sequencing_unit/.gitignore               |   10 -
 deep_sequencing_unit/.pydevproject            |    7 -
 deep_sequencing_unit/.shadow_dependencies     |    4 -
 .../HOW_TO_FIX_FAILING_CI_BUILD.txt           |   25 -
 deep_sequencing_unit/build.gradle             |  117 -
 .../createInvoices/dist/createInvoices.sh     |    4 -
 .../dist/etc/service.properties               |   23 -
 .../createInvoices/dist/log/.gitignore        |    0
 .../dist/createSampleSheet.sh                 |   30 -
 .../dist/createSampleSheet_nov.sh             |   30 -
 .../dist/etc/createSampleSheet.properties     |   55 -
 .../dist/etc/createSampleSheet_nov.properties |   34 -
 .../dist/etc/openBIS.keystore                 |  Bin 98036 -> 0 bytes
 .../createsamplesheet/dist/log/.gitignore     |    0
 .../dist/etc/data-set-handler-alignment.py    |  137 -
 .../etc/data-set-handler-basecall-stats.py    |   53 -
 .../dist/etc/data-set-handler-bigwig.py       |  124 -
 .../dist/etc/data-set-handler-cell.py         |  111 -
 .../etc/data-set-handler-create-flow-cell.py  |  165 -
 .../etc/data-set-handler-demultiplex-stats.py |  428 --
 .../dist/etc/data-set-handler-lane.py         |  269 -
 .../dist/etc/data-set-handler-pdf.py          |   67 -
 .../dist/etc/data-set-handler-unaligned.py    |  113 -
 .../dist/etc/data-set-handler_fastqc.py       |   56 -
 .../etc/data-set-handler_runinfostatistics.py |   54 -
 .../etc/data-set-handler_takeRTA_timestamp.py |   48 -
 deep_sequencing_unit/dist/etc/log.xml         |   56 -
 deep_sequencing_unit/dist/etc/passwd          |    4 -
 .../dist/etc/service.properties               |  228 -
 deep_sequencing_unit/etc/log.xml              |   19 -
 deep_sequencing_unit/etc/service.properties   |  189 -
 .../etc/web-client.properties                 |   77 -
 .../gradle/wrapper/gradle-wrapper.jar         |  Bin 55616 -> 0 bytes
 .../gradle/wrapper/gradle-wrapper.properties  |    5 -
 deep_sequencing_unit/gradlew                  |  188 -
 deep_sequencing_unit/gradlew.bat              |  100 -
 deep_sequencing_unit/metadata/etc/log.xml     |   19 -
 .../metadata/etc/openBIS.keystore             |  Bin 98036 -> 0 bytes
 .../metadata/etc/service.properties           |    8 -
 .../resource/DSU TrackingClient.launch        |   28 -
 .../resource/dependency-structure.ddf         |   16 -
 .../resource/dsu-master-data.py               | 3623 ---------
 .../eclipse/DSU Data Store Server.launch      |   14 -
 .../property_types_for_admin_console.txt      |  268 -
 .../DemoDropboxTest/demo-data/demo-file-1     |    1 -
 .../DemoDropboxTest/demo-data/demo-file-2     |    1 -
 .../141212_D00535_0037_AC5UMNANXX/RunInfo.xml |   23 -
 .../141212_D00535_0038_BC6A12ANXX/RunInfo.xml |   23 -
 .../runParameters.xml                         |  151 -
 .../RunInfo.xml                               |   23 -
 .../runParameters.xml                         |  151 -
 .../RunInfo.xml                               |  888 ---
 .../RunParameters.xml                         |  926 ---
 .../RTAComplete.txt                           |    1 -
 .../resource/test-db/.gitignore               |    0
 deep_sequencing_unit/settings.gradle          |    1 -
 .../source/BDS/analysis_bcl2fastq.bds         |  770 --
 .../source/Jython/barcodeComplexityChecker.py |   62 -
 .../Jython/createInvoices_Illumina_NGS.py     |  614 --
 .../source/Jython/createSampleSheet.py        |  702 --
 .../source/Jython/createSampleSheetTest.py    |  186 -
 .../Jython/createSampleSheet_Illumina_NGS.py  |  507 --
 .../createSampleSheet_Illumina_NGS_Test.py    |   45 -
 .../Jython/createSampleSheet_bcl2fastq.py     |  786 --
 .../Jython/createSampleSheet_bcl2fastq.sh     |   30 -
 .../createSampleSheet_bcl2fastq_Test.py       |  575 --
 .../source/Jython/createSampleSheet_miseq.py  |  589 --
 .../Jython/createSampleSheet_nextseq.py       |  596 --
 .../source/Jython/createSampleSheet_nov.py    |  409 -
 .../source/Jython/create_QGF_Invoices.py      |  403 -
 .../source/Jython/create_QGF_Invoices.sh      |    4 -
 .../Jython/create_QGF_Invoices_simplified.py  |  629 --
 .../source/Jython/duplicateBarcodeChecker.py  |  104 -
 deep_sequencing_unit/source/Python/bam2wig.py |   51 -
 .../source/Python/calculateCRC32.py           |   56 -
 .../source/Python/concatenatePdfs.py          |   70 -
 .../source/Python/fastq_quality.py            |   42 -
 .../source/Python/fastqc_plots.py             |   67 -
 .../Python/filterOnQualityForFastqGzip.py     |   58 -
 .../Python/filter_on_quality_for_gzip.py      |   58 -
 .../source/Python/rename_file.py              |   41 -
 .../source/Python/solexaQa.py                 |   54 -
 .../source/R/CreatePerCycleReadQuality.R      |   12 -
 .../source/R/barcodeDistribution.R            |  113 -
 .../source/R/createQaReport.R                 |    7 -
 deep_sequencing_unit/source/R/fastq_quality.R |  101 -
 .../source/R/nucleotidesPerCycle.R            |   14 -
 .../source/R/numberOfOccurrences.R            |   19 -
 .../source/SQL/DBM_postgres_trigger.sql       |   31 -
 .../source/bash/CreatePerCycleReadQuality.sh  |   26 -
 .../bash/RTA_check_on_missing_images.sh       |   63 -
 deep_sequencing_unit/source/bash/add_p.sh     |    8 -
 .../source/bash/check_on_missing_images.sh    |   62 -
 .../source/bash/check_read_numbers.sh         |   26 -
 deep_sequencing_unit/source/bash/cif2txt.sh   |   51 -
 .../source/bash/convert_template.sh           |    3 -
 .../source/bash/createQaReport.sh             |   10 -
 .../source/bash/create_srfs.sh                |   79 -
 .../source/bash/createmd5sums                 |   18 -
 .../source/bash/datamover_post.sh             |   10 -
 deep_sequencing_unit/source/bash/do-sync.sh   |   45 -
 .../source/bash/ellac_create_srfs.sh          |  150 -
 .../source/bash/goat_with_missing_tiles.sh    |   13 -
 .../source/bash/illumina2srf-pre1.3           |  Bin 704053 -> 0 bytes
 deep_sequencing_unit/source/bash/lanes2srf    |    7 -
 .../source/bash/lanes2srf-pre1.3              |    6 -
 .../source/bash/lanes2srf_RTA                 |   21 -
 deep_sequencing_unit/source/bash/rm_p.sh      |    8 -
 .../core-plugins/core-plugins.properties      |    0
 .../as/webapps/downloader/html/body-style.css |   60 -
 .../1/as/webapps/downloader/html/button.css   |   39 -
 .../1/as/webapps/downloader/html/d3.js        | 4013 ----------
 .../1/as/webapps/downloader/html/d3.layout.js | 1865 -----
 .../1/as/webapps/downloader/html/d3.time.js   |  692 --
 .../downloader/html/images/openBIS_Logo.svg   |   68 -
 .../webapps/downloader/html/images/sprite.png |  Bin 748 -> 0 bytes
 .../1/as/webapps/downloader/html/index.html   |    9 -
 .../html/openbis-dsu-downloader.html          |  835 --
 .../as/webapps/downloader/html/openbis-dsu.js |  103 -
 .../1/as/webapps/downloader/html/tree.css     |  138 -
 .../1/as/webapps/downloader/plugin.properties |    3 -
 .../1/as/initialize-master-data.py            | 3385 --------
 .../1/dss/data-sources/.gitignore             |    0
 .../create-flowcell-dropbox.py                |  195 -
 .../create-flowcell-dropbox/plugin.properties |   12 -
 .../create-flowcell-hiseq.py                  |  194 -
 .../create-flowcell-hiseq/plugin.properties   |   12 -
 .../create-flow-cell-miseq.py                 |  199 -
 .../create-flowcell-miseq/plugin.properties   |   12 -
 .../read-demultiplex-stats/plugin.properties  |   10 -
 .../read-demultiplex-stats.py                 |  538 --
 .../read-rta-timestamp/plugin.properties      |   11 -
 .../read-rta-timestamp/read-rta-timestamp.py  |   45 -
 .../register-basecall-stats/plugin.properties |   11 -
 .../register-basecall-stats.py                |   72 -
 .../register-bigwig/plugin.properties         |   10 -
 .../register-bigwig/register-bigwig.py        |  140 -
 .../register-bowtie/plugin.properties         |   11 -
 .../register-bowtie/register-bowtie.py        |  130 -
 .../register-fastqc/plugin.properties         |   11 -
 .../register-fastqc/register-fastqc.py        |   73 -
 .../plugin.properties                         |   11 -
 .../register-flowcell-dropbox.py              |   66 -
 .../register-flowcell-hiseq/plugin.properties |   12 -
 .../register-flowcell-hiseq.py                |   97 -
 .../register-flowcell-miseq/plugin.properties |   12 -
 .../register-flowcell-miseq.py                |   60 -
 .../register-lane-hiseq/plugin.properties     |   12 -
 .../register-lane-hiseq.py                    |  279 -
 .../register-lane-miseq/plugin.properties     |   12 -
 .../register-lane-miseq.py                    |  203 -
 .../register-macs/plugin.properties           |   11 -
 .../drop-boxes/register-macs/register-macs.py |   22 -
 .../register-runstatistics/plugin.properties  |   11 -
 .../register-runstatistics.py                 |   73 -
 .../register-thumbnails/plugin.properties     |   12 -
 .../register-thumbnails.py                    |   55 -
 .../register-unaligned/plugin.properties      |   11 -
 .../register-unaligned/register-unaligned.py  |  179 -
 .../1/dss/maintenance-tasks/.gitignore        |    0
 .../1/dss/reporting-plugins/.gitignore        |    0
 .../illumina-ngs/1/dss/services/.gitignore    |    0
 .../2/as/initialize-master-data.py            | 2792 -------
 .../2/dss/data-sources/.gitignore             |    0
 .../create-flowcell-hiseq.py                  |  221 -
 .../create-flowcell-hiseq/plugin.properties   |   12 -
 .../read-rta-timestamp/plugin.properties      |   11 -
 .../read-rta-timestamp/read-rta-timestamp.py  |   76 -
 .../register-basecall-stats/plugin.properties |   11 -
 .../register-basecall-stats.py                |   62 -
 .../register-flowcell/plugin.properties       |   11 -
 .../register-flowcell-hiseq.py                |  138 -
 .../register-lane-hiseq/plugin.properties     |   12 -
 .../register-lane-hiseq.py                    |  223 -
 .../register-runstatistics/plugin.properties  |   11 -
 .../register-runstatistics.py                 |   57 -
 .../register-unaligned/plugin.properties      |   11 -
 .../register-unaligned/register-unaligned.py  |  185 -
 .../2/dss/maintenance-tasks/.gitignore        |    0
 .../2/dss/reporting-plugins/.gitignore        |    0
 .../illumina-ngs/2/dss/services/.gitignore    |    0
 .../core-plugins/illumina-ngs/package-to-dist |    0
 .../as/webapps/cellStatistics/html/index.html |  248 -
 .../as/webapps/cellStatistics/html/style.css  |   47 -
 .../webapps/cellStatistics/plugin.properties  |    6 -
 .../webapps/laneStatistics/html/d3.layout.js  |    1 -
 .../webapps/laneStatistics/html/d3.v3.min.js  |    4 -
 .../as/webapps/laneStatistics/html/index.html |  641 --
 .../laneStatistics/html/openbis-dsu.js        |   81 -
 .../1/as/webapps/laneStatistics/html/pie.js   |   94 -
 .../as/webapps/laneStatistics/html/style.css  |   47 -
 .../webapps/laneStatistics/plugin.properties  |    6 -
 .../html/assets/css/bootstrap-responsive.css  |  815 --
 .../html/assets/css/bootstrap.css             | 4984 ------------
 .../sample-graph/html/assets/css/docs.css     |  846 --
 .../sample-graph/html/assets/css/openbis.css  |   16 -
 .../ico/apple-touch-icon-114-precomposed.png  |  Bin 6043 -> 0 bytes
 .../ico/apple-touch-icon-144-precomposed.png  |  Bin 8457 -> 0 bytes
 .../ico/apple-touch-icon-57-precomposed.png   |  Bin 2260 -> 0 bytes
 .../ico/apple-touch-icon-72-precomposed.png   |  Bin 3204 -> 0 bytes
 .../sample-graph/html/assets/ico/favicon.ico  |  Bin 1150 -> 0 bytes
 .../sample-graph/html/assets/img/bird.png     |  Bin 3092 -> 0 bytes
 .../assets/img/bootstrap-mdo-sfmoma-01.jpg    |  Bin 130647 -> 0 bytes
 .../assets/img/bootstrap-mdo-sfmoma-02.jpg    |  Bin 84505 -> 0 bytes
 .../assets/img/bootstrap-mdo-sfmoma-03.jpg    |  Bin 50755 -> 0 bytes
 .../sample-graph/html/assets/img/browsers.png |  Bin 19776 -> 0 bytes
 .../html/assets/img/example-sites/fleetio.png |  Bin 39837 -> 0 bytes
 .../html/assets/img/example-sites/jshint.png  |  Bin 7258 -> 0 bytes
 .../html/assets/img/example-sites/kippt.png   |  Bin 50695 -> 0 bytes
 .../assets/img/example-sites/soundready.png   |  Bin 53979 -> 0 bytes
 .../img/examples/bootstrap-example-fluid.jpg  |  Bin 25832 -> 0 bytes
 .../img/examples/bootstrap-example-hero.jpg   |  Bin 22280 -> 0 bytes
 .../examples/bootstrap-example-starter.jpg    |  Bin 7182 -> 0 bytes
 .../html/assets/img/github-16px.png           |  Bin 398 -> 0 bytes
 .../assets/img/glyphicons-halflings-white.png |  Bin 8777 -> 0 bytes
 .../html/assets/img/glyphicons-halflings.png  |  Bin 13826 -> 0 bytes
 .../img/glyphicons/glyphicons_009_magic.png   |  Bin 316 -> 0 bytes
 .../img/glyphicons/glyphicons_042_group.png   |  Bin 305 -> 0 bytes
 .../img/glyphicons/glyphicons_079_podium.png  |  Bin 213 -> 0 bytes
 .../glyphicons/glyphicons_082_roundabout.png  |  Bin 345 -> 0 bytes
 .../glyphicons_155_show_thumbnails.png        |  Bin 117 -> 0 bytes
 .../img/glyphicons/glyphicons_163_iphone.png  |  Bin 172 -> 0 bytes
 .../glyphicons_214_resize_small.png           |  Bin 301 -> 0 bytes
 .../glyphicons/glyphicons_266_book_open.png   |  Bin 292 -> 0 bytes
 .../html/assets/img/grid-18px-masked.png      |  Bin 405 -> 0 bytes
 .../html/assets/img/icon-css3.png             |  Bin 370 -> 0 bytes
 .../html/assets/img/icon-github.png           |  Bin 312 -> 0 bytes
 .../html/assets/img/icon-html5.png            |  Bin 452 -> 0 bytes
 .../html/assets/img/icon-twitter.png          |  Bin 264 -> 0 bytes
 .../html/assets/img/less-logo-large.png       |  Bin 13078 -> 0 bytes
 .../html/assets/img/less-small.png            |  Bin 1181 -> 0 bytes
 .../assets/img/responsive-illustrations.png   |  Bin 1077 -> 0 bytes
 .../sample-graph/html/assets/js/README.md     |  106 -
 .../html/assets/js/application.js             |  184 -
 .../html/assets/js/bootstrap-alert.js         |   90 -
 .../html/assets/js/bootstrap-button.js        |   96 -
 .../html/assets/js/bootstrap-carousel.js      |  169 -
 .../html/assets/js/bootstrap-collapse.js      |  157 -
 .../html/assets/js/bootstrap-dropdown.js      |  100 -
 .../html/assets/js/bootstrap-modal.js         |  218 -
 .../html/assets/js/bootstrap-popover.js       |   98 -
 .../html/assets/js/bootstrap-scrollspy.js     |  151 -
 .../html/assets/js/bootstrap-tab.js           |  135 -
 .../html/assets/js/bootstrap-tooltip.js       |  275 -
 .../html/assets/js/bootstrap-transition.js    |   61 -
 .../html/assets/js/bootstrap-typeahead.js     |  285 -
 .../sample-graph/html/assets/js/bootstrap.js  | 1825 -----
 .../html/assets/js/bootstrap.min.js           |    6 -
 .../sample-graph/html/assets/js/d3/d3.js      | 4150 ----------
 .../html/assets/js/d3/d3.layout.js            | 1892 -----
 .../sample-graph/html/assets/js/d3/d3.time.js |  692 --
 .../html/assets/js/dagre/dagre.js             | 4049 ----------
 .../html/assets/js/dagre/dagre.min.js         |   22 -
 .../js/google-code-prettify/prettify.css      |   30 -
 .../js/google-code-prettify/prettify.js       |   28 -
 .../1/as/webapps/sample-graph/html/index.html |   92 -
 .../1/as/webapps/sample-graph/html/webapp.js  | 1064 ---
 .../as/webapps/sample-graph/plugin.properties |    7 -
 .../sample-bottom-up-data/plugin.properties   |    3 -
 .../sample-bottom-up-data/sample-bottom-up.py |    8 -
 .../cisd/dsu/dss/DataSetInfoExtractor.java    |  115 -
 .../dsu/dss/FlowLaneDataSetInfoExtractor.java |   60 -
 .../bsse/cisd/dsu/dss/FlowLaneFeeder.java     |  493 --
 .../bsse/cisd/dsu/dss/StorageProcessor.java   |   44 -
 .../dsu/dss/plugins/ChipResultsSummary.java   |   89 -
 .../cisd/dsu/dss/plugins/ChipSummary.java     |   72 -
 .../cisd/dsu/dss/plugins/DataSetToSOFT.java   |  360 -
 .../ethz/bsse/cisd/dsu/dss/plugins/Date.java  |   38 -
 .../cisd/dsu/dss/plugins/IlluminaSummary.java |  134 -
 .../IlluminaSummaryReportingPlugin.java       |  302 -
 .../ethz/bsse/cisd/dsu/dss/plugins/Lane.java  |  191 -
 .../dsu/dss/plugins/LaneResultsSummary.java   |   46 -
 .../ethz/bsse/cisd/dsu/dss/plugins/Read.java  |   64 -
 .../cisd/dsu/dss/plugins/doubleStats.java     |   71 -
 .../ethz/bsse/cisd/dsu/dss/plugins/stats.java |   71 -
 .../ethz/bsse/cisd/dsu/metadata/DbAccess.java |  103 -
 .../bsse/cisd/dsu/metadata/Parameters.java    |   91 -
 .../cisd/dsu/metadata/create_metadata.java    |  445 --
 .../dsu/tracking/dto/TrackedEntities.java     |   73 -
 .../dsu/tracking/dto/TrackingStateDTO.java    |   93 -
 .../bsse/cisd/dsu/tracking/email/Email.java   |   82 -
 .../dsu/tracking/email/EmailWithSummary.java  |   46 -
 .../email/EntityTrackingEmailData.java        |  140 -
 .../email/EntityTrackingEmailDataManager.java |  206 -
 .../email/EntityTrackingEmailGenerator.java   |  586 --
 .../email/IEntityTrackingEmailGenerator.java  |   37 -
 .../tracking/main/FileBasedTrackingDAO.java   |  141 -
 .../cisd/dsu/tracking/main/ITrackingDAO.java  |   29 -
 .../cisd/dsu/tracking/main/Parameters.java    |  224 -
 .../cisd/dsu/tracking/main/TrackingBO.java    |  801 --
 .../dsu/tracking/main/TrackingClient.java     |  287 -
 .../cisd/dsu/tracking/utils/LogUtils.java     |   88 -
 .../source/java/service.properties            |  141 -
 .../core-plugins/core-plugins.properties      |    1 -
 .../drop-boxes/demo-dropbox/demo-dropbox.py   |   14 -
 .../drop-boxes/demo-dropbox/plugin.properties |    5 -
 .../1/as/webapps/.gc3pie/html/body-style.css  |    4 -
 .../html/bootstrap3/css/bootstrap-theme.css   |  384 -
 .../bootstrap3/css/bootstrap-theme.min.css    |    1 -
 .../.gc3pie/html/bootstrap3/css/bootstrap.css | 6805 -----------------
 .../html/bootstrap3/css/bootstrap.min.css     |    9 -
 .../fonts/glyphicons-halflings-regular.eot    |  Bin 14079 -> 0 bytes
 .../fonts/glyphicons-halflings-regular.svg    |  228 -
 .../fonts/glyphicons-halflings-regular.ttf    |  Bin 29512 -> 0 bytes
 .../fonts/glyphicons-halflings-regular.woff   |  Bin 16448 -> 0 bytes
 .../.gc3pie/html/bootstrap3/js/bootstrap.js   | 1999 -----
 .../html/bootstrap3/js/bootstrap.min.js       |    6 -
 .../1/as/webapps/.gc3pie/html/button.css      |   54 -
 .../1/as/webapps/.gc3pie/html/d3.v2.min.js    |    4 -
 .../.gc3pie/html/images/openBIS_Logo.svg      |   68 -
 .../1/as/webapps/.gc3pie/html/index.html      |  452 --
 .../1/as/webapps/.gc3pie/html/index.html.sv   |  314 -
 .../1/as/webapps/.gc3pie/html/index2.html     |   14 -
 .../webapps/.gc3pie/html/jquery-1.8.2.min.js  |    2 -
 .../.gc3pie/html/openbis-action-deferrer.js   |   31 -
 .../1/as/webapps/.gc3pie/html/openbis-dsu.js  |  103 -
 .../as/webapps/.gc3pie/html/openbis-login.js  |   77 -
 .../.gc3pie/html/openbis-request-cache.js     |   51 -
 .../webapps/.gc3pie/html/openbis-screening.js |  655 --
 .../1/as/webapps/.gc3pie/html/openbis.js      | 1987 -----
 .../1/as/webapps/.gc3pie/html/spin.min.js     |    2 -
 .../1/as/webapps/.gc3pie/plugin.properties    |    6 -
 .../1/as/webapps/bee/html/index.html          |  428 --
 .../1/as/webapps/bee/plugin.properties        |    6 -
 .../as/webapps/cellStatistics/html/index.html |  324 -
 .../as/webapps/cellStatistics/html/style.css  |   47 -
 .../webapps/cellStatistics/plugin.properties  |    6 -
 .../html/bootstrap3/css/bootstrap-theme.css   |  442 --
 .../bootstrap3/css/bootstrap-theme.css.map    |    1 -
 .../bootstrap3/css/bootstrap-theme.min.css    |    5 -
 .../html/bootstrap3/css/bootstrap.css         | 6203 ---------------
 .../html/bootstrap3/css/bootstrap.css.map     |    1 -
 .../html/bootstrap3/css/bootstrap.min.css     |    5 -
 .../fonts/glyphicons-halflings-regular.eot    |  Bin 20335 -> 0 bytes
 .../fonts/glyphicons-halflings-regular.svg    |  229 -
 .../fonts/glyphicons-halflings-regular.ttf    |  Bin 41280 -> 0 bytes
 .../fonts/glyphicons-halflings-regular.woff   |  Bin 23320 -> 0 bytes
 .../html/bootstrap3/js/bootstrap.js           | 2114 -----
 .../html/bootstrap3/js/bootstrap.min.js       |    6 -
 .../css/bootstrapValidator.min.css            |   13 -
 .../js/bootstrapValidator.min.js              |   13 -
 .../webapps/demultiplexing/html/css/main.css  |    8 -
 .../html/images/openBIS_Logo.svg              |   68 -
 .../as/webapps/demultiplexing/html/index.html |  175 -
 .../demultiplexing/html/js/d3.v2.min.js       |    4 -
 .../html/js/jquery-1.8.2.min.js               |    2 -
 .../as/webapps/demultiplexing/html/js/main.js |  180 -
 .../html/js/openbis-action-deferrer.js        |   31 -
 .../demultiplexing/html/js/openbis-dsu.js     |  103 -
 .../demultiplexing/html/js/openbis-login.js   |   77 -
 .../html/js/openbis-request-cache.js          |   51 -
 .../html/js/openbis-screening.js              |  655 --
 .../webapps/demultiplexing/html/js/openbis.js | 1987 -----
 .../demultiplexing/html/js/spin.min.js        |    2 -
 .../webapps/demultiplexing/plugin.properties  |    6 -
 .../as/webapps/downloader/html/body-style.css |   60 -
 .../1/as/webapps/downloader/html/button.css   |   39 -
 .../1/as/webapps/downloader/html/d3.time.js   |  692 --
 .../downloader/html/images/openBIS_Logo.svg   |   68 -
 .../webapps/downloader/html/images/sprite.png |  Bin 748 -> 0 bytes
 .../1/as/webapps/downloader/html/index.html   |    1 -
 .../html/openbis-dsu-downloader.html          |  836 --
 .../1/as/webapps/downloader/html/tree.css     |  138 -
 .../1/as/webapps/downloader/plugin.properties |    3 -
 .../1/as/webapps/invoicing/html/index.html    |  179 -
 .../1/as/webapps/invoicing/plugin.properties  |    6 -
 .../as/webapps/laneStatistics/html/index.html | 1037 ---
 .../as/webapps/laneStatistics/html/style.css  |   52 -
 .../webapps/laneStatistics/plugin.properties  |    6 -
 .../illumina-qgf/1/as/webapps/openbis-dsu.js  |  358 -
 .../webapps/sampleSheet/html/body-style.css   |    4 -
 .../1/as/webapps/sampleSheet/html/button.css  |   54 -
 .../1/as/webapps/sampleSheet/html/index.html  |  155 -
 .../as/webapps/sampleSheet/plugin.properties  |    6 -
 .../create-flowcell-hiseq.py                  |  221 -
 .../create-flowcell-hiseq/plugin.properties   |   12 -
 .../create-flow-cell-miseq.py                 |  251 -
 .../create-flowcell-miseq/plugin.properties   |   12 -
 .../create-flow-cell-nextseq.py               |  290 -
 .../create-flowcell-nextseq/plugin.properties |   12 -
 .../create-flowcell/create-flowcell.py        |  309 -
 .../create-flowcell/plugin.properties         |    9 -
 .../export-meta-data/export-meta-data.py      |  464 --
 .../dss/drop-boxes/export-meta-data/lib/crc32 |  Bin 13196 -> 0 bytes
 .../export-meta-data/plugin.properties        |   12 -
 .../plugin.properties                         |   10 -
 .../read-demultiplex-stats-miseq.py           |  594 --
 .../plugin.properties                         |   10 -
 .../read-demultiplex-stats-nextseq.py         |  364 -
 .../read_demultiplex_stats.java               |  736 --
 .../read_demultiplex_statsTest.java           |   64 -
 .../start_read_demultiplex_stats.java         |   21 -
 .../read-demultiplex-stats/plugin.properties  |   10 -
 .../read-demultiplex-stats.py                 |  595 --
 .../read-rta-timestamp/plugin.properties      |   12 -
 .../read-rta-timestamp/read-rta-timestamp.py  |   49 -
 .../register-basecall-stats/plugin.properties |   11 -
 .../register-basecall-stats.py                |   51 -
 .../drop-boxes/register-bee/plugin.properties |   11 -
 .../drop-boxes/register-bee/register-bee.py   |   64 -
 .../register-bigwig/plugin.properties         |   10 -
 .../register-bigwig/register-bigwig.py        |  140 -
 .../register-bowtie/plugin.properties         |   11 -
 .../register-bowtie/register-bowtie.py        |   40 -
 ...gnmentJavaDataSetRegistrationDropboxV2.jar |  Bin 3750 -> 0 bytes
 .../lib/alignment.jar.sv                      |  Bin 2103 -> 0 bytes
 .../lib/alignment.jar.sv2                     |  Bin 2103 -> 0 bytes
 .../plugin.properties                         |    7 -
 .../register-dummy/plugin.properties          |   11 -
 .../register-dummy/register-dummy.py          |   56 -
 .../register-fastqc/plugin.properties         |   11 -
 .../register-fastqc/register-fastqc.py        |   82 -
 .../register-flowcell-hiseq/plugin.properties |   12 -
 .../register-flowcell-hiseq.py                |   61 -
 .../register-flowcell-miseq/plugin.properties |   12 -
 .../register-flowcell-miseq.py                |   60 -
 .../plugin.properties                         |   12 -
 .../register-flowcell-nextseq.py              |   62 -
 .../register-flowcell/plugin.properties       |    6 -
 .../register-flowcell/register-flowcell.py    |  106 -
 .../register-flowlane/lib/crc32_v2.c          |  206 -
 .../register-flowlane/plugin.properties       |    6 -
 .../register-flowlane/register-flowlane.py    |  360 -
 .../drop-boxes/register-lane-hiseq/lib/crc32  |  Bin 10567 -> 0 bytes
 .../register-lane-hiseq/plugin.properties     |   12 -
 .../register-lane-hiseq.py                    |  493 --
 .../drop-boxes/register-lane-miseq/lib/crc32  |  Bin 10567 -> 0 bytes
 .../register-lane-miseq/plugin.properties     |   12 -
 .../register-lane-miseq.py                    |  327 -
 .../register-lane-nextseq/lib/crc32           |  Bin 10567 -> 0 bytes
 .../register-lane-nextseq/lib/crc32_v2.c      |  206 -
 .../register-lane-nextseq/plugin.properties   |   12 -
 .../register-lane-nextseq.py                  |  398 -
 .../register-macs/plugin.properties           |   11 -
 .../drop-boxes/register-macs/register-macs.py |   22 -
 .../register-runstatistics/plugin.properties  |   11 -
 .../register-runstatistics.py                 |   73 -
 .../register-thumbnails/plugin.properties     |   12 -
 .../register-thumbnails.py                    |   55 -
 .../plugin.properties                         |   11 -
 .../register-unaligned-miseq.py               |  176 -
 .../register-unaligned/plugin.properties      |   11 -
 .../register-unaligned/register-unaligned.py  |  195 -
 .../register-undetermined/plugin.properties   |   11 -
 .../register-undetermined.py                  |   63 -
 .../plugin.properties                         |   11 -
 .../register-aggregated-basecall-stats.py     |   72 -
 .../setInvoiceSent/plugin.properties          |    3 -
 .../setInvoiceSent/script.py                  |   65 -
 .../plugin.properties                         |    3 -
 .../triggerCreateSampleSheet/script.py        |   44 -
 .../triggerInvoice/plugin.properties          |    3 -
 .../triggerInvoice/script.py                  |   75 -
 .../triggerbee/lib/jyson-1.0.2.jar            |  Bin 7805 -> 0 bytes
 .../triggerbee/plugin.properties              |    3 -
 .../reporting-plugins/triggerbee/script.py    |  194 -
 .../triggergc3pie/plugin.properties           |    3 -
 .../reporting-plugins/triggergc3pie/script.py |  201 -
 .../illumina-qgf/1/jython-lib/gfb_utils.py    |  120 -
 .../create-flowcell/create-flowcell.py        |  312 -
 .../create-flowcell/plugin.properties         |    9 -
 .../plugin.properties                         |    6 -
 .../read-demultiplex-stats-miseq-hiseq.py     |  366 -
 .../read_demultiplex_stats_miseq_hiseq.java   |  736 --
 .../plugin.properties                         |   10 -
 .../read-demultiplex-stats-nextseq.py         |  353 -
 .../read_demultiplex_stats.java               |  727 --
 .../read_demultiplex_statsTest.java           |   64 -
 .../start_read_demultiplex_stats.java         |   21 -
 .../drop-boxes/read-json/plugin.properties    |    6 -
 .../2/dss/drop-boxes/read-json/read-json.py   |   96 -
 .../read-rta-timestamp/plugin.properties      |   12 -
 .../read-rta-timestamp/read-rta-timestamp.py  |   67 -
 .../register-fastqc/plugin.properties         |    6 -
 .../register-fastqc/register-fastqc.py        |   54 -
 .../register-flowcell/plugin.properties       |    6 -
 .../register-flowcell/register-flowcell.py    |  107 -
 .../drop-boxes/register-flowlane/lib/a.out    |  Bin 13120 -> 0 bytes
 .../drop-boxes/register-flowlane/lib/crc32    |  Bin 10567 -> 0 bytes
 .../drop-boxes/register-flowlane/lib/crc32.sv |  Bin 10567 -> 0 bytes
 .../register-flowlane/lib/crc32_v2.c          |  206 -
 .../register-flowlane/plugin.properties       |    6 -
 .../register-flowlane/register-flowlane.py    |  477 --
 .../register-undetermined/plugin.properties   |    6 -
 .../register-undetermined.py                  |   51 -
 .../plugin.properties                         |    6 -
 .../register-demuliplex-stats.py              |   78 -
 .../v2_register-trimming/plugin.properties    |    6 -
 .../v2_register-trimming/register-trimming.py |   50 -
 .../illumina-qgf/2/jython-lib/gfb_utils.py    |  123 -
 .../bsse/cisd/dsu/DependencyCheckingTest.java |   25 -
 .../dsu/dss/DataSetInfoExtractorTest.java     |  112 -
 .../bsse/cisd/dsu/dss/FlowLaneFeederTest.java |  735 --
 .../ethz/bsse/cisd/dsu/dss/plugins/.gitignore |    1 -
 .../dsu/dss/plugins/DataSetToSOFTTest.java    |  277 -
 .../plugins/IlluminaSummaryXMLLoaderTest.java |  200 -
 .../dss/systemtests/DSUDropboxSystemTest.java |   73 -
 .../dsu/dss/systemtests/DSUSystemTest.java    |   37 -
 .../dss/systemtests/DSUTestInitializer.java   |   72 -
 .../dsu/dss/systemtests/DemoDropboxTest.java  |   64 -
 .../main/FileBasedTrackingDAOTest.java        |  212 -
 .../sourceTest/java/tests.xml                 |   14 -
 .../tracking/dist/etc/email-template.txt      |   10 -
 .../tracking/dist/etc/log.xml                 |   56 -
 .../tracking/dist/etc/service.properties      |   57 -
 .../tracking/dist/etc/tracking-local-database |    2 -
 .../dist/etc/tracking-sample-database         | 2511 ------
 .../tracking/dist/tracking.sh                 |   29 -
 .../tracking/etc/email-template.txt           |   26 -
 deep_sequencing_unit/tracking/etc/log.xml     |   19 -
 .../tracking/etc/openBIS.keystore             |  Bin 98036 -> 0 bytes
 .../tracking/etc/service.properties           |   21 -
 .../tracking/etc/tracking-local-database      |    2 -
 .../tracking/etc/tracking-sample-database     |    1 -
 gradle/build.gradle                           |    1 -
 gradle/settings.gradle                        |    2 +-
 installation/build.gradle                     |    1 -
 installation/settings.gradle                  |    4 +-
 js-test/settings.gradle                       |    2 +-
 openbis_all/build/build.xml                   |    7 -
 openbis_all/source/bash/build/branch.sh       |    1 -
 openbis_contrib/.classpath                    |   20 -
 openbis_contrib/.project                      |   17 -
 .../.settings/org.eclipse.jdt.core.prefs      |   12 -
 openbis_contrib/build/build.xml               |   72 -
 openbis_contrib/dist/.gitignore               |    0
 openbis_contrib/etc/log.xml                   |   19 -
 openbis_contrib/etc/service.properties        |   22 -
 openbis_contrib/properties/dist/properties.sh |   27 -
 .../ControlledVocabulariesDTO.java            |   36 -
 .../DataSetPropertyAssignmentsDTO.java        |   50 -
 .../DbDataTypeComparison.java                 |  172 -
 .../DbDataTypeComparisonQueryDAO.java         |   71 -
 .../ExperimentPropertyAssignmentsDTO.java     |   50 -
 .../MaterialPropertyAssignmentDTO.java        |   50 -
 .../PropertyTypeAndDataTypeDTO.java           |   68 -
 .../SamplePropertyAssignmentsDTO.java         |   49 -
 .../TermsOfControlledVocabulariesDTO.java     |   50 -
 .../bsse/cisd/dsu/properties/GenomeMap.java   |   84 -
 .../dsu/properties/GetSampleProperties.java   |  454 --
 .../categoryoracle/CategoryOracle.java        |   84 -
 .../FeatureVectorConverter.java               |   69 -
 .../cisd/dynamix/categoryoracle/Features.java |  176 -
 .../cisd/dynamix/categoryoracle/InputRow.java |   75 -
 .../categoryoracle/InputRowFactory.java       |   33 -
 .../categoryoracle/InputRowsHelper.java       |   76 -
 .../InputRowsNamedCollection.java             |   50 -
 .../dynamix/categoryoracle/OutputRow.java     |   81 -
 .../dynamix/categoryoracle/TsvBuilder.java    |   62 -
 openbis_contrib/source/java/log.xml           |   19 -
 openbis_contrib/source/java/log4j.properties  |   11 -
 openbis_standard_technologies/build.gradle    |    5 +-
 openbis_standard_technologies/settings.gradle |    2 +-
 ui-test/settings.gradle                       |    2 +-
 554 files changed, 7 insertions(+), 114002 deletions(-)
 delete mode 100644 deep_sequencing_unit/.gitignore
 delete mode 100644 deep_sequencing_unit/.pydevproject
 delete mode 100644 deep_sequencing_unit/.shadow_dependencies
 delete mode 100644 deep_sequencing_unit/HOW_TO_FIX_FAILING_CI_BUILD.txt
 delete mode 100644 deep_sequencing_unit/build.gradle
 delete mode 100644 deep_sequencing_unit/createInvoices/dist/createInvoices.sh
 delete mode 100644 deep_sequencing_unit/createInvoices/dist/etc/service.properties
 delete mode 100644 deep_sequencing_unit/createInvoices/dist/log/.gitignore
 delete mode 100755 deep_sequencing_unit/createsamplesheet/dist/createSampleSheet.sh
 delete mode 100644 deep_sequencing_unit/createsamplesheet/dist/createSampleSheet_nov.sh
 delete mode 100644 deep_sequencing_unit/createsamplesheet/dist/etc/createSampleSheet.properties
 delete mode 100644 deep_sequencing_unit/createsamplesheet/dist/etc/createSampleSheet_nov.properties
 delete mode 100644 deep_sequencing_unit/createsamplesheet/dist/etc/openBIS.keystore
 delete mode 100644 deep_sequencing_unit/createsamplesheet/dist/log/.gitignore
 delete mode 100755 deep_sequencing_unit/dist/etc/data-set-handler-alignment.py
 delete mode 100755 deep_sequencing_unit/dist/etc/data-set-handler-basecall-stats.py
 delete mode 100755 deep_sequencing_unit/dist/etc/data-set-handler-bigwig.py
 delete mode 100755 deep_sequencing_unit/dist/etc/data-set-handler-cell.py
 delete mode 100755 deep_sequencing_unit/dist/etc/data-set-handler-create-flow-cell.py
 delete mode 100755 deep_sequencing_unit/dist/etc/data-set-handler-demultiplex-stats.py
 delete mode 100755 deep_sequencing_unit/dist/etc/data-set-handler-lane.py
 delete mode 100755 deep_sequencing_unit/dist/etc/data-set-handler-pdf.py
 delete mode 100755 deep_sequencing_unit/dist/etc/data-set-handler-unaligned.py
 delete mode 100644 deep_sequencing_unit/dist/etc/data-set-handler_fastqc.py
 delete mode 100755 deep_sequencing_unit/dist/etc/data-set-handler_runinfostatistics.py
 delete mode 100644 deep_sequencing_unit/dist/etc/data-set-handler_takeRTA_timestamp.py
 delete mode 100644 deep_sequencing_unit/dist/etc/log.xml
 delete mode 100644 deep_sequencing_unit/dist/etc/passwd
 delete mode 100644 deep_sequencing_unit/dist/etc/service.properties
 delete mode 100644 deep_sequencing_unit/etc/log.xml
 delete mode 100644 deep_sequencing_unit/etc/service.properties
 delete mode 100644 deep_sequencing_unit/etc/web-client.properties
 delete mode 100644 deep_sequencing_unit/gradle/wrapper/gradle-wrapper.jar
 delete mode 100644 deep_sequencing_unit/gradle/wrapper/gradle-wrapper.properties
 delete mode 100755 deep_sequencing_unit/gradlew
 delete mode 100644 deep_sequencing_unit/gradlew.bat
 delete mode 100644 deep_sequencing_unit/metadata/etc/log.xml
 delete mode 100644 deep_sequencing_unit/metadata/etc/openBIS.keystore
 delete mode 100644 deep_sequencing_unit/metadata/etc/service.properties
 delete mode 100644 deep_sequencing_unit/resource/DSU TrackingClient.launch
 delete mode 100644 deep_sequencing_unit/resource/dependency-structure.ddf
 delete mode 100644 deep_sequencing_unit/resource/dsu-master-data.py
 delete mode 100644 deep_sequencing_unit/resource/eclipse/DSU Data Store Server.launch
 delete mode 100644 deep_sequencing_unit/resource/property_types_for_admin_console.txt
 delete mode 100644 deep_sequencing_unit/resource/test-data/DemoDropboxTest/demo-data/demo-file-1
 delete mode 100644 deep_sequencing_unit/resource/test-data/DemoDropboxTest/demo-data/demo-file-2
 delete mode 100644 deep_sequencing_unit/resource/test-data/QGFCreateFlowCellHiseqTest/141212_D00535_0037_AC5UMNANXX/RunInfo.xml
 delete mode 100644 deep_sequencing_unit/resource/test-data/QGFCreateFlowCellHiseqTest/141212_D00535_0038_BC6A12ANXX/RunInfo.xml
 delete mode 100644 deep_sequencing_unit/resource/test-data/QGFCreateFlowCellHiseqTest/141212_D00535_0038_BC6A12ANXX/runParameters.xml
 delete mode 100644 deep_sequencing_unit/resource/test-data/QGFCreateFlowCellHiseqTest/141212_D00535_0038_BC6A12ANXX_NonmatchingFolderName/RunInfo.xml
 delete mode 100644 deep_sequencing_unit/resource/test-data/QGFCreateFlowCellHiseqTest/141212_D00535_0038_BC6A12ANXX_NonmatchingFolderName/runParameters.xml
 delete mode 100644 deep_sequencing_unit/resource/test-data/QGFCreateFlowcellNextseqTest/141212_NS500318_0033_AH16YMBGXX/RunInfo.xml
 delete mode 100644 deep_sequencing_unit/resource/test-data/QGFCreateFlowcellNextseqTest/141212_NS500318_0033_AH16YMBGXX/RunParameters.xml
 delete mode 100644 deep_sequencing_unit/resource/test-data/QGFReadRtaTimestampTest/141204_D00535_0035_BC5LPVANXX/RTAComplete.txt
 delete mode 100644 deep_sequencing_unit/resource/test-db/.gitignore
 delete mode 100644 deep_sequencing_unit/settings.gradle
 delete mode 100755 deep_sequencing_unit/source/BDS/analysis_bcl2fastq.bds
 delete mode 100644 deep_sequencing_unit/source/Jython/barcodeComplexityChecker.py
 delete mode 100644 deep_sequencing_unit/source/Jython/createInvoices_Illumina_NGS.py
 delete mode 100644 deep_sequencing_unit/source/Jython/createSampleSheet.py
 delete mode 100644 deep_sequencing_unit/source/Jython/createSampleSheetTest.py
 delete mode 100644 deep_sequencing_unit/source/Jython/createSampleSheet_Illumina_NGS.py
 delete mode 100644 deep_sequencing_unit/source/Jython/createSampleSheet_Illumina_NGS_Test.py
 delete mode 100644 deep_sequencing_unit/source/Jython/createSampleSheet_bcl2fastq.py
 delete mode 100755 deep_sequencing_unit/source/Jython/createSampleSheet_bcl2fastq.sh
 delete mode 100644 deep_sequencing_unit/source/Jython/createSampleSheet_bcl2fastq_Test.py
 delete mode 100644 deep_sequencing_unit/source/Jython/createSampleSheet_miseq.py
 delete mode 100644 deep_sequencing_unit/source/Jython/createSampleSheet_nextseq.py
 delete mode 100644 deep_sequencing_unit/source/Jython/createSampleSheet_nov.py
 delete mode 100644 deep_sequencing_unit/source/Jython/create_QGF_Invoices.py
 delete mode 100755 deep_sequencing_unit/source/Jython/create_QGF_Invoices.sh
 delete mode 100644 deep_sequencing_unit/source/Jython/create_QGF_Invoices_simplified.py
 delete mode 100644 deep_sequencing_unit/source/Jython/duplicateBarcodeChecker.py
 delete mode 100644 deep_sequencing_unit/source/Python/bam2wig.py
 delete mode 100644 deep_sequencing_unit/source/Python/calculateCRC32.py
 delete mode 100644 deep_sequencing_unit/source/Python/concatenatePdfs.py
 delete mode 100755 deep_sequencing_unit/source/Python/fastq_quality.py
 delete mode 100755 deep_sequencing_unit/source/Python/fastqc_plots.py
 delete mode 100644 deep_sequencing_unit/source/Python/filterOnQualityForFastqGzip.py
 delete mode 100644 deep_sequencing_unit/source/Python/filter_on_quality_for_gzip.py
 delete mode 100644 deep_sequencing_unit/source/Python/rename_file.py
 delete mode 100644 deep_sequencing_unit/source/Python/solexaQa.py
 delete mode 100644 deep_sequencing_unit/source/R/CreatePerCycleReadQuality.R
 delete mode 100644 deep_sequencing_unit/source/R/barcodeDistribution.R
 delete mode 100644 deep_sequencing_unit/source/R/createQaReport.R
 delete mode 100644 deep_sequencing_unit/source/R/fastq_quality.R
 delete mode 100644 deep_sequencing_unit/source/R/nucleotidesPerCycle.R
 delete mode 100644 deep_sequencing_unit/source/R/numberOfOccurrences.R
 delete mode 100644 deep_sequencing_unit/source/SQL/DBM_postgres_trigger.sql
 delete mode 100644 deep_sequencing_unit/source/bash/CreatePerCycleReadQuality.sh
 delete mode 100755 deep_sequencing_unit/source/bash/RTA_check_on_missing_images.sh
 delete mode 100755 deep_sequencing_unit/source/bash/add_p.sh
 delete mode 100755 deep_sequencing_unit/source/bash/check_on_missing_images.sh
 delete mode 100644 deep_sequencing_unit/source/bash/check_read_numbers.sh
 delete mode 100755 deep_sequencing_unit/source/bash/cif2txt.sh
 delete mode 100755 deep_sequencing_unit/source/bash/convert_template.sh
 delete mode 100644 deep_sequencing_unit/source/bash/createQaReport.sh
 delete mode 100644 deep_sequencing_unit/source/bash/create_srfs.sh
 delete mode 100755 deep_sequencing_unit/source/bash/createmd5sums
 delete mode 100644 deep_sequencing_unit/source/bash/datamover_post.sh
 delete mode 100755 deep_sequencing_unit/source/bash/do-sync.sh
 delete mode 100755 deep_sequencing_unit/source/bash/ellac_create_srfs.sh
 delete mode 100755 deep_sequencing_unit/source/bash/goat_with_missing_tiles.sh
 delete mode 100755 deep_sequencing_unit/source/bash/illumina2srf-pre1.3
 delete mode 100755 deep_sequencing_unit/source/bash/lanes2srf
 delete mode 100755 deep_sequencing_unit/source/bash/lanes2srf-pre1.3
 delete mode 100755 deep_sequencing_unit/source/bash/lanes2srf_RTA
 delete mode 100755 deep_sequencing_unit/source/bash/rm_p.sh
 delete mode 100644 deep_sequencing_unit/source/core-plugins/core-plugins.properties
 delete mode 100644 deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/body-style.css
 delete mode 100644 deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/button.css
 delete mode 100755 deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/d3.js
 delete mode 100755 deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/d3.layout.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/d3.time.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/images/openBIS_Logo.svg
 delete mode 100644 deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/images/sprite.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/index.html
 delete mode 100644 deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/openbis-dsu-downloader.html
 delete mode 100644 deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/openbis-dsu.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/tree.css
 delete mode 100644 deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/plugin.properties
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/as/initialize-master-data.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/data-sources/.gitignore
 delete mode 100755 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-dropbox/create-flowcell-dropbox.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-dropbox/plugin.properties
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-hiseq/create-flowcell-hiseq.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-hiseq/plugin.properties
 delete mode 100755 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-miseq/create-flow-cell-miseq.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-miseq/plugin.properties
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/read-demultiplex-stats/plugin.properties
 delete mode 100755 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/read-demultiplex-stats/read-demultiplex-stats.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/read-rta-timestamp/plugin.properties
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/read-rta-timestamp/read-rta-timestamp.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-basecall-stats/plugin.properties
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-basecall-stats/register-basecall-stats.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-bigwig/plugin.properties
 delete mode 100755 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-bigwig/register-bigwig.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-bowtie/plugin.properties
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-bowtie/register-bowtie.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-fastqc/plugin.properties
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-fastqc/register-fastqc.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-dropbox/plugin.properties
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-dropbox/register-flowcell-dropbox.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-hiseq/plugin.properties
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-hiseq/register-flowcell-hiseq.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-miseq/plugin.properties
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-miseq/register-flowcell-miseq.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-lane-hiseq/plugin.properties
 delete mode 100755 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-lane-hiseq/register-lane-hiseq.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-lane-miseq/plugin.properties
 delete mode 100755 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-lane-miseq/register-lane-miseq.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-macs/plugin.properties
 delete mode 100755 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-macs/register-macs.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-runstatistics/plugin.properties
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-runstatistics/register-runstatistics.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-thumbnails/plugin.properties
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-thumbnails/register-thumbnails.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-unaligned/plugin.properties
 delete mode 100755 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-unaligned/register-unaligned.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/maintenance-tasks/.gitignore
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/reporting-plugins/.gitignore
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/services/.gitignore
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/2/as/initialize-master-data.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/data-sources/.gitignore
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/create-flowcell-hiseq/create-flowcell-hiseq.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/create-flowcell-hiseq/plugin.properties
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/read-rta-timestamp/plugin.properties
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/read-rta-timestamp/read-rta-timestamp.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-basecall-stats/plugin.properties
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-basecall-stats/register-basecall-stats.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-flowcell/plugin.properties
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-flowcell/register-flowcell-hiseq.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-lane-hiseq/plugin.properties
 delete mode 100755 deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-lane-hiseq/register-lane-hiseq.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-runstatistics/plugin.properties
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-runstatistics/register-runstatistics.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-unaligned/plugin.properties
 delete mode 100755 deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-unaligned/register-unaligned.py
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/maintenance-tasks/.gitignore
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/reporting-plugins/.gitignore
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/services/.gitignore
 delete mode 100644 deep_sequencing_unit/source/core-plugins/illumina-ngs/package-to-dist
 delete mode 100644 deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/cellStatistics/html/index.html
 delete mode 100644 deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/cellStatistics/html/style.css
 delete mode 100644 deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/cellStatistics/plugin.properties
 delete mode 100644 deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/d3.layout.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/d3.v3.min.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/index.html
 delete mode 100644 deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/openbis-dsu.js
 delete mode 100755 deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/pie.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/style.css
 delete mode 100644 deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/plugin.properties
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/css/bootstrap-responsive.css
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/css/bootstrap.css
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/css/docs.css
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/css/openbis.css
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/ico/apple-touch-icon-114-precomposed.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/ico/apple-touch-icon-144-precomposed.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/ico/apple-touch-icon-57-precomposed.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/ico/apple-touch-icon-72-precomposed.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/ico/favicon.ico
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/bird.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/bootstrap-mdo-sfmoma-01.jpg
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/bootstrap-mdo-sfmoma-02.jpg
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/bootstrap-mdo-sfmoma-03.jpg
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/browsers.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/example-sites/fleetio.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/example-sites/jshint.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/example-sites/kippt.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/example-sites/soundready.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/examples/bootstrap-example-fluid.jpg
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/examples/bootstrap-example-hero.jpg
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/examples/bootstrap-example-starter.jpg
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/github-16px.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons-halflings-white.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons-halflings.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_009_magic.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_042_group.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_079_podium.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_082_roundabout.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_155_show_thumbnails.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_163_iphone.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_214_resize_small.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_266_book_open.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/grid-18px-masked.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/icon-css3.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/icon-github.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/icon-html5.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/icon-twitter.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/less-logo-large.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/less-small.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/responsive-illustrations.png
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/README.md
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/application.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-alert.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-button.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-carousel.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-collapse.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-dropdown.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-modal.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-popover.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-scrollspy.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-tab.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-tooltip.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-transition.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-typeahead.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap.min.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/d3/d3.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/d3/d3.layout.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/d3/d3.time.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/dagre/dagre.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/dagre/dagre.min.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/google-code-prettify/prettify.css
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/google-code-prettify/prettify.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/index.html
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/webapp.js
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/plugin.properties
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/dss/reporting-plugins/sample-bottom-up-data/plugin.properties
 delete mode 100644 deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/dss/reporting-plugins/sample-bottom-up-data/sample-bottom-up.py
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/DataSetInfoExtractor.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/FlowLaneDataSetInfoExtractor.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/FlowLaneFeeder.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/StorageProcessor.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/ChipResultsSummary.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/ChipSummary.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/DataSetToSOFT.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/Date.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummary.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummaryReportingPlugin.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/Lane.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/LaneResultsSummary.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/Read.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/doubleStats.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/stats.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/metadata/DbAccess.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/metadata/Parameters.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/metadata/create_metadata.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/dto/TrackedEntities.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/dto/TrackingStateDTO.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/Email.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EmailWithSummary.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailData.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailDataManager.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailGenerator.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/IEntityTrackingEmailGenerator.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/FileBasedTrackingDAO.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/ITrackingDAO.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/Parameters.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingBO.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingClient.java
 delete mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/utils/LogUtils.java
 delete mode 100644 deep_sequencing_unit/source/java/service.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/core-plugins.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/demo/1/dss/drop-boxes/demo-dropbox/demo-dropbox.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/demo/1/dss/drop-boxes/demo-dropbox/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/body-style.css
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/css/bootstrap-theme.css
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/css/bootstrap-theme.min.css
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/css/bootstrap.css
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/css/bootstrap.min.css
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/fonts/glyphicons-halflings-regular.eot
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/fonts/glyphicons-halflings-regular.svg
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/fonts/glyphicons-halflings-regular.ttf
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/fonts/glyphicons-halflings-regular.woff
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/js/bootstrap.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/js/bootstrap.min.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/button.css
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/d3.v2.min.js
 delete mode 100755 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/images/openBIS_Logo.svg
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/index.html
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/index.html.sv
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/index2.html
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/jquery-1.8.2.min.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis-action-deferrer.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis-dsu.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis-login.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis-request-cache.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis-screening.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/spin.min.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/bee/html/index.html
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/bee/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/cellStatistics/html/index.html
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/cellStatistics/html/style.css
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/cellStatistics/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap-theme.css
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap-theme.css.map
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap-theme.min.css
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap.css
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap.css.map
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap.min.css
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/fonts/glyphicons-halflings-regular.eot
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/fonts/glyphicons-halflings-regular.svg
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/fonts/glyphicons-halflings-regular.ttf
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/fonts/glyphicons-halflings-regular.woff
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/js/bootstrap.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/js/bootstrap.min.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrapvalidator/css/bootstrapValidator.min.css
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrapvalidator/js/bootstrapValidator.min.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/css/main.css
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/images/openBIS_Logo.svg
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/index.html
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/d3.v2.min.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/jquery-1.8.2.min.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/main.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis-action-deferrer.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis-dsu.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis-login.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis-request-cache.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis-screening.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/spin.min.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/body-style.css
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/button.css
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/d3.time.js
 delete mode 100755 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/images/openBIS_Logo.svg
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/images/sprite.png
 delete mode 120000 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/index.html
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/openbis-dsu-downloader.html
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/tree.css
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/invoicing/html/index.html
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/invoicing/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/laneStatistics/html/index.html
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/laneStatistics/html/style.css
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/laneStatistics/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/openbis-dsu.js
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/sampleSheet/html/body-style.css
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/sampleSheet/html/button.css
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/sampleSheet/html/index.html
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/sampleSheet/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-hiseq/create-flowcell-hiseq.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-hiseq/plugin.properties
 delete mode 100755 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-miseq/create-flow-cell-miseq.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-miseq/plugin.properties
 delete mode 100755 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-nextseq/create-flow-cell-nextseq.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-nextseq/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell/create-flowcell.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/export-meta-data/export-meta-data.py
 delete mode 100755 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/export-meta-data/lib/crc32
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/export-meta-data/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-miseq/plugin.properties
 delete mode 100755 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-miseq/read-demultiplex-stats-miseq.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-nextseq/plugin.properties
 delete mode 100755 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-nextseq/read-demultiplex-stats-nextseq.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-nextseq/read_demultiplex_stats.java
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-nextseq/read_demultiplex_statsTest.java
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-nextseq/start_read_demultiplex_stats.java
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats/plugin.properties
 delete mode 100755 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats/read-demultiplex-stats.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-rta-timestamp/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-rta-timestamp/read-rta-timestamp.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-basecall-stats/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-basecall-stats/register-basecall-stats.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bee/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bee/register-bee.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bigwig/plugin.properties
 delete mode 100755 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bigwig/register-bigwig.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bowtie/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bowtie/register-bowtie.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-cluster-alignment-java/lib/AlignmentJavaDataSetRegistrationDropboxV2.jar
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-cluster-alignment-java/lib/alignment.jar.sv
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-cluster-alignment-java/lib/alignment.jar.sv2
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-cluster-alignment-java/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-dummy/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-dummy/register-dummy.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-fastqc/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-fastqc/register-fastqc.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-hiseq/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-hiseq/register-flowcell-hiseq.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-miseq/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-miseq/register-flowcell-miseq.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-nextseq/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-nextseq/register-flowcell-nextseq.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell/register-flowcell.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowlane/lib/crc32_v2.c
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowlane/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowlane/register-flowlane.py
 delete mode 100755 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-hiseq/lib/crc32
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-hiseq/plugin.properties
 delete mode 100755 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-hiseq/register-lane-hiseq.py
 delete mode 100755 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-miseq/lib/crc32
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-miseq/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-miseq/register-lane-miseq.py
 delete mode 100755 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-nextseq/lib/crc32
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-nextseq/lib/crc32_v2.c
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-nextseq/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-nextseq/register-lane-nextseq.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-macs/plugin.properties
 delete mode 100755 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-macs/register-macs.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-runstatistics/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-runstatistics/register-runstatistics.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-thumbnails/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-thumbnails/register-thumbnails.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-unaligned-miseq/plugin.properties
 delete mode 100755 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-unaligned-miseq/register-unaligned-miseq.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-unaligned/plugin.properties
 delete mode 100755 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-unaligned/register-unaligned.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-undetermined/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-undetermined/register-undetermined.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register_aggregated-basecall-stats/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register_aggregated-basecall-stats/register-aggregated-basecall-stats.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/setInvoiceSent/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/setInvoiceSent/script.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerCreateSampleSheet/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerCreateSampleSheet/script.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerInvoice/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerInvoice/script.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerbee/lib/jyson-1.0.2.jar
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerbee/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerbee/script.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggergc3pie/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggergc3pie/script.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/jython-lib/gfb_utils.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/create-flowcell/create-flowcell.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/create-flowcell/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-miseq-hiseq/plugin.properties
 delete mode 100755 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-miseq-hiseq/read-demultiplex-stats-miseq-hiseq.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-miseq-hiseq/read_demultiplex_stats_miseq_hiseq.java
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-nextseq/plugin.properties
 delete mode 100755 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-nextseq/read-demultiplex-stats-nextseq.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-nextseq/read_demultiplex_stats.java
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-nextseq/read_demultiplex_statsTest.java
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-nextseq/start_read_demultiplex_stats.java
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-json/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-json/read-json.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-rta-timestamp/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-rta-timestamp/read-rta-timestamp.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-fastqc/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-fastqc/register-fastqc.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowcell/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowcell/register-flowcell.py
 delete mode 100755 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowlane/lib/a.out
 delete mode 100755 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowlane/lib/crc32
 delete mode 100755 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowlane/lib/crc32.sv
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowlane/lib/crc32_v2.c
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowlane/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowlane/register-flowlane.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-undetermined/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-undetermined/register-undetermined.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/v2_register-demuliplex-stats/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/v2_register-demuliplex-stats/register-demuliplex-stats.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/v2_register-trimming/plugin.properties
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/v2_register-trimming/register-trimming.py
 delete mode 100644 deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/jython-lib/gfb_utils.py
 delete mode 100644 deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/DependencyCheckingTest.java
 delete mode 100644 deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/DataSetInfoExtractorTest.java
 delete mode 100644 deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/FlowLaneFeederTest.java
 delete mode 100644 deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/plugins/.gitignore
 delete mode 100644 deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/plugins/DataSetToSOFTTest.java
 delete mode 100644 deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummaryXMLLoaderTest.java
 delete mode 100644 deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/systemtests/DSUDropboxSystemTest.java
 delete mode 100644 deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/systemtests/DSUSystemTest.java
 delete mode 100644 deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/systemtests/DSUTestInitializer.java
 delete mode 100644 deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/systemtests/DemoDropboxTest.java
 delete mode 100644 deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/tracking/main/FileBasedTrackingDAOTest.java
 delete mode 100644 deep_sequencing_unit/sourceTest/java/tests.xml
 delete mode 100644 deep_sequencing_unit/tracking/dist/etc/email-template.txt
 delete mode 100644 deep_sequencing_unit/tracking/dist/etc/log.xml
 delete mode 100644 deep_sequencing_unit/tracking/dist/etc/service.properties
 delete mode 100644 deep_sequencing_unit/tracking/dist/etc/tracking-local-database
 delete mode 100644 deep_sequencing_unit/tracking/dist/etc/tracking-sample-database
 delete mode 100755 deep_sequencing_unit/tracking/dist/tracking.sh
 delete mode 100644 deep_sequencing_unit/tracking/etc/email-template.txt
 delete mode 100644 deep_sequencing_unit/tracking/etc/log.xml
 delete mode 100644 deep_sequencing_unit/tracking/etc/openBIS.keystore
 delete mode 100644 deep_sequencing_unit/tracking/etc/service.properties
 delete mode 100644 deep_sequencing_unit/tracking/etc/tracking-local-database
 delete mode 100644 deep_sequencing_unit/tracking/etc/tracking-sample-database
 delete mode 100644 openbis_contrib/.classpath
 delete mode 100644 openbis_contrib/.project
 delete mode 100644 openbis_contrib/.settings/org.eclipse.jdt.core.prefs
 delete mode 100644 openbis_contrib/build/build.xml
 delete mode 100644 openbis_contrib/dist/.gitignore
 delete mode 100644 openbis_contrib/etc/log.xml
 delete mode 100644 openbis_contrib/etc/service.properties
 delete mode 100644 openbis_contrib/properties/dist/properties.sh
 delete mode 100644 openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/ControlledVocabulariesDTO.java
 delete mode 100644 openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/DataSetPropertyAssignmentsDTO.java
 delete mode 100644 openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/DbDataTypeComparison.java
 delete mode 100644 openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/DbDataTypeComparisonQueryDAO.java
 delete mode 100644 openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/ExperimentPropertyAssignmentsDTO.java
 delete mode 100644 openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/MaterialPropertyAssignmentDTO.java
 delete mode 100644 openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/PropertyTypeAndDataTypeDTO.java
 delete mode 100644 openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/SamplePropertyAssignmentsDTO.java
 delete mode 100644 openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/TermsOfControlledVocabulariesDTO.java
 delete mode 100644 openbis_contrib/source/java/ch/ethz/bsse/cisd/dsu/properties/GenomeMap.java
 delete mode 100644 openbis_contrib/source/java/ch/ethz/bsse/cisd/dsu/properties/GetSampleProperties.java
 delete mode 100644 openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/CategoryOracle.java
 delete mode 100644 openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/FeatureVectorConverter.java
 delete mode 100644 openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/Features.java
 delete mode 100644 openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/InputRow.java
 delete mode 100644 openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/InputRowFactory.java
 delete mode 100644 openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/InputRowsHelper.java
 delete mode 100644 openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/InputRowsNamedCollection.java
 delete mode 100644 openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/OutputRow.java
 delete mode 100644 openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/TsvBuilder.java
 delete mode 100644 openbis_contrib/source/java/log.xml
 delete mode 100644 openbis_contrib/source/java/log4j.properties

diff --git a/deep_sequencing_unit/.gitignore b/deep_sequencing_unit/.gitignore
deleted file mode 100644
index 12cf7890270..00000000000
--- a/deep_sequencing_unit/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-/.shredder
-/.settings
-/test-output
-/temp-testng-customsuite.xml
-/targets
-/bin
-/build
-/.idea/
-*.iml
-*.eml
\ No newline at end of file
diff --git a/deep_sequencing_unit/.pydevproject b/deep_sequencing_unit/.pydevproject
deleted file mode 100644
index a9cca037b33..00000000000
--- a/deep_sequencing_unit/.pydevproject
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?eclipse-pydev version="1.0"?>
-
-<pydev_project>
-<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
-<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property>
-</pydev_project>
diff --git a/deep_sequencing_unit/.shadow_dependencies b/deep_sequencing_unit/.shadow_dependencies
deleted file mode 100644
index d3dfcd195f7..00000000000
--- a/deep_sequencing_unit/.shadow_dependencies
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="lib" path="/libraries/openbis-apis"/>
-</classpath>
diff --git a/deep_sequencing_unit/HOW_TO_FIX_FAILING_CI_BUILD.txt b/deep_sequencing_unit/HOW_TO_FIX_FAILING_CI_BUILD.txt
deleted file mode 100644
index 94f6ee1dcdf..00000000000
--- a/deep_sequencing_unit/HOW_TO_FIX_FAILING_CI_BUILD.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-Problem:
-
-java.lang.IllegalArgumentException: No dump file found.
-        at ch.ethz.bsse.cisd.dsu.dss.systemtests.DSUTestInitializer.init(DSUTestInitializer.java:71)
-        at ch.ethz.bsse.cisd.dsu.dss.systemtests.DSUDropboxSystemTest.beforeSuite(DSUDropboxSystemTest.java:33)
-
-Solution:
-
-ssh jenkins (i.e. ci@bs-ci01.ethz.ch)
-cd ~/jenkins/workspace_fast/deep_sequencing_unit/resource/test-db
-ln -s ../../../../test-db/openbis_test_qgf.dmp openbis_test_qgf.dmp
-ls -la
-
-Problem:
-
-Caused by: ch.systemsx.cisd.common.exceptions.ConfigurationFailureException: Store root 'targets/playground/store' does not exist.
-        at ch.systemsx.cisd.common.exceptions.ConfigurationFailureException.fromTemplate(ConfigurationFailureException.java:49)
-        at ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.AbstractDatastorePlugin.<init>(AbstractDatastorePlugin.java:66)
-        at ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.AbstractDatastorePlugin.<init>(AbstractDatastorePlugin.java:58)
-
-Solution:
-
-ssh jenkins (i.e. ci@bs-ci01.ethz.ch)
-cd ~/jenkins/workspace_fast/deep_sequencing_unit/targets
-mkdir -p playground/store
diff --git a/deep_sequencing_unit/build.gradle b/deep_sequencing_unit/build.gradle
deleted file mode 100644
index 6133f7e7ada..00000000000
--- a/deep_sequencing_unit/build.gradle
+++ /dev/null
@@ -1,117 +0,0 @@
-evaluationDependsOn(':commonbase')
-evaluationDependsOn(':common')
-evaluationDependsOn(':openbis_api')
-evaluationDependsOn(':openbis-common')
-evaluationDependsOn(':authentication')
-evaluationDependsOn(':dbmigration')
-evaluationDependsOn(':openbis')
-evaluationDependsOn(':datastore_server')
-
-apply from: '../gradle/javaproject.gradle'
-
-archivesBaseName = 'datastore_server_plugin-dsu'
-
-configurations.create('trackingClient')
-configurations.create('trackingClientPartial')
-dependencies {
-    api project(':common'),
-            project(':openbis-common'),
-            project(':openbis_api'),
-            project(':openbis'),
-            project(':datastore_server'),
-            'apache:commons-cli:1.2'
-            
-
-    testImplementation project(path: ':commonbase', configuration: 'tests'),
-                       project(path: ':common', configuration: 'tests'),
-                       project(path: ':dbmigration', configuration: 'tests'),
-                       project(path: ':authentication', configuration: 'tests'),
-                       project(path: ':openbis_api', configuration: 'tests'),
-                       project(path: ':openbis-common', configuration: 'tests'),
-                       project(path: ':openbis', configuration: 'tests'),
-                       project(path: ':datastore_server', configuration: 'tests'),
-                       'fjelmer:classycle:1.4.2',
-                       'testng:testng:6.8-CISD'
-
-    trackingClient 'sis:sis-base:18.09.0',
-                    'javax:mail:1.4.3',
-                    'apache:log4j:1.2.15',
-                    'springframework:spring-aop:5.0.1.RELEASE',
-                    'springframework:spring-beans:5.0.1.RELEASE',
-                    'springframework:spring-context:5.0.1.RELEASE',
-                    'springframework:spring-core:5.0.1.RELEASE',
-                    'springframework:spring-web:5.0.1.RELEASE',
-                    'springframework:spring-webmvc:5.0.1.RELEASE',
-                    'springframework:spring-expression:5.0.1.RELEASE',
-                    'marathon:marathon-spring-util:1.2.5',
-                    'apache:httpclient:4.3.6',
-                    'apache:httpcore:4.3.3',
-                    'apache:commons-logging:1.2',
-                    'aopalliance:aopalliance:1.0',
-                    'apache:commons-cli:1.2'
-
-    trackingClientPartial 'google:gwt-user:2.4'
-}
-
-task trackingJar(type: Jar) {
-    archiveName "openbis-tracking-qgf-client.jar"
-
-    from zipTree(project(':common').jar.archivePath).plus(
-         zipTree(project(':openbis-common').jar.archivePath).plus(
-         zipTree(project(':commonbase').jar.archivePath).plus( 
-         zipTree(project(':openbis_api').jar.archivePath).plus( 
-         zipTree(project(':datastore_server').jar.archivePath).plus( 
-         zipTree(project(':openbis').jar.archivePath)))))).matching {
-            include '**/*.class'
-    }
-
-    from zipTree(configurations.trackingClientPartial.files.iterator().next()).matching {
-        include '**/com/google/gwt/user/client/rpc/IsSerializable.class'
-        include '**/com/google/gwt/user/client/rpc/SerializableException.class'
-    }
-    
-    from (sourceSets.main.output.classesDirs) {
-        include '**/*'
-    }    
-
-    manifest {
-        attributes 'Main-Class': 'ch.ethz.bsse.cisd.dsu.tracking.main.TrackingClient',
-                   "Class-Path": configurations.trackingClient.files.collect { it.getName() }.join(' ')
-    }
-}
-
-task trackingZip(type: Zip, dependsOn: [trackingJar]) {
-    baseName = "openbis-tracking-qgf-client"
-
-    from (trackingJar.archivePath) {
-        into "tracking-${project.version}/lib"
-    }
-
-    from (configurations.trackingClient.files) {
-        into "tracking-${project.version}/lib"
-    }
-    
-    from ('tracking/dist/etc') {
-        into "tracking-${project.version}/etc"
-    }
-
-    from ('tracking/dist/tracking.sh') {
-        into "tracking-${project.version}/"
-    }
-}
-
-task zip(type: Zip) {
-	includeEmptyDirs false
-    from (jar.archivePath) {
-	    into 'datastore_server/lib/'
-	    rename 'datastore_server_plugin-dsu(.*)\\.jar', 'datastore_server_plugin-dsu.jar'
-	}
-    
-    from (fileTree(dir: 'source/core-plugins', includes:['illumina-ngs/**'], excludes:['**/as/**', '**/package-to-dist'])) {
-		into 'core-plugins'    
-	}
-}
-
-zip.dependsOn jar
-build.dependsOn zip
-build.dependsOn trackingZip
\ No newline at end of file
diff --git a/deep_sequencing_unit/createInvoices/dist/createInvoices.sh b/deep_sequencing_unit/createInvoices/dist/createInvoices.sh
deleted file mode 100644
index 74d82376726..00000000000
--- a/deep_sequencing_unit/createInvoices/dist/createInvoices.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-LIB=/home/sbsuser/openbis/createInvoices/lib/
-CLASSPATH=/home/sbsuser/openbis/createInvoices/lib/
-cd $LIB/..
-java -cp $LIB/dom4j-1.6.1.jar:$LIB/geronimo-stax-api_1.0_spec-1.0.jar:$LIB/openbis-query-api.jar:$LIB/dss_client.jar:jython.jar:$LIB/stream-supporting-httpinvoker.jar:$LIB/spring.jar:commons-logging.jar:$LIB/commons-httpclient.jar:$LIB/commons-codec.jar:$LIB/commons-lang.jar:$LIB/log5j.jar:$LIB/poi.jar:$LIB/poi-ooxml.jar:$LIB/poi-ooxml-schemas.jar org.python.util.jython create_QGF_Invoices_simplified.py "$@"
\ No newline at end of file
diff --git a/deep_sequencing_unit/createInvoices/dist/etc/service.properties b/deep_sequencing_unit/createInvoices/dist/etc/service.properties
deleted file mode 100644
index 5ac20ddbe85..00000000000
--- a/deep_sequencing_unit/createInvoices/dist/etc/service.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-# Config file for QGF Invoicing
-[GENERAL]
-facilityName = Quantitative Genomics Facility
-facilityNameShort = QGF
-facilityInstitution = ETHZ_D-BSSE
-mailList = mail@myinstitute.ch
-mailFrom = invoicing@myinstitute.ch
-smptHost =  <smtpHost>
-separator = ,
-indexSeparator = -
-
-[OPENBIS]
-openbisServer = http://<openbisserver>:8080
-openbisUserName = <username>
-openbisPassword = <password> 
-connectionTimeout = 5000
-principalInvestigator = PRINCIPAL_INVESTIGATOR
-sampleCodePrefix = BSSE-QGF-
-
-[EXCEL]
-defaultFonts = Calibri
-
-jython-version=2.7
diff --git a/deep_sequencing_unit/createInvoices/dist/log/.gitignore b/deep_sequencing_unit/createInvoices/dist/log/.gitignore
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/deep_sequencing_unit/createsamplesheet/dist/createSampleSheet.sh b/deep_sequencing_unit/createsamplesheet/dist/createSampleSheet.sh
deleted file mode 100755
index 05c34e7514b..00000000000
--- a/deep_sequencing_unit/createsamplesheet/dist/createSampleSheet.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/bash
-#
-# Launch script for CISD openBIS Create Sample Sheet for Illumina NGS 
-# Runs on Unix / Linux systems.
-# -------------------------------------------------------------------------
-
-JYTHON_FILE=createSampleSheet.py
-
-#
-# change to installation directory
-#
-bin=$0
-if [ -L $bin ]; then
-  bin=`dirname $bin`/`readlink $bin`
-fi
-WD=`dirname $bin`
-cd $WD
-SCRIPT=./`basename $0`
-
-if [ "$JAVA_HOME" != "" ]; then
-  JAVA_BIN="$JAVA_HOME/bin/java"
-else
-  JAVA_BIN="java"
-fi
-
-ALL_JAVA_OPTS="-Djavax.net.ssl.trustStore=etc/openBIS.keystore $JAVA_OPTS"
-
-LIB="lib"
-# echo "Starting Sample Sheet Creator for openBIS Illumina NGS"
-${JAVA_BIN} ${ALL_JAVA_OPTS} -cp ${LIB}/commons-codec.jar:${LIB}/commons-httpclient.jar:${LIB}/commons-logging.jar:${LIB}/dss_client.jar:${LIB}/spring.jar:${LIB}/stream-supporting-httpinvoker.jar:${LIB}/jython.jar org.python.util.jython $JYTHON_FILE "$@"
diff --git a/deep_sequencing_unit/createsamplesheet/dist/createSampleSheet_nov.sh b/deep_sequencing_unit/createsamplesheet/dist/createSampleSheet_nov.sh
deleted file mode 100644
index d6046d92033..00000000000
--- a/deep_sequencing_unit/createsamplesheet/dist/createSampleSheet_nov.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/bash
-#
-# Launch script for CISD openBIS Create Sample Sheet for Illumina NGS 
-# Runs on Unix / Linux systems.
-# -------------------------------------------------------------------------
-
-JYTHON_FILE=createSampleSheet_nov.py
-
-#
-# change to installation directory
-#
-bin=$0
-if [ -L $bin ]; then
-  bin=`dirname $bin`/`readlink $bin`
-fi
-WD=`dirname $bin`
-cd $WD
-SCRIPT=./`basename $0`
-
-if [ "$JAVA_HOME" != "" ]; then
-  JAVA_BIN="$JAVA_HOME/bin/java"
-else
-  JAVA_BIN="java"
-fi
-
-ALL_JAVA_OPTS="-Djavax.net.ssl.trustStore=etc/openBIS.keystore $JAVA_OPTS"
-
-LIB="lib"
-# echo "Starting Sample Sheet Creator for openBIS Illumina NGS"
-${JAVA_BIN} ${ALL_JAVA_OPTS} -cp ${LIB}/commons-codec.jar:${LIB}/commons-httpclient.jar:${LIB}/commons-logging.jar:${LIB}/dss_client.jar:${LIB}/spring.jar:${LIB}/stream-supporting-httpinvoker.jar:${LIB}/jython.jar org.python.util.jython $JYTHON_FILE "$@"
\ No newline at end of file
diff --git a/deep_sequencing_unit/createsamplesheet/dist/etc/createSampleSheet.properties b/deep_sequencing_unit/createsamplesheet/dist/etc/createSampleSheet.properties
deleted file mode 100644
index 82e5adc3f18..00000000000
--- a/deep_sequencing_unit/createsamplesheet/dist/etc/createSampleSheet.properties
+++ /dev/null
@@ -1,55 +0,0 @@
-# Config file for Illumina Sample Sheet Creation 
-
-[GENERAL]
-facilityName = Quantitative Genomics Facility
-facilityNameShort = QGF
-facilityInstitution = ETHZ_D-BSSE
-mailList = mail@ethz.ch
-mailFrom = SampleSheetCreator@ethz.ch
-smptHost =  smtphost.ethz.ch
-SampleSheetFileName = SampleSheet
-separator = ,
-indexSeparator = -
-
-[OPENBIS]
-openbisServer = http://<openbis-server>:<port>
-openbisUserName = <username>
-openbisPassword = <password> 
-connectionTimeout = 5000
-illuminaFlowCellTypeName = ILLUMINA_FLOW_CELL
-index1Name = BARCODE
-index2Name = INDEX2
-index1Length = INDEXREAD 
-index2Length = INDEXREAD2
-endType = END_TYPE
-cycles = CYCLES_REQUESTED_BY_CUSTOMER
-controlLane = CONTROL_LANE
-ncbi = NCBI_ORGANISM_TAXONOMY
-externalSampleName = EXTERNAL_SAMPLE_NAME
-laneCount = LANECOUNT
-
-[ILLUMINA]
-hiSeqNames = SN792 SN100
-miSeqNames = M00721 M00100
-hiSeqHeader = FCID,Lane,SampleID,SampleRef,Index,Description,Control,Recipe,Operator,SampleProject
-
-miSeqHeaderSection = [Header], IEMFileVersion, Investigator Name, Project Name,Experiment Name, Date, Workflow, Application, Assay, Description, Chemistry
-miSeqReadsSection = [Reads]
-miSeqSettingsSection = [Settings], Adapter
-miSeqDataSection = [Data], Sample_ID Sample_Name Sample_Plate Sample_Well I7_Index_ID index Sample_Project Description
-
-miSeqWorkflow = GenerateFASTQ
-miSeqApplication = FASTQ Only
-miSeqChemistry = Amplicon
-
-truSeqAdapter = Adapter,AGATCGGAAGAGCACACGTC
-nexteraAdapter = Adapter,CTGTCTCTTATACACATCT
-iemFileVersion = 4
-
-configureBclToFastqPath = /usr/local/bin/configureBclToFastq.pl
-failedReads = --with-failed-reads
-clusterCount = --fastq-cluster-count 
-clusterCountNumber = 50000000
-outputDir = --output-dir
-sampleSheetName = --sample-sheet
-baseMask = --use-bases-mask
\ No newline at end of file
diff --git a/deep_sequencing_unit/createsamplesheet/dist/etc/createSampleSheet_nov.properties b/deep_sequencing_unit/createsamplesheet/dist/etc/createSampleSheet_nov.properties
deleted file mode 100644
index e8f710e8d66..00000000000
--- a/deep_sequencing_unit/createsamplesheet/dist/etc/createSampleSheet_nov.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-# Config file for Illumina Sample Sheet Creation 
-
-[GENERAL]
-facilityName = Novartis
-facilityNameShort = NOV
-facilityInstitution = Novartis_NIBR_NGS
-sampleSheetFileName = SampleSheet
-lanePrefix = S_
-
-separator = ,
-indexSeparator = -
-
-[OPENBIS]
-openbisServer = https://localhost:8443
-openbisUserName = admin
-openbisPassword = admin
-connectionTimeout = 5000
-
-illuminaFlowCellTypeName = FLOWCELL
-index1Name = INDEX_1
-index2Name = INDEX_2
-species = SPECIES
-sampleName = SAMPLE_NAME
-operator = OPERATOR
-endType = END_TYPE
-readLength = READ_LEN
-lengthIndex1 = LENGTH_OF_INDEX1
-lengthIndex2 = LENGTH_OF_INDEX2
-gaNumber = GA_NUMBER_L
-
-[ILLUMINA]
-hiSeqNames = SN792 SN100
-miSeqNames = M00721 M00100
-hiSeqHeader = FCID,Lane,SampleID,SampleRef,Index,Description,Control,Recipe,Operator,SampleProject
\ No newline at end of file
diff --git a/deep_sequencing_unit/createsamplesheet/dist/etc/openBIS.keystore b/deep_sequencing_unit/createsamplesheet/dist/etc/openBIS.keystore
deleted file mode 100644
index 28d6c1945533908c76f28785953cbed4004c4555..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 98036
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
GrT!mNl@~Jr

diff --git a/deep_sequencing_unit/createsamplesheet/dist/log/.gitignore b/deep_sequencing_unit/createsamplesheet/dist/log/.gitignore
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/deep_sequencing_unit/dist/etc/data-set-handler-alignment.py b/deep_sequencing_unit/dist/etc/data-set-handler-alignment.py
deleted file mode 100755
index 52530a1fef8..00000000000
--- a/deep_sequencing_unit/dist/etc/data-set-handler-alignment.py
+++ /dev/null
@@ -1,137 +0,0 @@
-'''
-This is handling bowtie-BAM files and extracts some properties from the BAM header and
-the samtools flagstat command. The results are formatted and attached  as a property
-to the openBIS DataSet.
-Prerequisites are the DataSetType: ALIGNMENT and
-the following properties assigned to the DataSetType mentioned above:
-ALIGNMENT_SOFTWARE, ISSUED_COMMAND, SAMTOOLS_FLAGSTAT,
-TOTAL_READS, MAPPED_READS
-
-Obviously you need a working samtools binary
-
-Uses 'flagstat' and 'view -H'
-
-Note: 
-print statements go to: ~openbis/sprint/datastore_server/log/startup_log.txt
-'''
-
-import os
-import fnmatch
-import re
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-FOLDER='/links/shared/dsu-dss/dss/incoming-jython-alignment/'
-SAMTOOLS='/usr/local/dsu/samtools/samtools'
-BAM_PATTERN='*.bam'
-
-matches = []
-searchStrings = ['@PG']
-programList = []
-
-# Create a "transaction" -- a way of grouping operations together so they all
-# happen or none of them do.
-transaction = service.transaction()
- 
-# Create a data set and set type
-dataSet = transaction.createNewDataSet("ALIGNMENT")
-dataSet.setMeasuredData(False)
-
-incomingPath = incoming.getAbsolutePath()
-
-# Get the incoming name 
-# expected: 
-# Project_110907_SN792_0059_AC012FACXX_3/Sample_BSSE-DSU-1662/BSSE-DSU-1662_CGATGTA_L003_R1_001_sorted.bam
-name = incoming.getName()
-split=name.split('_')
-if (len(split) == 6): 
-  incoming_sample=split[1]+ '_'+ split[2] + '_' + split[3] + '_' + split[4]+ ':' + split[-1]
-if (len(split) ==4):
-  incoming_sample=split[1]+ '_'+ split[2] + ':' + split[-1]
-
-
-# Looking for BAMS:
-for root, dirnames, filenames in os.walk(FOLDER + name):
-  for filename in fnmatch.filter(filenames, BAM_PATTERN):
-      matches.append(os.path.join(root, filename))
-
-# -----------------------------------------------------------------------------
-
-def listSearch (myList, searchString):
-  '''
-  Searches for a given String in a list.
-  Only lines matching  the start of a line a considerd as a match
-  '''
-  matches = []
-  for i in range (0, len(myList)):
-    if(re.match(searchString, myList[i])):
-      matches.append(myList[i])
-  return (matches)
-
-# -----------------------------------------------------------------------------
-
-def programParameters (programList):
-  '''
-  Extracts the aligner datils from the bam header
-  '''
-  elements = {}
-  for program in range(0, len(programList)):
-    line = programList[program].split('\t')
- 
-  for element in range (1, len(line)):
-    key, value = line[element].split(":")
-    elements[key] = value
-    
-  return elements  
-
-
-# Extract values from a samtools view and set the results as DataSet properties 
-# Command: samtools view -H ETHZ_BSSE_110429_63558AAXX_1_sorted.bam
-
-arguments = SAMTOOLS + ' view -H ' + matches[0]
-print('Arguments: '+ arguments)
-cmdResult=os.popen(arguments).read()
-
-properties=cmdResult.split("\n")
-for s in range (0, len(searchStrings)):
-  programList = listSearch (properties, searchStrings[s])
-print(programList)  
-
-e = programParameters (programList)  
-
-dataSet.setPropertyValue("ALIGNMENT_SOFTWARE", e['ID'])
-dataSet.setPropertyValue("VERSION", e['VN'])
-dataSet.setPropertyValue("ISSUED_COMMAND", e['CL'])
-
-
-arguments = SAMTOOLS + ' flagstat ' + matches[0]
-
-cmdResult=os.popen(arguments).read()
-totalReads=cmdResult.split('\n')[0].split(' ')[0]
-mappedReads=cmdResult.split('\n')[2].split(' ')[0]
-
-dataSet.setPropertyValue("SAMTOOLS_FLAGSTAT", cmdResult)
-dataSet.setPropertyValue("TOTAL_READS", totalReads)
-dataSet.setPropertyValue("MAPPED_READS", mappedReads)
- 
-# Add the incoming file into the data set
-transaction.moveFile(incomingPath, dataSet)
-
-# Get the search service
-search_service = transaction.getSearchService()
-
-# Search for the sample
-sc = SearchCriteria()
-sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, incoming_sample));
-foundSamples = search_service.searchForSamples(sc)
-
-if foundSamples.size() > 0:
-  dataSet.setSample(foundSamples[0])
-  
-  # Search for parent data set of the same sample
-  dataSetSc = SearchCriteria()
-  dataSetSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, 'FASTQ_GZ'))
-  dataSetSc.addSubCriteria(SearchSubCriteria.createSampleCriteria(sc))
-  foundDataSets = search_service.searchForDataSets(dataSetSc)
-  if foundDataSets.size() > 0:
-    dataSet.setParentDatasets([ds.getDataSetCode() for ds in foundDataSets])
diff --git a/deep_sequencing_unit/dist/etc/data-set-handler-basecall-stats.py b/deep_sequencing_unit/dist/etc/data-set-handler-basecall-stats.py
deleted file mode 100755
index b8f9fb4a97d..00000000000
--- a/deep_sequencing_unit/dist/etc/data-set-handler-basecall-stats.py
+++ /dev/null
@@ -1,53 +0,0 @@
-'''
-
-Note: 
-print statements go to: ~openbis/sprint/datastore_server/log/startup_log.txt
-'''
-
-import os
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-# Create a "transaction" -- a way of grouping operations together so they all
-# happen or none of them do.
-transaction = service.transaction()
-
-incomingPath = incoming.getAbsolutePath()
-folders=[]
-# no walk in Jython 2.2
-#for root, dirs, files in os.walk(folders):
-#  folders.append(root)
-folders=os.listdir(incomingPath)
-
-# Get the incoming name 
-name = incoming.getName()
-# expected incoming Name, e.g.: 110715_SN792_0054_BC035RACXX
-
-# Create a data set and set type
-dataSet = transaction.createNewDataSet("BASECALL_STATS")
-dataSet.setMeasuredData(False)
-
-#dataSet.setPropertyValue("MISMATCH_IN_INDEX", r)
-  
-# Get the search service
-search_service = transaction.getSearchService()
- 
-# Add the incoming file into the data set
-transaction.moveFile(incomingPath, dataSet)
-  
-# Search for the sample
-sc = SearchCriteria()
-sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, name))
-foundSamples = search_service.searchForSamples(sc)
-
-if foundSamples.size() > 0:
-  dataSet.setSample(foundSamples[0])
-
-  # Search for another data set of the same sample
-  dataSetSc = SearchCriteria()
-  dataSetSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, 'ILLUMINA_HISEQ_OUTPUT'))
-  dataSetSc.addSubCriteria(SearchSubCriteria.createSampleCriteria(sc))
-  foundDataSets = search_service.searchForDataSets(dataSetSc)
-  if foundDataSets.size() > 0:
-    dataSet.setParentDatasets([ds.getDataSetCode() for ds in foundDataSets])
-
diff --git a/deep_sequencing_unit/dist/etc/data-set-handler-bigwig.py b/deep_sequencing_unit/dist/etc/data-set-handler-bigwig.py
deleted file mode 100755
index f9d6e2ae98b..00000000000
--- a/deep_sequencing_unit/dist/etc/data-set-handler-bigwig.py
+++ /dev/null
@@ -1,124 +0,0 @@
-'''
-
-Note: 
-print statements go to: ~openbis/sprint/datastore_server/log/startup_log.txt
-'''
-
-import os
-import fnmatch
-import re
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-FOLDER='/links/shared/dsu-dss/dss/incoming-jython-bigwig/'
-BIGWIGINFO='/links/application/dsu/bigWig/bigWigInfo '
-BW_PATTERN='*.bw'
-
-matches = []
-
-# Create a "transaction" -- a way of grouping operations together so they all
-# happen or none of them do.
-transaction = service.transaction()
- 
-# Create a data set and set type
-dataSet = transaction.createNewDataSet("BIGWIGGLE")
-dataSet.setMeasuredData(False)
-
-incomingPath = incoming.getAbsolutePath()
-
-# Get the incoming name 
-# expected: 
-# Project_110907_SN792_0059_AC012FACXX_3/BSSE-DSU-1662_CGATGTA_L003_R1_001_sorted.bw
-name = incoming.getName()
-split=name.split('_')
-if (len(split) == 6): 
-  incoming_sample=split[1]+ '_'+ split[2] + '_' + split[3] + '_' + split[4]+ ':' + split[-1]
-if (len(split) ==4):
-  incoming_sample=split[1]+ '_'+ split[2] + ':' + split[-1]
-
-
-# Looking for BWs:
-for root, dirnames, filenames in os.walk(FOLDER + name):
-  for filename in fnmatch.filter(filenames, BW_PATTERN):
-      matches.append(os.path.join(root, filename))
-
-# -----------------------------------------------------------------------------
-
-def listSearch (myList, searchString):
-  '''
-  Searches for a given String in a list.
-  Only lines matching  the start of a line a considerd as a match
-  '''
-  matches = []
-  for i in range (0, len(myList)):
-    if(re.match(searchString, myList[i])):
-      matches.append(myList[i])
-  return (matches)
-
-# -----------------------------------------------------------------------------
-
-def translateBoolean (value):
-  if (value.lower() == 'yes') | (value.lower() =='y'):
-    return True
-  else:
-    return False
-
-def sanitizeInt (intNumber):
-   return intNumber.replace(',','')
-
-# -----------------------------------------------------------------------------
-
-def convertListToDict(prop):
-  d={}
-  for i in range(0,len(properties)-1):
-    lineSplit = prop[i].split(':')
-    d[lineSplit[0].strip()] = lineSplit[1].strip()
-  return(d)
-
-# -----------------------------------------------------------------------------
-
-# Extract values from a samtools view and set the results as DataSet properties 
-# Command: samtools view -H ETHZ_BSSE_110429_63558AAXX_1_sorted.bam
-
-arguments = BIGWIGINFO + matches[0]
-#print('Arguments: '+ arguments)
-cmdResult=os.popen(arguments).read()
-
-properties=cmdResult.split("\n")
-dictProp = convertListToDict(properties)
-#print(dictProp)
-
-dataSet.setPropertyValue("VERSION", dictProp['version'])
-dataSet.setPropertyValue("ISCOMPRESSED", str(translateBoolean(dictProp['isCompressed'])))
-dataSet.setPropertyValue("ISSWAPPED", dictProp['isSwapped'])
-dataSet.setPropertyValue("PRIMARYDATASIZE", sanitizeInt(dictProp['primaryDataSize']))
-dataSet.setPropertyValue("PRIMARYINDEXSIZE", sanitizeInt(dictProp['primaryIndexSize']))
-dataSet.setPropertyValue("ZOOMLEVELS", dictProp['zoomLevels'])
-dataSet.setPropertyValue("CHROMCOUNT", dictProp['chromCount'])
-dataSet.setPropertyValue("BASESCOVERED", sanitizeInt(dictProp['basesCovered']))
-dataSet.setPropertyValue("MEAN", dictProp['mean'])
-dataSet.setPropertyValue("MIN", dictProp['min'])
-dataSet.setPropertyValue("MAX", dictProp['max'])
-dataSet.setPropertyValue("STD", dictProp['std'])
-
-# Add the incoming file into the data set
-transaction.moveFile(incomingPath, dataSet)
-
-# Get the search service
-search_service = transaction.getSearchService()
-
-# Search for the sample
-sc = SearchCriteria()
-sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, incoming_sample));
-foundSamples = search_service.searchForSamples(sc)
-
-if foundSamples.size() > 0:
-  dataSet.setSample(foundSamples[0])
-  
-  # Search for parent data set of the same sample
-  dataSetSc = SearchCriteria()
-  dataSetSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, 'FASTQ_GZ'))
-  dataSetSc.addSubCriteria(SearchSubCriteria.createSampleCriteria(sc))
-  foundDataSets = search_service.searchForDataSets(dataSetSc)
-  if foundDataSets.size() > 0:
-    dataSet.setParentDatasets([ds.getDataSetCode() for ds in foundDataSets])
diff --git a/deep_sequencing_unit/dist/etc/data-set-handler-cell.py b/deep_sequencing_unit/dist/etc/data-set-handler-cell.py
deleted file mode 100755
index c2ceb47928b..00000000000
--- a/deep_sequencing_unit/dist/etc/data-set-handler-cell.py
+++ /dev/null
@@ -1,111 +0,0 @@
-'''
-expected incoming Name for HiSeq2000 runs: 110715_SN792_0054_BC035RACXX
-expected incoming Name for GAII runs: 110812_6353WAAXX
-
-Note: 
-print statements go to: ~openbis/sprint/datastore_server/log/startup_log.txt
-'''
-
-import os
-import shutil
-import glob
-import xml.etree.ElementTree as etree
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-IS_HISEQ_RUN=False
-RUNPARAMETERS = 'runParameters.xml'
-XML_ELEMENTS = {'FLOWCELL': 'Flowcell', 'RTAVERSION': 'RTAVersion',
-  'CONTROLLANE': 'ControlLane', 'SBS': 'Sbs', 'INDEX': 'Index'}
-
-RUNINFO_FOLDER='/links/shared/dsu-dss/dss/incoming-jython-runinfostatistics/'
-REGEX_RUNINFO_SAMPLE = '/Data/Status*'
-REGEX_RUNINFO_REPORTS = '/Data/reports'
-MARKER_STRING='.MARKER_is_finished_'
-
-
-def parseXml(xmlFile):
-  '''
-  Parses an XML file and returns the root leaf  
-  '''
-  tree = etree.parse(xmlFile)
-  root = tree.getroot()
-  return root
-
-
-def getXmlElement (elementName):
-  '''
-  Returns the text value of a given XML element
-  '''
-  for e in root.getchildren():
-    element = e.find(elementName)
-    if element is None:
-      return 'None'
-    else:
-      print(element.text)
-      return element.text
-
-def touch_markerfile(filename):
-  try:
-    # do a touch
-    open(filename, 'w').close()
-  except:
-    print('Could not touch ' + filename)
-
-
-# Create a "transaction" -- a way of grouping operations together so they all
-# happen or none of them do.
-transaction = service.transaction()
-
-incomingPath = incoming.getAbsolutePath()
-folders=[]
-folders=os.listdir(incomingPath)
-
-# Get the incoming name 
-name = incoming.getName()
-
-split=name.split("_")
-if (len(split) == 4):
-  dataSet = transaction.createNewDataSet("ILLUMINA_HISEQ_OUTPUT")
-  IS_HISEQ_RUN=True
-if (len(split) == 2):
-  dataSet = transaction.createNewDataSet("ILLUMINA_GA_OUTPUT")
-
-#move RunInfo into a different drop box
-runInfoSample=glob.glob(incomingPath + REGEX_RUNINFO_SAMPLE)
-runInfoReport=glob.glob(incomingPath + REGEX_RUNINFO_REPORTS)
-runInfoList = runInfoSample + runInfoReport
-os.makedirs(RUNINFO_FOLDER + name + '/Data/')
-for runInfo in runInfoList:
-  try:
-    if os.path.isdir(runInfo):
-      shutil.copytree(runInfo, RUNINFO_FOLDER + name + '/Data/' + os.path.basename(runInfo))
-    else:
-      shutil.copy2(runInfo, RUNINFO_FOLDER + name + '/Data/')
-  except (IOError, os.error), why:
-    print (runInfo, RUNINFO_FOLDER + name, str(why))
-
-touch_markerfile(RUNINFO_FOLDER+MARKER_STRING+name)
-
-# Create a data set and set type
-dataSet.setMeasuredData(False)
-  
-# Get the search service
-search_service = transaction.getSearchService()
- 
-# Search for the sample
-sc = SearchCriteria()
-sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, name));
-foundSamples = search_service.searchForSamples(sc)
-
-if foundSamples.size() > 0:
-  if IS_HISEQ_RUN:
-    sa = transaction.getSampleForUpdate(foundSamples[0].getSampleIdentifier())
-    root = parseXml(incomingPath + '/' + RUNPARAMETERS)
-#    sa.setPropertyValue("ILLUMINA_PIPELINE_VERSION", getXmlElement(XML_ELEMENTS['RTAVERSION']))
-#    sa.setPropertyValue("FLOWCELLTYPE", getXmlElement(XML_ELEMENTS['FLOWCELL']))
-#    sa.setPropertyValue("CONTROL_LANE", getXmlElement(XML_ELEMENTS['CONTROLLANE']))
-  
-  # Add the incoming file into the data set
-  transaction.moveFile(incomingPath, dataSet)
-  
-  dataSet.setSample(foundSamples[0])
diff --git a/deep_sequencing_unit/dist/etc/data-set-handler-create-flow-cell.py b/deep_sequencing_unit/dist/etc/data-set-handler-create-flow-cell.py
deleted file mode 100755
index e1017031690..00000000000
--- a/deep_sequencing_unit/dist/etc/data-set-handler-create-flow-cell.py
+++ /dev/null
@@ -1,165 +0,0 @@
-'''
-expected incoming Name for HiSeq2000 runs: 110715_SN792_0054_BC035RACXX
-expected incoming Name for GAII runs: 110812_6353WAAXX
-
-Note: 
-print statements go to: ~openbis/sprint/datastore_server/log/startup_log.txt
-'''
-
-import os
-import shutil
-from time import *
-from datetime import *
-import xml.etree.ElementTree as etree
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-IS_HISEQ_RUN=False
-RUNPARAMETERS = 'runParameters.xml'
-RUNINFO = 'RunInfo.xml'
-FLOWCELL_SPACE='/BSSE_FLOWCELLS/'
-FLOWCELL_PROJECT='FLOWCELLS/'
-EXPERIMENT_TYPE_CODE='HT_SEQUENCING'
-
-# Mapping between XML file naming and used in here
-RUNPARAMETERS_XML = {'FLOWCELL':'Flowcell', 'RTAVERSION':'RTAVersion',
-  'CONTROLLANE':'ControlLane', 'SBS':'Sbs', 'INDEX':'Index',
-  'CYCLES_REQUESTED_BY_CUSTOMER':'Read1', 'PE':'Pe'}
-RUNINFO_XML = {'LANECOUNT':'LaneCount', 'SURFACECOUNT':'SurfaceCount',
-   'SWATHCOUNT':'SwathCount', 'TILECOUNT':'TileCount'}
-INSTRUMENT = {'SN792':'RUA', 'BS-DSU-ELLAC':'ELLAC'}
-
-class parseXmlFile: 
-    
-  def __init__(self, xmlFile):
-    self.xmlFile = xmlFile
-    self.tree = etree.parse(self.xmlFile)
-    self.root = self.tree.getroot()
-
-  def getXmlElement (self, elementName):
-    '''
-    Returns the text value of a given XML element
-    '''
-    for e in self.root.getchildren():
-      element = e.find(elementName)
-      if element is None:
-	return 'None'
-      else:
-	return element.text
-
-  def getAllchildren (self, elementName):
-    '''
-    finds all children of a given XML Element and returns them as list
-    '''
-    for e in self.root.getchildren():
-      # the '//' means look recursively for all children not only direct ones
-      childList  = self.tree.findall('//' + elementName)
-    return childList 
-
-# -----------------------------------------------------------------------------
-
-def create_openbis_timestamp (): 
-  ''' 
-  Create an openBIS conform timestamp
-  '''
-  tz=localtime()[3]-gmtime()[3]
-  d=datetime.now()
-  return d.strftime("%Y-%m-%d %H:%M:%S GMT"+"%+.2d" % tz+":00")
-
-# -----------------------------------------------------------------------------
-
-# Create a "transaction" -- a way of grouping operations together so they all
-# happen or none of them do.
-transaction = service.transaction()
-
-incomingPath = incoming.getAbsolutePath()
-print(incomingPath)
-
-# Get the incoming name 
-name = incoming.getName()
-
-split=name.split("_")
-if (len(split) == 4):
-  IS_HISEQ_RUN=True
-if (len(split) == 2):
-  pass
-
-# Search for the sample and check if there is already sample with this name
-search_service = transaction.getSearchService()
-sc = SearchCriteria()
-sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, name));
-foundSamples = search_service.searchForSamples(sc)
-if foundSamples.size() > 0:
-  raise NameError('Already found a Flow Cell with the following name: '+ name)  
-
-# Parse the RunInfo.xml file
-runInfo = parseXmlFile(incomingPath + '/' + RUNINFO) 
-print(runInfo)
-
-# Create a new Flow Cell and set the experiment
-newFlowCell = transaction.createNewSample(FLOWCELL_SPACE + name, "ILLUMINA_FLOW_CELL")
-exp = transaction.getExperiment(FLOWCELL_SPACE + FLOWCELL_PROJECT + datetime.now().strftime("%Y.%m"))
-if exp == None:
-  exp = transaction.createNewExperiment(FLOWCELL_SPACE + FLOWCELL_PROJECT + datetime.now().strftime("%Y.%m"),
-             EXPERIMENT_TYPE_CODE)
-newFlowCell.setExperiment(exp)
- 
-if IS_HISEQ_RUN:
-  run = runInfo.getAllchildren('Run')[0].attrib
-  if (run['Id'] != name):
-    raise NameError('Flowcell names do not match between directory name '+ name +
-          ' and ' + RUNINFO + 'property file: ' + run['Id'])
-
-  # The HiSeq is providing more infos, which we will parse here:
-  runParameters = parseXmlFile(incomingPath + '/' + RUNPARAMETERS)
-  
-  newFlowCell.setPropertyValue("ILLUMINA_PIPELINE_VERSION", runParameters.getXmlElement(RUNPARAMETERS_XML['RTAVERSION']))
-  newFlowCell.setPropertyValue("FLOWCELLTYPE", runParameters.getXmlElement(RUNPARAMETERS_XML['FLOWCELL']))
-  newFlowCell.setPropertyValue("CONTROL_LANE", runParameters.getXmlElement(RUNPARAMETERS_XML['CONTROLLANE']))
-  newFlowCell.setPropertyValue("SBS_KIT", runParameters.getXmlElement(RUNPARAMETERS_XML['SBS']))
-  
-  read1 = runParameters.getAllchildren('Read1')
-  newFlowCell.setPropertyValue("CYCLES_REQUESTED_BY_CUSTOMER", read1[0].text)
-  
-  read2 = runParameters.getAllchildren('Read2')
-  if (str(read2[0].text) == '0'):
-    newFlowCell.setPropertyValue("END_TYPE", "SINGLE_READ") 
-  else:
-    newFlowCell.setPropertyValue("END_TYPE", "PAIRED_END") 
-    newFlowCell.setPropertyValue("PAIRED_END_KIT", runParameters.getXmlElement(RUNPARAMETERS_XML['PE']))
-  
-  indexRead1 = runParameters.getAllchildren('IndexRead1')
-  newFlowCell.setPropertyValue("INDEXREAD", indexRead1[0].text) 
-  
-  indexRead2 = runParameters.getAllchildren('IndexRead2')
-  newFlowCell.setPropertyValue("INDEXREAD2", indexRead2[0].text) 
-
-  def setFcProperty(searchId, dict):
-    children = runInfo.getAllchildren(searchId) 
-    for element in (dict):
-      if (element <> '') and (dict[element] <> ''):
-        newFlowCell.setPropertyValue(element, children[0].attrib[dict[element]])
-
-  setFcProperty('FlowcellLayout', RUNINFO_XML)
-
-
-sequencer = runInfo.getAllchildren('Instrument')
-newFlowCell.setPropertyValue("SEQUENCER", INSTRUMENT[sequencer[0].text])
-
-newFlowCell.setPropertyValue("FLOW_CELL_SEQUENCED_ON", create_openbis_timestamp())
-if IS_HISEQ_RUN:
-  maxLanes = runInfo.getAllchildren('FlowcellLayout')[0].attrib[RUNINFO_XML['LANECOUNT']]
-else:
-  maxLanes = len(runInfo.getAllchildren('Tiles')[0])
-
-# -----------------------------------------------------------------------------
-
-def registerFlowLane(a_lane):
-  '''
-  Registers a new Flow lane 
-  '''
-  newFlowLane = transaction.createNewSample(FLOWCELL_SPACE + name + ':' + str(a_lane), "ILLUMINA_FLOW_LANE")
-  newFlowLane.setContainer(newFlowCell)
-  
-[registerFlowLane(lane) for lane in range(1,int(maxLanes)+1)]
-
-shutil.rmtree(incomingPath)
diff --git a/deep_sequencing_unit/dist/etc/data-set-handler-demultiplex-stats.py b/deep_sequencing_unit/dist/etc/data-set-handler-demultiplex-stats.py
deleted file mode 100755
index 0781051f88e..00000000000
--- a/deep_sequencing_unit/dist/etc/data-set-handler-demultiplex-stats.py
+++ /dev/null
@@ -1,428 +0,0 @@
-'''
-  @copyright: 2012 ETH Zuerich, CISD
-  
-  @license: 
-  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.
-
-
-@author: Manuel Kohler
-
-XML Structur which is processed:
-
-<?xml version="1.0"?>
-<Summary>
-  <Lane index="8">
-    <Sample index="lane8">
-      <Barcode index="Undetermined">
-        <Tile index="1101">
-          <Read index="1">
-            <Raw>
-              <Yield>1921250</Yield>
-              <YieldQ30>949680</YieldQ30>
-              <ClusterCount>38425</ClusterCount>
-              <ClusterCount0MismatchBarcode>0</ClusterCount0MismatchBarcode>
-              <ClusterCount1MismatchBarcode>0</ClusterCount1MismatchBarcode>
-              <QualityScoreSum>40995660</QualityScoreSum>
-            </Raw>
-            <Pf>
-              <Yield>945450</Yield>
-              <YieldQ30>854815</YieldQ30>
-              <ClusterCount>18909</ClusterCount>
-              <ClusterCount0MismatchBarcode>0</ClusterCount0MismatchBarcode>
-              <ClusterCount1MismatchBarcode>0</ClusterCount1MismatchBarcode>
-              <QualityScoreSum>33815505</QualityScoreSum>
-            </Pf>
-          </Read>
-        </Tile>
-        [...]
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-'''
-
-import time
-import os
-import fnmatch
-import xml.etree.ElementTree as etree
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-
-class parseXmlFile:
-
-  def __init__(self, xmlFile):
-    self.xmlFile = xmlFile
-    self.tree = etree.parse(self.xmlFile)
-    self.root = self.tree.getroot()
-
-# -----------------------------------------------------------------------------
-
-class qcValues(object):
-  def __init__(self, Yield = 0, YieldQ30 = 0, ClusterCount = 0,
-               ClusterCount0MismatchBarcode = 0, ClusterCount1MismatchBarcode = 0,
-               QualityScoreSum = 0, *args, **kwargs):
-    self.Yield = Yield
-    self.YieldQ30 = YieldQ30
-    self.ClusterCount = ClusterCount 
-    self.ClusterCount0MismatchBarcode = ClusterCount0MismatchBarcode
-    self.ClusterCount1MismatchBarcode = ClusterCount1MismatchBarcode
-    self.QualityScoreSum = QualityScoreSum
-    
-  def __str__(self):
-        return "Yield: %s, YieldQ30: %s, ClusterCount: %s, ClusterCount0MismatchBarcode: %s," \
-          " CusterCount1MismatchBarcode: %s, QualityScoreSum: %s" \
-          % (self.Yield, self.YieldQ30, self.ClusterCount, self.ClusterCount0MismatchBarcode,
-          self.ClusterCount1MismatchBarcode, self.QualityScoreSum)    
-
-class sample:
-  def __init__(self, Lane = 0, Sample = '', Barcode = '', Tile = '', Read = '', rawqc = qcValues([]),
-                pfqc = qcValues([]), *args, **kwargs):
-    self.Lane = Lane
-    self.Sample = Sample
-    self.Barcode = Barcode
-    self.Tile = Tile
-    self.Read = Read
-    self.rawqc = rawqc
-    self.pfqc = pfqc
-    
-  def __str__(self):
-    return "Lane: %s, Sample: %s, Barcode: %s, Tile: %s, Read: %s, rawqc: %s, pfqc: %s" \
-      % (self.Lane, self.Sample, self.Barcode, self.Tile, self.Read, self.rawqc, self.pfqc)
-
-# -----------------------------------------------------------------------------
-
-class Statistics:
-  def __init__(self, lane = 0, sampleName = "", index1 = "NoIndex", index2 = "NoIndex", pfYieldSum = 0,
-                 rawYieldSum = 0, pfPercentage = 0.0, rawReadsSum = 0, pfReadsSum = 0,
-                 pfYieldQ30Sum = 0, qualityScoreSum = 0, rawPercentageReadsPerLane = 0.0,
-                 pfYieldQ30Percentage = 0.0, pfsumQualityScore = 0, pfmeanQualityScore = 0.0):
-      self.lane = lane
-      self.sampleName = sampleName
-      self.index1 = index1
-      self.index2 = index2
-      self.pfYieldSum = pfYieldSum
-      self.rawYieldSum = rawYieldSum
-      self.pfPercentage = pfPercentage
-      self.rawReadsSum = rawReadsSum
-      self.pfReadsSum = pfReadsSum
-      self.pfYieldQ30Sum = pfYieldQ30Sum
-      self.qualityScoreSum = qualityScoreSum
-      self.rawPercentageReadsPerLane = rawPercentageReadsPerLane
-      self.pfYieldQ30Percentage = pfYieldQ30Percentage
-      self.pfsumQualityScore = pfsumQualityScore
-      self.pfmeanQualityScore = pfmeanQualityScore
-      
-  def __str__(self):
-    return "lane: %s, sampleName: %s, index1: %s, index2: %s, pfYieldSum: %s, pfPercentage: %s," \
-           " rawReadsSum: %s, pfReadsSum: %s," \
-           " rawPercentageReadsPerLane: %s, pfYieldQ30Percentage: %s," \
-           " pfmeanQualityScore: %s" \
-        % (self.lane, self.sampleName, self.index1, self.index2, self.pfYieldSum, self.pfPercentage,
-           self.rawReadsSum, self.pfReadsSum,
-           self.rawPercentageReadsPerLane, self.pfYieldQ30Percentage, self.pfmeanQualityScore)
-         
-  def calculatePercentagePF (self, rawYield = 0, pfYield = 1):
-    try:
-      return round(float(pfYield) / float(rawYield) * 100, 2)
-    except:
-      return 0.0
-  
-  def calulateMeanQualityScore (self, pfqualityScoreSum = 0, pfYield = 1):
-    try:
-      return round (float(pfqualityScoreSum) / float(pfYield), 2)
-    except:
-      return 0.0
-    
-  def calculateYieldQ30Percentage (self, pfYieldQ30 = 0, pfYield = 1):
-    try:
-      return round (float(pfYieldQ30) / float(pfYield) * 100, 2)
-    except:
-      return 0.0
-
-# -----------------------------------------------------------------------------
-
-def xml2Memory(DEMULTIPLEX_XML):
-  '''
-  Parse the XML file and put all values in a memory structure:
-  List of: 
-  lane, sample, barcode, tile, read, qcRawList, qcPfList
-  '''
-
-  RAW_TAG = "Raw"
-  PF_TAG = "Pf"
-
-  sampleList = []
-  
-  xml = parseXmlFile(DEMULTIPLEX_XML)
-  r = xml.tree.getroot()
-
-  for lane in r.getchildren():
-    for mysample in lane:  
-      for barcode in mysample:       
-        for tile in barcode:
-          for read in tile:
-            
-            qcRaw = qcValues()
-            qcPf = qcValues()  
-            qcRawList = []
-            qcPfList = []
-
-            # Read out the Raw fields
-            raw = read.find(RAW_TAG) 
-            for child in raw.getchildren():
-              # equivalent to a Java reflection
-              setattr(qcRaw, child.tag, int(child.text))
-              
-            # Read out the Pf fields
-            pf = read.find(PF_TAG)
-            for child in pf.getchildren():
-              # equivalent to a Java reflection
-              setattr(qcPf, child.tag, int(child.text))
-
-            qcRawList.append(qcRaw)
-            qcPfList.append(qcPf)
-            
-            singleElement = sample ()
-            
-            setattr(singleElement, lane.tag, lane.attrib)
-            setattr(singleElement, mysample.tag, mysample.attrib)
-            setattr(singleElement, barcode.tag, barcode.attrib)
-            setattr(singleElement, tile.tag, tile.attrib)
-            setattr(singleElement, read.tag, read.attrib)
-            singleElement.rawqc = qcRawList
-            singleElement.pfqc = qcPfList
-            
-            sampleList.append(singleElement)
-  return sampleList
-
-# -----------------------------------------------------------------------------
-
-def calculateStatistics(listofSamples):
-  '''
-  Structure of 'listofSamples'
-  Lane: {'index': '6'}, Sample: {'index': 'BSSE-QGF-3524_C0NKPACXX'}, Barcode: {'index': 'TGACCA'},
-  Tile: {'index': '2307'}, Read: {'index': '1'}, rawqc:<mem>, pfqc:<mem> 
-  '''
-
-  numberOfTiles = len(listofSamples)
-  
-  tile = sample()
-  raw = qcValues ()
-  pf = qcValues ()
-  stats = Statistics()
- 
-  for tile in listofSamples:
-    raw = tile.rawqc[0]
-    pf = tile.pfqc[0]
-    
-    stats.pfYieldSum += pf.Yield
-    stats.rawYieldSum += raw.Yield
-    stats.rawReadsSum += raw.ClusterCount 
-    stats.pfReadsSum += pf.ClusterCount
-    stats.pfYieldQ30Sum += pf.YieldQ30
-    stats.qualityScoreSum += pf.QualityScoreSum
-     
-  # Can not be set here, needs to be calculated later   
-  #stats.rawPercentageReadsPerLane = rawPercentageReadsPerLane
-  stats.pfPercentage = stats.calculatePercentagePF(stats.rawYieldSum, stats.pfYieldSum)
-  stats.pfYieldQ30Percentage = stats.calculateYieldQ30Percentage(stats.pfYieldQ30Sum, stats.pfYieldSum)
-  stats.pfmeanQualityScore = stats.calulateMeanQualityScore(stats.qualityScoreSum, stats.pfYieldSum)
-  stats.lane = listofSamples[0].Lane.values()[0]
-  stats.sampleName = listofSamples[0].Sample.values()[0]
-  index = listofSamples[0].Barcode.values()[0]
-  try:
-    stats.index1, stats.index2 = index.split("-")
-  except:
-    stats.index1 = index
-  return stats
-
-# -----------------------------------------------------------------------------
-
-
-def rawReadSumPerSamples(stat):
-  '''
-  Creates a dictionary with the lanes as keys
-  The values are a list where the elements are a dictionary again.
-  This dictionary has the sample names as key and the RawReadSum as value.  
-  
-  Example:
-  {4': [{'BSSE-QGF-3434_C0NKPACXX': 248999502}], '7': [{'lane7': 123921974}, 
-  {'BSSE-QGF-3527_C0NKPACXX': 38587703}, {'BSSE-QGF-3529_C0NKPACXX': 30130893},
-  {'BSSE-QGF-3528_C0NKPACXX': 34519296}, {'BSSE-QGF-3526_C0NKPACXX': 34980179}]}
-  '''
-  
-  laneDict = {}
-  for e in stat:
-    if e.lane not in laneDict:
-      laneDict[e.lane] = [{e.sampleName:e.rawReadsSum}]
-    else:
-      laneDict[e.lane].append({e.sampleName:e.rawReadsSum})
-  return laneDict
-
-# -----------------------------------------------------------------------------
-
-def createSumRawReadsPerLane(laneDict):
-  '''
-  Creates a dictionary with lane as key and sum of Raw Reads as value:
-  {'1': 183180877, '3': 244968562, '2': 191496395, '5': 193466239, '4': 248999502, 
-  '7': 262140045, '6': 257136830, '8': 209948449}
-  '''
-  sumRawReadsDict = {}
-  for lane in laneDict:
-    sumRawReads = 0
-    for sampleNameDict in laneDict[lane]:
-      sumRawReads += sampleNameDict.values()[0]
-    
-    sumRawReadsDict[lane] = sumRawReads 
-  return sumRawReadsDict
-
-# -----------------------------------------------------------------------------
-
-def createPercentagePerLane(laneDict, sumRawReadsDict):
-  '''
-  Creates a dictionary with the sample Name as key and the percentage of raw reads related to 
-  all reads in the same lane
-  {'lane7': 47.27, 'BSSE-QGF-3433_C0NKPACXX': 100.0, 'BSSE-QGF-3666_C0NKPACXX': 54.12}
-  '''
-  
-  relRawReadsDict = {}
-  for lane in laneDict:
-    for sampleName in laneDict[lane]:
-      relRawReadsDict[sampleName.keys()[0]] = round(float(sampleName.values()[0]) / 
-                                                    float(sumRawReadsDict[lane]) * 100, 2)
-  return relRawReadsDict
-
-# -----------------------------------------------------------------------------
-
-def locate(pattern, root):
-    '''Locate all files matching supplied filename pattern in and below
-    supplied root directory.'''
-    for path, dirs, files in os.walk(os.path.abspath(root)):
-        for filename in fnmatch.filter(files, pattern):
-            yield os.path.join(path, filename)
-
-# -----------------------------------------------------------------------------
-# -----------------------------------------------------------------------------
-
-FASTQ_DATA_SET_TYPE='FASTQ_GZ'
-DEMUX_FILE='Flowcell_demux_summary.xml'
-NO_INDEX='NOINDEX'
-UNDETERMINED='UNDETERMINED'
-
-print('\n'+time.ctime())
-incomingPath = incoming.getAbsolutePath()
-# Create a "transaction" -- a way of grouping operations together so they all
-# happen or none of them do.
-transaction = service.transaction()
-# Get the incoming name 
-incomingName = incoming.getName()
-# Get the search service
-search_service = transaction.getSearchService()
-
-FileGenerator= locate(DEMUX_FILE, incomingPath)
-DEMULTIPLEX_XML = FileGenerator.next()
-
-sampleList = xml2Memory(DEMULTIPLEX_XML)    
-
-sa = sample()
-sampleDict = {}
-
-# key = sample name, value = sample()  
-for element in range(0, len(sampleList)):
-  sa = sampleList[element]
-  # Check if new sample 
-  if (sa.Sample is not sampleList[element - 1].Sample):
-    sampleName = sa.Sample.values()[0]
-    sampleDict[sampleName] = [sa]
-  else:
-    sampleDict[sampleName].append(sa)
-    
-stat = [calculateStatistics(sampleDict[mysample]) for mysample in sampleDict]
-
-# calculate the relative amount of reads per index
-laneDict = rawReadSumPerSamples(stat)
-sumRawReadsDict = createSumRawReadsPerLane(laneDict)
-relRawReadsDict = createPercentagePerLane(laneDict, sumRawReadsDict)
-
-# set the values in the object
-for mye in stat:
-  mye.rawPercentageReadsPerLane = relRawReadsDict[mye.sampleName]
- 
-#for m in stat:
-#  print m
-
-def sampleSearch(Code=''):
-  sc = SearchCriteria()
-  numberOfLanes = 0
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, Code));
-  search_service = transaction.getSearchService()
-  foundSample = search_service.searchForSamples(sc)
-  if foundSample.size() > 0:
-    # Search for contained samples
-    sampleSc = SearchCriteria()
-    sampleSc.addSubCriteria(SearchSubCriteria.createSampleContainerCriteria(sc))
-    foundContainedSamples = search_service.searchForSamples(sampleSc)
-    numberOfLanes = foundContainedSamples.size()
-  return foundSample, foundContainedSamples, numberOfLanes
-
-def searchDataSetsofSample(sample, index1, index2, DATA_SET_TYPE):
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sample));
-  search_service = transaction.getSearchService()
-  foundSample = search_service.searchForSamples(sc)
-
-  dataSetSc = SearchCriteria()
-  dataSetSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, DATA_SET_TYPE))
-  if index1 not in (NO_INDEX):
-    if index1 in (UNDETERMINED):
-      index1 = NO_INDEX
-    else:
-      # Ugly workaround, the Index vocabulary has 7 nucleotides of which the last one is always an 'A'
-      index1 = index1 + "A"
-    dataSetSc.addMatchClause(SearchCriteria.MatchClause.createPropertyMatch("BARCODE", index1))
-  if index2 not in (NO_INDEX):
-    if index2 in (UNDETERMINED):
-      index2 = NO_INDEX
-    dataSetSc.addMatchClause(SearchCriteria.MatchClause.createPropertyMatch("INDEX2", index2))
-  dataSetSc.addSubCriteria(SearchSubCriteria.createSampleCriteria(sc))
-  foundDataSets = search_service.searchForDataSets(dataSetSc)
-
-  return foundDataSets
-
-flowcell, lanes, numberOfLanes  = sampleSearch(incomingName)
-
-for mystat in stat:
-  laneCode = flowcell[0].getCode() + ":" + mystat.lane
-  searchIndex1 = mystat.index1.upper()
-  searchIndex2 = mystat.index2.upper()
-
-  # Search for a data set with those two indices
-  DataSet = searchDataSetsofSample(laneCode, searchIndex1, searchIndex2, FASTQ_DATA_SET_TYPE)
-  try:
-    assert DataSet.size() == 1
-  except AssertionError:
-    print (str(DataSet.size()) + ' data sets found which match the criterias: '+ 
-            str(laneCode), searchIndex1, searchIndex2)
-    break
-
-  sa = transaction.getDataSetForUpdate(DataSet[0].getDataSetCode())
-  sa.setPropertyValue('YIELD_MBASES', str(mystat.pfYieldSum))
-  sa.setPropertyValue('RAW_YIELD_MBASES', str(mystat.rawYieldSum))
-  sa.setPropertyValue('PERCENTAGE_PASSED_FILTERING',str(mystat.pfPercentage))
-  sa.setPropertyValue('PF_READS_SUM',str(mystat.pfReadsSum))
-  sa.setPropertyValue('RAW_READS_SUM',str(mystat.rawReadsSum))
-  sa.setPropertyValue('PERCENTAGE_RAW_CLUSTERS_PER_LANE', str(mystat.rawPercentageReadsPerLane))
-  sa.setPropertyValue('PFYIELDQ30PERCENTAGE', str(mystat.pfYieldQ30Percentage))
-  sa.setPropertyValue('PFMEANQUALITYSCORE', str(mystat.pfmeanQualityScore))
-
-  print "Modified data sets properties of: " + DataSet[0].getDataSetCode()
diff --git a/deep_sequencing_unit/dist/etc/data-set-handler-lane.py b/deep_sequencing_unit/dist/etc/data-set-handler-lane.py
deleted file mode 100755
index 5e4b0b85810..00000000000
--- a/deep_sequencing_unit/dist/etc/data-set-handler-lane.py
+++ /dev/null
@@ -1,269 +0,0 @@
-'''
-Processes each flow lane of a Sequencing run
-
-Expects as incoming folder:
-Project_<Flow Cell>_<Lane>
-e.g.Project_110715_SN792_0054_BC035RACXX_1 or Project_110816_6354LAAXX_1
-
-Note: 
-print statements go to: ~openbis/sprint/datastore_server/log/startup_log.txt
-'''
-
-import os
-import fnmatch
-import time
-import shutil
-from time import *
-from datetime import *
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-FASTQ_GZ_PATTERN = "*.fastq.gz"
-METADATA_FILE_SUFFIX = "_metadata.tsv"
-AFFILIATION= {'FMI': '/links/shared/dsu-dss/dss/customers/fmi/drop-box/','BIOCENTER_BASEL': '/links/shared/dsu-dss/dss/customers/biozentrum/drop-box/'}
-AFFILIATION_PROPERTY_NAME='AFFILIATION'
-INDEX1='BARCODE'
-INDEX2='INDEX2'
-
-DEFAULT_INDEX='NoIndex'
-
-# -------------------------------------------------------------------------------
-
-incomingPath = incoming.getAbsolutePath()
-# useful for debugging:
-print(datetime.now())
-
-def getFileNames(path=incomingPath):
-  '''
-  Gets all files matching a PATTERN in a path recursively
-  and returns the result as a list
-  '''
-  matches = []
-  for root, dirnames, filenames in os.walk(path):
-    for filename in fnmatch.filter(filenames, FASTQ_GZ_PATTERN):
-        matches.append(os.path.join(root, filename))
-  matches.sort()
-  return(matches)
-
-def writeMetadataFile (fileName, parentPropertyTypes, parentPropertiesMap, fcMetaDataDict, fcMetaDataList):
-  '''
-  Writes a file of meta date related to one sample
-  '''
-  try:
-    metaDataFile = open(fileName,'w')
-    for propertyType in parentPropertyTypes:
-      metaDataFile.write(propertyType.encode('utf-8') + "\t" +
-                         parentPropertiesMap[propertyType].tryGetAsString().encode('utf-8') + "\n")
-    
-    metaDataFile.write("\nFLOWCELL PROPERTIES\n".encode('utf-8'))
-
-    for fcMetaData in fcMetaDataList:
-      metaDataFile.write(fcMetaData.encode('utf-8') + "\t" +
-                         fcMetaDataDict[fcMetaData].tryGetAsString().encode('utf-8') + "\n")
-      pass
-  except IOError:
-    print ('File error, could not write '+ fileName)
-  finally:
-    metaDataFile.close()
-
-def create_openbis_timestamp ():
-  '''
-  Create an openBIS conform timestamp
-  '''
-  tz=localtime()[3]-gmtime()[3]
-  d=datetime.now()
-  return d.strftime("%Y-%m-%d %H:%M:%S GMT"+"%+.2d" % tz+":00")
-
-def extraCopy (affiliationName, path):
-  '''
-  Handles the extra copies of the data for transfer with datamover via the
-  bc2 network to the FMI and BIOCENTER
-  For the BIOCENTER there is a folder created in which all data gets into
-  '''
-  if (affiliation_name in AFFILIATION):
-    if (affiliation_name == 'BIOCENTER_BASEL'):
-      dirname = AFFILIATION[affiliation_name] + datetime.now().strftime("%Y-%m-%d")
-      if not os.path.exists(dirname):
-        os.mkdir(dirname)
-      shutil.copy(path, dirname)
-    else:
-      shutil.copy(path, AFFILIATION[affiliation_name])
-# -------------------------------------------------------------------------------
-
-# Create a "transaction" -- a way of grouping operations together so they all
-# happen or none of them do.
-transaction = service.transaction()
-
-folders=[]
-folders=os.listdir(incomingPath)
-
-# Get the incoming name 
-name = incoming.getName()
-# expected incoming Name, e.g.: Project_110715_SN792_0054_BC035RACXX_1
-split=name.split("_")
-if (len(split) == 6):
-  runningDate = split[1]
-  sequencerId = split[2]
-  sequentialNumber = split[3]
-  hiseqTray = split[4][0]
-  flowCellId = split[4][1:]
-  flowLane = split[-1]
-  incoming_sample=runningDate+ '_'+ sequencerId + '_' + sequentialNumber + '_' + hiseqTray + flowCellId + ':' + flowLane 
-# expected Project_120112_63537AAXX_1
-if (len(split) ==4):
-  runningDate = split[1]
-  flowCellId = split[2]
-  flowLane = split[-1]
-  incoming_sample=runningDate+ '_'+ flowCellId + ':' + flowLane
-
-
-# -------------------------------------------------------------------------------
-
-def getFlowCellMetaData (flowCellId):
-  
-  def sortedDictValues(adict):
-    keys = adict.keys()
-    keys.sort()
-    return map(adict.get, keys)
-  
-  search = transaction.getSearchService()
-  sc = SearchCriteria()
-  print('Searching FlowCell: '+ str(flowCellId))
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCellId));
-  foundFlowCells = search.searchForSamples(sc)
-
-  try:
-    assert foundFlowCells.size() == 1
-  except AssertionError:
-    print (str(foundFlowCells.size()) + ' flow cells found which match the criterias: '+ flowCellId)
-  
-  fcPropertiesDict = {}
-  fcPropertyTypes = []
-
-  fcProperties = foundFlowCells[0].getSample().getProperties()
-  for property in fcProperties:
-      code = property.getPropertyType().getSimpleCode()
-      fcPropertyTypes.append(code)
-      fcPropertiesDict[code] = property
-  
-  fcPropertyTypes.sort()
-  return fcPropertiesDict, fcPropertyTypes
-
-
-# -------------------------------------------------------------------------------
-
-# Get the search service
-search_service = transaction.getSearchService()
-
-# Search for the incoming_sample which is a Flow Lane
-sc = SearchCriteria()
-print('Processing sample: '+ str(incoming_sample))
-sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, incoming_sample));
-foundSamples = search_service.searchForSamples(sc)
-
-# there should be only one sample because it is unique within one Flow Cell 
-if (len(foundSamples) > 1):
-  raise Exception("More than one sample found! No unique code: " + incoming_sample)
-elif (len(foundSamples) == 0):
-  raise Exception("No matching sample found for: " + incoming_sample)
-else :
-  sample = foundSamples[0].getSample()
-  parents = sample.getParents()
-
-# -------------------------------------------------------------------------------
-
-# search for the parents
-sc = SearchCriteria()
-# set the Search Criteria to an OR condition, default is AND
-sc.setOperator(SearchCriteria.SearchOperator.MATCH_ANY_CLAUSES)
-# Get the codes for all parents
-for parent in parents:
-  parentSubCode = parent.getSubCode()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, parentSubCode));
-# all parents of the flow lane
-foundParents = search_service.searchForSamples(sc)
-
-# -------------------------------------------------------------------------------
-
-# loop over each Sample folder within a lane
-for f in range(0,len(folders)):
-  # Create a data set and set type
-  dataSet = transaction.createNewDataSet("FASTQ_GZ")
-  dataSet.setMeasuredData(False)
-  dataSet.setPropertyValue(INDEX1, DEFAULT_INDEX)
-  dataSet.setPropertyValue(INDEX2, DEFAULT_INDEX)
-  dirName = transaction.createNewDirectory(dataSet,folders[f])
-
-  # if multiplexed samples then there is more than one folder
-  pathPerLane = incomingPath + '/' + folders[f]
-  print ("pathPerLane: " + pathPerLane)
-  
-  # get all properties of the parent samples
-  for foundParent in foundParents:
-    parent = foundParent.getSample()
-    # ArrayList 
-    parentProperties = parent.getProperties()
-    # just get the current code
-    parentCode = parent.getCode()
-    #print("Found parent code: "+ parentCode)
-
-    # reformat Java ArrayList and Sort
-    parentPropertyTypes = []
-    parentPropertiesMap = {}
-    for property in parentProperties:
-      code = property.getPropertyType().getSimpleCode()
-      parentPropertyTypes.append(code)
-      parentPropertiesMap[code] = property
-      try:
-        barcode = parentPropertiesMap[INDEX1].tryGetAsString()
-        if barcode == "NOINDEX":
-          barcode = DEFAULT_INDEX
-        else:
-          barcode.split()[-1][:-1]
-      except:
-       barcode = DEFAULT_INDEX
-      
-      try:
-        index2 = parentPropertiesMap[INDEX2].tryGetAsString()
-        if index2 == "NOINDEX":
-          index2 = DEFAULT_INDEX
-        else:
-          index2.split()[-1][:-1]
-      except:
-        index2 = DEFAULT_INDEX
-
-      # just use the first six nucleotides for the naming 
-      completeBarcode=barcode + "-" + index2
-
-    parentPropertyTypes.sort()
-    # BSSE--1754_C0364ACXX_CTTGTAA-AACC_L007_R1_001.fastq.gz
-    nameOfFile = parentCode + "_" + flowCellId + "_" + completeBarcode + "_L00" + flowLane +METADATA_FILE_SUFFIX
-
-    if (parentCode == folders[f].split('_')[1]):
-      dataSet.setPropertyValue(INDEX1, barcode)
-      dataSet.setPropertyValue(INDEX2, index2)
-      #print("Creating metadata file:" + nameOfFile)
-      # get a file from the IDataSetRegistrationTransaction so it is automatically part of the data set
-      pathToFile = transaction.createNewFile(dataSet, folders[f], nameOfFile)
-      
-      fcMetaDataDict, fcMetaDataList = getFlowCellMetaData(incoming_sample.split(":")[0])
-      writeMetadataFile(pathToFile, parentPropertyTypes, parentPropertiesMap, fcMetaDataDict, fcMetaDataList)
- 
-      affiliation_name = parentPropertiesMap[AFFILIATION_PROPERTY_NAME].tryGetAsString()
-      extraCopy (affiliation_name, pathToFile) 
- 
-  # get all fastqs in this dataSet
-  fastqFileList=getFileNames(pathPerLane)
-  
-  # put the files into the dataSet 
-  affiliation_name = parentPropertiesMap[AFFILIATION_PROPERTY_NAME].tryGetAsString()
-  for file in fastqFileList:
-    extraCopy (affiliation_name, file)
-    # finally add the files to the data set     
-    transaction.moveFile(file , dataSet, folders[f])
- 
-  if foundSamples.size() > 0:
-    sa = transaction.getSampleForUpdate(foundSamples[0].getSampleIdentifier())
-    sa.setPropertyValue("DATA_TRANSFERRED", create_openbis_timestamp())
-    dataSet.setSample(foundSamples[0])
-
-shutil.rmtree(incomingPath)
diff --git a/deep_sequencing_unit/dist/etc/data-set-handler-pdf.py b/deep_sequencing_unit/dist/etc/data-set-handler-pdf.py
deleted file mode 100755
index 1772673509e..00000000000
--- a/deep_sequencing_unit/dist/etc/data-set-handler-pdf.py
+++ /dev/null
@@ -1,67 +0,0 @@
-'''
-
-Note: 
-print statements go to: ~openbis/sprint/datastore_server/log/startup_log.txt
-'''
-
-import os
-import fnmatch
-import re
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-FOLDER='/links/shared/dsu-dss/dss/incoming-jython-pdf/'
-PDF_PATTERN='*.pdf'
-
-matches = []
-searchStrings = ['@PG']
-programList = []
-
-# Create a "transaction" -- a way of grouping operations together so they all
-# happen or none of them do.
-transaction = service.transaction()
- 
-# Create a data set and set type
-dataSet = transaction.createNewDataSet("QUALITY_PDFS")
-dataSet.setMeasuredData(False)
-
-incomingPath = incoming.getAbsolutePath()
-
-# Get the incoming name 
-# expected: 
-# Project_110907_SN792_0059_AC012FACXX_3/Sample_BSSE-DSU-1662/BSSE-DSU-1662_CGATGTA_L003_R1_001_sorted.pdf
-name = incoming.getName()
-split=name.split('_')
-if (len(split) == 6): 
-  incoming_sample=split[1]+ '_'+ split[2] + '_' + split[3] + '_' + split[4]+ ':' + split[-1]
-if (len(split) ==4):
-  incoming_sample=split[1]+ '_'+ split[2] + ':' + split[-1]
-
-
-# Looking for PDFS
-for root, dirnames, filenames in os.walk(FOLDER + name):
-  for filename in fnmatch.filter(filenames, PDF_PATTERN):
-      matches.append(os.path.join(root, filename))
-
- 
-# Add the incoming file into the data set
-transaction.moveFile(incomingPath, dataSet)
-
-# Get the search service
-search_service = transaction.getSearchService()
-
-# Search for the sample
-sc = SearchCriteria()
-sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, incoming_sample));
-foundSamples = search_service.searchForSamples(sc)
-
-if foundSamples.size() > 0:
-  dataSet.setSample(foundSamples[0])
-  
-  # Search for parent data set of the same sample
-  dataSetSc = SearchCriteria()
-  dataSetSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, 'FASTQ_GZ'))
-  dataSetSc.addSubCriteria(SearchSubCriteria.createSampleCriteria(sc))
-  foundDataSets = search_service.searchForDataSets(dataSetSc)
-  if foundDataSets.size() > 0:
-    dataSet.setParentDatasets([ds.getDataSetCode() for ds in foundDataSets])
diff --git a/deep_sequencing_unit/dist/etc/data-set-handler-unaligned.py b/deep_sequencing_unit/dist/etc/data-set-handler-unaligned.py
deleted file mode 100755
index c47815e82b4..00000000000
--- a/deep_sequencing_unit/dist/etc/data-set-handler-unaligned.py
+++ /dev/null
@@ -1,113 +0,0 @@
-'''
-Expects as incoming folder: <FlowCell>/Unaligned_no_mismatch
-
-
-Note: 
-print statements go to: ~openbis/sprint/datastore_server/log/startup_log.txt
-'''
-
-import os
-import glob
-import shutil
-import time
-#from java.lang import RuntimeException
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-BASECALL_STATS_FOLDER = 'Basecall_Stats_'
-REGEX_FILES = '*.*'
-REGEX_MAKEFILE = 'Make*'
-REGEX_LANES='/P*'
-REGEX_UNDETERMINED = '/U*/Sample*'
-UNALIGNED_FOLDER='Unaligned_no_mismatch'
-LANE_FOLDER='/links/shared/dsu-dss/dss/incoming-jython-lanes/'
-MARKER_STRING='.MARKER_is_finished_'
-
-def touch_markerfile(filename):
-  try:  
-    # do a touch
-    open(filename, 'w').close()
-  except:
-    print('Could not touch ' + filename)  
-
-def renameFiles(dir, flowcellName):
-  print dir 
-  print flowcellName
-  for root, dirs, files in os.walk(dir):
-    for file in files:
-      print root + file
-      os.rename(root + '/' + file, root + "/" + flowcellName + "_" + file)
-
-
-# Create a "transaction" -- a way of grouping operations together so they all
-# happen or none of them do.
-transaction = service.transaction()
-
-incomingPath = incoming.getAbsolutePath()
-
-# Get the incoming name and set the Data Set Type based on this 
-name = incoming.getName()
-split=name.split("_")
-if (len(split) == 4):
-  DSTYPE='ILLUMINA_HISEQ_OUTPUT'
-  flowcell=name.split("_")[-1][1:]
-if (len(split) ==2):
-  DSTYPE='ILLUMINA_GA_OUTPUT'
-  flowcell=name.split("_")[-1]
-  # fix Illumina Script error: the GA FC Name does not contain a suffix A or B so noes not need to be removed
-  # but Illumina removes it anyway, so we just revert this 
-  #os.rename(incomingPath + '/' + UNALIGNED_FOLDER + '/' +  BASECALL_STATS_FOLDER + name.split("_")[-1][1:], incomingPath + '/' + UNALIGNED_FOLDER +'/' +  BASECALL_STATS_FOLDER + flowcell)
-
-#move Lanes into a different drop box
-laneList=glob.glob(incomingPath + '/'+ UNALIGNED_FOLDER + REGEX_LANES)
-laneList.sort()
-
-undeterminedList=glob.glob(incomingPath + '/'+ UNALIGNED_FOLDER + REGEX_UNDETERMINED)
-undeterminedList.sort()
-
-# add the Flow Cell Name to the Undetermined FASTQ files
-[renameFiles(dir, flowcell) for dir in undeterminedList]
-
-# Multiplexing:
-# First move the Undetermined reads to the other ones 
-[shutil.move(undeterminedLane, laneList[int(undeterminedLane.split('/')[-1][-1])-1] +'/' + undeterminedLane.split('/')[-1]) for undeterminedLane in undeterminedList]
-
-[shutil.move(lane, LANE_FOLDER+lane.split('/')[-1]) for lane in laneList]
-markerFileList = [touch_markerfile(LANE_FOLDER+MARKER_STRING+lane.split('/')[-1]) for lane in laneList]
-
-# Create a data set and set type
-dataSet = transaction.createNewDataSet("BASECALL_STATS")
-dataSet.setMeasuredData(False)
-  
-# Build up a list of file which are part of the data set
-fileList=glob.glob(incomingPath + '/'+ UNALIGNED_FOLDER + '/' + REGEX_FILES)
-[fileList.append(i) for i in glob.glob(incomingPath + '/' + UNALIGNED_FOLDER +'/' +REGEX_MAKEFILE)]
-
-# Add the incoming file into the data set
-transaction.createNewDirectory(dataSet, UNALIGNED_FOLDER) 
-# move all files is data set
-[transaction.moveFile(file, dataSet, UNALIGNED_FOLDER)  for file in fileList]
-# move base call stat dir into data set
-print("flowcell: "+flowcell)
-transaction.moveFile(incomingPath + '/' + UNALIGNED_FOLDER + '/' +  BASECALL_STATS_FOLDER + flowcell, dataSet, UNALIGNED_FOLDER + '/')
-  
-# Get the search service
-search_service = transaction.getSearchService()
-
-# Search for the sample
-sc = SearchCriteria()
-sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, name))
-foundSamples = search_service.searchForSamples(sc)
-
-if foundSamples.size() > 0:
-  dataSet.setSample(foundSamples[0])
-
-  # Search for another data set of the same sample and make it a child of it 
-  dataSetSc = SearchCriteria()
-  dataSetSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, DSTYPE))
-  dataSetSc.addSubCriteria(SearchSubCriteria.createSampleCriteria(sc))
-  foundDataSets = search_service.searchForDataSets(dataSetSc)
-  if foundDataSets.size() > 0:
-    dataSet.setParentDatasets([ds.getDataSetCode() for ds in foundDataSets])
-
-shutil.rmtree(incomingPath)
diff --git a/deep_sequencing_unit/dist/etc/data-set-handler_fastqc.py b/deep_sequencing_unit/dist/etc/data-set-handler_fastqc.py
deleted file mode 100644
index 49972b6b03c..00000000000
--- a/deep_sequencing_unit/dist/etc/data-set-handler_fastqc.py
+++ /dev/null
@@ -1,56 +0,0 @@
-'''
-Expects as incoming folder: Project_120427_SN792_0110_AD0YCGACXX_1
-
-Note: 
-print statements go to: ~openbis/sprint/datastore_server/log/startup_log.txt
-'''
-
-import os
-import shutil
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-def renameFiles(dir, flowcellName):
-  print dir 
-  print flowcellName
-  for root, dirs, files in os.walk(dir):
-    for file in files:
-      print root + file
-      os.rename(root + '/' + file, root + "/" + flowcellName + "_" + file)
-
-
-# Create a "transaction" -- a way of grouping operations together so they all
-# happen or none of them do.
-transaction = service.transaction()
-
-incomingPath = incoming.getAbsolutePath()
-name = incoming.getName()
-fcAndLane = name.split("_",1)[-1]
-flowCell, flowLane = fcAndLane.rsplit("_",1)
-print flowLane
-
-# Get the search service
-search_service = transaction.getSearchService()
-
-# Search for the sample
-sc = SearchCriteria()
-sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCell))
-foundSamples = search_service.searchForSamples(sc)
-
-if foundSamples.size() > 0:
-
-  # Search for another data set of the same sample and make it a child of it 
-  sampleSc = SearchCriteria()
-  sampleSc.addSubCriteria(SearchSubCriteria.createSampleContainerCriteria(sc))
-  foundContainedSamples = search_service.searchForSamples(sampleSc)
-  if foundContainedSamples.size() > 0:
-    dataSet = transaction.createNewDataSet("FASTQC")
-    dataSet.setMeasuredData(False)
-    for indx in range(0, len(foundContainedSamples)):
-      lane = foundContainedSamples[indx].getCode().split(':')[-1]
-      print lane
-      if (flowLane == lane):
-        dataSet.setSample(foundContainedSamples[indx])
-        # Add the incoming file into the data set
-        transaction.moveFile(incomingPath + "/fastqc/", dataSet)
-        break
diff --git a/deep_sequencing_unit/dist/etc/data-set-handler_runinfostatistics.py b/deep_sequencing_unit/dist/etc/data-set-handler_runinfostatistics.py
deleted file mode 100755
index da183924e46..00000000000
--- a/deep_sequencing_unit/dist/etc/data-set-handler_runinfostatistics.py
+++ /dev/null
@@ -1,54 +0,0 @@
-'''
-expected incoming Name for HiSeq2000 runs: 110715_SN792_0054_BC035RACXX
-expected incoming Name for GAII runs: 110812_6353WAAXX
-
-Note: 
-print statements go to: ~openbis/sprint/datastore_server/log/startup_log.txt
-'''
-
-import os
-import shutil
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-# Create a "transaction" -- a way of grouping operations together so they all
-# happen or none of them do.
-transaction = service.transaction()
-
-incomingPath = incoming.getAbsolutePath()
-folders=[]
-folders=os.listdir(incomingPath)
-
-# Get the incoming name 
-name = incoming.getName()
-
-split=name.split("_")
-if (len(split) == 4):
-  IS_HISEQ_RUN=True
-if (len(split) == 2):
-  IS_HISEQ_RUN=False
-
-# Get the search service
-search_service = transaction.getSearchService()
- 
-# Search for the sample
-sc = SearchCriteria()
-sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, name));
-foundSamples = search_service.searchForSamples(sc)
-
-if foundSamples.size() > 0:
- 
-  # Search for another data set of the same sample and make it a child of it 
-  sampleSc = SearchCriteria()
-  sampleSc.addSubCriteria(SearchSubCriteria.createSampleContainerCriteria(sc))
-  foundContainedSamples = search_service.searchForSamples(sampleSc)
-  if foundContainedSamples.size() > 0:
-    for fcs in range(0,foundContainedSamples.size()):
-      dataSet = transaction.createNewDataSet("RUNINFO")
-      dataSet.setMeasuredData(False)
-      dataSet.setSample(foundContainedSamples[fcs])
-      # Add the incoming file into the data set
-      shutil.copytree(incomingPath, incomingPath + "_" + str(fcs+1))
-      transaction.moveFile(incomingPath + "_" + str(fcs+1), dataSet)
-  
-shutil.rmtree(incomingPath)
diff --git a/deep_sequencing_unit/dist/etc/data-set-handler_takeRTA_timestamp.py b/deep_sequencing_unit/dist/etc/data-set-handler_takeRTA_timestamp.py
deleted file mode 100644
index 33fd7e39592..00000000000
--- a/deep_sequencing_unit/dist/etc/data-set-handler_takeRTA_timestamp.py
+++ /dev/null
@@ -1,48 +0,0 @@
-import os
-import shutil
-from time import *
-from datetime import *
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-MarkerGAComplete = 'RTAComplete.txt'  
-MarkerHiSeqComplete = 'RTAComplete.txt'
-
-def createOpenbisTimeStamp(file):
-  '''
-  Creates a openBIS compatible time stamp of a file time stamp
-  '''
-  mtime = os.path.getmtime(file)
-  lt = localtime(mtime)
-  tz = localtime().tm_hour - gmtime().tm_hour
-  return (strftime("%Y-%m-%d %H:%M:%S GMT" + "%+.2d" % tz + ":00", lt))
-
-# -----------------------------------------------------------------------------
-
-# Create a "transaction" -- a way of grouping operations together so they all
-# happen or none of them do.
-transaction = service.transaction()
-
-incomingPath = incoming.getAbsolutePath()
-
-# Get the incoming name 
-name = incoming.getName()
-
-split=name.split("_")
-if (len(split) == 4):
-  IS_HISEQ_RUN=True
-  Markerfile = incomingPath + "/" + MarkerHiSeqComplete
-if (len(split) == 2):
-  Markerfile = incomingPath + "/" + MarkerGAComplete 
-
-
-# Search for the sample and check if there is already sample with this name
-search_service = transaction.getSearchService()
-sc = SearchCriteria()
-sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, name));
-foundSamples = search_service.searchForSamples(sc)
-
-if foundSamples.size() > 0:
-    sa = transaction.getSampleForUpdate(foundSamples[0].getSampleIdentifier())
-    sa.setPropertyValue("SEQUENCER_FINISHED", createOpenbisTimeStamp(Markerfile))
-
-shutil.rmtree(incomingPath)
diff --git a/deep_sequencing_unit/dist/etc/log.xml b/deep_sequencing_unit/dist/etc/log.xml
deleted file mode 100644
index 5512436db76..00000000000
--- a/deep_sequencing_unit/dist/etc/log.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
-
-  <appender name="DEFAULT" class="org.apache.log4j.DailyRollingFileAppender">
-
-    <param name="File" value="log/datastore_server_log.txt"/>
-    <param name="DatePattern" value="'.'yyyy-MM-dd"/>
-
-    <layout class="org.apache.log4j.PatternLayout">
-      <param name="ConversionPattern" value="%d %-5p [%t] %c - %m%n"/>
-    </layout>
-  
-  </appender>
-
-  <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
-     <layout class="org.apache.log4j.PatternLayout">
-       <param name="ConversionPattern" value="%d %-5p [%t] %c - %m%n"/>
-     </layout>
-  </appender>
-
-  <appender name="NULL" class="org.apache.log4j.varia.NullAppender" />
-
-  <appender name="EMAIL" class="org.apache.log4j.net.SMTPAppender">
-
-    <param name="BufferSize" value="512" />
-    <param name="SMTPHost" value="localhost" />
-    <param name="From" value="dsu@localhost" />
-    <param name="To" value="root@localhost" />
-    <param name="Subject" value="ATTENTION: DSU Data Set Server" />
-    <param name="EvaluatorClass" value="ch.systemsx.cisd.common.logging.AlwaysTrueTriggeringEventEvaluator" />
-
-    <layout class="org.apache.log4j.PatternLayout">
-      <param name="ConversionPattern" value="%d %-5p [%t] %c - %m%n"/>
-    </layout>
-  
-    <!--filter class="org.apache.log4j.varia.LevelRangeFilter">
-      <param name="LevelMin" value="ERROR"/>
-      <param name="LevelMax" value="FATAL"/>
-    </filter-->
-  
-  </appender>
-
-  <category name="NOTIFY">
-    <priority value="info" />
-    <appender-ref ref="DEFAULT" />
-    <appender-ref ref="EMAIL" />
-  </category>    
-  
-  <root>
-    <priority value="info" />
-    <appender-ref ref="DEFAULT" />
-  </root>
-  
-</log4j:configuration>
diff --git a/deep_sequencing_unit/dist/etc/passwd b/deep_sequencing_unit/dist/etc/passwd
deleted file mode 100644
index 9a706e68a26..00000000000
--- a/deep_sequencing_unit/dist/etc/passwd
+++ /dev/null
@@ -1,4 +0,0 @@
-a:a@admins.com:A:The Admin:J3fII6Pex7jnCBwF+uXz2mFuB1QVhPUi
-u:u@users.com:U:The User:dmbGKaGRmbX8YKfslMxUHObmYfjywkuT
-o:o@observers.com:O:The Observer:t53ADCnFnEFhBvHB7FPoHhbHeW2O1KJc
-etlserver::::SHGHSPawL/B3NKXD5nsu4fSrj5LwR2MX
diff --git a/deep_sequencing_unit/dist/etc/service.properties b/deep_sequencing_unit/dist/etc/service.properties
deleted file mode 100644
index 6d3c1edd927..00000000000
--- a/deep_sequencing_unit/dist/etc/service.properties
+++ /dev/null
@@ -1,228 +0,0 @@
-# Unique code of this Data Store Server. Not more than 40 characters.
-data-store-server-code = DSS1
-
-# The root directory of the data store
-storeroot-dir = data/store
-
-# The directory where the command queue file is located; defaults to storeroot-dir 
-commandqueue-dir =
-
-# Port
-port = 8444
-
-# Session timeout in minutes
-session-timeout = 720
-
-# Path to the keystore
-keystore.path = etc/openBIS.keystore
-
-# Password of the keystore
-keystore.password = changeit
-
-# Key password of the keystore
-keystore.key-password = changeit
-
-# The check interval (in seconds)
-check-interval = 60
-
-# The time-out for clean up work in the shutdown sequence (in seconds).
-# Note that that the maximal time for the shutdown sequence to complete can be as large 
-# as twice this time.
-# Remark: On a network file system, it is not recommended to turn this value to something 
-# lower than 180.
-shutdown-timeout = 180
-
-# If free disk space goes below value defined here, a notification email will be sent.
-# Value must be specified in kilobytes (1048576 = 1024 * 1024 = 1GB). If no high water mark is
-# specified or if value is negative, the system will not be watching.
-highwater-mark = -1
-
-# If a data set is successfully registered it sends out an email to the registrator. 
-# If this property is not specified, no email is sent to the registrator. This property
-# does not affect the mails which are sent, when the data set could not be registered.
-notify-successful-registration = false
-
-# The URL of the openBIS server
-server-url = https://localhost:8443/openbis/openbis
-
-# The username to use when contacting the openBIS server
-username = etlserver
-
-# The password to use when contacting the openBIS server
-password = etlserver
-
-# The base URL for Web client access.
-download-url = https://localhost:8444
-
-# SMTP properties (must start with 'mail' to be considered). 
-# mail.smtp.host = localhost
-# mail.from = datastore_server@localhost
-
-# ---------------- Timing parameters for file system operations on remote shares.
-
-# Time (in seconds) to wait for any file system operation to finish. Operations exceeding this 
-# timeout will be terminated. 
-timeout = 60
-# Number of times that a timed out operation will be tried again (0 means: every file system 
-# operation will only ever be performed once).
-max-retries = 11
-# Time (in seconds) to wait after an operation has been timed out before re-trying.  
-failure-interval = 10 
-
-# The period of no write access that needs to pass before an incoming data item is considered 
-# complete and ready to be processed (in seconds) [default: 300]. 
-# Valid only when auto-detection method is used to determine if an incoming data are ready to be processed.
-quiet-period = 10
-
-# Globally used separator character which separates entities in a data set file name 
-data-set-file-name-entity-separator = _
-
-# Specifies what should happen if an error occurs during dataset processing. 
-# By default this flag is set to false and user has to modify the 'faulty paths file' 
-# each time the faulty dataset should be processed again.
-# Set this flag to true if the processing should be repeated after some time without manual intervention.
-# Note that this can increase the server load.
-# reprocess-faulty-datasets = false
-
-# ---------------------------------------------------------------------------
-# reporting and processing plugins configuration
-# ---------------------------------------------------------------------------
-
-# Comma separated names of reporting plugins. Each plugin should have configuration properties prefixed with its name.
-# If name has 'default-' prefix it will be used by default in data set Data View.
-reporting-plugins = illumina-summary
-
-# Label of the plugin which will be shown for the users.
-illumina-summary.label = Illumina Summary 
-# Comma separated list of dataset type codes which can be handled by this plugin.
-illumina-summary.dataset-types = SHORT_READS_SEQUENCING, ILLUMINA_GA_OUTPUT
-# Plugin class specification (together with the list of packages this class belongs to).
-illumina-summary.class = ch.ethz.bsse.cisd.dsu.dss.plugins.IlluminaSummaryReportingPlugin
-# The property file. Its content will be passed as a parameter to the plugin.
-illumina-summary.properties-file =
-
-# Comma separated names of processing threads. Each thread should have configuration properties prefixed with its name.
-# E.g. 'code-extractor' property for the thread 'my-etl' should be specified as 'my-etl.code-extractor'
-inputs = flow-cell, fl1, fl2, fl3, fl4, fl5, fl6, fl7, fl8
-
-# ---------------------------------------------------------------------------
-# 'flow-cell' thread configuration
-# ---------------------------------------------------------------------------
-# The directory to watch for incoming data.
-flow-cell.incoming-dir = data/incoming
-
-# Determines when the incoming data should be considered complete and ready to be processed.
-# Allowed values: 
-#  - auto-detection - when no write access will be detected for a specified 'quite-period'
-#  - marker-file		- when an appropriate marker file for the data exists. 
-# The default value is 'marker-file'.
-flow-cell.incoming-data-completeness-condition = auto-detection
-
-# The space the samples extracted by this thread belong to. If commented out or empty, then samples
-# are considered associated to a database instance (not group private). 
-# flow-cell.space-code = <change this>
-
-# ---------------- Plugin properties
-# The extractor class to use for code extraction
-flow-cell.data-set-info-extractor = ch.systemsx.cisd.etlserver.DefaultDataSetInfoExtractor
-flow-cell.data-set-info-extractor.strip-file-extension = true
-flow-cell.data-set-info-extractor.entity-separator = ${data-set-file-name-entity-separator}
-flow-cell.data-set-info-extractor.space-code = TEST
-# Location of file containing data set properties 
-#flow-cell.data-set-info-extractor.data-set-properties-file-name = data-set.properties
-
-# The extractor class to use for type extraction
-flow-cell.type-extractor = ch.systemsx.cisd.etlserver.SimpleTypeExtractor
-flow-cell.type-extractor.file-format-type = PROPRIETARY
-flow-cell.type-extractor.locator-type = RELATIVE_LOCATION
-flow-cell.type-extractor.data-set-type = FLOW_CELL
-flow-cell.type-extractor.is-measured = true
-
-# The storage processor (IStorageProcessor implementation)
-flow-cell.storage-processor = ch.ethz.bsse.cisd.dsu.dss.StorageProcessor
-flow-cell.storage-processor.processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-# Template of flow-lane drop boxes. {0} is the place holder for flow lane number
-flow-cell.storage-processor.flow-lane-drop-box-template = data/drop-box-{0}
-flow-cell.storage-processor.transfer.BSSE = data/drop-box-bsse
-flow-cell.storage-processor.meta-data-file-prefix = PREFIX_FOR_TSV
-
-# -------- Flow Lane 1 --------------------------------------
-fl1.incoming-dir = data/drop-box-1
-fl1.data-set-info-extractor = ch.ethz.bsse.cisd.dsu.dss.FlowLaneDataSetInfoExtractor
-fl1.data-set-info-extractor.entity-separator = ${data-set-file-name-entity-separator}
-fl1.data-set-info-extractor.index-of-space-code = 0
-fl1.type-extractor = ch.systemsx.cisd.etlserver.SimpleTypeExtractor
-fl1.type-extractor.file-format-type = PROPRIETARY
-fl1.type-extractor.data-set-type = FLOW_LANE
-fl1.storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
-# -------- Flow Lane 2 --------------------------------------
-fl2.incoming-dir = data/drop-box-2
-fl2.data-set-info-extractor = ch.ethz.bsse.cisd.dsu.dss.FlowLaneDataSetInfoExtractor
-fl2.data-set-info-extractor.entity-separator = ${data-set-file-name-entity-separator}
-fl2.data-set-info-extractor.index-of-space-code = 0
-fl2.type-extractor = ch.systemsx.cisd.etlserver.SimpleTypeExtractor
-fl2.type-extractor.file-format-type = PROPRIETARY
-fl2.type-extractor.data-set-type = FLOW_LANE
-fl2.storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
-# -------- Flow Lane 3 --------------------------------------
-fl3.incoming-dir = data/drop-box-3
-fl3.data-set-info-extractor = ch.ethz.bsse.cisd.dsu.dss.FlowLaneDataSetInfoExtractor
-fl3.data-set-info-extractor.entity-separator = ${data-set-file-name-entity-separator}
-fl3.data-set-info-extractor.index-of-space-code = 0
-fl3.type-extractor = ch.systemsx.cisd.etlserver.SimpleTypeExtractor
-fl3.type-extractor.file-format-type = PROPRIETARY
-fl3.type-extractor.data-set-type = FLOW_LANE
-fl3.storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
-# -------- Flow Lane 4 --------------------------------------
-fl4.incoming-dir = data/drop-box-4
-fl4.data-set-info-extractor = ch.ethz.bsse.cisd.dsu.dss.FlowLaneDataSetInfoExtractor
-fl4.data-set-info-extractor.entity-separator = ${data-set-file-name-entity-separator}
-fl4.data-set-info-extractor.index-of-space-code = 0
-fl4.type-extractor = ch.systemsx.cisd.etlserver.SimpleTypeExtractor
-fl4.type-extractor.file-format-type = PROPRIETARY
-fl4.type-extractor.data-set-type = FLOW_LANE
-fl4.storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
-# -------- Flow Lane 5 --------------------------------------
-fl5.incoming-dir = data/drop-box-5
-fl5.data-set-info-extractor = ch.ethz.bsse.cisd.dsu.dss.FlowLaneDataSetInfoExtractor
-fl5.data-set-info-extractor.entity-separator = ${data-set-file-name-entity-separator}
-fl5.data-set-info-extractor.index-of-space-code = 0
-fl5.type-extractor = ch.systemsx.cisd.etlserver.SimpleTypeExtractor
-fl5.type-extractor.file-format-type = PROPRIETARY
-fl5.type-extractor.data-set-type = FLOW_LANE
-fl5.storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
-# -------- Flow Lane 6 --------------------------------------
-fl6.incoming-dir = data/drop-box-6
-fl6.data-set-info-extractor = ch.ethz.bsse.cisd.dsu.dss.FlowLaneDataSetInfoExtractor
-fl6.data-set-info-extractor.entity-separator = ${data-set-file-name-entity-separator}
-fl6.data-set-info-extractor.index-of-space-code = 0
-fl6.type-extractor = ch.systemsx.cisd.etlserver.SimpleTypeExtractor
-fl6.type-extractor.file-format-type = PROPRIETARY
-fl6.type-extractor.data-set-type = FLOW_LANE
-fl6.storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
-# -------- Flow Lane 7 --------------------------------------
-fl7.incoming-dir = data/drop-box-7
-fl7.data-set-info-extractor = ch.ethz.bsse.cisd.dsu.dss.FlowLaneDataSetInfoExtractor
-fl7.data-set-info-extractor.entity-separator = ${data-set-file-name-entity-separator}
-fl7.data-set-info-extractor.index-of-space-code = 0
-fl7.type-extractor = ch.systemsx.cisd.etlserver.SimpleTypeExtractor
-fl7.type-extractor.file-format-type = PROPRIETARY
-fl7.type-extractor.data-set-type = FLOW_LANE
-fl7.storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
-# -------- Flow Lane 8 --------------------------------------
-fl8.incoming-dir = data/drop-box-8
-fl8.data-set-info-extractor = ch.ethz.bsse.cisd.dsu.dss.FlowLaneDataSetInfoExtractor
-fl8.data-set-info-extractor.entity-separator = ${data-set-file-name-entity-separator}
-fl8.data-set-info-extractor.index-of-space-code = 0
-fl8.type-extractor = ch.systemsx.cisd.etlserver.SimpleTypeExtractor
-fl8.type-extractor.file-format-type = PROPRIETARY
-fl8.type-extractor.data-set-type = FLOW_LANE
-fl8.storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-jython-version=2.7
diff --git a/deep_sequencing_unit/etc/log.xml b/deep_sequencing_unit/etc/log.xml
deleted file mode 100644
index 5cee0a68436..00000000000
--- a/deep_sequencing_unit/etc/log.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
-
-  <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
-     <layout class="org.apache.log4j.PatternLayout">
-       <param name="ConversionPattern" value="%d %-5p [%t] %c - %m%n"/>
-     </layout>
-  </appender>
-
-  <appender name="NULL" class="org.apache.log4j.varia.NullAppender" />
-
-  <root>
-     <priority value ="info" />
-     <appender-ref ref="STDOUT" />
-  </root>
-
-</log4j:configuration>
diff --git a/deep_sequencing_unit/etc/service.properties b/deep_sequencing_unit/etc/service.properties
deleted file mode 100644
index be9f4246ff6..00000000000
--- a/deep_sequencing_unit/etc/service.properties
+++ /dev/null
@@ -1,189 +0,0 @@
-# Unique code of this Data Store Server. Not more than 40 characters.
-data-store-server-code = DSS1
-
-# The root directory of the data store
-storeroot-dir = targets/playground/store
-root =  ${root-dir}
-incoming-root-dir = ${root-dir}
-
-# The directory where the command queue file is located; defaults to storeroot-dir 
-commandqueue-dir =
-
-# Port
-port = 8889
-
-# Session timeout in minutes
-session-timeout = 720
-
-use-ssl = false
-
-# Path to the keystore
-keystore.path = ../datastore_server/dist/etc/openBIS.keystore
-
-# Password of the keystore
-keystore.password = changeit
-
-# Key password of the keystore
-keystore.key-password = changeit
-
-# The check interval (in seconds)
-check-interval = 5
-
-# The time-out for clean up work in the shutdown sequence (in seconds).
-# Note that that the maximal time for the shutdown sequence to complete can be as large 
-# as twice this time.
-# Remark: On a network file system, it is not recommended to turn this value to something 
-# lower than 180.
-shutdown-timeout = 2
-
-# If free disk space goes below value defined here, a notification email will be sent.
-# Value must be specified in kilobytes (1048576 = 1024 * 1024 = 1GB). If no high water mark is
-# specified or if value is negative, the system will not be watching.
-highwater-mark = -1
-
-# If a data set is successfully registered it sends out an email to the registrator. 
-# If this property is not specified, no email is sent to the registrator. This property
-# does not affect the mails which are sent, when the data set could not be registered.
-notify-successful-registration = false
-
-# The URL of the openBIS server
-server-url = http://localhost:8888/openbis
-
-# The username to use when contacting the openBIS server
-username = etlserver_bsse
-
-# The password to use when contacting the openBIS server
-password = etlserver
-
-# The base URL for Web client access.
-download-url = http://localhost:${port}
-
-# SMTP properties (must start with 'mail' to be considered). 
-mail.smtp.host = file://targets/playground/email
-# mail.from = datastore_server@localhost
-
-# ---------------- Timing parameters for file system operations on remote shares.
-
-# Time (in seconds) to wait for any file system operation to finish. Operations exceeding this 
-# timeout will be terminated. 
-timeout = 60
-# Number of times that a timed out operation will be tried again (0 means: every file system 
-# operation will only ever be performed once).
-max-retries = 11
-# Time (in seconds) to wait after an operation has been timed out before re-trying.  
-failure-interval = 10 
-
-# The period of no write access that needs to pass before an incoming data item is considered 
-# complete and ready to be processed (in seconds) [default: 300]. 
-# Valid only when auto-detection method is used to determine if an incoming data are ready to be processed.
-quiet-period = 10
-
-# Globally used separator character which separates entities in a data set file name 
-data-set-file-name-entity-separator = :
-
-# Specifies what should happen if an error occurs during dataset processing. 
-# By default this flag is set to false and user has to modify the 'faulty paths file' 
-# each time the faulty dataset should be processed again.
-# Set this flag to true if the processing should be repeated after some time without manual intervention.
-# Note that this can increase the server load.
-# reprocess-faulty-datasets = false
-
-# ---------------------------------------------------------------------------
-# reporting and processing plugins configuration
-# ---------------------------------------------------------------------------
-
-# Comma separated names of reporting plugins. Each plugin should have configuration properties prefixed with its name.
-# If name has 'default-' prefix it will be used by default in data set Data View.
-reporting-plugins = illumina-summary
-
-# Label of the plugin which will be shown for the users.
-illumina-summary.label = Illumina Summary 
-# Comma separated list of dataset type codes which can be handled by this plugin.
-illumina-summary.dataset-types = BASECALL_STATS, ILLUMINA_GA_OUTPUT
-# Plugin class specification (together with the list of packages this class belongs to).
-illumina-summary.class = ch.ethz.bsse.cisd.dsu.dss.plugins.IlluminaSummaryReportingPlugin
-# The property file. Its content will be passed as a parameter to the plugin.
-illumina-summary.properties-file =
-
-processing-plugins = to-SOFT
-to-SOFT.label = Flow Lane to SOFT Exporter
-to-SOFT.dataset-types = FLOW_LANE
-to-SOFT.class = ch.ethz.bsse.cisd.dsu.dss.plugins.DataSetToSOFT
-#to-SOFT.properties-file = 
-
-# Comma separated names of processing threads. Each thread should have configuration properties prefixed with its name.
-# E.g. 'code-extractor' property for the thread 'my-etl' should be specified as 'my-etl.code-extractor'
-inputs = flow-cell, fl1, default, jbasecall
-
-default.incoming-dir = targets/playground/default_upload
-default.incoming-data-completeness-condition = auto-detection
-default.data-set-info-extractor = ch.systemsx.cisd.etlserver.DefaultDataSetInfoExtractor
-default.data-set-info-extractor.strip-file-extension = true
-default.data-set-info-extractor.entity-separator = ${data-set-file-name-entity-separator}
-default.data-set-info-extractor.space-code = BSSE_FLOWCELLS
-default.type-extractor = ch.systemsx.cisd.etlserver.SimpleTypeExtractor
-default.type-extractor.file-format-type = PROPRIETARY
-default.type-extractor.locator-type = RELATIVE_LOCATION
-default.type-extractor.data-set-type = ILLUMINA_GA_OUTPUT
-default.type-extractor.is-measured = true
-default.storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-default.storage-processor.processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
-
-# ---------------------------------------------------------------------------
-# 'flow-cell' thread configuration
-# ---------------------------------------------------------------------------
-# The directory to watch for incoming data.
-flow-cell.incoming-dir = targets/playground/incoming-flow-cell
-
-# Determines when the incoming data should be considered complete and ready to be processed.
-# Allowed values: 
-#  - auto-detection - when no write access will be detected for a specified 'quite-period'
-#  - marker-file		- when an appropriate marker file for the data exists. 
-# The default value is 'marker-file'.
-flow-cell.incoming-data-completeness-condition = auto-detection
-
-# The space the samples extracted by this thread belong to. If commented out or empty, then samples
-# are considered associated to a database instance (not space private). 
-# flow-cell.space-code = <change this>
-
-# ---------------- Plugin properties
-# The extractor class to use for code extraction
-flow-cell.data-set-info-extractor = ch.systemsx.cisd.etlserver.DefaultDataSetInfoExtractor
-flow-cell.data-set-info-extractor.strip-file-extension = true
-flow-cell.data-set-info-extractor.entity-separator = ${data-set-file-name-entity-separator}
-flow-cell.data-set-info-extractor.space-code = BSSE
-# Location of file containing data set properties 
-#flow-cell.data-set-info-extractor.data-set-properties-file-name = data-set.properties
-
-# The extractor class to use for type extraction
-flow-cell.type-extractor = ch.systemsx.cisd.etlserver.SimpleTypeExtractor
-flow-cell.type-extractor.file-format-type = PROPRIETARY
-flow-cell.type-extractor.locator-type = RELATIVE_LOCATION
-flow-cell.type-extractor.data-set-type = ILLUMINA_GA_OUTPUT
-flow-cell.type-extractor.is-measured = true
-
-# The storage processor (IStorageProcessor implementation)
-flow-cell.storage-processor = ch.ethz.bsse.cisd.dsu.dss.StorageProcessor
-flow-cell.storage-processor.processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-flow-cell.storage-processor.flow-lane-drop-box-template = targets/playground/drop-box-{0}
-flow-cell.storage-processor.entity-separator = ${data-set-file-name-entity-separator}
-flow-cell.storage-processor.transfer.FMI = targets/playground/drop-box-fmi
-flow-cell.storage-processor.meta-data-file-prefix = PREFIX_FOR_TSV
-
-# -------- Flow Lane 1 --------------------------------------
-fl1.incoming-dir = targets/playground/drop-box-1
-fl1.data-set-info-extractor = ch.ethz.bsse.cisd.dsu.dss.FlowLaneDataSetInfoExtractor
-fl1.data-set-info-extractor.entity-separator = ${data-set-file-name-entity-separator}
-fl1.data-set-info-extractor.index-of-space-code = 0
-fl1.type-extractor = ch.systemsx.cisd.etlserver.SimpleTypeExtractor
-fl1.type-extractor.file-format-type = SRF
-fl1.type-extractor.data-set-type = SRF_PER_LANE
-fl1.storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
-jbasecall.incoming-dir = targets/playground/incoming-jython-basecall-stats
-jbasecall.top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.JythonTopLevelDataSetHandler
-jbasecall.script-path = ${root}/dss/jython_scripts/data-set-handler-basecall-stats.py
-jbasecall.storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-jbasecall.incoming-data-completeness-condition = marker-file
-jython-version=2.7
diff --git a/deep_sequencing_unit/etc/web-client.properties b/deep_sequencing_unit/etc/web-client.properties
deleted file mode 100644
index f946e8e9637..00000000000
--- a/deep_sequencing_unit/etc/web-client.properties
+++ /dev/null
@@ -1,77 +0,0 @@
-# Experimental: Enable moving entities to trash (non-permanent deletion).
-# Default value: false
-enable-trash = true
-
-# Default view mode that should be used if user doesn't have it specified in URL. 
-# Options: 'NORMAL' (standard mode - default), 'SIMPLE' (readonly mode with simplified GUI). 
-#
-#default-view-mode = SIMPLE
-
-# Flag specifying whether default login mode is anonymous or not. 
-# If true a user-for-anonymous-login has to be defined in service.properties
-# Default value: false
-#default-anonymous-login = true
-
-# Maximal number of visible columns in tables. Default: 50.
-max-visible-columns = 25
-
-# Should the feature of adding unofficial/ad-hoc terms to vocabularies be turned on.
-# Default value: false 
-allow-adding-unofficial-terms = true
-
-# (optional) List of data set types for which there should be an image overview shown in dataset tables.
-# If not specified image overview will not be shown for any datasets. 
-data-set-types-with-image-overview = HCS_IMAGE, UNKNOWN
-
-# (optional) Allows power users adding vocabulary terms when editing the form.
-# If not specified, default is false
-# allow-adding-unofficial-terms = true
-
-# Configuration of entity (experiment, sample, data set, material) detail views.
-#
-# Mandatory properties: 
-#   - view (entity detail view id) 
-#   - types (list of entity type codes)
-# Optional properties: 
-#   - hide-sections (list of section ids)
-#   - hide-smart-view (removes "Smart View" from Data Set Detail View -> Data View) (generic_dataset_viewer)
-#   - hide-file-view (removes "File View" from Data Set Detail View -> Data View) (generic_dataset_viewer)
-# Available sections in entity-detail-views:
-#   generic_dataset_viewer
-#   	data-set-data-section
-#   	data-set-parents-section
-#   	data-set-children-section
-#   	data-set-contained-section
-#   	query-section
-#   generic_experiment_viewer
-#   	data-sets-section
-#   	attachment-section
-#   	query-section
-#   	experiment-sample-section
-#   generic_sample_viewer
-#   	container-sample-section
-#   	derived-samples-section
-#   	parent-samples-section
-#   	data-sets-section
-#   	attachment-section
-#   	query-section
-#   generic_material_viewer
-#   	query-section
-#
-# Example:
-# 
-detail-views = sample-view, experiment-view, data-view  
-
-sample-view.view = generic_sample_viewer
-sample-view.types = CELL_PLATE, CONTROL_LAYOUT
-sample-view.hide-sections = attachment-section, module-section
-
-experiment-view.view = generic_experiment_viewer
-experiment-view.types = COMPOUND_HCS
-experiment-view.hide-sections = attachment-section
-
-data-view.view = generic_dataset_viewer
-data-view.types = HCS_IMAGE
-data-view.hide-smart-view = false
-data-view.hide-file-view = false
-
diff --git a/deep_sequencing_unit/gradle/wrapper/gradle-wrapper.jar b/deep_sequencing_unit/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 5c2d1cf016b3885f6930543d57b744ea8c220a1a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 55616
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
I5eVr20d63LbpQYW

diff --git a/deep_sequencing_unit/gradle/wrapper/gradle-wrapper.properties b/deep_sequencing_unit/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 7745c4ec463..00000000000
--- a/deep_sequencing_unit/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-distributionUrl=https\://sissource.ethz.ch/openbis/openbis-public/openbis-ivy/-/raw/main/gradle/distribution/7.4/gradle-7.4-bin.zip
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
diff --git a/deep_sequencing_unit/gradlew b/deep_sequencing_unit/gradlew
deleted file mode 100755
index 83f2acfdc31..00000000000
--- a/deep_sequencing_unit/gradlew
+++ /dev/null
@@ -1,188 +0,0 @@
-#!/usr/bin/env sh
-
-#
-# Copyright 2015 the original author or authors.
-#
-# 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
-#
-#      https://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.
-#
-
-##############################################################################
-##
-##  Gradle start up script for UN*X
-##
-##############################################################################
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-        PRG="$link"
-    else
-        PRG=`dirname "$PRG"`"/$link"
-    fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn () {
-    echo "$*"
-}
-
-die () {
-    echo
-    echo "$*"
-    echo
-    exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "`uname`" in
-  CYGWIN* )
-    cygwin=true
-    ;;
-  Darwin* )
-    darwin=true
-    ;;
-  MINGW* )
-    msys=true
-    ;;
-  NONSTOP* )
-    nonstop=true
-    ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-        # IBM's JDK on AIX uses strange locations for the executables
-        JAVACMD="$JAVA_HOME/jre/sh/java"
-    else
-        JAVACMD="$JAVA_HOME/bin/java"
-    fi
-    if [ ! -x "$JAVACMD" ] ; then
-        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-    fi
-else
-    JAVACMD="java"
-    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
-    MAX_FD_LIMIT=`ulimit -H -n`
-    if [ $? -eq 0 ] ; then
-        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
-            MAX_FD="$MAX_FD_LIMIT"
-        fi
-        ulimit -n $MAX_FD
-        if [ $? -ne 0 ] ; then
-            warn "Could not set maximum file descriptor limit: $MAX_FD"
-        fi
-    else
-        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
-    fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
-    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
-    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
-    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-    JAVACMD=`cygpath --unix "$JAVACMD"`
-
-    # We build the pattern for arguments to be converted via cygpath
-    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
-    SEP=""
-    for dir in $ROOTDIRSRAW ; do
-        ROOTDIRS="$ROOTDIRS$SEP$dir"
-        SEP="|"
-    done
-    OURCYGPATTERN="(^($ROOTDIRS))"
-    # Add a user-defined pattern to the cygpath arguments
-    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
-        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
-    fi
-    # Now convert the arguments - kludge to limit ourselves to /bin/sh
-    i=0
-    for arg in "$@" ; do
-        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
-        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
-
-        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
-            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
-        else
-            eval `echo args$i`="\"$arg\""
-        fi
-        i=$((i+1))
-    done
-    case $i in
-        (0) set -- ;;
-        (1) set -- "$args0" ;;
-        (2) set -- "$args0" "$args1" ;;
-        (3) set -- "$args0" "$args1" "$args2" ;;
-        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
-        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
-        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
-        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
-        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
-        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
-    esac
-fi
-
-# Escape application args
-save () {
-    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
-    echo " "
-}
-APP_ARGS=$(save "$@")
-
-# Collect all arguments for the java command, following the shell quoting and substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-
-# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
-if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
-  cd "$(dirname "$0")"
-fi
-
-exec "$JAVACMD" "$@"
diff --git a/deep_sequencing_unit/gradlew.bat b/deep_sequencing_unit/gradlew.bat
deleted file mode 100644
index 24467a141f7..00000000000
--- a/deep_sequencing_unit/gradlew.bat
+++ /dev/null
@@ -1,100 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem      https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem  Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/deep_sequencing_unit/metadata/etc/log.xml b/deep_sequencing_unit/metadata/etc/log.xml
deleted file mode 100644
index 5cee0a68436..00000000000
--- a/deep_sequencing_unit/metadata/etc/log.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
-
-  <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
-     <layout class="org.apache.log4j.PatternLayout">
-       <param name="ConversionPattern" value="%d %-5p [%t] %c - %m%n"/>
-     </layout>
-  </appender>
-
-  <appender name="NULL" class="org.apache.log4j.varia.NullAppender" />
-
-  <root>
-     <priority value ="info" />
-     <appender-ref ref="STDOUT" />
-  </root>
-
-</log4j:configuration>
diff --git a/deep_sequencing_unit/metadata/etc/openBIS.keystore b/deep_sequencing_unit/metadata/etc/openBIS.keystore
deleted file mode 100644
index 28d6c1945533908c76f28785953cbed4004c4555..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 98036
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
GrT!mNl@~Jr

diff --git a/deep_sequencing_unit/metadata/etc/service.properties b/deep_sequencing_unit/metadata/etc/service.properties
deleted file mode 100644
index d2377c4fad0..00000000000
--- a/deep_sequencing_unit/metadata/etc/service.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-openbis-user = kohleman
-openbis-password = password
-openbis-server-url = http://127.0.0.1:8888
-
-pathinfo-db-connection-string = jdbc:postgresql://localhost:5432/pathinfo_productive
-pathinfo-db-user = postgres
-pathinfo-db-password = postgres
-jython-version=2.7
diff --git a/deep_sequencing_unit/resource/DSU TrackingClient.launch b/deep_sequencing_unit/resource/DSU TrackingClient.launch
deleted file mode 100644
index f27f8805548..00000000000
--- a/deep_sequencing_unit/resource/DSU TrackingClient.launch	
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingClient.java"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="1"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
-</listAttribute>
-<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry containerPath=&quot;org.eclipse.jdt.launching.JRE_CONTAINER&quot; javaProject=&quot;deep_sequencing_unit&quot; path=&quot;1&quot; type=&quot;4&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry path=&quot;3&quot; projectName=&quot;openbis&quot; type=&quot;1&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry path=&quot;3&quot; projectName=&quot;authentication&quot; type=&quot;1&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry path=&quot;3&quot; projectName=&quot;openbis-common&quot; type=&quot;1&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry path=&quot;3&quot; projectName=&quot;openbis_api&quot; type=&quot;1&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry path=&quot;3&quot; projectName=&quot;dbmigration&quot; type=&quot;1&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry path=&quot;3&quot; projectName=&quot;common&quot; type=&quot;1&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/libraries/hibernate-search/jsr250-api.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry id=&quot;org.eclipse.jdt.launching.classpathentry.defaultClasspath&quot;&gt;&#10;&lt;memento exportedEntriesOnly=&quot;false&quot; project=&quot;deep_sequencing_unit&quot;/&gt;&#10;&lt;/runtimeClasspathEntry&gt;&#10;"/>
-</listAttribute>
-<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="ch.ethz.bsse.cisd.dsu.tracking.main.TrackingClient"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="deep_sequencing_unit"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx1G -Djavax.net.ssl.trustStore=etc/openBIS.keystore"/>
-<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:deep_sequencing_unit/tracking}"/>
-</launchConfiguration>
diff --git a/deep_sequencing_unit/resource/dependency-structure.ddf b/deep_sequencing_unit/resource/dependency-structure.ddf
deleted file mode 100644
index e152acbfae5..00000000000
--- a/deep_sequencing_unit/resource/dependency-structure.ddf
+++ /dev/null
@@ -1,16 +0,0 @@
-#show allResults
-
-{root} = ch.ethz.bsse.cisd.dsu
-{dss} = ${root}.dss
-{openbis} = ch.systemsx.cisd.openbis
-
-######################################################################
-# Check dependencies to openbis
-
-[dss] = ${dss}.*
-[private_openbis] = ${openbis}.* excluding [dss] ${openbis}.dss.generic.shared.* ${openbis}.generic.shared.* ${openbis}.dss.generic.server.plugins.* ${openbis}.common.*
-
-check sets [dss]
-
-check [dss] independentOf [private_openbis]
-
diff --git a/deep_sequencing_unit/resource/dsu-master-data.py b/deep_sequencing_unit/resource/dsu-master-data.py
deleted file mode 100644
index 0a2e7e5b7db..00000000000
--- a/deep_sequencing_unit/resource/dsu-master-data.py
+++ /dev/null
@@ -1,3623 +0,0 @@
-# -*- coding: utf-8 -*-
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-
-tr = service.transaction()
-
-
-file_type_FASTQ_PHRED_64 = tr.createNewFileFormatType('FASTQ_PHRED_64')
-file_type_FASTQ_PHRED_64.setDescription('FastQ Format with PHRED+64 quality values (as deliverd by Illumina GA Pipeline >= 1.3)')
-
-file_type_HDF5 = tr.createNewFileFormatType('HDF5')
-file_type_HDF5.setDescription('Hierarchical Data Format File, version 5')
-
-file_type_PROPRIETARY = tr.createNewFileFormatType('PROPRIETARY')
-file_type_PROPRIETARY.setDescription('Proprietary Format File')
-
-file_type_SRF = tr.createNewFileFormatType('SRF')
-file_type_SRF.setDescription('Sequence Read Format File')
-
-file_type_TIFF = tr.createNewFileFormatType('TIFF')
-file_type_TIFF.setDescription('TIFF File')
-
-file_type_TSV = tr.createNewFileFormatType('TSV')
-file_type_TSV.setDescription('Tab Separated Values File')
-
-file_type_XML = tr.createNewFileFormatType('XML')
-file_type_XML.setDescription('XML File')
-
-vocabulary_STORAGE_FORMAT = tr.createNewVocabulary('STORAGE_FORMAT')
-vocabulary_STORAGE_FORMAT.setDescription('The on-disk storage format of a data set')
-vocabulary_STORAGE_FORMAT.setUrlTemplate(None)
-vocabulary_STORAGE_FORMAT.setManagedInternally(True)
-vocabulary_STORAGE_FORMAT.setInternalNamespace(True)
-vocabulary_STORAGE_FORMAT.setChosenFromList(True)
-
-vocabulary_term_STORAGE_FORMAT_PROPRIETARY = tr.createNewVocabularyTerm('PROPRIETARY')
-vocabulary_term_STORAGE_FORMAT_PROPRIETARY.setDescription(None)
-vocabulary_term_STORAGE_FORMAT_PROPRIETARY.setLabel(None)
-vocabulary_term_STORAGE_FORMAT_PROPRIETARY.setOrdinal(1)
-vocabulary_STORAGE_FORMAT.addTerm(vocabulary_term_STORAGE_FORMAT_PROPRIETARY)
-
-vocabulary_term_STORAGE_FORMAT_BDS_DIRECTORY = tr.createNewVocabularyTerm('BDS_DIRECTORY')
-vocabulary_term_STORAGE_FORMAT_BDS_DIRECTORY.setDescription(None)
-vocabulary_term_STORAGE_FORMAT_BDS_DIRECTORY.setLabel(None)
-vocabulary_term_STORAGE_FORMAT_BDS_DIRECTORY.setOrdinal(2)
-vocabulary_STORAGE_FORMAT.addTerm(vocabulary_term_STORAGE_FORMAT_BDS_DIRECTORY)
-
-vocabulary_AFFILIATION = tr.createNewVocabulary('AFFILIATION')
-vocabulary_AFFILIATION.setDescription('Where will the data be shipped after analysis and where will the bill be sent to')
-vocabulary_AFFILIATION.setUrlTemplate(None)
-vocabulary_AFFILIATION.setManagedInternally(False)
-vocabulary_AFFILIATION.setInternalNamespace(False)
-vocabulary_AFFILIATION.setChosenFromList(True)
-
-vocabulary_term_AFFILIATION_NOVARTIS = tr.createNewVocabularyTerm('NOVARTIS')
-vocabulary_term_AFFILIATION_NOVARTIS.setDescription(None)
-vocabulary_term_AFFILIATION_NOVARTIS.setLabel('Novartis')
-vocabulary_term_AFFILIATION_NOVARTIS.setOrdinal(6)
-vocabulary_AFFILIATION.addTerm(vocabulary_term_AFFILIATION_NOVARTIS)
-
-vocabulary_term_AFFILIATION_ETHZ_NON_BSSE = tr.createNewVocabularyTerm('ETHZ_NON_BSSE')
-vocabulary_term_AFFILIATION_ETHZ_NON_BSSE.setDescription(None)
-vocabulary_term_AFFILIATION_ETHZ_NON_BSSE.setLabel('ETHZ non-BSSE')
-vocabulary_term_AFFILIATION_ETHZ_NON_BSSE.setOrdinal(9)
-vocabulary_AFFILIATION.addTerm(vocabulary_term_AFFILIATION_ETHZ_NON_BSSE)
-
-vocabulary_term_AFFILIATION_OTHER = tr.createNewVocabularyTerm('OTHER')
-vocabulary_term_AFFILIATION_OTHER.setDescription(None)
-vocabulary_term_AFFILIATION_OTHER.setLabel('Other')
-vocabulary_term_AFFILIATION_OTHER.setOrdinal(8)
-vocabulary_AFFILIATION.addTerm(vocabulary_term_AFFILIATION_OTHER)
-
-vocabulary_term_AFFILIATION_BSSE = tr.createNewVocabularyTerm('BSSE')
-vocabulary_term_AFFILIATION_BSSE.setDescription(None)
-vocabulary_term_AFFILIATION_BSSE.setLabel('BSSE')
-vocabulary_term_AFFILIATION_BSSE.setOrdinal(7)
-vocabulary_AFFILIATION.addTerm(vocabulary_term_AFFILIATION_BSSE)
-
-vocabulary_term_AFFILIATION_UNI_ZUERICH = tr.createNewVocabularyTerm('UNI_ZUERICH')
-vocabulary_term_AFFILIATION_UNI_ZUERICH.setDescription(None)
-vocabulary_term_AFFILIATION_UNI_ZUERICH.setLabel(None)
-vocabulary_term_AFFILIATION_UNI_ZUERICH.setOrdinal(11)
-vocabulary_AFFILIATION.addTerm(vocabulary_term_AFFILIATION_UNI_ZUERICH)
-
-vocabulary_term_AFFILIATION_BIOCENTER_BASEL = tr.createNewVocabularyTerm('BIOCENTER_BASEL')
-vocabulary_term_AFFILIATION_BIOCENTER_BASEL.setDescription(None)
-vocabulary_term_AFFILIATION_BIOCENTER_BASEL.setLabel('Biocenter Basel')
-vocabulary_term_AFFILIATION_BIOCENTER_BASEL.setOrdinal(3)
-vocabulary_AFFILIATION.addTerm(vocabulary_term_AFFILIATION_BIOCENTER_BASEL)
-
-vocabulary_term_AFFILIATION_PHIX = tr.createNewVocabularyTerm('PHIX')
-vocabulary_term_AFFILIATION_PHIX.setDescription(None)
-vocabulary_term_AFFILIATION_PHIX.setLabel(None)
-vocabulary_term_AFFILIATION_PHIX.setOrdinal(5)
-vocabulary_AFFILIATION.addTerm(vocabulary_term_AFFILIATION_PHIX)
-
-vocabulary_term_AFFILIATION_UNI_BERN = tr.createNewVocabularyTerm('UNI_BERN')
-vocabulary_term_AFFILIATION_UNI_BERN.setDescription(None)
-vocabulary_term_AFFILIATION_UNI_BERN.setLabel(None)
-vocabulary_term_AFFILIATION_UNI_BERN.setOrdinal(10)
-vocabulary_AFFILIATION.addTerm(vocabulary_term_AFFILIATION_UNI_BERN)
-
-vocabulary_term_AFFILIATION_FMI = tr.createNewVocabularyTerm('FMI')
-vocabulary_term_AFFILIATION_FMI.setDescription(None)
-vocabulary_term_AFFILIATION_FMI.setLabel('FMI')
-vocabulary_term_AFFILIATION_FMI.setOrdinal(2)
-vocabulary_AFFILIATION.addTerm(vocabulary_term_AFFILIATION_FMI)
-
-vocabulary_term_AFFILIATION_UNIVERSITY_HOSPITAL_ZURICH = tr.createNewVocabularyTerm('UNIVERSITY_HOSPITAL_ZURICH')
-vocabulary_term_AFFILIATION_UNIVERSITY_HOSPITAL_ZURICH.setDescription(None)
-vocabulary_term_AFFILIATION_UNIVERSITY_HOSPITAL_ZURICH.setLabel(None)
-vocabulary_term_AFFILIATION_UNIVERSITY_HOSPITAL_ZURICH.setOrdinal(12)
-vocabulary_AFFILIATION.addTerm(vocabulary_term_AFFILIATION_UNIVERSITY_HOSPITAL_ZURICH)
-
-vocabulary_term_AFFILIATION_UNIVERSITY_BASEL = tr.createNewVocabularyTerm('UNIVERSITY_BASEL')
-vocabulary_term_AFFILIATION_UNIVERSITY_BASEL.setDescription(None)
-vocabulary_term_AFFILIATION_UNIVERSITY_BASEL.setLabel('University of Basel')
-vocabulary_term_AFFILIATION_UNIVERSITY_BASEL.setOrdinal(4)
-vocabulary_AFFILIATION.addTerm(vocabulary_term_AFFILIATION_UNIVERSITY_BASEL)
-
-vocabulary_AGILENT_KIT = tr.createNewVocabulary('AGILENT_KIT')
-vocabulary_AGILENT_KIT.setDescription(None)
-vocabulary_AGILENT_KIT.setUrlTemplate(None)
-vocabulary_AGILENT_KIT.setManagedInternally(False)
-vocabulary_AGILENT_KIT.setInternalNamespace(False)
-vocabulary_AGILENT_KIT.setChosenFromList(True)
-
-vocabulary_term_AGILENT_KIT_AGILENT_DNA_KIT_1000 = tr.createNewVocabularyTerm('AGILENT_DNA_KIT_1000')
-vocabulary_term_AGILENT_KIT_AGILENT_DNA_KIT_1000.setDescription(None)
-vocabulary_term_AGILENT_KIT_AGILENT_DNA_KIT_1000.setLabel(None)
-vocabulary_term_AGILENT_KIT_AGILENT_DNA_KIT_1000.setOrdinal(1)
-vocabulary_AGILENT_KIT.addTerm(vocabulary_term_AGILENT_KIT_AGILENT_DNA_KIT_1000)
-
-vocabulary_term_AGILENT_KIT_AGILENT_HIGH_SENSITIVITY_DNA_KIT = tr.createNewVocabularyTerm('AGILENT_HIGH_SENSITIVITY_DNA_KIT')
-vocabulary_term_AGILENT_KIT_AGILENT_HIGH_SENSITIVITY_DNA_KIT.setDescription(None)
-vocabulary_term_AGILENT_KIT_AGILENT_HIGH_SENSITIVITY_DNA_KIT.setLabel(None)
-vocabulary_term_AGILENT_KIT_AGILENT_HIGH_SENSITIVITY_DNA_KIT.setOrdinal(2)
-vocabulary_AGILENT_KIT.addTerm(vocabulary_term_AGILENT_KIT_AGILENT_HIGH_SENSITIVITY_DNA_KIT)
-
-vocabulary_ALIGNMENT_SOFTWARE = tr.createNewVocabulary('ALIGNMENT_SOFTWARE')
-vocabulary_ALIGNMENT_SOFTWARE.setDescription('If an alignment is requested, which software package should be use?')
-vocabulary_ALIGNMENT_SOFTWARE.setUrlTemplate(None)
-vocabulary_ALIGNMENT_SOFTWARE.setManagedInternally(False)
-vocabulary_ALIGNMENT_SOFTWARE.setInternalNamespace(False)
-vocabulary_ALIGNMENT_SOFTWARE.setChosenFromList(True)
-
-vocabulary_term_ALIGNMENT_SOFTWARE_BOWTIE = tr.createNewVocabularyTerm('BOWTIE')
-vocabulary_term_ALIGNMENT_SOFTWARE_BOWTIE.setDescription(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_BOWTIE.setLabel(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_BOWTIE.setOrdinal(9)
-vocabulary_ALIGNMENT_SOFTWARE.addTerm(vocabulary_term_ALIGNMENT_SOFTWARE_BOWTIE)
-
-vocabulary_term_ALIGNMENT_SOFTWARE_BWA = tr.createNewVocabularyTerm('BWA')
-vocabulary_term_ALIGNMENT_SOFTWARE_BWA.setDescription(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_BWA.setLabel(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_BWA.setOrdinal(6)
-vocabulary_ALIGNMENT_SOFTWARE.addTerm(vocabulary_term_ALIGNMENT_SOFTWARE_BWA)
-
-vocabulary_term_ALIGNMENT_SOFTWARE_BOWTIE_0127 = tr.createNewVocabularyTerm('BOWTIE_0.12.7')
-vocabulary_term_ALIGNMENT_SOFTWARE_BOWTIE_0127.setDescription(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_BOWTIE_0127.setLabel(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_BOWTIE_0127.setOrdinal(7)
-vocabulary_ALIGNMENT_SOFTWARE.addTerm(vocabulary_term_ALIGNMENT_SOFTWARE_BOWTIE_0127)
-
-vocabulary_term_ALIGNMENT_SOFTWARE_ELAND = tr.createNewVocabularyTerm('ELAND')
-vocabulary_term_ALIGNMENT_SOFTWARE_ELAND.setDescription(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_ELAND.setLabel(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_ELAND.setOrdinal(3)
-vocabulary_ALIGNMENT_SOFTWARE.addTerm(vocabulary_term_ALIGNMENT_SOFTWARE_ELAND)
-
-vocabulary_term_ALIGNMENT_SOFTWARE_NOT_NEEDED = tr.createNewVocabularyTerm('NOT_NEEDED')
-vocabulary_term_ALIGNMENT_SOFTWARE_NOT_NEEDED.setDescription(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_NOT_NEEDED.setLabel(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_NOT_NEEDED.setOrdinal(1)
-vocabulary_ALIGNMENT_SOFTWARE.addTerm(vocabulary_term_ALIGNMENT_SOFTWARE_NOT_NEEDED)
-
-vocabulary_term_ALIGNMENT_SOFTWARE_MAQ = tr.createNewVocabularyTerm('MAQ')
-vocabulary_term_ALIGNMENT_SOFTWARE_MAQ.setDescription(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_MAQ.setLabel(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_MAQ.setOrdinal(5)
-vocabulary_ALIGNMENT_SOFTWARE.addTerm(vocabulary_term_ALIGNMENT_SOFTWARE_MAQ)
-
-vocabulary_term_ALIGNMENT_SOFTWARE_NOVOALIGN = tr.createNewVocabularyTerm('NOVOALIGN')
-vocabulary_term_ALIGNMENT_SOFTWARE_NOVOALIGN.setDescription(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_NOVOALIGN.setLabel(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_NOVOALIGN.setOrdinal(8)
-vocabulary_ALIGNMENT_SOFTWARE.addTerm(vocabulary_term_ALIGNMENT_SOFTWARE_NOVOALIGN)
-
-vocabulary_BARCODES = tr.createNewVocabulary('BARCODES')
-vocabulary_BARCODES.setDescription('Index 1 for Illumina Indexing')
-vocabulary_BARCODES.setUrlTemplate(None)
-vocabulary_BARCODES.setManagedInternally(False)
-vocabulary_BARCODES.setInternalNamespace(False)
-vocabulary_BARCODES.setChosenFromList(True)
-
-vocabulary_term_BARCODES_TCGGCAA = tr.createNewVocabularyTerm('TCGGCAA')
-vocabulary_term_BARCODES_TCGGCAA.setDescription(None)
-vocabulary_term_BARCODES_TCGGCAA.setLabel('DNA Adapter 48')
-vocabulary_term_BARCODES_TCGGCAA.setOrdinal(90)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_TCGGCAA)
-
-vocabulary_term_BARCODES_TATAATA = tr.createNewVocabularyTerm('TATAATA')
-vocabulary_term_BARCODES_TATAATA.setDescription(None)
-vocabulary_term_BARCODES_TATAATA.setLabel('DNA Adapter 44')
-vocabulary_term_BARCODES_TATAATA.setOrdinal(86)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_TATAATA)
-
-vocabulary_term_BARCODES_CTAGCTA = tr.createNewVocabularyTerm('CTAGCTA')
-vocabulary_term_BARCODES_CTAGCTA.setDescription(None)
-vocabulary_term_BARCODES_CTAGCTA.setLabel('DNA Adapter 38')
-vocabulary_term_BARCODES_CTAGCTA.setOrdinal(80)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CTAGCTA)
-
-vocabulary_term_BARCODES_GTGAAAC = tr.createNewVocabularyTerm('GTGAAAC')
-vocabulary_term_BARCODES_GTGAAAC.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_GTGAAAC.setLabel('Index19 GTGAAAC')
-vocabulary_term_BARCODES_GTGAAAC.setOrdinal(18)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_GTGAAAC)
-
-vocabulary_term_BARCODES_CGTACGT = tr.createNewVocabularyTerm('CGTACGT')
-vocabulary_term_BARCODES_CGTACGT.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_CGTACGT.setLabel('Index22 CGTACGT')
-vocabulary_term_BARCODES_CGTACGT.setOrdinal(21)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CGTACGT)
-
-vocabulary_term_BARCODES_CGAGGCTG = tr.createNewVocabularyTerm('CGAGGCTG')
-vocabulary_term_BARCODES_CGAGGCTG.setDescription('Nextera DNA')
-vocabulary_term_BARCODES_CGAGGCTG.setLabel('Index1 (i7) N710 CGAGGCTG')
-vocabulary_term_BARCODES_CGAGGCTG.setOrdinal(34)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CGAGGCTG)
-
-vocabulary_term_BARCODES_TCATTCA = tr.createNewVocabularyTerm('TCATTCA')
-vocabulary_term_BARCODES_TCATTCA.setDescription(None)
-vocabulary_term_BARCODES_TCATTCA.setLabel('DNA Adapter 45')
-vocabulary_term_BARCODES_TCATTCA.setOrdinal(87)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_TCATTCA)
-
-vocabulary_term_BARCODES_TAGCTTA = tr.createNewVocabularyTerm('TAGCTTA')
-vocabulary_term_BARCODES_TAGCTTA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_TAGCTTA.setLabel('Index10 TAGCTTA')
-vocabulary_term_BARCODES_TAGCTTA.setOrdinal(10)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_TAGCTTA)
-
-vocabulary_term_BARCODES_AGCATAA = tr.createNewVocabularyTerm('AGCATAA')
-vocabulary_term_BARCODES_AGCATAA.setDescription(None)
-vocabulary_term_BARCODES_AGCATAA.setLabel('20 AGCATAA')
-vocabulary_term_BARCODES_AGCATAA.setOrdinal(42)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_AGCATAA)
-
-vocabulary_term_BARCODES_TTCGTCA = tr.createNewVocabularyTerm('TTCGTCA')
-vocabulary_term_BARCODES_TTCGTCA.setDescription(None)
-vocabulary_term_BARCODES_TTCGTCA.setLabel('17 TTCGTCA')
-vocabulary_term_BARCODES_TTCGTCA.setOrdinal(40)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_TTCGTCA)
-
-vocabulary_term_BARCODES_TTACTTA = tr.createNewVocabularyTerm('TTACTTA')
-vocabulary_term_BARCODES_TTACTTA.setDescription(None)
-vocabulary_term_BARCODES_TTACTTA.setLabel('74 TTACTT')
-vocabulary_term_BARCODES_TTACTTA.setOrdinal(58)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_TTACTTA)
-
-vocabulary_term_BARCODES_GAAGCCA = tr.createNewVocabularyTerm('GAAGCCA')
-vocabulary_term_BARCODES_GAAGCCA.setDescription(None)
-vocabulary_term_BARCODES_GAAGCCA.setLabel('52 GAAGCC')
-vocabulary_term_BARCODES_GAAGCCA.setOrdinal(50)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_GAAGCCA)
-
-vocabulary_term_BARCODES_CTCTCTAC = tr.createNewVocabularyTerm('CTCTCTAC')
-vocabulary_term_BARCODES_CTCTCTAC.setDescription('Nextera DNA')
-vocabulary_term_BARCODES_CTCTCTAC.setLabel('Index1 (i7) N707 CTCTCTAC')
-vocabulary_term_BARCODES_CTCTCTAC.setOrdinal(31)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CTCTCTAC)
-
-vocabulary_term_BARCODES_CGGAATA = tr.createNewVocabularyTerm('CGGAATA')
-vocabulary_term_BARCODES_CGGAATA.setDescription(None)
-vocabulary_term_BARCODES_CGGAATA.setLabel('DNA Adapter 37')
-vocabulary_term_BARCODES_CGGAATA.setOrdinal(79)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CGGAATA)
-
-vocabulary_term_BARCODES_GTAGAGA = tr.createNewVocabularyTerm('GTAGAGA')
-vocabulary_term_BARCODES_GTAGAGA.setDescription(None)
-vocabulary_term_BARCODES_GTAGAGA.setLabel('DNA Adapter 17')
-vocabulary_term_BARCODES_GTAGAGA.setOrdinal(62)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_GTAGAGA)
-
-vocabulary_term_BARCODES_CCGTCCA = tr.createNewVocabularyTerm('CCGTCCA')
-vocabulary_term_BARCODES_CCGTCCA.setDescription(None)
-vocabulary_term_BARCODES_CCGTCCA.setLabel('DNA Adapter 16')
-vocabulary_term_BARCODES_CCGTCCA.setOrdinal(61)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CCGTCCA)
-
-vocabulary_term_BARCODES_CTTGTAA = tr.createNewVocabularyTerm('CTTGTAA')
-vocabulary_term_BARCODES_CTTGTAA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_CTTGTAA.setLabel('Index12 CTTGTAA')
-vocabulary_term_BARCODES_CTTGTAA.setOrdinal(12)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CTTGTAA)
-
-vocabulary_term_BARCODES_AGTCAAC = tr.createNewVocabularyTerm('AGTCAAC')
-vocabulary_term_BARCODES_AGTCAAC.setDescription(None)
-vocabulary_term_BARCODES_AGTCAAC.setLabel('Index13 AGTCAAC')
-vocabulary_term_BARCODES_AGTCAAC.setOrdinal(91)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_AGTCAAC)
-
-vocabulary_term_BARCODES_CTGACCA = tr.createNewVocabularyTerm('CTGACCA')
-vocabulary_term_BARCODES_CTGACCA.setDescription(None)
-vocabulary_term_BARCODES_CTGACCA.setLabel('50 CTGACC')
-vocabulary_term_BARCODES_CTGACCA.setOrdinal(49)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CTGACCA)
-
-vocabulary_term_BARCODES_TGACCAA = tr.createNewVocabularyTerm('TGACCAA')
-vocabulary_term_BARCODES_TGACCAA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_TGACCAA.setLabel('Index4 TGACCAA')
-vocabulary_term_BARCODES_TGACCAA.setOrdinal(4)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_TGACCAA)
-
-vocabulary_term_BARCODES_ATCACGA = tr.createNewVocabularyTerm('ATCACGA')
-vocabulary_term_BARCODES_ATCACGA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_ATCACGA.setLabel('Index1 ATCACGA')
-vocabulary_term_BARCODES_ATCACGA.setOrdinal(1)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_ATCACGA)
-
-vocabulary_term_BARCODES_TCCCGAA = tr.createNewVocabularyTerm('TCCCGAA')
-vocabulary_term_BARCODES_TCCCGAA.setDescription(None)
-vocabulary_term_BARCODES_TCCCGAA.setLabel('DNA Adapter 46')
-vocabulary_term_BARCODES_TCCCGAA.setOrdinal(88)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_TCCCGAA)
-
-vocabulary_term_BARCODES_CAAAAGA = tr.createNewVocabularyTerm('CAAAAGA')
-vocabulary_term_BARCODES_CAAAAGA.setDescription(None)
-vocabulary_term_BARCODES_CAAAAGA.setLabel('DNA Adapter 28')
-vocabulary_term_BARCODES_CAAAAGA.setOrdinal(70)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CAAAAGA)
-
-vocabulary_term_BARCODES_CGTACTAG = tr.createNewVocabularyTerm('CGTACTAG')
-vocabulary_term_BARCODES_CGTACTAG.setDescription('Nextera DNA')
-vocabulary_term_BARCODES_CGTACTAG.setLabel('Index1 (i7) N702 CGTACTAG')
-vocabulary_term_BARCODES_CGTACTAG.setOrdinal(26)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CGTACTAG)
-
-vocabulary_term_BARCODES_GGCTACA = tr.createNewVocabularyTerm('GGCTACA')
-vocabulary_term_BARCODES_GGCTACA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_GGCTACA.setLabel('Index11 GGCTACA')
-vocabulary_term_BARCODES_GGCTACA.setOrdinal(11)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_GGCTACA)
-
-vocabulary_term_BARCODES_ATGTCAA = tr.createNewVocabularyTerm('ATGTCAA')
-vocabulary_term_BARCODES_ATGTCAA.setDescription(None)
-vocabulary_term_BARCODES_ATGTCAA.setLabel('DNA Adapter 15')
-vocabulary_term_BARCODES_ATGTCAA.setOrdinal(60)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_ATGTCAA)
-
-vocabulary_term_BARCODES_GAGTGGA = tr.createNewVocabularyTerm('GAGTGGA')
-vocabulary_term_BARCODES_GAGTGGA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_GAGTGGA.setLabel('Index23 GAGTGGA')
-vocabulary_term_BARCODES_GAGTGGA.setOrdinal(22)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_GAGTGGA)
-
-vocabulary_term_BARCODES_GGACTCCT = tr.createNewVocabularyTerm('GGACTCCT')
-vocabulary_term_BARCODES_GGACTCCT.setDescription('Nextera DNA')
-vocabulary_term_BARCODES_GGACTCCT.setLabel('Index1 (i7) N705 GGACTCCT')
-vocabulary_term_BARCODES_GGACTCCT.setOrdinal(29)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_GGACTCCT)
-
-vocabulary_term_BARCODES_CTATACA = tr.createNewVocabularyTerm('CTATACA')
-vocabulary_term_BARCODES_CTATACA.setDescription(None)
-vocabulary_term_BARCODES_CTATACA.setLabel('DNA Adapter 39')
-vocabulary_term_BARCODES_CTATACA.setOrdinal(81)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CTATACA)
-
-vocabulary_term_BARCODES_TCCTGAGC = tr.createNewVocabularyTerm('TCCTGAGC')
-vocabulary_term_BARCODES_TCCTGAGC.setDescription('Nextera DNA')
-vocabulary_term_BARCODES_TCCTGAGC.setLabel('Index1 (i7) N704 TCCTGAGC')
-vocabulary_term_BARCODES_TCCTGAGC.setOrdinal(28)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_TCCTGAGC)
-
-vocabulary_term_BARCODES_CACTCAA = tr.createNewVocabularyTerm('CACTCAA')
-vocabulary_term_BARCODES_CACTCAA.setDescription(None)
-vocabulary_term_BARCODES_CACTCAA.setLabel('DNA Adapter 32')
-vocabulary_term_BARCODES_CACTCAA.setOrdinal(74)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CACTCAA)
-
-vocabulary_term_BARCODES_CAGATCA = tr.createNewVocabularyTerm('CAGATCA')
-vocabulary_term_BARCODES_CAGATCA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_CAGATCA.setLabel('Index7 CAGATCA')
-vocabulary_term_BARCODES_CAGATCA.setOrdinal(7)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CAGATCA)
-
-vocabulary_term_BARCODES_CGATGTA = tr.createNewVocabularyTerm('CGATGTA')
-vocabulary_term_BARCODES_CGATGTA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_CGATGTA.setLabel('Index2 CGATGTA')
-vocabulary_term_BARCODES_CGATGTA.setOrdinal(2)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CGATGTA)
-
-vocabulary_term_BARCODES_AGTTCCG = tr.createNewVocabularyTerm('AGTTCCG')
-vocabulary_term_BARCODES_AGTTCCG.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_AGTTCCG.setLabel('Index14 AGTTCCG')
-vocabulary_term_BARCODES_AGTTCCG.setOrdinal(14)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_AGTTCCG)
-
-vocabulary_term_BARCODES_TAAGGCGA = tr.createNewVocabularyTerm('TAAGGCGA')
-vocabulary_term_BARCODES_TAAGGCGA.setDescription('Nextera DNA')
-vocabulary_term_BARCODES_TAAGGCGA.setLabel('Index1 (i7) N701 TAAGGCGA')
-vocabulary_term_BARCODES_TAAGGCGA.setOrdinal(25)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_TAAGGCGA)
-
-vocabulary_term_BARCODES_GACGACA = tr.createNewVocabularyTerm('GACGACA')
-vocabulary_term_BARCODES_GACGACA.setDescription(None)
-vocabulary_term_BARCODES_GACGACA.setLabel('DNA Adapter 41')
-vocabulary_term_BARCODES_GACGACA.setOrdinal(83)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_GACGACA)
-
-vocabulary_term_BARCODES_CACGATA = tr.createNewVocabularyTerm('CACGATA')
-vocabulary_term_BARCODES_CACGATA.setDescription(None)
-vocabulary_term_BARCODES_CACGATA.setLabel('DNA Adapter 31')
-vocabulary_term_BARCODES_CACGATA.setOrdinal(73)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CACGATA)
-
-vocabulary_term_BARCODES_CGCTCGA = tr.createNewVocabularyTerm('CGCTCGA')
-vocabulary_term_BARCODES_CGCTCGA.setDescription(None)
-vocabulary_term_BARCODES_CGCTCGA.setLabel('43 CGCTCG')
-vocabulary_term_BARCODES_CGCTCGA.setOrdinal(46)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CGCTCGA)
-
-vocabulary_term_BARCODES_ACTGATA = tr.createNewVocabularyTerm('ACTGATA')
-vocabulary_term_BARCODES_ACTGATA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_ACTGATA.setLabel('Index25 ACTGATA')
-vocabulary_term_BARCODES_ACTGATA.setOrdinal(23)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_ACTGATA)
-
-vocabulary_term_BARCODES_AATGCGA = tr.createNewVocabularyTerm('AATGCGA')
-vocabulary_term_BARCODES_AATGCGA.setDescription(None)
-vocabulary_term_BARCODES_AATGCGA.setLabel('Lib AATGCGA')
-vocabulary_term_BARCODES_AATGCGA.setOrdinal(92)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_AATGCGA)
-
-vocabulary_term_BARCODES_GTCCGCA = tr.createNewVocabularyTerm('GTCCGCA')
-vocabulary_term_BARCODES_GTCCGCA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_GTCCGCA.setLabel('Index18 GTCCGCA')
-vocabulary_term_BARCODES_GTCCGCA.setOrdinal(17)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_GTCCGCA)
-
-vocabulary_term_BARCODES_CGTACGA = tr.createNewVocabularyTerm('CGTACGA')
-vocabulary_term_BARCODES_CGTACGA.setDescription(None)
-vocabulary_term_BARCODES_CGTACGA.setLabel('DNA Adapter 22')
-vocabulary_term_BARCODES_CGTACGA.setOrdinal(66)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CGTACGA)
-
-vocabulary_term_BARCODES_GTGAAAA = tr.createNewVocabularyTerm('GTGAAAA')
-vocabulary_term_BARCODES_GTGAAAA.setDescription(None)
-vocabulary_term_BARCODES_GTGAAAA.setLabel('DNA Adapter 19')
-vocabulary_term_BARCODES_GTGAAAA.setOrdinal(63)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_GTGAAAA)
-
-vocabulary_term_BARCODES_GTTTCGA = tr.createNewVocabularyTerm('GTTTCGA')
-vocabulary_term_BARCODES_GTTTCGA.setDescription(None)
-vocabulary_term_BARCODES_GTTTCGA.setLabel('DNA Adapter 21')
-vocabulary_term_BARCODES_GTTTCGA.setOrdinal(65)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_GTTTCGA)
-
-vocabulary_term_BARCODES_TAATCGA = tr.createNewVocabularyTerm('TAATCGA')
-vocabulary_term_BARCODES_TAATCGA.setDescription(None)
-vocabulary_term_BARCODES_TAATCGA.setLabel('DNA Adapter 42')
-vocabulary_term_BARCODES_TAATCGA.setOrdinal(84)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_TAATCGA)
-
-vocabulary_term_BARCODES_CAGATGA = tr.createNewVocabularyTerm('CAGATGA')
-vocabulary_term_BARCODES_CAGATGA.setDescription(None)
-vocabulary_term_BARCODES_CAGATGA.setLabel('28 CAGATG')
-vocabulary_term_BARCODES_CAGATGA.setOrdinal(44)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CAGATGA)
-
-vocabulary_term_BARCODES_ACTTGAA = tr.createNewVocabularyTerm('ACTTGAA')
-vocabulary_term_BARCODES_ACTTGAA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_ACTTGAA.setLabel('Index8 ACTTGAA')
-vocabulary_term_BARCODES_ACTTGAA.setOrdinal(8)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_ACTTGAA)
-
-vocabulary_term_BARCODES_GCCAATA = tr.createNewVocabularyTerm('GCCAATA')
-vocabulary_term_BARCODES_GCCAATA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_GCCAATA.setLabel('Index6 GCCAATA')
-vocabulary_term_BARCODES_GCCAATA.setOrdinal(6)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_GCCAATA)
-
-vocabulary_term_BARCODES_AAGACTA = tr.createNewVocabularyTerm('AAGACTA')
-vocabulary_term_BARCODES_AAGACTA.setDescription(None)
-vocabulary_term_BARCODES_AAGACTA.setLabel('02 AAGACT')
-vocabulary_term_BARCODES_AAGACTA.setOrdinal(37)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_AAGACTA)
-
-vocabulary_term_BARCODES_TACAGCA = tr.createNewVocabularyTerm('TACAGCA')
-vocabulary_term_BARCODES_TACAGCA.setDescription(None)
-vocabulary_term_BARCODES_TACAGCA.setLabel('DNA Adapter 43')
-vocabulary_term_BARCODES_TACAGCA.setOrdinal(85)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_TACAGCA)
-
-vocabulary_term_BARCODES_GCTGAAA = tr.createNewVocabularyTerm('GCTGAAA')
-vocabulary_term_BARCODES_GCTGAAA.setDescription(None)
-vocabulary_term_BARCODES_GCTGAAA.setLabel('59 GCTGAA')
-vocabulary_term_BARCODES_GCTGAAA.setOrdinal(51)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_GCTGAAA)
-
-vocabulary_term_BARCODES_AGATACA = tr.createNewVocabularyTerm('AGATACA')
-vocabulary_term_BARCODES_AGATACA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_AGATACA.setLabel('Index13 AGATAC')
-vocabulary_term_BARCODES_AGATACA.setOrdinal(13)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_AGATACA)
-
-vocabulary_term_BARCODES_TATCGTA = tr.createNewVocabularyTerm('TATCGTA')
-vocabulary_term_BARCODES_TATCGTA.setDescription(None)
-vocabulary_term_BARCODES_TATCGTA.setLabel('66 TATCGT')
-vocabulary_term_BARCODES_TATCGTA.setOrdinal(55)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_TATCGTA)
-
-vocabulary_term_BARCODES_CCGTCCC = tr.createNewVocabularyTerm('CCGTCCC')
-vocabulary_term_BARCODES_CCGTCCC.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_CCGTCCC.setLabel('Index16 CCGTCCC')
-vocabulary_term_BARCODES_CCGTCCC.setOrdinal(16)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CCGTCCC)
-
-vocabulary_term_BARCODES_ATTCCTT = tr.createNewVocabularyTerm('ATTCCTT')
-vocabulary_term_BARCODES_ATTCCTT.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_ATTCCTT.setLabel('Index27 ATTCCTT')
-vocabulary_term_BARCODES_ATTCCTT.setOrdinal(24)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_ATTCCTT)
-
-vocabulary_term_BARCODES_ATACGCA = tr.createNewVocabularyTerm('ATACGCA')
-vocabulary_term_BARCODES_ATACGCA.setDescription(None)
-vocabulary_term_BARCODES_ATACGCA.setLabel('20 ATACGC')
-vocabulary_term_BARCODES_ATACGCA.setOrdinal(43)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_ATACGCA)
-
-vocabulary_term_BARCODES_GCGCTGA = tr.createNewVocabularyTerm('GCGCTGA')
-vocabulary_term_BARCODES_GCGCTGA.setDescription(None)
-vocabulary_term_BARCODES_GCGCTGA.setLabel('66 GCGCTGA')
-vocabulary_term_BARCODES_GCGCTGA.setOrdinal(54)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_GCGCTGA)
-
-vocabulary_term_BARCODES_TCGAAGA = tr.createNewVocabularyTerm('TCGAAGA')
-vocabulary_term_BARCODES_TCGAAGA.setDescription(None)
-vocabulary_term_BARCODES_TCGAAGA.setLabel('DNA Adapter 47')
-vocabulary_term_BARCODES_TCGAAGA.setOrdinal(89)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_TCGAAGA)
-
-vocabulary_term_BARCODES_GTGGCCA = tr.createNewVocabularyTerm('GTGGCCA')
-vocabulary_term_BARCODES_GTGGCCA.setDescription(None)
-vocabulary_term_BARCODES_GTGGCCA.setLabel('DNA Adapter 20')
-vocabulary_term_BARCODES_GTGGCCA.setOrdinal(64)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_GTGGCCA)
-
-vocabulary_term_BARCODES_CTCAGAA = tr.createNewVocabularyTerm('CTCAGAA')
-vocabulary_term_BARCODES_CTCAGAA.setDescription(None)
-vocabulary_term_BARCODES_CTCAGAA.setLabel('DNA Adapter 40')
-vocabulary_term_BARCODES_CTCAGAA.setOrdinal(82)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CTCAGAA)
-
-vocabulary_term_BARCODES_CACCGGA = tr.createNewVocabularyTerm('CACCGGA')
-vocabulary_term_BARCODES_CACCGGA.setDescription(None)
-vocabulary_term_BARCODES_CACCGGA.setLabel('DNA Adapter 30')
-vocabulary_term_BARCODES_CACCGGA.setOrdinal(72)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CACCGGA)
-
-vocabulary_term_BARCODES_GGTAGCA = tr.createNewVocabularyTerm('GGTAGCA')
-vocabulary_term_BARCODES_GGTAGCA.setDescription(None)
-vocabulary_term_BARCODES_GGTAGCA.setLabel('DNA Adapter 24')
-vocabulary_term_BARCODES_GGTAGCA.setOrdinal(67)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_GGTAGCA)
-
-vocabulary_term_BARCODES_CCATGAA = tr.createNewVocabularyTerm('CCATGAA')
-vocabulary_term_BARCODES_CCATGAA.setDescription(None)
-vocabulary_term_BARCODES_CCATGAA.setLabel('50 CCATGAA')
-vocabulary_term_BARCODES_CCATGAA.setOrdinal(48)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CCATGAA)
-
-vocabulary_term_BARCODES_CAGAGAGG = tr.createNewVocabularyTerm('CAGAGAGG')
-vocabulary_term_BARCODES_CAGAGAGG.setDescription('Nextera DNA')
-vocabulary_term_BARCODES_CAGAGAGG.setLabel('Index1 (i7) N708 CAGAGAGG')
-vocabulary_term_BARCODES_CAGAGAGG.setOrdinal(32)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CAGAGAGG)
-
-vocabulary_term_BARCODES_ACAGTGA = tr.createNewVocabularyTerm('ACAGTGA')
-vocabulary_term_BARCODES_ACAGTGA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_ACAGTGA.setLabel('Index5 ACAGTGA')
-vocabulary_term_BARCODES_ACAGTGA.setOrdinal(5)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_ACAGTGA)
-
-vocabulary_term_BARCODES_GCTACGCT = tr.createNewVocabularyTerm('GCTACGCT')
-vocabulary_term_BARCODES_GCTACGCT.setDescription('Nextera DNA')
-vocabulary_term_BARCODES_GCTACGCT.setLabel('Index1 (i7) N709 GCTACGCT')
-vocabulary_term_BARCODES_GCTACGCT.setOrdinal(33)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_GCTACGCT)
-
-vocabulary_term_BARCODES_GTAGAGGA = tr.createNewVocabularyTerm('GTAGAGGA')
-vocabulary_term_BARCODES_GTAGAGGA.setDescription('Nextera DNA')
-vocabulary_term_BARCODES_GTAGAGGA.setLabel('Index1 (i7) N712 GTAGAGGA')
-vocabulary_term_BARCODES_GTAGAGGA.setOrdinal(36)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_GTAGAGGA)
-
-vocabulary_term_BARCODES_AGGCAGAA = tr.createNewVocabularyTerm('AGGCAGAA')
-vocabulary_term_BARCODES_AGGCAGAA.setDescription('Nextera DNA')
-vocabulary_term_BARCODES_AGGCAGAA.setLabel('Index1 (i7) N703 AGGCAGAA')
-vocabulary_term_BARCODES_AGGCAGAA.setOrdinal(27)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_AGGCAGAA)
-
-vocabulary_term_BARCODES_TCCTACA = tr.createNewVocabularyTerm('TCCTACA')
-vocabulary_term_BARCODES_TCCTACA.setDescription(None)
-vocabulary_term_BARCODES_TCCTACA.setLabel('68 TCCTAC')
-vocabulary_term_BARCODES_TCCTACA.setOrdinal(56)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_TCCTACA)
-
-vocabulary_term_BARCODES_TCTATAA = tr.createNewVocabularyTerm('TCTATAA')
-vocabulary_term_BARCODES_TCTATAA.setDescription(None)
-vocabulary_term_BARCODES_TCTATAA.setLabel('70 TCTATA')
-vocabulary_term_BARCODES_TCTATAA.setOrdinal(57)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_TCTATAA)
-
-vocabulary_term_BARCODES_TTAGGCA = tr.createNewVocabularyTerm('TTAGGCA')
-vocabulary_term_BARCODES_TTAGGCA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_TTAGGCA.setLabel('Index3 TTAGGCA')
-vocabulary_term_BARCODES_TTAGGCA.setOrdinal(3)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_TTAGGCA)
-
-vocabulary_term_BARCODES_CCAACAA = tr.createNewVocabularyTerm('CCAACAA')
-vocabulary_term_BARCODES_CCAACAA.setDescription(None)
-vocabulary_term_BARCODES_CCAACAA.setLabel('DNA Adapter 36')
-vocabulary_term_BARCODES_CCAACAA.setOrdinal(78)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CCAACAA)
-
-vocabulary_term_BARCODES_ATGTCAG = tr.createNewVocabularyTerm('ATGTCAG')
-vocabulary_term_BARCODES_ATGTCAG.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_ATGTCAG.setLabel('Index15 ATGTCAG')
-vocabulary_term_BARCODES_ATGTCAG.setOrdinal(15)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_ATGTCAG)
-
-vocabulary_term_BARCODES_CAGGCGA = tr.createNewVocabularyTerm('CAGGCGA')
-vocabulary_term_BARCODES_CAGGCGA.setDescription(None)
-vocabulary_term_BARCODES_CAGGCGA.setLabel('DNA Adapter 33')
-vocabulary_term_BARCODES_CAGGCGA.setOrdinal(75)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CAGGCGA)
-
-vocabulary_term_BARCODES_ATGAGCA = tr.createNewVocabularyTerm('ATGAGCA')
-vocabulary_term_BARCODES_ATGAGCA.setDescription(None)
-vocabulary_term_BARCODES_ATGAGCA.setLabel('DNA Adapter 26')
-vocabulary_term_BARCODES_ATGAGCA.setOrdinal(68)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_ATGAGCA)
-
-vocabulary_term_BARCODES_GTTTCGG = tr.createNewVocabularyTerm('GTTTCGG')
-vocabulary_term_BARCODES_GTTTCGG.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_GTTTCGG.setLabel('Index21 GTTTCGG')
-vocabulary_term_BARCODES_GTTTCGG.setOrdinal(20)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_GTTTCGG)
-
-vocabulary_term_BARCODES_ATTCCTA = tr.createNewVocabularyTerm('ATTCCTA')
-vocabulary_term_BARCODES_ATTCCTA.setDescription(None)
-vocabulary_term_BARCODES_ATTCCTA.setLabel('DNA Adapter 27')
-vocabulary_term_BARCODES_ATTCCTA.setOrdinal(69)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_ATTCCTA)
-
-vocabulary_term_BARCODES_CGTATTA = tr.createNewVocabularyTerm('CGTATTA')
-vocabulary_term_BARCODES_CGTATTA.setDescription(None)
-vocabulary_term_BARCODES_CGTATTA.setLabel('45 CGTATT')
-vocabulary_term_BARCODES_CGTATTA.setOrdinal(47)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CGTATTA)
-
-vocabulary_term_BARCODES_CCGAATA = tr.createNewVocabularyTerm('CCGAATA')
-vocabulary_term_BARCODES_CCGAATA.setDescription(None)
-vocabulary_term_BARCODES_CCGAATA.setLabel('34 CCGAAT')
-vocabulary_term_BARCODES_CCGAATA.setOrdinal(45)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CCGAATA)
-
-vocabulary_term_BARCODES_CATGGCA = tr.createNewVocabularyTerm('CATGGCA')
-vocabulary_term_BARCODES_CATGGCA.setDescription(None)
-vocabulary_term_BARCODES_CATGGCA.setLabel('DNA Adapter 34')
-vocabulary_term_BARCODES_CATGGCA.setOrdinal(76)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CATGGCA)
-
-vocabulary_term_BARCODES_GTCGCGA = tr.createNewVocabularyTerm('GTCGCGA')
-vocabulary_term_BARCODES_GTCGCGA.setDescription(None)
-vocabulary_term_BARCODES_GTCGCGA.setLabel('64 GTCGCG')
-vocabulary_term_BARCODES_GTCGCGA.setOrdinal(52)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_GTCGCGA)
-
-vocabulary_term_BARCODES_GATCAGA = tr.createNewVocabularyTerm('GATCAGA')
-vocabulary_term_BARCODES_GATCAGA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_GATCAGA.setLabel('Index9 GATCAGA')
-vocabulary_term_BARCODES_GATCAGA.setOrdinal(9)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_GATCAGA)
-
-vocabulary_term_BARCODES_CATTTTA = tr.createNewVocabularyTerm('CATTTTA')
-vocabulary_term_BARCODES_CATTTTA.setDescription(None)
-vocabulary_term_BARCODES_CATTTTA.setLabel('DNA Adapter 35')
-vocabulary_term_BARCODES_CATTTTA.setOrdinal(77)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CATTTTA)
-
-vocabulary_term_BARCODES_AGGTTGA = tr.createNewVocabularyTerm('AGGTTGA')
-vocabulary_term_BARCODES_AGGTTGA.setDescription(None)
-vocabulary_term_BARCODES_AGGTTGA.setLabel('17 AGGTTG')
-vocabulary_term_BARCODES_AGGTTGA.setOrdinal(39)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_AGGTTGA)
-
-vocabulary_term_BARCODES_TAAGATA = tr.createNewVocabularyTerm('TAAGATA')
-vocabulary_term_BARCODES_TAAGATA.setDescription(None)
-vocabulary_term_BARCODES_TAAGATA.setLabel('65 TAAGAT')
-vocabulary_term_BARCODES_TAAGATA.setOrdinal(53)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_TAAGATA)
-
-vocabulary_term_BARCODES_AAGAGGCA = tr.createNewVocabularyTerm('AAGAGGCA')
-vocabulary_term_BARCODES_AAGAGGCA.setDescription('Nextera DNA')
-vocabulary_term_BARCODES_AAGAGGCA.setLabel('Index1 (i7) N711 AAGAGGCA')
-vocabulary_term_BARCODES_AAGAGGCA.setOrdinal(35)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_AAGAGGCA)
-
-vocabulary_term_BARCODES_GTGGCCT = tr.createNewVocabularyTerm('GTGGCCT')
-vocabulary_term_BARCODES_GTGGCCT.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_BARCODES_GTGGCCT.setLabel('Index20 GTGGCCT')
-vocabulary_term_BARCODES_GTGGCCT.setOrdinal(19)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_GTGGCCT)
-
-vocabulary_term_BARCODES_TTCCGAA = tr.createNewVocabularyTerm('TTCCGAA')
-vocabulary_term_BARCODES_TTCCGAA.setDescription(None)
-vocabulary_term_BARCODES_TTCCGAA.setLabel('75 TTCCGA')
-vocabulary_term_BARCODES_TTCCGAA.setOrdinal(59)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_TTCCGAA)
-
-vocabulary_term_BARCODES_ACTTCAA = tr.createNewVocabularyTerm('ACTTCAA')
-vocabulary_term_BARCODES_ACTTCAA.setDescription(None)
-vocabulary_term_BARCODES_ACTTCAA.setLabel('10 ACTTCA')
-vocabulary_term_BARCODES_ACTTCAA.setOrdinal(38)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_ACTTCAA)
-
-vocabulary_term_BARCODES_TAGGCATG = tr.createNewVocabularyTerm('TAGGCATG')
-vocabulary_term_BARCODES_TAGGCATG.setDescription('Nextera DNA')
-vocabulary_term_BARCODES_TAGGCATG.setLabel('Index1 (i7) N706 TAGGCATG')
-vocabulary_term_BARCODES_TAGGCATG.setOrdinal(30)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_TAGGCATG)
-
-vocabulary_term_BARCODES_CAACTAA = tr.createNewVocabularyTerm('CAACTAA')
-vocabulary_term_BARCODES_CAACTAA.setDescription(None)
-vocabulary_term_BARCODES_CAACTAA.setLabel('DNA Adapter 29')
-vocabulary_term_BARCODES_CAACTAA.setOrdinal(71)
-vocabulary_BARCODES.addTerm(vocabulary_term_BARCODES_CAACTAA)
-
-vocabulary_CASAVA_VERSION = tr.createNewVocabulary('CASAVA_VERSION')
-vocabulary_CASAVA_VERSION.setDescription('Post analyzing software')
-vocabulary_CASAVA_VERSION.setUrlTemplate(None)
-vocabulary_CASAVA_VERSION.setManagedInternally(False)
-vocabulary_CASAVA_VERSION.setInternalNamespace(False)
-vocabulary_CASAVA_VERSION.setChosenFromList(True)
-
-vocabulary_term_CASAVA_VERSION_17 = tr.createNewVocabularyTerm('1.7')
-vocabulary_term_CASAVA_VERSION_17.setDescription(None)
-vocabulary_term_CASAVA_VERSION_17.setLabel(None)
-vocabulary_term_CASAVA_VERSION_17.setOrdinal(2)
-vocabulary_CASAVA_VERSION.addTerm(vocabulary_term_CASAVA_VERSION_17)
-
-vocabulary_term_CASAVA_VERSION_18 = tr.createNewVocabularyTerm('1.8')
-vocabulary_term_CASAVA_VERSION_18.setDescription(None)
-vocabulary_term_CASAVA_VERSION_18.setLabel(None)
-vocabulary_term_CASAVA_VERSION_18.setOrdinal(1)
-vocabulary_CASAVA_VERSION.addTerm(vocabulary_term_CASAVA_VERSION_18)
-
-vocabulary_CLUSTER_GENERATION_KIT_VERSION = tr.createNewVocabulary('CLUSTER_GENERATION_KIT_VERSION')
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.setDescription('Version of the Cluster Generation Kit')
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.setUrlTemplate(None)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.setManagedInternally(False)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.setInternalNamespace(False)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.setChosenFromList(True)
-
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V25 = tr.createNewVocabularyTerm('TRUSEQ_CBOT_HS_V2.5')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V25.setDescription(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V25.setLabel('TruSeq cBot-HS v2.5')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V25.setOrdinal(2)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.addTerm(vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V25)
-
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V2 = tr.createNewVocabularyTerm('V2')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V2.setDescription(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V2.setLabel(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V2.setOrdinal(16)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.addTerm(vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V2)
-
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V3 = tr.createNewVocabularyTerm('TRUSEQ_CBOT_HS_V3')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V3.setDescription(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V3.setLabel('TruSeq cBot-HS v3')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V3.setOrdinal(1)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.addTerm(vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V3)
-
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CS_GA_V5 = tr.createNewVocabularyTerm('TRUSEQ_CS_GA_V5')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CS_GA_V5.setDescription(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CS_GA_V5.setLabel('TrueSeq CS-GA v5')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CS_GA_V5.setOrdinal(8)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.addTerm(vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CS_GA_V5)
-
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V5 = tr.createNewVocabularyTerm('V5')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V5.setDescription(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V5.setLabel(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V5.setOrdinal(14)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.addTerm(vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V5)
-
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_GA_V2 = tr.createNewVocabularyTerm('TRUSEQ_CBOT_GA_V2')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_GA_V2.setDescription(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_GA_V2.setLabel('TrueSeq cBot-GA v2')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_GA_V2.setOrdinal(7)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.addTerm(vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_GA_V2)
-
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V4 = tr.createNewVocabularyTerm('V4')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V4.setDescription(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V4.setLabel(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V4.setOrdinal(15)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.addTerm(vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V4)
-
-vocabulary_CLUSTER_STATION = tr.createNewVocabulary('CLUSTER_STATION')
-vocabulary_CLUSTER_STATION.setDescription('Cluster Station')
-vocabulary_CLUSTER_STATION.setUrlTemplate(None)
-vocabulary_CLUSTER_STATION.setManagedInternally(False)
-vocabulary_CLUSTER_STATION.setInternalNamespace(False)
-vocabulary_CLUSTER_STATION.setChosenFromList(True)
-
-vocabulary_term_CLUSTER_STATION_CBOT = tr.createNewVocabularyTerm('CBOT')
-vocabulary_term_CLUSTER_STATION_CBOT.setDescription(None)
-vocabulary_term_CLUSTER_STATION_CBOT.setLabel('cBot')
-vocabulary_term_CLUSTER_STATION_CBOT.setOrdinal(1)
-vocabulary_CLUSTER_STATION.addTerm(vocabulary_term_CLUSTER_STATION_CBOT)
-
-vocabulary_term_CLUSTER_STATION_SPUTNIK = tr.createNewVocabularyTerm('SPUTNIK')
-vocabulary_term_CLUSTER_STATION_SPUTNIK.setDescription(None)
-vocabulary_term_CLUSTER_STATION_SPUTNIK.setLabel('Sputnik')
-vocabulary_term_CLUSTER_STATION_SPUTNIK.setOrdinal(2)
-vocabulary_CLUSTER_STATION.addTerm(vocabulary_term_CLUSTER_STATION_SPUTNIK)
-
-vocabulary_term_CLUSTER_STATION_ISS = tr.createNewVocabularyTerm('ISS')
-vocabulary_term_CLUSTER_STATION_ISS.setDescription(None)
-vocabulary_term_CLUSTER_STATION_ISS.setLabel('ISS (CS2)')
-vocabulary_term_CLUSTER_STATION_ISS.setOrdinal(3)
-vocabulary_CLUSTER_STATION.addTerm(vocabulary_term_CLUSTER_STATION_ISS)
-
-vocabulary_CLUSTER_STATION_SOFTWARE_VERSION = tr.createNewVocabulary('CLUSTER_STATION_SOFTWARE_VERSION')
-vocabulary_CLUSTER_STATION_SOFTWARE_VERSION.setDescription(None)
-vocabulary_CLUSTER_STATION_SOFTWARE_VERSION.setUrlTemplate(None)
-vocabulary_CLUSTER_STATION_SOFTWARE_VERSION.setManagedInternally(False)
-vocabulary_CLUSTER_STATION_SOFTWARE_VERSION.setInternalNamespace(False)
-vocabulary_CLUSTER_STATION_SOFTWARE_VERSION.setChosenFromList(True)
-
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_NOT_KNOWN = tr.createNewVocabularyTerm('NOT_KNOWN')
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_NOT_KNOWN.setDescription(None)
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_NOT_KNOWN.setLabel(None)
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_NOT_KNOWN.setOrdinal(6)
-vocabulary_CLUSTER_STATION_SOFTWARE_VERSION.addTerm(vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_NOT_KNOWN)
-
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_GALAXY_06 = tr.createNewVocabularyTerm('GALAXY_0.6')
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_GALAXY_06.setDescription('Old Cluster Station')
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_GALAXY_06.setLabel('Galaxy 0.6 Build 98')
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_GALAXY_06.setOrdinal(3)
-vocabulary_CLUSTER_STATION_SOFTWARE_VERSION.addTerm(vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_GALAXY_06)
-
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_CBOT_14360 = tr.createNewVocabularyTerm('CBOT_1.4.36.0')
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_CBOT_14360.setDescription(None)
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_CBOT_14360.setLabel('cBot 1.4.36.0')
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_CBOT_14360.setOrdinal(1)
-vocabulary_CLUSTER_STATION_SOFTWARE_VERSION.addTerm(vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_CBOT_14360)
-
-vocabulary_CONTROL_LANE = tr.createNewVocabulary('CONTROL_LANE')
-vocabulary_CONTROL_LANE.setDescription(None)
-vocabulary_CONTROL_LANE.setUrlTemplate(None)
-vocabulary_CONTROL_LANE.setManagedInternally(False)
-vocabulary_CONTROL_LANE.setInternalNamespace(False)
-vocabulary_CONTROL_LANE.setChosenFromList(True)
-
-vocabulary_term_CONTROL_LANE_0 = tr.createNewVocabularyTerm('0')
-vocabulary_term_CONTROL_LANE_0.setDescription(None)
-vocabulary_term_CONTROL_LANE_0.setLabel(None)
-vocabulary_term_CONTROL_LANE_0.setOrdinal(10)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_0)
-
-vocabulary_term_CONTROL_LANE_6 = tr.createNewVocabularyTerm('6')
-vocabulary_term_CONTROL_LANE_6.setDescription(None)
-vocabulary_term_CONTROL_LANE_6.setLabel(None)
-vocabulary_term_CONTROL_LANE_6.setOrdinal(6)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_6)
-
-vocabulary_term_CONTROL_LANE_4 = tr.createNewVocabularyTerm('4')
-vocabulary_term_CONTROL_LANE_4.setDescription(None)
-vocabulary_term_CONTROL_LANE_4.setLabel(None)
-vocabulary_term_CONTROL_LANE_4.setOrdinal(4)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_4)
-
-vocabulary_term_CONTROL_LANE_2 = tr.createNewVocabularyTerm('2')
-vocabulary_term_CONTROL_LANE_2.setDescription(None)
-vocabulary_term_CONTROL_LANE_2.setLabel(None)
-vocabulary_term_CONTROL_LANE_2.setOrdinal(2)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_2)
-
-vocabulary_term_CONTROL_LANE_8 = tr.createNewVocabularyTerm('8')
-vocabulary_term_CONTROL_LANE_8.setDescription(None)
-vocabulary_term_CONTROL_LANE_8.setLabel(None)
-vocabulary_term_CONTROL_LANE_8.setOrdinal(8)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_8)
-
-vocabulary_term_CONTROL_LANE_NONE = tr.createNewVocabularyTerm('NONE')
-vocabulary_term_CONTROL_LANE_NONE.setDescription(None)
-vocabulary_term_CONTROL_LANE_NONE.setLabel(None)
-vocabulary_term_CONTROL_LANE_NONE.setOrdinal(9)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_NONE)
-
-vocabulary_term_CONTROL_LANE_3 = tr.createNewVocabularyTerm('3')
-vocabulary_term_CONTROL_LANE_3.setDescription(None)
-vocabulary_term_CONTROL_LANE_3.setLabel(None)
-vocabulary_term_CONTROL_LANE_3.setOrdinal(3)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_3)
-
-vocabulary_term_CONTROL_LANE_5 = tr.createNewVocabularyTerm('5')
-vocabulary_term_CONTROL_LANE_5.setDescription(None)
-vocabulary_term_CONTROL_LANE_5.setLabel(None)
-vocabulary_term_CONTROL_LANE_5.setOrdinal(5)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_5)
-
-vocabulary_term_CONTROL_LANE_1 = tr.createNewVocabularyTerm('1')
-vocabulary_term_CONTROL_LANE_1.setDescription(None)
-vocabulary_term_CONTROL_LANE_1.setLabel(None)
-vocabulary_term_CONTROL_LANE_1.setOrdinal(1)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_1)
-
-vocabulary_term_CONTROL_LANE_7 = tr.createNewVocabularyTerm('7')
-vocabulary_term_CONTROL_LANE_7.setDescription(None)
-vocabulary_term_CONTROL_LANE_7.setLabel(None)
-vocabulary_term_CONTROL_LANE_7.setOrdinal(7)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_7)
-
-vocabulary_CYCLES = tr.createNewVocabulary('CYCLES')
-vocabulary_CYCLES.setDescription('Number of cycles')
-vocabulary_CYCLES.setUrlTemplate(None)
-vocabulary_CYCLES.setManagedInternally(False)
-vocabulary_CYCLES.setInternalNamespace(False)
-vocabulary_CYCLES.setChosenFromList(True)
-
-vocabulary_term_CYCLES_101 = tr.createNewVocabularyTerm('101')
-vocabulary_term_CYCLES_101.setDescription(None)
-vocabulary_term_CYCLES_101.setLabel(None)
-vocabulary_term_CYCLES_101.setOrdinal(4)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_101)
-
-vocabulary_term_CYCLES_51 = tr.createNewVocabularyTerm('51')
-vocabulary_term_CYCLES_51.setDescription(None)
-vocabulary_term_CYCLES_51.setLabel(None)
-vocabulary_term_CYCLES_51.setOrdinal(6)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_51)
-
-vocabulary_term_CYCLES_58 = tr.createNewVocabularyTerm('58')
-vocabulary_term_CYCLES_58.setDescription(None)
-vocabulary_term_CYCLES_58.setLabel(None)
-vocabulary_term_CYCLES_58.setOrdinal(7)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_58)
-
-vocabulary_term_CYCLES_100 = tr.createNewVocabularyTerm('100')
-vocabulary_term_CYCLES_100.setDescription(None)
-vocabulary_term_CYCLES_100.setLabel(None)
-vocabulary_term_CYCLES_100.setOrdinal(12)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_100)
-
-vocabulary_term_CYCLES_151 = tr.createNewVocabularyTerm('151')
-vocabulary_term_CYCLES_151.setDescription(None)
-vocabulary_term_CYCLES_151.setLabel(None)
-vocabulary_term_CYCLES_151.setOrdinal(11)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_151)
-
-vocabulary_term_CYCLES_49 = tr.createNewVocabularyTerm('49')
-vocabulary_term_CYCLES_49.setDescription(None)
-vocabulary_term_CYCLES_49.setLabel(None)
-vocabulary_term_CYCLES_49.setOrdinal(15)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_49)
-
-vocabulary_term_CYCLES_50 = tr.createNewVocabularyTerm('50')
-vocabulary_term_CYCLES_50.setDescription(None)
-vocabulary_term_CYCLES_50.setLabel(None)
-vocabulary_term_CYCLES_50.setOrdinal(2)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_50)
-
-vocabulary_term_CYCLES_150 = tr.createNewVocabularyTerm('150')
-vocabulary_term_CYCLES_150.setDescription(None)
-vocabulary_term_CYCLES_150.setLabel(None)
-vocabulary_term_CYCLES_150.setOrdinal(14)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_150)
-
-vocabulary_term_CYCLES_36 = tr.createNewVocabularyTerm('36')
-vocabulary_term_CYCLES_36.setDescription(None)
-vocabulary_term_CYCLES_36.setLabel(None)
-vocabulary_term_CYCLES_36.setOrdinal(1)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_36)
-
-vocabulary_term_CYCLES_108 = tr.createNewVocabularyTerm('108')
-vocabulary_term_CYCLES_108.setDescription(None)
-vocabulary_term_CYCLES_108.setLabel(None)
-vocabulary_term_CYCLES_108.setOrdinal(13)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_108)
-
-vocabulary_term_CYCLES_76 = tr.createNewVocabularyTerm('76')
-vocabulary_term_CYCLES_76.setDescription(None)
-vocabulary_term_CYCLES_76.setLabel(None)
-vocabulary_term_CYCLES_76.setOrdinal(3)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_76)
-
-vocabulary_term_CYCLES_125 = tr.createNewVocabularyTerm('125')
-vocabulary_term_CYCLES_125.setDescription(None)
-vocabulary_term_CYCLES_125.setLabel(None)
-vocabulary_term_CYCLES_125.setOrdinal(10)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_125)
-
-vocabulary_END_TYPE = tr.createNewVocabulary('END_TYPE')
-vocabulary_END_TYPE.setDescription('Sequencing method')
-vocabulary_END_TYPE.setUrlTemplate(None)
-vocabulary_END_TYPE.setManagedInternally(False)
-vocabulary_END_TYPE.setInternalNamespace(False)
-vocabulary_END_TYPE.setChosenFromList(True)
-
-vocabulary_term_END_TYPE_PAIRED_END = tr.createNewVocabularyTerm('PAIRED_END')
-vocabulary_term_END_TYPE_PAIRED_END.setDescription(None)
-vocabulary_term_END_TYPE_PAIRED_END.setLabel(None)
-vocabulary_term_END_TYPE_PAIRED_END.setOrdinal(3)
-vocabulary_END_TYPE.addTerm(vocabulary_term_END_TYPE_PAIRED_END)
-
-vocabulary_term_END_TYPE_SINGLE_READ = tr.createNewVocabularyTerm('SINGLE_READ')
-vocabulary_term_END_TYPE_SINGLE_READ.setDescription(None)
-vocabulary_term_END_TYPE_SINGLE_READ.setLabel(None)
-vocabulary_term_END_TYPE_SINGLE_READ.setOrdinal(2)
-vocabulary_END_TYPE.addTerm(vocabulary_term_END_TYPE_SINGLE_READ)
-
-vocabulary_EXPERIMENT_DESIGN = tr.createNewVocabulary('EXPERIMENT_DESIGN')
-vocabulary_EXPERIMENT_DESIGN.setDescription('General Intent')
-vocabulary_EXPERIMENT_DESIGN.setUrlTemplate(None)
-vocabulary_EXPERIMENT_DESIGN.setManagedInternally(False)
-vocabulary_EXPERIMENT_DESIGN.setInternalNamespace(False)
-vocabulary_EXPERIMENT_DESIGN.setChosenFromList(True)
-
-vocabulary_term_EXPERIMENT_DESIGN_OTHER = tr.createNewVocabularyTerm('OTHER')
-vocabulary_term_EXPERIMENT_DESIGN_OTHER.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_OTHER.setLabel('Other')
-vocabulary_term_EXPERIMENT_DESIGN_OTHER.setOrdinal(9)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_OTHER)
-
-vocabulary_term_EXPERIMENT_DESIGN_BINDING_SITE_IDENTIFICATION = tr.createNewVocabularyTerm('BINDING_SITE_IDENTIFICATION')
-vocabulary_term_EXPERIMENT_DESIGN_BINDING_SITE_IDENTIFICATION.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_BINDING_SITE_IDENTIFICATION.setLabel('Binding Site Identification')
-vocabulary_term_EXPERIMENT_DESIGN_BINDING_SITE_IDENTIFICATION.setOrdinal(1)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_BINDING_SITE_IDENTIFICATION)
-
-vocabulary_term_EXPERIMENT_DESIGN_SEQUENCE_ENRICHMENT = tr.createNewVocabularyTerm('SEQUENCE_ENRICHMENT')
-vocabulary_term_EXPERIMENT_DESIGN_SEQUENCE_ENRICHMENT.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_SEQUENCE_ENRICHMENT.setLabel('Sequence Enrichment')
-vocabulary_term_EXPERIMENT_DESIGN_SEQUENCE_ENRICHMENT.setOrdinal(7)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_SEQUENCE_ENRICHMENT)
-
-vocabulary_term_EXPERIMENT_DESIGN_TRANSCRIPT_IDENTIFICATION = tr.createNewVocabularyTerm('TRANSCRIPT_IDENTIFICATION')
-vocabulary_term_EXPERIMENT_DESIGN_TRANSCRIPT_IDENTIFICATION.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_TRANSCRIPT_IDENTIFICATION.setLabel('Transcript Identification')
-vocabulary_term_EXPERIMENT_DESIGN_TRANSCRIPT_IDENTIFICATION.setOrdinal(8)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_TRANSCRIPT_IDENTIFICATION)
-
-vocabulary_term_EXPERIMENT_DESIGN_EXPRESSION = tr.createNewVocabularyTerm('EXPRESSION')
-vocabulary_term_EXPERIMENT_DESIGN_EXPRESSION.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_EXPRESSION.setLabel('Expression')
-vocabulary_term_EXPERIMENT_DESIGN_EXPRESSION.setOrdinal(6)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_EXPRESSION)
-
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_SPLICING = tr.createNewVocabularyTerm('DIFFERENTIAL_SPLICING')
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_SPLICING.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_SPLICING.setLabel('Differential Splicing')
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_SPLICING.setOrdinal(5)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_SPLICING)
-
-vocabulary_term_EXPERIMENT_DESIGN_COMPARATIVE_GENOMIC_HYBRIDIZATION = tr.createNewVocabularyTerm('COMPARATIVE_GENOMIC_HYBRIDIZATION')
-vocabulary_term_EXPERIMENT_DESIGN_COMPARATIVE_GENOMIC_HYBRIDIZATION.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_COMPARATIVE_GENOMIC_HYBRIDIZATION.setLabel('Comparative Genomic Hybridization')
-vocabulary_term_EXPERIMENT_DESIGN_COMPARATIVE_GENOMIC_HYBRIDIZATION.setOrdinal(3)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_COMPARATIVE_GENOMIC_HYBRIDIZATION)
-
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_EXPRESSION = tr.createNewVocabularyTerm('DIFFERENTIAL_EXPRESSION')
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_EXPRESSION.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_EXPRESSION.setLabel('Differential Expression')
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_EXPRESSION.setOrdinal(4)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_EXPRESSION)
-
-vocabulary_term_EXPERIMENT_DESIGN_CHROMATIN_MARKS = tr.createNewVocabularyTerm('CHROMATIN_MARKS')
-vocabulary_term_EXPERIMENT_DESIGN_CHROMATIN_MARKS.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_CHROMATIN_MARKS.setLabel('Chromatin Marks')
-vocabulary_term_EXPERIMENT_DESIGN_CHROMATIN_MARKS.setOrdinal(2)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_CHROMATIN_MARKS)
-
-vocabulary_INDEX2 = tr.createNewVocabulary('INDEX2')
-vocabulary_INDEX2.setDescription('Index 2 for Illumina Dual Indexing')
-vocabulary_INDEX2.setUrlTemplate(None)
-vocabulary_INDEX2.setManagedInternally(False)
-vocabulary_INDEX2.setInternalNamespace(False)
-vocabulary_INDEX2.setChosenFromList(True)
-
-vocabulary_term_INDEX2_ACTGCATA = tr.createNewVocabularyTerm('ACTGCATA')
-vocabulary_term_INDEX2_ACTGCATA.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_ACTGCATA.setLabel('Index2 (i5) N506 ACTGCATA')
-vocabulary_term_INDEX2_ACTGCATA.setOrdinal(6)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_ACTGCATA)
-
-vocabulary_term_INDEX2_TATCCTCT = tr.createNewVocabularyTerm('TATCCTCT')
-vocabulary_term_INDEX2_TATCCTCT.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_TATCCTCT.setLabel('Index2 (i5) N503 TATCCTCT')
-vocabulary_term_INDEX2_TATCCTCT.setOrdinal(3)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_TATCCTCT)
-
-vocabulary_term_INDEX2_GTAAGGAG = tr.createNewVocabularyTerm('GTAAGGAG')
-vocabulary_term_INDEX2_GTAAGGAG.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_GTAAGGAG.setLabel('Index2 (i5) N505 GTAAGGAG')
-vocabulary_term_INDEX2_GTAAGGAG.setOrdinal(5)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_GTAAGGAG)
-
-vocabulary_term_INDEX2_AGAGTAGA = tr.createNewVocabularyTerm('AGAGTAGA')
-vocabulary_term_INDEX2_AGAGTAGA.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_AGAGTAGA.setLabel('Index2 (i5) N504 AGAGTAGA')
-vocabulary_term_INDEX2_AGAGTAGA.setOrdinal(4)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_AGAGTAGA)
-
-vocabulary_term_INDEX2_CTCTCTAT = tr.createNewVocabularyTerm('CTCTCTAT')
-vocabulary_term_INDEX2_CTCTCTAT.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_CTCTCTAT.setLabel('Index2 (i5) N502 CTCTCTAT')
-vocabulary_term_INDEX2_CTCTCTAT.setOrdinal(2)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_CTCTCTAT)
-
-vocabulary_term_INDEX2_CTAAGCCT = tr.createNewVocabularyTerm('CTAAGCCT')
-vocabulary_term_INDEX2_CTAAGCCT.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_CTAAGCCT.setLabel('Index2 (i5) N508 CTAAGCCT')
-vocabulary_term_INDEX2_CTAAGCCT.setOrdinal(8)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_CTAAGCCT)
-
-vocabulary_term_INDEX2_AAGGAGTA = tr.createNewVocabularyTerm('AAGGAGTA')
-vocabulary_term_INDEX2_AAGGAGTA.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_AAGGAGTA.setLabel('Index2 (i5) N507 AAGGAGTA')
-vocabulary_term_INDEX2_AAGGAGTA.setOrdinal(7)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_AAGGAGTA)
-
-vocabulary_term_INDEX2_TAGATCGC = tr.createNewVocabularyTerm('TAGATCGC')
-vocabulary_term_INDEX2_TAGATCGC.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_TAGATCGC.setLabel('Index2 (i5) N501 TAGATCGC')
-vocabulary_term_INDEX2_TAGATCGC.setOrdinal(1)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_TAGATCGC)
-
-vocabulary_KIT = tr.createNewVocabulary('KIT')
-vocabulary_KIT.setDescription('Illumina Kit used for preparation')
-vocabulary_KIT.setUrlTemplate(None)
-vocabulary_KIT.setManagedInternally(False)
-vocabulary_KIT.setInternalNamespace(False)
-vocabulary_KIT.setChosenFromList(True)
-
-vocabulary_term_KIT_AGILENT_SURESELECT_ENRICHMENTSYSTEM = tr.createNewVocabularyTerm('AGILENT_SURESELECT_ENRICHMENTSYSTEM')
-vocabulary_term_KIT_AGILENT_SURESELECT_ENRICHMENTSYSTEM.setDescription(None)
-vocabulary_term_KIT_AGILENT_SURESELECT_ENRICHMENTSYSTEM.setLabel('Agilent_SureSelect_EnrichmentSystem')
-vocabulary_term_KIT_AGILENT_SURESELECT_ENRICHMENTSYSTEM.setOrdinal(20)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_AGILENT_SURESELECT_ENRICHMENTSYSTEM)
-
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KIT_BUFFER_HMW = tr.createNewVocabularyTerm('NEXTERA_DNA_SAMPLE_PREP_KIT_BUFFER_HMW')
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KIT_BUFFER_HMW.setDescription(None)
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KIT_BUFFER_HMW.setLabel('Nextera Genomic DNA Sample Preparation Kit BufferHMW(Epicentre)')
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KIT_BUFFER_HMW.setOrdinal(19)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KIT_BUFFER_HMW)
-
-vocabulary_term_KIT_GENOMICDNA_SAMPLE_PREP = tr.createNewVocabularyTerm('GENOMICDNA_SAMPLE_PREP')
-vocabulary_term_KIT_GENOMICDNA_SAMPLE_PREP.setDescription(None)
-vocabulary_term_KIT_GENOMICDNA_SAMPLE_PREP.setLabel('Illumina Genomic DNA Sample Preparation Kit')
-vocabulary_term_KIT_GENOMICDNA_SAMPLE_PREP.setOrdinal(3)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_GENOMICDNA_SAMPLE_PREP)
-
-vocabulary_term_KIT_NONE = tr.createNewVocabularyTerm('NONE')
-vocabulary_term_KIT_NONE.setDescription(None)
-vocabulary_term_KIT_NONE.setLabel('None (Already prepared)')
-vocabulary_term_KIT_NONE.setOrdinal(23)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_NONE)
-
-vocabulary_term_KIT_NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1 = tr.createNewVocabularyTerm('NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1')
-vocabulary_term_KIT_NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1.setDescription(None)
-vocabulary_term_KIT_NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1.setLabel('NEB Genomic DNA Sample Preparation Kit')
-vocabulary_term_KIT_NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1.setOrdinal(2)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1)
-
-vocabulary_term_KIT_PAIRED_END_DNA_SAMPLE_PREP = tr.createNewVocabularyTerm('PAIRED_END_DNA_SAMPLE_PREP')
-vocabulary_term_KIT_PAIRED_END_DNA_SAMPLE_PREP.setDescription(None)
-vocabulary_term_KIT_PAIRED_END_DNA_SAMPLE_PREP.setLabel('Paired End DNA Sample Prep Oligo Kit')
-vocabulary_term_KIT_PAIRED_END_DNA_SAMPLE_PREP.setOrdinal(14)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_PAIRED_END_DNA_SAMPLE_PREP)
-
-vocabulary_term_KIT_CHIP_SEQ_SAMPLE_PREP = tr.createNewVocabularyTerm('CHIP_SEQ_SAMPLE_PREP')
-vocabulary_term_KIT_CHIP_SEQ_SAMPLE_PREP.setDescription(None)
-vocabulary_term_KIT_CHIP_SEQ_SAMPLE_PREP.setLabel('ChIP-Seq Sample Preparation Kit')
-vocabulary_term_KIT_CHIP_SEQ_SAMPLE_PREP.setOrdinal(1)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_CHIP_SEQ_SAMPLE_PREP)
-
-vocabulary_term_KIT_POLYA_SCRIPTSEQ_MRNASEQ_KIT = tr.createNewVocabularyTerm('POLYA_SCRIPTSEQ_MRNA-SEQ_KIT')
-vocabulary_term_KIT_POLYA_SCRIPTSEQ_MRNASEQ_KIT.setDescription(None)
-vocabulary_term_KIT_POLYA_SCRIPTSEQ_MRNASEQ_KIT.setLabel('PolyA(Beads) ScriptSeq mRNA-Seq_Epicentre-kit')
-vocabulary_term_KIT_POLYA_SCRIPTSEQ_MRNASEQ_KIT.setOrdinal(17)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_POLYA_SCRIPTSEQ_MRNASEQ_KIT)
-
-vocabulary_term_KIT_MRNA_SEQ_SAMPLE_PREP = tr.createNewVocabularyTerm('MRNA_SEQ_SAMPLE_PREP')
-vocabulary_term_KIT_MRNA_SEQ_SAMPLE_PREP.setDescription(None)
-vocabulary_term_KIT_MRNA_SEQ_SAMPLE_PREP.setLabel('mRNA-Seq Sample Preparation Kit')
-vocabulary_term_KIT_MRNA_SEQ_SAMPLE_PREP.setOrdinal(15)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_MRNA_SEQ_SAMPLE_PREP)
-
-vocabulary_term_KIT_TRUSEQ_DNA_SAMPLE_PREP_KIT = tr.createNewVocabularyTerm('TRUSEQ_DNA_SAMPLE_PREP_KIT')
-vocabulary_term_KIT_TRUSEQ_DNA_SAMPLE_PREP_KIT.setDescription(None)
-vocabulary_term_KIT_TRUSEQ_DNA_SAMPLE_PREP_KIT.setLabel('TruSeq_DNA_SamplePrepKit_Illumina')
-vocabulary_term_KIT_TRUSEQ_DNA_SAMPLE_PREP_KIT.setOrdinal(22)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_TRUSEQ_DNA_SAMPLE_PREP_KIT)
-
-vocabulary_term_KIT_TRUSEQRNA_SAMPLE_PREP_KIT = tr.createNewVocabularyTerm('TRUSEQRNA_SAMPLE_PREP_KIT')
-vocabulary_term_KIT_TRUSEQRNA_SAMPLE_PREP_KIT.setDescription(None)
-vocabulary_term_KIT_TRUSEQRNA_SAMPLE_PREP_KIT.setLabel('TruSeq_RNA_SamplePrepKit_Illumina')
-vocabulary_term_KIT_TRUSEQRNA_SAMPLE_PREP_KIT.setOrdinal(21)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_TRUSEQRNA_SAMPLE_PREP_KIT)
-
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KITS = tr.createNewVocabularyTerm('NEXTERA_DNA_SAMPLE_PREP_KITS')
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KITS.setDescription(None)
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KITS.setLabel('Nextera Genomic DNA Sample Preparation Kit BufferLMW(Epicentre)')
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KITS.setOrdinal(18)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KITS)
-
-vocabulary_term_KIT_RIBOZERO_SCRIPTSEQ_MRNASEQ_KIT = tr.createNewVocabularyTerm('RIBOZERO_SCRIPTSEQ_MRNA-SEQ_KIT')
-vocabulary_term_KIT_RIBOZERO_SCRIPTSEQ_MRNASEQ_KIT.setDescription(None)
-vocabulary_term_KIT_RIBOZERO_SCRIPTSEQ_MRNASEQ_KIT.setLabel('RiboZero ScriptSeq mRNA-Seq_Epicentre-kit')
-vocabulary_term_KIT_RIBOZERO_SCRIPTSEQ_MRNASEQ_KIT.setOrdinal(16)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_RIBOZERO_SCRIPTSEQ_MRNASEQ_KIT)
-
-vocabulary_MACS_VERSION = tr.createNewVocabulary('MACS_VERSION')
-vocabulary_MACS_VERSION.setDescription('Used MACS version for Peak Calling')
-vocabulary_MACS_VERSION.setUrlTemplate(None)
-vocabulary_MACS_VERSION.setManagedInternally(False)
-vocabulary_MACS_VERSION.setInternalNamespace(False)
-vocabulary_MACS_VERSION.setChosenFromList(True)
-
-vocabulary_term_MACS_VERSION_1371 = tr.createNewVocabularyTerm('1.3.7.1')
-vocabulary_term_MACS_VERSION_1371.setDescription(None)
-vocabulary_term_MACS_VERSION_1371.setLabel('macs 1.3.7.1 (Oktoberfest, bug fixed #1)')
-vocabulary_term_MACS_VERSION_1371.setOrdinal(4)
-vocabulary_MACS_VERSION.addTerm(vocabulary_term_MACS_VERSION_1371)
-
-vocabulary_term_MACS_VERSION_140RC2 = tr.createNewVocabularyTerm('1.4.0RC2')
-vocabulary_term_MACS_VERSION_140RC2.setDescription(None)
-vocabulary_term_MACS_VERSION_140RC2.setLabel('macs14 1.4.0rc2 20110214 (Valentine)')
-vocabulary_term_MACS_VERSION_140RC2.setOrdinal(3)
-vocabulary_MACS_VERSION.addTerm(vocabulary_term_MACS_VERSION_140RC2)
-
-vocabulary_MISMATCH_IN_INDEX = tr.createNewVocabulary('MISMATCH_IN_INDEX')
-vocabulary_MISMATCH_IN_INDEX.setDescription('Mismatch in Index allowed')
-vocabulary_MISMATCH_IN_INDEX.setUrlTemplate(None)
-vocabulary_MISMATCH_IN_INDEX.setManagedInternally(False)
-vocabulary_MISMATCH_IN_INDEX.setInternalNamespace(False)
-vocabulary_MISMATCH_IN_INDEX.setChosenFromList(True)
-
-vocabulary_term_MISMATCH_IN_INDEX_ONE = tr.createNewVocabularyTerm('ONE')
-vocabulary_term_MISMATCH_IN_INDEX_ONE.setDescription(None)
-vocabulary_term_MISMATCH_IN_INDEX_ONE.setLabel(None)
-vocabulary_term_MISMATCH_IN_INDEX_ONE.setOrdinal(2)
-vocabulary_MISMATCH_IN_INDEX.addTerm(vocabulary_term_MISMATCH_IN_INDEX_ONE)
-
-vocabulary_term_MISMATCH_IN_INDEX_NONE = tr.createNewVocabularyTerm('NONE')
-vocabulary_term_MISMATCH_IN_INDEX_NONE.setDescription(None)
-vocabulary_term_MISMATCH_IN_INDEX_NONE.setLabel(None)
-vocabulary_term_MISMATCH_IN_INDEX_NONE.setOrdinal(1)
-vocabulary_MISMATCH_IN_INDEX.addTerm(vocabulary_term_MISMATCH_IN_INDEX_NONE)
-
-vocabulary_NANO_DROP = tr.createNewVocabulary('NANO_DROP')
-vocabulary_NANO_DROP.setDescription('Device for measuring the total amount of genetic material contained in the probe')
-vocabulary_NANO_DROP.setUrlTemplate(None)
-vocabulary_NANO_DROP.setManagedInternally(False)
-vocabulary_NANO_DROP.setInternalNamespace(False)
-vocabulary_NANO_DROP.setChosenFromList(True)
-
-vocabulary_term_NANO_DROP_CONCND3300 = tr.createNewVocabularyTerm('CONCND3300')
-vocabulary_term_NANO_DROP_CONCND3300.setDescription(None)
-vocabulary_term_NANO_DROP_CONCND3300.setLabel('Conc Nano Drop 3300')
-vocabulary_term_NANO_DROP_CONCND3300.setOrdinal(1)
-vocabulary_NANO_DROP.addTerm(vocabulary_term_NANO_DROP_CONCND3300)
-
-vocabulary_term_NANO_DROP_CONCND1000 = tr.createNewVocabularyTerm('CONCND1000')
-vocabulary_term_NANO_DROP_CONCND1000.setDescription(None)
-vocabulary_term_NANO_DROP_CONCND1000.setLabel('Conc Nano Drop 1000')
-vocabulary_term_NANO_DROP_CONCND1000.setOrdinal(2)
-vocabulary_NANO_DROP.addTerm(vocabulary_term_NANO_DROP_CONCND1000)
-
-vocabulary_term_NANO_DROP_CONCND2000 = tr.createNewVocabularyTerm('CONCND2000')
-vocabulary_term_NANO_DROP_CONCND2000.setDescription(None)
-vocabulary_term_NANO_DROP_CONCND2000.setLabel('Conc Nano Drop 2000')
-vocabulary_term_NANO_DROP_CONCND2000.setOrdinal(3)
-vocabulary_NANO_DROP.addTerm(vocabulary_term_NANO_DROP_CONCND2000)
-
-vocabulary_NCBI_TAXONOMY = tr.createNewVocabulary('NCBI_TAXONOMY')
-vocabulary_NCBI_TAXONOMY.setDescription(None)
-vocabulary_NCBI_TAXONOMY.setUrlTemplate('http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=$term$')
-vocabulary_NCBI_TAXONOMY.setManagedInternally(False)
-vocabulary_NCBI_TAXONOMY.setInternalNamespace(False)
-vocabulary_NCBI_TAXONOMY.setChosenFromList(True)
-
-vocabulary_term_NCBI_TAXONOMY_9940 = tr.createNewVocabularyTerm('9940')
-vocabulary_term_NCBI_TAXONOMY_9940.setDescription('Genbank common name: sheep\nInherited blast name: even-toed ungulates')
-vocabulary_term_NCBI_TAXONOMY_9940.setLabel('Ovis aries')
-vocabulary_term_NCBI_TAXONOMY_9940.setOrdinal(32)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_9940)
-
-vocabulary_term_NCBI_TAXONOMY_35525 = tr.createNewVocabularyTerm('35525')
-vocabulary_term_NCBI_TAXONOMY_35525.setDescription(None)
-vocabulary_term_NCBI_TAXONOMY_35525.setLabel('Daphnia Magna')
-vocabulary_term_NCBI_TAXONOMY_35525.setOrdinal(38)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_35525)
-
-vocabulary_term_NCBI_TAXONOMY_4896 = tr.createNewVocabularyTerm('4896')
-vocabulary_term_NCBI_TAXONOMY_4896.setDescription('Genbank common name: fission yeast\nInherited blast name: ascomycetes')
-vocabulary_term_NCBI_TAXONOMY_4896.setLabel('Schizosaccharomyces pombe')
-vocabulary_term_NCBI_TAXONOMY_4896.setOrdinal(25)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_4896)
-
-vocabulary_term_NCBI_TAXONOMY_3702 = tr.createNewVocabularyTerm('3702')
-vocabulary_term_NCBI_TAXONOMY_3702.setDescription('Genbank common name: thale cress\nInherited blast name: eudicots')
-vocabulary_term_NCBI_TAXONOMY_3702.setLabel('Arabidopsis thaliana')
-vocabulary_term_NCBI_TAXONOMY_3702.setOrdinal(28)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_3702)
-
-vocabulary_term_NCBI_TAXONOMY_9823 = tr.createNewVocabularyTerm('9823')
-vocabulary_term_NCBI_TAXONOMY_9823.setDescription('Genbank common name: pig\nInherited blast name: even-toed ungulates')
-vocabulary_term_NCBI_TAXONOMY_9823.setLabel('Sus scrofa')
-vocabulary_term_NCBI_TAXONOMY_9823.setOrdinal(31)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_9823)
-
-vocabulary_term_NCBI_TAXONOMY_3573 = tr.createNewVocabularyTerm('3573')
-vocabulary_term_NCBI_TAXONOMY_3573.setDescription('Genbank common name: campions\nInherited blast name: eudicots')
-vocabulary_term_NCBI_TAXONOMY_3573.setLabel(' Silene')
-vocabulary_term_NCBI_TAXONOMY_3573.setOrdinal(42)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_3573)
-
-vocabulary_term_NCBI_TAXONOMY_99287 = tr.createNewVocabularyTerm('99287')
-vocabulary_term_NCBI_TAXONOMY_99287.setDescription('Inherited blast name: enterobacteria')
-vocabulary_term_NCBI_TAXONOMY_99287.setLabel('Salmonella enterica subsp. enterica serovar Typhimurium str. LT2')
-vocabulary_term_NCBI_TAXONOMY_99287.setOrdinal(24)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_99287)
-
-vocabulary_term_NCBI_TAXONOMY_562 = tr.createNewVocabularyTerm('562')
-vocabulary_term_NCBI_TAXONOMY_562.setDescription('Inherited blast name: enterobacteria')
-vocabulary_term_NCBI_TAXONOMY_562.setLabel('Escherichia coli')
-vocabulary_term_NCBI_TAXONOMY_562.setOrdinal(8)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_562)
-
-vocabulary_term_NCBI_TAXONOMY_282301 = tr.createNewVocabularyTerm('282301')
-vocabulary_term_NCBI_TAXONOMY_282301.setDescription('Inherited blast name: flatworms')
-vocabulary_term_NCBI_TAXONOMY_282301.setLabel('Macrostomum lignano')
-vocabulary_term_NCBI_TAXONOMY_282301.setOrdinal(23)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_282301)
-
-vocabulary_term_NCBI_TAXONOMY_8153 = tr.createNewVocabularyTerm('8153')
-vocabulary_term_NCBI_TAXONOMY_8153.setDescription('cichlid fish')
-vocabulary_term_NCBI_TAXONOMY_8153.setLabel('Haplochromis burtoni')
-vocabulary_term_NCBI_TAXONOMY_8153.setOrdinal(34)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_8153)
-
-vocabulary_term_NCBI_TAXONOMY_6669 = tr.createNewVocabularyTerm('6669')
-vocabulary_term_NCBI_TAXONOMY_6669.setDescription('Genbank common name: common water flea\nInherited blast name: crustaceans')
-vocabulary_term_NCBI_TAXONOMY_6669.setLabel('Daphnia pulex')
-vocabulary_term_NCBI_TAXONOMY_6669.setOrdinal(7)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_6669)
-
-vocabulary_term_NCBI_TAXONOMY_8113 = tr.createNewVocabularyTerm('8113')
-vocabulary_term_NCBI_TAXONOMY_8113.setDescription('Genbank common name: cichlids\nInherited blast name: bony fishes')
-vocabulary_term_NCBI_TAXONOMY_8113.setLabel('Cichlidae')
-vocabulary_term_NCBI_TAXONOMY_8113.setOrdinal(20)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_8113)
-
-vocabulary_term_NCBI_TAXONOMY_7227 = tr.createNewVocabularyTerm('7227')
-vocabulary_term_NCBI_TAXONOMY_7227.setDescription('Genbank common name: fruit fly\nInherited blast name: flies')
-vocabulary_term_NCBI_TAXONOMY_7227.setLabel('Drosophila melanogaster')
-vocabulary_term_NCBI_TAXONOMY_7227.setOrdinal(3)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_7227)
-
-vocabulary_term_NCBI_TAXONOMY_623 = tr.createNewVocabularyTerm('623')
-vocabulary_term_NCBI_TAXONOMY_623.setDescription('Inherited blast name: enterobacteria')
-vocabulary_term_NCBI_TAXONOMY_623.setLabel('Shigella flexneri')
-vocabulary_term_NCBI_TAXONOMY_623.setOrdinal(9)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_623)
-
-vocabulary_term_NCBI_TAXONOMY_3569 = tr.createNewVocabularyTerm('3569')
-vocabulary_term_NCBI_TAXONOMY_3569.setDescription('Genbank common name: clove pink')
-vocabulary_term_NCBI_TAXONOMY_3569.setLabel('Dianthus')
-vocabulary_term_NCBI_TAXONOMY_3569.setOrdinal(41)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_3569)
-
-vocabulary_term_NCBI_TAXONOMY_4932 = tr.createNewVocabularyTerm('4932')
-vocabulary_term_NCBI_TAXONOMY_4932.setDescription("Genbank common name: baker's yeast\nInherited blast name: ascomycetes")
-vocabulary_term_NCBI_TAXONOMY_4932.setLabel('Saccharomyces cerevisiae')
-vocabulary_term_NCBI_TAXONOMY_4932.setOrdinal(5)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_4932)
-
-vocabulary_term_NCBI_TAXONOMY_7955 = tr.createNewVocabularyTerm('7955')
-vocabulary_term_NCBI_TAXONOMY_7955.setDescription('Genbank common name: zebrafish\nInherited blast name: bony fishes')
-vocabulary_term_NCBI_TAXONOMY_7955.setLabel('Danio rerio')
-vocabulary_term_NCBI_TAXONOMY_7955.setOrdinal(27)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_7955)
-
-vocabulary_term_NCBI_TAXONOMY_13068 = tr.createNewVocabularyTerm('13068')
-vocabulary_term_NCBI_TAXONOMY_13068.setDescription(None)
-vocabulary_term_NCBI_TAXONOMY_13068.setLabel('Forficula auricularia (earwig)')
-vocabulary_term_NCBI_TAXONOMY_13068.setOrdinal(40)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_13068)
-
-vocabulary_term_NCBI_TAXONOMY_10116 = tr.createNewVocabularyTerm('10116')
-vocabulary_term_NCBI_TAXONOMY_10116.setDescription('Genbank common name: Norway rat\nInherited blast name: rodents')
-vocabulary_term_NCBI_TAXONOMY_10116.setLabel('Rattus norvegicus')
-vocabulary_term_NCBI_TAXONOMY_10116.setOrdinal(6)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_10116)
-
-vocabulary_term_NCBI_TAXONOMY_225322 = tr.createNewVocabularyTerm('225322')
-vocabulary_term_NCBI_TAXONOMY_225322.setDescription('Bacterium which infects Daphnia\nPasteuria ramosa Metchnikoff 1888 (Approved Lists 1980) emend. Starr et al. 1986\nEbert D, Rainey P, Embley TM, Scholz D. Development, life\n cycle, ultrastructure and phylogenetic position of Pasteuria ramosa Metchnikoff 1888: rediscovery of an obligate\n endoparasite of Daphnia magna Straus. Philos Trans R Soc\n Lond Ser B. 1996;351:1689.')
-vocabulary_term_NCBI_TAXONOMY_225322.setLabel('Pasteuria ramosa')
-vocabulary_term_NCBI_TAXONOMY_225322.setOrdinal(29)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_225322)
-
-vocabulary_term_NCBI_TAXONOMY_4897 = tr.createNewVocabularyTerm('4897')
-vocabulary_term_NCBI_TAXONOMY_4897.setDescription('Inherited blast name: ascomycetes')
-vocabulary_term_NCBI_TAXONOMY_4897.setLabel('Schizosaccharomyces japonicus')
-vocabulary_term_NCBI_TAXONOMY_4897.setOrdinal(26)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_4897)
-
-vocabulary_term_NCBI_TAXONOMY_32644 = tr.createNewVocabularyTerm('32644')
-vocabulary_term_NCBI_TAXONOMY_32644.setDescription('Inherited blast name: unclassified')
-vocabulary_term_NCBI_TAXONOMY_32644.setLabel('unidentified')
-vocabulary_term_NCBI_TAXONOMY_32644.setOrdinal(50)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_32644)
-
-vocabulary_term_NCBI_TAXONOMY_9606 = tr.createNewVocabularyTerm('9606')
-vocabulary_term_NCBI_TAXONOMY_9606.setDescription('Genbank common name: human\nInherited blast name: primates')
-vocabulary_term_NCBI_TAXONOMY_9606.setLabel('Homo sapiens')
-vocabulary_term_NCBI_TAXONOMY_9606.setOrdinal(2)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_9606)
-
-vocabulary_term_NCBI_TAXONOMY_9913 = tr.createNewVocabularyTerm('9913')
-vocabulary_term_NCBI_TAXONOMY_9913.setDescription('Genbank common name: cattle\nInherited blast name: even-toed ungulates')
-vocabulary_term_NCBI_TAXONOMY_9913.setLabel('Bos taurus')
-vocabulary_term_NCBI_TAXONOMY_9913.setOrdinal(30)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_9913)
-
-vocabulary_term_NCBI_TAXONOMY_10847 = tr.createNewVocabularyTerm('10847')
-vocabulary_term_NCBI_TAXONOMY_10847.setDescription('Inherited blast name: viruses')
-vocabulary_term_NCBI_TAXONOMY_10847.setLabel('Enterobacteria phage phiX174')
-vocabulary_term_NCBI_TAXONOMY_10847.setOrdinal(18)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_10847)
-
-vocabulary_term_NCBI_TAXONOMY_6239 = tr.createNewVocabularyTerm('6239')
-vocabulary_term_NCBI_TAXONOMY_6239.setDescription('Inherited blast name: nematodes')
-vocabulary_term_NCBI_TAXONOMY_6239.setLabel('Caenorhabditis elegans')
-vocabulary_term_NCBI_TAXONOMY_6239.setOrdinal(4)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_6239)
-
-vocabulary_term_NCBI_TAXONOMY_10090 = tr.createNewVocabularyTerm('10090')
-vocabulary_term_NCBI_TAXONOMY_10090.setDescription('Genbank common name: house mouse\nInherited blast name: rodents')
-vocabulary_term_NCBI_TAXONOMY_10090.setLabel('Mus musculus')
-vocabulary_term_NCBI_TAXONOMY_10090.setOrdinal(1)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_10090)
-
-vocabulary_term_NCBI_TAXONOMY_190650 = tr.createNewVocabularyTerm('190650')
-vocabulary_term_NCBI_TAXONOMY_190650.setDescription('Inherited blast name: a-proteobacteria')
-vocabulary_term_NCBI_TAXONOMY_190650.setLabel('Caulobacter crescentus CB15')
-vocabulary_term_NCBI_TAXONOMY_190650.setOrdinal(19)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_190650)
-
-vocabulary_term_NCBI_TAXONOMY_481459 = tr.createNewVocabularyTerm('481459')
-vocabulary_term_NCBI_TAXONOMY_481459.setDescription('Genbank common name: three-spined stickleback\nInherited blast name: bony fishes')
-vocabulary_term_NCBI_TAXONOMY_481459.setLabel('Gasterosteus aculeatus aculeatus')
-vocabulary_term_NCBI_TAXONOMY_481459.setOrdinal(21)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_481459)
-
-vocabulary_term_NCBI_TAXONOMY_9925 = tr.createNewVocabularyTerm('9925')
-vocabulary_term_NCBI_TAXONOMY_9925.setDescription('Genbank common name: goat\nInherited blast name: even-toed ungulates')
-vocabulary_term_NCBI_TAXONOMY_9925.setLabel('Capra hircus')
-vocabulary_term_NCBI_TAXONOMY_9925.setOrdinal(33)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_9925)
-
-vocabulary_term_NCBI_TAXONOMY_4081 = tr.createNewVocabularyTerm('4081')
-vocabulary_term_NCBI_TAXONOMY_4081.setDescription('Common Name: tomato')
-vocabulary_term_NCBI_TAXONOMY_4081.setLabel('Solanum lycopersicum (tomato)')
-vocabulary_term_NCBI_TAXONOMY_4081.setOrdinal(39)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_4081)
-
-vocabulary_term_NCBI_TAXONOMY_61818 = tr.createNewVocabularyTerm('61818')
-vocabulary_term_NCBI_TAXONOMY_61818.setDescription('bony fish')
-vocabulary_term_NCBI_TAXONOMY_61818.setLabel('Amphilophus (nicaraguan)')
-vocabulary_term_NCBI_TAXONOMY_61818.setOrdinal(35)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_61818)
-
-vocabulary_PIPELINE_VERSION = tr.createNewVocabulary('PIPELINE_VERSION')
-vocabulary_PIPELINE_VERSION.setDescription('With which pipeline version has the data been analyzed?')
-vocabulary_PIPELINE_VERSION.setUrlTemplate(None)
-vocabulary_PIPELINE_VERSION.setManagedInternally(False)
-vocabulary_PIPELINE_VERSION.setInternalNamespace(False)
-vocabulary_PIPELINE_VERSION.setChosenFromList(True)
-
-vocabulary_term_PIPELINE_VERSION_11242 = tr.createNewVocabularyTerm('1.12.4.2')
-vocabulary_term_PIPELINE_VERSION_11242.setDescription('Real Time Analysis in combination with HCS 1.4.8')
-vocabulary_term_PIPELINE_VERSION_11242.setLabel('RTA 1.12.4.2 (HiSeq 2000)')
-vocabulary_term_PIPELINE_VERSION_11242.setOrdinal(2)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_11242)
-
-vocabulary_term_PIPELINE_VERSION_10 = tr.createNewVocabularyTerm('1.0')
-vocabulary_term_PIPELINE_VERSION_10.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_10.setLabel(None)
-vocabulary_term_PIPELINE_VERSION_10.setOrdinal(26)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_10)
-
-vocabulary_term_PIPELINE_VERSION_RTA_16 = tr.createNewVocabularyTerm('RTA_1.6')
-vocabulary_term_PIPELINE_VERSION_RTA_16.setDescription('Real Time Analysis 1.6')
-vocabulary_term_PIPELINE_VERSION_RTA_16.setLabel('RTA 1.6')
-vocabulary_term_PIPELINE_VERSION_RTA_16.setOrdinal(13)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_RTA_16)
-
-vocabulary_term_PIPELINE_VERSION_132 = tr.createNewVocabularyTerm('1.3.2')
-vocabulary_term_PIPELINE_VERSION_132.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_132.setLabel(None)
-vocabulary_term_PIPELINE_VERSION_132.setOrdinal(23)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_132)
-
-vocabulary_term_PIPELINE_VERSION_14 = tr.createNewVocabularyTerm('1.4')
-vocabulary_term_PIPELINE_VERSION_14.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_14.setLabel(None)
-vocabulary_term_PIPELINE_VERSION_14.setOrdinal(22)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_14)
-
-vocabulary_term_PIPELINE_VERSION_RTA_15 = tr.createNewVocabularyTerm('RTA_1.5')
-vocabulary_term_PIPELINE_VERSION_RTA_15.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_RTA_15.setLabel('RTA 1.5')
-vocabulary_term_PIPELINE_VERSION_RTA_15.setOrdinal(14)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_RTA_15)
-
-vocabulary_term_PIPELINE_VERSION_19 = tr.createNewVocabularyTerm('1.9')
-vocabulary_term_PIPELINE_VERSION_19.setDescription('Real Time Analysis 1.9')
-vocabulary_term_PIPELINE_VERSION_19.setLabel('RTA 1.9 (GA IIx)')
-vocabulary_term_PIPELINE_VERSION_19.setOrdinal(5)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_19)
-
-vocabulary_term_PIPELINE_VERSION_1124 = tr.createNewVocabularyTerm('1.12.4')
-vocabulary_term_PIPELINE_VERSION_1124.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_1124.setLabel('RTA 1.12.4 (HiSeq 2000)')
-vocabulary_term_PIPELINE_VERSION_1124.setOrdinal(3)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_1124)
-
-vocabulary_term_PIPELINE_VERSION_RTA = tr.createNewVocabularyTerm('RTA')
-vocabulary_term_PIPELINE_VERSION_RTA.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_RTA.setLabel(None)
-vocabulary_term_PIPELINE_VERSION_RTA.setOrdinal(30)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_RTA)
-
-vocabulary_term_PIPELINE_VERSION_RTA_14150 = tr.createNewVocabularyTerm('RTA_1.4.15.0')
-vocabulary_term_PIPELINE_VERSION_RTA_14150.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_RTA_14150.setLabel('RTA 1.4.15.0')
-vocabulary_term_PIPELINE_VERSION_RTA_14150.setOrdinal(17)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_RTA_14150)
-
-vocabulary_term_PIPELINE_VERSION_112 = tr.createNewVocabularyTerm('1.12')
-vocabulary_term_PIPELINE_VERSION_112.setDescription('Real Time Analysis 1.12 HiSeq 2000')
-vocabulary_term_PIPELINE_VERSION_112.setLabel('RTA 1.12')
-vocabulary_term_PIPELINE_VERSION_112.setOrdinal(4)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_112)
-
-vocabulary_term_PIPELINE_VERSION_15 = tr.createNewVocabularyTerm('1.5')
-vocabulary_term_PIPELINE_VERSION_15.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_15.setLabel(None)
-vocabulary_term_PIPELINE_VERSION_15.setOrdinal(18)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_15)
-
-vocabulary_term_PIPELINE_VERSION_11348 = tr.createNewVocabularyTerm('1.13.48')
-vocabulary_term_PIPELINE_VERSION_11348.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_11348.setLabel('RTA 1.13.48')
-vocabulary_term_PIPELINE_VERSION_11348.setOrdinal(1)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_11348)
-
-vocabulary_term_PIPELINE_VERSION_PRE_10 = tr.createNewVocabularyTerm('PRE_1.0')
-vocabulary_term_PIPELINE_VERSION_PRE_10.setDescription('Before Pipeline Version 1.0')
-vocabulary_term_PIPELINE_VERSION_PRE_10.setLabel(None)
-vocabulary_term_PIPELINE_VERSION_PRE_10.setOrdinal(27)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_PRE_10)
-
-vocabulary_term_PIPELINE_VERSION_RTA_18 = tr.createNewVocabularyTerm('RTA_1.8')
-vocabulary_term_PIPELINE_VERSION_RTA_18.setDescription('Real Time Analysis 1.8')
-vocabulary_term_PIPELINE_VERSION_RTA_18.setLabel('RTA 1.8')
-vocabulary_term_PIPELINE_VERSION_RTA_18.setOrdinal(6)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_RTA_18)
-
-vocabulary_term_PIPELINE_VERSION_NONE = tr.createNewVocabularyTerm('NONE')
-vocabulary_term_PIPELINE_VERSION_NONE.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_NONE.setLabel(None)
-vocabulary_term_PIPELINE_VERSION_NONE.setOrdinal(29)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_NONE)
-
-vocabulary_REQUIRED_LANES = tr.createNewVocabulary('REQUIRED_LANES')
-vocabulary_REQUIRED_LANES.setDescription('Amount of lanes needed for this probe')
-vocabulary_REQUIRED_LANES.setUrlTemplate(None)
-vocabulary_REQUIRED_LANES.setManagedInternally(False)
-vocabulary_REQUIRED_LANES.setInternalNamespace(False)
-vocabulary_REQUIRED_LANES.setChosenFromList(True)
-
-vocabulary_term_REQUIRED_LANES_7 = tr.createNewVocabularyTerm('7')
-vocabulary_term_REQUIRED_LANES_7.setDescription(None)
-vocabulary_term_REQUIRED_LANES_7.setLabel(None)
-vocabulary_term_REQUIRED_LANES_7.setOrdinal(8)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_7)
-
-vocabulary_term_REQUIRED_LANES_13 = tr.createNewVocabularyTerm('13')
-vocabulary_term_REQUIRED_LANES_13.setDescription(None)
-vocabulary_term_REQUIRED_LANES_13.setLabel(None)
-vocabulary_term_REQUIRED_LANES_13.setOrdinal(15)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_13)
-
-vocabulary_term_REQUIRED_LANES_8 = tr.createNewVocabularyTerm('8')
-vocabulary_term_REQUIRED_LANES_8.setDescription(None)
-vocabulary_term_REQUIRED_LANES_8.setLabel(None)
-vocabulary_term_REQUIRED_LANES_8.setOrdinal(10)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_8)
-
-vocabulary_term_REQUIRED_LANES_14 = tr.createNewVocabularyTerm('14')
-vocabulary_term_REQUIRED_LANES_14.setDescription(None)
-vocabulary_term_REQUIRED_LANES_14.setLabel(None)
-vocabulary_term_REQUIRED_LANES_14.setOrdinal(16)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_14)
-
-vocabulary_term_REQUIRED_LANES_3 = tr.createNewVocabularyTerm('3')
-vocabulary_term_REQUIRED_LANES_3.setDescription(None)
-vocabulary_term_REQUIRED_LANES_3.setLabel(None)
-vocabulary_term_REQUIRED_LANES_3.setOrdinal(4)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_3)
-
-vocabulary_term_REQUIRED_LANES_4 = tr.createNewVocabularyTerm('4')
-vocabulary_term_REQUIRED_LANES_4.setDescription(None)
-vocabulary_term_REQUIRED_LANES_4.setLabel(None)
-vocabulary_term_REQUIRED_LANES_4.setOrdinal(5)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_4)
-
-vocabulary_term_REQUIRED_LANES_16 = tr.createNewVocabularyTerm('16')
-vocabulary_term_REQUIRED_LANES_16.setDescription(None)
-vocabulary_term_REQUIRED_LANES_16.setLabel(None)
-vocabulary_term_REQUIRED_LANES_16.setOrdinal(18)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_16)
-
-vocabulary_term_REQUIRED_LANES_5 = tr.createNewVocabularyTerm('5')
-vocabulary_term_REQUIRED_LANES_5.setDescription(None)
-vocabulary_term_REQUIRED_LANES_5.setLabel(None)
-vocabulary_term_REQUIRED_LANES_5.setOrdinal(6)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_5)
-
-vocabulary_term_REQUIRED_LANES_2 = tr.createNewVocabularyTerm('2')
-vocabulary_term_REQUIRED_LANES_2.setDescription(None)
-vocabulary_term_REQUIRED_LANES_2.setLabel(None)
-vocabulary_term_REQUIRED_LANES_2.setOrdinal(3)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_2)
-
-vocabulary_term_REQUIRED_LANES_15 = tr.createNewVocabularyTerm('15')
-vocabulary_term_REQUIRED_LANES_15.setDescription(None)
-vocabulary_term_REQUIRED_LANES_15.setLabel(None)
-vocabulary_term_REQUIRED_LANES_15.setOrdinal(17)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_15)
-
-vocabulary_term_REQUIRED_LANES_6 = tr.createNewVocabularyTerm('6')
-vocabulary_term_REQUIRED_LANES_6.setDescription(None)
-vocabulary_term_REQUIRED_LANES_6.setLabel(None)
-vocabulary_term_REQUIRED_LANES_6.setOrdinal(7)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_6)
-
-vocabulary_term_REQUIRED_LANES_1 = tr.createNewVocabularyTerm('1')
-vocabulary_term_REQUIRED_LANES_1.setDescription(None)
-vocabulary_term_REQUIRED_LANES_1.setLabel(None)
-vocabulary_term_REQUIRED_LANES_1.setOrdinal(2)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_1)
-
-vocabulary_term_REQUIRED_LANES_11 = tr.createNewVocabularyTerm('11')
-vocabulary_term_REQUIRED_LANES_11.setDescription(None)
-vocabulary_term_REQUIRED_LANES_11.setLabel(None)
-vocabulary_term_REQUIRED_LANES_11.setOrdinal(13)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_11)
-
-vocabulary_term_REQUIRED_LANES_10 = tr.createNewVocabularyTerm('10')
-vocabulary_term_REQUIRED_LANES_10.setDescription(None)
-vocabulary_term_REQUIRED_LANES_10.setLabel(None)
-vocabulary_term_REQUIRED_LANES_10.setOrdinal(12)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_10)
-
-vocabulary_term_REQUIRED_LANES_12 = tr.createNewVocabularyTerm('12')
-vocabulary_term_REQUIRED_LANES_12.setDescription(None)
-vocabulary_term_REQUIRED_LANES_12.setLabel(None)
-vocabulary_term_REQUIRED_LANES_12.setOrdinal(14)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_12)
-
-vocabulary_term_REQUIRED_LANES_9 = tr.createNewVocabularyTerm('9')
-vocabulary_term_REQUIRED_LANES_9.setDescription(None)
-vocabulary_term_REQUIRED_LANES_9.setLabel(None)
-vocabulary_term_REQUIRED_LANES_9.setOrdinal(11)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_9)
-
-vocabulary_SAMPLE_LIBRARY_SELECTION = tr.createNewVocabulary('SAMPLE_LIBRARY_SELECTION')
-vocabulary_SAMPLE_LIBRARY_SELECTION.setDescription('Describes whether any method was used to select and/or enrich the material being sequenced.')
-vocabulary_SAMPLE_LIBRARY_SELECTION.setUrlTemplate(None)
-vocabulary_SAMPLE_LIBRARY_SELECTION.setManagedInternally(False)
-vocabulary_SAMPLE_LIBRARY_SELECTION.setInternalNamespace(False)
-vocabulary_SAMPLE_LIBRARY_SELECTION.setChosenFromList(True)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RANDOM_PCR = tr.createNewVocabularyTerm('RANDOM_PCR')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RANDOM_PCR.setDescription('Source material was selected by randomly generated primers')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RANDOM_PCR.setLabel('RANDOM PCR')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RANDOM_PCR.setOrdinal(11)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_RANDOM_PCR)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RESTRICTION_DIGEST = tr.createNewVocabularyTerm('RESTRICTION_DIGEST')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RESTRICTION_DIGEST.setDescription('Restriction enzyme digestion')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RESTRICTION_DIGEST.setLabel('Restriction Digest')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RESTRICTION_DIGEST.setOrdinal(3)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_RESTRICTION_DIGEST)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CHIP = tr.createNewVocabularyTerm('CHIP')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CHIP.setDescription('Chromatin immunoprecipitation')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CHIP.setLabel('ChIP')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CHIP.setOrdinal(1)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_CHIP)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFS = tr.createNewVocabularyTerm('CF-S')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFS.setDescription('Cot-filtered single/low-copy genomic DNA')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFS.setLabel('CF-S')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFS.setOrdinal(13)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFS)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_UNSPECIFIED = tr.createNewVocabularyTerm('UNSPECIFIED')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_UNSPECIFIED.setDescription(None)
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_UNSPECIFIED.setLabel('unspecified')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_UNSPECIFIED.setOrdinal(18)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_UNSPECIFIED)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFH = tr.createNewVocabularyTerm('CF-H')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFH.setDescription('Cot-filtered highly repetitive genomic DNA')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFH.setLabel('CF-H')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFH.setOrdinal(15)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFH)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RANDOM = tr.createNewVocabularyTerm('RANDOM')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RANDOM.setDescription('Random shearing only')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RANDOM.setLabel('RANDOM')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RANDOM.setOrdinal(5)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_RANDOM)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_HMPR = tr.createNewVocabularyTerm('HMPR')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_HMPR.setDescription('Hypo-methylated partial restriction digest')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_HMPR.setLabel('HMPR')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_HMPR.setOrdinal(8)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_HMPR)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MNASE = tr.createNewVocabularyTerm('MNASE')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MNASE.setDescription('Micrococcal Nuclease (MNase) digestion')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MNASE.setLabel('MNase')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MNASE.setOrdinal(2)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_MNASE)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_5METHYLCYTIDINE_ANTIBODY = tr.createNewVocabularyTerm('5-METHYLCYTIDINE_ANTIBODY')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_5METHYLCYTIDINE_ANTIBODY.setDescription('Methylated DNA immunoprecipitation')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_5METHYLCYTIDINE_ANTIBODY.setLabel('5-methylcytidine antibody')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_5METHYLCYTIDINE_ANTIBODY.setOrdinal(4)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_5METHYLCYTIDINE_ANTIBODY)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RTPCR = tr.createNewVocabularyTerm('RT-PCR')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RTPCR.setDescription('Source material was selected by reverse transcription PCR')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RTPCR.setLabel('RT-PCR')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RTPCR.setOrdinal(12)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_RTPCR)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFM = tr.createNewVocabularyTerm('CF-M')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFM.setDescription('Cot-filtered moderately repetitive genomic DNA')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFM.setLabel('CF-M')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFM.setOrdinal(14)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFM)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CDNA = tr.createNewVocabularyTerm('CDNA')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CDNA.setDescription('complementary DNA')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CDNA.setLabel('cDNA')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CDNA.setOrdinal(9)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_CDNA)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MF = tr.createNewVocabularyTerm('MF')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MF.setDescription('Methyl Filtrated')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MF.setLabel('MF')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MF.setOrdinal(6)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_MF)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_OTHER = tr.createNewVocabularyTerm('OTHER')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_OTHER.setDescription(None)
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_OTHER.setLabel('other')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_OTHER.setOrdinal(17)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_OTHER)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_PCR = tr.createNewVocabularyTerm('PCR')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_PCR.setDescription('Source material was selected by designed primers')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_PCR.setLabel('PCR')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_PCR.setOrdinal(10)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_PCR)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MSLL = tr.createNewVocabularyTerm('MSLL')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MSLL.setDescription('Methylation Spanning Linking Library')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MSLL.setLabel('MSLL')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MSLL.setOrdinal(7)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_MSLL)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFT = tr.createNewVocabularyTerm('CF-T')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFT.setDescription('Cot-filtered theoretical single-copy genomic DNA')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFT.setLabel('CF-T')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFT.setOrdinal(16)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFT)
-
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC = tr.createNewVocabulary('SAMPLE_LIBRARY_SOURCE_VOC')
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC.setDescription(None)
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC.setUrlTemplate(None)
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC.setManagedInternally(False)
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC.setInternalNamespace(False)
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC.setChosenFromList(True)
-
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_OTHER = tr.createNewVocabularyTerm('OTHER')
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_OTHER.setDescription(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_OTHER.setLabel(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_OTHER.setOrdinal(6)
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC.addTerm(vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_OTHER)
-
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_NONGENOMIC = tr.createNewVocabularyTerm('NON-GENOMIC')
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_NONGENOMIC.setDescription(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_NONGENOMIC.setLabel(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_NONGENOMIC.setOrdinal(2)
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC.addTerm(vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_NONGENOMIC)
-
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_GENOMIC = tr.createNewVocabularyTerm('GENOMIC')
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_GENOMIC.setDescription(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_GENOMIC.setLabel(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_GENOMIC.setOrdinal(1)
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC.addTerm(vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_GENOMIC)
-
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_VIRAL = tr.createNewVocabularyTerm('VIRAL')
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_VIRAL.setDescription(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_VIRAL.setLabel(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_VIRAL.setOrdinal(4)
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC.addTerm(vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_VIRAL)
-
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_SYNTHETIC = tr.createNewVocabularyTerm('SYNTHETIC')
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_SYNTHETIC.setDescription(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_SYNTHETIC.setLabel(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_SYNTHETIC.setOrdinal(3)
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC.addTerm(vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_SYNTHETIC)
-
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_RNA = tr.createNewVocabularyTerm('RNA')
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_RNA.setDescription(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_RNA.setLabel(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_RNA.setOrdinal(5)
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC.addTerm(vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_RNA)
-
-vocabulary_SAMPLE_LIBRARY_STRATEGY = tr.createNewVocabulary('SAMPLE_LIBRARY_STRATEGY')
-vocabulary_SAMPLE_LIBRARY_STRATEGY.setDescription('Sequencing technique for this library.')
-vocabulary_SAMPLE_LIBRARY_STRATEGY.setUrlTemplate(None)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.setManagedInternally(False)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.setInternalNamespace(False)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.setChosenFromList(True)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_AMPLICON = tr.createNewVocabularyTerm('AMPLICON')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_AMPLICON.setDescription('Sequencing of overlapping or distinct PCR or RT-PCR products')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_AMPLICON.setLabel('AMPLICON')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_AMPLICON.setOrdinal(15)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_AMPLICON)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CHIPSEQ = tr.createNewVocabularyTerm('CHIP-SEQ')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CHIPSEQ.setDescription('Direct sequencing of chromatin immunoprecipitates')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CHIPSEQ.setLabel('ChIP-Seq')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CHIPSEQ.setOrdinal(1)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CHIPSEQ)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_RNASEQ = tr.createNewVocabularyTerm('RNA-SEQ')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_RNASEQ.setDescription('RNA sequencing')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_RNASEQ.setLabel('RNA-Seq')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_RNASEQ.setOrdinal(2)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_RNASEQ)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_OTHER = tr.createNewVocabularyTerm('OTHER')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_OTHER.setDescription('Library strategy not listed')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_OTHER.setLabel('OTHER')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_OTHER.setOrdinal(17)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_OTHER)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CTS = tr.createNewVocabularyTerm('CTS')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CTS.setDescription('Concatenated Tag Sequencing')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CTS.setLabel('CTS')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CTS.setOrdinal(8)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CTS)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MNASESEQ = tr.createNewVocabularyTerm('MNASE-SEQ')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MNASESEQ.setDescription('Direct sequencing following MNase digestion')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MNASESEQ.setLabel('MNase-Seq')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MNASESEQ.setOrdinal(4)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MNASESEQ)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_EST = tr.createNewVocabularyTerm('EST')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_EST.setDescription('Single pass sequencing of cDNA templates')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_EST.setLabel('EST')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_EST.setOrdinal(6)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_EST)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_FLCDNA = tr.createNewVocabularyTerm('FL-CDNA')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_FLCDNA.setDescription('Full-length sequencing of cDNA templates')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_FLCDNA.setLabel('FL-cDNA')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_FLCDNA.setOrdinal(7)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_FLCDNA)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CLONEEND = tr.createNewVocabularyTerm('CLONEEND')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CLONEEND.setDescription("Clone end (5', 3', or both) sequencing")
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CLONEEND.setLabel('CLONEEND')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CLONEEND.setOrdinal(10)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CLONEEND)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MEDIPSEQ = tr.createNewVocabularyTerm('MEDIP-SEQ')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MEDIPSEQ.setDescription('Methylated DNA immunoprecipitation sequencing')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MEDIPSEQ.setLabel('MeDIP-Seq')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MEDIPSEQ.setOrdinal(3)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MEDIPSEQ)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_BARCODE = tr.createNewVocabularyTerm('BARCODE')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_BARCODE.setDescription('Sequencing of products that have been tagged with a short identifying sequence (barcode)')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_BARCODE.setLabel('BARCODE')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_BARCODE.setOrdinal(9)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_BARCODE)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MRESEQ = tr.createNewVocabularyTerm('MRE-SEQ')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MRESEQ.setDescription('Methylation-sensitive restriction enzyme sequencing')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MRESEQ.setLabel('MRE-Seq')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MRESEQ.setOrdinal(5)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MRESEQ)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_FINISHING = tr.createNewVocabularyTerm('FINISHING')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_FINISHING.setDescription('Sequencing intended to finish (close) gaps in existing coverage')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_FINISHING.setLabel('FINISHING')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_FINISHING.setOrdinal(16)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_FINISHING)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_WCS = tr.createNewVocabularyTerm('WCS')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_WCS.setDescription('Whole chromosome (or other replicon) shotgun')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_WCS.setLabel('WCS')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_WCS.setOrdinal(12)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_WCS)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_POOLCLONE = tr.createNewVocabularyTerm('POOLCLONE')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_POOLCLONE.setDescription('Shotgun of pooled clones (usually BACs and Fosmids)')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_POOLCLONE.setLabel('POOLCLONE')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_POOLCLONE.setOrdinal(14)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_POOLCLONE)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CLONE = tr.createNewVocabularyTerm('CLONE')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CLONE.setDescription('Genomic clone based (hierarchical) sequencing')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CLONE.setLabel('CLONE')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CLONE.setOrdinal(13)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CLONE)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_WGS = tr.createNewVocabularyTerm('WGS')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_WGS.setDescription('Whole genome shotgun')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_WGS.setLabel('WGS')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_WGS.setOrdinal(11)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_WGS)
-
-vocabulary_SAMPLE_MOLECULE = tr.createNewVocabulary('SAMPLE_MOLECULE')
-vocabulary_SAMPLE_MOLECULE.setDescription(None)
-vocabulary_SAMPLE_MOLECULE.setUrlTemplate(None)
-vocabulary_SAMPLE_MOLECULE.setManagedInternally(False)
-vocabulary_SAMPLE_MOLECULE.setInternalNamespace(False)
-vocabulary_SAMPLE_MOLECULE.setChosenFromList(True)
-
-vocabulary_term_SAMPLE_MOLECULE_PROTEIN = tr.createNewVocabularyTerm('PROTEIN')
-vocabulary_term_SAMPLE_MOLECULE_PROTEIN.setDescription(None)
-vocabulary_term_SAMPLE_MOLECULE_PROTEIN.setLabel(None)
-vocabulary_term_SAMPLE_MOLECULE_PROTEIN.setOrdinal(6)
-vocabulary_SAMPLE_MOLECULE.addTerm(vocabulary_term_SAMPLE_MOLECULE_PROTEIN)
-
-vocabulary_term_SAMPLE_MOLECULE_TOTAL_RNA = tr.createNewVocabularyTerm('TOTAL_RNA')
-vocabulary_term_SAMPLE_MOLECULE_TOTAL_RNA.setDescription(None)
-vocabulary_term_SAMPLE_MOLECULE_TOTAL_RNA.setLabel(None)
-vocabulary_term_SAMPLE_MOLECULE_TOTAL_RNA.setOrdinal(1)
-vocabulary_SAMPLE_MOLECULE.addTerm(vocabulary_term_SAMPLE_MOLECULE_TOTAL_RNA)
-
-vocabulary_term_SAMPLE_MOLECULE_CYTOPLASMIC_RNA = tr.createNewVocabularyTerm('CYTOPLASMIC_RNA')
-vocabulary_term_SAMPLE_MOLECULE_CYTOPLASMIC_RNA.setDescription(None)
-vocabulary_term_SAMPLE_MOLECULE_CYTOPLASMIC_RNA.setLabel(None)
-vocabulary_term_SAMPLE_MOLECULE_CYTOPLASMIC_RNA.setOrdinal(3)
-vocabulary_SAMPLE_MOLECULE.addTerm(vocabulary_term_SAMPLE_MOLECULE_CYTOPLASMIC_RNA)
-
-vocabulary_term_SAMPLE_MOLECULE_NUCLEAR_RNA = tr.createNewVocabularyTerm('NUCLEAR_RNA')
-vocabulary_term_SAMPLE_MOLECULE_NUCLEAR_RNA.setDescription(None)
-vocabulary_term_SAMPLE_MOLECULE_NUCLEAR_RNA.setLabel(None)
-vocabulary_term_SAMPLE_MOLECULE_NUCLEAR_RNA.setOrdinal(4)
-vocabulary_SAMPLE_MOLECULE.addTerm(vocabulary_term_SAMPLE_MOLECULE_NUCLEAR_RNA)
-
-vocabulary_term_SAMPLE_MOLECULE_GENOMIC_DNA = tr.createNewVocabularyTerm('GENOMIC_DNA')
-vocabulary_term_SAMPLE_MOLECULE_GENOMIC_DNA.setDescription(None)
-vocabulary_term_SAMPLE_MOLECULE_GENOMIC_DNA.setLabel(None)
-vocabulary_term_SAMPLE_MOLECULE_GENOMIC_DNA.setOrdinal(5)
-vocabulary_SAMPLE_MOLECULE.addTerm(vocabulary_term_SAMPLE_MOLECULE_GENOMIC_DNA)
-
-vocabulary_term_SAMPLE_MOLECULE_POLYA_RNA = tr.createNewVocabularyTerm('POLYA_RNA')
-vocabulary_term_SAMPLE_MOLECULE_POLYA_RNA.setDescription(None)
-vocabulary_term_SAMPLE_MOLECULE_POLYA_RNA.setLabel(None)
-vocabulary_term_SAMPLE_MOLECULE_POLYA_RNA.setOrdinal(2)
-vocabulary_SAMPLE_MOLECULE.addTerm(vocabulary_term_SAMPLE_MOLECULE_POLYA_RNA)
-
-vocabulary_term_SAMPLE_MOLECULE_OTHER = tr.createNewVocabularyTerm('OTHER')
-vocabulary_term_SAMPLE_MOLECULE_OTHER.setDescription(None)
-vocabulary_term_SAMPLE_MOLECULE_OTHER.setLabel(None)
-vocabulary_term_SAMPLE_MOLECULE_OTHER.setOrdinal(18)
-vocabulary_SAMPLE_MOLECULE.addTerm(vocabulary_term_SAMPLE_MOLECULE_OTHER)
-
-vocabulary_SAMPLE_TYPE = tr.createNewVocabulary('SAMPLE_TYPE')
-vocabulary_SAMPLE_TYPE.setDescription('Type of sample delivered by the customer')
-vocabulary_SAMPLE_TYPE.setUrlTemplate(None)
-vocabulary_SAMPLE_TYPE.setManagedInternally(False)
-vocabulary_SAMPLE_TYPE.setInternalNamespace(False)
-vocabulary_SAMPLE_TYPE.setChosenFromList(True)
-
-vocabulary_term_SAMPLE_TYPE_MRNA = tr.createNewVocabularyTerm('MRNA')
-vocabulary_term_SAMPLE_TYPE_MRNA.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_MRNA.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_MRNA.setOrdinal(8)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_MRNA)
-
-vocabulary_term_SAMPLE_TYPE_OTHER = tr.createNewVocabularyTerm('OTHER')
-vocabulary_term_SAMPLE_TYPE_OTHER.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_OTHER.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_OTHER.setOrdinal(9)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_OTHER)
-
-vocabulary_term_SAMPLE_TYPE_PROCESSED_DNA_LIBRARY = tr.createNewVocabularyTerm('PROCESSED_DNA_LIBRARY')
-vocabulary_term_SAMPLE_TYPE_PROCESSED_DNA_LIBRARY.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_PROCESSED_DNA_LIBRARY.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_PROCESSED_DNA_LIBRARY.setOrdinal(10)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_PROCESSED_DNA_LIBRARY)
-
-vocabulary_term_SAMPLE_TYPE_GENOMIC_DNA = tr.createNewVocabularyTerm('GENOMIC_DNA')
-vocabulary_term_SAMPLE_TYPE_GENOMIC_DNA.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_GENOMIC_DNA.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_GENOMIC_DNA.setOrdinal(1)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_GENOMIC_DNA)
-
-vocabulary_term_SAMPLE_TYPE_SMALL_RNA = tr.createNewVocabularyTerm('SMALL_RNA')
-vocabulary_term_SAMPLE_TYPE_SMALL_RNA.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_SMALL_RNA.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_SMALL_RNA.setOrdinal(2)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_SMALL_RNA)
-
-vocabulary_term_SAMPLE_TYPE_CHIP = tr.createNewVocabularyTerm('CHIP')
-vocabulary_term_SAMPLE_TYPE_CHIP.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_CHIP.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_CHIP.setOrdinal(4)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_CHIP)
-
-vocabulary_term_SAMPLE_TYPE_SYNTHETIC = tr.createNewVocabularyTerm('SYNTHETIC')
-vocabulary_term_SAMPLE_TYPE_SYNTHETIC.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_SYNTHETIC.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_SYNTHETIC.setOrdinal(6)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_SYNTHETIC)
-
-vocabulary_term_SAMPLE_TYPE_TOTAL_RNA = tr.createNewVocabularyTerm('TOTAL_RNA')
-vocabulary_term_SAMPLE_TYPE_TOTAL_RNA.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_TOTAL_RNA.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_TOTAL_RNA.setOrdinal(3)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_TOTAL_RNA)
-
-vocabulary_term_SAMPLE_TYPE_FRAGMENTED_GENOMIC_DNA = tr.createNewVocabularyTerm('FRAGMENTED_GENOMIC_DNA')
-vocabulary_term_SAMPLE_TYPE_FRAGMENTED_GENOMIC_DNA.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_FRAGMENTED_GENOMIC_DNA.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_FRAGMENTED_GENOMIC_DNA.setOrdinal(7)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_FRAGMENTED_GENOMIC_DNA)
-
-vocabulary_term_SAMPLE_TYPE_NONGENOMIC = tr.createNewVocabularyTerm('NON-GENOMIC')
-vocabulary_term_SAMPLE_TYPE_NONGENOMIC.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_NONGENOMIC.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_NONGENOMIC.setOrdinal(12)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_NONGENOMIC)
-
-vocabulary_term_SAMPLE_TYPE_VIRAL = tr.createNewVocabularyTerm('VIRAL')
-vocabulary_term_SAMPLE_TYPE_VIRAL.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_VIRAL.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_VIRAL.setOrdinal(5)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_VIRAL)
-
-vocabulary_term_SAMPLE_TYPE_BISULFITE_CHIP = tr.createNewVocabularyTerm('BISULFITE_CHIP')
-vocabulary_term_SAMPLE_TYPE_BISULFITE_CHIP.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_BISULFITE_CHIP.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_BISULFITE_CHIP.setOrdinal(11)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_BISULFITE_CHIP)
-
-vocabulary_SBS_SEQUENCING_KIT_VERSION = tr.createNewVocabulary('SBS_SEQUENCING_KIT_VERSION')
-vocabulary_SBS_SEQUENCING_KIT_VERSION.setDescription('Version of the Sequencing by Synthesis (SBS) Kit')
-vocabulary_SBS_SEQUENCING_KIT_VERSION.setUrlTemplate(None)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.setManagedInternally(False)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.setInternalNamespace(False)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.setChosenFromList(True)
-
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_SBS_HS_V3 = tr.createNewVocabularyTerm('SBS_HS_V3')
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_SBS_HS_V3.setDescription(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_SBS_HS_V3.setLabel('TruSeq SBS HS v3')
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_SBS_HS_V3.setOrdinal(6)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.addTerm(vocabulary_term_SBS_SEQUENCING_KIT_VERSION_SBS_HS_V3)
-
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V3 = tr.createNewVocabularyTerm('V3')
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V3.setDescription(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V3.setLabel(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V3.setOrdinal(5)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.addTerm(vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V3)
-
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V4 = tr.createNewVocabularyTerm('V4')
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V4.setDescription(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V4.setLabel(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V4.setOrdinal(4)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.addTerm(vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V4)
-
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_TRUSEQ_V5 = tr.createNewVocabularyTerm('TRUSEQ_V5')
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_TRUSEQ_V5.setDescription(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_TRUSEQ_V5.setLabel('TruSeq v5')
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_TRUSEQ_V5.setOrdinal(1)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.addTerm(vocabulary_term_SBS_SEQUENCING_KIT_VERSION_TRUSEQ_V5)
-
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V5 = tr.createNewVocabularyTerm('V5')
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V5.setDescription(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V5.setLabel(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V5.setOrdinal(3)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.addTerm(vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V5)
-
-vocabulary_SCS_PROTOCOL_VERSION = tr.createNewVocabulary('SCS_PROTOCOL_VERSION')
-vocabulary_SCS_PROTOCOL_VERSION.setDescription('THE Illumina protocol')
-vocabulary_SCS_PROTOCOL_VERSION.setUrlTemplate(None)
-vocabulary_SCS_PROTOCOL_VERSION.setManagedInternally(False)
-vocabulary_SCS_PROTOCOL_VERSION.setInternalNamespace(False)
-vocabulary_SCS_PROTOCOL_VERSION.setChosenFromList(True)
-
-vocabulary_term_SCS_PROTOCOL_VERSION_V7 = tr.createNewVocabularyTerm('V7')
-vocabulary_term_SCS_PROTOCOL_VERSION_V7.setDescription(None)
-vocabulary_term_SCS_PROTOCOL_VERSION_V7.setLabel(None)
-vocabulary_term_SCS_PROTOCOL_VERSION_V7.setOrdinal(3)
-vocabulary_SCS_PROTOCOL_VERSION.addTerm(vocabulary_term_SCS_PROTOCOL_VERSION_V7)
-
-vocabulary_term_SCS_PROTOCOL_VERSION_V8 = tr.createNewVocabularyTerm('V8')
-vocabulary_term_SCS_PROTOCOL_VERSION_V8.setDescription(None)
-vocabulary_term_SCS_PROTOCOL_VERSION_V8.setLabel(None)
-vocabulary_term_SCS_PROTOCOL_VERSION_V8.setOrdinal(1)
-vocabulary_SCS_PROTOCOL_VERSION.addTerm(vocabulary_term_SCS_PROTOCOL_VERSION_V8)
-
-vocabulary_term_SCS_PROTOCOL_VERSION_V6 = tr.createNewVocabularyTerm('V6')
-vocabulary_term_SCS_PROTOCOL_VERSION_V6.setDescription(None)
-vocabulary_term_SCS_PROTOCOL_VERSION_V6.setLabel(None)
-vocabulary_term_SCS_PROTOCOL_VERSION_V6.setOrdinal(2)
-vocabulary_SCS_PROTOCOL_VERSION.addTerm(vocabulary_term_SCS_PROTOCOL_VERSION_V6)
-
-vocabulary_SCS_SOFTWARE_VERSION = tr.createNewVocabulary('SCS_SOFTWARE_VERSION')
-vocabulary_SCS_SOFTWARE_VERSION.setDescription('Software version of the Sequencing PC attached to the GA')
-vocabulary_SCS_SOFTWARE_VERSION.setUrlTemplate(None)
-vocabulary_SCS_SOFTWARE_VERSION.setManagedInternally(False)
-vocabulary_SCS_SOFTWARE_VERSION.setInternalNamespace(False)
-vocabulary_SCS_SOFTWARE_VERSION.setChosenFromList(True)
-
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_145 = tr.createNewVocabularyTerm('HCS_1.4.5')
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_145.setDescription(None)
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_145.setLabel('HCS 1.4.5/RTA 1.12.4')
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_145.setOrdinal(2)
-vocabulary_SCS_SOFTWARE_VERSION.addTerm(vocabulary_term_SCS_SOFTWARE_VERSION_HCS_145)
-
-vocabulary_term_SCS_SOFTWARE_VERSION_210 = tr.createNewVocabularyTerm('2.10')
-vocabulary_term_SCS_SOFTWARE_VERSION_210.setDescription(None)
-vocabulary_term_SCS_SOFTWARE_VERSION_210.setLabel('2.10/RTA 1.13.48')
-vocabulary_term_SCS_SOFTWARE_VERSION_210.setOrdinal(4)
-vocabulary_SCS_SOFTWARE_VERSION.addTerm(vocabulary_term_SCS_SOFTWARE_VERSION_210)
-
-vocabulary_term_SCS_SOFTWARE_VERSION_25 = tr.createNewVocabularyTerm('2.5')
-vocabulary_term_SCS_SOFTWARE_VERSION_25.setDescription(None)
-vocabulary_term_SCS_SOFTWARE_VERSION_25.setLabel('2.5 (no longer in use)')
-vocabulary_term_SCS_SOFTWARE_VERSION_25.setOrdinal(8)
-vocabulary_SCS_SOFTWARE_VERSION.addTerm(vocabulary_term_SCS_SOFTWARE_VERSION_25)
-
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_1515 = tr.createNewVocabularyTerm('HCS_1.5.15')
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_1515.setDescription(None)
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_1515.setLabel('HCS 1.5.15/1.13.48')
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_1515.setOrdinal(1)
-vocabulary_SCS_SOFTWARE_VERSION.addTerm(vocabulary_term_SCS_SOFTWARE_VERSION_HCS_1515)
-
-vocabulary_term_SCS_SOFTWARE_VERSION_28 = tr.createNewVocabularyTerm('2.8')
-vocabulary_term_SCS_SOFTWARE_VERSION_28.setDescription(None)
-vocabulary_term_SCS_SOFTWARE_VERSION_28.setLabel('2.8/RTA 1.8')
-vocabulary_term_SCS_SOFTWARE_VERSION_28.setOrdinal(6)
-vocabulary_SCS_SOFTWARE_VERSION.addTerm(vocabulary_term_SCS_SOFTWARE_VERSION_28)
-
-vocabulary_term_SCS_SOFTWARE_VERSION_26 = tr.createNewVocabularyTerm('2.6')
-vocabulary_term_SCS_SOFTWARE_VERSION_26.setDescription(None)
-vocabulary_term_SCS_SOFTWARE_VERSION_26.setLabel('2.6/RTA 1.6 (no longer in use)')
-vocabulary_term_SCS_SOFTWARE_VERSION_26.setOrdinal(7)
-vocabulary_SCS_SOFTWARE_VERSION.addTerm(vocabulary_term_SCS_SOFTWARE_VERSION_26)
-
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_14 = tr.createNewVocabularyTerm('HCS_1.4')
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_14.setDescription(None)
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_14.setLabel('HCS 1.4/RTA 1.12')
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_14.setOrdinal(3)
-vocabulary_SCS_SOFTWARE_VERSION.addTerm(vocabulary_term_SCS_SOFTWARE_VERSION_HCS_14)
-
-vocabulary_term_SCS_SOFTWARE_VERSION_24 = tr.createNewVocabularyTerm('2.4')
-vocabulary_term_SCS_SOFTWARE_VERSION_24.setDescription(None)
-vocabulary_term_SCS_SOFTWARE_VERSION_24.setLabel('2.4 (no longer in use)')
-vocabulary_term_SCS_SOFTWARE_VERSION_24.setOrdinal(9)
-vocabulary_SCS_SOFTWARE_VERSION.addTerm(vocabulary_term_SCS_SOFTWARE_VERSION_24)
-
-vocabulary_term_SCS_SOFTWARE_VERSION_29 = tr.createNewVocabularyTerm('2.9')
-vocabulary_term_SCS_SOFTWARE_VERSION_29.setDescription(None)
-vocabulary_term_SCS_SOFTWARE_VERSION_29.setLabel('2.9/RTA2.9')
-vocabulary_term_SCS_SOFTWARE_VERSION_29.setOrdinal(5)
-vocabulary_SCS_SOFTWARE_VERSION.addTerm(vocabulary_term_SCS_SOFTWARE_VERSION_29)
-
-vocabulary_SEQUENCER = tr.createNewVocabulary('SEQUENCER')
-vocabulary_SEQUENCER.setDescription('Which Sequencer was used?')
-vocabulary_SEQUENCER.setUrlTemplate(None)
-vocabulary_SEQUENCER.setManagedInternally(False)
-vocabulary_SEQUENCER.setInternalNamespace(False)
-vocabulary_SEQUENCER.setChosenFromList(True)
-
-vocabulary_term_SEQUENCER_ATTILA = tr.createNewVocabularyTerm('ATTILA')
-vocabulary_term_SEQUENCER_ATTILA.setDescription('old GA II, do not use any more (deprecated)')
-vocabulary_term_SEQUENCER_ATTILA.setLabel('Attila GA II')
-vocabulary_term_SEQUENCER_ATTILA.setOrdinal(6)
-vocabulary_SEQUENCER.addTerm(vocabulary_term_SEQUENCER_ATTILA)
-
-vocabulary_term_SEQUENCER_RUA = tr.createNewVocabularyTerm('RUA')
-vocabulary_term_SEQUENCER_RUA.setDescription('back of the room')
-vocabulary_term_SEQUENCER_RUA.setLabel('Rua HiSeq2000')
-vocabulary_term_SEQUENCER_RUA.setOrdinal(1)
-vocabulary_SEQUENCER.addTerm(vocabulary_term_SEQUENCER_RUA)
-
-vocabulary_term_SEQUENCER_ELLAC = tr.createNewVocabularyTerm('ELLAC')
-vocabulary_term_SEQUENCER_ELLAC.setDescription('GA IIx at the front of the room')
-vocabulary_term_SEQUENCER_ELLAC.setLabel('Ellac GA IIx')
-vocabulary_term_SEQUENCER_ELLAC.setOrdinal(4)
-vocabulary_SEQUENCER.addTerm(vocabulary_term_SEQUENCER_ELLAC)
-
-vocabulary_term_SEQUENCER_ATTILAX = tr.createNewVocabularyTerm('ATTILAX')
-vocabulary_term_SEQUENCER_ATTILAX.setDescription('Upgraded Attila, back of the room (deprecated)')
-vocabulary_term_SEQUENCER_ATTILAX.setLabel('Attila GA IIx')
-vocabulary_term_SEQUENCER_ATTILAX.setOrdinal(5)
-vocabulary_SEQUENCER.addTerm(vocabulary_term_SEQUENCER_ATTILAX)
-
-vocabulary_term_SEQUENCER_KITT = tr.createNewVocabularyTerm('KITT')
-vocabulary_term_SEQUENCER_KITT.setDescription(None)
-vocabulary_term_SEQUENCER_KITT.setLabel('Kitt HiSeq2500')
-vocabulary_term_SEQUENCER_KITT.setOrdinal(2)
-vocabulary_SEQUENCER.addTerm(vocabulary_term_SEQUENCER_KITT)
-
-vocabulary_SEQUENCING_APPLICATION = tr.createNewVocabulary('SEQUENCING_APPLICATION')
-vocabulary_SEQUENCING_APPLICATION.setDescription('Type of experiment of the High Throughput Sequencing applications')
-vocabulary_SEQUENCING_APPLICATION.setUrlTemplate(None)
-vocabulary_SEQUENCING_APPLICATION.setManagedInternally(False)
-vocabulary_SEQUENCING_APPLICATION.setInternalNamespace(False)
-vocabulary_SEQUENCING_APPLICATION.setChosenFromList(True)
-
-vocabulary_term_SEQUENCING_APPLICATION_GENOMIC_DNA_SEQ = tr.createNewVocabularyTerm('GENOMIC_DNA_SEQ')
-vocabulary_term_SEQUENCING_APPLICATION_GENOMIC_DNA_SEQ.setDescription(None)
-vocabulary_term_SEQUENCING_APPLICATION_GENOMIC_DNA_SEQ.setLabel(None)
-vocabulary_term_SEQUENCING_APPLICATION_GENOMIC_DNA_SEQ.setOrdinal(3)
-vocabulary_SEQUENCING_APPLICATION.addTerm(vocabulary_term_SEQUENCING_APPLICATION_GENOMIC_DNA_SEQ)
-
-vocabulary_term_SEQUENCING_APPLICATION_RNA_SEQ = tr.createNewVocabularyTerm('RNA_SEQ')
-vocabulary_term_SEQUENCING_APPLICATION_RNA_SEQ.setDescription(None)
-vocabulary_term_SEQUENCING_APPLICATION_RNA_SEQ.setLabel(None)
-vocabulary_term_SEQUENCING_APPLICATION_RNA_SEQ.setOrdinal(2)
-vocabulary_SEQUENCING_APPLICATION.addTerm(vocabulary_term_SEQUENCING_APPLICATION_RNA_SEQ)
-
-vocabulary_term_SEQUENCING_APPLICATION_SMALL_RNA_SEQ = tr.createNewVocabularyTerm('SMALL_RNA_SEQ')
-vocabulary_term_SEQUENCING_APPLICATION_SMALL_RNA_SEQ.setDescription(None)
-vocabulary_term_SEQUENCING_APPLICATION_SMALL_RNA_SEQ.setLabel(None)
-vocabulary_term_SEQUENCING_APPLICATION_SMALL_RNA_SEQ.setOrdinal(1)
-vocabulary_SEQUENCING_APPLICATION.addTerm(vocabulary_term_SEQUENCING_APPLICATION_SMALL_RNA_SEQ)
-
-vocabulary_term_SEQUENCING_APPLICATION_CHIP_SEQ = tr.createNewVocabularyTerm('CHIP_SEQ')
-vocabulary_term_SEQUENCING_APPLICATION_CHIP_SEQ.setDescription(None)
-vocabulary_term_SEQUENCING_APPLICATION_CHIP_SEQ.setLabel(None)
-vocabulary_term_SEQUENCING_APPLICATION_CHIP_SEQ.setOrdinal(4)
-vocabulary_SEQUENCING_APPLICATION.addTerm(vocabulary_term_SEQUENCING_APPLICATION_CHIP_SEQ)
-
-vocabulary_TRANSFER_METHOD = tr.createNewVocabulary('TRANSFER_METHOD')
-vocabulary_TRANSFER_METHOD.setDescription('How does the customer get the data')
-vocabulary_TRANSFER_METHOD.setUrlTemplate(None)
-vocabulary_TRANSFER_METHOD.setManagedInternally(False)
-vocabulary_TRANSFER_METHOD.setInternalNamespace(False)
-vocabulary_TRANSFER_METHOD.setChosenFromList(True)
-
-vocabulary_term_TRANSFER_METHOD_RSYNC = tr.createNewVocabularyTerm('RSYNC')
-vocabulary_term_TRANSFER_METHOD_RSYNC.setDescription(None)
-vocabulary_term_TRANSFER_METHOD_RSYNC.setLabel(None)
-vocabulary_term_TRANSFER_METHOD_RSYNC.setOrdinal(1)
-vocabulary_TRANSFER_METHOD.addTerm(vocabulary_term_TRANSFER_METHOD_RSYNC)
-
-exp_type_HT_SEQUENCING = tr.createNewExperimentType('HT_SEQUENCING')
-exp_type_HT_SEQUENCING.setDescription('High Throughput Sequencing (e.g. Illumina GA)')
-
-samp_type_ILLUMINA_FLOW_CELL = tr.createNewSampleType('ILLUMINA_FLOW_CELL')
-samp_type_ILLUMINA_FLOW_CELL.setDescription('Flow Cell containing eight Flow Lanes')
-samp_type_ILLUMINA_FLOW_CELL.setListable(True)
-samp_type_ILLUMINA_FLOW_CELL.setSubcodeUnique(False)
-samp_type_ILLUMINA_FLOW_CELL.setAutoGeneratedCode(False)
-samp_type_ILLUMINA_FLOW_CELL.setGeneratedCodePrefix('BSSE-QGF-FC-')
-
-samp_type_ILLUMINA_FLOW_LANE = tr.createNewSampleType('ILLUMINA_FLOW_LANE')
-samp_type_ILLUMINA_FLOW_LANE.setDescription('Flow Lane containing one Biological Sample')
-samp_type_ILLUMINA_FLOW_LANE.setListable(True)
-samp_type_ILLUMINA_FLOW_LANE.setSubcodeUnique(False)
-samp_type_ILLUMINA_FLOW_LANE.setAutoGeneratedCode(False)
-samp_type_ILLUMINA_FLOW_LANE.setGeneratedCodePrefix('BSSE-QGF-FL-')
-
-samp_type_ILLUMINA_SEQUENCING = tr.createNewSampleType('ILLUMINA_SEQUENCING')
-samp_type_ILLUMINA_SEQUENCING.setDescription('Biological Sample')
-samp_type_ILLUMINA_SEQUENCING.setListable(True)
-samp_type_ILLUMINA_SEQUENCING.setSubcodeUnique(False)
-samp_type_ILLUMINA_SEQUENCING.setAutoGeneratedCode(True)
-samp_type_ILLUMINA_SEQUENCING.setGeneratedCodePrefix('BSSE-QGF-')
-
-data_set_type_ALIGNMENT = tr.createNewDataSetType('ALIGNMENT')
-data_set_type_ALIGNMENT.setDescription('Aligner ouput, ideally bam/sam')
-
-data_set_type_BASECALL_STATS = tr.createNewDataSetType('BASECALL_STATS')
-data_set_type_BASECALL_STATS.setDescription('Base Call Statistics')
-
-data_set_type_BIGWIGGLE = tr.createNewDataSetType('BIGWIGGLE')
-data_set_type_BIGWIGGLE.setDescription('visualization')
-
-data_set_type_ELAND_ALIGNMENT = tr.createNewDataSetType('ELAND_ALIGNMENT')
-data_set_type_ELAND_ALIGNMENT.setDescription('Illumina Eland Alignment Output')
-
-data_set_type_FASTQ_GZ = tr.createNewDataSetType('FASTQ_GZ')
-data_set_type_FASTQ_GZ.setDescription('Gzipped Fastq file produced by Casava 1.8+')
-
-data_set_type_ILLUMINA_GA_OUTPUT = tr.createNewDataSetType('ILLUMINA_GA_OUTPUT')
-data_set_type_ILLUMINA_GA_OUTPUT.setDescription('The directory structure as produced by the Illumina GA Pipeline (whatever Illumina spits out)')
-
-data_set_type_ILLUMINA_HISEQ_OUTPUT = tr.createNewDataSetType('ILLUMINA_HISEQ_OUTPUT')
-data_set_type_ILLUMINA_HISEQ_OUTPUT.setDescription('HiSeq2000 Output')
-
-data_set_type_MACS_OUTPUT = tr.createNewDataSetType('MACS_OUTPUT')
-data_set_type_MACS_OUTPUT.setDescription('MACS Peak Caller output')
-
-data_set_type_QUALITY_JPGS = tr.createNewDataSetType('QUALITY_JPGS')
-data_set_type_QUALITY_JPGS.setDescription('R generated Quality plots')
-
-data_set_type_QUALITY_PDFS = tr.createNewDataSetType('QUALITY_PDFS')
-data_set_type_QUALITY_PDFS.setDescription('R generated pdfs showing quality data')
-
-data_set_type_QUALITY_SVG = tr.createNewDataSetType('QUALITY_SVG')
-data_set_type_QUALITY_SVG.setDescription('R generated Quality plots')
-
-data_set_type_RUNINFO = tr.createNewDataSetType('RUNINFO')
-data_set_type_RUNINFO.setDescription('Run statstics: Status.html and Status_Files folder')
-
-data_set_type_SRF_PER_LANE = tr.createNewDataSetType('SRF_PER_LANE')
-data_set_type_SRF_PER_LANE.setDescription('Short Read Format file (SRF) plus meta data file (TSV)')
-
-data_set_type_THUMBNAILS = tr.createNewDataSetType('THUMBNAILS')
-data_set_type_THUMBNAILS.setDescription('Thumbnails provided by the Illumina software')
-
-data_set_type_TSV = tr.createNewDataSetType('TSV')
-data_set_type_TSV.setDescription('Tab separated files')
-
-data_set_type_UNKNOWN = tr.createNewDataSetType('UNKNOWN')
-data_set_type_UNKNOWN.setDescription('Unknown')
-
-prop_type_AFFILIATION = tr.createNewPropertyType('AFFILIATION', DataType.CONTROLLEDVOCABULARY)
-prop_type_AFFILIATION.setLabel('Affiliation')
-prop_type_AFFILIATION.setManagedInternally(False)
-prop_type_AFFILIATION.setInternalNamespace(False)
-
-prop_type_AFFILIATION.setVocabulary(vocabulary_AFFILIATION)
-
-prop_type_AGILENT_KIT = tr.createNewPropertyType('AGILENT_KIT', DataType.CONTROLLEDVOCABULARY)
-prop_type_AGILENT_KIT.setLabel('Agilent Kit')
-prop_type_AGILENT_KIT.setManagedInternally(False)
-prop_type_AGILENT_KIT.setInternalNamespace(False)
-
-prop_type_AGILENT_KIT.setVocabulary(vocabulary_AGILENT_KIT)
-
-prop_type_ALIGNMENT_SOFTWARE = tr.createNewPropertyType('ALIGNMENT_SOFTWARE', DataType.CONTROLLEDVOCABULARY)
-prop_type_ALIGNMENT_SOFTWARE.setLabel('Alignment software')
-prop_type_ALIGNMENT_SOFTWARE.setManagedInternally(False)
-prop_type_ALIGNMENT_SOFTWARE.setInternalNamespace(False)
-
-prop_type_ALIGNMENT_SOFTWARE.setVocabulary(vocabulary_ALIGNMENT_SOFTWARE)
-
-prop_type_ANALYSIS_FINISHED = tr.createNewPropertyType('ANALYSIS_FINISHED', DataType.TIMESTAMP)
-prop_type_ANALYSIS_FINISHED.setLabel('Analysis finished')
-prop_type_ANALYSIS_FINISHED.setManagedInternally(False)
-prop_type_ANALYSIS_FINISHED.setInternalNamespace(False)
-
-
-prop_type_BARCODE = tr.createNewPropertyType('BARCODE', DataType.CONTROLLEDVOCABULARY)
-prop_type_BARCODE.setLabel('Index 1')
-prop_type_BARCODE.setManagedInternally(False)
-prop_type_BARCODE.setInternalNamespace(False)
-
-prop_type_BARCODE.setVocabulary(vocabulary_BARCODES)
-
-prop_type_BARCODES = tr.createNewPropertyType('BARCODES', DataType.MULTILINE_VARCHAR)
-prop_type_BARCODES.setLabel('Adaptor and Barcodes')
-prop_type_BARCODES.setManagedInternally(False)
-prop_type_BARCODES.setInternalNamespace(False)
-
-
-prop_type_BARCODE_COMPLEXITY_CHECKER = tr.createNewPropertyType('BARCODE_COMPLEXITY_CHECKER', DataType.MULTILINE_VARCHAR)
-prop_type_BARCODE_COMPLEXITY_CHECKER.setLabel('Barcode_Complexity_Checker')
-prop_type_BARCODE_COMPLEXITY_CHECKER.setManagedInternally(False)
-prop_type_BARCODE_COMPLEXITY_CHECKER.setInternalNamespace(False)
-
-
-prop_type_BARCODE_LENGTH = tr.createNewPropertyType('BARCODE_LENGTH', DataType.INTEGER)
-prop_type_BARCODE_LENGTH.setLabel('Barcode Length (+ recognition site)')
-prop_type_BARCODE_LENGTH.setManagedInternally(False)
-prop_type_BARCODE_LENGTH.setInternalNamespace(False)
-
-
-prop_type_BAREBACKED = tr.createNewPropertyType('BAREBACKED', DataType.BOOLEAN)
-prop_type_BAREBACKED.setLabel('Barebacked?')
-prop_type_BAREBACKED.setManagedInternally(False)
-prop_type_BAREBACKED.setInternalNamespace(False)
-
-
-prop_type_BASESCOVERED = tr.createNewPropertyType('BASESCOVERED', DataType.INTEGER)
-prop_type_BASESCOVERED.setLabel('bases Covered')
-prop_type_BASESCOVERED.setManagedInternally(False)
-prop_type_BASESCOVERED.setInternalNamespace(False)
-
-
-prop_type_BIOLOGICAL_SAMPLE_ARRIVED = tr.createNewPropertyType('BIOLOGICAL_SAMPLE_ARRIVED', DataType.TIMESTAMP)
-prop_type_BIOLOGICAL_SAMPLE_ARRIVED.setLabel('Arrival Date of Biological Sample')
-prop_type_BIOLOGICAL_SAMPLE_ARRIVED.setManagedInternally(False)
-prop_type_BIOLOGICAL_SAMPLE_ARRIVED.setInternalNamespace(False)
-
-
-prop_type_CALCLUATED_EXAMPLE = tr.createNewPropertyType('CALCLUATED_EXAMPLE', DataType.REAL)
-prop_type_CALCLUATED_EXAMPLE.setLabel('Calcluated_example')
-prop_type_CALCLUATED_EXAMPLE.setManagedInternally(False)
-prop_type_CALCLUATED_EXAMPLE.setInternalNamespace(False)
-
-
-prop_type_CASAVA_VERSION = tr.createNewPropertyType('CASAVA_VERSION', DataType.CONTROLLEDVOCABULARY)
-prop_type_CASAVA_VERSION.setLabel('Casava Version')
-prop_type_CASAVA_VERSION.setManagedInternally(False)
-prop_type_CASAVA_VERSION.setInternalNamespace(False)
-
-prop_type_CASAVA_VERSION.setVocabulary(vocabulary_CASAVA_VERSION)
-
-prop_type_CELL_PLASTICITY_SYSTEMSX = tr.createNewPropertyType('CELL_PLASTICITY_SYSTEMSX', DataType.BOOLEAN)
-prop_type_CELL_PLASTICITY_SYSTEMSX.setLabel('Cell Plasticity (SystemsX)')
-prop_type_CELL_PLASTICITY_SYSTEMSX.setManagedInternally(False)
-prop_type_CELL_PLASTICITY_SYSTEMSX.setInternalNamespace(False)
-
-
-prop_type_CHROMCOUNT = tr.createNewPropertyType('CHROMCOUNT', DataType.INTEGER)
-prop_type_CHROMCOUNT.setLabel('chrom Count')
-prop_type_CHROMCOUNT.setManagedInternally(False)
-prop_type_CHROMCOUNT.setInternalNamespace(False)
-
-
-prop_type_CLUSTER_GENERATION_KIT_VERSION = tr.createNewPropertyType('CLUSTER_GENERATION_KIT_VERSION', DataType.CONTROLLEDVOCABULARY)
-prop_type_CLUSTER_GENERATION_KIT_VERSION.setLabel('CS Generation Kit Version')
-prop_type_CLUSTER_GENERATION_KIT_VERSION.setManagedInternally(False)
-prop_type_CLUSTER_GENERATION_KIT_VERSION.setInternalNamespace(False)
-
-prop_type_CLUSTER_GENERATION_KIT_VERSION.setVocabulary(vocabulary_CLUSTER_GENERATION_KIT_VERSION)
-
-prop_type_CLUSTER_STATION = tr.createNewPropertyType('CLUSTER_STATION', DataType.CONTROLLEDVOCABULARY)
-prop_type_CLUSTER_STATION.setLabel('Cluster Station')
-prop_type_CLUSTER_STATION.setManagedInternally(False)
-prop_type_CLUSTER_STATION.setInternalNamespace(False)
-
-prop_type_CLUSTER_STATION.setVocabulary(vocabulary_CLUSTER_STATION)
-
-prop_type_CLUSTER_STATION_SOFTWARE_VERSION = tr.createNewPropertyType('CLUSTER_STATION_SOFTWARE_VERSION', DataType.CONTROLLEDVOCABULARY)
-prop_type_CLUSTER_STATION_SOFTWARE_VERSION.setLabel('CS Software version')
-prop_type_CLUSTER_STATION_SOFTWARE_VERSION.setManagedInternally(False)
-prop_type_CLUSTER_STATION_SOFTWARE_VERSION.setInternalNamespace(False)
-
-prop_type_CLUSTER_STATION_SOFTWARE_VERSION.setVocabulary(vocabulary_CLUSTER_STATION_SOFTWARE_VERSION)
-
-prop_type_CONCENTRATION_FLOWLANE = tr.createNewPropertyType('CONCENTRATION_FLOWLANE', DataType.REAL)
-prop_type_CONCENTRATION_FLOWLANE.setLabel('Concentration in flow lane [pM]')
-prop_type_CONCENTRATION_FLOWLANE.setManagedInternally(False)
-prop_type_CONCENTRATION_FLOWLANE.setInternalNamespace(False)
-
-
-prop_type_CONCENTRATION_ORIGINAL_ILLUMINA = tr.createNewPropertyType('CONCENTRATION_ORIGINAL_ILLUMINA', DataType.REAL)
-prop_type_CONCENTRATION_ORIGINAL_ILLUMINA.setLabel(u'Concentration (original) [ng/ul]')
-prop_type_CONCENTRATION_ORIGINAL_ILLUMINA.setManagedInternally(False)
-prop_type_CONCENTRATION_ORIGINAL_ILLUMINA.setInternalNamespace(False)
-
-
-prop_type_CONCENTRATION_PREPARED_ILLUMINA = tr.createNewPropertyType('CONCENTRATION_PREPARED_ILLUMINA', DataType.REAL)
-prop_type_CONCENTRATION_PREPARED_ILLUMINA.setLabel('Concentration (prepared) [ng/ul]')
-prop_type_CONCENTRATION_PREPARED_ILLUMINA.setManagedInternally(False)
-prop_type_CONCENTRATION_PREPARED_ILLUMINA.setInternalNamespace(False)
-
-
-prop_type_CONCENTRATION_TOTAL = tr.createNewPropertyType('CONCENTRATION_TOTAL', DataType.INTEGER)
-prop_type_CONCENTRATION_TOTAL.setLabel('DNA concentration of library [ng/ul])')
-prop_type_CONCENTRATION_TOTAL.setManagedInternally(False)
-prop_type_CONCENTRATION_TOTAL.setInternalNamespace(False)
-
-
-prop_type_CONC_IF_SAMPLE_PROCESSED_DNA_LIBRARY = tr.createNewPropertyType('CONC_IF_SAMPLE_PROCESSED_DNA_LIBRARY', DataType.INTEGER)
-prop_type_CONC_IF_SAMPLE_PROCESSED_DNA_LIBRARY.setLabel('Conc. if sample="proc. DNA library" (nM)')
-prop_type_CONC_IF_SAMPLE_PROCESSED_DNA_LIBRARY.setManagedInternally(False)
-prop_type_CONC_IF_SAMPLE_PROCESSED_DNA_LIBRARY.setInternalNamespace(False)
-
-
-prop_type_CONTACT_PERSON_EMAIL = tr.createNewPropertyType('CONTACT_PERSON_EMAIL', DataType.VARCHAR)
-prop_type_CONTACT_PERSON_EMAIL.setLabel('Email of Contact Person')
-prop_type_CONTACT_PERSON_EMAIL.setManagedInternally(False)
-prop_type_CONTACT_PERSON_EMAIL.setInternalNamespace(False)
-
-
-prop_type_CONTACT_PERSON_NAME = tr.createNewPropertyType('CONTACT_PERSON_NAME', DataType.VARCHAR)
-prop_type_CONTACT_PERSON_NAME.setLabel('Name of Contact Person')
-prop_type_CONTACT_PERSON_NAME.setManagedInternally(False)
-prop_type_CONTACT_PERSON_NAME.setInternalNamespace(False)
-
-
-prop_type_CONTROL_LANE = tr.createNewPropertyType('CONTROL_LANE', DataType.CONTROLLEDVOCABULARY)
-prop_type_CONTROL_LANE.setLabel('Control Lane')
-prop_type_CONTROL_LANE.setManagedInternally(False)
-prop_type_CONTROL_LANE.setInternalNamespace(False)
-
-prop_type_CONTROL_LANE.setVocabulary(vocabulary_CONTROL_LANE)
-
-prop_type_CREATED_ON_CS = tr.createNewPropertyType('CREATED_ON_CS', DataType.TIMESTAMP)
-prop_type_CREATED_ON_CS.setLabel('Clustering date')
-prop_type_CREATED_ON_CS.setManagedInternally(False)
-prop_type_CREATED_ON_CS.setInternalNamespace(False)
-
-
-prop_type_CS_PROTOCOL_VERSION = tr.createNewPropertyType('CS_PROTOCOL_VERSION', DataType.VARCHAR)
-prop_type_CS_PROTOCOL_VERSION.setLabel('CS Protocol Version')
-prop_type_CS_PROTOCOL_VERSION.setManagedInternally(False)
-prop_type_CS_PROTOCOL_VERSION.setInternalNamespace(False)
-
-
-prop_type_CYCLES = tr.createNewPropertyType('CYCLES', DataType.INTEGER)
-prop_type_CYCLES.setLabel('Number of Cycles')
-prop_type_CYCLES.setManagedInternally(False)
-prop_type_CYCLES.setInternalNamespace(False)
-
-
-prop_type_CYCLES_REQUESTED_BY_CUSTOMER = tr.createNewPropertyType('CYCLES_REQUESTED_BY_CUSTOMER', DataType.CONTROLLEDVOCABULARY)
-prop_type_CYCLES_REQUESTED_BY_CUSTOMER.setLabel('Cycles requested')
-prop_type_CYCLES_REQUESTED_BY_CUSTOMER.setManagedInternally(False)
-prop_type_CYCLES_REQUESTED_BY_CUSTOMER.setInternalNamespace(False)
-
-prop_type_CYCLES_REQUESTED_BY_CUSTOMER.setVocabulary(vocabulary_CYCLES)
-
-prop_type_DATA_TRANSFERRED = tr.createNewPropertyType('DATA_TRANSFERRED', DataType.TIMESTAMP)
-prop_type_DATA_TRANSFERRED.setLabel('Data transferred')
-prop_type_DATA_TRANSFERRED.setManagedInternally(False)
-prop_type_DATA_TRANSFERRED.setInternalNamespace(False)
-
-
-prop_type_DNA_CONCENTRATION_OF_LIBRARY = tr.createNewPropertyType('DNA_CONCENTRATION_OF_LIBRARY', DataType.INTEGER)
-prop_type_DNA_CONCENTRATION_OF_LIBRARY.setLabel('DNA concentration of library (nM)')
-prop_type_DNA_CONCENTRATION_OF_LIBRARY.setManagedInternally(False)
-prop_type_DNA_CONCENTRATION_OF_LIBRARY.setInternalNamespace(False)
-
-
-prop_type_END_TYPE = tr.createNewPropertyType('END_TYPE', DataType.CONTROLLEDVOCABULARY)
-prop_type_END_TYPE.setLabel('Paired End / Single Read')
-prop_type_END_TYPE.setManagedInternally(False)
-prop_type_END_TYPE.setInternalNamespace(False)
-
-prop_type_END_TYPE.setVocabulary(vocabulary_END_TYPE)
-
-prop_type_EXPERIMENT_DESIGN = tr.createNewPropertyType('EXPERIMENT_DESIGN', DataType.CONTROLLEDVOCABULARY)
-prop_type_EXPERIMENT_DESIGN.setLabel('Experiment Design')
-prop_type_EXPERIMENT_DESIGN.setManagedInternally(False)
-prop_type_EXPERIMENT_DESIGN.setInternalNamespace(False)
-
-prop_type_EXPERIMENT_DESIGN.setVocabulary(vocabulary_EXPERIMENT_DESIGN)
-
-prop_type_EXTERNAL_SAMPLE_NAME = tr.createNewPropertyType('EXTERNAL_SAMPLE_NAME', DataType.VARCHAR)
-prop_type_EXTERNAL_SAMPLE_NAME.setLabel('External Sample Name')
-prop_type_EXTERNAL_SAMPLE_NAME.setManagedInternally(False)
-prop_type_EXTERNAL_SAMPLE_NAME.setInternalNamespace(False)
-
-
-prop_type_FLOWCELLTYPE = tr.createNewPropertyType('FLOWCELLTYPE', DataType.VARCHAR)
-prop_type_FLOWCELLTYPE.setLabel('Flow Cell Type')
-prop_type_FLOWCELLTYPE.setManagedInternally(False)
-prop_type_FLOWCELLTYPE.setInternalNamespace(False)
-
-
-prop_type_FLOW_CELL_SEQUENCED_ON = tr.createNewPropertyType('FLOW_CELL_SEQUENCED_ON', DataType.TIMESTAMP)
-prop_type_FLOW_CELL_SEQUENCED_ON.setLabel('Sequencing date')
-prop_type_FLOW_CELL_SEQUENCED_ON.setManagedInternally(False)
-prop_type_FLOW_CELL_SEQUENCED_ON.setInternalNamespace(False)
-
-
-prop_type_FRAGMENT_SIZE_PREPARED_ILLUMINA = tr.createNewPropertyType('FRAGMENT_SIZE_PREPARED_ILLUMINA', DataType.INTEGER)
-prop_type_FRAGMENT_SIZE_PREPARED_ILLUMINA.setLabel('Fragment Size (prepared) [base (pairs)]')
-prop_type_FRAGMENT_SIZE_PREPARED_ILLUMINA.setManagedInternally(False)
-prop_type_FRAGMENT_SIZE_PREPARED_ILLUMINA.setInternalNamespace(False)
-
-
-prop_type_ILLUMINA_PIPELINE_VERSION = tr.createNewPropertyType('ILLUMINA_PIPELINE_VERSION', DataType.CONTROLLEDVOCABULARY)
-prop_type_ILLUMINA_PIPELINE_VERSION.setLabel('Pipeline Version')
-prop_type_ILLUMINA_PIPELINE_VERSION.setManagedInternally(False)
-prop_type_ILLUMINA_PIPELINE_VERSION.setInternalNamespace(False)
-
-prop_type_ILLUMINA_PIPELINE_VERSION.setVocabulary(vocabulary_PIPELINE_VERSION)
-
-prop_type_INDEX2 = tr.createNewPropertyType('INDEX2', DataType.CONTROLLEDVOCABULARY)
-prop_type_INDEX2.setLabel('Index 2')
-prop_type_INDEX2.setManagedInternally(False)
-prop_type_INDEX2.setInternalNamespace(False)
-
-prop_type_INDEX2.setVocabulary(vocabulary_INDEX2)
-
-prop_type_INDEXREAD = tr.createNewPropertyType('INDEXREAD', DataType.INTEGER)
-prop_type_INDEXREAD.setLabel('Index Read')
-prop_type_INDEXREAD.setManagedInternally(False)
-prop_type_INDEXREAD.setInternalNamespace(False)
-
-
-prop_type_INVOICE = tr.createNewPropertyType('INVOICE', DataType.BOOLEAN)
-prop_type_INVOICE.setLabel('Invoice sent?')
-prop_type_INVOICE.setManagedInternally(False)
-prop_type_INVOICE.setInternalNamespace(False)
-
-
-prop_type_ISCOMPRESSED = tr.createNewPropertyType('ISCOMPRESSED', DataType.BOOLEAN)
-prop_type_ISCOMPRESSED.setLabel('Is Compressed')
-prop_type_ISCOMPRESSED.setManagedInternally(False)
-prop_type_ISCOMPRESSED.setInternalNamespace(False)
-
-
-prop_type_ISSUED_COMMAND = tr.createNewPropertyType('ISSUED_COMMAND', DataType.MULTILINE_VARCHAR)
-prop_type_ISSUED_COMMAND.setLabel('Issued Command')
-prop_type_ISSUED_COMMAND.setManagedInternally(False)
-prop_type_ISSUED_COMMAND.setInternalNamespace(False)
-
-
-prop_type_ISSWAPPED = tr.createNewPropertyType('ISSWAPPED', DataType.INTEGER)
-prop_type_ISSWAPPED.setLabel('Is byte swapped')
-prop_type_ISSWAPPED.setManagedInternally(False)
-prop_type_ISSWAPPED.setInternalNamespace(False)
-
-
-prop_type_KIT = tr.createNewPropertyType('KIT', DataType.CONTROLLEDVOCABULARY)
-prop_type_KIT.setLabel('Library preparation kit')
-prop_type_KIT.setManagedInternally(False)
-prop_type_KIT.setInternalNamespace(False)
-
-prop_type_KIT.setVocabulary(vocabulary_KIT)
-
-prop_type_KIT_ARRIVED = tr.createNewPropertyType('KIT_ARRIVED', DataType.TIMESTAMP)
-prop_type_KIT_ARRIVED.setLabel('Kit arrived')
-prop_type_KIT_ARRIVED.setManagedInternally(False)
-prop_type_KIT_ARRIVED.setInternalNamespace(False)
-
-
-prop_type_KIT_PREPARED = tr.createNewPropertyType('KIT_PREPARED', DataType.TIMESTAMP)
-prop_type_KIT_PREPARED.setLabel('Sample processed')
-prop_type_KIT_PREPARED.setManagedInternally(False)
-prop_type_KIT_PREPARED.setInternalNamespace(False)
-
-
-prop_type_LANECOUNT = tr.createNewPropertyType('LANECOUNT', DataType.INTEGER)
-prop_type_LANECOUNT.setLabel('Lane Count')
-prop_type_LANECOUNT.setManagedInternally(False)
-prop_type_LANECOUNT.setInternalNamespace(False)
-
-
-prop_type_LIBRARY_PROCESSING_FAILED = tr.createNewPropertyType('LIBRARY_PROCESSING_FAILED', DataType.BOOLEAN)
-prop_type_LIBRARY_PROCESSING_FAILED.setLabel('Library processing failed')
-prop_type_LIBRARY_PROCESSING_FAILED.setManagedInternally(False)
-prop_type_LIBRARY_PROCESSING_FAILED.setInternalNamespace(False)
-
-
-prop_type_LIBRARY_PROCESSING_POSSIBLE = tr.createNewPropertyType('LIBRARY_PROCESSING_POSSIBLE', DataType.BOOLEAN)
-prop_type_LIBRARY_PROCESSING_POSSIBLE.setLabel('Library Processing possible')
-prop_type_LIBRARY_PROCESSING_POSSIBLE.setManagedInternally(False)
-prop_type_LIBRARY_PROCESSING_POSSIBLE.setInternalNamespace(False)
-
-
-prop_type_LIBRARY_PROCESSING_SUCCESSFUL = tr.createNewPropertyType('LIBRARY_PROCESSING_SUCCESSFUL', DataType.BOOLEAN)
-prop_type_LIBRARY_PROCESSING_SUCCESSFUL.setLabel('Library processing successful')
-prop_type_LIBRARY_PROCESSING_SUCCESSFUL.setManagedInternally(False)
-prop_type_LIBRARY_PROCESSING_SUCCESSFUL.setInternalNamespace(False)
-
-
-prop_type_LOT = tr.createNewPropertyType('LOT', DataType.INTEGER)
-prop_type_LOT.setLabel('Kit Lot #')
-prop_type_LOT.setManagedInternally(False)
-prop_type_LOT.setInternalNamespace(False)
-
-
-prop_type_MACS_VERSION = tr.createNewPropertyType('MACS_VERSION', DataType.CONTROLLEDVOCABULARY)
-prop_type_MACS_VERSION.setLabel('MACS VERSION')
-prop_type_MACS_VERSION.setManagedInternally(False)
-prop_type_MACS_VERSION.setInternalNamespace(False)
-
-prop_type_MACS_VERSION.setVocabulary(vocabulary_MACS_VERSION)
-
-prop_type_MAPPED_READS = tr.createNewPropertyType('MAPPED_READS', DataType.INTEGER)
-prop_type_MAPPED_READS.setLabel('Mapped reads')
-prop_type_MAPPED_READS.setManagedInternally(False)
-prop_type_MAPPED_READS.setInternalNamespace(False)
-
-
-prop_type_MAX = tr.createNewPropertyType('MAX', DataType.REAL)
-prop_type_MAX.setLabel('Maximum')
-prop_type_MAX.setManagedInternally(False)
-prop_type_MAX.setInternalNamespace(False)
-
-
-prop_type_MEAN = tr.createNewPropertyType('MEAN', DataType.REAL)
-prop_type_MEAN.setLabel('Mean')
-prop_type_MEAN.setManagedInternally(False)
-prop_type_MEAN.setInternalNamespace(False)
-
-
-prop_type_MIN = tr.createNewPropertyType('MIN', DataType.REAL)
-prop_type_MIN.setLabel('Minimum')
-prop_type_MIN.setManagedInternally(False)
-prop_type_MIN.setInternalNamespace(False)
-
-
-prop_type_MISMATCH_IN_INDEX = tr.createNewPropertyType('MISMATCH_IN_INDEX', DataType.CONTROLLEDVOCABULARY)
-prop_type_MISMATCH_IN_INDEX.setLabel('Mismatch in Index')
-prop_type_MISMATCH_IN_INDEX.setManagedInternally(False)
-prop_type_MISMATCH_IN_INDEX.setInternalNamespace(False)
-
-prop_type_MISMATCH_IN_INDEX.setVocabulary(vocabulary_MISMATCH_IN_INDEX)
-
-prop_type_NANO_DROP = tr.createNewPropertyType('NANO_DROP', DataType.CONTROLLEDVOCABULARY)
-prop_type_NANO_DROP.setLabel('Nano Drop')
-prop_type_NANO_DROP.setManagedInternally(False)
-prop_type_NANO_DROP.setInternalNamespace(False)
-
-prop_type_NANO_DROP.setVocabulary(vocabulary_NANO_DROP)
-
-prop_type_NCBI_ORGANISM_TAXONOMY = tr.createNewPropertyType('NCBI_ORGANISM_TAXONOMY', DataType.CONTROLLEDVOCABULARY)
-prop_type_NCBI_ORGANISM_TAXONOMY.setLabel('Organism (NCBI Taxonomy)')
-prop_type_NCBI_ORGANISM_TAXONOMY.setManagedInternally(False)
-prop_type_NCBI_ORGANISM_TAXONOMY.setInternalNamespace(False)
-
-prop_type_NCBI_ORGANISM_TAXONOMY.setVocabulary(vocabulary_NCBI_TAXONOMY)
-
-prop_type_NM_DNA = tr.createNewPropertyType('NM_DNA', DataType.REAL)
-prop_type_NM_DNA.setLabel('Calculated DNA concentration of library (nM)')
-prop_type_NM_DNA.setManagedInternally(False)
-prop_type_NM_DNA.setInternalNamespace(False)
-
-
-prop_type_NOTES = tr.createNewPropertyType('NOTES', DataType.MULTILINE_VARCHAR)
-prop_type_NOTES.setLabel('Notes')
-prop_type_NOTES.setManagedInternally(False)
-prop_type_NOTES.setInternalNamespace(False)
-
-
-prop_type_NOTES_CUSTOMER = tr.createNewPropertyType('NOTES_CUSTOMER', DataType.MULTILINE_VARCHAR)
-prop_type_NOTES_CUSTOMER.setLabel('Notes Customer')
-prop_type_NOTES_CUSTOMER.setManagedInternally(False)
-prop_type_NOTES_CUSTOMER.setInternalNamespace(False)
-
-
-prop_type_NUMBER_OF_ATTACHMENTS = tr.createNewPropertyType('NUMBER_OF_ATTACHMENTS', DataType.INTEGER)
-prop_type_NUMBER_OF_ATTACHMENTS.setLabel('Number of Attachments')
-prop_type_NUMBER_OF_ATTACHMENTS.setManagedInternally(False)
-prop_type_NUMBER_OF_ATTACHMENTS.setInternalNamespace(False)
-
-
-prop_type_ORGANISM_FREE = tr.createNewPropertyType('ORGANISM_FREE', DataType.VARCHAR)
-prop_type_ORGANISM_FREE.setLabel('Organism (if OTHER)')
-prop_type_ORGANISM_FREE.setManagedInternally(False)
-prop_type_ORGANISM_FREE.setInternalNamespace(False)
-
-
-prop_type_OTRS = tr.createNewPropertyType('OTRS', DataType.INTEGER)
-prop_type_OTRS.setLabel('OTRS ID #')
-prop_type_OTRS.setManagedInternally(False)
-prop_type_OTRS.setInternalNamespace(False)
-
-
-prop_type_PAIRED_END_KIT = tr.createNewPropertyType('PAIRED_END_KIT', DataType.VARCHAR)
-prop_type_PAIRED_END_KIT.setLabel('Paired End Kit')
-prop_type_PAIRED_END_KIT.setManagedInternally(False)
-prop_type_PAIRED_END_KIT.setInternalNamespace(False)
-
-
-prop_type_PERCENTAGE_ONE_MISMATCH_READS_INDEX = tr.createNewPropertyType('PERCENTAGE_ONE_MISMATCH_READS_INDEX', DataType.REAL)
-prop_type_PERCENTAGE_ONE_MISMATCH_READS_INDEX.setLabel('% One Mismatch Reads (Index)')
-prop_type_PERCENTAGE_ONE_MISMATCH_READS_INDEX.setManagedInternally(False)
-prop_type_PERCENTAGE_ONE_MISMATCH_READS_INDEX.setInternalNamespace(False)
-
-
-prop_type_PERCENTAGE_PASSED_FILTERING = tr.createNewPropertyType('PERCENTAGE_PASSED_FILTERING', DataType.REAL)
-prop_type_PERCENTAGE_PASSED_FILTERING.setLabel('% Passes Illumina Filtering (PF)')
-prop_type_PERCENTAGE_PASSED_FILTERING.setManagedInternally(False)
-prop_type_PERCENTAGE_PASSED_FILTERING.setInternalNamespace(False)
-
-
-prop_type_PERCENTAGE_PERFECT_INDEX_READS = tr.createNewPropertyType('PERCENTAGE_PERFECT_INDEX_READS', DataType.REAL)
-prop_type_PERCENTAGE_PERFECT_INDEX_READS.setLabel('% Perfect Index Reads')
-prop_type_PERCENTAGE_PERFECT_INDEX_READS.setManagedInternally(False)
-prop_type_PERCENTAGE_PERFECT_INDEX_READS.setInternalNamespace(False)
-
-
-prop_type_PERCENTAGE_RAW_CLUSTERS_PER_LANE = tr.createNewPropertyType('PERCENTAGE_RAW_CLUSTERS_PER_LANE', DataType.REAL)
-prop_type_PERCENTAGE_RAW_CLUSTERS_PER_LANE.setLabel('% of raw clusters per lane')
-prop_type_PERCENTAGE_RAW_CLUSTERS_PER_LANE.setManagedInternally(False)
-prop_type_PERCENTAGE_RAW_CLUSTERS_PER_LANE.setInternalNamespace(False)
-
-
-prop_type_PREPARED_BY = tr.createNewPropertyType('PREPARED_BY', DataType.VARCHAR)
-prop_type_PREPARED_BY.setLabel('Prepared by')
-prop_type_PREPARED_BY.setManagedInternally(False)
-prop_type_PREPARED_BY.setInternalNamespace(False)
-
-
-prop_type_PRIMARYDATASIZE = tr.createNewPropertyType('PRIMARYDATASIZE', DataType.INTEGER)
-prop_type_PRIMARYDATASIZE.setLabel('primary Data Size')
-prop_type_PRIMARYDATASIZE.setManagedInternally(False)
-prop_type_PRIMARYDATASIZE.setInternalNamespace(False)
-
-
-prop_type_PRIMARYINDEXSIZE = tr.createNewPropertyType('PRIMARYINDEXSIZE', DataType.INTEGER)
-prop_type_PRIMARYINDEXSIZE.setLabel('primary Index Size')
-prop_type_PRIMARYINDEXSIZE.setManagedInternally(False)
-prop_type_PRIMARYINDEXSIZE.setInternalNamespace(False)
-
-
-prop_type_PRINCIPAL_INVESTIGATOR_EMAIL = tr.createNewPropertyType('PRINCIPAL_INVESTIGATOR_EMAIL', DataType.VARCHAR)
-prop_type_PRINCIPAL_INVESTIGATOR_EMAIL.setLabel('Email of Principal Investigator')
-prop_type_PRINCIPAL_INVESTIGATOR_EMAIL.setManagedInternally(False)
-prop_type_PRINCIPAL_INVESTIGATOR_EMAIL.setInternalNamespace(False)
-
-
-prop_type_PRINCIPAL_INVESTIGATOR_NAME = tr.createNewPropertyType('PRINCIPAL_INVESTIGATOR_NAME', DataType.VARCHAR)
-prop_type_PRINCIPAL_INVESTIGATOR_NAME.setLabel('Name of Principal Investigator')
-prop_type_PRINCIPAL_INVESTIGATOR_NAME.setManagedInternally(False)
-prop_type_PRINCIPAL_INVESTIGATOR_NAME.setInternalNamespace(False)
-
-
-prop_type_REQUIRED_LANES = tr.createNewPropertyType('REQUIRED_LANES', DataType.CONTROLLEDVOCABULARY)
-prop_type_REQUIRED_LANES.setLabel('Number of Required Lanes')
-prop_type_REQUIRED_LANES.setManagedInternally(False)
-prop_type_REQUIRED_LANES.setInternalNamespace(False)
-
-prop_type_REQUIRED_LANES.setVocabulary(vocabulary_REQUIRED_LANES)
-
-prop_type_SAMPLE_CHARACTERISTICS = tr.createNewPropertyType('SAMPLE_CHARACTERISTICS', DataType.MULTILINE_VARCHAR)
-prop_type_SAMPLE_CHARACTERISTICS.setLabel('Sample characteristics')
-prop_type_SAMPLE_CHARACTERISTICS.setManagedInternally(False)
-prop_type_SAMPLE_CHARACTERISTICS.setInternalNamespace(False)
-
-
-prop_type_SAMPLE_DATA_PROCESSING = tr.createNewPropertyType('SAMPLE_DATA_PROCESSING', DataType.MULTILINE_VARCHAR)
-prop_type_SAMPLE_DATA_PROCESSING.setLabel('Sample Data Processing')
-prop_type_SAMPLE_DATA_PROCESSING.setManagedInternally(False)
-prop_type_SAMPLE_DATA_PROCESSING.setInternalNamespace(False)
-
-
-prop_type_SAMPLE_EXTRACT_PROTOCOL = tr.createNewPropertyType('SAMPLE_EXTRACT_PROTOCOL', DataType.MULTILINE_VARCHAR)
-prop_type_SAMPLE_EXTRACT_PROTOCOL.setLabel('Sample Extract Protocol')
-prop_type_SAMPLE_EXTRACT_PROTOCOL.setManagedInternally(False)
-prop_type_SAMPLE_EXTRACT_PROTOCOL.setInternalNamespace(False)
-
-
-prop_type_SAMPLE_ID = tr.createNewPropertyType('SAMPLE_ID', DataType.VARCHAR)
-prop_type_SAMPLE_ID.setLabel('Sample ID')
-prop_type_SAMPLE_ID.setManagedInternally(False)
-prop_type_SAMPLE_ID.setInternalNamespace(False)
-
-
-prop_type_SAMPLE_KIND = tr.createNewPropertyType('SAMPLE_KIND', DataType.CONTROLLEDVOCABULARY)
-prop_type_SAMPLE_KIND.setLabel('Sample Kind')
-prop_type_SAMPLE_KIND.setManagedInternally(False)
-prop_type_SAMPLE_KIND.setInternalNamespace(False)
-
-prop_type_SAMPLE_KIND.setVocabulary(vocabulary_SAMPLE_TYPE)
-
-prop_type_SAMPLE_LIBRARY_SELECTION = tr.createNewPropertyType('SAMPLE_LIBRARY_SELECTION', DataType.CONTROLLEDVOCABULARY)
-prop_type_SAMPLE_LIBRARY_SELECTION.setLabel('Sample Library Selection')
-prop_type_SAMPLE_LIBRARY_SELECTION.setManagedInternally(False)
-prop_type_SAMPLE_LIBRARY_SELECTION.setInternalNamespace(False)
-
-prop_type_SAMPLE_LIBRARY_SELECTION.setVocabulary(vocabulary_SAMPLE_LIBRARY_SELECTION)
-
-prop_type_SAMPLE_LIBRARY_SOURCE = tr.createNewPropertyType('SAMPLE_LIBRARY_SOURCE', DataType.CONTROLLEDVOCABULARY)
-prop_type_SAMPLE_LIBRARY_SOURCE.setLabel('Sample Library Source')
-prop_type_SAMPLE_LIBRARY_SOURCE.setManagedInternally(False)
-prop_type_SAMPLE_LIBRARY_SOURCE.setInternalNamespace(False)
-
-prop_type_SAMPLE_LIBRARY_SOURCE.setVocabulary(vocabulary_SAMPLE_LIBRARY_SOURCE_VOC)
-
-prop_type_SAMPLE_LIBRARY_STRATEGY = tr.createNewPropertyType('SAMPLE_LIBRARY_STRATEGY', DataType.CONTROLLEDVOCABULARY)
-prop_type_SAMPLE_LIBRARY_STRATEGY.setLabel('Sample Library Strategy')
-prop_type_SAMPLE_LIBRARY_STRATEGY.setManagedInternally(False)
-prop_type_SAMPLE_LIBRARY_STRATEGY.setInternalNamespace(False)
-
-prop_type_SAMPLE_LIBRARY_STRATEGY.setVocabulary(vocabulary_SAMPLE_LIBRARY_STRATEGY)
-
-prop_type_SAMPLE_MOLECULE = tr.createNewPropertyType('SAMPLE_MOLECULE', DataType.CONTROLLEDVOCABULARY)
-prop_type_SAMPLE_MOLECULE.setLabel('Sample molecule')
-prop_type_SAMPLE_MOLECULE.setManagedInternally(False)
-prop_type_SAMPLE_MOLECULE.setInternalNamespace(False)
-
-prop_type_SAMPLE_MOLECULE.setVocabulary(vocabulary_SAMPLE_MOLECULE)
-
-prop_type_SAMPLE_SOURCE_NAME = tr.createNewPropertyType('SAMPLE_SOURCE_NAME', DataType.VARCHAR)
-prop_type_SAMPLE_SOURCE_NAME.setLabel('Sample Source Name')
-prop_type_SAMPLE_SOURCE_NAME.setManagedInternally(False)
-prop_type_SAMPLE_SOURCE_NAME.setInternalNamespace(False)
-
-
-prop_type_SAMTOOLS_FLAGSTAT = tr.createNewPropertyType('SAMTOOLS_FLAGSTAT', DataType.MULTILINE_VARCHAR)
-prop_type_SAMTOOLS_FLAGSTAT.setLabel('Samtools Flagstat Output')
-prop_type_SAMTOOLS_FLAGSTAT.setManagedInternally(False)
-prop_type_SAMTOOLS_FLAGSTAT.setInternalNamespace(False)
-
-
-prop_type_SBS_KIT = tr.createNewPropertyType('SBS_KIT', DataType.VARCHAR)
-prop_type_SBS_KIT.setLabel('SBS Kit')
-prop_type_SBS_KIT.setManagedInternally(False)
-prop_type_SBS_KIT.setInternalNamespace(False)
-
-
-prop_type_SBS_SEQUENCING_KIT_VERSION = tr.createNewPropertyType('SBS_SEQUENCING_KIT_VERSION', DataType.CONTROLLEDVOCABULARY)
-prop_type_SBS_SEQUENCING_KIT_VERSION.setLabel('SBS Sequencing Kit Version')
-prop_type_SBS_SEQUENCING_KIT_VERSION.setManagedInternally(False)
-prop_type_SBS_SEQUENCING_KIT_VERSION.setInternalNamespace(False)
-
-prop_type_SBS_SEQUENCING_KIT_VERSION.setVocabulary(vocabulary_SBS_SEQUENCING_KIT_VERSION)
-
-prop_type_SCRIPT_TYPE = tr.createNewPropertyType('SCRIPT_TYPE', DataType.REAL)
-prop_type_SCRIPT_TYPE.setLabel('Script Type')
-prop_type_SCRIPT_TYPE.setManagedInternally(False)
-prop_type_SCRIPT_TYPE.setInternalNamespace(False)
-
-
-prop_type_SCS_PROTOCOL_VERSION = tr.createNewPropertyType('SCS_PROTOCOL_VERSION', DataType.CONTROLLEDVOCABULARY)
-prop_type_SCS_PROTOCOL_VERSION.setLabel('SCS Protocol Version')
-prop_type_SCS_PROTOCOL_VERSION.setManagedInternally(False)
-prop_type_SCS_PROTOCOL_VERSION.setInternalNamespace(False)
-
-prop_type_SCS_PROTOCOL_VERSION.setVocabulary(vocabulary_SCS_PROTOCOL_VERSION)
-
-prop_type_SCS_SOFTWARE_VERSION = tr.createNewPropertyType('SCS_SOFTWARE_VERSION', DataType.CONTROLLEDVOCABULARY)
-prop_type_SCS_SOFTWARE_VERSION.setLabel('SCS Software Version')
-prop_type_SCS_SOFTWARE_VERSION.setManagedInternally(False)
-prop_type_SCS_SOFTWARE_VERSION.setInternalNamespace(False)
-
-prop_type_SCS_SOFTWARE_VERSION.setVocabulary(vocabulary_SCS_SOFTWARE_VERSION)
-
-prop_type_SEQUENCER = tr.createNewPropertyType('SEQUENCER', DataType.CONTROLLEDVOCABULARY)
-prop_type_SEQUENCER.setLabel('Sequencer')
-prop_type_SEQUENCER.setManagedInternally(False)
-prop_type_SEQUENCER.setInternalNamespace(False)
-
-prop_type_SEQUENCER.setVocabulary(vocabulary_SEQUENCER)
-
-prop_type_SEQUENCER_FINISHED = tr.createNewPropertyType('SEQUENCER_FINISHED', DataType.TIMESTAMP)
-prop_type_SEQUENCER_FINISHED.setLabel('Sequencer finished')
-prop_type_SEQUENCER_FINISHED.setManagedInternally(False)
-prop_type_SEQUENCER_FINISHED.setInternalNamespace(False)
-
-
-prop_type_SEQUENCING_APPLICATION = tr.createNewPropertyType('SEQUENCING_APPLICATION', DataType.CONTROLLEDVOCABULARY)
-prop_type_SEQUENCING_APPLICATION.setLabel('Sequencing Application')
-prop_type_SEQUENCING_APPLICATION.setManagedInternally(False)
-prop_type_SEQUENCING_APPLICATION.setInternalNamespace(False)
-
-prop_type_SEQUENCING_APPLICATION.setVocabulary(vocabulary_SEQUENCING_APPLICATION)
-
-prop_type_STARTING_AMOUNT_OF_SAMPLE_IN_NG = tr.createNewPropertyType('STARTING_AMOUNT_OF_SAMPLE_IN_NG', DataType.REAL)
-prop_type_STARTING_AMOUNT_OF_SAMPLE_IN_NG.setLabel('Starting amount of sample (ng)')
-prop_type_STARTING_AMOUNT_OF_SAMPLE_IN_NG.setManagedInternally(False)
-prop_type_STARTING_AMOUNT_OF_SAMPLE_IN_NG.setInternalNamespace(False)
-
-
-prop_type_STD = tr.createNewPropertyType('STD', DataType.REAL)
-prop_type_STD.setLabel('Standard deviation')
-prop_type_STD.setManagedInternally(False)
-prop_type_STD.setInternalNamespace(False)
-
-
-prop_type_SURFACECOUNT = tr.createNewPropertyType('SURFACECOUNT', DataType.INTEGER)
-prop_type_SURFACECOUNT.setLabel('Surface Count')
-prop_type_SURFACECOUNT.setManagedInternally(False)
-prop_type_SURFACECOUNT.setInternalNamespace(False)
-
-
-prop_type_SWATHCOUNT = tr.createNewPropertyType('SWATHCOUNT', DataType.INTEGER)
-prop_type_SWATHCOUNT.setLabel('Swath Count')
-prop_type_SWATHCOUNT.setManagedInternally(False)
-prop_type_SWATHCOUNT.setInternalNamespace(False)
-
-
-prop_type_TILECOUNT = tr.createNewPropertyType('TILECOUNT', DataType.INTEGER)
-prop_type_TILECOUNT.setLabel('Tile Count')
-prop_type_TILECOUNT.setManagedInternally(False)
-prop_type_TILECOUNT.setInternalNamespace(False)
-
-
-prop_type_TOTAL_READS = tr.createNewPropertyType('TOTAL_READS', DataType.INTEGER)
-prop_type_TOTAL_READS.setLabel('Total reads')
-prop_type_TOTAL_READS.setManagedInternally(False)
-prop_type_TOTAL_READS.setInternalNamespace(False)
-
-
-prop_type_TRANSFER_METHOD = tr.createNewPropertyType('TRANSFER_METHOD', DataType.CONTROLLEDVOCABULARY)
-prop_type_TRANSFER_METHOD.setLabel('Data transfer method')
-prop_type_TRANSFER_METHOD.setManagedInternally(False)
-prop_type_TRANSFER_METHOD.setInternalNamespace(False)
-
-prop_type_TRANSFER_METHOD.setVocabulary(vocabulary_TRANSFER_METHOD)
-
-prop_type_UL_DNA = tr.createNewPropertyType('UL_DNA', DataType.REAL)
-prop_type_UL_DNA.setLabel('Calculated ul DNA for 2nM stock')
-prop_type_UL_DNA.setManagedInternally(False)
-prop_type_UL_DNA.setInternalNamespace(False)
-
-
-prop_type_UL_EB = tr.createNewPropertyType('UL_EB', DataType.REAL)
-prop_type_UL_EB.setLabel('Calculated ul EB for 2nM stock ')
-prop_type_UL_EB.setManagedInternally(False)
-prop_type_UL_EB.setInternalNamespace(False)
-
-
-prop_type_UL_STOCK = tr.createNewPropertyType('UL_STOCK', DataType.INTEGER)
-prop_type_UL_STOCK.setLabel('ul of 2nM stock')
-prop_type_UL_STOCK.setManagedInternally(False)
-prop_type_UL_STOCK.setInternalNamespace(False)
-
-
-prop_type_VERSION = tr.createNewPropertyType('VERSION', DataType.VARCHAR)
-prop_type_VERSION.setLabel('Version')
-prop_type_VERSION.setManagedInternally(False)
-prop_type_VERSION.setInternalNamespace(False)
-
-
-prop_type_YIELD_MBASES = tr.createNewPropertyType('YIELD_MBASES', DataType.INTEGER)
-prop_type_YIELD_MBASES.setLabel('Yield(Mbases)')
-prop_type_YIELD_MBASES.setManagedInternally(False)
-prop_type_YIELD_MBASES.setInternalNamespace(False)
-
-
-prop_type_ZOOMLEVELS = tr.createNewPropertyType('ZOOMLEVELS', DataType.INTEGER)
-prop_type_ZOOMLEVELS.setLabel('zoom Levels')
-prop_type_ZOOMLEVELS.setManagedInternally(False)
-prop_type_ZOOMLEVELS.setInternalNamespace(False)
-
-
-assignment_DATA_SET_ALIGNMENT_ALIGNMENT_SOFTWARE = tr.assignPropertyType(data_set_type_ALIGNMENT, prop_type_ALIGNMENT_SOFTWARE)
-assignment_DATA_SET_ALIGNMENT_ALIGNMENT_SOFTWARE.setMandatory(False)
-assignment_DATA_SET_ALIGNMENT_ALIGNMENT_SOFTWARE.setSection(None)
-assignment_DATA_SET_ALIGNMENT_ALIGNMENT_SOFTWARE.setPositionInForms(1)
-
-assignment_DATA_SET_ALIGNMENT_VERSION = tr.assignPropertyType(data_set_type_ALIGNMENT, prop_type_VERSION)
-assignment_DATA_SET_ALIGNMENT_VERSION.setMandatory(False)
-assignment_DATA_SET_ALIGNMENT_VERSION.setSection(None)
-assignment_DATA_SET_ALIGNMENT_VERSION.setPositionInForms(2)
-
-assignment_DATA_SET_ALIGNMENT_NOTES = tr.assignPropertyType(data_set_type_ALIGNMENT, prop_type_NOTES)
-assignment_DATA_SET_ALIGNMENT_NOTES.setMandatory(False)
-assignment_DATA_SET_ALIGNMENT_NOTES.setSection(None)
-assignment_DATA_SET_ALIGNMENT_NOTES.setPositionInForms(3)
-
-assignment_DATA_SET_ALIGNMENT_SAMTOOLS_FLAGSTAT = tr.assignPropertyType(data_set_type_ALIGNMENT, prop_type_SAMTOOLS_FLAGSTAT)
-assignment_DATA_SET_ALIGNMENT_SAMTOOLS_FLAGSTAT.setMandatory(False)
-assignment_DATA_SET_ALIGNMENT_SAMTOOLS_FLAGSTAT.setSection(None)
-assignment_DATA_SET_ALIGNMENT_SAMTOOLS_FLAGSTAT.setPositionInForms(4)
-
-assignment_DATA_SET_ALIGNMENT_MAPPED_READS = tr.assignPropertyType(data_set_type_ALIGNMENT, prop_type_MAPPED_READS)
-assignment_DATA_SET_ALIGNMENT_MAPPED_READS.setMandatory(False)
-assignment_DATA_SET_ALIGNMENT_MAPPED_READS.setSection(None)
-assignment_DATA_SET_ALIGNMENT_MAPPED_READS.setPositionInForms(5)
-
-assignment_DATA_SET_ALIGNMENT_TOTAL_READS = tr.assignPropertyType(data_set_type_ALIGNMENT, prop_type_TOTAL_READS)
-assignment_DATA_SET_ALIGNMENT_TOTAL_READS.setMandatory(False)
-assignment_DATA_SET_ALIGNMENT_TOTAL_READS.setSection(None)
-assignment_DATA_SET_ALIGNMENT_TOTAL_READS.setPositionInForms(6)
-
-assignment_DATA_SET_ALIGNMENT_ISSUED_COMMAND = tr.assignPropertyType(data_set_type_ALIGNMENT, prop_type_ISSUED_COMMAND)
-assignment_DATA_SET_ALIGNMENT_ISSUED_COMMAND.setMandatory(False)
-assignment_DATA_SET_ALIGNMENT_ISSUED_COMMAND.setSection(None)
-assignment_DATA_SET_ALIGNMENT_ISSUED_COMMAND.setPositionInForms(7)
-
-assignment_DATA_SET_BASECALL_STATS_MISMATCH_IN_INDEX = tr.assignPropertyType(data_set_type_BASECALL_STATS, prop_type_MISMATCH_IN_INDEX)
-assignment_DATA_SET_BASECALL_STATS_MISMATCH_IN_INDEX.setMandatory(False)
-assignment_DATA_SET_BASECALL_STATS_MISMATCH_IN_INDEX.setSection(None)
-assignment_DATA_SET_BASECALL_STATS_MISMATCH_IN_INDEX.setPositionInForms(1)
-
-assignment_DATA_SET_BIGWIGGLE_NOTES = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_NOTES)
-assignment_DATA_SET_BIGWIGGLE_NOTES.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_NOTES.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_NOTES.setPositionInForms(1)
-
-assignment_DATA_SET_BIGWIGGLE_VERSION = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_VERSION)
-assignment_DATA_SET_BIGWIGGLE_VERSION.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_VERSION.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_VERSION.setPositionInForms(2)
-
-assignment_DATA_SET_BIGWIGGLE_ISCOMPRESSED = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_ISCOMPRESSED)
-assignment_DATA_SET_BIGWIGGLE_ISCOMPRESSED.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_ISCOMPRESSED.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_ISCOMPRESSED.setPositionInForms(3)
-
-assignment_DATA_SET_BIGWIGGLE_ISSWAPPED = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_ISSWAPPED)
-assignment_DATA_SET_BIGWIGGLE_ISSWAPPED.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_ISSWAPPED.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_ISSWAPPED.setPositionInForms(4)
-
-assignment_DATA_SET_BIGWIGGLE_PRIMARYDATASIZE = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_PRIMARYDATASIZE)
-assignment_DATA_SET_BIGWIGGLE_PRIMARYDATASIZE.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_PRIMARYDATASIZE.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_PRIMARYDATASIZE.setPositionInForms(5)
-
-assignment_DATA_SET_BIGWIGGLE_PRIMARYINDEXSIZE = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_PRIMARYINDEXSIZE)
-assignment_DATA_SET_BIGWIGGLE_PRIMARYINDEXSIZE.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_PRIMARYINDEXSIZE.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_PRIMARYINDEXSIZE.setPositionInForms(6)
-
-assignment_DATA_SET_BIGWIGGLE_ZOOMLEVELS = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_ZOOMLEVELS)
-assignment_DATA_SET_BIGWIGGLE_ZOOMLEVELS.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_ZOOMLEVELS.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_ZOOMLEVELS.setPositionInForms(7)
-
-assignment_DATA_SET_BIGWIGGLE_CHROMCOUNT = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_CHROMCOUNT)
-assignment_DATA_SET_BIGWIGGLE_CHROMCOUNT.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_CHROMCOUNT.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_CHROMCOUNT.setPositionInForms(8)
-
-assignment_DATA_SET_BIGWIGGLE_BASESCOVERED = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_BASESCOVERED)
-assignment_DATA_SET_BIGWIGGLE_BASESCOVERED.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_BASESCOVERED.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_BASESCOVERED.setPositionInForms(9)
-
-assignment_DATA_SET_BIGWIGGLE_MEAN = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_MEAN)
-assignment_DATA_SET_BIGWIGGLE_MEAN.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_MEAN.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_MEAN.setPositionInForms(10)
-
-assignment_DATA_SET_BIGWIGGLE_MIN = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_MIN)
-assignment_DATA_SET_BIGWIGGLE_MIN.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_MIN.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_MIN.setPositionInForms(11)
-
-assignment_DATA_SET_BIGWIGGLE_MAX = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_MAX)
-assignment_DATA_SET_BIGWIGGLE_MAX.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_MAX.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_MAX.setPositionInForms(12)
-
-assignment_DATA_SET_BIGWIGGLE_STD = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_STD)
-assignment_DATA_SET_BIGWIGGLE_STD.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_STD.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_STD.setPositionInForms(13)
-
-assignment_DATA_SET_FASTQ_GZ_NOTES = tr.assignPropertyType(data_set_type_FASTQ_GZ, prop_type_NOTES)
-assignment_DATA_SET_FASTQ_GZ_NOTES.setMandatory(False)
-assignment_DATA_SET_FASTQ_GZ_NOTES.setSection(None)
-assignment_DATA_SET_FASTQ_GZ_NOTES.setPositionInForms(1)
-
-assignment_DATA_SET_FASTQ_GZ_YIELD_MBASES = tr.assignPropertyType(data_set_type_FASTQ_GZ, prop_type_YIELD_MBASES)
-assignment_DATA_SET_FASTQ_GZ_YIELD_MBASES.setMandatory(False)
-assignment_DATA_SET_FASTQ_GZ_YIELD_MBASES.setSection(None)
-assignment_DATA_SET_FASTQ_GZ_YIELD_MBASES.setPositionInForms(2)
-
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PASSED_FILTERING = tr.assignPropertyType(data_set_type_FASTQ_GZ, prop_type_PERCENTAGE_PASSED_FILTERING)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PASSED_FILTERING.setMandatory(False)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PASSED_FILTERING.setSection(None)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PASSED_FILTERING.setPositionInForms(3)
-
-assignment_DATA_SET_FASTQ_GZ_BARCODE = tr.assignPropertyType(data_set_type_FASTQ_GZ, prop_type_BARCODE)
-assignment_DATA_SET_FASTQ_GZ_BARCODE.setMandatory(False)
-assignment_DATA_SET_FASTQ_GZ_BARCODE.setSection(None)
-assignment_DATA_SET_FASTQ_GZ_BARCODE.setPositionInForms(4)
-
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_RAW_CLUSTERS_PER_LANE = tr.assignPropertyType(data_set_type_FASTQ_GZ, prop_type_PERCENTAGE_RAW_CLUSTERS_PER_LANE)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_RAW_CLUSTERS_PER_LANE.setMandatory(False)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_RAW_CLUSTERS_PER_LANE.setSection(None)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_RAW_CLUSTERS_PER_LANE.setPositionInForms(5)
-
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PERFECT_INDEX_READS = tr.assignPropertyType(data_set_type_FASTQ_GZ, prop_type_PERCENTAGE_PERFECT_INDEX_READS)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PERFECT_INDEX_READS.setMandatory(False)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PERFECT_INDEX_READS.setSection(None)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PERFECT_INDEX_READS.setPositionInForms(6)
-
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_ONE_MISMATCH_READS_INDEX = tr.assignPropertyType(data_set_type_FASTQ_GZ, prop_type_PERCENTAGE_ONE_MISMATCH_READS_INDEX)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_ONE_MISMATCH_READS_INDEX.setMandatory(False)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_ONE_MISMATCH_READS_INDEX.setSection(None)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_ONE_MISMATCH_READS_INDEX.setPositionInForms(7)
-
-assignment_EXPERIMENT_HT_SEQUENCING_EXPERIMENT_DESIGN = tr.assignPropertyType(exp_type_HT_SEQUENCING, prop_type_EXPERIMENT_DESIGN)
-assignment_EXPERIMENT_HT_SEQUENCING_EXPERIMENT_DESIGN.setMandatory(False)
-assignment_EXPERIMENT_HT_SEQUENCING_EXPERIMENT_DESIGN.setSection(None)
-assignment_EXPERIMENT_HT_SEQUENCING_EXPERIMENT_DESIGN.setPositionInForms(1)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_SEQUENCER)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER.setPositionInForms(2)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_END_TYPE = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_END_TYPE)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_END_TYPE.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_END_TYPE.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_END_TYPE.setPositionInForms(4)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOW_CELL_SEQUENCED_ON = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_FLOW_CELL_SEQUENCED_ON)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOW_CELL_SEQUENCED_ON.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOW_CELL_SEQUENCED_ON.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOW_CELL_SEQUENCED_ON.setPositionInForms(5)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER_FINISHED = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_SEQUENCER_FINISHED)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER_FINISHED.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER_FINISHED.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER_FINISHED.setPositionInForms(6)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ILLUMINA_PIPELINE_VERSION = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_ILLUMINA_PIPELINE_VERSION)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ILLUMINA_PIPELINE_VERSION.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ILLUMINA_PIPELINE_VERSION.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ILLUMINA_PIPELINE_VERSION.setPositionInForms(7)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CYCLES_REQUESTED_BY_CUSTOMER = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_CYCLES_REQUESTED_BY_CUSTOMER)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CYCLES_REQUESTED_BY_CUSTOMER.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CYCLES_REQUESTED_BY_CUSTOMER.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CYCLES_REQUESTED_BY_CUSTOMER.setPositionInForms(8)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_INDEXREAD = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_INDEXREAD)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_INDEXREAD.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_INDEXREAD.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_INDEXREAD.setPositionInForms(9)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CONTROL_LANE = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_CONTROL_LANE)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CONTROL_LANE.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CONTROL_LANE.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CONTROL_LANE.setPositionInForms(10)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOWCELLTYPE = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_FLOWCELLTYPE)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOWCELLTYPE.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOWCELLTYPE.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOWCELLTYPE.setPositionInForms(11)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_LANECOUNT = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_LANECOUNT)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_LANECOUNT.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_LANECOUNT.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_LANECOUNT.setPositionInForms(12)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SURFACECOUNT = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_SURFACECOUNT)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SURFACECOUNT.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SURFACECOUNT.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SURFACECOUNT.setPositionInForms(13)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SWATHCOUNT = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_SWATHCOUNT)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SWATHCOUNT.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SWATHCOUNT.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SWATHCOUNT.setPositionInForms(14)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_TILECOUNT = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_TILECOUNT)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_TILECOUNT.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_TILECOUNT.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_TILECOUNT.setPositionInForms(15)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SBS_KIT = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_SBS_KIT)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SBS_KIT.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SBS_KIT.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SBS_KIT.setPositionInForms(16)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_PAIRED_END_KIT = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_PAIRED_END_KIT)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_PAIRED_END_KIT.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_PAIRED_END_KIT.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_PAIRED_END_KIT.setPositionInForms(17)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ANALYSIS_FINISHED = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_ANALYSIS_FINISHED)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ANALYSIS_FINISHED.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ANALYSIS_FINISHED.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ANALYSIS_FINISHED.setPositionInForms(19)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_NOTES = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_NOTES)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_NOTES.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_NOTES.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_NOTES.setPositionInForms(20)
-
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_DATA_TRANSFERRED = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_LANE, prop_type_DATA_TRANSFERRED)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_DATA_TRANSFERRED.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_DATA_TRANSFERRED.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_DATA_TRANSFERRED.setPositionInForms(1)
-
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_NOTES = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_LANE, prop_type_NOTES)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_NOTES.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_NOTES.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_NOTES.setPositionInForms(4)
-
-assignment_DATA_SET_ILLUMINA_GA_OUTPUT_SAMPLE_KIND = tr.assignPropertyType(data_set_type_ILLUMINA_GA_OUTPUT, prop_type_SAMPLE_KIND)
-assignment_DATA_SET_ILLUMINA_GA_OUTPUT_SAMPLE_KIND.setMandatory(False)
-assignment_DATA_SET_ILLUMINA_GA_OUTPUT_SAMPLE_KIND.setSection(None)
-assignment_DATA_SET_ILLUMINA_GA_OUTPUT_SAMPLE_KIND.setPositionInForms(1)
-
-assignment_DATA_SET_ILLUMINA_HISEQ_OUTPUT_CASAVA_VERSION = tr.assignPropertyType(data_set_type_ILLUMINA_HISEQ_OUTPUT, prop_type_CASAVA_VERSION)
-assignment_DATA_SET_ILLUMINA_HISEQ_OUTPUT_CASAVA_VERSION.setMandatory(False)
-assignment_DATA_SET_ILLUMINA_HISEQ_OUTPUT_CASAVA_VERSION.setSection(None)
-assignment_DATA_SET_ILLUMINA_HISEQ_OUTPUT_CASAVA_VERSION.setPositionInForms(1)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_AFFILIATION = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_AFFILIATION)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_AFFILIATION.setMandatory(True)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_AFFILIATION.setSection('Contact')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_AFFILIATION.setPositionInForms(9)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONTACT_PERSON_NAME = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_CONTACT_PERSON_NAME)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONTACT_PERSON_NAME.setMandatory(True)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONTACT_PERSON_NAME.setSection('Contact')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONTACT_PERSON_NAME.setPositionInForms(10)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONTACT_PERSON_EMAIL = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_CONTACT_PERSON_EMAIL)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONTACT_PERSON_EMAIL.setMandatory(True)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONTACT_PERSON_EMAIL.setSection('Contact')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONTACT_PERSON_EMAIL.setPositionInForms(11)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_PRINCIPAL_INVESTIGATOR_NAME = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_PRINCIPAL_INVESTIGATOR_NAME)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_PRINCIPAL_INVESTIGATOR_NAME.setMandatory(True)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_PRINCIPAL_INVESTIGATOR_NAME.setSection('Contact')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_PRINCIPAL_INVESTIGATOR_NAME.setPositionInForms(12)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_PRINCIPAL_INVESTIGATOR_EMAIL = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_PRINCIPAL_INVESTIGATOR_EMAIL)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_PRINCIPAL_INVESTIGATOR_EMAIL.setMandatory(True)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_PRINCIPAL_INVESTIGATOR_EMAIL.setSection('Contact')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_PRINCIPAL_INVESTIGATOR_EMAIL.setPositionInForms(13)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_EXTERNAL_SAMPLE_NAME = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_EXTERNAL_SAMPLE_NAME)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_EXTERNAL_SAMPLE_NAME.setMandatory(True)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_EXTERNAL_SAMPLE_NAME.setSection('Sample Data')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_EXTERNAL_SAMPLE_NAME.setPositionInForms(25)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_KIND = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_SAMPLE_KIND)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_KIND.setMandatory(True)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_KIND.setSection('Sample Data')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_KIND.setPositionInForms(27)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SEQUENCING_APPLICATION = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_SEQUENCING_APPLICATION)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SEQUENCING_APPLICATION.setMandatory(True)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SEQUENCING_APPLICATION.setSection('Sample Data')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SEQUENCING_APPLICATION.setPositionInForms(28)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONCENTRATION_ORIGINAL_ILLUMINA = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_CONCENTRATION_ORIGINAL_ILLUMINA)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONCENTRATION_ORIGINAL_ILLUMINA.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONCENTRATION_ORIGINAL_ILLUMINA.setSection('Sample Data')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONCENTRATION_ORIGINAL_ILLUMINA.setPositionInForms(32)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONC_IF_SAMPLE_PROCESSED_DNA_LIBRARY = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_CONC_IF_SAMPLE_PROCESSED_DNA_LIBRARY)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONC_IF_SAMPLE_PROCESSED_DNA_LIBRARY.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONC_IF_SAMPLE_PROCESSED_DNA_LIBRARY.setSection('Sample Data')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONC_IF_SAMPLE_PROCESSED_DNA_LIBRARY.setPositionInForms(35)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NCBI_ORGANISM_TAXONOMY = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_NCBI_ORGANISM_TAXONOMY)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NCBI_ORGANISM_TAXONOMY.setMandatory(True)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NCBI_ORGANISM_TAXONOMY.setSection('Sample Data')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NCBI_ORGANISM_TAXONOMY.setPositionInForms(36)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_ORGANISM_FREE = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_ORGANISM_FREE)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_ORGANISM_FREE.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_ORGANISM_FREE.setSection('Sample Data')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_ORGANISM_FREE.setPositionInForms(40)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CELL_PLASTICITY_SYSTEMSX = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_CELL_PLASTICITY_SYSTEMSX)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CELL_PLASTICITY_SYSTEMSX.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CELL_PLASTICITY_SYSTEMSX.setSection('Sample Data')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CELL_PLASTICITY_SYSTEMSX.setPositionInForms(41)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_LIBRARY_STRATEGY = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_SAMPLE_LIBRARY_STRATEGY)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_LIBRARY_STRATEGY.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_LIBRARY_STRATEGY.setSection('GEO compliant annotation')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_LIBRARY_STRATEGY.setPositionInForms(48)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_SOURCE_NAME = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_SAMPLE_SOURCE_NAME)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_SOURCE_NAME.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_SOURCE_NAME.setSection('GEO compliant annotation')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_SOURCE_NAME.setPositionInForms(49)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_LIBRARY_SELECTION = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_SAMPLE_LIBRARY_SELECTION)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_LIBRARY_SELECTION.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_LIBRARY_SELECTION.setSection('GEO compliant annotation')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_LIBRARY_SELECTION.setPositionInForms(50)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_CHARACTERISTICS = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_SAMPLE_CHARACTERISTICS)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_CHARACTERISTICS.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_CHARACTERISTICS.setSection('GEO compliant annotation')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_CHARACTERISTICS.setPositionInForms(51)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_MOLECULE = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_SAMPLE_MOLECULE)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_MOLECULE.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_MOLECULE.setSection('GEO compliant annotation')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_MOLECULE.setPositionInForms(52)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_EXTRACT_PROTOCOL = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_SAMPLE_EXTRACT_PROTOCOL)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_EXTRACT_PROTOCOL.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_EXTRACT_PROTOCOL.setSection('GEO compliant annotation')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_EXTRACT_PROTOCOL.setPositionInForms(53)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_DATA_PROCESSING = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_SAMPLE_DATA_PROCESSING)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_DATA_PROCESSING.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_DATA_PROCESSING.setSection('GEO compliant annotation')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_DATA_PROCESSING.setPositionInForms(55)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CYCLES_REQUESTED_BY_CUSTOMER = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_CYCLES_REQUESTED_BY_CUSTOMER)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CYCLES_REQUESTED_BY_CUSTOMER.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CYCLES_REQUESTED_BY_CUSTOMER.setSection('Sequencing')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CYCLES_REQUESTED_BY_CUSTOMER.setPositionInForms(57)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_END_TYPE = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_END_TYPE)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_END_TYPE.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_END_TYPE.setSection('Sequencing')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_END_TYPE.setPositionInForms(58)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_REQUIRED_LANES = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_REQUIRED_LANES)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_REQUIRED_LANES.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_REQUIRED_LANES.setSection('Sequencing')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_REQUIRED_LANES.setPositionInForms(59)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_BARCODE_LENGTH = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_BARCODE_LENGTH)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_BARCODE_LENGTH.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_BARCODE_LENGTH.setSection('Sequencing')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_BARCODE_LENGTH.setPositionInForms(60)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_BARCODES = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_BARCODES)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_BARCODES.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_BARCODES.setSection('Sequencing')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_BARCODES.setPositionInForms(62)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_BARCODE = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_BARCODE)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_BARCODE.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_BARCODE.setSection('Sequencing')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_BARCODE.setPositionInForms(63)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_INDEX2 = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_INDEX2)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_INDEX2.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_INDEX2.setSection('Sequencing')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_INDEX2.setPositionInForms(64)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NOTES_CUSTOMER = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_NOTES_CUSTOMER)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NOTES_CUSTOMER.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NOTES_CUSTOMER.setSection('Notes')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NOTES_CUSTOMER.setPositionInForms(73)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_OTRS = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_OTRS)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_OTRS.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_OTRS.setSection('Laboratory of Quantitative Genomics (LQG)')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_OTRS.setPositionInForms(74)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_ID = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_SAMPLE_ID)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_ID.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_ID.setSection('Laboratory of Quantitative Genomics (LQG)')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SAMPLE_ID.setPositionInForms(75)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_BIOLOGICAL_SAMPLE_ARRIVED = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_BIOLOGICAL_SAMPLE_ARRIVED)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_BIOLOGICAL_SAMPLE_ARRIVED.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_BIOLOGICAL_SAMPLE_ARRIVED.setSection('Laboratory of Quantitative Genomics (LQG)')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_BIOLOGICAL_SAMPLE_ARRIVED.setPositionInForms(76)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_LIBRARY_PROCESSING_POSSIBLE = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_LIBRARY_PROCESSING_POSSIBLE)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_LIBRARY_PROCESSING_POSSIBLE.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_LIBRARY_PROCESSING_POSSIBLE.setSection('LQG: Generation of DNA library')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_LIBRARY_PROCESSING_POSSIBLE.setPositionInForms(77)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_FRAGMENT_SIZE_PREPARED_ILLUMINA = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_FRAGMENT_SIZE_PREPARED_ILLUMINA)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_FRAGMENT_SIZE_PREPARED_ILLUMINA.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_FRAGMENT_SIZE_PREPARED_ILLUMINA.setSection('LQG: Generation of DNA library')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_FRAGMENT_SIZE_PREPARED_ILLUMINA.setPositionInForms(78)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONCENTRATION_PREPARED_ILLUMINA = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_CONCENTRATION_PREPARED_ILLUMINA)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONCENTRATION_PREPARED_ILLUMINA.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONCENTRATION_PREPARED_ILLUMINA.setSection('LQG: Generation of DNA library')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONCENTRATION_PREPARED_ILLUMINA.setPositionInForms(80)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NM_DNA = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_NM_DNA)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NM_DNA.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NM_DNA.setSection('LQG: Generation of DNA library')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NM_DNA.setPositionInForms(81)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_UL_STOCK = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_UL_STOCK)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_UL_STOCK.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_UL_STOCK.setSection('LQG: Generation of DNA library')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_UL_STOCK.setPositionInForms(82)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_UL_DNA = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_UL_DNA)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_UL_DNA.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_UL_DNA.setSection('LQG: Generation of DNA library')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_UL_DNA.setPositionInForms(83)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_UL_EB = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_UL_EB)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_UL_EB.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_UL_EB.setSection('LQG: Generation of DNA library')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_UL_EB.setPositionInForms(84)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_KIT_PREPARED = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_KIT_PREPARED)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_KIT_PREPARED.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_KIT_PREPARED.setSection('LQG: Generation of DNA library')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_KIT_PREPARED.setPositionInForms(85)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_PREPARED_BY = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_PREPARED_BY)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_PREPARED_BY.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_PREPARED_BY.setSection('LQG: Generation of DNA library')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_PREPARED_BY.setPositionInForms(86)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_KIT = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_KIT)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_KIT.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_KIT.setSection('LQG: Generation of DNA library')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_KIT.setPositionInForms(87)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_LOT = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_LOT)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_LOT.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_LOT.setSection('LQG: Generation of DNA library')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_LOT.setPositionInForms(89)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_STARTING_AMOUNT_OF_SAMPLE_IN_NG = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_STARTING_AMOUNT_OF_SAMPLE_IN_NG)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_STARTING_AMOUNT_OF_SAMPLE_IN_NG.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_STARTING_AMOUNT_OF_SAMPLE_IN_NG.setSection('LQG: Generation of DNA library')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_STARTING_AMOUNT_OF_SAMPLE_IN_NG.setPositionInForms(90)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_DNA_CONCENTRATION_OF_LIBRARY = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_DNA_CONCENTRATION_OF_LIBRARY)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_DNA_CONCENTRATION_OF_LIBRARY.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_DNA_CONCENTRATION_OF_LIBRARY.setSection('LQG: Generation of DNA library')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_DNA_CONCENTRATION_OF_LIBRARY.setPositionInForms(92)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NANO_DROP = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_NANO_DROP)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NANO_DROP.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NANO_DROP.setSection('LQG: Generation of DNA library')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NANO_DROP.setPositionInForms(93)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_AGILENT_KIT = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_AGILENT_KIT)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_AGILENT_KIT.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_AGILENT_KIT.setSection('LQG: Generation of DNA library')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_AGILENT_KIT.setPositionInForms(94)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_LIBRARY_PROCESSING_SUCCESSFUL = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_LIBRARY_PROCESSING_SUCCESSFUL)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_LIBRARY_PROCESSING_SUCCESSFUL.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_LIBRARY_PROCESSING_SUCCESSFUL.setSection('LQG: Generation of DNA library')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_LIBRARY_PROCESSING_SUCCESSFUL.setPositionInForms(95)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_LIBRARY_PROCESSING_FAILED = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_LIBRARY_PROCESSING_FAILED)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_LIBRARY_PROCESSING_FAILED.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_LIBRARY_PROCESSING_FAILED.setSection('LQG: Generation of DNA library')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_LIBRARY_PROCESSING_FAILED.setPositionInForms(96)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CLUSTER_STATION = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_CLUSTER_STATION)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CLUSTER_STATION.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CLUSTER_STATION.setSection('LQG: Clustering Process')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CLUSTER_STATION.setPositionInForms(102)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CREATED_ON_CS = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_CREATED_ON_CS)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CREATED_ON_CS.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CREATED_ON_CS.setSection('LQG: Clustering Process')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CREATED_ON_CS.setPositionInForms(103)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CS_PROTOCOL_VERSION = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_CS_PROTOCOL_VERSION)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CS_PROTOCOL_VERSION.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CS_PROTOCOL_VERSION.setSection('LQG: Clustering Process')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CS_PROTOCOL_VERSION.setPositionInForms(104)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CLUSTER_GENERATION_KIT_VERSION = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_CLUSTER_GENERATION_KIT_VERSION)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CLUSTER_GENERATION_KIT_VERSION.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CLUSTER_GENERATION_KIT_VERSION.setSection('LQG: Clustering Process')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CLUSTER_GENERATION_KIT_VERSION.setPositionInForms(105)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CLUSTER_STATION_SOFTWARE_VERSION = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_CLUSTER_STATION_SOFTWARE_VERSION)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CLUSTER_STATION_SOFTWARE_VERSION.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CLUSTER_STATION_SOFTWARE_VERSION.setSection('LQG: Clustering Process')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CLUSTER_STATION_SOFTWARE_VERSION.setPositionInForms(106)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONCENTRATION_FLOWLANE = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_CONCENTRATION_FLOWLANE)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONCENTRATION_FLOWLANE.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONCENTRATION_FLOWLANE.setSection('LQG: Clustering Process')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CONCENTRATION_FLOWLANE.setPositionInForms(107)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CYCLES = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_CYCLES)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CYCLES.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CYCLES.setSection('LQG: Sequencing')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_CYCLES.setPositionInForms(108)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SCS_PROTOCOL_VERSION = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_SCS_PROTOCOL_VERSION)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SCS_PROTOCOL_VERSION.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SCS_PROTOCOL_VERSION.setSection('LQG: Sequencing')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SCS_PROTOCOL_VERSION.setPositionInForms(110)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SBS_SEQUENCING_KIT_VERSION = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_SBS_SEQUENCING_KIT_VERSION)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SBS_SEQUENCING_KIT_VERSION.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SBS_SEQUENCING_KIT_VERSION.setSection('LQG: Sequencing')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SBS_SEQUENCING_KIT_VERSION.setPositionInForms(111)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SCS_SOFTWARE_VERSION = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_SCS_SOFTWARE_VERSION)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SCS_SOFTWARE_VERSION.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SCS_SOFTWARE_VERSION.setSection('LQG: Sequencing')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_SCS_SOFTWARE_VERSION.setPositionInForms(112)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_BAREBACKED = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_BAREBACKED)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_BAREBACKED.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_BAREBACKED.setSection('LQG: Sequencing')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_BAREBACKED.setPositionInForms(113)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_INVOICE = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_INVOICE)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_INVOICE.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_INVOICE.setSection('LQG: Administrative')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_INVOICE.setPositionInForms(117)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NOTES = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_NOTES)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NOTES.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NOTES.setSection('LQG: Administrative')
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NOTES.setPositionInForms(118)
-
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NUMBER_OF_ATTACHMENTS = tr.assignPropertyType(samp_type_ILLUMINA_SEQUENCING, prop_type_NUMBER_OF_ATTACHMENTS)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NUMBER_OF_ATTACHMENTS.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NUMBER_OF_ATTACHMENTS.setSection(None)
-assignment_SAMPLE_ILLUMINA_SEQUENCING_NUMBER_OF_ATTACHMENTS.setPositionInForms(119)
-
-assignment_DATA_SET_MACS_OUTPUT_MACS_VERSION = tr.assignPropertyType(data_set_type_MACS_OUTPUT, prop_type_MACS_VERSION)
-assignment_DATA_SET_MACS_OUTPUT_MACS_VERSION.setMandatory(False)
-assignment_DATA_SET_MACS_OUTPUT_MACS_VERSION.setSection(None)
-assignment_DATA_SET_MACS_OUTPUT_MACS_VERSION.setPositionInForms(1)
-
-assignment_DATA_SET_MACS_OUTPUT_NOTES = tr.assignPropertyType(data_set_type_MACS_OUTPUT, prop_type_NOTES)
-assignment_DATA_SET_MACS_OUTPUT_NOTES.setMandatory(False)
-assignment_DATA_SET_MACS_OUTPUT_NOTES.setSection(None)
-assignment_DATA_SET_MACS_OUTPUT_NOTES.setPositionInForms(2)
diff --git a/deep_sequencing_unit/resource/eclipse/DSU Data Store Server.launch b/deep_sequencing_unit/resource/eclipse/DSU Data Store Server.launch
deleted file mode 100644
index 27b002429a8..00000000000
--- a/deep_sequencing_unit/resource/eclipse/DSU Data Store Server.launch	
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
-<stringAttribute key="bad_container_name" value="/deep_sequencing_unit/resource/ecli"/>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/DataStoreServer.java"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="1"/>
-</listAttribute>
-<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="ch.systemsx.cisd.openbis.dss.generic.DataStoreServer"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="deep_sequencing_unit"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx2G&#13;-ea&#10;-Dpython.path=../libraries/jython/jython-lib"/>
-</launchConfiguration>
diff --git a/deep_sequencing_unit/resource/property_types_for_admin_console.txt b/deep_sequencing_unit/resource/property_types_for_admin_console.txt
deleted file mode 100644
index 552f1809c5e..00000000000
--- a/deep_sequencing_unit/resource/property_types_for_admin_console.txt
+++ /dev/null
@@ -1,268 +0,0 @@
--- 
--- Creating entities for Deep Sequencing Distribution 
---
-
--- @author Manuel Kohler
-
-set type = POLYCOMB2010
-register-type EXPERIMENT ${type}
-
-register-type SAMPLE ILLUMINA_FLOW_CELL listable=true show-container=false show-parents=false description="Flow Cell containing eight flow lanes"
-register-type SAMPLE ILLUMINA_FLOW_LANE listable=true show-container=true show-parents=true description="Flow Lane is parented by one ILLUMINA_SEQUENCING"
-register-type SAMPLE ILLUMINA_SEQUENCING listable=true show-container=false show-parents=false description="Biological Sample"
-
-set type = FASTQ_GZ
-register-type DATA_SET ${type} description="Gzipped FASTQ files produced by CASAVA 1.8+"
-
-set type = ILLUMINA_GA_OUTPUT
-register-type DATA_SET ${type} description="Illumina GA Output"
-
-set type = ILLUMINA_HISEQ_OUTPUT description="Illumina HiSeq Output"
-register-type DATA_SET ${type}
-
-set type = MACS_OUTPUT
-register-type DATA_SET ${type} description="MACS Peak Caller output"
-
-set type = TSV
-register-type DATA_SET ${type} description="All kind of Tab Separated Value files"
-
-set type = WIGGLE
-register-type DATA_SET ${type} description="Visualization Format of ChIP-Seq data for UCSC browser"
-
-set type = BED
-register-type DATA_SET ${type} description="Visualization Format of ChIP-Seq data for UCSC browser"
-
-set type = AFFILIATION
-register-property-type ${type} with data type CONTROLLEDVOCABULARY(AFFILIATION) "description=Where data will be shipped to" "label=Affiliation" 
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = ALIGNMENT
-register-type DATA_SET ${type} description="Alignment software output, e.g.  SAM/BAM"
-assign-to DATA_SET:${type} AFFILIATION
-
-set type = AGILENT_KIT
-register-property-type ${type} with data type CONTROLLEDVOCABULARY(AGILENT_KIT) "description=Kit used for QC" "label=Agilent Kit" 
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = ANALYSIS_FINISHED
-register-property-type ${type} with data type TIMESTAMP "description=Post processing of  the complete Flow Cell is finished and the fastq/SRF files have been created" "label=Analysis finshed" 
-assign-to SAMPLE:ILLUMINA_FLOW_CELL ${type}
-
-set type = BIOLOGICAL_SAMPLE_ARRIVED
-register-property-type ${type} with data type TIMESTAMP "description=The date when the biological sample arrived at lab" "label=Arrival Date of Biological Sample" 
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = BARCODE
-register-property-type ${type} with data type CONTROLLEDVOCABULARY(BARCODES) "description=Barcodes used for multiplexing" "label=Barcode"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = BARCODE_LENGTH
-register-property-type ${type} with data type INTEGER "description=Length of the barcode. Will be used as a parameter for the bareback image analysis: Large Scale Loss of Data in Low-Diversity Illumina Sequencing Libraries Can Be recovered by Deferred Cluster Calling Felix Krueger1, Simon R. Andrews1, Cameron S. Osborne2*,Plos One, 2011" "label=Barcode Length (+ recognition site)"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = BAREBACKED
-register-property-type ${type} with data type BOOLEAN "description=Has the bareback algorithm been applied? Krueger F, Andrews SR, Osborne CS (2011) Large Scale Loss of Data in Low-Diversity Illumina Sequencing Libraries Can Be Recovered by Deferred Cluster Calling. PLoS ONE 6(1): e16607. doi:10.1371/journal.pone.0016607" "label=Barebacked?"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = CLUSTER_GENERATION_KIT_VERSION
-register-property-type ${type} with data type CONTROLLEDVOCABULARY(CLUSTER_GENERATION_KIT_VERSION) "description=Cluster Station Kit Version" "label=CS Generation Kit Version"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = CASAVA_VERSION
-register-property-type ${type} with data type CONTROLLEDVOCABULARY(CASAVA_VERSION) "description=Illumina's post analyzing software" "label=Casava Version"
-assign-to DATA_SET:ILLUMINA_GA_OUTPUT ${type}
-assign-to DATA_SET:ILLUMINA_HISEQ_OUTPUT ${type}
-
-set type = CLUSTER_STATION
-register-property-type ${type} with data type CONTROLLEDVOCABULARY(CLUSTER_STATION) "description=Used Cluster Station" "label=Cluster Station"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = CONCENTRATION_ORIGINAL
-register-property-type ${type} with data type REAL "description=Concentration of the original sample for Illumina Sequencing in nano grams per micro liter" "label=Concentration (original) [ng/μl]"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = CONCENTRATION_PREPARED
-register-property-type ${type} with data type REAL "description=Concentration of the prepared sample for Illumina Sequencing in nano grams per micro liter" "label=Concentration (prepared) [ng/μl]"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = CONCENTRATION_FLOW_LANE
-register-property-type ${type} with data type REAL "description=Concentration of library loaded in flow lane" "label=Concentration in flow lane [pM]"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = CYCLES_REQUESTED_BY_CUSTOMER
-register-property-type ${type} with data type CONTROLLEDVOCABULARY(CYCLES) "description=Read length" "label=Cycles"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-assign-to SAMPLE:ILLUMINA_FLOW_CELL ${type}
-
-set type = DNA_CONCENTRATION_OF_LIBRARY
-register-property-type ${type} with data type INTEGER "description=" "label=DNA concentration of library (nM)"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = CONCENTRATION_TOTAL
-register-property-type ${type} with data type INTEGER "description=Total amount of genetic material" "label=DNA concentration of library (ng/µl)"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = DATA_TRANSFERRED
-register-property-type ${type} with data type TIMESTAMP "description=Date of successful data transfer to the customer" "label=Data transferred on"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = CONTACT_PERSON_EMAIL
-register-property-type ${type} with data type VARCHAR "description=Email of person to contact about the sample, Used for the tracking system" "label=Email of Contact Person"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type} mandatory
-
-set type = CONTACT_PERSON_NAME
-register-property-type ${type} with data type VARCHAR "description=Name of person to contact about the sample" "label=Email of Contact Person"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type} mandatory
-
-set type = EXTERNAL_SAMPLE_NAME
-register-property-type ${type} with data type VARCHAR "description=Original Sample Name" "label=External Sample Name"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type} mandatory
-
-set type = FRAGMENT_SIZE_PREPARED_ILLUMINA
-register-property-type ${type} with data type INTEGER "description=Fragment size of the library of a prepared Illumina Sequencing sample in either bases or base pairs" "label=Fragment Size (prepared) [base (pairs)]"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = INVOICE
-register-property-type ${type} with data type BOOLEAN "description=Check box if invoice has been sent" "label=Invoice sent?"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = LOT
-register-property-type ${type} with data type INTEGER "description=Illumina Kit Lot" "label=Kit Lot #"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = KIT_ARRIVED
-register-property-type ${type} with data type TIMESTAMP "description=Date when Illumina Kit arrived" "label=Kit arrived"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = LIBRARY_PROCESSING_POSSIBLE
-register-property-type ${type} with data type BOOLEAN "description=" "label=Library Processing possible"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = KIT
-register-property-type ${type} with data type CONTROLLEDVOCABULARY(KIT) "description=Type of preparation kit" "label=Type of preparation kit"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = LIBRARY_PROCESSING_SUCCESSFUL
-register-property-type ${type} with data type BOOLEAN "description=" "label=Library processing successful"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = MACS_VERSION
-register-property-type ${type} with data type CONTROLLEDVOCABULARY(MACS_VERSION) "description=Used MACS version (peak caller) http://liulab.dfci.harvard.edu/MACS/" "label=MACS Version"
-assign-to DATA_SET:MACS_OUTPUT ${type}
-
-set type = MAPPED_READS
-register-property-type ${type} with data type INTEGER "description=Reads successfully aligned to reference genome" "label=# of mapped reads"
-assign-to  DATA_SET:ALIGNMENT ${type}
-
-set type = NANO_DROP
-register-property-type ${type} with data type CONTROLLEDVOCABULARY(NANO_DROP) "description=" "label=Nano Drop"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = NCBI_ORGANISM_TAXONOMY
-register-property-type ${type} with data type CONTROLLEDVOCABULARY(NCBI_TAXONOMY) "description=Standard NCBI Taxonomy (http://www.ncbi.nlm.nih.gov/taxonomy)" "label=Organism (NCBI Taxonomy)"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type} mandatory
-
-set type = NOTES
-register-property-type ${type} with data type MULTILINE_VARCHAR "description=Free text" "label=Notes"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-assign-to SAMPLE:ILLUMINA_FLOW_CELL ${type}
-
-set type = NOTES_CUSTOMER
-register-property-type ${type} with data type MULTILINE_VARCHAR "description=Free text" "label=Customer notes"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = NUMBER_OF_ATTACHMENTS
-register-property-type ${type} with data type INTEGER "description=" "label=# of attachments"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = OTRS
-register-property-type ${type} with data type INTEGER "description=OTRS Reference Number" "label=OTRS ID #"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = PRINCIPAL_INVESTIGATOR_EMAIL
-register-property-type ${type} with data type VARCHAR "description=Email of Principal Investigator responsible for the sample. Used for the tracking system" "label=Email of Principal Investigator"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type} mandatory
-
-set type = PRINCIPAL_INVESTIGATOR_NAME
-register-property-type ${type} with data type VARCHAR "description=Name of Principal Investigator responsible for the sample." "label=Name of Principal Investigator"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type} mandatory
-
-set type = REQUIRED_LANES
-register-property-type ${type} with data type CONTROLLEDVOCABULARY(REQUIRED_LANES) "description=" "label=Required Lanes"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = SAMPLE_CHARACTERISTICS
-register-property-type ${type} with data type MULTILINE_VARCHAR "description=Describe all available characteristics of the biological source, including factors not necessarily under investigation. Provide in 'Tag: Value' format, where 'Tag' is a type of characteristic (e.g. 'gender', 'strain', 'tissue', 'developmental stage', 'tumor stage', etc), and 'Value' is the value for each tag (e.g. 'female', '129SV', 'brain', 'embryo', etc). Include as many characteristics fields as necessary to thoroughly describe your Samples." "label=Sample characteristics"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = SAMPLE_DATA_PROCESSING
-register-property-type ${type} with data type MULTILINE_VARCHAR "description=Provide details of how data were generated and calculated. For example, what software was used, how and to what were the reads aligned, what filtering parameters were applied, how were peaks calculated, etc. Include a separate 'data processing' attribute for each file type described." "label=Sample Data Processing"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = SAMPLE_EXTRACT_PROTOCOL
-register-property-type ${type} with data type MULTILINE_VARCHAR "description=Describe the protocol used to isolate the extract material. Describe the library construction protocol, ie, the protocols used to extract and prepare the material to be sequenced. You can include as much text as you need to thoroughly describe the protocol; it is strongly recommended that complete protocol descriptions are provided within your submission." "label=Sample Extract Protocol"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = SAMPLE_KIND
-register-property-type ${type} with data type CONTROLLEDVOCABULARY(SAMPLE_TYPE) "description=Kind of sample delivered by the customer (and suitable for a certain sequencing application)" "label=Sample Kind"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type} mandatory
-
-set type = SAMPLE_LIBRARY_SELECTION
-register-property-type ${type} with data type CONTROLLEDVOCABULARY(SAMPLE_LIBRARY_SELECTION) "description=Describes whether any method was used to select and/or enrich the material being sequenced." "label=Sample Library Selection"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = SAMPLE_LIBRARY_SOURCE
-register-property-type ${type} with data type CONTROLLEDVOCABULARY(SAMPLE_LIBRARY_SOURCE_VOC) "description=Type of source material that is being sequenced." "label=Sample Library Source"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = SAMPLE_LIBRARY_STRATEGY
-register-property-type ${type} with data type CONTROLLEDVOCABULARY(SAMPLE_LIBRARY_STRATEGY) "description=Sequencing technique for this library." "label=Sample Library Strategy"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = SAMPLE_MOLECULE
-register-property-type ${type} with data type CONTROLLEDVOCABULARY(SAMPLE_MOLECULE) "description=Specify the type of molecule that was extracted from the biological material." "label=Sample molecule"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = SAMPLE_SOURCE_NAME
-register-property-type ${type} with data type VARCHAR "description=Briefly identify the biological material and the experimental variable(s), e.g., vastus lateralis muscle, exercised, 60 min." "label=Sample Source Name"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = SAMTOOLS_FLAGSTAT
-register-property-type ${type} with data type MULTILINE_VARCHAR "description=Output of the samtools flagstat command" "label=Samtools Flagstat Output"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = SBS_SEQUENCING_KIT_VERSION
-register-property-type ${type} with data type CONTROLLEDVOCABULARY(SBS_SEQUENCING_KIT_VERSION) "description=SBS Sequencing Kit Version" "label=SBS Sequencing Kit Version"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = SCS_PROTOCOL_VERSION
-register-property-type ${type} with data type CONTROLLEDVOCABULARY(SCS_PROTOCOL_VERSION) "description=Illumina protocol version" "label=SCS Protocol Version"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = SCS_SOFTWARE_VERSION
-register-property-type ${type} with data type CONTROLLEDVOCABULARY(SCS_SOFTWARE_VERSION) "description=Version of the SCS Software on the GA Control PC" "label=SCS Software Version"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = SEQUENCER
-register-property-type ${type} with data type CONTROLLEDVOCABULARY(SEQUENCER) "description=Which sequencer has been used?" "label=Sequencer"
-assign-to SAMPLE:ILLUMINA_FLOW_CELL ${type}
-
-set type = SEQUENCING_APPLICATION
-register-property-type ${type} with data type CONTROLLEDVOCABULARY(SEQUENCING_APPLICATION) "description=What kind of sequencing application the sample has been prepared for" "label=Sequencing Application"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type} mandatory
-
-set type = STARTING_AMOUNT_OF_SAMPLE_IN_NG
-register-property-type ${type} with data type REAL "description=" "label=Starting amount of sample (ng)"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = TOTAL_READS
-register-property-type ${type} with data type REAL "description=Total reads which have been tried to map" "label=Total reads"
-assign-to DATA_SET:ALIGNMENT ${type}
-
-set type = CLUSTERING_DATE
-register-property-type ${type} with data type TIMESTAMP "description=Date of Clustering Process" "label=Clustering Date"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
-
-set type = CLUSTERING_PROTOCOL_VERSION
-register-property-type ${type} with data type VARCHAR "description=" "label=Cluster Station Protocol Version"
-assign-to SAMPLE:ILLUMINA_SEQUENCING ${type}
diff --git a/deep_sequencing_unit/resource/test-data/DemoDropboxTest/demo-data/demo-file-1 b/deep_sequencing_unit/resource/test-data/DemoDropboxTest/demo-data/demo-file-1
deleted file mode 100644
index 7ed1e254022..00000000000
--- a/deep_sequencing_unit/resource/test-data/DemoDropboxTest/demo-data/demo-file-1
+++ /dev/null
@@ -1 +0,0 @@
-DEMO-EXPERIMENT-1
\ No newline at end of file
diff --git a/deep_sequencing_unit/resource/test-data/DemoDropboxTest/demo-data/demo-file-2 b/deep_sequencing_unit/resource/test-data/DemoDropboxTest/demo-data/demo-file-2
deleted file mode 100644
index 0ce414b76f4..00000000000
--- a/deep_sequencing_unit/resource/test-data/DemoDropboxTest/demo-data/demo-file-2
+++ /dev/null
@@ -1 +0,0 @@
-DEMO-EXPERIMENT-2
\ No newline at end of file
diff --git a/deep_sequencing_unit/resource/test-data/QGFCreateFlowCellHiseqTest/141212_D00535_0037_AC5UMNANXX/RunInfo.xml b/deep_sequencing_unit/resource/test-data/QGFCreateFlowCellHiseqTest/141212_D00535_0037_AC5UMNANXX/RunInfo.xml
deleted file mode 100644
index 1271980cef1..00000000000
--- a/deep_sequencing_unit/resource/test-data/QGFCreateFlowCellHiseqTest/141212_D00535_0037_AC5UMNANXX/RunInfo.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-<RunInfo xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="2">
-  <Run Id="141212_D00535_0037_AC5UMNANXX" Number="37">
-    <Flowcell>C5UMNANXX</Flowcell>
-    <Instrument>D00535</Instrument>
-    <Date>141212</Date>
-    <Reads>
-      <Read Number="1" NumCycles="51" IsIndexedRead="N" />
-      <Read Number="2" NumCycles="7" IsIndexedRead="Y" />
-    </Reads>
-    <FlowcellLayout LaneCount="8" SurfaceCount="2" SwathCount="3" TileCount="16" />
-    <AlignToPhiX>
-      <Lane>1</Lane>
-      <Lane>2</Lane>
-      <Lane>3</Lane>
-      <Lane>4</Lane>
-      <Lane>5</Lane>
-      <Lane>6</Lane>
-      <Lane>7</Lane>
-      <Lane>8</Lane>
-    </AlignToPhiX>
-  </Run>
-</RunInfo>
\ No newline at end of file
diff --git a/deep_sequencing_unit/resource/test-data/QGFCreateFlowCellHiseqTest/141212_D00535_0038_BC6A12ANXX/RunInfo.xml b/deep_sequencing_unit/resource/test-data/QGFCreateFlowCellHiseqTest/141212_D00535_0038_BC6A12ANXX/RunInfo.xml
deleted file mode 100644
index de51e4e7d16..00000000000
--- a/deep_sequencing_unit/resource/test-data/QGFCreateFlowCellHiseqTest/141212_D00535_0038_BC6A12ANXX/RunInfo.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-<RunInfo xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="2">
-  <Run Id="141212_D00535_0038_BC6A12ANXX" Number="38">
-    <Flowcell>C6A12ANXX</Flowcell>
-    <Instrument>D00535</Instrument>
-    <Date>141212</Date>
-    <Reads>
-      <Read Number="1" NumCycles="51" IsIndexedRead="N" />
-      <Read Number="2" NumCycles="7" IsIndexedRead="Y" />
-    </Reads>
-    <FlowcellLayout LaneCount="8" SurfaceCount="2" SwathCount="3" TileCount="16" />
-    <AlignToPhiX>
-      <Lane>1</Lane>
-      <Lane>2</Lane>
-      <Lane>3</Lane>
-      <Lane>4</Lane>
-      <Lane>5</Lane>
-      <Lane>6</Lane>
-      <Lane>7</Lane>
-      <Lane>8</Lane>
-    </AlignToPhiX>
-  </Run>
-</RunInfo>
\ No newline at end of file
diff --git a/deep_sequencing_unit/resource/test-data/QGFCreateFlowCellHiseqTest/141212_D00535_0038_BC6A12ANXX/runParameters.xml b/deep_sequencing_unit/resource/test-data/QGFCreateFlowCellHiseqTest/141212_D00535_0038_BC6A12ANXX/runParameters.xml
deleted file mode 100644
index a8074b90066..00000000000
--- a/deep_sequencing_unit/resource/test-data/QGFCreateFlowCellHiseqTest/141212_D00535_0038_BC6A12ANXX/runParameters.xml
+++ /dev/null
@@ -1,151 +0,0 @@
-<?xml version="1.0"?>
-<RunParameters xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <Setup>
-    <ExperimentName>141212_C6A12ANXX</ExperimentName>
-    <ScanID>-999</ScanID>
-    <FCPosition>B</FCPosition>
-    <WorkFlowType>SINGLEINDEX</WorkFlowType>
-    <PairEndFC>false</PairEndFC>
-    <Read1>51</Read1>
-    <IndexRead1>7</IndexRead1>
-    <IndexRead2>0</IndexRead2>
-    <Read2>0</Read2>
-    <OutputFolder>Y:\jabba</OutputFolder>
-    <CompressBcls>true</CompressBcls>
-    <RemapQScores />
-    <NearNeighborCorrection>false</NearNeighborCorrection>
-    <PeriodicSave>Save All Thumbnails</PeriodicSave>
-    <Flowcell>HiSeq Flow Cell v4</Flowcell>
-    <FirstBaseConfirmation>true</FirstBaseConfirmation>
-    <SampleSheet />
-    <KeepIntensityFiles>false</KeepIntensityFiles>
-    <Sbs>HiSeq SBS Kit v4</Sbs>
-    <Pe />
-    <Index>HiSeq v4 Single Index</Index>
-    <AlignToPhiX>
-      <Lane>1</Lane>
-      <Lane>2</Lane>
-      <Lane>3</Lane>
-      <Lane>4</Lane>
-      <Lane>5</Lane>
-      <Lane>6</Lane>
-      <Lane>7</Lane>
-      <Lane>8</Lane>
-    </AlignToPhiX>
-    <ClusteringChoice>None</ClusteringChoice>
-    <RunMode>RapidHighOutput</RunMode>
-    <Rehyb>None</Rehyb>
-    <PerformPreRunFluidicsCheck>false</PerformPreRunFluidicsCheck>
-    <ServiceRun>false</ServiceRun>
-    <ApplicationName>HiSeq Control Software</ApplicationName>
-    <ApplicationVersion>2.2.38</ApplicationVersion>
-    <RunID>141212_D00535_0038_BC6A12ANXX</RunID>
-    <RunStartDate>141212</RunStartDate>
-    <IntegrationMode>Standalone</IntegrationMode>
-    <BaseSpaceSettings>
-      <Username />
-      <RunId />
-      <TempFolder />
-      <SendInstrumentHealthToILMN>false</SendInstrumentHealthToILMN>
-      <RunMonitoringOnly>false</RunMonitoringOnly>
-      <PlannedRun>false</PlannedRun>
-    </BaseSpaceSettings>
-    <ScannerID>D00535</ScannerID>
-    <ScanNumber>38</ScanNumber>
-    <ComputerName>BS-DSFCONTROL06</ComputerName>
-    <FPGAVersion>7.9.7</FPGAVersion>
-    <CPLDVersion>3.0.0</CPLDVersion>
-    <RTAVersion>1.18.61</RTAVersion>
-    <ChemistryVersion>Illumina,Bruno Fluidics Controller,0,v2.0340</ChemistryVersion>
-    <CameraFirmware>2.01-F20-R02</CameraFirmware>
-    <CameraDriver>6.45.20.3690</CameraDriver>
-    <FocusCameraFirmware />
-    <Barcode>C6A12ANXX</Barcode>
-    <WashBarcode>C4R3MANXX</WashBarcode>
-    <Username>bs-dsfcontrol06</Username>
-    <SelectedSections>
-      <Section Name="A_1" />
-      <Section Name="B_1" />
-      <Section Name="C_1" />
-      <Section Name="D_1" />
-      <Section Name="E_1" />
-      <Section Name="F_1" />
-      <Section Name="G_1" />
-      <Section Name="H_1" />
-    </SelectedSections>
-    <FocusMethod>DynamicITF</FocusMethod>
-    <SelectedSurface>BothLaneSurfaces</SelectedSurface>
-    <SwathScanMode>AutoSwath</SwathScanMode>
-    <EnableLft>true</EnableLft>
-    <AutoTiltOnce>true</AutoTiltOnce>
-    <EnableAutoCenter>true</EnableAutoCenter>
-    <EnableAnalysis>true</EnableAnalysis>
-    <EnableBasecalling>true</EnableBasecalling>
-    <EnableCameraLogging>false</EnableCameraLogging>
-    <AdapterPlate>HiSeq Adapter Plate</AdapterPlate>
-    <SlideHolder>HiSeq Flow Cell Holder</SlideHolder>
-    <TemplateCycleCount>5</TemplateCycleCount>
-    <NumAnalysisThreads>8</NumAnalysisThreads>
-    <FPGADynamicFocusSettings>
-      <MaxInitialZJumpHalfUm>3</MaxInitialZJumpHalfUm>
-      <MaxSubsequentZJumpHalfUm>7</MaxSubsequentZJumpHalfUm>
-      <NumberOfInitialZJumps>0</NumberOfInitialZJumps>
-      <CVGainStart>500</CVGainStart>
-      <CVGainPosLocked>500</CVGainPosLocked>
-      <Offset>250</Offset>
-      <HotPixel>350</HotPixel>
-      <MotorDelayFrames>10</MotorDelayFrames>
-      <SoftwareLaserLag>200</SoftwareLaserLag>
-      <DitherSize>100</DitherSize>
-      <GroupSize>40</GroupSize>
-      <DitherShift>0</DitherShift>
-      <IntensityCeiling>65535</IntensityCeiling>
-      <IGain>100</IGain>
-      <IHistory>4</IHistory>
-    </FPGADynamicFocusSettings>
-    <TileWidth>2048</TileWidth>
-    <TileHeight>10000</TileHeight>
-    <ImageWidth>2048</ImageWidth>
-    <ImageHeight>160000</ImageHeight>
-    <AreaPerPixelmm2>1.40625E-07</AreaPerPixelmm2>
-    <LaneLength>60</LaneLength>
-    <NumTilesPerSwath>16</NumTilesPerSwath>
-    <NumSwaths>3</NumSwaths>
-    <UseExistingRecipe>false</UseExistingRecipe>
-    <Reads>
-      <Read Number="1" NumCycles="51" IsIndexedRead="N" />
-      <Read Number="2" NumCycles="7" IsIndexedRead="Y" />
-    </Reads>
-    <EnableNotifications>false</EnableNotifications>
-    <ReagentKits>
-      <Sbs>
-        <SbsReagentKit>
-          <ID>RGT4611449RGT4588772RGT4731952</ID>
-          <Prime>false</Prime>
-          <NumberCyclesRemaining>74</NumberCyclesRemaining>
-          <IsNew50Cycle>true</IsNew50Cycle>
-          <IsNew200Cycle>false</IsNew200Cycle>
-        </SbsReagentKit>
-      </Sbs>
-      <Index>
-        <ReagentKit>
-          <ID />
-        </ReagentKit>
-      </Index>
-      <Pe />
-      <Rehyb />
-    </ReagentKits>
-    <ReagentBottles>
-      <Sbs />
-    </ReagentBottles>
-    <Resume>false</Resume>
-    <ResumeCycle>0</ResumeCycle>
-    <SupportMultipleSurfacesInUI>true</SupportMultipleSurfacesInUI>
-    <TempFolder>E:\Illumina\HiSeqTemp\141212_D00535_0038_BC6A12ANXX</TempFolder>
-    <RecipeFragmentVersion>1.5.14.0</RecipeFragmentVersion>
-    <PromptForPeReagents>false</PromptForPeReagents>
-    <MockRun>false</MockRun>
-    <ScannedBarcode />
-  </Setup>
-  <Version>1</Version>
-</RunParameters>
\ No newline at end of file
diff --git a/deep_sequencing_unit/resource/test-data/QGFCreateFlowCellHiseqTest/141212_D00535_0038_BC6A12ANXX_NonmatchingFolderName/RunInfo.xml b/deep_sequencing_unit/resource/test-data/QGFCreateFlowCellHiseqTest/141212_D00535_0038_BC6A12ANXX_NonmatchingFolderName/RunInfo.xml
deleted file mode 100644
index de51e4e7d16..00000000000
--- a/deep_sequencing_unit/resource/test-data/QGFCreateFlowCellHiseqTest/141212_D00535_0038_BC6A12ANXX_NonmatchingFolderName/RunInfo.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-<RunInfo xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="2">
-  <Run Id="141212_D00535_0038_BC6A12ANXX" Number="38">
-    <Flowcell>C6A12ANXX</Flowcell>
-    <Instrument>D00535</Instrument>
-    <Date>141212</Date>
-    <Reads>
-      <Read Number="1" NumCycles="51" IsIndexedRead="N" />
-      <Read Number="2" NumCycles="7" IsIndexedRead="Y" />
-    </Reads>
-    <FlowcellLayout LaneCount="8" SurfaceCount="2" SwathCount="3" TileCount="16" />
-    <AlignToPhiX>
-      <Lane>1</Lane>
-      <Lane>2</Lane>
-      <Lane>3</Lane>
-      <Lane>4</Lane>
-      <Lane>5</Lane>
-      <Lane>6</Lane>
-      <Lane>7</Lane>
-      <Lane>8</Lane>
-    </AlignToPhiX>
-  </Run>
-</RunInfo>
\ No newline at end of file
diff --git a/deep_sequencing_unit/resource/test-data/QGFCreateFlowCellHiseqTest/141212_D00535_0038_BC6A12ANXX_NonmatchingFolderName/runParameters.xml b/deep_sequencing_unit/resource/test-data/QGFCreateFlowCellHiseqTest/141212_D00535_0038_BC6A12ANXX_NonmatchingFolderName/runParameters.xml
deleted file mode 100644
index a8074b90066..00000000000
--- a/deep_sequencing_unit/resource/test-data/QGFCreateFlowCellHiseqTest/141212_D00535_0038_BC6A12ANXX_NonmatchingFolderName/runParameters.xml
+++ /dev/null
@@ -1,151 +0,0 @@
-<?xml version="1.0"?>
-<RunParameters xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <Setup>
-    <ExperimentName>141212_C6A12ANXX</ExperimentName>
-    <ScanID>-999</ScanID>
-    <FCPosition>B</FCPosition>
-    <WorkFlowType>SINGLEINDEX</WorkFlowType>
-    <PairEndFC>false</PairEndFC>
-    <Read1>51</Read1>
-    <IndexRead1>7</IndexRead1>
-    <IndexRead2>0</IndexRead2>
-    <Read2>0</Read2>
-    <OutputFolder>Y:\jabba</OutputFolder>
-    <CompressBcls>true</CompressBcls>
-    <RemapQScores />
-    <NearNeighborCorrection>false</NearNeighborCorrection>
-    <PeriodicSave>Save All Thumbnails</PeriodicSave>
-    <Flowcell>HiSeq Flow Cell v4</Flowcell>
-    <FirstBaseConfirmation>true</FirstBaseConfirmation>
-    <SampleSheet />
-    <KeepIntensityFiles>false</KeepIntensityFiles>
-    <Sbs>HiSeq SBS Kit v4</Sbs>
-    <Pe />
-    <Index>HiSeq v4 Single Index</Index>
-    <AlignToPhiX>
-      <Lane>1</Lane>
-      <Lane>2</Lane>
-      <Lane>3</Lane>
-      <Lane>4</Lane>
-      <Lane>5</Lane>
-      <Lane>6</Lane>
-      <Lane>7</Lane>
-      <Lane>8</Lane>
-    </AlignToPhiX>
-    <ClusteringChoice>None</ClusteringChoice>
-    <RunMode>RapidHighOutput</RunMode>
-    <Rehyb>None</Rehyb>
-    <PerformPreRunFluidicsCheck>false</PerformPreRunFluidicsCheck>
-    <ServiceRun>false</ServiceRun>
-    <ApplicationName>HiSeq Control Software</ApplicationName>
-    <ApplicationVersion>2.2.38</ApplicationVersion>
-    <RunID>141212_D00535_0038_BC6A12ANXX</RunID>
-    <RunStartDate>141212</RunStartDate>
-    <IntegrationMode>Standalone</IntegrationMode>
-    <BaseSpaceSettings>
-      <Username />
-      <RunId />
-      <TempFolder />
-      <SendInstrumentHealthToILMN>false</SendInstrumentHealthToILMN>
-      <RunMonitoringOnly>false</RunMonitoringOnly>
-      <PlannedRun>false</PlannedRun>
-    </BaseSpaceSettings>
-    <ScannerID>D00535</ScannerID>
-    <ScanNumber>38</ScanNumber>
-    <ComputerName>BS-DSFCONTROL06</ComputerName>
-    <FPGAVersion>7.9.7</FPGAVersion>
-    <CPLDVersion>3.0.0</CPLDVersion>
-    <RTAVersion>1.18.61</RTAVersion>
-    <ChemistryVersion>Illumina,Bruno Fluidics Controller,0,v2.0340</ChemistryVersion>
-    <CameraFirmware>2.01-F20-R02</CameraFirmware>
-    <CameraDriver>6.45.20.3690</CameraDriver>
-    <FocusCameraFirmware />
-    <Barcode>C6A12ANXX</Barcode>
-    <WashBarcode>C4R3MANXX</WashBarcode>
-    <Username>bs-dsfcontrol06</Username>
-    <SelectedSections>
-      <Section Name="A_1" />
-      <Section Name="B_1" />
-      <Section Name="C_1" />
-      <Section Name="D_1" />
-      <Section Name="E_1" />
-      <Section Name="F_1" />
-      <Section Name="G_1" />
-      <Section Name="H_1" />
-    </SelectedSections>
-    <FocusMethod>DynamicITF</FocusMethod>
-    <SelectedSurface>BothLaneSurfaces</SelectedSurface>
-    <SwathScanMode>AutoSwath</SwathScanMode>
-    <EnableLft>true</EnableLft>
-    <AutoTiltOnce>true</AutoTiltOnce>
-    <EnableAutoCenter>true</EnableAutoCenter>
-    <EnableAnalysis>true</EnableAnalysis>
-    <EnableBasecalling>true</EnableBasecalling>
-    <EnableCameraLogging>false</EnableCameraLogging>
-    <AdapterPlate>HiSeq Adapter Plate</AdapterPlate>
-    <SlideHolder>HiSeq Flow Cell Holder</SlideHolder>
-    <TemplateCycleCount>5</TemplateCycleCount>
-    <NumAnalysisThreads>8</NumAnalysisThreads>
-    <FPGADynamicFocusSettings>
-      <MaxInitialZJumpHalfUm>3</MaxInitialZJumpHalfUm>
-      <MaxSubsequentZJumpHalfUm>7</MaxSubsequentZJumpHalfUm>
-      <NumberOfInitialZJumps>0</NumberOfInitialZJumps>
-      <CVGainStart>500</CVGainStart>
-      <CVGainPosLocked>500</CVGainPosLocked>
-      <Offset>250</Offset>
-      <HotPixel>350</HotPixel>
-      <MotorDelayFrames>10</MotorDelayFrames>
-      <SoftwareLaserLag>200</SoftwareLaserLag>
-      <DitherSize>100</DitherSize>
-      <GroupSize>40</GroupSize>
-      <DitherShift>0</DitherShift>
-      <IntensityCeiling>65535</IntensityCeiling>
-      <IGain>100</IGain>
-      <IHistory>4</IHistory>
-    </FPGADynamicFocusSettings>
-    <TileWidth>2048</TileWidth>
-    <TileHeight>10000</TileHeight>
-    <ImageWidth>2048</ImageWidth>
-    <ImageHeight>160000</ImageHeight>
-    <AreaPerPixelmm2>1.40625E-07</AreaPerPixelmm2>
-    <LaneLength>60</LaneLength>
-    <NumTilesPerSwath>16</NumTilesPerSwath>
-    <NumSwaths>3</NumSwaths>
-    <UseExistingRecipe>false</UseExistingRecipe>
-    <Reads>
-      <Read Number="1" NumCycles="51" IsIndexedRead="N" />
-      <Read Number="2" NumCycles="7" IsIndexedRead="Y" />
-    </Reads>
-    <EnableNotifications>false</EnableNotifications>
-    <ReagentKits>
-      <Sbs>
-        <SbsReagentKit>
-          <ID>RGT4611449RGT4588772RGT4731952</ID>
-          <Prime>false</Prime>
-          <NumberCyclesRemaining>74</NumberCyclesRemaining>
-          <IsNew50Cycle>true</IsNew50Cycle>
-          <IsNew200Cycle>false</IsNew200Cycle>
-        </SbsReagentKit>
-      </Sbs>
-      <Index>
-        <ReagentKit>
-          <ID />
-        </ReagentKit>
-      </Index>
-      <Pe />
-      <Rehyb />
-    </ReagentKits>
-    <ReagentBottles>
-      <Sbs />
-    </ReagentBottles>
-    <Resume>false</Resume>
-    <ResumeCycle>0</ResumeCycle>
-    <SupportMultipleSurfacesInUI>true</SupportMultipleSurfacesInUI>
-    <TempFolder>E:\Illumina\HiSeqTemp\141212_D00535_0038_BC6A12ANXX</TempFolder>
-    <RecipeFragmentVersion>1.5.14.0</RecipeFragmentVersion>
-    <PromptForPeReagents>false</PromptForPeReagents>
-    <MockRun>false</MockRun>
-    <ScannedBarcode />
-  </Setup>
-  <Version>1</Version>
-</RunParameters>
\ No newline at end of file
diff --git a/deep_sequencing_unit/resource/test-data/QGFCreateFlowcellNextseqTest/141212_NS500318_0033_AH16YMBGXX/RunInfo.xml b/deep_sequencing_unit/resource/test-data/QGFCreateFlowcellNextseqTest/141212_NS500318_0033_AH16YMBGXX/RunInfo.xml
deleted file mode 100644
index 168a72f9f21..00000000000
--- a/deep_sequencing_unit/resource/test-data/QGFCreateFlowcellNextseqTest/141212_NS500318_0033_AH16YMBGXX/RunInfo.xml
+++ /dev/null
@@ -1,888 +0,0 @@
-<?xml version="1.0"?>
-<RunInfo xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="4">
-  <Run Id="141212_NS500318_0033_AH16YMBGXX" Number="33">
-    <Flowcell>H16YMBGXX</Flowcell>
-    <Instrument>NS500318</Instrument>
-    <Date>141212</Date>
-    <Reads>
-      <Read Number="1" NumCycles="76" IsIndexedRead="N" />
-      <Read Number="2" NumCycles="8" IsIndexedRead="Y" />
-      <Read Number="3" NumCycles="8" IsIndexedRead="Y" />
-    </Reads>
-    <FlowcellLayout LaneCount="4" SurfaceCount="2" SwathCount="3" TileCount="12" SectionPerLane="3" LanePerSection="2">
-      <TileSet TileNamingConvention="FiveDigit">
-        <Tiles>
-          <Tile>1_11101</Tile>
-          <Tile>1_21101</Tile>
-          <Tile>1_11102</Tile>
-          <Tile>1_21102</Tile>
-          <Tile>1_11103</Tile>
-          <Tile>1_21103</Tile>
-          <Tile>1_11104</Tile>
-          <Tile>1_21104</Tile>
-          <Tile>1_11105</Tile>
-          <Tile>1_21105</Tile>
-          <Tile>1_11106</Tile>
-          <Tile>1_21106</Tile>
-          <Tile>1_11107</Tile>
-          <Tile>1_21107</Tile>
-          <Tile>1_11108</Tile>
-          <Tile>1_21108</Tile>
-          <Tile>1_11109</Tile>
-          <Tile>1_21109</Tile>
-          <Tile>1_11110</Tile>
-          <Tile>1_21110</Tile>
-          <Tile>1_11111</Tile>
-          <Tile>1_21111</Tile>
-          <Tile>1_11112</Tile>
-          <Tile>1_21112</Tile>
-          <Tile>1_12101</Tile>
-          <Tile>1_22101</Tile>
-          <Tile>1_12102</Tile>
-          <Tile>1_22102</Tile>
-          <Tile>1_12103</Tile>
-          <Tile>1_22103</Tile>
-          <Tile>1_12104</Tile>
-          <Tile>1_22104</Tile>
-          <Tile>1_12105</Tile>
-          <Tile>1_22105</Tile>
-          <Tile>1_12106</Tile>
-          <Tile>1_22106</Tile>
-          <Tile>1_12107</Tile>
-          <Tile>1_22107</Tile>
-          <Tile>1_12108</Tile>
-          <Tile>1_22108</Tile>
-          <Tile>1_12109</Tile>
-          <Tile>1_22109</Tile>
-          <Tile>1_12110</Tile>
-          <Tile>1_22110</Tile>
-          <Tile>1_12111</Tile>
-          <Tile>1_22111</Tile>
-          <Tile>1_12112</Tile>
-          <Tile>1_22112</Tile>
-          <Tile>1_13101</Tile>
-          <Tile>1_23101</Tile>
-          <Tile>1_13102</Tile>
-          <Tile>1_23102</Tile>
-          <Tile>1_13103</Tile>
-          <Tile>1_23103</Tile>
-          <Tile>1_13104</Tile>
-          <Tile>1_23104</Tile>
-          <Tile>1_13105</Tile>
-          <Tile>1_23105</Tile>
-          <Tile>1_13106</Tile>
-          <Tile>1_23106</Tile>
-          <Tile>1_13107</Tile>
-          <Tile>1_23107</Tile>
-          <Tile>1_13108</Tile>
-          <Tile>1_23108</Tile>
-          <Tile>1_13109</Tile>
-          <Tile>1_23109</Tile>
-          <Tile>1_13110</Tile>
-          <Tile>1_23110</Tile>
-          <Tile>1_13111</Tile>
-          <Tile>1_23111</Tile>
-          <Tile>1_13112</Tile>
-          <Tile>1_23112</Tile>
-          <Tile>2_11101</Tile>
-          <Tile>2_21101</Tile>
-          <Tile>2_11102</Tile>
-          <Tile>2_21102</Tile>
-          <Tile>2_11103</Tile>
-          <Tile>2_21103</Tile>
-          <Tile>2_11104</Tile>
-          <Tile>2_21104</Tile>
-          <Tile>2_11105</Tile>
-          <Tile>2_21105</Tile>
-          <Tile>2_11106</Tile>
-          <Tile>2_21106</Tile>
-          <Tile>2_11107</Tile>
-          <Tile>2_21107</Tile>
-          <Tile>2_11108</Tile>
-          <Tile>2_21108</Tile>
-          <Tile>2_11109</Tile>
-          <Tile>2_21109</Tile>
-          <Tile>2_11110</Tile>
-          <Tile>2_21110</Tile>
-          <Tile>2_11111</Tile>
-          <Tile>2_21111</Tile>
-          <Tile>2_11112</Tile>
-          <Tile>2_21112</Tile>
-          <Tile>2_12101</Tile>
-          <Tile>2_22101</Tile>
-          <Tile>2_12102</Tile>
-          <Tile>2_22102</Tile>
-          <Tile>2_12103</Tile>
-          <Tile>2_22103</Tile>
-          <Tile>2_12104</Tile>
-          <Tile>2_22104</Tile>
-          <Tile>2_12105</Tile>
-          <Tile>2_22105</Tile>
-          <Tile>2_12106</Tile>
-          <Tile>2_22106</Tile>
-          <Tile>2_12107</Tile>
-          <Tile>2_22107</Tile>
-          <Tile>2_12108</Tile>
-          <Tile>2_22108</Tile>
-          <Tile>2_12109</Tile>
-          <Tile>2_22109</Tile>
-          <Tile>2_12110</Tile>
-          <Tile>2_22110</Tile>
-          <Tile>2_12111</Tile>
-          <Tile>2_22111</Tile>
-          <Tile>2_12112</Tile>
-          <Tile>2_22112</Tile>
-          <Tile>2_13101</Tile>
-          <Tile>2_23101</Tile>
-          <Tile>2_13102</Tile>
-          <Tile>2_23102</Tile>
-          <Tile>2_13103</Tile>
-          <Tile>2_23103</Tile>
-          <Tile>2_13104</Tile>
-          <Tile>2_23104</Tile>
-          <Tile>2_13105</Tile>
-          <Tile>2_23105</Tile>
-          <Tile>2_13106</Tile>
-          <Tile>2_23106</Tile>
-          <Tile>2_13107</Tile>
-          <Tile>2_23107</Tile>
-          <Tile>2_13108</Tile>
-          <Tile>2_23108</Tile>
-          <Tile>2_13109</Tile>
-          <Tile>2_23109</Tile>
-          <Tile>2_13110</Tile>
-          <Tile>2_23110</Tile>
-          <Tile>2_13111</Tile>
-          <Tile>2_23111</Tile>
-          <Tile>2_13112</Tile>
-          <Tile>2_23112</Tile>
-          <Tile>1_11201</Tile>
-          <Tile>1_21201</Tile>
-          <Tile>1_11202</Tile>
-          <Tile>1_21202</Tile>
-          <Tile>1_11203</Tile>
-          <Tile>1_21203</Tile>
-          <Tile>1_11204</Tile>
-          <Tile>1_21204</Tile>
-          <Tile>1_11205</Tile>
-          <Tile>1_21205</Tile>
-          <Tile>1_11206</Tile>
-          <Tile>1_21206</Tile>
-          <Tile>1_11207</Tile>
-          <Tile>1_21207</Tile>
-          <Tile>1_11208</Tile>
-          <Tile>1_21208</Tile>
-          <Tile>1_11209</Tile>
-          <Tile>1_21209</Tile>
-          <Tile>1_11210</Tile>
-          <Tile>1_21210</Tile>
-          <Tile>1_11211</Tile>
-          <Tile>1_21211</Tile>
-          <Tile>1_11212</Tile>
-          <Tile>1_21212</Tile>
-          <Tile>1_12201</Tile>
-          <Tile>1_22201</Tile>
-          <Tile>1_12202</Tile>
-          <Tile>1_22202</Tile>
-          <Tile>1_12203</Tile>
-          <Tile>1_22203</Tile>
-          <Tile>1_12204</Tile>
-          <Tile>1_22204</Tile>
-          <Tile>1_12205</Tile>
-          <Tile>1_22205</Tile>
-          <Tile>1_12206</Tile>
-          <Tile>1_22206</Tile>
-          <Tile>1_12207</Tile>
-          <Tile>1_22207</Tile>
-          <Tile>1_12208</Tile>
-          <Tile>1_22208</Tile>
-          <Tile>1_12209</Tile>
-          <Tile>1_22209</Tile>
-          <Tile>1_12210</Tile>
-          <Tile>1_22210</Tile>
-          <Tile>1_12211</Tile>
-          <Tile>1_22211</Tile>
-          <Tile>1_12212</Tile>
-          <Tile>1_22212</Tile>
-          <Tile>1_13201</Tile>
-          <Tile>1_23201</Tile>
-          <Tile>1_13202</Tile>
-          <Tile>1_23202</Tile>
-          <Tile>1_13203</Tile>
-          <Tile>1_23203</Tile>
-          <Tile>1_13204</Tile>
-          <Tile>1_23204</Tile>
-          <Tile>1_13205</Tile>
-          <Tile>1_23205</Tile>
-          <Tile>1_13206</Tile>
-          <Tile>1_23206</Tile>
-          <Tile>1_13207</Tile>
-          <Tile>1_23207</Tile>
-          <Tile>1_13208</Tile>
-          <Tile>1_23208</Tile>
-          <Tile>1_13209</Tile>
-          <Tile>1_23209</Tile>
-          <Tile>1_13210</Tile>
-          <Tile>1_23210</Tile>
-          <Tile>1_13211</Tile>
-          <Tile>1_23211</Tile>
-          <Tile>1_13212</Tile>
-          <Tile>1_23212</Tile>
-          <Tile>2_11201</Tile>
-          <Tile>2_21201</Tile>
-          <Tile>2_11202</Tile>
-          <Tile>2_21202</Tile>
-          <Tile>2_11203</Tile>
-          <Tile>2_21203</Tile>
-          <Tile>2_11204</Tile>
-          <Tile>2_21204</Tile>
-          <Tile>2_11205</Tile>
-          <Tile>2_21205</Tile>
-          <Tile>2_11206</Tile>
-          <Tile>2_21206</Tile>
-          <Tile>2_11207</Tile>
-          <Tile>2_21207</Tile>
-          <Tile>2_11208</Tile>
-          <Tile>2_21208</Tile>
-          <Tile>2_11209</Tile>
-          <Tile>2_21209</Tile>
-          <Tile>2_11210</Tile>
-          <Tile>2_21210</Tile>
-          <Tile>2_11211</Tile>
-          <Tile>2_21211</Tile>
-          <Tile>2_11212</Tile>
-          <Tile>2_21212</Tile>
-          <Tile>2_12201</Tile>
-          <Tile>2_22201</Tile>
-          <Tile>2_12202</Tile>
-          <Tile>2_22202</Tile>
-          <Tile>2_12203</Tile>
-          <Tile>2_22203</Tile>
-          <Tile>2_12204</Tile>
-          <Tile>2_22204</Tile>
-          <Tile>2_12205</Tile>
-          <Tile>2_22205</Tile>
-          <Tile>2_12206</Tile>
-          <Tile>2_22206</Tile>
-          <Tile>2_12207</Tile>
-          <Tile>2_22207</Tile>
-          <Tile>2_12208</Tile>
-          <Tile>2_22208</Tile>
-          <Tile>2_12209</Tile>
-          <Tile>2_22209</Tile>
-          <Tile>2_12210</Tile>
-          <Tile>2_22210</Tile>
-          <Tile>2_12211</Tile>
-          <Tile>2_22211</Tile>
-          <Tile>2_12212</Tile>
-          <Tile>2_22212</Tile>
-          <Tile>2_13201</Tile>
-          <Tile>2_23201</Tile>
-          <Tile>2_13202</Tile>
-          <Tile>2_23202</Tile>
-          <Tile>2_13203</Tile>
-          <Tile>2_23203</Tile>
-          <Tile>2_13204</Tile>
-          <Tile>2_23204</Tile>
-          <Tile>2_13205</Tile>
-          <Tile>2_23205</Tile>
-          <Tile>2_13206</Tile>
-          <Tile>2_23206</Tile>
-          <Tile>2_13207</Tile>
-          <Tile>2_23207</Tile>
-          <Tile>2_13208</Tile>
-          <Tile>2_23208</Tile>
-          <Tile>2_13209</Tile>
-          <Tile>2_23209</Tile>
-          <Tile>2_13210</Tile>
-          <Tile>2_23210</Tile>
-          <Tile>2_13211</Tile>
-          <Tile>2_23211</Tile>
-          <Tile>2_13212</Tile>
-          <Tile>2_23212</Tile>
-          <Tile>1_11301</Tile>
-          <Tile>1_21301</Tile>
-          <Tile>1_11302</Tile>
-          <Tile>1_21302</Tile>
-          <Tile>1_11303</Tile>
-          <Tile>1_21303</Tile>
-          <Tile>1_11304</Tile>
-          <Tile>1_21304</Tile>
-          <Tile>1_11305</Tile>
-          <Tile>1_21305</Tile>
-          <Tile>1_11306</Tile>
-          <Tile>1_21306</Tile>
-          <Tile>1_11307</Tile>
-          <Tile>1_21307</Tile>
-          <Tile>1_11308</Tile>
-          <Tile>1_21308</Tile>
-          <Tile>1_11309</Tile>
-          <Tile>1_21309</Tile>
-          <Tile>1_11310</Tile>
-          <Tile>1_21310</Tile>
-          <Tile>1_11311</Tile>
-          <Tile>1_21311</Tile>
-          <Tile>1_11312</Tile>
-          <Tile>1_21312</Tile>
-          <Tile>1_12301</Tile>
-          <Tile>1_22301</Tile>
-          <Tile>1_12302</Tile>
-          <Tile>1_22302</Tile>
-          <Tile>1_12303</Tile>
-          <Tile>1_22303</Tile>
-          <Tile>1_12304</Tile>
-          <Tile>1_22304</Tile>
-          <Tile>1_12305</Tile>
-          <Tile>1_22305</Tile>
-          <Tile>1_12306</Tile>
-          <Tile>1_22306</Tile>
-          <Tile>1_12307</Tile>
-          <Tile>1_22307</Tile>
-          <Tile>1_12308</Tile>
-          <Tile>1_22308</Tile>
-          <Tile>1_12309</Tile>
-          <Tile>1_22309</Tile>
-          <Tile>1_12310</Tile>
-          <Tile>1_22310</Tile>
-          <Tile>1_12311</Tile>
-          <Tile>1_22311</Tile>
-          <Tile>1_12312</Tile>
-          <Tile>1_22312</Tile>
-          <Tile>1_13301</Tile>
-          <Tile>1_23301</Tile>
-          <Tile>1_13302</Tile>
-          <Tile>1_23302</Tile>
-          <Tile>1_13303</Tile>
-          <Tile>1_23303</Tile>
-          <Tile>1_13304</Tile>
-          <Tile>1_23304</Tile>
-          <Tile>1_13305</Tile>
-          <Tile>1_23305</Tile>
-          <Tile>1_13306</Tile>
-          <Tile>1_23306</Tile>
-          <Tile>1_13307</Tile>
-          <Tile>1_23307</Tile>
-          <Tile>1_13308</Tile>
-          <Tile>1_23308</Tile>
-          <Tile>1_13309</Tile>
-          <Tile>1_23309</Tile>
-          <Tile>1_13310</Tile>
-          <Tile>1_23310</Tile>
-          <Tile>1_13311</Tile>
-          <Tile>1_23311</Tile>
-          <Tile>1_13312</Tile>
-          <Tile>1_23312</Tile>
-          <Tile>2_11301</Tile>
-          <Tile>2_21301</Tile>
-          <Tile>2_11302</Tile>
-          <Tile>2_21302</Tile>
-          <Tile>2_11303</Tile>
-          <Tile>2_21303</Tile>
-          <Tile>2_11304</Tile>
-          <Tile>2_21304</Tile>
-          <Tile>2_11305</Tile>
-          <Tile>2_21305</Tile>
-          <Tile>2_11306</Tile>
-          <Tile>2_21306</Tile>
-          <Tile>2_11307</Tile>
-          <Tile>2_21307</Tile>
-          <Tile>2_11308</Tile>
-          <Tile>2_21308</Tile>
-          <Tile>2_11309</Tile>
-          <Tile>2_21309</Tile>
-          <Tile>2_11310</Tile>
-          <Tile>2_21310</Tile>
-          <Tile>2_11311</Tile>
-          <Tile>2_21311</Tile>
-          <Tile>2_11312</Tile>
-          <Tile>2_21312</Tile>
-          <Tile>2_12301</Tile>
-          <Tile>2_22301</Tile>
-          <Tile>2_12302</Tile>
-          <Tile>2_22302</Tile>
-          <Tile>2_12303</Tile>
-          <Tile>2_22303</Tile>
-          <Tile>2_12304</Tile>
-          <Tile>2_22304</Tile>
-          <Tile>2_12305</Tile>
-          <Tile>2_22305</Tile>
-          <Tile>2_12306</Tile>
-          <Tile>2_22306</Tile>
-          <Tile>2_12307</Tile>
-          <Tile>2_22307</Tile>
-          <Tile>2_12308</Tile>
-          <Tile>2_22308</Tile>
-          <Tile>2_12309</Tile>
-          <Tile>2_22309</Tile>
-          <Tile>2_12310</Tile>
-          <Tile>2_22310</Tile>
-          <Tile>2_12311</Tile>
-          <Tile>2_22311</Tile>
-          <Tile>2_12312</Tile>
-          <Tile>2_22312</Tile>
-          <Tile>2_13301</Tile>
-          <Tile>2_23301</Tile>
-          <Tile>2_13302</Tile>
-          <Tile>2_23302</Tile>
-          <Tile>2_13303</Tile>
-          <Tile>2_23303</Tile>
-          <Tile>2_13304</Tile>
-          <Tile>2_23304</Tile>
-          <Tile>2_13305</Tile>
-          <Tile>2_23305</Tile>
-          <Tile>2_13306</Tile>
-          <Tile>2_23306</Tile>
-          <Tile>2_13307</Tile>
-          <Tile>2_23307</Tile>
-          <Tile>2_13308</Tile>
-          <Tile>2_23308</Tile>
-          <Tile>2_13309</Tile>
-          <Tile>2_23309</Tile>
-          <Tile>2_13310</Tile>
-          <Tile>2_23310</Tile>
-          <Tile>2_13311</Tile>
-          <Tile>2_23311</Tile>
-          <Tile>2_13312</Tile>
-          <Tile>2_23312</Tile>
-          <Tile>1_11401</Tile>
-          <Tile>1_21401</Tile>
-          <Tile>1_11402</Tile>
-          <Tile>1_21402</Tile>
-          <Tile>1_11403</Tile>
-          <Tile>1_21403</Tile>
-          <Tile>1_11404</Tile>
-          <Tile>1_21404</Tile>
-          <Tile>1_11405</Tile>
-          <Tile>1_21405</Tile>
-          <Tile>1_11406</Tile>
-          <Tile>1_21406</Tile>
-          <Tile>1_11407</Tile>
-          <Tile>1_21407</Tile>
-          <Tile>1_11408</Tile>
-          <Tile>1_21408</Tile>
-          <Tile>1_11409</Tile>
-          <Tile>1_21409</Tile>
-          <Tile>1_11410</Tile>
-          <Tile>1_21410</Tile>
-          <Tile>1_11411</Tile>
-          <Tile>1_21411</Tile>
-          <Tile>1_11412</Tile>
-          <Tile>1_21412</Tile>
-          <Tile>1_12401</Tile>
-          <Tile>1_22401</Tile>
-          <Tile>1_12402</Tile>
-          <Tile>1_22402</Tile>
-          <Tile>1_12403</Tile>
-          <Tile>1_22403</Tile>
-          <Tile>1_12404</Tile>
-          <Tile>1_22404</Tile>
-          <Tile>1_12405</Tile>
-          <Tile>1_22405</Tile>
-          <Tile>1_12406</Tile>
-          <Tile>1_22406</Tile>
-          <Tile>1_12407</Tile>
-          <Tile>1_22407</Tile>
-          <Tile>1_12408</Tile>
-          <Tile>1_22408</Tile>
-          <Tile>1_12409</Tile>
-          <Tile>1_22409</Tile>
-          <Tile>1_12410</Tile>
-          <Tile>1_22410</Tile>
-          <Tile>1_12411</Tile>
-          <Tile>1_22411</Tile>
-          <Tile>1_12412</Tile>
-          <Tile>1_22412</Tile>
-          <Tile>1_13401</Tile>
-          <Tile>1_23401</Tile>
-          <Tile>1_13402</Tile>
-          <Tile>1_23402</Tile>
-          <Tile>1_13403</Tile>
-          <Tile>1_23403</Tile>
-          <Tile>1_13404</Tile>
-          <Tile>1_23404</Tile>
-          <Tile>1_13405</Tile>
-          <Tile>1_23405</Tile>
-          <Tile>1_13406</Tile>
-          <Tile>1_23406</Tile>
-          <Tile>1_13407</Tile>
-          <Tile>1_23407</Tile>
-          <Tile>1_13408</Tile>
-          <Tile>1_23408</Tile>
-          <Tile>1_13409</Tile>
-          <Tile>1_23409</Tile>
-          <Tile>1_13410</Tile>
-          <Tile>1_23410</Tile>
-          <Tile>1_13411</Tile>
-          <Tile>1_23411</Tile>
-          <Tile>1_13412</Tile>
-          <Tile>1_23412</Tile>
-          <Tile>2_11401</Tile>
-          <Tile>2_21401</Tile>
-          <Tile>2_11402</Tile>
-          <Tile>2_21402</Tile>
-          <Tile>2_11403</Tile>
-          <Tile>2_21403</Tile>
-          <Tile>2_11404</Tile>
-          <Tile>2_21404</Tile>
-          <Tile>2_11405</Tile>
-          <Tile>2_21405</Tile>
-          <Tile>2_11406</Tile>
-          <Tile>2_21406</Tile>
-          <Tile>2_11407</Tile>
-          <Tile>2_21407</Tile>
-          <Tile>2_11408</Tile>
-          <Tile>2_21408</Tile>
-          <Tile>2_11409</Tile>
-          <Tile>2_21409</Tile>
-          <Tile>2_11410</Tile>
-          <Tile>2_21410</Tile>
-          <Tile>2_11411</Tile>
-          <Tile>2_21411</Tile>
-          <Tile>2_11412</Tile>
-          <Tile>2_21412</Tile>
-          <Tile>2_12401</Tile>
-          <Tile>2_22401</Tile>
-          <Tile>2_12402</Tile>
-          <Tile>2_22402</Tile>
-          <Tile>2_12403</Tile>
-          <Tile>2_22403</Tile>
-          <Tile>2_12404</Tile>
-          <Tile>2_22404</Tile>
-          <Tile>2_12405</Tile>
-          <Tile>2_22405</Tile>
-          <Tile>2_12406</Tile>
-          <Tile>2_22406</Tile>
-          <Tile>2_12407</Tile>
-          <Tile>2_22407</Tile>
-          <Tile>2_12408</Tile>
-          <Tile>2_22408</Tile>
-          <Tile>2_12409</Tile>
-          <Tile>2_22409</Tile>
-          <Tile>2_12410</Tile>
-          <Tile>2_22410</Tile>
-          <Tile>2_12411</Tile>
-          <Tile>2_22411</Tile>
-          <Tile>2_12412</Tile>
-          <Tile>2_22412</Tile>
-          <Tile>2_13401</Tile>
-          <Tile>2_23401</Tile>
-          <Tile>2_13402</Tile>
-          <Tile>2_23402</Tile>
-          <Tile>2_13403</Tile>
-          <Tile>2_23403</Tile>
-          <Tile>2_13404</Tile>
-          <Tile>2_23404</Tile>
-          <Tile>2_13405</Tile>
-          <Tile>2_23405</Tile>
-          <Tile>2_13406</Tile>
-          <Tile>2_23406</Tile>
-          <Tile>2_13407</Tile>
-          <Tile>2_23407</Tile>
-          <Tile>2_13408</Tile>
-          <Tile>2_23408</Tile>
-          <Tile>2_13409</Tile>
-          <Tile>2_23409</Tile>
-          <Tile>2_13410</Tile>
-          <Tile>2_23410</Tile>
-          <Tile>2_13411</Tile>
-          <Tile>2_23411</Tile>
-          <Tile>2_13412</Tile>
-          <Tile>2_23412</Tile>
-          <Tile>1_11501</Tile>
-          <Tile>1_21501</Tile>
-          <Tile>1_11502</Tile>
-          <Tile>1_21502</Tile>
-          <Tile>1_11503</Tile>
-          <Tile>1_21503</Tile>
-          <Tile>1_11504</Tile>
-          <Tile>1_21504</Tile>
-          <Tile>1_11505</Tile>
-          <Tile>1_21505</Tile>
-          <Tile>1_11506</Tile>
-          <Tile>1_21506</Tile>
-          <Tile>1_11507</Tile>
-          <Tile>1_21507</Tile>
-          <Tile>1_11508</Tile>
-          <Tile>1_21508</Tile>
-          <Tile>1_11509</Tile>
-          <Tile>1_21509</Tile>
-          <Tile>1_11510</Tile>
-          <Tile>1_21510</Tile>
-          <Tile>1_11511</Tile>
-          <Tile>1_21511</Tile>
-          <Tile>1_11512</Tile>
-          <Tile>1_21512</Tile>
-          <Tile>1_12501</Tile>
-          <Tile>1_22501</Tile>
-          <Tile>1_12502</Tile>
-          <Tile>1_22502</Tile>
-          <Tile>1_12503</Tile>
-          <Tile>1_22503</Tile>
-          <Tile>1_12504</Tile>
-          <Tile>1_22504</Tile>
-          <Tile>1_12505</Tile>
-          <Tile>1_22505</Tile>
-          <Tile>1_12506</Tile>
-          <Tile>1_22506</Tile>
-          <Tile>1_12507</Tile>
-          <Tile>1_22507</Tile>
-          <Tile>1_12508</Tile>
-          <Tile>1_22508</Tile>
-          <Tile>1_12509</Tile>
-          <Tile>1_22509</Tile>
-          <Tile>1_12510</Tile>
-          <Tile>1_22510</Tile>
-          <Tile>1_12511</Tile>
-          <Tile>1_22511</Tile>
-          <Tile>1_12512</Tile>
-          <Tile>1_22512</Tile>
-          <Tile>1_13501</Tile>
-          <Tile>1_23501</Tile>
-          <Tile>1_13502</Tile>
-          <Tile>1_23502</Tile>
-          <Tile>1_13503</Tile>
-          <Tile>1_23503</Tile>
-          <Tile>1_13504</Tile>
-          <Tile>1_23504</Tile>
-          <Tile>1_13505</Tile>
-          <Tile>1_23505</Tile>
-          <Tile>1_13506</Tile>
-          <Tile>1_23506</Tile>
-          <Tile>1_13507</Tile>
-          <Tile>1_23507</Tile>
-          <Tile>1_13508</Tile>
-          <Tile>1_23508</Tile>
-          <Tile>1_13509</Tile>
-          <Tile>1_23509</Tile>
-          <Tile>1_13510</Tile>
-          <Tile>1_23510</Tile>
-          <Tile>1_13511</Tile>
-          <Tile>1_23511</Tile>
-          <Tile>1_13512</Tile>
-          <Tile>1_23512</Tile>
-          <Tile>2_11501</Tile>
-          <Tile>2_21501</Tile>
-          <Tile>2_11502</Tile>
-          <Tile>2_21502</Tile>
-          <Tile>2_11503</Tile>
-          <Tile>2_21503</Tile>
-          <Tile>2_11504</Tile>
-          <Tile>2_21504</Tile>
-          <Tile>2_11505</Tile>
-          <Tile>2_21505</Tile>
-          <Tile>2_11506</Tile>
-          <Tile>2_21506</Tile>
-          <Tile>2_11507</Tile>
-          <Tile>2_21507</Tile>
-          <Tile>2_11508</Tile>
-          <Tile>2_21508</Tile>
-          <Tile>2_11509</Tile>
-          <Tile>2_21509</Tile>
-          <Tile>2_11510</Tile>
-          <Tile>2_21510</Tile>
-          <Tile>2_11511</Tile>
-          <Tile>2_21511</Tile>
-          <Tile>2_11512</Tile>
-          <Tile>2_21512</Tile>
-          <Tile>2_12501</Tile>
-          <Tile>2_22501</Tile>
-          <Tile>2_12502</Tile>
-          <Tile>2_22502</Tile>
-          <Tile>2_12503</Tile>
-          <Tile>2_22503</Tile>
-          <Tile>2_12504</Tile>
-          <Tile>2_22504</Tile>
-          <Tile>2_12505</Tile>
-          <Tile>2_22505</Tile>
-          <Tile>2_12506</Tile>
-          <Tile>2_22506</Tile>
-          <Tile>2_12507</Tile>
-          <Tile>2_22507</Tile>
-          <Tile>2_12508</Tile>
-          <Tile>2_22508</Tile>
-          <Tile>2_12509</Tile>
-          <Tile>2_22509</Tile>
-          <Tile>2_12510</Tile>
-          <Tile>2_22510</Tile>
-          <Tile>2_12511</Tile>
-          <Tile>2_22511</Tile>
-          <Tile>2_12512</Tile>
-          <Tile>2_22512</Tile>
-          <Tile>2_13501</Tile>
-          <Tile>2_23501</Tile>
-          <Tile>2_13502</Tile>
-          <Tile>2_23502</Tile>
-          <Tile>2_13503</Tile>
-          <Tile>2_23503</Tile>
-          <Tile>2_13504</Tile>
-          <Tile>2_23504</Tile>
-          <Tile>2_13505</Tile>
-          <Tile>2_23505</Tile>
-          <Tile>2_13506</Tile>
-          <Tile>2_23506</Tile>
-          <Tile>2_13507</Tile>
-          <Tile>2_23507</Tile>
-          <Tile>2_13508</Tile>
-          <Tile>2_23508</Tile>
-          <Tile>2_13509</Tile>
-          <Tile>2_23509</Tile>
-          <Tile>2_13510</Tile>
-          <Tile>2_23510</Tile>
-          <Tile>2_13511</Tile>
-          <Tile>2_23511</Tile>
-          <Tile>2_13512</Tile>
-          <Tile>2_23512</Tile>
-          <Tile>1_11601</Tile>
-          <Tile>1_21601</Tile>
-          <Tile>1_11602</Tile>
-          <Tile>1_21602</Tile>
-          <Tile>1_11603</Tile>
-          <Tile>1_21603</Tile>
-          <Tile>1_11604</Tile>
-          <Tile>1_21604</Tile>
-          <Tile>1_11605</Tile>
-          <Tile>1_21605</Tile>
-          <Tile>1_11606</Tile>
-          <Tile>1_21606</Tile>
-          <Tile>1_11607</Tile>
-          <Tile>1_21607</Tile>
-          <Tile>1_11608</Tile>
-          <Tile>1_21608</Tile>
-          <Tile>1_11609</Tile>
-          <Tile>1_21609</Tile>
-          <Tile>1_11610</Tile>
-          <Tile>1_21610</Tile>
-          <Tile>1_11611</Tile>
-          <Tile>1_21611</Tile>
-          <Tile>1_11612</Tile>
-          <Tile>1_21612</Tile>
-          <Tile>1_12601</Tile>
-          <Tile>1_22601</Tile>
-          <Tile>1_12602</Tile>
-          <Tile>1_22602</Tile>
-          <Tile>1_12603</Tile>
-          <Tile>1_22603</Tile>
-          <Tile>1_12604</Tile>
-          <Tile>1_22604</Tile>
-          <Tile>1_12605</Tile>
-          <Tile>1_22605</Tile>
-          <Tile>1_12606</Tile>
-          <Tile>1_22606</Tile>
-          <Tile>1_12607</Tile>
-          <Tile>1_22607</Tile>
-          <Tile>1_12608</Tile>
-          <Tile>1_22608</Tile>
-          <Tile>1_12609</Tile>
-          <Tile>1_22609</Tile>
-          <Tile>1_12610</Tile>
-          <Tile>1_22610</Tile>
-          <Tile>1_12611</Tile>
-          <Tile>1_22611</Tile>
-          <Tile>1_12612</Tile>
-          <Tile>1_22612</Tile>
-          <Tile>1_13601</Tile>
-          <Tile>1_23601</Tile>
-          <Tile>1_13602</Tile>
-          <Tile>1_23602</Tile>
-          <Tile>1_13603</Tile>
-          <Tile>1_23603</Tile>
-          <Tile>1_13604</Tile>
-          <Tile>1_23604</Tile>
-          <Tile>1_13605</Tile>
-          <Tile>1_23605</Tile>
-          <Tile>1_13606</Tile>
-          <Tile>1_23606</Tile>
-          <Tile>1_13607</Tile>
-          <Tile>1_23607</Tile>
-          <Tile>1_13608</Tile>
-          <Tile>1_23608</Tile>
-          <Tile>1_13609</Tile>
-          <Tile>1_23609</Tile>
-          <Tile>1_13610</Tile>
-          <Tile>1_23610</Tile>
-          <Tile>1_13611</Tile>
-          <Tile>1_23611</Tile>
-          <Tile>1_13612</Tile>
-          <Tile>1_23612</Tile>
-          <Tile>2_11601</Tile>
-          <Tile>2_21601</Tile>
-          <Tile>2_11602</Tile>
-          <Tile>2_21602</Tile>
-          <Tile>2_11603</Tile>
-          <Tile>2_21603</Tile>
-          <Tile>2_11604</Tile>
-          <Tile>2_21604</Tile>
-          <Tile>2_11605</Tile>
-          <Tile>2_21605</Tile>
-          <Tile>2_11606</Tile>
-          <Tile>2_21606</Tile>
-          <Tile>2_11607</Tile>
-          <Tile>2_21607</Tile>
-          <Tile>2_11608</Tile>
-          <Tile>2_21608</Tile>
-          <Tile>2_11609</Tile>
-          <Tile>2_21609</Tile>
-          <Tile>2_11610</Tile>
-          <Tile>2_21610</Tile>
-          <Tile>2_11611</Tile>
-          <Tile>2_21611</Tile>
-          <Tile>2_11612</Tile>
-          <Tile>2_21612</Tile>
-          <Tile>2_12601</Tile>
-          <Tile>2_22601</Tile>
-          <Tile>2_12602</Tile>
-          <Tile>2_22602</Tile>
-          <Tile>2_12603</Tile>
-          <Tile>2_22603</Tile>
-          <Tile>2_12604</Tile>
-          <Tile>2_22604</Tile>
-          <Tile>2_12605</Tile>
-          <Tile>2_22605</Tile>
-          <Tile>2_12606</Tile>
-          <Tile>2_22606</Tile>
-          <Tile>2_12607</Tile>
-          <Tile>2_22607</Tile>
-          <Tile>2_12608</Tile>
-          <Tile>2_22608</Tile>
-          <Tile>2_12609</Tile>
-          <Tile>2_22609</Tile>
-          <Tile>2_12610</Tile>
-          <Tile>2_22610</Tile>
-          <Tile>2_12611</Tile>
-          <Tile>2_22611</Tile>
-          <Tile>2_12612</Tile>
-          <Tile>2_22612</Tile>
-          <Tile>2_13601</Tile>
-          <Tile>2_23601</Tile>
-          <Tile>2_13602</Tile>
-          <Tile>2_23602</Tile>
-          <Tile>2_13603</Tile>
-          <Tile>2_23603</Tile>
-          <Tile>2_13604</Tile>
-          <Tile>2_23604</Tile>
-          <Tile>2_13605</Tile>
-          <Tile>2_23605</Tile>
-          <Tile>2_13606</Tile>
-          <Tile>2_23606</Tile>
-          <Tile>2_13607</Tile>
-          <Tile>2_23607</Tile>
-          <Tile>2_13608</Tile>
-          <Tile>2_23608</Tile>
-          <Tile>2_13609</Tile>
-          <Tile>2_23609</Tile>
-          <Tile>2_13610</Tile>
-          <Tile>2_23610</Tile>
-          <Tile>2_13611</Tile>
-          <Tile>2_23611</Tile>
-          <Tile>2_13612</Tile>
-          <Tile>2_23612</Tile>
-        </Tiles>
-      </TileSet>
-    </FlowcellLayout>
-    <ImageDimensions Width="2592" Height="1944" />
-    <ImageChannels>
-      <Name>Red</Name>
-      <Name>Green</Name>
-    </ImageChannels>
-  </Run>
-</RunInfo>
\ No newline at end of file
diff --git a/deep_sequencing_unit/resource/test-data/QGFCreateFlowcellNextseqTest/141212_NS500318_0033_AH16YMBGXX/RunParameters.xml b/deep_sequencing_unit/resource/test-data/QGFCreateFlowcellNextseqTest/141212_NS500318_0033_AH16YMBGXX/RunParameters.xml
deleted file mode 100644
index dadfb6c1ad6..00000000000
--- a/deep_sequencing_unit/resource/test-data/QGFCreateFlowcellNextseqTest/141212_NS500318_0033_AH16YMBGXX/RunParameters.xml
+++ /dev/null
@@ -1,926 +0,0 @@
-<?xml version="1.0"?>
-<RunParameters xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <Setup>
-    <SupportMultipleSurfacesInUI>true</SupportMultipleSurfacesInUI>
-    <ApplicationVersion>1.3.0.23</ApplicationVersion>
-    <ApplicationName>NextSeq Control Software</ApplicationName>
-    <NumTilesPerSwath>12</NumTilesPerSwath>
-    <NumSwaths>3</NumSwaths>
-    <NumLanes>4</NumLanes>
-    <Read1>76</Read1>
-    <Read2>0</Read2>
-    <Index1Read>8</Index1Read>
-    <Index2Read>8</Index2Read>
-    <SectionPerLane>3</SectionPerLane>
-    <LanePerSection>2</LanePerSection>
-  </Setup>
-  <RunID>141212_NS500318_0033_AH16YMBGXX</RunID>
-  <InstrumentID>NS500318</InstrumentID>
-  <RunNumber>33</RunNumber>
-  <RTAVersion>2.1.3</RTAVersion>
-  <SystemSuiteVersion>1.3.0.9</SystemSuiteVersion>
-  <FlowCellSerial>H16YMBGXX</FlowCellSerial>
-  <PR2BottleSerial>NS2049329-BUFFR</PR2BottleSerial>
-  <ReagentKitSerial>NS2038160-REAGT</ReagentKitSerial>
-  <ReagentKitSerialWasEnteredInBaseSpace>false</ReagentKitSerialWasEnteredInBaseSpace>
-  <ExperimentName>Arnau_SC4</ExperimentName>
-  <LibraryID />
-  <Chemistry>NextSeq High</Chemistry>
-  <SelectedTiles>
-    <Tile>1_11101</Tile>
-    <Tile>1_21101</Tile>
-    <Tile>1_11102</Tile>
-    <Tile>1_21102</Tile>
-    <Tile>1_11103</Tile>
-    <Tile>1_21103</Tile>
-    <Tile>1_11104</Tile>
-    <Tile>1_21104</Tile>
-    <Tile>1_11105</Tile>
-    <Tile>1_21105</Tile>
-    <Tile>1_11106</Tile>
-    <Tile>1_21106</Tile>
-    <Tile>1_11107</Tile>
-    <Tile>1_21107</Tile>
-    <Tile>1_11108</Tile>
-    <Tile>1_21108</Tile>
-    <Tile>1_11109</Tile>
-    <Tile>1_21109</Tile>
-    <Tile>1_11110</Tile>
-    <Tile>1_21110</Tile>
-    <Tile>1_11111</Tile>
-    <Tile>1_21111</Tile>
-    <Tile>1_11112</Tile>
-    <Tile>1_21112</Tile>
-    <Tile>1_12101</Tile>
-    <Tile>1_22101</Tile>
-    <Tile>1_12102</Tile>
-    <Tile>1_22102</Tile>
-    <Tile>1_12103</Tile>
-    <Tile>1_22103</Tile>
-    <Tile>1_12104</Tile>
-    <Tile>1_22104</Tile>
-    <Tile>1_12105</Tile>
-    <Tile>1_22105</Tile>
-    <Tile>1_12106</Tile>
-    <Tile>1_22106</Tile>
-    <Tile>1_12107</Tile>
-    <Tile>1_22107</Tile>
-    <Tile>1_12108</Tile>
-    <Tile>1_22108</Tile>
-    <Tile>1_12109</Tile>
-    <Tile>1_22109</Tile>
-    <Tile>1_12110</Tile>
-    <Tile>1_22110</Tile>
-    <Tile>1_12111</Tile>
-    <Tile>1_22111</Tile>
-    <Tile>1_12112</Tile>
-    <Tile>1_22112</Tile>
-    <Tile>1_13101</Tile>
-    <Tile>1_23101</Tile>
-    <Tile>1_13102</Tile>
-    <Tile>1_23102</Tile>
-    <Tile>1_13103</Tile>
-    <Tile>1_23103</Tile>
-    <Tile>1_13104</Tile>
-    <Tile>1_23104</Tile>
-    <Tile>1_13105</Tile>
-    <Tile>1_23105</Tile>
-    <Tile>1_13106</Tile>
-    <Tile>1_23106</Tile>
-    <Tile>1_13107</Tile>
-    <Tile>1_23107</Tile>
-    <Tile>1_13108</Tile>
-    <Tile>1_23108</Tile>
-    <Tile>1_13109</Tile>
-    <Tile>1_23109</Tile>
-    <Tile>1_13110</Tile>
-    <Tile>1_23110</Tile>
-    <Tile>1_13111</Tile>
-    <Tile>1_23111</Tile>
-    <Tile>1_13112</Tile>
-    <Tile>1_23112</Tile>
-    <Tile>2_11101</Tile>
-    <Tile>2_21101</Tile>
-    <Tile>2_11102</Tile>
-    <Tile>2_21102</Tile>
-    <Tile>2_11103</Tile>
-    <Tile>2_21103</Tile>
-    <Tile>2_11104</Tile>
-    <Tile>2_21104</Tile>
-    <Tile>2_11105</Tile>
-    <Tile>2_21105</Tile>
-    <Tile>2_11106</Tile>
-    <Tile>2_21106</Tile>
-    <Tile>2_11107</Tile>
-    <Tile>2_21107</Tile>
-    <Tile>2_11108</Tile>
-    <Tile>2_21108</Tile>
-    <Tile>2_11109</Tile>
-    <Tile>2_21109</Tile>
-    <Tile>2_11110</Tile>
-    <Tile>2_21110</Tile>
-    <Tile>2_11111</Tile>
-    <Tile>2_21111</Tile>
-    <Tile>2_11112</Tile>
-    <Tile>2_21112</Tile>
-    <Tile>2_12101</Tile>
-    <Tile>2_22101</Tile>
-    <Tile>2_12102</Tile>
-    <Tile>2_22102</Tile>
-    <Tile>2_12103</Tile>
-    <Tile>2_22103</Tile>
-    <Tile>2_12104</Tile>
-    <Tile>2_22104</Tile>
-    <Tile>2_12105</Tile>
-    <Tile>2_22105</Tile>
-    <Tile>2_12106</Tile>
-    <Tile>2_22106</Tile>
-    <Tile>2_12107</Tile>
-    <Tile>2_22107</Tile>
-    <Tile>2_12108</Tile>
-    <Tile>2_22108</Tile>
-    <Tile>2_12109</Tile>
-    <Tile>2_22109</Tile>
-    <Tile>2_12110</Tile>
-    <Tile>2_22110</Tile>
-    <Tile>2_12111</Tile>
-    <Tile>2_22111</Tile>
-    <Tile>2_12112</Tile>
-    <Tile>2_22112</Tile>
-    <Tile>2_13101</Tile>
-    <Tile>2_23101</Tile>
-    <Tile>2_13102</Tile>
-    <Tile>2_23102</Tile>
-    <Tile>2_13103</Tile>
-    <Tile>2_23103</Tile>
-    <Tile>2_13104</Tile>
-    <Tile>2_23104</Tile>
-    <Tile>2_13105</Tile>
-    <Tile>2_23105</Tile>
-    <Tile>2_13106</Tile>
-    <Tile>2_23106</Tile>
-    <Tile>2_13107</Tile>
-    <Tile>2_23107</Tile>
-    <Tile>2_13108</Tile>
-    <Tile>2_23108</Tile>
-    <Tile>2_13109</Tile>
-    <Tile>2_23109</Tile>
-    <Tile>2_13110</Tile>
-    <Tile>2_23110</Tile>
-    <Tile>2_13111</Tile>
-    <Tile>2_23111</Tile>
-    <Tile>2_13112</Tile>
-    <Tile>2_23112</Tile>
-    <Tile>1_11201</Tile>
-    <Tile>1_21201</Tile>
-    <Tile>1_11202</Tile>
-    <Tile>1_21202</Tile>
-    <Tile>1_11203</Tile>
-    <Tile>1_21203</Tile>
-    <Tile>1_11204</Tile>
-    <Tile>1_21204</Tile>
-    <Tile>1_11205</Tile>
-    <Tile>1_21205</Tile>
-    <Tile>1_11206</Tile>
-    <Tile>1_21206</Tile>
-    <Tile>1_11207</Tile>
-    <Tile>1_21207</Tile>
-    <Tile>1_11208</Tile>
-    <Tile>1_21208</Tile>
-    <Tile>1_11209</Tile>
-    <Tile>1_21209</Tile>
-    <Tile>1_11210</Tile>
-    <Tile>1_21210</Tile>
-    <Tile>1_11211</Tile>
-    <Tile>1_21211</Tile>
-    <Tile>1_11212</Tile>
-    <Tile>1_21212</Tile>
-    <Tile>1_12201</Tile>
-    <Tile>1_22201</Tile>
-    <Tile>1_12202</Tile>
-    <Tile>1_22202</Tile>
-    <Tile>1_12203</Tile>
-    <Tile>1_22203</Tile>
-    <Tile>1_12204</Tile>
-    <Tile>1_22204</Tile>
-    <Tile>1_12205</Tile>
-    <Tile>1_22205</Tile>
-    <Tile>1_12206</Tile>
-    <Tile>1_22206</Tile>
-    <Tile>1_12207</Tile>
-    <Tile>1_22207</Tile>
-    <Tile>1_12208</Tile>
-    <Tile>1_22208</Tile>
-    <Tile>1_12209</Tile>
-    <Tile>1_22209</Tile>
-    <Tile>1_12210</Tile>
-    <Tile>1_22210</Tile>
-    <Tile>1_12211</Tile>
-    <Tile>1_22211</Tile>
-    <Tile>1_12212</Tile>
-    <Tile>1_22212</Tile>
-    <Tile>1_13201</Tile>
-    <Tile>1_23201</Tile>
-    <Tile>1_13202</Tile>
-    <Tile>1_23202</Tile>
-    <Tile>1_13203</Tile>
-    <Tile>1_23203</Tile>
-    <Tile>1_13204</Tile>
-    <Tile>1_23204</Tile>
-    <Tile>1_13205</Tile>
-    <Tile>1_23205</Tile>
-    <Tile>1_13206</Tile>
-    <Tile>1_23206</Tile>
-    <Tile>1_13207</Tile>
-    <Tile>1_23207</Tile>
-    <Tile>1_13208</Tile>
-    <Tile>1_23208</Tile>
-    <Tile>1_13209</Tile>
-    <Tile>1_23209</Tile>
-    <Tile>1_13210</Tile>
-    <Tile>1_23210</Tile>
-    <Tile>1_13211</Tile>
-    <Tile>1_23211</Tile>
-    <Tile>1_13212</Tile>
-    <Tile>1_23212</Tile>
-    <Tile>2_11201</Tile>
-    <Tile>2_21201</Tile>
-    <Tile>2_11202</Tile>
-    <Tile>2_21202</Tile>
-    <Tile>2_11203</Tile>
-    <Tile>2_21203</Tile>
-    <Tile>2_11204</Tile>
-    <Tile>2_21204</Tile>
-    <Tile>2_11205</Tile>
-    <Tile>2_21205</Tile>
-    <Tile>2_11206</Tile>
-    <Tile>2_21206</Tile>
-    <Tile>2_11207</Tile>
-    <Tile>2_21207</Tile>
-    <Tile>2_11208</Tile>
-    <Tile>2_21208</Tile>
-    <Tile>2_11209</Tile>
-    <Tile>2_21209</Tile>
-    <Tile>2_11210</Tile>
-    <Tile>2_21210</Tile>
-    <Tile>2_11211</Tile>
-    <Tile>2_21211</Tile>
-    <Tile>2_11212</Tile>
-    <Tile>2_21212</Tile>
-    <Tile>2_12201</Tile>
-    <Tile>2_22201</Tile>
-    <Tile>2_12202</Tile>
-    <Tile>2_22202</Tile>
-    <Tile>2_12203</Tile>
-    <Tile>2_22203</Tile>
-    <Tile>2_12204</Tile>
-    <Tile>2_22204</Tile>
-    <Tile>2_12205</Tile>
-    <Tile>2_22205</Tile>
-    <Tile>2_12206</Tile>
-    <Tile>2_22206</Tile>
-    <Tile>2_12207</Tile>
-    <Tile>2_22207</Tile>
-    <Tile>2_12208</Tile>
-    <Tile>2_22208</Tile>
-    <Tile>2_12209</Tile>
-    <Tile>2_22209</Tile>
-    <Tile>2_12210</Tile>
-    <Tile>2_22210</Tile>
-    <Tile>2_12211</Tile>
-    <Tile>2_22211</Tile>
-    <Tile>2_12212</Tile>
-    <Tile>2_22212</Tile>
-    <Tile>2_13201</Tile>
-    <Tile>2_23201</Tile>
-    <Tile>2_13202</Tile>
-    <Tile>2_23202</Tile>
-    <Tile>2_13203</Tile>
-    <Tile>2_23203</Tile>
-    <Tile>2_13204</Tile>
-    <Tile>2_23204</Tile>
-    <Tile>2_13205</Tile>
-    <Tile>2_23205</Tile>
-    <Tile>2_13206</Tile>
-    <Tile>2_23206</Tile>
-    <Tile>2_13207</Tile>
-    <Tile>2_23207</Tile>
-    <Tile>2_13208</Tile>
-    <Tile>2_23208</Tile>
-    <Tile>2_13209</Tile>
-    <Tile>2_23209</Tile>
-    <Tile>2_13210</Tile>
-    <Tile>2_23210</Tile>
-    <Tile>2_13211</Tile>
-    <Tile>2_23211</Tile>
-    <Tile>2_13212</Tile>
-    <Tile>2_23212</Tile>
-    <Tile>1_11301</Tile>
-    <Tile>1_21301</Tile>
-    <Tile>1_11302</Tile>
-    <Tile>1_21302</Tile>
-    <Tile>1_11303</Tile>
-    <Tile>1_21303</Tile>
-    <Tile>1_11304</Tile>
-    <Tile>1_21304</Tile>
-    <Tile>1_11305</Tile>
-    <Tile>1_21305</Tile>
-    <Tile>1_11306</Tile>
-    <Tile>1_21306</Tile>
-    <Tile>1_11307</Tile>
-    <Tile>1_21307</Tile>
-    <Tile>1_11308</Tile>
-    <Tile>1_21308</Tile>
-    <Tile>1_11309</Tile>
-    <Tile>1_21309</Tile>
-    <Tile>1_11310</Tile>
-    <Tile>1_21310</Tile>
-    <Tile>1_11311</Tile>
-    <Tile>1_21311</Tile>
-    <Tile>1_11312</Tile>
-    <Tile>1_21312</Tile>
-    <Tile>1_12301</Tile>
-    <Tile>1_22301</Tile>
-    <Tile>1_12302</Tile>
-    <Tile>1_22302</Tile>
-    <Tile>1_12303</Tile>
-    <Tile>1_22303</Tile>
-    <Tile>1_12304</Tile>
-    <Tile>1_22304</Tile>
-    <Tile>1_12305</Tile>
-    <Tile>1_22305</Tile>
-    <Tile>1_12306</Tile>
-    <Tile>1_22306</Tile>
-    <Tile>1_12307</Tile>
-    <Tile>1_22307</Tile>
-    <Tile>1_12308</Tile>
-    <Tile>1_22308</Tile>
-    <Tile>1_12309</Tile>
-    <Tile>1_22309</Tile>
-    <Tile>1_12310</Tile>
-    <Tile>1_22310</Tile>
-    <Tile>1_12311</Tile>
-    <Tile>1_22311</Tile>
-    <Tile>1_12312</Tile>
-    <Tile>1_22312</Tile>
-    <Tile>1_13301</Tile>
-    <Tile>1_23301</Tile>
-    <Tile>1_13302</Tile>
-    <Tile>1_23302</Tile>
-    <Tile>1_13303</Tile>
-    <Tile>1_23303</Tile>
-    <Tile>1_13304</Tile>
-    <Tile>1_23304</Tile>
-    <Tile>1_13305</Tile>
-    <Tile>1_23305</Tile>
-    <Tile>1_13306</Tile>
-    <Tile>1_23306</Tile>
-    <Tile>1_13307</Tile>
-    <Tile>1_23307</Tile>
-    <Tile>1_13308</Tile>
-    <Tile>1_23308</Tile>
-    <Tile>1_13309</Tile>
-    <Tile>1_23309</Tile>
-    <Tile>1_13310</Tile>
-    <Tile>1_23310</Tile>
-    <Tile>1_13311</Tile>
-    <Tile>1_23311</Tile>
-    <Tile>1_13312</Tile>
-    <Tile>1_23312</Tile>
-    <Tile>2_11301</Tile>
-    <Tile>2_21301</Tile>
-    <Tile>2_11302</Tile>
-    <Tile>2_21302</Tile>
-    <Tile>2_11303</Tile>
-    <Tile>2_21303</Tile>
-    <Tile>2_11304</Tile>
-    <Tile>2_21304</Tile>
-    <Tile>2_11305</Tile>
-    <Tile>2_21305</Tile>
-    <Tile>2_11306</Tile>
-    <Tile>2_21306</Tile>
-    <Tile>2_11307</Tile>
-    <Tile>2_21307</Tile>
-    <Tile>2_11308</Tile>
-    <Tile>2_21308</Tile>
-    <Tile>2_11309</Tile>
-    <Tile>2_21309</Tile>
-    <Tile>2_11310</Tile>
-    <Tile>2_21310</Tile>
-    <Tile>2_11311</Tile>
-    <Tile>2_21311</Tile>
-    <Tile>2_11312</Tile>
-    <Tile>2_21312</Tile>
-    <Tile>2_12301</Tile>
-    <Tile>2_22301</Tile>
-    <Tile>2_12302</Tile>
-    <Tile>2_22302</Tile>
-    <Tile>2_12303</Tile>
-    <Tile>2_22303</Tile>
-    <Tile>2_12304</Tile>
-    <Tile>2_22304</Tile>
-    <Tile>2_12305</Tile>
-    <Tile>2_22305</Tile>
-    <Tile>2_12306</Tile>
-    <Tile>2_22306</Tile>
-    <Tile>2_12307</Tile>
-    <Tile>2_22307</Tile>
-    <Tile>2_12308</Tile>
-    <Tile>2_22308</Tile>
-    <Tile>2_12309</Tile>
-    <Tile>2_22309</Tile>
-    <Tile>2_12310</Tile>
-    <Tile>2_22310</Tile>
-    <Tile>2_12311</Tile>
-    <Tile>2_22311</Tile>
-    <Tile>2_12312</Tile>
-    <Tile>2_22312</Tile>
-    <Tile>2_13301</Tile>
-    <Tile>2_23301</Tile>
-    <Tile>2_13302</Tile>
-    <Tile>2_23302</Tile>
-    <Tile>2_13303</Tile>
-    <Tile>2_23303</Tile>
-    <Tile>2_13304</Tile>
-    <Tile>2_23304</Tile>
-    <Tile>2_13305</Tile>
-    <Tile>2_23305</Tile>
-    <Tile>2_13306</Tile>
-    <Tile>2_23306</Tile>
-    <Tile>2_13307</Tile>
-    <Tile>2_23307</Tile>
-    <Tile>2_13308</Tile>
-    <Tile>2_23308</Tile>
-    <Tile>2_13309</Tile>
-    <Tile>2_23309</Tile>
-    <Tile>2_13310</Tile>
-    <Tile>2_23310</Tile>
-    <Tile>2_13311</Tile>
-    <Tile>2_23311</Tile>
-    <Tile>2_13312</Tile>
-    <Tile>2_23312</Tile>
-    <Tile>1_11401</Tile>
-    <Tile>1_21401</Tile>
-    <Tile>1_11402</Tile>
-    <Tile>1_21402</Tile>
-    <Tile>1_11403</Tile>
-    <Tile>1_21403</Tile>
-    <Tile>1_11404</Tile>
-    <Tile>1_21404</Tile>
-    <Tile>1_11405</Tile>
-    <Tile>1_21405</Tile>
-    <Tile>1_11406</Tile>
-    <Tile>1_21406</Tile>
-    <Tile>1_11407</Tile>
-    <Tile>1_21407</Tile>
-    <Tile>1_11408</Tile>
-    <Tile>1_21408</Tile>
-    <Tile>1_11409</Tile>
-    <Tile>1_21409</Tile>
-    <Tile>1_11410</Tile>
-    <Tile>1_21410</Tile>
-    <Tile>1_11411</Tile>
-    <Tile>1_21411</Tile>
-    <Tile>1_11412</Tile>
-    <Tile>1_21412</Tile>
-    <Tile>1_12401</Tile>
-    <Tile>1_22401</Tile>
-    <Tile>1_12402</Tile>
-    <Tile>1_22402</Tile>
-    <Tile>1_12403</Tile>
-    <Tile>1_22403</Tile>
-    <Tile>1_12404</Tile>
-    <Tile>1_22404</Tile>
-    <Tile>1_12405</Tile>
-    <Tile>1_22405</Tile>
-    <Tile>1_12406</Tile>
-    <Tile>1_22406</Tile>
-    <Tile>1_12407</Tile>
-    <Tile>1_22407</Tile>
-    <Tile>1_12408</Tile>
-    <Tile>1_22408</Tile>
-    <Tile>1_12409</Tile>
-    <Tile>1_22409</Tile>
-    <Tile>1_12410</Tile>
-    <Tile>1_22410</Tile>
-    <Tile>1_12411</Tile>
-    <Tile>1_22411</Tile>
-    <Tile>1_12412</Tile>
-    <Tile>1_22412</Tile>
-    <Tile>1_13401</Tile>
-    <Tile>1_23401</Tile>
-    <Tile>1_13402</Tile>
-    <Tile>1_23402</Tile>
-    <Tile>1_13403</Tile>
-    <Tile>1_23403</Tile>
-    <Tile>1_13404</Tile>
-    <Tile>1_23404</Tile>
-    <Tile>1_13405</Tile>
-    <Tile>1_23405</Tile>
-    <Tile>1_13406</Tile>
-    <Tile>1_23406</Tile>
-    <Tile>1_13407</Tile>
-    <Tile>1_23407</Tile>
-    <Tile>1_13408</Tile>
-    <Tile>1_23408</Tile>
-    <Tile>1_13409</Tile>
-    <Tile>1_23409</Tile>
-    <Tile>1_13410</Tile>
-    <Tile>1_23410</Tile>
-    <Tile>1_13411</Tile>
-    <Tile>1_23411</Tile>
-    <Tile>1_13412</Tile>
-    <Tile>1_23412</Tile>
-    <Tile>2_11401</Tile>
-    <Tile>2_21401</Tile>
-    <Tile>2_11402</Tile>
-    <Tile>2_21402</Tile>
-    <Tile>2_11403</Tile>
-    <Tile>2_21403</Tile>
-    <Tile>2_11404</Tile>
-    <Tile>2_21404</Tile>
-    <Tile>2_11405</Tile>
-    <Tile>2_21405</Tile>
-    <Tile>2_11406</Tile>
-    <Tile>2_21406</Tile>
-    <Tile>2_11407</Tile>
-    <Tile>2_21407</Tile>
-    <Tile>2_11408</Tile>
-    <Tile>2_21408</Tile>
-    <Tile>2_11409</Tile>
-    <Tile>2_21409</Tile>
-    <Tile>2_11410</Tile>
-    <Tile>2_21410</Tile>
-    <Tile>2_11411</Tile>
-    <Tile>2_21411</Tile>
-    <Tile>2_11412</Tile>
-    <Tile>2_21412</Tile>
-    <Tile>2_12401</Tile>
-    <Tile>2_22401</Tile>
-    <Tile>2_12402</Tile>
-    <Tile>2_22402</Tile>
-    <Tile>2_12403</Tile>
-    <Tile>2_22403</Tile>
-    <Tile>2_12404</Tile>
-    <Tile>2_22404</Tile>
-    <Tile>2_12405</Tile>
-    <Tile>2_22405</Tile>
-    <Tile>2_12406</Tile>
-    <Tile>2_22406</Tile>
-    <Tile>2_12407</Tile>
-    <Tile>2_22407</Tile>
-    <Tile>2_12408</Tile>
-    <Tile>2_22408</Tile>
-    <Tile>2_12409</Tile>
-    <Tile>2_22409</Tile>
-    <Tile>2_12410</Tile>
-    <Tile>2_22410</Tile>
-    <Tile>2_12411</Tile>
-    <Tile>2_22411</Tile>
-    <Tile>2_12412</Tile>
-    <Tile>2_22412</Tile>
-    <Tile>2_13401</Tile>
-    <Tile>2_23401</Tile>
-    <Tile>2_13402</Tile>
-    <Tile>2_23402</Tile>
-    <Tile>2_13403</Tile>
-    <Tile>2_23403</Tile>
-    <Tile>2_13404</Tile>
-    <Tile>2_23404</Tile>
-    <Tile>2_13405</Tile>
-    <Tile>2_23405</Tile>
-    <Tile>2_13406</Tile>
-    <Tile>2_23406</Tile>
-    <Tile>2_13407</Tile>
-    <Tile>2_23407</Tile>
-    <Tile>2_13408</Tile>
-    <Tile>2_23408</Tile>
-    <Tile>2_13409</Tile>
-    <Tile>2_23409</Tile>
-    <Tile>2_13410</Tile>
-    <Tile>2_23410</Tile>
-    <Tile>2_13411</Tile>
-    <Tile>2_23411</Tile>
-    <Tile>2_13412</Tile>
-    <Tile>2_23412</Tile>
-    <Tile>1_11501</Tile>
-    <Tile>1_21501</Tile>
-    <Tile>1_11502</Tile>
-    <Tile>1_21502</Tile>
-    <Tile>1_11503</Tile>
-    <Tile>1_21503</Tile>
-    <Tile>1_11504</Tile>
-    <Tile>1_21504</Tile>
-    <Tile>1_11505</Tile>
-    <Tile>1_21505</Tile>
-    <Tile>1_11506</Tile>
-    <Tile>1_21506</Tile>
-    <Tile>1_11507</Tile>
-    <Tile>1_21507</Tile>
-    <Tile>1_11508</Tile>
-    <Tile>1_21508</Tile>
-    <Tile>1_11509</Tile>
-    <Tile>1_21509</Tile>
-    <Tile>1_11510</Tile>
-    <Tile>1_21510</Tile>
-    <Tile>1_11511</Tile>
-    <Tile>1_21511</Tile>
-    <Tile>1_11512</Tile>
-    <Tile>1_21512</Tile>
-    <Tile>1_12501</Tile>
-    <Tile>1_22501</Tile>
-    <Tile>1_12502</Tile>
-    <Tile>1_22502</Tile>
-    <Tile>1_12503</Tile>
-    <Tile>1_22503</Tile>
-    <Tile>1_12504</Tile>
-    <Tile>1_22504</Tile>
-    <Tile>1_12505</Tile>
-    <Tile>1_22505</Tile>
-    <Tile>1_12506</Tile>
-    <Tile>1_22506</Tile>
-    <Tile>1_12507</Tile>
-    <Tile>1_22507</Tile>
-    <Tile>1_12508</Tile>
-    <Tile>1_22508</Tile>
-    <Tile>1_12509</Tile>
-    <Tile>1_22509</Tile>
-    <Tile>1_12510</Tile>
-    <Tile>1_22510</Tile>
-    <Tile>1_12511</Tile>
-    <Tile>1_22511</Tile>
-    <Tile>1_12512</Tile>
-    <Tile>1_22512</Tile>
-    <Tile>1_13501</Tile>
-    <Tile>1_23501</Tile>
-    <Tile>1_13502</Tile>
-    <Tile>1_23502</Tile>
-    <Tile>1_13503</Tile>
-    <Tile>1_23503</Tile>
-    <Tile>1_13504</Tile>
-    <Tile>1_23504</Tile>
-    <Tile>1_13505</Tile>
-    <Tile>1_23505</Tile>
-    <Tile>1_13506</Tile>
-    <Tile>1_23506</Tile>
-    <Tile>1_13507</Tile>
-    <Tile>1_23507</Tile>
-    <Tile>1_13508</Tile>
-    <Tile>1_23508</Tile>
-    <Tile>1_13509</Tile>
-    <Tile>1_23509</Tile>
-    <Tile>1_13510</Tile>
-    <Tile>1_23510</Tile>
-    <Tile>1_13511</Tile>
-    <Tile>1_23511</Tile>
-    <Tile>1_13512</Tile>
-    <Tile>1_23512</Tile>
-    <Tile>2_11501</Tile>
-    <Tile>2_21501</Tile>
-    <Tile>2_11502</Tile>
-    <Tile>2_21502</Tile>
-    <Tile>2_11503</Tile>
-    <Tile>2_21503</Tile>
-    <Tile>2_11504</Tile>
-    <Tile>2_21504</Tile>
-    <Tile>2_11505</Tile>
-    <Tile>2_21505</Tile>
-    <Tile>2_11506</Tile>
-    <Tile>2_21506</Tile>
-    <Tile>2_11507</Tile>
-    <Tile>2_21507</Tile>
-    <Tile>2_11508</Tile>
-    <Tile>2_21508</Tile>
-    <Tile>2_11509</Tile>
-    <Tile>2_21509</Tile>
-    <Tile>2_11510</Tile>
-    <Tile>2_21510</Tile>
-    <Tile>2_11511</Tile>
-    <Tile>2_21511</Tile>
-    <Tile>2_11512</Tile>
-    <Tile>2_21512</Tile>
-    <Tile>2_12501</Tile>
-    <Tile>2_22501</Tile>
-    <Tile>2_12502</Tile>
-    <Tile>2_22502</Tile>
-    <Tile>2_12503</Tile>
-    <Tile>2_22503</Tile>
-    <Tile>2_12504</Tile>
-    <Tile>2_22504</Tile>
-    <Tile>2_12505</Tile>
-    <Tile>2_22505</Tile>
-    <Tile>2_12506</Tile>
-    <Tile>2_22506</Tile>
-    <Tile>2_12507</Tile>
-    <Tile>2_22507</Tile>
-    <Tile>2_12508</Tile>
-    <Tile>2_22508</Tile>
-    <Tile>2_12509</Tile>
-    <Tile>2_22509</Tile>
-    <Tile>2_12510</Tile>
-    <Tile>2_22510</Tile>
-    <Tile>2_12511</Tile>
-    <Tile>2_22511</Tile>
-    <Tile>2_12512</Tile>
-    <Tile>2_22512</Tile>
-    <Tile>2_13501</Tile>
-    <Tile>2_23501</Tile>
-    <Tile>2_13502</Tile>
-    <Tile>2_23502</Tile>
-    <Tile>2_13503</Tile>
-    <Tile>2_23503</Tile>
-    <Tile>2_13504</Tile>
-    <Tile>2_23504</Tile>
-    <Tile>2_13505</Tile>
-    <Tile>2_23505</Tile>
-    <Tile>2_13506</Tile>
-    <Tile>2_23506</Tile>
-    <Tile>2_13507</Tile>
-    <Tile>2_23507</Tile>
-    <Tile>2_13508</Tile>
-    <Tile>2_23508</Tile>
-    <Tile>2_13509</Tile>
-    <Tile>2_23509</Tile>
-    <Tile>2_13510</Tile>
-    <Tile>2_23510</Tile>
-    <Tile>2_13511</Tile>
-    <Tile>2_23511</Tile>
-    <Tile>2_13512</Tile>
-    <Tile>2_23512</Tile>
-    <Tile>1_11601</Tile>
-    <Tile>1_21601</Tile>
-    <Tile>1_11602</Tile>
-    <Tile>1_21602</Tile>
-    <Tile>1_11603</Tile>
-    <Tile>1_21603</Tile>
-    <Tile>1_11604</Tile>
-    <Tile>1_21604</Tile>
-    <Tile>1_11605</Tile>
-    <Tile>1_21605</Tile>
-    <Tile>1_11606</Tile>
-    <Tile>1_21606</Tile>
-    <Tile>1_11607</Tile>
-    <Tile>1_21607</Tile>
-    <Tile>1_11608</Tile>
-    <Tile>1_21608</Tile>
-    <Tile>1_11609</Tile>
-    <Tile>1_21609</Tile>
-    <Tile>1_11610</Tile>
-    <Tile>1_21610</Tile>
-    <Tile>1_11611</Tile>
-    <Tile>1_21611</Tile>
-    <Tile>1_11612</Tile>
-    <Tile>1_21612</Tile>
-    <Tile>1_12601</Tile>
-    <Tile>1_22601</Tile>
-    <Tile>1_12602</Tile>
-    <Tile>1_22602</Tile>
-    <Tile>1_12603</Tile>
-    <Tile>1_22603</Tile>
-    <Tile>1_12604</Tile>
-    <Tile>1_22604</Tile>
-    <Tile>1_12605</Tile>
-    <Tile>1_22605</Tile>
-    <Tile>1_12606</Tile>
-    <Tile>1_22606</Tile>
-    <Tile>1_12607</Tile>
-    <Tile>1_22607</Tile>
-    <Tile>1_12608</Tile>
-    <Tile>1_22608</Tile>
-    <Tile>1_12609</Tile>
-    <Tile>1_22609</Tile>
-    <Tile>1_12610</Tile>
-    <Tile>1_22610</Tile>
-    <Tile>1_12611</Tile>
-    <Tile>1_22611</Tile>
-    <Tile>1_12612</Tile>
-    <Tile>1_22612</Tile>
-    <Tile>1_13601</Tile>
-    <Tile>1_23601</Tile>
-    <Tile>1_13602</Tile>
-    <Tile>1_23602</Tile>
-    <Tile>1_13603</Tile>
-    <Tile>1_23603</Tile>
-    <Tile>1_13604</Tile>
-    <Tile>1_23604</Tile>
-    <Tile>1_13605</Tile>
-    <Tile>1_23605</Tile>
-    <Tile>1_13606</Tile>
-    <Tile>1_23606</Tile>
-    <Tile>1_13607</Tile>
-    <Tile>1_23607</Tile>
-    <Tile>1_13608</Tile>
-    <Tile>1_23608</Tile>
-    <Tile>1_13609</Tile>
-    <Tile>1_23609</Tile>
-    <Tile>1_13610</Tile>
-    <Tile>1_23610</Tile>
-    <Tile>1_13611</Tile>
-    <Tile>1_23611</Tile>
-    <Tile>1_13612</Tile>
-    <Tile>1_23612</Tile>
-    <Tile>2_11601</Tile>
-    <Tile>2_21601</Tile>
-    <Tile>2_11602</Tile>
-    <Tile>2_21602</Tile>
-    <Tile>2_11603</Tile>
-    <Tile>2_21603</Tile>
-    <Tile>2_11604</Tile>
-    <Tile>2_21604</Tile>
-    <Tile>2_11605</Tile>
-    <Tile>2_21605</Tile>
-    <Tile>2_11606</Tile>
-    <Tile>2_21606</Tile>
-    <Tile>2_11607</Tile>
-    <Tile>2_21607</Tile>
-    <Tile>2_11608</Tile>
-    <Tile>2_21608</Tile>
-    <Tile>2_11609</Tile>
-    <Tile>2_21609</Tile>
-    <Tile>2_11610</Tile>
-    <Tile>2_21610</Tile>
-    <Tile>2_11611</Tile>
-    <Tile>2_21611</Tile>
-    <Tile>2_11612</Tile>
-    <Tile>2_21612</Tile>
-    <Tile>2_12601</Tile>
-    <Tile>2_22601</Tile>
-    <Tile>2_12602</Tile>
-    <Tile>2_22602</Tile>
-    <Tile>2_12603</Tile>
-    <Tile>2_22603</Tile>
-    <Tile>2_12604</Tile>
-    <Tile>2_22604</Tile>
-    <Tile>2_12605</Tile>
-    <Tile>2_22605</Tile>
-    <Tile>2_12606</Tile>
-    <Tile>2_22606</Tile>
-    <Tile>2_12607</Tile>
-    <Tile>2_22607</Tile>
-    <Tile>2_12608</Tile>
-    <Tile>2_22608</Tile>
-    <Tile>2_12609</Tile>
-    <Tile>2_22609</Tile>
-    <Tile>2_12610</Tile>
-    <Tile>2_22610</Tile>
-    <Tile>2_12611</Tile>
-    <Tile>2_22611</Tile>
-    <Tile>2_12612</Tile>
-    <Tile>2_22612</Tile>
-    <Tile>2_13601</Tile>
-    <Tile>2_23601</Tile>
-    <Tile>2_13602</Tile>
-    <Tile>2_23602</Tile>
-    <Tile>2_13603</Tile>
-    <Tile>2_23603</Tile>
-    <Tile>2_13604</Tile>
-    <Tile>2_23604</Tile>
-    <Tile>2_13605</Tile>
-    <Tile>2_23605</Tile>
-    <Tile>2_13606</Tile>
-    <Tile>2_23606</Tile>
-    <Tile>2_13607</Tile>
-    <Tile>2_23607</Tile>
-    <Tile>2_13608</Tile>
-    <Tile>2_23608</Tile>
-    <Tile>2_13609</Tile>
-    <Tile>2_23609</Tile>
-    <Tile>2_13610</Tile>
-    <Tile>2_23610</Tile>
-    <Tile>2_13611</Tile>
-    <Tile>2_23611</Tile>
-    <Tile>2_13612</Tile>
-    <Tile>2_23612</Tile>
-  </SelectedTiles>
-  <RunFolder>D:\Illumina\NextSeq Control Software Temp\141212_NS500318_0033_AH16YMBGXX\</RunFolder>
-  <OutputFolder>Y:\r2d2\141212_NS500318_0033_AH16YMBGXX\</OutputFolder>
-  <RecipeFolder>C:\Illumina\NextSeq Control Software\Recipe\High\v1.1</RecipeFolder>
-  <SimulationFolder />
-  <RunStartDate>141212</RunStartDate>
-  <FocusMethod>IXFocus</FocusMethod>
-  <SurfaceToScan>Both</SurfaceToScan>
-  <SaveFocusImages>false</SaveFocusImages>
-  <SaveScanImages>false</SaveScanImages>
-  <SelectiveSave>true</SelectiveSave>
-  <IsPairedEnd>false</IsPairedEnd>
-  <AnalysisWorkflowType />
-  <CustomReadOnePrimer>BP10</CustomReadOnePrimer>
-  <CustomReadTwoPrimer>BP11</CustomReadTwoPrimer>
-  <CustomIndexPrimer>BP12</CustomIndexPrimer>
-  <CustomIndexTwoPrimer>EXT</CustomIndexTwoPrimer>
-  <UsesCustomReadOnePrimer>false</UsesCustomReadOnePrimer>
-  <UsesCustomReadTwoPrimer>false</UsesCustomReadTwoPrimer>
-  <UsesCustomIndexPrimer>false</UsesCustomIndexPrimer>
-  <UsesCustomIndexTwoPrimer>false</UsesCustomIndexTwoPrimer>
-  <RunManagementType>Standalone</RunManagementType>
-  <BaseSpaceRunId>9643683</BaseSpaceRunId>
-  <BaseSpaceRunMode>IlluminaHealthOnly</BaseSpaceRunMode>
-  <ComputerName>BS-DSFCONTROL05</ComputerName>
-  <SequencingStarted>true</SequencingStarted>
-  <PlannedRead1Cycles>76</PlannedRead1Cycles>
-  <PlannedRead2Cycles>0</PlannedRead2Cycles>
-  <PlannedIndex1ReadCycles>8</PlannedIndex1ReadCycles>
-  <PlannedIndex2ReadCycles>8</PlannedIndex2ReadCycles>
-  <IsRehyb>false</IsRehyb>
-  <MaxCyclesSupportedByReagentKit>92</MaxCyclesSupportedByReagentKit>
-</RunParameters>
\ No newline at end of file
diff --git a/deep_sequencing_unit/resource/test-data/QGFReadRtaTimestampTest/141204_D00535_0035_BC5LPVANXX/RTAComplete.txt b/deep_sequencing_unit/resource/test-data/QGFReadRtaTimestampTest/141204_D00535_0035_BC5LPVANXX/RTAComplete.txt
deleted file mode 100644
index 3a3b0960199..00000000000
--- a/deep_sequencing_unit/resource/test-data/QGFReadRtaTimestampTest/141204_D00535_0035_BC5LPVANXX/RTAComplete.txt
+++ /dev/null
@@ -1 +0,0 @@
-12/5/2014,16:47:09.380,Illumina RTA 1.18.61
diff --git a/deep_sequencing_unit/resource/test-db/.gitignore b/deep_sequencing_unit/resource/test-db/.gitignore
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/deep_sequencing_unit/settings.gradle b/deep_sequencing_unit/settings.gradle
deleted file mode 100644
index 33440dae995..00000000000
--- a/deep_sequencing_unit/settings.gradle
+++ /dev/null
@@ -1 +0,0 @@
-includeFlat 'commonbase', 'common', 'openbis_api', 'openbis-common', 'authentication', 'dbmigration', 'openbis', 'datastore_server'
diff --git a/deep_sequencing_unit/source/BDS/analysis_bcl2fastq.bds b/deep_sequencing_unit/source/BDS/analysis_bcl2fastq.bds
deleted file mode 100755
index 7085666c1b9..00000000000
--- a/deep_sequencing_unit/source/BDS/analysis_bcl2fastq.bds
+++ /dev/null
@@ -1,770 +0,0 @@
-#!/usr/bin/env /links/application/dsu/.bds/bds
-
-/* The BDS automatic command line parsing allows the control on what to run
-* bds yoda_analysis.bds -reRun true -latestFolder /home/sbsuser/yoda/150304_M01761_0119_000000000-ADTAN
-*
-* For trying out what would run use the dryRun flag:
-* bds -c /links/application/dsu/.bds/bds.config -dryRun -s ssh yoda_analysis.bds -reRun \
-* -latestFolder /home/sbsuser/yoda/150304_M01761_0119_000000000-ADTAN \
-* -runReadRTATimestamp -runSampleSheetCreation -runTriggerBcl2fastq -runDemultiplexStats  -runRsyncOnDemux
-* -runRsyncFlowcell -runCreateFastqc -runBarcodeDistribution -runRsyncDemux
-*/
-
-bool reRun
-bool runReadRTATimestamp
-bool runSampleSheetCreation
-bool runTriggerBcl2fastq
-bool runDemultiplexStats
-bool runRsyncFlowcell
-bool runCreateFastqc
-bool runAggregateFastqc
-bool runBarcodeDistribution
-bool runRsyncDemultiplexedFiles
-bool runRsyncLaneStatictics
-bool runBowtie
-bool runReadJSON
-bool runChecksums
-bool debugRun
-string sequencer
-string latestFolder
-string [] laneList
-int mismatches
-
-runBase := "/links/shared/dsu/runs/$sequencer"
-
-if (latestFolder.isEmpty()) {
-    latestFolder = getLatestFolder(runBase)
-}
-
-analysisStarted := "$latestFolder" + "/Analysis.started"
-analysisFinished := "$latestFolder" + "/Analysis.finished"
-runCompleted := "$latestFolder" + "/RTAComplete.txt"
-
-dss := "/links/shared/dsu/dss"
-
-# Drop boxes paths
-rtaIncoming := "$dss/v2_read-rta-timestamp"
-flowCellData := "$dss/v2_register-flowcell"
-unalignedData := "$dss/v2_register-flowlane"
-# is set in the function depending on the run
-#demuxData := "$dss/v2_read-demultiplex-stats-miseq-hiseq"
-fastqcData := "$dss/v2_register-fastqc"
-fastqcAggregateData := "$dss/v2_register-fastqc-aggregate"
-barcodeDistData := "$dss/v2_register-undetermined"
-reportsData := "$dss/v2_register-demuliplex-stats"
-
-demultiplexedFolder := "demultiplexed"
-marker := ".MARKER_is_finished_"
-#marker := ".MARKER_"
-samplePrefix := "BSSE_QGF_"
-
-if (!latestFolder.exists()) {
-    print("Folder $latestFolder does not exist!\n")
-    exit 0
-}
-
-string fcName
-runFolderName := latestFolder.baseName()
-print("Runfolder: $runFolderName\n")
-
-splits := runFolderName.split("_")
-
-if (splits[3].startsWith("000")) {
-    fcName = splits[3]
-}
-else {
-    fcName = splits[3].substr(1)
-}
-
-print("Flowcell: $fcName\n")
-string model = get_model(splits[1])
-print("Model: $model\n")
-bool {} taskList
-
-# -----------------------------------------------------------------------------
-# Pre-Checks
-
-if (reRun) {
-    removeOutputFiles()
-    if (laneList.isEmpty()) {
-            taskList = {"runReadRTATimestamp" => true, \
-                    "runSampleSheetCreation" => true, \
-                    "runTriggerBcl2fastq" => true, \
-                    "runDemultiplexStats" => true, \
-                    "runRsyncDemultiplexedFiles" => true, \
-                    "runRsyncFlowcell" => true, \
-                    "runCreateFastqc" => true, \
-                    "runAggregateFastqc" => true, \
-                    "runBowtie" => true, \
-                    "runBarcodeDistribution" => true, \
-                    "runRsyncLaneStatictics" => true,\
-                    "runReadJSON" => true, \
-                    "runChecksums" => true, \
-                    "debugRun" => debugRun}
-    }
-    else {
-        taskList = {"runReadRTATimestamp" => false, \
-                    "runSampleSheetCreation" => true, \
-                    "runTriggerBcl2fastq" => true, \
-                    "runDemultiplexStats" => true, \
-                    "runRsyncDemultiplexedFiles" => true, \
-                    "runRsyncFlowcell" => true, \
-                    "runCreateFastqc" => true, \
-                    "runAggregateFastqc" => true, \
-                    "runBarcodeDistribution" => true, \
-                    "runBowtie" => false, \
-                    "runRsyncLaneStatictics" => true, \
-                    "runReadJSON" => true, \
-                    "runChecksums" => true, \
-                    "debugRun" => true}
-    }
-}
-else {
-    taskList = {"runReadRTATimestamp" => runReadRTATimestamp, \
-                "runSampleSheetCreation" => runSampleSheetCreation, \
-                "runTriggerBcl2fastq" => runTriggerBcl2fastq, \
-                "runDemultiplexStats" => runDemultiplexStats, \
-                "runRsyncDemultiplexedFiles" => runRsyncDemultiplexedFiles, \
-                "runRsyncFlowcell" => runRsyncFlowcell, \
-                "runCreateFastqc" => runCreateFastqc, \
-                "runAggregateFastqc" => runAggregateFastqc, \
-                "runBowtie" => runBowtie, \
-                "runBarcodeDistribution" => runBarcodeDistribution, \
-                "runRsyncLaneStatictics" => runRsyncLaneStatictics, \
-                "runReadJSON" => runReadJSON, \
-                "runChecksums" => runChecksums, \
-                "debugRun" => debugRun}
-}
-
-print("taskList\n$taskList\n")
-
-if (analysisStarted.canRead() && (!taskList{"debugRun"})) {
-    print("Analysis already started/done for flowcell $runFolderName\n")
-    exit 0
-}
-
-if ( runCompleted.canRead() ) {
-    print ("Run is complete, found: $runCompleted\n" )
-    analysisStarted.write("Started: " + getDate())
-    startAnalysis("$fcName", "$model")
-}
-
-# --------------------------------------------------------------------------
-# Helper functions
-
-string getLatestFolder (string runBase) {
-
-    string [] runFolderList
-
-    folderList := runBase.dir("*")
-    for (string folder : folderList) {
-        fullfolder := "$runBase/$folder"
-        Analysisstarted := "$fullfolder/" + "Analysis.started"
-        runComplete := "$fullfolder/" + "RTAComplete.txt"
-        if (fullfolder.isDir() && !Analysisstarted.exists() && runComplete.exists()) {
-            runFolderList.add(fullfolder)
-        }
-    }
-    print("Run Folders to consider: " + "$runFolderList\n")
-
-    string latestFolder = "does_not_exist"
-
-    if (runFolderList.size() > 0 ) {
-        runFolderList.sort()
-        reversedList := runFolderList.reverse()
-        latestFolder = reversedList.pop()
-    }
-
-    return latestFolder
-}
-
-void removeOutputFiles() {
-
-    print "Removing files...\n"
-
-    for (int i=1; i < 9; i++) {
-        oldDemuxFolder := "$latestFolder/$demultiplexedFolder" + "_" + "$i"
-        print("Removing $oldDemuxFolder\n")
-        string demuxTaskID task ( canFail := true, cpus := 1 ){
-            sys rm -rf "$oldDemuxFolder"
-        }
-        wait demuxTaskID
-    }
-
-    string markerTaskId task (canFail := true, cpus := 4 ){
-        sys rm -f "$analysisStarted"
-        sys rm -f "$analysisFinished"
-    }
-    wait markerTaskId
-    sleep(30)
-    sys rm -f "$analysisStarted"
-}
-
-string cleanString (string toClean) {
-    return toClean.replace("-", "_")
-}
-
-
-string [] getLaneNumbers (string searchFolder, string fileRegex) {
-    # try to figure out which lanes are present and returns the result as a string list
-
-    string [] listOfLanes
-    fileList := searchFolder.dir(fileRegex)
-    # print("$searchFolder\n")
-    # print("$fileRegex\n")
-
-    for (string aFile : fileList) {
-        string lane
-
-        splittedName := aFile.split("_")
-        # print("splittedName")
-        # print(splittedName)
-
-        # 'Regular case': Undetermined_S0_L003_R1_001.fastq.gz
-        if (splittedName[2].startsWith("L00") || splittedName[0].startsWith("BSSE")) {
-            splitSize := splittedName.size()
-            lane = splittedName[splitSize-3].substr(3,4)
-        }
-        # Assuming that Illumina leaves out the Lane
-        # information when there using the option "--no-lane-splitting"
-        # with bcl2fastq
-        else {
-            lane = "1"
-        }
-        if (!listOfLanes.has(lane) && !lane.isEmpty()) {
-            listOfLanes.add(lane)
-        }
-    }
-    return listOfLanes
-}
-
-int extractLaneNumberfromRunInfo () {
-
-    string laneCount = sys /bin/grep LaneCount "$latestFolder/RunInfo.xml" | /bin/awk '{ print $2 }' | /usr/bin/tr -dc '0-9'
-
-    laneCountInt := laneCount.parseInt()
-    if (model == "NEXTSEQ_500") {
-        laneCountInt = 1
-    }
-    return laneCountInt
-}
-
-
-string get_model(string machineId) {
-    """
-    Guesses the sequencer model from the run folder name
-
-    Current Naming schema for Illumina run folders, as far as I know,
-    no documentation found on this, Illumina introduced a field called
-    <InstrumentID> on the NextSeq runParameters.xml. That might be an
-    option for the future. Alternatively a combination of the fields
-    <ApplicationName> and <ApplicationVersion>.
-
-    MiSeq: 150130_M01761_0114_000000000-ACUR0
-    NextSeq: 150202_NS500318_0047_AH3KLMBGXX
-    HiSeq 2000: 130919_SN792_0281_BD2CHRACXX
-    HiSeq 2500: 150203_D00535_0052_AC66RWANXX
-    HiSeq 3000: 150724_J00121_0017_AH2VYMBBXX
-    HiSeq 4000: 150210_K00111_0013_AH2372BBXX
-    HiSeq X: 141121_ST-E00107_0356_AH00C3CCXX
-    """
-
-    if (machineId.startsWith("NS")) model = "NEXTSEQ_500"
-    else if (machineId.startsWith("M")) model = "MISEQ"
-    else if (machineId.startsWith("D")) model = "HISEQ_2500"
-    else if (machineId.startsWith("SN")) model = "HISEQ_2000"
-    else if (machineId.startsWith("J")) model = "HISEQ_3000"
-    else if (machineId.startsWith("K")) model = "HISEQ_4000"
-    else if (machineId.startsWith("ST")) model = "HISEQ_X"
-    else model = "UNIDENTIFIED"
-
-    return model
-}
-
-void rsyncRunFolder (string[] rsyncParameters, string source, string targetFolder, string markerFile) {
-    targetFolder.mkdir()
-    source.trim()
-    joinedParameters := rsyncParameters.join()
-    print("rsync $joinedParameters $source $targetFolder\n")
-
-    string taskId = task /usr/bin/rsync $joinedParameters $source $targetFolder
-    wait taskId
-    if (!markerFile.isEmpty()) {
-            task touch "$markerFile"
-    }
-}
-
-int[] buildLaneList(string [] laneList) {
-    """
-    Builds a list of lanes which need to be processed. Could be all lanes or a subset which is
-    given by a parameter.
-    """
-
-    int [] laneListInt
-    if (laneList.isEmpty()) {
-        int [] laneList
-        int laneCount = extractLaneNumberfromRunInfo()
-        for (int i=1; i < laneCount + 1; i++) {
-            laneListInt.add(i)
-        }
-    }
-    else {
-        for (string lane : laneList) {
-            laneListInt.add(lane.parseInt())
-        }
-    }
-    return laneListInt
-}
-
-
-# --------------------------------------------------------------------------
-
-void startAnalysis (string fcName, string model) {
-
-    # Main function
-
-    int laneCount = extractLaneNumberfromRunInfo()
-    int [] laneListInt
-
-    laneListInt = buildLaneList(laneList)
-
-    print("laneListInt: " + "$laneListInt\n")
-
-    # Read RTA timestamp
-    if (taskList{"runReadRTATimestamp"}) {
-        rsyncRunFolder(["-a"], \
-                    "$runCompleted", \
-                    "$rtaIncoming/$runFolderName", \
-                    "$rtaIncoming/$marker$runFolderName")
-    }
-
-    # Read the JSON created with illuminate
-    if (taskList{"runReadJSON"}) {
-        triggerRunReadJSON()
-    }
-
-    # Create a sample sheet from data from openBIS
-    if (taskList{"runSampleSheetCreation"}) {
-        sampleSheetName := triggerSampleSheetCreation()
-    }
-
-    # Start Demultiplexing for lanes
-    if (taskList{"runTriggerBcl2fastq"}) {
-        triggerBcl2fastq(model, laneListInt, mismatches)
-    }
-
-    # html demultiplexing overview
-    if (taskList{"runDemultiplexStats"}) {
-        triggerDemultiplexStats(laneListInt)
-    }
-
-    if (taskList{"runChecksums"}) {
-        max_jobs := 15
-        if ((model != "MISEQ") || (model != "NEXTSEQ_500")){
-            max_jobs = 8
-        }
-        triggerChecksums(max_jobs, laneListInt)
-    }
-
-    # Rsync Flow Cell Raw Data
-    if (taskList{"runRsyncFlowcell"}) {
-        # sys mkdir "$flowCellData/$runFolderName"
-        rsyncRunFolder (["-a", \
-                    "--exclude='*.cif'", \
-                    "--exclude='*.FWHMMap'", \
-                    "--exclude='demultiplexed*'", \
-                    "--exclude='Images'", \
-                    "--exclude='L00*'", \
-                    "--exclude='fastqc'", \
-                    "--exclude='*_pos.txt'"], \
-                    "$latestFolder", \
-                    "$flowCellData", \
-                    "$flowCellData/$marker$runFolderName")
-    }
-
-    if (taskList{"runCreateFastqc"}) {
-        createFastqc (laneListInt)
-    }
-
-    if (taskList{"runAggregateFastqc"}) {
-        aggregateFastqc (laneListInt)
-    }
-
-    # run in parallel
-    par {
-        if (taskList{"runBarcodeDistribution"}) {
-            # We skip this for now as we have the stats in the bcl2fastq
-            barcodeDistribution (laneListInt)
-        }
-        if (taskList{"runBowtie"}) {
-            bowtie ()
-        }
-    }
-    wait
-
-    # Rsync the demultiplexed files: Register flow_lane
-    if (taskList{"runRsyncDemultiplexedFiles"}) {
-        rsyncDemultiplexedFiles(laneListInt)
-        if (model == "MISEQ") {
-            sleep(600)
-        }
-        else {
-            sleep(1)
-        }
-    }
-
-    # Sync Statistic for Flowcell and Lane statistic
-    if (taskList{"runRsyncLaneStatictics"}) {
-        rsyncLaneStatictics(laneListInt)
-
-        # Ugly hack to ensure that the data have been registered and we can set the properties
-        #if ((model != "MISEQ") || (model != "NEXTSEQ_500")){
-        sleep(7200)
-        rsyncLaneStatictics(laneListInt)
-        #}
-    }
-
-
-    if (!taskList{"debugRun"}) {
-        analysisFinished.write("Finished: " + getDate())
-        send_mail ("Sequencer $sequencer: Analysis finished", "Analysis for flow cell $fcName is finished.")
-    }
-
-}
-
-/* --------------------------------------------------------------------------*/
-
-string triggerSampleSheetCreation() {
-    createSampleSheetBinary := "/links/application/dsu/createSampleSheet/createSampleSheet_bcl2fastq.sh"
-
-    splits := runFolderName.split("_")
-    SampleSheetName := "SampleSheet_" + "$fcName" + ".csv"
-
-    task $createSampleSheetBinary \
-        -f $fcName \
-        -o $latestFolder \
-        -s
-    wait
-    return SampleSheetName
-}
-
-
-void triggerBcl2fastq (string model, int [] laneList, int mismatches) {
-
-    bcl2fastqBinary := "/usr/local/bin/bcl2fastq"
-    string laneSplitting
-    print("Starting demultiplexing using bcl2fastq\n")
-
-    if (model == "NEXTSEQ_500") {
-        # just appending the option
-        bcl2fastqBinary += " --no-lane-splitting "
-    }
-
-    print("laneList" + "$laneList\n")
-
-    for(int lane : laneList) {
-        sampleSheetName := "SampleSheet_" + "$fcName" + "_" + "$lane" + ".csv"
-        outDir := "$latestFolder/$demultiplexedFolder" + "_" + "$lane"
-        nohupFile := "$latestFolder/" + "nohup_" + "$runFolderName" + "_" + "$lane" + ".txt"
-
-        task ( cpus := 8 ) {
-             sys /usr/bin/nohup $bcl2fastqBinary \
-             --with-failed-reads \
-             --ignore-missing-bcls \
-             --ignore-missing-controls \
-             --ignore-missing-positions \
-             --ignore-missing-filter \
-             --no-bgzf-compression \
-             --barcode-mismatches $mismatches \
-             --runfolder-dir $latestFolder \
-             --input-dir $latestFolder/Data/Intensities/BaseCalls \
-             --output-dir $outDir\
-             --min-log-level DEBUG \
-             --sample-sheet $latestFolder/$sampleSheetName \
-             > $nohupFile 2>> $nohupFile
-         }
-        wait
-    }
-}
-
-
-void triggerDemultiplexStats (int [] laneCount) {
-
-    print("triggerDemultiplexStats: laneCount: " + "$laneCount")
-
-    binary := "/home/sbsuser/munge_demultiplex_files_bcl2fastq/source/mungeDemultiplexStats_bcl2fastq.py"
-    task python3.5 $binary \
-        -p "$latestFolder" \
-        -o "$reportsData/$runFolderName"
-    wait
-    sleep(5)
-    task touch "$reportsData/$marker$runFolderName"
-
-    for(int lane : laneCount) {
-
-        rsyncRunFolder (["-a"], \
-                         "$latestFolder/$demultiplexedFolder" + "_" + "$lane" + "/Reports", \
-                         "$reportsData/$runFolderName"+ "_" + "$lane", \
-                         "")
-
-        rsyncRunFolder (["-a"], \
-                         "$latestFolder/$demultiplexedFolder" + "_" + "$lane" + "/Stats", \
-                         "$reportsData/$runFolderName"+ "_" + "$lane", \
-                         "$reportsData/$marker$runFolderName"+ "_" + "$lane")
-    }
-}
-
-
-void createFastqc (int [] laneCount) {
-
-    fastqcBinary := "/links/application/dsu/Python-scripts/fastqc_plots_improved.py"
-    fastqcOutputFolder := "fastqc"
-
-    for(int intLane : laneCount) {
-
-        inputFolder := "$latestFolder/$demultiplexedFolder" + "_" + "$intLane"
-        outPutFolder := "$inputFolder/$fastqcOutputFolder"
-
-        task python3.5 $fastqcBinary \
-            --path $inputFolder \
-            --outpath $outPutFolder \
-            --regex "*.fastq.gz" \
-            --debug
-        wait
-
-        filesPerLane := outPutFolder.dir("*$intLane*.html")
-        print("$filesPerLane")
-        folderName := cleanString("$fcName") + "_" + "$intLane"
-
-        newFastqcFolder := "$outPutFolder/$folderName"
-        newFastqcFolder.mkdir()
-
-        for (string fastqcHtmlfile : filesPerLane) {
-            sys mv "$outPutFolder/$fastqcHtmlfile" "$newFastqcFolder"
-        }
-
-        rsyncRunFolder (["-a"], \
-                      "$newFastqcFolder", \
-                      "$fastqcData", \
-                      "$fastqcData/$marker$folderName")
-
-    }
-}
-
-
-void aggregateFastqc (int [] laneCount) {
-
-    fastqc_aggregate_binary := "/links/application/dsu/fastqc-aggregation/fastqc_aggregate/fastqc_aggregate.py"
-    fastqcOutputFolder := "fastqc-aggregate"
-    folderName := fastqcOutputFolder + "_" + cleanString("$fcName")
-    outPutFolder := "$latestFolder$folderName"
-
-    for(int intLane : laneCount) {
-
-        inputFolder := "$latestFolder$demultiplexedFolder" + "_" + "$intLane/fastqc"
-        filename := cleanString("$fcName") + "_" + "$intLane" + ".html"
-        task python3.5 $fastqc_aggregate_binary --path $inputFolder --outpath $outPutFolder --filename "$filename" --ids M1,M2,M4,M5,M6,M8,M10
-    }
-    wait
-
-    rsyncRunFolder (["-a"], \
-                  "$outPutFolder", \
-                  "$fastqcAggregateData", \
-                  "$fastqcAggregateData/$marker$folderName")
-}
-
-
-void barcodeDistribution (int [] laneCount) {
-
-    barcodeDistBinary := "/links/application/dsu/barcodeDistribution/source/barcodeDistribution.py"
-
-    for(int intLane : laneCount) {
-
-        searchFolder := "$latestFolder/$demultiplexedFolder" + "_" + "$intLane"
-
-        listOfLanes := getLaneNumbers("$searchFolder", "*R1_001*.gz")
-        print("$listOfLanes\n")
-        string laneString
-
-        # TODO distinguish between single lane and more lanes
-        if (listOfLanes.size() > 1) {
-            laneString = "L00"
-        }
-        else{
-            laneString = ""
-        }
-        for (string lane : listOfLanes) {
-            outputFolder := cleanString("$fcName") + "_" + "$lane"
-            fullOutputfolder := "$barcodeDistData/$outputFolder"
-            regex := "Undetermined*$laneString$lane*R1*.fastq.gz"
-            fullOutputfolder.mkdir()
-            task (cpus := 2) {
-            sys python3.5 $barcodeDistBinary \
-                -f $outputFolder \
-                -p $searchFolder \
-                -r $regex \
-                -o $fullOutputfolder \
-                -d
-            }
-            wait
-            task touch "$barcodeDistData/$marker$outputFolder"
-        }
-        wait
-    }
-}
-
-
-void rsyncDemultiplexedFiles (int [] laneCount) {
-
-    for(int intLane : laneCount) {
-
-        searchFolder := "$latestFolder/$demultiplexedFolder" + "_" + "$intLane"
-        nohupFile := "$latestFolder/" + "nohup_" + "$runFolderName" + "_" + "$intLane" + ".txt"
-
-        listOfLanes := getLaneNumbers(searchFolder, "*R1_001*.fastq.gz")
-        print(listOfLanes)
-        debug(listOfLanes)
-
-        string [] filesPerLane
-
-        # just for the Undetermined
-        for (string lane : listOfLanes) {
-            string newFolderName = "Undetermined_" + cleanString(fcName) + "_" + lane
-            #Undetermined_000000000_AH4PH_1
-            string newFolderPath = searchFolder + "/" + newFolderName
-
-            # Assuming it is only one lane
-            if (listOfLanes.size() == 1 && listOfLanes[0] == 1) {
-                filesPerLane = searchFolder.dir("*.fastq.gz")
-            }
-            else {
-                filesPerLane = searchFolder.dir("*L00" + lane + "*.fastq.gz")
-            }
-
-            newFolderPath.mkdir()
-            print("Created $newFolderPath\n")
-
-            for (string fastqFile : filesPerLane) {
-                string moveAndLinkID task ( canFail := true, cpus := 1 ){
-                    # sys echo "$searchFolder/$fastqFile" "$searchFolder/$newFolderName" 
-                    sys [[ -f "$searchFolder/$fastqFile" ]] && mv "$searchFolder/$fastqFile" "$searchFolder/$newFolderName/"
-                    sys [[ ! -f "$searchFolder/$fastqFile" ]] && ln -s "$searchFolder/$newFolderName/$fastqFile" "$searchFolder/$fastqFile"
-                }
-            }
-            sys chmod -R 774 "$newFolderPath"
-
-            rsyncRunFolder (["-a"], \
-                                "$nohupFile", \
-                                "$unalignedData/$newFolderName", \
-                                "")
-
-            rsyncRunFolder (["-a"], \
-                                "$newFolderPath", \
-                                "$unalignedData", \
-                                "$unalignedData/$marker$newFolderName")
-        }
-
-        # BSSE_QGF_36104_000000000_AH4PH_1
-        sampleDirList := searchFolder.dir("$samplePrefix*")
-           for( string sampleFolder : sampleDirList) {
-                sys chmod -R 774 "$searchFolder/$sampleFolder"
-
-                rsyncRunFolder (["-a"], \
-                                "$searchFolder/$sampleFolder", \
-                                "$unalignedData", \
-                                "")
-
-                rsyncRunFolder (["-a"], \
-                         "$nohupFile", \
-                         "$unalignedData/$sampleFolder", \
-                         "$unalignedData/$marker$sampleFolder")
-            }
-    }
-}
-
-
-void rsyncLaneStatictics (int [] laneCount) {
-
-    print("Starting rsyncLaneStatictics with lanes $laneCount\n")
-    for(int intLane : laneCount) {
-
-        conversionStatsFile := "ConversionStats.xml"
-        demuxFile := "$latestFolder/$demultiplexedFolder" + "_" + "$intLane" + "/Stats/$conversionStatsFile"
-        if (!demuxFile.canRead()) {
-            printErr("Cannot read $demuxFile")
-        }
-        else {
-            print("Found $demuxFile")
-        }
-        demuxData := ""
-        folder_splits := runFolderName.split("_")
-        if (folder_splits[1].startsWith("NS")) {
-                demuxData = "$dss/v2_read-demultiplex-stats-nextseq"
-        }
-        else {
-                demuxData = "$dss/v2_read-demultiplex-stats-miseq-hiseq"
-        }
-
-        outputDir:= "$demuxData/$runFolderName" + "_" + "$intLane"
-        markerFile := "$demuxData/$marker" + "$runFolderName" + "_" + "$intLane"
-
-        print("$demuxFile")
-        rsyncRunFolder (["-a"], \
-                         "$demuxFile", \
-                         "$outputDir", \
-                         "$markerFile")
-    }
-}
-
-
-void bowtie () {
-
-    undeterminedPath := "$latestFolder/$demultiplexedFolder/Undetermined_indices/Sample_lane1"
-    bowtie2Binary := "/links/application/dsu/aligner/bowtie2/bowtie2"
-    bowtie2PhixIndices := "/links/application/dsu/Genomes/bowtie2_indexes/phix/phix"
-    r1 := "$undeterminedPath/lane1_Undetermined_L001_R1_001.fastq.gz"
-    r2 := "$undeterminedPath/lane1_Undetermined_L001_R2_001.fastq.gz"
-
-    task ( cpus := 7 ) {
-        sys $bowtie2Binary \
-            -p7 \
-            -x $bowtie2PhixIndices \
-            -1 $r1 \
-            -2 $r2 2>"$undeterminedPath/bowtie2_outPE.txt" \
-            -S "$undeterminedPath/bowtie2_phiX_mapped_reads_PE.sam"
-    }
-}
-
-void triggerRunReadJSON() {
-
-    monitoringBinary := "/links/application/dsu/monitor_Illumina/source/monitor.py"
-    v2_read_json_dropbox := "/home/sbsuser/dss/v2_read-json"
-
-    task /usr/local/bin/python2.7 $monitoringBinary \
-         --single $latestFolder \
-         --calculate \
-         --outpath $v2_read_json_dropbox
-    wait
-    task touch "$v2_read_json_dropbox/$marker$fcName"
-}
-
-void triggerChecksums(int max_jobs, int [] laneCount) {
-    checksumBinary := "/links/application/dsu/crc32/create_checksum_file.sh"
-
-    for(int intLane : laneCount) {
-        inputFolder := "$latestFolder/$demultiplexedFolder" + "_" + "$intLane"
-        task $checksumBinary $inputFolder $max_jobs
-    }
-    wait
-}
-
-
-string getDate() {
-    return sys date
-}
-
-void send_mail (string subject, string message){
-    mailList := "kohleman@ethz.ch cbeisel@ethz.ch" 
-    #mailList := "kohleman@ethz.ch"
-    task echo "$message" | /usr/bin/mutt -s "$subject" $mailList
-}
diff --git a/deep_sequencing_unit/source/Jython/barcodeComplexityChecker.py b/deep_sequencing_unit/source/Jython/barcodeComplexityChecker.py
deleted file mode 100644
index d44c5aafc9c..00000000000
--- a/deep_sequencing_unit/source/Jython/barcodeComplexityChecker.py
+++ /dev/null
@@ -1,62 +0,0 @@
-def checkBarcodes():
-  '''
-  'parents' are a HashSet of SamplePropertyPE
-  ''' 
-  VOCABULARY_INDEX1 = 'BARCODE'
-  VOCABULARY_INDEX2 = 'INDEX2'
-
-  RED = set(['A', 'C'])
-  GREEN = set(['T', 'G'])
-
-  SUCCESS_MESSAGE = "OK"
-  NO_INDEX = "No Index"
-  
-  listofIndices = []
-  boolList = []
-  positionList = []
-  returnString = " "
-
-  for e in entity.entityPE().parents:
-    for s in e.properties:
-      if s.entityTypePropertyType.propertyType.simpleCode == VOCABULARY_INDEX1:
-        index = s.getVocabularyTerm().code
-
-        if len(listofIndices) > 0:
-          for n in range(0, len(index) - 1):
-            listofIndices[n].append(index[n])
-        else:
-          for n in range(0, len(index) - 1):
-            listofIndices.append([index[n]])
-       
-      # remove any duplicates   
-      setofIndices = [set(list) for list in listofIndices]    
- 
-      # Test whether every element in the set 's' is in the RED set
-      boolList = [setofNuc.issubset(RED) for setofNuc in setofIndices]
-
-  if boolList:
-    for b in boolList:
-      if b:
-        positionList.append(boolList.index(b) + 1)
-        # set the value to False, because 'index' returns only the first occurrence
-        boolList[boolList.index(b)] = False
-  else:
-   return NO_INDEX
-
-    #  if s.entityTypePropertyType.propertyType.simpleCode == VOCABULARY_INDEX2:
-    #   pass 
-
-  if positionList:
-    for pos in positionList:
-      returnString += "WARNING! The following base position of " + \
-                         VOCABULARY_INDEX1 + \
-                         " does not have both color channels the index read: " + str(pos) + \
-                         "\n" 
-  else:
-    returnString = SUCCESS_MESSAGE
-
-  return returnString
-
-def calculate(): 
-    """Main script function. The result will be used as the value of appropriate dynamic property."""
-    return checkBarcodes()
diff --git a/deep_sequencing_unit/source/Jython/createInvoices_Illumina_NGS.py b/deep_sequencing_unit/source/Jython/createInvoices_Illumina_NGS.py
deleted file mode 100644
index d77c5c5f062..00000000000
--- a/deep_sequencing_unit/source/Jython/createInvoices_Illumina_NGS.py
+++ /dev/null
@@ -1,614 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Copyright 2013 ETH Zuerich, CISD
-  
-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.
-
-@author Manuel Kohler
-
-@description:
-Creates Excel-based invoices for the Quantitative Genomics Facility,
-D-BSSE, ETH Zurich
-
-@attention:
-Runs under Jython
-
-@note:
-
-'''
-
-import os
-import re
-import sys
-import logging
-from datetime import *
-from ConfigParser import SafeConfigParser
-from optparse import OptionParser
-from java.io import FileOutputStream
-from org.apache.poi.hssf.usermodel import HSSFWorkbook
-from org.apache.poi.poifs.filesystem import POIFSFileSystem
-from org.apache.poi.xssf.usermodel import XSSFWorkbook
-from ch.systemsx.cisd.openbis.dss.client.api.v1 import OpenbisServiceFacadeFactory
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-from java.util import EnumSet
-from java.util import TreeMap
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SampleFetchOption
-from ch.systemsx.cisd.openbis.generic.shared.dto import NewRoleAssignment
-
-excelFormats = {"xls": "HSSFWorkbook()" , "xlsx": "XSSFWorkbook()"}
-
-# This list is imply used to keep the order of elements of the 'columnHeadersMap'
-columnHeadersList = ["EXTERNAL_SAMPLE_NAME", "BARCODE", "INDEX2", "CONTACT_PERSON_NAME",
-                     "BIOLOGICAL_SAMPLE_ARRIVED", "PREPARED_BY", "KIT", "QC_AT_DBSSE",
-                     "CELL_PLASTICITY_SYSTEMSX",  "PRICE", "NOTES"]
-
-columnHeadersMap = {"EXTERNAL_SAMPLE_NAME": "Sample Name",
-                    "BARCODE": "Index",
-                    "INDEX2": "Index2",
-                    "PREPARED_BY" : "Prepared by",
-                    "KIT" : "Kit",
-                    "QC_AT_DBSSE" : "QC at D-BSSE",
-                    "CONTACT_PERSON_NAME" : "Contact Person",
-                    "NOTES" : "Notes",
-                    "BIOLOGICAL_SAMPLE_ARRIVED": "Received",
-                    "CELL_PLASTICITY_SYSTEMSX": "Cell Plasticity",
-                    "PRICE" : "Price"}
-
-SAMPLETYPE = 'SAMPLETYPE'
-EXTERNAL_SAMPLE_NAME = 'EXTERNAL_SAMPLE_NAME'
-RUN_FOLDER_NAME = 'RUN_FOLDER_NAME'
-
-class uniqueRow():
-  '''
-  Little helper class which ensures the unique use of a row 
-  '''
-  def __init__(self):
-    self.row = -1
-
-  def getNextRow (self):
-    self.row += 1
-    return self.row
-
-  def setRow(self, rowNumber):
-    self.row = rowNumber
-    return self.row
-
-class uniqueColumn():
-  '''
-  Little helper class which ensures the unique use of a column 
-  '''
-  def __init__(self):
-    self.column = -1
-
-  def getCurrentColumn(self):
-    return self.column
-
-  def getNextColumn (self):
-    self.column += 1
-    return self.column
-
-  def setColumn(self, columnNumber):
-    self.column = columnNumber
-    return self.column
-
-
-class openbisRow ():
-  '''
-  Represents a single row in an Excel file with the relevant properties,
-  code and pi are for internal organization 
-  '''
-  def __init__(self):
-    self.code = 'code'
-    self.pi = 'PRINCIPAL_INVESTIGATOR_NAME'
-    self.externalSampleName = 'EXTERNAL_SAMPLE_NAME'
-    self.index1 = 'INDEX1'
-    self.index2 = 'INDEX2'
-    self.preparedBy = 'PREPARED_BY'
-    self.kit = 'KIT'
-    self.qcAtBsse = 'QC_AT_DBSSE'
-    self.contactPersonName = 'CONTACT_PERSON_NAME'
-    self.notes = 'NOTES'
-    self.biologicalSampleArrived = 'BIOLOGICAL_SAMPLE_ARRIVED'
-    self.cellPlasticitySystemsX = ''
-    self.price = ''
-    
-  def __str__(self):
-    return "code: %s, pi: %s, externalSampleName: %s, index1: %s, index2: %s, preparedBy: %s, kit: %s," \
-           " qcAtBsse: %s, contactPersonName: %s, notes: %s, biologicalSampleArrived: %s," \
-           " cellPlasticitySystemsX: %s, price: %s" \
-        % (self.code, self.pi, self.externalSampleName, self.index1, self.index2, self.preparedBy, self.kit,
-           self.qcAtBsse, self.contactPersonName, self.notes, self.biologicalSampleArrived,
-           self.cellPlasticitySystemsX, self.price)
-    
-def getDate():
-  d = datetime.now()
-  return d.strftime("%A, %d-%B-%Y")
-
-def setFont(wb, configDict, fontSize=10):
-  font = wb.createFont()
-  font.setFontHeightInPoints(fontSize)
-  font.setFontName(configDict["defaultFonts"])
-  font.setItalic(False)
-  font.setStrikeout(False)
-  # Fonts are set into a style so create a new one to use.
-  style = wb.createCellStyle()
-  style.setFont(font)
-  return style
-
-def getVocabulary(service, vocabularyCode):
-  ''' Returns the vocabulary term and vocabulary label of a vocabulary specified by the parameter
-  vocabularyCode in a map'''
-
-  vocabularies = service.listVocabularies()
-  vocabularyMap = {}
-  for vocabulary in vocabularies:
-    if (vocabulary.getCode() == vocabularyCode):
-      terms = vocabulary.getTerms()
-  for term in terms:
-    vocabularyMap[term.getCode()] = term.getLabel()
-  return vocabularyMap
-
-def writeExcel(myoptions, configDict, service, piName, piDict,
-               piSpace, flowCellProperties, flowcell, logger,
-               listOfCodeList, listOfPropertyDicts, format="xls"):
-  
-  '''
-  Writes out all data to an Excel file
-  '''
-  myRows = uniqueRow()
-  sequencerVocabulary = getVocabulary(service, "SEQUENCER")
-  setOfFlowcells = set ()
-
-  def getValueOrEmptyString (key, myDict):
-    if key in myDict:
-      return myDict[key]
-    else:
-      return ''
-
-  def writeHeader():
-    # Write header
-    row = sheet.createRow(myRows.getNextRow())
-    row.createCell(0).setCellValue(configDict["facilityName"] + ", " + configDict["facilityInstitution"])
-    row.getCell(0).setCellStyle(setFont(wb, configDict, 10))
-    row1 = sheet.createRow(myRows.getNextRow())
-    row1.createCell(0).setCellValue(getDate())
-    row1.getCell(0).setCellStyle(setFont(wb, configDict, 10))
-
-  def createRow(key="", value="", rowNumber=0, fontSize=10):
-    '''
-    '''
-    if rowNumber == 0:
-      row = sheet.createRow(myRows.getNextRow())
-    else:
-      row = rowNumber
-    row.createCell(0).setCellValue(key)
-    row.createCell(1).setCellValue(value)
-    row.getCell(0).setCellStyle(setFont(wb, configDict, fontSize))
-    row.getCell(1).setCellStyle(setFont(wb, configDict, fontSize))
-    return row
-
-  def writeFooter(service, sheet):
-    footer = sheet.getFooter()
-    footer.setRight("generated on " + datetime.now().strftime("%H:%M - %d.%m.%Y"))
-
-
-  wb = (eval(excelFormats[format]))
-  createHelper = wb.getCreationHelper()
-  sheet = wb.createSheet(configDict["facilityNameShort"])
-  # 3/2 = 150 percent magnification when opening the workbook
-  sheet.setZoom(3, 2)
-
-  writeHeader()
-  createRow("Principal Investigator", piName.replace("_", " "))
-  createRow("Data Space", piSpace)
-  createRow("Run Folder Name", getValueOrEmptyString(RUN_FOLDER_NAME, flowCellProperties))
-  createRow()
-
-  myColumns = uniqueColumn()
-
-  sampleHeader = sheet.createRow(myRows.getNextRow())
-  sampleHeader.createCell(myColumns.getNextColumn()).setCellValue("Flow Cell:Lane")
-  sampleHeader.getCell(myColumns.getCurrentColumn()).setCellStyle(setFont(wb, configDict, 10))
-  sampleHeader.createCell(myColumns.getNextColumn()).setCellValue("Sample Code")
-  sampleHeader.getCell(myColumns.getCurrentColumn()).setCellStyle(setFont(wb, configDict, 10))
-  for c in columnHeadersList:
-    sampleHeader.createCell(myColumns.getNextColumn()).setCellValue(columnHeadersMap[c])
-    sampleHeader.getCell(myColumns.getCurrentColumn()).setCellStyle(setFont(wb, configDict, 10))
-
-  listofLanes = piDict[piName]
-  listofLanes.sort()
-  logger.debug(listofLanes)
-  
-  for lane in listofLanes:
-    singleSampleColumns = uniqueColumn()
-    
-    sampleCodeForInvoicing = []
- 
-    for code in listOfCodeList[lane-1]:
-      logger.info ('Processing: ' + code)
-      sampleProperties = listOfPropertyDicts[lane-1][code]
-      
-      if (sampleProperties[SAMPLETYPE] == configDict['masterTypeName']):
-        newRow.biologicalSampleArrived =  getValueOrEmptyString(newRow.biologicalSampleArrived, sampleProperties)
-        newRow.contactPersonName = getValueOrEmptyString(newRow.contactPersonName, sampleProperties)
-        newRow.pi = sanitizeString(getValueOrEmptyString(newRow.pi, sampleProperties))
-
-        if (newRow.pi != piName):
-          logger.info('This is a shared lane.Lane PI and sample PI are not the same. We do not write ' 
-                       'the row to the Excel file')
-          continue
-             
-        logger.info('Excel Sheet line: ')
-        logger.info(newRow)
-        
-        rowN = sheet.createRow(myRows.getNextRow())
-        rowN.createCell(singleSampleColumns.getNextColumn()).setCellValue(flowcell + ":" + str(lane))
-        rowN.getCell(singleSampleColumns.getCurrentColumn()).setCellStyle(setFont(wb, configDict, 10))
-        
-        #Code  Sample Name  Index  Index2  Contact Person  Received  Prepared by  Kit  QC at D-BSSE  Cell Plasticity  Price  Notes
-        rowN.createCell(singleSampleColumns.getNextColumn()).setCellValue(newRow.code)
-        rowN.getCell(singleSampleColumns.getCurrentColumn()).setCellStyle(setFont(wb, configDict, 10))
-        
-        rowN.createCell(singleSampleColumns.getNextColumn()).setCellValue(newRow.externalSampleName)
-        rowN.getCell(singleSampleColumns.getCurrentColumn()).setCellStyle(setFont(wb, configDict, 10))
-        
-        rowN.createCell(singleSampleColumns.getNextColumn()).setCellValue(newRow.index1)
-        rowN.getCell(singleSampleColumns.getCurrentColumn()).setCellStyle(setFont(wb, configDict, 10))
-        
-        rowN.createCell(singleSampleColumns.getNextColumn()).setCellValue(newRow.index2)
-        rowN.getCell(singleSampleColumns.getCurrentColumn()).setCellStyle(setFont(wb, configDict, 10))
-
-        rowN.createCell(singleSampleColumns.getNextColumn()).setCellValue(newRow.contactPersonName)
-        rowN.getCell(singleSampleColumns.getCurrentColumn()).setCellStyle(setFont(wb, configDict, 10))
-
-        rowN.createCell(singleSampleColumns.getNextColumn()).setCellValue(newRow.biologicalSampleArrived)
-        rowN.getCell(singleSampleColumns.getCurrentColumn()).setCellStyle(setFont(wb, configDict, 10))
-
-        rowN.createCell(singleSampleColumns.getNextColumn()).setCellValue(newRow.preparedBy)
-        rowN.getCell(singleSampleColumns.getCurrentColumn()).setCellStyle(setFont(wb, configDict, 10))
-
-        rowN.createCell(singleSampleColumns.getNextColumn()).setCellValue(newRow.kit)
-        rowN.getCell(singleSampleColumns.getCurrentColumn()).setCellStyle(setFont(wb, configDict, 10))
-
-        rowN.createCell(singleSampleColumns.getNextColumn()).setCellValue(newRow.qcAtBsse)
-        rowN.getCell(singleSampleColumns.getCurrentColumn()).setCellStyle(setFont(wb, configDict, 10))
-        
-        rowN.createCell(singleSampleColumns.getNextColumn()).setCellValue(newRow.cellPlasticitySystemsX)
-        rowN.getCell(singleSampleColumns.getCurrentColumn()).setCellStyle(setFont(wb, configDict, 10))
-        
-        rowN.createCell(singleSampleColumns.getNextColumn()).setCellValue(newRow.price)
-        rowN.getCell(singleSampleColumns.getCurrentColumn()).setCellStyle(setFont(wb, configDict, 10))
-
-        rowN.createCell(singleSampleColumns.getNextColumn()).setCellValue(newRow.notes)
-        rowN.getCell(singleSampleColumns.getCurrentColumn()).setCellStyle(setFont(wb, configDict, 10))
-
-      # if the LIBRARY has no External Name we try to take the one from the RAW sample  
-      if (sampleProperties[SAMPLETYPE] == configDict['rawTypeName']):
-        if not newRow.externalSampleName:
-           newRow.externalSampleName = 'Raw Sample Name: ' + getValueOrEmptyString(EXTERNAL_SAMPLE_NAME, sampleProperties)
-      
-      if (sampleProperties[SAMPLETYPE] == configDict['libraryTypeName']):
-        newRow = openbisRow()
-        sampleCodeForInvoicing.append(code)
-        
-        newRow.code = code
-        newRow.externalSampleName = getValueOrEmptyString(newRow.externalSampleName, sampleProperties)
-        newRow.index1 = getValueOrEmptyString(newRow.index1, sampleProperties)
-        newRow.index2 = getValueOrEmptyString(newRow.index2, sampleProperties)
-        newRow.preparedBy = getValueOrEmptyString(newRow.preparedBy, sampleProperties)
-        newRow.kit = getValueOrEmptyString(newRow.kit, sampleProperties)
-        newRow.qcAtBsse = getValueOrEmptyString(newRow.qcAtBsse, sampleProperties)
-        newRow.notes = getValueOrEmptyString(newRow.notes, sampleProperties)
-      
-      singleSampleColumns = uniqueColumn()
-
-  createRow()
-  createRow("Flow Cell Details", "", 0, 14)
-
-  createRow("Flow Cell", flowcell)
-  for property in flowCellProperties:
-    if (property == "SEQUENCER"):
-      val = sequencerVocabulary[flowCellProperties[property]]
-    else:
-      val = flowCellProperties[property]
-
-    createRow(property, val)
-  createRow()
-
-  # adjust width
-  for i in range(0, 20):
-    sheet.autoSizeColumn(i)
-
-  # set layout to landscape
-  sheet.getPrintSetup().setLandscape(True)
-
-  writeFooter(service, sheet)
-
-  # sanitizeString(piName) + datetime.now().strftime("_%d_%m_%Y.") + format
-  #  Write the output to a file
-  fileName = myoptions.outdir + configDict["facilityNameShort"] + "_" + flowcell + "_" + \
-            sanitizeString(piName) + "." + format
-  fileOut = FileOutputStream(fileName)
-  # need this print for use as an openBIS webapp
-  print fileName
-
-  wb.write(fileOut);
-  fileOut.close();
-  
-  return sampleCodeForInvoicing
-
-def sanitizeString(myString):
-  myString = myString.replace(u'ä', 'ae')
-  myString = myString.replace(u'ü', 'ue')
-  myString = myString.replace(u'ö', 'oe')
-  return re.sub('[^A-Za-z0-9]+', '_', myString)
-
-def setUpLogger(logPath, logLevel=logging.INFO):
-  logFileName = 'createInvoices'
-  d = datetime.now()
-  logFileName = logFileName + '_' + d.strftime('%Y-%m-%d_%H_%M_%S') + '.log'
-  logging.basicConfig(filename=logPath + logFileName,
-                      format='%(asctime)s [%(levelname)s] %(message)s', level=logLevel)
-  logger = logging.getLogger(logFileName)
-  return logger
-
-
-def parseConfigurationFile(propertyFile='etc/service.properties'):
-  '''
-  Parses the given config files and returns the values
-  '''
-  config = SafeConfigParser()
-  config.read(propertyFile)
-  config.sections()
-  return config
-
-def readConfig(logger):
-  GENERAL = 'GENERAL'
-  OPENBIS = 'OPENBIS'
-  EXCEL = 'EXCEL'
-
-  logger.info('Reading config file')
-  configDict = {}
-
-  configParameters = parseConfigurationFile()
-  configDict['facilityName'] = configParameters.get(GENERAL, 'facilityName')
-  configDict['facilityNameShort'] = configParameters.get(GENERAL, 'facilityNameShort')
-  configDict['facilityInstitution'] = configParameters.get(GENERAL, 'facilityInstitution')
-  configDict['mailList'] = configParameters.get(GENERAL, 'mailList')
-  configDict['mailFrom'] = configParameters.get(GENERAL, 'mailFrom')
-  configDict['smptHost'] = configParameters.get(GENERAL, 'smptHost')
-  configDict['separator'] = configParameters.get(GENERAL, 'separator')
-  configDict['indexSeparator'] = configParameters.get(GENERAL, 'indexSeparator')
-
-  configDict['openbisUserName'] = configParameters.get(OPENBIS, 'openbisUserName')
-  configDict['openbisPassword'] = configParameters.get(OPENBIS, 'openbisPassword', raw=True)
-  configDict['openbisServer'] = configParameters.get(OPENBIS, 'openbisServer')
-  configDict['connectionTimeout'] = configParameters.getint(OPENBIS, 'connectionTimeout')
-  configDict['pIPropertyName'] = configParameters.get(OPENBIS, 'pIPropertyName')
-  configDict['invoiceName'] = configParameters.get(OPENBIS, 'invoiceName')
-  configDict['sampleCodePrefix'] = configParameters.get(OPENBIS, 'sampleCodePrefix')
-  
-  configDict['illuminaFlowLaneTypeName'] = configParameters.get(OPENBIS, 'illuminaFlowLaneTypeName')
-  configDict['libraryPoolTypeName'] = configParameters.get(OPENBIS, 'libraryPoolTypeName')
-  configDict['libraryTypeName'] = configParameters.get(OPENBIS, 'libraryTypeName')
-  configDict['rawTypeName'] = configParameters.get(OPENBIS, 'rawTypeName')
-  configDict['masterTypeName'] = configParameters.get(OPENBIS, 'masterTypeName')
-
-  configDict['defaultFonts'] = configParameters.get(EXCEL, 'defaultFonts')
-
-  return configDict
-
-def login(logger, configDict):
-  logger.info('Logging into ' + configDict['openbisServer'])
-  service = OpenbisServiceFacadeFactory.tryCreate(configDict['openbisUserName'],
-                                                  configDict['openbisPassword'],
-                                                  configDict['openbisServer'],
-                                                  configDict['connectionTimeout'])
-  return service
-
-def parseOptions(logger):
-  logger.info('Parsing command line parameters')
-  parser = OptionParser(version='%prog 1.0')
-  parser.add_option('-f', '--flowcell',
-                  dest='flowcell',
-                  help='The flowcell which is used to create the SampleSheet.csv',
-                  metavar='<flowcell>')
-  parser.add_option('-o', '--outdir',
-                  dest='outdir',
-                  default='./',
-                  help='Specify the ouput directory. Default: ./' ,
-                  metavar='<outdir>')
-  parser.add_option('-d', '--debug',
-                  dest='debug',
-                  default=False,
-                  action='store_true',
-                  help='Verbose debug logging. Default: False')
-
-  (options, args) = parser.parse_args()
-
-  if options.outdir[-1] <> '/':
-    options.outdir = options.outdir + '/'
-
-  if options.flowcell is None:
-    parser.print_help()
-    exit(-1)
-  return options
-
-
-
-def getLaneAncestors(service, lane, logger):
-  '''
-  Gets all ancestors and corresponding properties of a sample
-  '''
-  fetchOptions = EnumSet.of(SampleFetchOption.ANCESTORS, SampleFetchOption.PROPERTIES)
-  sc = SearchCriteria();
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, lane));
-  dList = service.searchForSamples(sc, fetchOptions)
-
-  def recursiveSamples(list, codeList, propertyDict):
-    '''
-    Recursively walks through the sample tree and write the sample codes
-    to a list and the properties into a dictionary. The sample code is
-    the key, the properties are the values
-    '''
-       
-    for element in list:
-      elementCode = element.getCode()
-      codeList.append(elementCode)
-      elementProperties = element.getProperties()
-      
-      tmpDict = {}
-      
-      for eP in elementProperties:
-        tmpDict[eP] = elementProperties[eP]
-        
-      tmpDict[SAMPLETYPE] = element.getSampleTypeCode()
-      tmpDict['SPACE'] = element.getSpaceCode()
-      propertyDict[elementCode] = tmpDict
-
-      elementParents = element.getParents()
-      
-      if (elementParents.size() > 0):
-        recursiveSamples(elementParents, codeList, propertyDict)
- 
-  codeList = []
-  propertyDict = {}
-    
-  recursiveSamples(dList, codeList, propertyDict)
-  
-  logger.debug(codeList)
-  logger.debug(propertyDict)
-  
-  return codeList, propertyDict
-
-
-def getFLowcellData(service, configDict, flowcell, logger):
-
-  fetchOptions = EnumSet.of(SampleFetchOption.ANCESTORS, SampleFetchOption.PROPERTIES)
-
-  sc = SearchCriteria();
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowcell));
-  fcList = service.searchForSamples(sc, fetchOptions)
-  
-  try:
-    assert fcList.size() == 1
-  except AssertionError:
-    print (str(fcList.size()) + ' flow cells found which match.')
-    exit(1)
-
-  for p in fcList:
-    flowCellProperties = p.getProperties()
-
-  numberOfLanes = int(flowCellProperties['LANECOUNT'])
-
-  piDict = {}
-  spaceDict = {}
-  invoiceDict = {}
-  listOfCodeList = []
-  listOfPropertyDicts = []
-
-  for lane in range(1, numberOfLanes + 1):
-    myLane = flowcell + ":" + str(lane)
-    codeList, propertyDict = getLaneAncestors(service, myLane, logger)
-    listOfCodeList.append(codeList)
-    listOfPropertyDicts.append(propertyDict)
-    
-    for code in codeList:
-      sampleProperties = propertyDict[code]
-      logger.debug ('Processing ' + code)
-      
-      if (sampleProperties[SAMPLETYPE] == configDict['libraryTypeName']):
-        invoiceProperty = sampleProperties[configDict['invoiceName']]
-        # if sample got created via Excel upload, the property could be not set, which is represented by None
-        if (invoiceProperty is None):
-          invoiceProperty = 'false'
-        sentInvoice = {'true': True, 'false': False}.get(invoiceProperty.lower())
-      
-      if (sampleProperties[SAMPLETYPE] == configDict['masterTypeName']):
-        pi = sanitizeString(sampleProperties[configDict['pIPropertyName']])
-        logger.debug("PI for " + code + ": " + pi)
-        logger.debug("Invoice sent for " + code + ": " + str(sentInvoice))
-        
-        if piDict.has_key(pi):
-          piDict[pi].append(lane)
-          # Making the lanes unique
-          piDict[pi] = list(set(piDict[pi]))
-        else:
-          piDict[pi] = [lane]
-
-        if not sentInvoice:
-          if invoiceDict.has_key(pi):
-            invoiceDict[pi].append(lane)
-            # Making the lanes unique
-            invoiceDict[pi] = list(set(invoiceDict[pi]))
-          else:
-            invoiceDict[pi] = [lane]
-
-        spaceDict[pi] = sampleProperties['SPACE']
-        
-  logger.debug(spaceDict)
-
-  logger.info("Found the following PIs on the lanes: ")
-  logger.info(piDict)
-  logger.info("Found the following PIs with non-invoiced samples : ")
-  logger.info(invoiceDict)
-
-  # simply sort the hashmap
-  treeMap = TreeMap (flowCellProperties)
-  return piDict, treeMap, spaceDict, invoiceDict, listOfCodeList, listOfPropertyDicts
-
-
-'''
-Main script
-'''
-
-def main():
-
-  # for now setting the format by hand
-  format = "xlsx"
-  magicString = "@Invoice@"
-
-  logger = setUpLogger('log/')
-  logger.info('Started Creation Invoices...')
-
-  myoptions = parseOptions(logger)
-  configDict = readConfig(logger)
-  if myoptions.debug:
-    logger.setLevel(logging.DEBUG)
-
-  service = login(logger, configDict)
-  flowcellName = myoptions.flowcell
-  piDict, flowCellProperties, spaceDict, invoiceDict, listOfCodeList, listOfPropertyDicts =\
-             getFLowcellData(service, configDict, flowcellName, logger)
-
-  piSampleCodeDict = {}
-
-  for piName in piDict:
-    # create an Excel file for each PI
-    sampleCodeForInvoicing = writeExcel(myoptions, configDict, service, piName, piDict,
-               spaceDict[piName], flowCellProperties, flowcellName, logger,
-               listOfCodeList, listOfPropertyDicts, format)
-    
-    piSampleCodeDict[piName] = sampleCodeForInvoicing
-  
-  for invoicePi in invoiceDict: 
-    tmpString = magicString + invoicePi
-    for samplecode in  piSampleCodeDict[invoicePi]:
-      tmpString = tmpString + '#' + samplecode
-    print tmpString
-  
-  service.logout()
-
-if __name__ == "__main__":
-    main()
diff --git a/deep_sequencing_unit/source/Jython/createSampleSheet.py b/deep_sequencing_unit/source/Jython/createSampleSheet.py
deleted file mode 100644
index 4165e800ac8..00000000000
--- a/deep_sequencing_unit/source/Jython/createSampleSheet.py
+++ /dev/null
@@ -1,702 +0,0 @@
-'''
-@copyright:
-Copyright 2014 ETH Zuerich, SIS
- 
-@license:
-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.
-
-@author:
-Manuel Kohler
-
-@description:
-Creates the SampleSheet.csv out of values from openBIS for Demultiplexing 
-used in the Illumina pipeline (configureBclToFastq.pl) 
-
-@attention:
-Runs under Jython
-
-@note:
-Takes into account to replace special characters with an underscore so that the Illumina script
-does not fail
-
-HiSeq Header Description
-========================
-Column Header  Description
-FCID  Flow cell ID
-Lane  Positive integer, indicating the lane number (1-8)
-SampleID  ID of the sample
-SampleRef  The reference used for alignment for the sample
-Index  Index sequences. Multiple index reads are separated by a hyphen (for example, ACCAGTAA-GGACATGA).
-Description  Description of the sample
-Control  Y indicates this lane is a control lane, N means sample
-Recipe Recipe used during sequencing
-Operator Name or ID of the operator
-SampleProject  The project the sample belongs to
-'''
-
-from __future__ import with_statement
-import os
-import logging
-import re
-import sys
-import string
-import smtplib
-from ConfigParser import SafeConfigParser
-from optparse import OptionParser
-from datetime import *
-
-from email.MIMEMultipart import MIMEMultipart
-from email.MIMEBase import MIMEBase
-from email.MIMEText import MIMEText
-from email.Utils import COMMASPACE, formatdate
-from email import Encoders
-
-from ch.systemsx.cisd.openbis.dss.client.api.v1 import OpenbisServiceFacadeFactory
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-lineending = {'win32':'\r\n', 'linux':'\n', 'mac':'\r'}
-COMMA = ','
-
-def login(logger, configMap):
-  logger.info('Logging into ' + configMap['openbisServer'])
-  service = OpenbisServiceFacadeFactory.tryCreate(configMap['openbisUserName'],
-                                                  configMap['openbisPassword'],
-                                                  configMap['openbisServer'],
-                                                  configMap['connectionTimeout'])
-  return service
-
-def logout (service, logger):
-  service.logout()
-  logger.info('Logged out')
-
-def setUpLogger(logPath, logLevel=logging.INFO):
-  logFileName = 'createSampleSheet'
-  d = datetime.now()
-  logFileName = logFileName + '_' + d.strftime('%Y-%m-%d_%H_%M_%S') + '.log'
-  logging.basicConfig(filename=logPath + logFileName,
-                      format='%(asctime)s [%(levelname)s] %(message)s', level=logLevel)
-  logger = logging.getLogger(logFileName)
-  return logger
-
-def parseOptions(logger):
-  logger.info('Parsing command line parameters')
-  parser = OptionParser(version='%prog 1.0')
-  parser.add_option('-f', '--flowcell',
-                  dest='flowcell',
-                  help='The flowcell which is used to create the SampleSheet.csv',
-                  metavar='<flowcell>')
-  parser.add_option('-m', '--mailist',
-                  dest='maillist',
-                  default=False,
-                  action='store_true',
-                  help='Generated Sample Sheet will be addtionally sent as email to the defined list of recipients',
-                  metavar='<maillist>')
-  parser.add_option('-l', '--lineending',
-                  dest='lineending',
-                  type='choice',
-                  action='store',
-                  choices=['win32', 'linux', 'mac'],
-                  default='linux',
-                  help='Specify end of line separator: win32, linux, mac. Default: linux' ,
-                  metavar='<lineending>')
-  parser.add_option('-o', '--outdir',
-                  dest='outdir',
-                  default='./',
-                  help='Specify the ouput directory. Default: ./' ,
-                  metavar='<outdir>')
-  parser.add_option('-s', '--singlelane',
-                  dest='singlelane',
-                  default=False,
-                  action='store_true',
-                  help='Creates a single Sample Sheet for each lane. Default: False')
-  parser.add_option('-d', '--debug',
-                  dest='debug',
-                  default=False,
-                  action='store_true',
-                  help='Verbose debug logging. Default: False')
-  parser.add_option('-v', '--verbose',
-                  dest='verbose',
-                  default=False,
-                  action='store_true',
-                  help='Write Sample Sheet to stout. Default: False')
-
-
-  (options, args) = parser.parse_args()
-
-  if options.outdir[-1] <> '/':
-    options.outdir = options.outdir + '/'
-
-  if options.flowcell is None:
-    parser.print_help()
-    exit(-1)
-  return options
-
-def parseConfigurationFile(propertyFile='etc/createSampleSheet.properties'):
-  '''
-  Parses the given config files and returns the values
-  '''
-  config = SafeConfigParser()
-  config.read(propertyFile)
-  config.sections()
-  return config
-
-def readConfig(logger):
-  GENERAL = 'GENERAL'
-  OPENBIS = 'OPENBIS'
-  ILLUMINA = 'ILLUMINA'
-
-  logger.info('Reading config file')
-  configMap = {}
-
-  configParameters = parseConfigurationFile()
-  configMap['facilityName'] = configParameters.get(GENERAL, 'facilityName')
-  configMap['facilityNameShort'] = configParameters.get(GENERAL, 'facilityNameShort')
-  configMap['facilityInstitution'] = configParameters.get(GENERAL, 'facilityInstitution')
-  configMap['mailList'] = configParameters.get(GENERAL, 'mailList')
-  configMap['mailFrom'] = configParameters.get(GENERAL, 'mailFrom')
-  configMap['smptHost'] = configParameters.get(GENERAL, 'smptHost')
-  configMap['SampleSheetFileName'] = configParameters.get(GENERAL, 'SampleSheetFileName')
-  configMap['separator'] = configParameters.get(GENERAL, 'separator')
-  configMap['indexSeparator'] = configParameters.get(GENERAL, 'indexSeparator')
-
-  configMap['openbisUserName'] = configParameters.get(OPENBIS, 'openbisUserName')
-  configMap['openbisPassword'] = configParameters.get(OPENBIS, 'openbisPassword', raw=True)
-  configMap['openbisServer'] = configParameters.get(OPENBIS, 'openbisServer')
-  configMap['connectionTimeout'] = configParameters.getint(OPENBIS, 'connectionTimeout')
-  configMap['illuminaFlowCellTypeName'] = configParameters.get(OPENBIS, 'illuminaFlowCellTypeName')
-  configMap['index1Name'] = configParameters.get(OPENBIS, 'index1Name')
-  configMap['index2Name'] = configParameters.get(OPENBIS, 'index2Name')
-  configMap['index1Length'] = configParameters.get(OPENBIS, 'index1Length')
-  configMap['index2Length'] = configParameters.get(OPENBIS, 'index2Length')
-  configMap['endType'] = configParameters.get(OPENBIS, 'endType')
-  configMap['cycles'] = configParameters.get(OPENBIS, 'cycles')
-  configMap['controlLane'] = configParameters.get(OPENBIS, 'controlLane')
-  configMap['ncbi'] = configParameters.get(OPENBIS, 'ncbi')
-  configMap['externalSampleName'] = configParameters.get(OPENBIS, 'externalSampleName')
-  configMap['laneCount'] = configParameters.get(OPENBIS, 'laneCount')
-
-  configMap['hiSeqNames'] = configParameters.get(ILLUMINA, 'hiSeqNames')
-  configMap['miSeqNames'] = configParameters.get(ILLUMINA, 'miSeqNames')
-  configMap['hiSeqHeader'] = configParameters.get(ILLUMINA, 'hiSeqHeader')
-
-  configMap['miSeqHeaderSection'] = configParameters.get(ILLUMINA, 'miSeqHeaderSection')
-  configMap['miSeqReadsSection'] = configParameters.get(ILLUMINA, 'miSeqReadsSection')
-  configMap['miSeqSettingsSection'] = configParameters.get(ILLUMINA, 'miSeqSettingsSection')
-  configMap['miSeqWorkflow'] = configParameters.get(ILLUMINA, 'miSeqWorkflow')
-  configMap['miSeqApplication'] = configParameters.get(ILLUMINA, 'miSeqApplication')
-  configMap['miSeqChemistry'] = configParameters.get(ILLUMINA, 'miSeqChemistry')
-
-  configMap['nexteraAdapter'] = configParameters.get(ILLUMINA, 'nexteraAdapter')
-  configMap['iemFileVersion'] = configParameters.get(ILLUMINA, 'iemFileVersion')
-
-  configMap['configureBclToFastqPath'] = configParameters.get(ILLUMINA, 'configureBclToFastqPath')
-  configMap['failedReads'] = configParameters.get(ILLUMINA, 'failedReads')
-  configMap['clusterCount'] = configParameters.get(ILLUMINA, 'clusterCount')
-  configMap['clusterCountNumber'] = configParameters.get(ILLUMINA, 'clusterCountNumber')
-  configMap['outputDir'] = configParameters.get(ILLUMINA, 'outputDir')
-  configMap['sampleSheetName'] = configParameters.get(ILLUMINA, 'sampleSheetName')
-  configMap['baseMask'] = configParameters.get(ILLUMINA, 'baseMask')
-
-  return configMap
-
-def getDate():
-  d = datetime.now()
-  return d.strftime('%A, %d of %B %Y')
-
-def sanitizeString(myString):
-  return re.sub('[^A-Za-z0-9]+', '_', myString)
-
-def getVocabulary(vocabularyCode, service):
-  ''' Returns the vocabulary terms and vocabulary labels of a vocabulary in a dictionary
-      specified by the parameter vocabularyCode
-      '''
-  terms = []
-  vocabularies = service.listVocabularies()
-  vocabularyDict = {}
-  for vocabulary in vocabularies:
-    if (vocabulary.getCode() == vocabularyCode):
-      terms = vocabulary.getTerms()
-  if terms:
-    for term in terms:
-      vocabularyDict[term.getCode()] = term.getLabel()
-  else:
-    print ('No vocabulary found for ' + vocabularyCode)
-  return vocabularyDict
-
-def sendMail(emails, files, flowCellName, configMap, logger):
-  '''
-  Send out an email to the specified recipients
-  '''
-  COMMASPACE = ', '
-  listofEmails = emails.split()
-
-  msg = MIMEMultipart()
-  msg['From'] = configMap['mailFrom']
-  msg['To'] = COMMASPACE.join(listofEmails)
-  msg['Date'] = formatdate(localtime=True)
-  msg['Subject'] = 'Generated Sample Sheet for flowcell ' + flowCellName
-
-  msg.attach(MIMEText('Sample Sheet for ' + flowCellName + ' attached.'))
-
-  for f in files:
-        part = MIMEBase('application', 'octet-stream')
-        part.set_payload(open(f, 'rb').read())
-        Encoders.encode_base64(part)
-        part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f))
-        msg.attach(part)
-
-  smtp = smtplib.SMTP(configMap['smptHost'])
-  smtp.sendmail(configMap['mailFrom'], listofEmails, msg.as_string())
-  smtp.close()
-  logger.info('Sent email to ' + COMMASPACE.join(listofEmails))
-
-
-def getFlowCell (illuminaFlowCellTypeName, flowCellName, service, logger):
-  '''
-  Getting the the matching FlowCell
-  '''
-  sc = SearchCriteria();
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, illuminaFlowCellTypeName));
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCellName));
-  foundSample = service.searchForSamples(sc)
-  try:
-    assert foundSample.size() == 1
-  except AssertionError:
-    print (str(foundSample.size()) + ' flow cells found which match.')
-    exit(1)
-
-  logger.info('Found ' + foundSample[0].getCode() + ' in openBIS')
-  # Search for contained samples
-  sampleSc = SearchCriteria()
-  sampleSc.addSubCriteria(SearchSubCriteria.createSampleContainerCriteria(sc))
-  foundContainedSamples = service.searchForSamples(sampleSc)
-
-  return foundSample[0], foundContainedSamples
-
-
-def getParents(sampleName, service):
-  '''
-  Returns a list of parents of a sample 
-  '''
-  sc = SearchCriteria();
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleName));
-  foundSample = service.searchForSamples(sc)
-
-  try:
-    assert foundSample.size() == 1
-  except AssertionError:
-    print (str(foundSample.size()) + ' flow lanes found which match.')
-
-  # set the criteria for getting the parents when providing the child name
-  sampleSc = SearchCriteria()
-  sampleSc.addSubCriteria(SearchSubCriteria.createSampleChildCriteria(sc))
-  foundParentSamples = service.searchForSamples(sampleSc)
-
-  return foundParentSamples
-
-def getContainedSampleProperties(containedSamples, service):
-
-  # TODO: update description and function name
-  '''   
-  Takes a  list of contained samples, retrieves the parents and their properties and returns it
-  as a dictionary. The key is the sample name, the value is a list of the properties
-  
-  Additionally a dictionary with the lane (key) and the number of samples (value) is returned  
-  '''
-  parentDict = {}
-  samplesPerLaneDict = {}
-
-  for lane in containedSamples:
-    parents = getParents (lane.getCode(), service)
-
-    try:
-      assert parents.size() >= 1
-    except AssertionError:
-      print (str(parents.size()) + ' parents found for lane ' + lane.getCode())
-
-    samplesPerLaneDict[lane.getCode()[-1]] = len(parents)
-
-    for parent in parents:
-      parentCode = parent.getCode()
-      parentProperties = parent.getProperties()
-      propertyDict = {}
-      for property in parentProperties:
-        propertyDict[property] = parentProperties.get(property)
-
-      propertyDict['LANE'] = lane.getCode()
-
-      myKey = sanitizeString(parentCode + '_' + lane.getCode())
-      parentDict[myKey] = propertyDict
-
-  return parentDict, samplesPerLaneDict
-
-
-def convertSampleToDict(foundFlowCell):
-  '''
-  converts <type 'ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample'> to a python dict
-  '''
-  flowCellDict = {}
-  fcProperties = foundFlowCell.getProperties()
-  for property in fcProperties:
-    flowCellDict[property] = fcProperties.get(property)
-  flowCellDict['Project'] = foundFlowCell.getExperimentIdentifierOrNull().split('/')[-1]
-  flowCellDict['Name'] = foundFlowCell.getIdentifier().split('/')[-1]
-  return flowCellDict
-
-
-def createDemultiplexCommands(myoptions, configMap, laneIndexDict, endType, cycles, lane,
-                              myFileName, indexRead1Length, indexRead2Length):
-  '''
-  Builds up a command line for the demultiplexing of a single flow lane
-  '''
-
-  newline = lineending[myoptions.lineending]
-  indexlength = laneIndexDict[lane][0]
-  if laneIndexDict[lane][1] == 'DUALINDEX':
-    basesMask = 'Y' + cycles + COMMA + 'I' + str(indexlength / 2) + 'n' + COMMA + 'I' + \
-                str(indexlength / 2) + 'n'
-  else:
-    basesMask = 'Y' + cycles + COMMA + 'I' + str(indexlength) + (indexRead1Length - indexlength + 1)*'n'
-  if endType == 'PAIRED_END':
-    basesMask = basesMask + COMMA + 'Y' + cycles
-  return ([' '.join([configMap['configureBclToFastqPath'], configMap['failedReads'],
-                     configMap['clusterCount'], configMap['clusterCountNumber'],
-                     configMap['outputDir'], '../../../Unaligned_' + str(lane), configMap['sampleSheetName'],
-                     myFileName, configMap['baseMask'], basesMask, "--no-eamss", newline])])
-
-def createHiseqSampleSheet(parentDict, flowCellDict, samplesPerLaneDict, flowCellName, configMap,
-                           logger, myoptions):
-  '''
-  Builds up a dictionary with all entries in the Sample Sheet
-  '''
-  sampleSheetDict = {}
-  laneIndexDict = {}
-  # the illlumina pipeline uses always one base less than the sequencer is sequencing
-  DEMULTIPLEX_INDEX_LENGTH_PENALTY = -1
-  
-  logger.debug (parentDict)
-  logger.debug(samplesPerLaneDict)
-
-  # Making sure the header is always a the top of the file
-  sampleSheetDict[u'!'] = ([configMap['hiSeqHeader']])
-  endType = flowCellDict[configMap['endType']]
-  cycles = flowCellDict[configMap['cycles']]
-
-  index1Name = configMap['index1Name']
-  index2Name = configMap['index2Name']
-
-  indexRead1Length = int(flowCellDict[configMap['index1Length']]) + DEMULTIPLEX_INDEX_LENGTH_PENALTY
-  try:
-    indexRead2Length = int(flowCellDict[configMap['index2Length']]) + DEMULTIPLEX_INDEX_LENGTH_PENALTY
-  except:
-    pass
-
-  for key in parentDict.keys():
-    index = ''
-    dualIndex = False
-    lane = parentDict[key]['LANE'][-1:]
-    
-    if index1Name in parentDict[key] and indexRead1Length > 0 and (parentDict[key])[index1Name] != 'NOINDEX':
-      index = parentDict[key][index1Name][0:indexRead1Length]
-
-    if index2Name in parentDict[key] and indexRead2Length > 0 and (parentDict[key])[index2Name] != 'NOINDEX':
-      index = index + configMap['indexSeparator'] + parentDict[key][index2Name][0:indexRead2Length]
-      dualIndex = True
-
-    # little hack to make the non-indexed control lane and non-indexed runs also part of
-    # the sample sheet
-    # eventually hide in a function
-       
-    if len(index) == 0:
-      # more than one samples in an non-indexed lane 
-      if samplesPerLaneDict[lane] > 1:
-        # if it is not a PhiX  and not a Pool Sample
-        if (parentDict[key]['NCBI_ORGANISM_TAXONOMY'] != '10847') and parentDict[key]['BARCODE_COMPLEXITY_CHECKER'] == 'No Pool':
-          # then just use this sample and skip the others if there are more
-          samplesPerLaneDict[lane] = 0
-          index = ' '
-      
-      # only one non-indexed sample in the lane   
-      elif samplesPerLaneDict[lane] == 1:
-        index = ' '
-    
-
-    # Set flag if this lane is a control lane. has no influence on the result, but makes reading
-    # the demultiplex statistics easier
-    try:
-      if lane == flowCellDict[configMap['controlLane']]:
-        control = 'Y'
-      else:
-        control = 'N'
-    except:
-      control = 'N'     
-
-    if len(index) > 0:
-      sampleSheetDict[lane + '_' + key] = [flowCellName + COMMA
-                            + lane + COMMA
-                            + key + COMMA
-                            + parentDict[key][configMap['ncbi']] + COMMA
-                            + index + COMMA
-                            + sanitizeString(parentDict[key][configMap['externalSampleName']]) + COMMA
-                            + control + COMMA
-                            + endType + '_' + cycles + COMMA
-                            + configMap['facilityInstitution'] + COMMA
-                            + key.split('_', 3)[-1]
-                            ]
-
-      sampleEndType = 'DUALINDEX' if dualIndex else 'SINGLEINDEX'
-      laneIndexDict[int(lane)] = [len(index), sampleEndType]
-
-  sortedSampleSheetList = sampleSheetDict.keys()
-  sortedSampleSheetList.sort()
-
-    # if single lane demultiplexing is activated
-  if myoptions.singlelane:
-    demultiplexCommandList = []
-    for lane in range(1, int(flowCellDict[configMap['laneCount']]) + 1):
-      laneSeparatedList = [sample for sample in sortedSampleSheetList if sample[0] == str(lane)]
-      # Making sure the header is also included at the top
-      laneSeparatedList.insert(0, u'!')
-      logger.debug(laneSeparatedList)
-      myFileName = myoptions.outdir + configMap['SampleSheetFileName'] + '_' + str(lane) + '_' + \
-                   flowCellName + '.csv'
-
-      demultiplexCommandList.append(createDemultiplexCommands(myoptions, configMap, laneIndexDict,
-                                         endType, cycles, lane, myFileName, indexRead1Length, indexRead2Length))
-      SamplesheetFile = writeSampleSheet(myoptions, logger, sampleSheetDict, laneSeparatedList,
-                       fileName=myFileName)
-    writeDemultiplexCommandList(logger, demultiplexCommandList,
-                                fileName=myoptions.outdir + flowCellName + '_DemultiplexCommandList.txt')
-    pickleDemultiplexCommandList(logger, demultiplexCommandList,
-                                fileName=myoptions.outdir + flowCellName + '_DemultiplexCommandList.pickle')
-  else:
-    myFileName = myoptions.outdir + configMap['SampleSheetFileName'] + '_' + \
-                   flowCellName + '.csv'
-    writeSampleSheet(myoptions, logger, sampleSheetDict, sortedSampleSheetList,
-                     fileName=myFileName)
-  return sampleSheetDict, myFileName
-
-def writeDemultiplexCommandList(logger, demultiplexCommandList,
-                                fileName):
-  try:
-    with open(fileName, 'wb') as demuxFile:
-      for listElement in demultiplexCommandList:
-        demuxFile.write(*listElement)
-
-      logger.info('Writing file ' + fileName)
-      print('Written ' + fileName)
-  except IOError, err:
-    logger.error('File error: ' + str(err))
-    print ('File error: ' + str(err))
-
-def pickleDemultiplexCommandList(logger, demultiplexCommandList, fileName):
-  import pickle
-
-  try:
-    with open(fileName, 'w') as pickleDemux:
-      pickle.dump(demultiplexCommandList, pickleDemux)
-    logger.info('Writing file ' + fileName)
-  except IOError, err:
-    logger.error('File error: ' + str(err))
-    print ('File error: ' + str(err))
-
-
-
-def writeSampleSheet(myoptions, logger, sampleSheetDict, sortedSampleSheetList, fileName):
-  '''
-  Writes the given dictionary out to a csv file. The additional list is sorted and is used to write
-  the dictionary in a sorted order.   
-  '''
-  newline = lineending[myoptions.lineending]
-  try:
-    with open(fileName, 'w') as sampleSheetFile:
-      for listElement in sortedSampleSheetList:
-        if myoptions.verbose:
-          print sampleSheetDict[listElement][0]
-        sampleSheetFile.write(sampleSheetDict[listElement][0] + newline)
-
-      logger.info('Writing file ' + fileName)
-  except IOError, err:
-    logger.error('File error: ' + str(err))
-    print ('File error: ' + str(err))
-
-def writeMiSeqSampleSheet(sampleSheetDict, headerList, flowCellName, myoptions, logger, fileName):
-  '''
-  Writes the given dictionary to a csv file. The order does not matter. As the header is not fixed
-  we first need to write the headerList in the file. This is specific to MiSeq
-  '''
-  newline = lineending[myoptions.lineending]
-  try:
-    with open(fileName, 'wb') as sampleSheetFile:
-      for listElement in headerList:
-        if myoptions.verbose:
-          print listElement
-        sampleSheetFile.write(listElement + newline)
-      for sample in sampleSheetDict:
-        if myoptions.verbose:
-          print sampleSheetDict[sample][0]
-        sampleSheetFile.write(sampleSheetDict[sample][0] + newline)
-
-      logger.info('Writing file ' + fileName)
-
-  except IOError:
-    logger.error('File error: ' + str(err))
-    print ('File error: ' + str(err))
-
-  return fileName
-
-
-
-def createMiSeqSampleSheet(parentDict, flowCellDict, configMap, index1Vocabulary, index2Vocabulary,
-                            flowCellName, logger, myoptions):
-  '''
-  '''
-  sampleSheetDict = {}
-  headerList = []
-
-  separator = configMap['separator']
-
-  miSeqHeaderSection = configMap['miSeqHeaderSection'].split(separator)
-  miSeqHeaderSection.reverse()
-  headerList = [miSeqHeaderSection.pop().strip()]
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + configMap['iemFileVersion'])
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + configMap['facilityInstitution'])
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + configMap['facilityName'])
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + flowCellDict['Name'])
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + datetime.now().strftime('%d.%m.%Y'))
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + configMap['miSeqWorkflow'])
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + configMap['miSeqApplication'])
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + '')
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + flowCellDict[configMap['endType']] + '_' + flowCellDict[configMap['cycles']])
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + configMap['miSeqChemistry'])
-  headerList.append('')
-
-  miSeqReadsSection = configMap['miSeqReadsSection'].split(separator)
-  miSeqReadsSection.reverse()
-  headerList.append(miSeqReadsSection.pop())
-  headerList.append(flowCellDict[configMap['cycles']])
-  if (flowCellDict[configMap['endType']] == 'PAIRED_END'):
-    headerList.append(flowCellDict[configMap['cycles']])
-  headerList.append('')
-
-
-  miSeqSettingsSection = configMap['miSeqSettingsSection'].split(separator)
-  miSeqSettingsSection.reverse()
-  headerList.append(miSeqSettingsSection.pop())
-#  if ('nextera' in (separator + parentDict.itervalues().next()['KIT'].lower())):
-#    headerList.append(configMap['nexteraAdapter'])
-#  if ('truseq' in (separator + parentDict.itervalues().next()['KIT'].lower())):
-#    headerList.append(configMap['truSeqAdapter'])
-  headerList.append('')
-
-  miSeqDataSection = configMap['miSeqDataSection'].split(',')
-  miSeqDataSection.reverse()
-  headerList.append(miSeqDataSection.pop())
-  headerList.append(','.join(miSeqDataSection.pop().strip().split()))
-
-  for key in parentDict.keys():
-    lane = parentDict[key]['LANE'][-1:]
-    # If no index then just skip this  sample
-    if configMap['index1Name'] not in parentDict[key]:
-      continue
-
-
-    index1 = parentDict[key][configMap['index1Name']]
-    index2 = parentDict[key][configMap['index2Name']]
-
-    sampleSheetDict[lane + '_' + key] = [key + separator
-                            + sanitizeString(parentDict[key][configMap['externalSampleName']]) + separator
-                            + separator
-                            + separator
-                            + index1Vocabulary[index1] + separator
-                            + index1 + separator
-                            + index2Vocabulary[index2].split()[2] + separator
-                            + index2 + separator
-                            + separator
-                            + key + '_' + flowCellName
-                            ]
-  myFileName = myoptions.outdir + configMap['SampleSheetFileName'] + '_' + \
-                   flowCellName + '.csv'
-
-  sampleSheetFile = writeMiSeqSampleSheet(sampleSheetDict, headerList, flowCellName,
-                                          myoptions, logger, fileName=myFileName)
-  return sampleSheetFile
-
-'''
-Main script
-'''
-def main ():
-
-  logger = setUpLogger('log/')
-  logger.info('Started Creation of Sample Sheet...')
-
-  myoptions = parseOptions(logger)
-
-  if myoptions.debug:
-    logger.setLevel(logging.DEBUG)
-
-  flowCellName = myoptions.flowcell
-  configMap = readConfig(logger)
-  service = login(logger, configMap)
-
-  foundFlowCell, containedSamples = getFlowCell(configMap['illuminaFlowCellTypeName'], flowCellName,
-                                                service, logger)
-  parentDict, samplesPerLaneDict = getContainedSampleProperties(containedSamples, service)
-  logger.info('Found ' + str(len(parentDict)) + ' samples on the flow cell ' + flowCellName)
-
-  # take this variable from the FlowCellDict
-
-  #flowCellName = foundFlowCell.getCode().split('_')[3][1:]
-  flowCellName = foundFlowCell.getCode()
-  if '-' in flowCellName:
-    flowCellName = flowCellName.split('_')[3]
-  else:
-    flowCellName = flowCellName.split('_')[3][1:]
-
-  flowCellDict = convertSampleToDict(foundFlowCell)
-  
-  logger.debug(flowCellDict)
-
-  hiseqList = configMap['hiSeqNames'].split()
-  miseqList = configMap['miSeqNames'].split()
-
-  runFolderName = flowCellDict['Name']
-
-#  for hiseq in hiseqList:
-#    if hiseq in runFolderName:
-#      logger.info('Detected HiSeq run.')
-#      SampleSheetFile = createHiseqSampleSheet(parentDict, flowCellDict, samplesPerLaneDict, flowCellName, configMap,
-#                         logger, myoptions)
-#      break
-
-  sampleSheetDict, SampleSheetFile = createHiseqSampleSheet(parentDict, flowCellDict, samplesPerLaneDict, flowCellName, configMap,
-                         logger, myoptions)
-  logger.debug(sampleSheetDict)
-#  for miseq in miseqList:
-#    if miseq in runFolderName:
-#      logger.info('Detected MiSeq run.')
-#      index1Vocabulary = getVocabulary(configMap['index1Name'], service)
-#      index2Vocabulary = getVocabulary(configMap['index2Name'], service)
-#      SampleSheetFile = createMiSeqSampleSheet(parentDict, flowCellDict, configMap,
-#                                    index1Vocabulary, index2Vocabulary, flowCellName, logger, myoptions)
-#      break
-
-  if myoptions.maillist:
-    sendMail(configMap['mailList'], [SampleSheetFile], flowCellName, configMap, logger)
-
-  logout(service, logger)
-
-
-if __name__ == "__main__":
-    main()
diff --git a/deep_sequencing_unit/source/Jython/createSampleSheetTest.py b/deep_sequencing_unit/source/Jython/createSampleSheetTest.py
deleted file mode 100644
index 0d8b17b4555..00000000000
--- a/deep_sequencing_unit/source/Jython/createSampleSheetTest.py
+++ /dev/null
@@ -1,186 +0,0 @@
-import unittest
-from createSampleSheet import *
-from optparse import OptionParser
-
-def setUpLogger(logPath, logLevel=logging.INFO):
-  logFileName = 'createSampleSheet'
-  d = datetime.now()
-  logFileName = logFileName + '_' + d.strftime('%Y-%m-%d_%H_%M_%S') + '.log'
-  logging.basicConfig(filename=logPath + logFileName,
-                      format='%(asctime)s [%(levelname)s] %(message)s', level=logLevel)
-  logger = logging.getLogger(logFileName)
-  return logger
-
-def setUpParser(self):
-  '''is there a more elegant way to mock parser object, except the v3.3
-   unitest.mock object library?'''
-
-  self.parser = OptionParser()
-  self.parser.add_option('--verbose', dest='verbose')
-  self.parser.add_option('--lineending', dest='lineending')
-  self.parser.add_option('--maillist', dest='maillist')
-  self.parser.add_option('--singlelane', dest='singlelane')
-  self.parser.add_option('--flowcell', dest='flowcell')
-  self.parser.add_option('--outdir', dest='outdir')
-  self.parser.add_option('--debug', dest='debug')
-  self.parser.verbose = False
-  self.parser.lineending = 'linux'
-  self.parser.maillist = False
-  self.parser.singlelane = False
-  self.parser.flowcell = '140127_SN792_0312_AC36DWACXX'
-  self.parser.outdir = './'
-  self.parser.debug = True
-  return self.parser
-
-class TestCreateHiseqSampleSheet(unittest.TestCase):
-    '''
-    There are three cases currently covered:
-    Case1: PhiX and one or more other non-barcoded samples in a lane -> only one sample in the Sample Sheet
-    Case2: PhiX and one ore more barcoded samples in a lane -> all samples but PhiX in the Sample Sheet
-    Case3: PhiX in a lane -> Phix in the Sample Sheet
-    
-    Also no Pools are allowed these are only relevant for the lab 
-    '''
-
-    def setUp(self):
-      
-      self.parser = setUpParser(self)
-      self.logger = setUpLogger('log/')
-      self.configMap = {'illuminaFlowCellTypeName':'ILLUMINA_FLOW_CELL', 'facilityName':'Quantitative Genomics Facility', 'index1Length':'INDEXREAD', 'clusterCountNumber':'50000000', 'connectionTimeout':60000, 'facilityInstitution':'ETHZ_D-BSSE', 'index1Name':'BARCODE', 'configureBclToFastqPath':'/usr/local/bin/configureBclToFastq.pl', 'smptHost':'smtp0.ethz.ch', 'miSeqApplication':'FASTQ Only', 'ncbi':'NCBI_ORGANISM_TAXONOMY', 'failedReads':'--with-failed-reads', 'nexteraAdapter':'Adapter,CTGTCTCTTATACACATCT', 'cycles':'CYCLES_REQUESTED_BY_CUSTOMER', 'miSeqChemistry':'Default', 'outputDir':'--output-dir', 'openbisUserName':'tracker', 'miSeqWorkflow':'GenerateFASTQ', 'openbisPassword':"*hsh8Fs['h9#$%^&", 'index2Length':'INDEXREAD2', 'mailFrom':'SampleSheetCreator@miseq.bsse.ethz.ch', 'hiSeqHeader':'FCID,Lane,SampleID,SampleRef,Index,Description,Control,Recipe,Operator,SampleProject', 'externalSampleName':'EXTERNAL_SAMPLE_NAME', 'SampleSheetFileName':'SampleSheet', 'clusterCount':'--fastq-cluster-count', 'index2Name':'INDEX2', 'mailList':'manuel.kohler@bsse.ethz.ch', 'miSeqNames':'M00721 M00100', 'endType':'END_TYPE', 'miSeqSettingsSection':'[Settings], Adapter', 'facilityNameShort':'QGF', 'baseMask':'--use-bases-mask', 'miSeqReadsSection':'[Reads]', 'laneCount':'LANECOUNT', 'openbisServer':'http://openbis-dsu.bsse.ethz.ch:8080', 'iemFileVersion':'4', 'miSeqHeaderSection':'[Header], IEMFileVersion, Investigator Name, Project Name,Experiment Name, Date, Workflow, Application, Assay, Description, Chemistry', 'controlLane':'CONTROL_LANE', 'indexSeparator':'-', 'separator':',', 'hiSeqNames':'SN792 SN100', 'sampleSheetName':'--sample-sheet'}
-
-      self.flowCellDict = {u'CONTROL_LANE':u'5', u'RUNNINGTIME':u'7 days, 18:25:19', u'SEQUENCER_FINISHED':u'2014-02-04 07:40:26 +0100', u'ILLUMINA_PIPELINE_VERSION':u'1.17.21.3', u'END_TYPE':u'SINGLE_READ', u'FLOW_CELL_SEQUENCED_ON':u'2014-01-27 13:15:07 +0100', u'INDEXREAD2':u'0', u'SBS_KIT':u'TruSeq SBS Kit v3', u'FLOWCELLTYPE':u'HiSeq Flow Cell v3', u'SEQUENCER':u'SN792', u'TILECOUNT':u'16', u'LANECOUNT':u'8', 'Name':u'140127_SN792_0312_AC36DWACXX', u'SEQUENCER_RUN_TIME':u'7.768', u'CYCLES_REQUESTED_BY_CUSTOMER':u'151', u'INDEXREAD':u'7', u'SWATHCOUNT':u'3', u'SURFACECOUNT':u'2', 'Project':u'2014.01'}
-      self.parentDict = {u'BSSE_QGF_16252_140127_SN792_0312_AC36DWACXX_2':{u'QC_AT_DBSSE':u'true', u'FRAGMENT_SIZE_PREPARED_ILLUMINA':u'402', u'UNIQUE_BARCODES':u'OK', u'UL_EB':u'            19.0', u'FLOW_CELL_PROPERTIES':u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 151\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA':u'10.1', u'CELL_PLASTICITY_SYSTEMSX':u'false', u'NCBI_ORGANISM_TAXONOMY':u'481459', u'CONCENTRATION_FLOWLANE':u'12', u'LIBRARY_PROCESSING_SUCCESSFUL':u'false', u'HOW_OFTEN_SEQUENCED':u'1', u'CYCLES':u'157', u'BAREBACKED':u'false', u'SEQUENCING_APPLICATION':u'GENOMIC_DNA_SEQ', u'CLUSTER_STATION':u'CBOT', u'END_TYPE':u'SINGLE_READ', u'BARCODE_COMPLEXITY_CHECKER':u'No Pool', u'CONTACT_PERSON_EMAIL':u'marius.roesti@unibas.ch', u'INVOICE':u'false', 'LANE':u'140127_SN792_0312_AC36DWACXX:2', u'CLUSTER_GENERATION_KIT_VERSION':u'TRUSEQ_CBOT_HS_V3', u'PREPARED_BY':u'Marius', u'LIBRARY_PROCESSING_FAILED':u'false', u'CONTACT_PERSON_NAME':u'Marius R\xf6sti', u'REQUIRED_LANES':u'1', u'NM_DNA':u'           38.65', u'CYCLES_REQUESTED_BY_CUSTOMER':u'150', u'LIBRARY_PROCESSING_POSSIBLE':u'false', u'NOTES':u'15% Phix spike-in', u'PRINCIPAL_INVESTIGATOR_NAME':u'Walter Salzburger', u'NANO_DROP':u'CONCND3300', u'AFFILIATION':u'UNIVERSITY_BASEL', u'SBS_SEQUENCING_KIT_VERSION':u'SBS_HS_V3', u'EXTERNAL_SAMPLE_NAME':u'Ga_lib_34', u'BIOLOGICAL_SAMPLE_ARRIVED':u'2013-12-06 12:00:00 +0100', u'UL_EB_MISEQ':u'            17.9', u'KIT':u'NONE', u'PRINCIPAL_INVESTIGATOR_EMAIL':u'walter.salzburger@unibas.ch', u'UL_DNA':u'             1.0', u'NUMBER_OF_ATTACHMENTS':u'0', u'SAMPLE_KIND':u'FRAGMENTED_GENOMIC_DNA', u'CS_PROTOCOL_VERSION':u'v8', u'UL_STOCK':u'20', u'UL_DNA_MISEQ':u'             2.1'}, u'BSSE_QGF_16256_140127_SN792_0312_AC36DWACXX_7':{u'QC_AT_DBSSE':u'true', u'FRAGMENT_SIZE_PREPARED_ILLUMINA':u'363', u'UNIQUE_BARCODES':u'OK', u'UL_EB':u'            19.0', u'FLOW_CELL_PROPERTIES':u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 151\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA':u'9.1', u'CELL_PLASTICITY_SYSTEMSX':u'false', u'NCBI_ORGANISM_TAXONOMY':u'481459', u'CONCENTRATION_FLOWLANE':u'12', u'LIBRARY_PROCESSING_SUCCESSFUL':u'false', u'HOW_OFTEN_SEQUENCED':u'1', u'CYCLES':u'157', u'BAREBACKED':u'false', u'SEQUENCING_APPLICATION':u'GENOMIC_DNA_SEQ', u'CLUSTER_STATION':u'CBOT', u'END_TYPE':u'SINGLE_READ', u'BARCODE_COMPLEXITY_CHECKER':u'No Pool', u'CONTACT_PERSON_EMAIL':u'marius.roesti@unibas.ch', u'INVOICE':u'false', 'LANE':u'140127_SN792_0312_AC36DWACXX:7', u'CLUSTER_GENERATION_KIT_VERSION':u'TRUSEQ_CBOT_HS_V3', u'PREPARED_BY':u'Marius', u'LIBRARY_PROCESSING_FAILED':u'false', u'CONTACT_PERSON_NAME':u'Marius R\xf6sti', u'REQUIRED_LANES':u'1', u'NM_DNA':u'           38.57', u'CYCLES_REQUESTED_BY_CUSTOMER':u'150', u'LIBRARY_PROCESSING_POSSIBLE':u'false', u'NOTES':u'15% Phix spike-in', u'PRINCIPAL_INVESTIGATOR_NAME':u'Walter Salzburger', u'NANO_DROP':u'CONCND3300', u'AFFILIATION':u'UNIVERSITY_BASEL', u'SBS_SEQUENCING_KIT_VERSION':u'SBS_HS_V3', u'EXTERNAL_SAMPLE_NAME':u'Ga_lib_38', u'BIOLOGICAL_SAMPLE_ARRIVED':u'2013-12-06 12:00:00 +0100', u'UL_EB_MISEQ':u'            17.9', u'KIT':u'NONE', u'PRINCIPAL_INVESTIGATOR_EMAIL':u'walter.salzburger@unibas.ch', u'UL_DNA':u'             1.0', u'NUMBER_OF_ATTACHMENTS':u'0', u'SAMPLE_KIND':u'FRAGMENTED_GENOMIC_DNA', u'CS_PROTOCOL_VERSION':u'v8', u'UL_STOCK':u'20', u'UL_DNA_MISEQ':u'             2.1'}, u'BSSE_QGF_19990_140127_SN792_0312_AC36DWACXX_5':{u'QC_AT_DBSSE':u'false', u'UNIQUE_BARCODES':u'OK', u'UL_EB':u'0', u'FLOW_CELL_PROPERTIES':u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'CELL_PLASTICITY_SYSTEMSX':u'false', u'NCBI_ORGANISM_TAXONOMY':u'481459', u'KIT_PREPARED':u'2013-12-09 12:00:00 +0100', u'LIBRARY_PROCESSING_SUCCESSFUL':u'false', u'HOW_OFTEN_SEQUENCED':u'2', u'BAREBACKED':u'false', u'SEQUENCING_APPLICATION':u'GENOMIC_DNA_SEQ', u'END_TYPE':u'SINGLE_READ', u'BARCODE_COMPLEXITY_CHECKER':u'OK', u'CONTACT_PERSON_EMAIL':u'marius.roesti@unibas.ch', u'INVOICE':u'false', 'LANE':u'140127_SN792_0312_AC36DWACXX:5', u'PREPARED_BY':u'Ina', u'LIBRARY_PROCESSING_FAILED':u'false', u'CONTACT_PERSON_NAME':u'Marius R\xf6sti', u'NM_DNA':u'0', u'LIBRARY_PROCESSING_POSSIBLE':u'false', u'PRINCIPAL_INVESTIGATOR_NAME':u'Walter Salzburger', u'NANO_DROP':u'CONCND3300', u'AFFILIATION':u'UNIVERSITY_BASEL', u'DNA_CONCENTRATION_OF_LIBRARY':u'2', u'EXTERNAL_SAMPLE_NAME':u'Pool201_293', u'BIOLOGICAL_SAMPLE_ARRIVED':u'2013-12-05 12:00:00 +0100', u'KIT':u'NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1', u'UL_EB_MISEQ':u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL':u'walter.salzburger@unibas.ch', u'UL_DNA':u'0', u'NUMBER_OF_ATTACHMENTS':u'0', u'SAMPLE_KIND':u'GENOMIC_DNA', u'UL_DNA_MISEQ':u'0'}, u'BSSE_QGF_16028_140127_SN792_0312_AC36DWACXX_6':{u'QC_AT_DBSSE':u'false', u'UNIQUE_BARCODES':u'OK', u'UL_EB':u'0', u'FLOW_CELL_PROPERTIES':u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'CELL_PLASTICITY_SYSTEMSX':u'false', u'NCBI_ORGANISM_TAXONOMY':u'10847', u'LIBRARY_PROCESSING_SUCCESSFUL':u'false', u'HOW_OFTEN_SEQUENCED':u'24', u'BAREBACKED':u'false', u'SEQUENCING_APPLICATION':u'GENOMIC_DNA_SEQ', u'BARCODE_COMPLEXITY_CHECKER':u'No Pool', u'CONTACT_PERSON_EMAIL':u'ina.nissen@bsse.ethz.ch', u'INVOICE':u'false', 'LANE':u'140127_SN792_0312_AC36DWACXX:6', u'LOT':u'9306315', u'LIBRARY_PROCESSING_FAILED':u'false', u'CONTACT_PERSON_NAME':u'Ina Nissen', u'NM_DNA':u'0', u'LIBRARY_PROCESSING_POSSIBLE':u'false', u'PRINCIPAL_INVESTIGATOR_NAME':u'Christian Beisel', u'AFFILIATION':u'OTHER', u'EXTERNAL_SAMPLE_NAME':u'PhiX', u'KIT':u'NONE', u'UL_EB_MISEQ':u'0', u'UL_DNA':u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL':u'christian.beisel@bsse.ethz.ch', u'NUMBER_OF_ATTACHMENTS':u'0', u'SAMPLE_KIND':u'GENOMIC_DNA', u'UL_DNA_MISEQ':u'0'}, u'BSSE_QGF_16253_140127_SN792_0312_AC36DWACXX_3':{u'QC_AT_DBSSE':u'true', u'FRAGMENT_SIZE_PREPARED_ILLUMINA':u'383', u'UNIQUE_BARCODES':u'OK', u'UL_EB':u'            18.5', u'FLOW_CELL_PROPERTIES':u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 151\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA':u'6.5', u'CELL_PLASTICITY_SYSTEMSX':u'false', u'NCBI_ORGANISM_TAXONOMY':u'481459', u'CONCENTRATION_FLOWLANE':u'12', u'LIBRARY_PROCESSING_SUCCESSFUL':u'false', u'HOW_OFTEN_SEQUENCED':u'1', u'CYCLES':u'157', u'BAREBACKED':u'false', u'SEQUENCING_APPLICATION':u'GENOMIC_DNA_SEQ', u'CLUSTER_STATION':u'CBOT', u'END_TYPE':u'SINGLE_READ', u'BARCODE_COMPLEXITY_CHECKER':u'No Pool', u'CONTACT_PERSON_EMAIL':u'marius.roesti@unibas.ch', u'INVOICE':u'false', 'LANE':u'140127_SN792_0312_AC36DWACXX:3', u'CLUSTER_GENERATION_KIT_VERSION':u'TRUSEQ_CBOT_HS_V3', u'PREPARED_BY':u'Marius', u'LIBRARY_PROCESSING_FAILED':u'false', u'CONTACT_PERSON_NAME':u'Marius R\xf6sti', u'REQUIRED_LANES':u'1', u'NM_DNA':u'           26.11', u'CYCLES_REQUESTED_BY_CUSTOMER':u'150', u'LIBRARY_PROCESSING_POSSIBLE':u'false', u'NOTES':u'15% Phix spike-in', u'PRINCIPAL_INVESTIGATOR_NAME':u'Walter Salzburger', u'NANO_DROP':u'CONCND3300', u'AFFILIATION':u'UNIVERSITY_BASEL', u'SBS_SEQUENCING_KIT_VERSION':u'SBS_HS_V3', u'EXTERNAL_SAMPLE_NAME':u'Ga_lib_35', u'BIOLOGICAL_SAMPLE_ARRIVED':u'2013-12-06 12:00:00 +0100', u'UL_EB_MISEQ':u'            16.9', u'KIT':u'NONE', u'PRINCIPAL_INVESTIGATOR_EMAIL':u'walter.salzburger@unibas.ch', u'UL_DNA':u'             1.5', u'NUMBER_OF_ATTACHMENTS':u'0', u'SAMPLE_KIND':u'FRAGMENTED_GENOMIC_DNA', u'CS_PROTOCOL_VERSION':u'v8', u'UL_STOCK':u'20', u'UL_DNA_MISEQ':u'             3.1'}, u'BSSE_QGF_16254_140127_SN792_0312_AC36DWACXX_4':{u'QC_AT_DBSSE':u'true', u'FRAGMENT_SIZE_PREPARED_ILLUMINA':u'385', u'UNIQUE_BARCODES':u'OK', u'UL_EB':u'            19.0', u'FLOW_CELL_PROPERTIES':u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 151\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA':u'9.9', u'CELL_PLASTICITY_SYSTEMSX':u'false', u'NCBI_ORGANISM_TAXONOMY':u'481459', u'CONCENTRATION_FLOWLANE':u'12', u'LIBRARY_PROCESSING_SUCCESSFUL':u'false', u'HOW_OFTEN_SEQUENCED':u'1', u'CYCLES':u'157', u'BAREBACKED':u'false', u'SEQUENCING_APPLICATION':u'GENOMIC_DNA_SEQ', u'CLUSTER_STATION':u'CBOT', u'END_TYPE':u'SINGLE_READ', u'BARCODE_COMPLEXITY_CHECKER':u'No Pool', u'CONTACT_PERSON_EMAIL':u'marius.roesti@unibas.ch', u'INVOICE':u'false', 'LANE':u'140127_SN792_0312_AC36DWACXX:4', u'CLUSTER_GENERATION_KIT_VERSION':u'TRUSEQ_CBOT_HS_V3', u'PREPARED_BY':u'Marius', u'LIBRARY_PROCESSING_FAILED':u'false', u'CONTACT_PERSON_NAME':u'Marius R\xf6sti', u'REQUIRED_LANES':u'1', u'NM_DNA':u'           39.56', u'CYCLES_REQUESTED_BY_CUSTOMER':u'150', u'LIBRARY_PROCESSING_POSSIBLE':u'false', u'NOTES':u'15% Phix spike-in', u'PRINCIPAL_INVESTIGATOR_NAME':u'Walter Salzburger', u'NANO_DROP':u'CONCND3300', u'AFFILIATION':u'UNIVERSITY_BASEL', u'SBS_SEQUENCING_KIT_VERSION':u'SBS_HS_V3', u'EXTERNAL_SAMPLE_NAME':u'Ga_lib_36', u'BIOLOGICAL_SAMPLE_ARRIVED':u'2013-12-06 12:00:00 +0100', u'UL_EB_MISEQ':u'            18.0', u'KIT':u'NONE', u'PRINCIPAL_INVESTIGATOR_EMAIL':u'walter.salzburger@unibas.ch', u'UL_DNA':u'             1.0', u'NUMBER_OF_ATTACHMENTS':u'0', u'SAMPLE_KIND':u'FRAGMENTED_GENOMIC_DNA', u'CS_PROTOCOL_VERSION':u'v8', u'UL_STOCK':u'20', u'UL_DNA_MISEQ':u'             2.0'}, u'BSSE_QGF_19989_140127_SN792_0312_AC36DWACXX_5':{u'QC_AT_DBSSE':u'false', u'FRAGMENT_SIZE_PREPARED_ILLUMINA':u'581', u'UNIQUE_BARCODES':u'OK', u'UL_EB':u'            48.4', u'FLOW_CELL_PROPERTIES':u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'CONCENTRATION_PREPARED_ILLUMINA':u'23.4', u'STARTING_AMOUNT_OF_SAMPLE_IN_NG':u'2000', u'CELL_PLASTICITY_SYSTEMSX':u'false', u'NCBI_ORGANISM_TAXONOMY':u'481459', u'KIT_PREPARED':u'2013-12-09 12:00:00 +0100', u'LIBRARY_PROCESSING_SUCCESSFUL':u'false', u'HOW_OFTEN_SEQUENCED':u'2', u'BAREBACKED':u'false', u'SEQUENCING_APPLICATION':u'GENOMIC_DNA_SEQ', u'END_TYPE':u'SINGLE_READ', u'BARCODE':u'GTGAAAC', u'BARCODE_COMPLEXITY_CHECKER':u'No Pool', u'CONTACT_PERSON_EMAIL':u'marius.roesti@unibas.ch', u'INVOICE':u'false', 'LANE':u'140127_SN792_0312_AC36DWACXX:5', u'PREPARED_BY':u'Ina', u'LIBRARY_PROCESSING_FAILED':u'false', u'CONTACT_PERSON_NAME':u'Marius R\xf6sti', u'NM_DNA':u'           61.96', u'CONCENTRATION_ORIGINAL_ILLUMINA':u'38.3', u'LIBRARY_PROCESSING_POSSIBLE':u'false', u'PRINCIPAL_INVESTIGATOR_NAME':u'Walter Salzburger', u'NANO_DROP':u'CONCND3300', u'AFFILIATION':u'UNIVERSITY_BASEL', u'EXTERNAL_SAMPLE_NAME':u'293', u'BIOLOGICAL_SAMPLE_ARRIVED':u'2013-12-05 12:00:00 +0100', u'UL_EB_MISEQ':u'            46.8', u'KIT':u'NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1', u'PRINCIPAL_INVESTIGATOR_EMAIL':u'walter.salzburger@unibas.ch', u'UL_DNA':u'             1.6', u'NUMBER_OF_ATTACHMENTS':u'0', u'SAMPLE_KIND':u'GENOMIC_DNA', u'UL_STOCK':u'50', u'UL_DNA_MISEQ':u'             3.2'}, u'BSSE_QGF_16028_140127_SN792_0312_AC36DWACXX_7':{u'QC_AT_DBSSE':u'false', u'UNIQUE_BARCODES':u'OK', u'UL_EB':u'0', u'FLOW_CELL_PROPERTIES':u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'CELL_PLASTICITY_SYSTEMSX':u'false', u'NCBI_ORGANISM_TAXONOMY':u'10847', u'LIBRARY_PROCESSING_SUCCESSFUL':u'false', u'HOW_OFTEN_SEQUENCED':u'24', u'BAREBACKED':u'false', u'SEQUENCING_APPLICATION':u'GENOMIC_DNA_SEQ', u'BARCODE_COMPLEXITY_CHECKER':u'No Pool', u'CONTACT_PERSON_EMAIL':u'ina.nissen@bsse.ethz.ch', u'INVOICE':u'false', 'LANE':u'140127_SN792_0312_AC36DWACXX:7', u'LOT':u'9306315', u'LIBRARY_PROCESSING_FAILED':u'false', u'CONTACT_PERSON_NAME':u'Ina Nissen', u'NM_DNA':u'0', u'LIBRARY_PROCESSING_POSSIBLE':u'false', u'PRINCIPAL_INVESTIGATOR_NAME':u'Christian Beisel', u'AFFILIATION':u'OTHER', u'EXTERNAL_SAMPLE_NAME':u'PhiX', u'KIT':u'NONE', u'UL_EB_MISEQ':u'0', u'UL_DNA':u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL':u'christian.beisel@bsse.ethz.ch', u'NUMBER_OF_ATTACHMENTS':u'0', u'SAMPLE_KIND':u'GENOMIC_DNA', u'UL_DNA_MISEQ':u'0'}, u'BSSE_QGF_16028_140127_SN792_0312_AC36DWACXX_8':{u'QC_AT_DBSSE':u'false', u'UNIQUE_BARCODES':u'OK', u'UL_EB':u'0', u'FLOW_CELL_PROPERTIES':u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'CELL_PLASTICITY_SYSTEMSX':u'false', u'NCBI_ORGANISM_TAXONOMY':u'10847', u'LIBRARY_PROCESSING_SUCCESSFUL':u'false', u'HOW_OFTEN_SEQUENCED':u'24', u'BAREBACKED':u'false', u'SEQUENCING_APPLICATION':u'GENOMIC_DNA_SEQ', u'BARCODE_COMPLEXITY_CHECKER':u'No Pool', u'CONTACT_PERSON_EMAIL':u'ina.nissen@bsse.ethz.ch', u'INVOICE':u'false', 'LANE':u'140127_SN792_0312_AC36DWACXX:8', u'LOT':u'9306315', u'LIBRARY_PROCESSING_FAILED':u'false', u'CONTACT_PERSON_NAME':u'Ina Nissen', u'NM_DNA':u'0', u'LIBRARY_PROCESSING_POSSIBLE':u'false', u'PRINCIPAL_INVESTIGATOR_NAME':u'Christian Beisel', u'AFFILIATION':u'OTHER', u'EXTERNAL_SAMPLE_NAME':u'PhiX', u'KIT':u'NONE', u'UL_EB_MISEQ':u'0', u'UL_DNA':u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL':u'christian.beisel@bsse.ethz.ch', u'NUMBER_OF_ATTACHMENTS':u'0', u'SAMPLE_KIND':u'GENOMIC_DNA', u'UL_DNA_MISEQ':u'0'}, u'BSSE_QGF_16028_140127_SN792_0312_AC36DWACXX_2':{u'QC_AT_DBSSE':u'false', u'UNIQUE_BARCODES':u'OK', u'UL_EB':u'0', u'FLOW_CELL_PROPERTIES':u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'CELL_PLASTICITY_SYSTEMSX':u'false', u'NCBI_ORGANISM_TAXONOMY':u'10847', u'LIBRARY_PROCESSING_SUCCESSFUL':u'false', u'HOW_OFTEN_SEQUENCED':u'24', u'BAREBACKED':u'false', u'SEQUENCING_APPLICATION':u'GENOMIC_DNA_SEQ', u'BARCODE_COMPLEXITY_CHECKER':u'No Pool', u'CONTACT_PERSON_EMAIL':u'ina.nissen@bsse.ethz.ch', u'INVOICE':u'false', 'LANE':u'140127_SN792_0312_AC36DWACXX:2', u'LOT':u'9306315', u'LIBRARY_PROCESSING_FAILED':u'false', u'CONTACT_PERSON_NAME':u'Ina Nissen', u'NM_DNA':u'0', u'LIBRARY_PROCESSING_POSSIBLE':u'false', u'PRINCIPAL_INVESTIGATOR_NAME':u'Christian Beisel', u'AFFILIATION':u'OTHER', u'EXTERNAL_SAMPLE_NAME':u'PhiX', u'KIT':u'NONE', u'UL_EB_MISEQ':u'0', u'UL_DNA':u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL':u'christian.beisel@bsse.ethz.ch', u'NUMBER_OF_ATTACHMENTS':u'0', u'SAMPLE_KIND':u'GENOMIC_DNA', u'UL_DNA_MISEQ':u'0'}, u'BSSE_QGF_16251_140127_SN792_0312_AC36DWACXX_1':{u'QC_AT_DBSSE':u'true', u'FRAGMENT_SIZE_PREPARED_ILLUMINA':u'375', u'UNIQUE_BARCODES':u'OK', u'UL_EB':u'            19.0', u'FLOW_CELL_PROPERTIES':u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'CONCENTRATION_PREPARED_ILLUMINA':u'9.5', u'CELL_PLASTICITY_SYSTEMSX':u'false', u'NCBI_ORGANISM_TAXONOMY':u'481459', u'CONCENTRATION_FLOWLANE':u'12', u'LIBRARY_PROCESSING_SUCCESSFUL':u'false', u'HOW_OFTEN_SEQUENCED':u'3', u'CYCLES':u'157', u'BAREBACKED':u'false', u'SEQUENCING_APPLICATION':u'GENOMIC_DNA_SEQ', u'CLUSTER_STATION':u'CBOT', u'END_TYPE':u'SINGLE_READ', u'BARCODE_COMPLEXITY_CHECKER':u'No Pool', u'CREATED_ON_CS':u'2014-01-08 12:00:00 +0100', u'CONTACT_PERSON_EMAIL':u'marius.roesti@unibas.ch', u'INVOICE':u'false', 'LANE':u'140127_SN792_0312_AC36DWACXX:1', u'CLUSTER_GENERATION_KIT_VERSION':u'TRUSEQ_CBOT_HS_V3', u'PREPARED_BY':u'Marius', u'LIBRARY_PROCESSING_FAILED':u'false', u'CONTACT_PERSON_NAME':u'Marius R\xf6sti', u'REQUIRED_LANES':u'1', u'NM_DNA':u'           38.97', u'CYCLES_REQUESTED_BY_CUSTOMER':u'150', u'LIBRARY_PROCESSING_POSSIBLE':u'false', u'NOTES':u'15% Phix spike-in, this pool as test on SR50 first', u'PRINCIPAL_INVESTIGATOR_NAME':u'Walter Salzburger', u'NANO_DROP':u'CONCND3300', u'AFFILIATION':u'UNIVERSITY_BASEL', u'SBS_SEQUENCING_KIT_VERSION':u'SBS_HS_V3', u'EXTERNAL_SAMPLE_NAME':u'Ga_lib_33', u'BIOLOGICAL_SAMPLE_ARRIVED':u'2013-12-06 12:00:00 +0100', u'UL_EB_MISEQ':u'            17.9', u'KIT':u'NONE', u'PRINCIPAL_INVESTIGATOR_EMAIL':u'walter.salzburger@unibas.ch', u'UL_DNA':u'             1.0', u'NUMBER_OF_ATTACHMENTS':u'1', u'SAMPLE_KIND':u'FRAGMENTED_GENOMIC_DNA', u'CS_PROTOCOL_VERSION':u'v8', u'UL_STOCK':u'20', u'UL_DNA_MISEQ':u'             2.1'}, u'BSSE_QGF_19988_140127_SN792_0312_AC36DWACXX_5':{u'QC_AT_DBSSE':u'false', u'FRAGMENT_SIZE_PREPARED_ILLUMINA':u'564', u'UNIQUE_BARCODES':u'OK', u'UL_EB':u'            48.9', u'FLOW_CELL_PROPERTIES':u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'CONCENTRATION_PREPARED_ILLUMINA':u'33.3', u'STARTING_AMOUNT_OF_SAMPLE_IN_NG':u'2000', u'CELL_PLASTICITY_SYSTEMSX':u'false', u'NCBI_ORGANISM_TAXONOMY':u'481459', u'KIT_PREPARED':u'2013-12-09 12:00:00 +0100', u'LIBRARY_PROCESSING_SUCCESSFUL':u'false', u'HOW_OFTEN_SEQUENCED':u'2', u'BAREBACKED':u'false', u'SEQUENCING_APPLICATION':u'GENOMIC_DNA_SEQ', u'END_TYPE':u'SINGLE_READ', u'BARCODE':u'ACAGTGA', u'BARCODE_COMPLEXITY_CHECKER':u'No Pool', u'CONTACT_PERSON_EMAIL':u'marius.roesti@unibas.ch', u'INVOICE':u'false', 'LANE':u'140127_SN792_0312_AC36DWACXX:5', u'PREPARED_BY':u'Ina', u'LIBRARY_PROCESSING_FAILED':u'false', u'CONTACT_PERSON_NAME':u'Marius R\xf6sti', u'NM_DNA':u'           90.83', u'CONCENTRATION_ORIGINAL_ILLUMINA':u'58.2', u'LIBRARY_PROCESSING_POSSIBLE':u'false', u'PRINCIPAL_INVESTIGATOR_NAME':u'Walter Salzburger', u'NANO_DROP':u'CONCND3300', u'AFFILIATION':u'UNIVERSITY_BASEL', u'EXTERNAL_SAMPLE_NAME':u'201', u'BIOLOGICAL_SAMPLE_ARRIVED':u'2013-12-05 12:00:00 +0100', u'UL_EB_MISEQ':u'            47.8', u'KIT':u'NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1', u'PRINCIPAL_INVESTIGATOR_EMAIL':u'walter.salzburger@unibas.ch', u'UL_DNA':u'             1.1', u'NUMBER_OF_ATTACHMENTS':u'1', u'SAMPLE_KIND':u'GENOMIC_DNA', u'UL_STOCK':u'50', u'UL_DNA_MISEQ':u'             2.2'}, u'BSSE_QGF_16028_140127_SN792_0312_AC36DWACXX_3':{u'QC_AT_DBSSE':u'false', u'UNIQUE_BARCODES':u'OK', u'UL_EB':u'0', u'FLOW_CELL_PROPERTIES':u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'CELL_PLASTICITY_SYSTEMSX':u'false', u'NCBI_ORGANISM_TAXONOMY':u'10847', u'LIBRARY_PROCESSING_SUCCESSFUL':u'false', u'HOW_OFTEN_SEQUENCED':u'24', u'BAREBACKED':u'false', u'SEQUENCING_APPLICATION':u'GENOMIC_DNA_SEQ', u'BARCODE_COMPLEXITY_CHECKER':u'No Pool', u'CONTACT_PERSON_EMAIL':u'ina.nissen@bsse.ethz.ch', u'INVOICE':u'false', 'LANE':u'140127_SN792_0312_AC36DWACXX:3', u'LOT':u'9306315', u'LIBRARY_PROCESSING_FAILED':u'false', u'CONTACT_PERSON_NAME':u'Ina Nissen', u'NM_DNA':u'0', u'LIBRARY_PROCESSING_POSSIBLE':u'false', u'PRINCIPAL_INVESTIGATOR_NAME':u'Christian Beisel', u'AFFILIATION':u'OTHER', u'EXTERNAL_SAMPLE_NAME':u'PhiX', u'KIT':u'NONE', u'UL_EB_MISEQ':u'0', u'UL_DNA':u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL':u'christian.beisel@bsse.ethz.ch', u'NUMBER_OF_ATTACHMENTS':u'0', u'SAMPLE_KIND':u'GENOMIC_DNA', u'UL_DNA_MISEQ':u'0'}, u'BSSE_QGF_16255_140127_SN792_0312_AC36DWACXX_6':{u'QC_AT_DBSSE':u'true', u'FRAGMENT_SIZE_PREPARED_ILLUMINA':u'373', u'UNIQUE_BARCODES':u'OK', u'UL_EB':u'            19.2', u'FLOW_CELL_PROPERTIES':u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 151\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA':u'12.2', u'CELL_PLASTICITY_SYSTEMSX':u'false', u'NCBI_ORGANISM_TAXONOMY':u'481459', u'CONCENTRATION_FLOWLANE':u'12', u'LIBRARY_PROCESSING_SUCCESSFUL':u'false', u'HOW_OFTEN_SEQUENCED':u'1', u'CYCLES':u'157', u'BAREBACKED':u'false', u'SEQUENCING_APPLICATION':u'GENOMIC_DNA_SEQ', u'CLUSTER_STATION':u'CBOT', u'END_TYPE':u'SINGLE_READ', u'BARCODE_COMPLEXITY_CHECKER':u'No Pool', u'CONTACT_PERSON_EMAIL':u'marius.roesti@unibas.ch', u'INVOICE':u'false', 'LANE':u'140127_SN792_0312_AC36DWACXX:6', u'CLUSTER_GENERATION_KIT_VERSION':u'TRUSEQ_CBOT_HS_V3', u'PREPARED_BY':u'Marius', u'LIBRARY_PROCESSING_FAILED':u'false', u'CONTACT_PERSON_NAME':u'Marius R\xf6sti', u'REQUIRED_LANES':u'1', u'NM_DNA':u'           50.32', u'CYCLES_REQUESTED_BY_CUSTOMER':u'150', u'LIBRARY_PROCESSING_POSSIBLE':u'false', u'NOTES':u'15% Phix spike-in', u'PRINCIPAL_INVESTIGATOR_NAME':u'Walter Salzburger', u'NANO_DROP':u'CONCND3300', u'AFFILIATION':u'UNIVERSITY_BASEL', u'SBS_SEQUENCING_KIT_VERSION':u'SBS_HS_V3', u'EXTERNAL_SAMPLE_NAME':u'Ga_lib_37', u'BIOLOGICAL_SAMPLE_ARRIVED':u'2013-12-06 12:00:00 +0100', u'KIT':u'NONE', u'UL_EB_MISEQ':u'            18.4', u'PRINCIPAL_INVESTIGATOR_EMAIL':u'walter.salzburger@unibas.ch', u'UL_DNA':u'             0.8', u'NUMBER_OF_ATTACHMENTS':u'0', u'SAMPLE_KIND':u'FRAGMENTED_GENOMIC_DNA', u'CS_PROTOCOL_VERSION':u'v8', u'UL_STOCK':u'20', u'UL_DNA_MISEQ':u'             1.6'}, u'BSSE_QGF_16028_140127_SN792_0312_AC36DWACXX_4':{u'QC_AT_DBSSE':u'false', u'UNIQUE_BARCODES':u'OK', u'UL_EB':u'0', u'FLOW_CELL_PROPERTIES':u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'CELL_PLASTICITY_SYSTEMSX':u'false', u'NCBI_ORGANISM_TAXONOMY':u'10847', u'LIBRARY_PROCESSING_SUCCESSFUL':u'false', u'HOW_OFTEN_SEQUENCED':u'24', u'BAREBACKED':u'false', u'SEQUENCING_APPLICATION':u'GENOMIC_DNA_SEQ', u'BARCODE_COMPLEXITY_CHECKER':u'No Pool', u'CONTACT_PERSON_EMAIL':u'ina.nissen@bsse.ethz.ch', u'INVOICE':u'false', 'LANE':u'140127_SN792_0312_AC36DWACXX:4', u'LOT':u'9306315', u'LIBRARY_PROCESSING_FAILED':u'false', u'CONTACT_PERSON_NAME':u'Ina Nissen', u'NM_DNA':u'0', u'LIBRARY_PROCESSING_POSSIBLE':u'false', u'PRINCIPAL_INVESTIGATOR_NAME':u'Christian Beisel', u'AFFILIATION':u'OTHER', u'EXTERNAL_SAMPLE_NAME':u'PhiX', u'KIT':u'NONE', u'UL_EB_MISEQ':u'0', u'UL_DNA':u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL':u'christian.beisel@bsse.ethz.ch', u'NUMBER_OF_ATTACHMENTS':u'0', u'SAMPLE_KIND':u'GENOMIC_DNA', u'UL_DNA_MISEQ':u'0'}, u'BSSE_QGF_16028_140127_SN792_0312_AC36DWACXX_1':{u'QC_AT_DBSSE':u'false', u'UNIQUE_BARCODES':u'OK', u'UL_EB':u'0', u'FLOW_CELL_PROPERTIES':u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'CELL_PLASTICITY_SYSTEMSX':u'false', u'NCBI_ORGANISM_TAXONOMY':u'10847', u'LIBRARY_PROCESSING_SUCCESSFUL':u'false', u'HOW_OFTEN_SEQUENCED':u'24', u'BAREBACKED':u'false', u'SEQUENCING_APPLICATION':u'GENOMIC_DNA_SEQ', u'BARCODE_COMPLEXITY_CHECKER':u'No Pool', u'CONTACT_PERSON_EMAIL':u'ina.nissen@bsse.ethz.ch', u'INVOICE':u'false', 'LANE':u'140127_SN792_0312_AC36DWACXX:1', u'LOT':u'9306315', u'LIBRARY_PROCESSING_FAILED':u'false', u'CONTACT_PERSON_NAME':u'Ina Nissen', u'NM_DNA':u'0', u'LIBRARY_PROCESSING_POSSIBLE':u'false', u'PRINCIPAL_INVESTIGATOR_NAME':u'Christian Beisel', u'AFFILIATION':u'OTHER', u'EXTERNAL_SAMPLE_NAME':u'PhiX', u'KIT':u'NONE', u'UL_EB_MISEQ':u'0', u'UL_DNA':u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL':u'christian.beisel@bsse.ethz.ch', u'NUMBER_OF_ATTACHMENTS':u'0', u'SAMPLE_KIND':u'GENOMIC_DNA', u'UL_DNA_MISEQ':u'0'}, u'BSSE_QGF_16257_140127_SN792_0312_AC36DWACXX_8':{u'QC_AT_DBSSE':u'true', u'FRAGMENT_SIZE_PREPARED_ILLUMINA':u'361', u'UNIQUE_BARCODES':u'OK', u'UL_EB':u'            19.0', u'FLOW_CELL_PROPERTIES':u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 151\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA':u'9.6', u'CELL_PLASTICITY_SYSTEMSX':u'false', u'NCBI_ORGANISM_TAXONOMY':u'481459', u'CONCENTRATION_FLOWLANE':u'12', u'LIBRARY_PROCESSING_SUCCESSFUL':u'false', u'HOW_OFTEN_SEQUENCED':u'1', u'CYCLES':u'157', u'BAREBACKED':u'false', u'SEQUENCING_APPLICATION':u'GENOMIC_DNA_SEQ', u'CLUSTER_STATION':u'CBOT', u'END_TYPE':u'SINGLE_READ', u'BARCODE_COMPLEXITY_CHECKER':u'No Pool', u'CONTACT_PERSON_EMAIL':u'marius.roesti@unibas.ch', u'INVOICE':u'false', 'LANE':u'140127_SN792_0312_AC36DWACXX:8', u'CLUSTER_GENERATION_KIT_VERSION':u'TRUSEQ_CBOT_HS_V3', u'PREPARED_BY':u'Marius', u'LIBRARY_PROCESSING_FAILED':u'false', u'CONTACT_PERSON_NAME':u'Marius R\xf6sti', u'REQUIRED_LANES':u'1', u'NM_DNA':u'           40.91', u'CYCLES_REQUESTED_BY_CUSTOMER':u'150', u'LIBRARY_PROCESSING_POSSIBLE':u'false', u'NOTES':u'10-15% Phix spike-in', u'PRINCIPAL_INVESTIGATOR_NAME':u'Walter Salzburger', u'NANO_DROP':u'CONCND3300', u'AFFILIATION':u'UNIVERSITY_BASEL', u'SBS_SEQUENCING_KIT_VERSION':u'SBS_HS_V3', u'EXTERNAL_SAMPLE_NAME':u'Ga_lib_39', u'BIOLOGICAL_SAMPLE_ARRIVED':u'2013-12-06 12:00:00 +0100', u'KIT':u'NONE', u'UL_EB_MISEQ':u'            18.0', u'PRINCIPAL_INVESTIGATOR_EMAIL':u'walter.salzburger@unibas.ch', u'UL_DNA':u'             1.0', u'NUMBER_OF_ATTACHMENTS':u'1', u'SAMPLE_KIND':u'FRAGMENTED_GENOMIC_DNA', u'CS_PROTOCOL_VERSION':u'v8', u'UL_STOCK':u'20', u'UL_DNA_MISEQ':u'             2.0'}}
-      self.samplesPerLaneDict = {u'8':2, u'1':2, u'7':2, u'5':3, u'2':2, u'6':2, u'3':2, u'4':2}
-      self.flowCellName = 'C36DWACXX'
-
-      self.flowCellDict2 = {u'RUNNINGTIME': u'1 day, 16:14:28', u'SEQUENCER_FINISHED': u'2014-02-21 06:23:44 +0100', u'ILLUMINA_PIPELINE_VERSION': u'1.18.42', u'END_TYPE': u'PAIRED_END', u'FLOW_CELL_SEQUENCED_ON': u'2014-02-19 14:09:16 +0100', u'INDEXREAD2': u'8', u'SBS_KIT': u'MS2048060-500V2', u'SEQUENCER': u'M01761', u'TILECOUNT': u'14', u'LANECOUNT': u'1', 'Name': u'140219_M01761_0057_000000000-A825W', u'SEQUENCER_RUN_TIME': u'1.677', u'CYCLES_REQUESTED_BY_CUSTOMER': u'251', u'INDEXREAD': u'8', u'SWATHCOUNT': u'1', u'SURFACECOUNT': u'2', 'Project': u'2014.02'}
-      self.parentDict2 = {u'BSSE_QGF_20267_140219_M01761_0057_000000000_A825W_1': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.18.42\nSequencer : QGF MiSeq (Yoda)\nRun type: PAIRED_END\nNumber of cycles: 251\n\nKit : MS2048060-500V2', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'1773', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'1', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE_COMPLEXITY_CHECKER': u'OK', u'CONTACT_PERSON_EMAIL': u'Julia.Feldmann@unibas.ch', u'INVOICE': u'false', 'LANE': u'140219_M01761_0057_000000000-A825W:1', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Julia Feldmann', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Sebastien Gagneux', u'AFFILIATION': u'UNIVERSITY_BASEL', u'EXTERNAL_SAMPLE_NAME': u'PAL MiSeq 22', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2014-02-14 12:00:00 +0100', u'UL_EB_MISEQ': u'0', u'UL_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'Sebastien.Gagneux@unibas.ch', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_14958_140219_M01761_0057_000000000_A825W_1': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'10847', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'32', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'ina.nissen@bsse.ethz.ch', u'INVOICE': u'false', 'LANE': u'140219_M01761_0057_000000000-A825W:1', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Ina Nissen', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Christian Beisel', u'AFFILIATION': u'BSSE', u'EXTERNAL_SAMPLE_NAME': u'PhiX', u'UL_EB_MISEQ': u'0', u'KIT': u'NONE', u'UL_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'christian.beisel@bsse.ethz.ch', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20261_140219_M01761_0057_000000000_A825W_1': {u'HOW_OFTEN_SEQUENCED': u'1', u'INDEX2': u'TATCCTCT', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.18.42\nSequencer : QGF MiSeq (Yoda)\nRun type: PAIRED_END\nNumber of cycles: 251\n\nKit : MS2048060-500V2', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'CTCTCTAC', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Julia.Feldmann@unibas.ch', u'INVOICE': u'false', 'LANE': u'140219_M01761_0057_000000000-A825W:1', u'NCBI_ORGANISM_TAXONOMY': u'1773', u'EXTERNAL_SAMPLE_NAME': u'G01665', u'CONTACT_PERSON_NAME': u'Julia Feldmann', u'UL_EB_MISEQ': u'0', u'NM_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'Sebastien.Gagneux@unibas.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Sebastien Gagneux', u'SAMPLE_KIND': u'GENOMIC_DNA', u'AFFILIATION': u'UNIVERSITY_BASEL', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20260_140219_M01761_0057_000000000_A825W_1': {u'HOW_OFTEN_SEQUENCED': u'1', u'INDEX2': u'CTCTCTAT', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.18.42\nSequencer : QGF MiSeq (Yoda)\nRun type: PAIRED_END\nNumber of cycles: 251\n\nKit : MS2048060-500V2', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'TAGGCATG', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Julia.Feldmann@unibas.ch', u'INVOICE': u'false', 'LANE': u'140219_M01761_0057_000000000-A825W:1', u'NCBI_ORGANISM_TAXONOMY': u'1773', u'EXTERNAL_SAMPLE_NAME': u'G01664', u'CONTACT_PERSON_NAME': u'Julia Feldmann', u'UL_EB_MISEQ': u'0', u'NM_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'Sebastien.Gagneux@unibas.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Sebastien Gagneux', u'SAMPLE_KIND': u'GENOMIC_DNA', u'AFFILIATION': u'UNIVERSITY_BASEL', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20256_140219_M01761_0057_000000000_A825W_1': {u'HOW_OFTEN_SEQUENCED': u'1', u'INDEX2': u'ACTGCATA', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.18.42\nSequencer : QGF MiSeq (Yoda)\nRun type: PAIRED_END\nNumber of cycles: 251\n\nKit : MS2048060-500V2', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'CGTACTAG', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Julia.Feldmann@unibas.ch', u'INVOICE': u'false', 'LANE': u'140219_M01761_0057_000000000-A825W:1', u'NCBI_ORGANISM_TAXONOMY': u'1773', u'EXTERNAL_SAMPLE_NAME': u'G01660', u'CONTACT_PERSON_NAME': u'Julia Feldmann', u'UL_EB_MISEQ': u'0', u'NM_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'Sebastien.Gagneux@unibas.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Sebastien Gagneux', u'SAMPLE_KIND': u'GENOMIC_DNA', u'AFFILIATION': u'UNIVERSITY_BASEL', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20257_140219_M01761_0057_000000000_A825W_1': {u'HOW_OFTEN_SEQUENCED': u'1', u'INDEX2': u'AAGGAGTA', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.18.42\nSequencer : QGF MiSeq (Yoda)\nRun type: PAIRED_END\nNumber of cycles: 251\n\nKit : MS2048060-500V2', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'AGGCAGAA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Julia.Feldmann@unibas.ch', u'INVOICE': u'false', 'LANE': u'140219_M01761_0057_000000000-A825W:1', u'NCBI_ORGANISM_TAXONOMY': u'1773', u'EXTERNAL_SAMPLE_NAME': u'G01661', u'CONTACT_PERSON_NAME': u'Julia Feldmann', u'UL_EB_MISEQ': u'0', u'NM_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'Sebastien.Gagneux@unibas.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Sebastien Gagneux', u'SAMPLE_KIND': u'GENOMIC_DNA', u'AFFILIATION': u'UNIVERSITY_BASEL', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20255_140219_M01761_0057_000000000_A825W_1': {u'HOW_OFTEN_SEQUENCED': u'1', u'INDEX2': u'GTAAGGAG', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.18.42\nSequencer : QGF MiSeq (Yoda)\nRun type: PAIRED_END\nNumber of cycles: 251\n\nKit : MS2048060-500V2', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'TAAGGCGA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Julia.Feldmann@unibas.ch', u'INVOICE': u'false', 'LANE': u'140219_M01761_0057_000000000-A825W:1', u'NCBI_ORGANISM_TAXONOMY': u'1773', u'EXTERNAL_SAMPLE_NAME': u'G01659', u'CONTACT_PERSON_NAME': u'Julia Feldmann', u'UL_EB_MISEQ': u'0', u'NM_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'Sebastien.Gagneux@unibas.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Sebastien Gagneux', u'SAMPLE_KIND': u'GENOMIC_DNA', u'AFFILIATION': u'UNIVERSITY_BASEL', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20266_140219_M01761_0057_000000000_A825W_1': {u'HOW_OFTEN_SEQUENCED': u'1', u'INDEX2': u'CTAAGCCT', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.18.42\nSequencer : QGF MiSeq (Yoda)\nRun type: PAIRED_END\nNumber of cycles: 251\n\nKit : MS2048060-500V2', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'GTAGAGGA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Julia.Feldmann@unibas.ch', u'INVOICE': u'false', 'LANE': u'140219_M01761_0057_000000000-A825W:1', u'NCBI_ORGANISM_TAXONOMY': u'1773', u'EXTERNAL_SAMPLE_NAME': u'G01670', u'CONTACT_PERSON_NAME': u'Julia Feldmann', u'UL_EB_MISEQ': u'0', u'NM_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'Sebastien.Gagneux@unibas.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Sebastien Gagneux', u'SAMPLE_KIND': u'GENOMIC_DNA', u'AFFILIATION': u'UNIVERSITY_BASEL', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20258_140219_M01761_0057_000000000_A825W_1': {u'HOW_OFTEN_SEQUENCED': u'1', u'INDEX2': u'CTAAGCCT', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.18.42\nSequencer : QGF MiSeq (Yoda)\nRun type: PAIRED_END\nNumber of cycles: 251\n\nKit : MS2048060-500V2', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'TCCTGAGC', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Julia.Feldmann@unibas.ch', u'INVOICE': u'false', 'LANE': u'140219_M01761_0057_000000000-A825W:1', u'NCBI_ORGANISM_TAXONOMY': u'1773', u'EXTERNAL_SAMPLE_NAME': u'G01662', u'CONTACT_PERSON_NAME': u'Julia Feldmann', u'UL_EB_MISEQ': u'0', u'NM_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'Sebastien.Gagneux@unibas.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Sebastien Gagneux', u'SAMPLE_KIND': u'GENOMIC_DNA', u'AFFILIATION': u'UNIVERSITY_BASEL', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20265_140219_M01761_0057_000000000_A825W_1': {u'HOW_OFTEN_SEQUENCED': u'1', u'INDEX2': u'AAGGAGTA', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.18.42\nSequencer : QGF MiSeq (Yoda)\nRun type: PAIRED_END\nNumber of cycles: 251\n\nKit : MS2048060-500V2', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'AAGAGGCA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Julia.Feldmann@unibas.ch', u'INVOICE': u'false', 'LANE': u'140219_M01761_0057_000000000-A825W:1', u'NCBI_ORGANISM_TAXONOMY': u'1773', u'EXTERNAL_SAMPLE_NAME': u'G01669', u'CONTACT_PERSON_NAME': u'Julia Feldmann', u'UL_EB_MISEQ': u'0', u'NM_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'Sebastien.Gagneux@unibas.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Sebastien Gagneux', u'SAMPLE_KIND': u'GENOMIC_DNA', u'AFFILIATION': u'UNIVERSITY_BASEL', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20262_140219_M01761_0057_000000000_A825W_1': {u'HOW_OFTEN_SEQUENCED': u'1', u'INDEX2': u'AGAGTAGA', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.18.42\nSequencer : QGF MiSeq (Yoda)\nRun type: PAIRED_END\nNumber of cycles: 251\n\nKit : MS2048060-500V2', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'CAGAGAGG', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Julia.Feldmann@unibas.ch', u'INVOICE': u'false', 'LANE': u'140219_M01761_0057_000000000-A825W:1', u'NCBI_ORGANISM_TAXONOMY': u'1773', u'EXTERNAL_SAMPLE_NAME': u'G01666', u'CONTACT_PERSON_NAME': u'Julia Feldmann', u'UL_EB_MISEQ': u'0', u'NM_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'Sebastien.Gagneux@unibas.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Sebastien Gagneux', u'SAMPLE_KIND': u'GENOMIC_DNA', u'AFFILIATION': u'UNIVERSITY_BASEL', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20264_140219_M01761_0057_000000000_A825W_1': {u'HOW_OFTEN_SEQUENCED': u'1', u'INDEX2': u'ACTGCATA', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.18.42\nSequencer : QGF MiSeq (Yoda)\nRun type: PAIRED_END\nNumber of cycles: 251\n\nKit : MS2048060-500V2', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'CGAGGCTG', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Julia.Feldmann@unibas.ch', u'INVOICE': u'false', 'LANE': u'140219_M01761_0057_000000000-A825W:1', u'NCBI_ORGANISM_TAXONOMY': u'1773', u'EXTERNAL_SAMPLE_NAME': u'G01668', u'CONTACT_PERSON_NAME': u'Julia Feldmann', u'UL_EB_MISEQ': u'0', u'NM_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'Sebastien.Gagneux@unibas.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Sebastien Gagneux', u'SAMPLE_KIND': u'GENOMIC_DNA', u'AFFILIATION': u'UNIVERSITY_BASEL', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20259_140219_M01761_0057_000000000_A825W_1': {u'HOW_OFTEN_SEQUENCED': u'1', u'INDEX2': u'TAGATCGC', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.18.42\nSequencer : QGF MiSeq (Yoda)\nRun type: PAIRED_END\nNumber of cycles: 251\n\nKit : MS2048060-500V2', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'GGACTCCT', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Julia.Feldmann@unibas.ch', u'INVOICE': u'false', 'LANE': u'140219_M01761_0057_000000000-A825W:1', u'NCBI_ORGANISM_TAXONOMY': u'1773', u'EXTERNAL_SAMPLE_NAME': u'G01663', u'CONTACT_PERSON_NAME': u'Julia Feldmann', u'UL_EB_MISEQ': u'0', u'NM_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'Sebastien.Gagneux@unibas.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Sebastien Gagneux', u'SAMPLE_KIND': u'GENOMIC_DNA', u'AFFILIATION': u'UNIVERSITY_BASEL', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20263_140219_M01761_0057_000000000_A825W_1': {u'HOW_OFTEN_SEQUENCED': u'1', u'INDEX2': u'ACTGCATA', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.18.42\nSequencer : QGF MiSeq (Yoda)\nRun type: PAIRED_END\nNumber of cycles: 251\n\nKit : MS2048060-500V2', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'GCTACGCT', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Julia.Feldmann@unibas.ch', u'INVOICE': u'false', 'LANE': u'140219_M01761_0057_000000000-A825W:1', u'NCBI_ORGANISM_TAXONOMY': u'1773', u'EXTERNAL_SAMPLE_NAME': u'G01667', u'CONTACT_PERSON_NAME': u'Julia Feldmann', u'UL_EB_MISEQ': u'0', u'NM_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'Sebastien.Gagneux@unibas.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Sebastien Gagneux', u'SAMPLE_KIND': u'GENOMIC_DNA', u'AFFILIATION': u'UNIVERSITY_BASEL', u'UL_DNA_MISEQ': u'0'}}
-      self.samplesPerLaneDict2 = {u'1': 14}
-      self.flowCellName2 = '000000000-A825W'
-
-      self.flowCellDict3 = {u'CONTROL_LANE': u'5', u'RUNNINGTIME': u'2 days, 11:29:33', u'SEQUENCER_FINISHED': u'2014-01-26 23:07:19 +0100', u'ILLUMINA_PIPELINE_VERSION': u'1.17.21.3', u'END_TYPE': u'SINGLE_READ', u'FLOW_CELL_SEQUENCED_ON': u'2014-01-24 11:37:46 +0100', u'INDEXREAD2': u'0', u'SBS_KIT': u'TruSeq SBS Kit v3', u'FLOWCELLTYPE': u'HiSeq Flow Cell v3', u'SEQUENCER': u'SN792', u'TILECOUNT': u'16', u'LANECOUNT': u'8', 'Name': u'140124_SN792_0311_AC36GVACXX', u'SEQUENCER_RUN_TIME': u'2.479', u'CYCLES_REQUESTED_BY_CUSTOMER': u'51', u'INDEXREAD': u'7', u'SWATHCOUNT': u'3', u'SURFACECOUNT': u'2', 'Project': u'2014.01'}
-      self.parentDict3 = {u'BSSE_QGF_20024_140124_SN792_0311_AC36GVACXX_4': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'STARTING_AMOUNT_OF_SAMPLE_IN_NG': u'2000', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'4', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'CAAAAG', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Christine.Fritz@usz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:4', u'PREPARED_BY': u'Ina', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Fritz Christine', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Peter Wild', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'14_G12.336 TA1', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-10-29 12:00:00 +0100', u'UL_EB_MISEQ': u'0', u'KIT': u'AGILENT_SURESELECT_ENRICHMENTSYSTEM', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'peter.wild@usz.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20015_140124_SN792_0311_AC36GVACXX_4': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'STARTING_AMOUNT_OF_SAMPLE_IN_NG': u'2000', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'4', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'ACAGTGA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Christine.Fritz@usz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:4', u'PREPARED_BY': u'Ina', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Fritz Christine', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Peter Wild', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'5_G08.792 NO', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-10-29 12:00:00 +0100', u'KIT': u'AGILENT_SURESELECT_ENRICHMENTSYSTEM', u'UL_EB_MISEQ': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'peter.wild@usz.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_19937_140124_SN792_0311_AC36GVACXX_3': {u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'160', u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'             2.0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'0.26', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'AGTTCCG', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:3', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'24_fox-1 asd-1 3', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'            -6.0', u'NM_DNA': u'            2.50', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'             8.0', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'UL_STOCK': u'10', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'            16.0'}, u'BSSE_QGF_19928_140124_SN792_0311_AC36GVACXX_3': {u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'159', u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'            18.0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'2.1', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'TTAGGCA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:3', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'15_wt (N2) 3 (OLD)', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'            16.1', u'NM_DNA': u'           20.32', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'             2.0', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'UL_STOCK': u'20', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'             3.9'}, u'BSSE_QGF_20029_140124_SN792_0311_AC36GVACXX_1': {u'QC_AT_DBSSE': u'true', u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'870', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'            18.3', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'13.7', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'3569', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'1', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'END_TYPE': u'PAIRED_END', u'BARCODE': u'GATCAGA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'simone.fior@env.ethz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:1', u'PREPARED_BY': u'Simone', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Fior Simone', u'NM_DNA': u'           24.23', u'CYCLES_REQUESTED_BY_CUSTOMER': u'100', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Alexander Widmer', u'NANO_DROP': u'CONCND3300', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'2_Dcar_Grengiols', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-12-16 12:00:00 +0100', u'UL_EB_MISEQ': u'            16.7', u'KIT': u'NONE', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'alex.widmer@env.ethz.ch', u'UL_DNA': u'             1.7', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_STOCK': u'20', u'UL_DNA_MISEQ': u'             3.3'}, u'BSSE_QGF_20030_140124_SN792_0311_AC36GVACXX_1': {u'QC_AT_DBSSE': u'true', u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'903', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'            18.3', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'13.9', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'3569', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'1', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'END_TYPE': u'PAIRED_END', u'BARCODE': u'GTGGCCT', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'simone.fior@env.ethz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:1', u'PREPARED_BY': u'Simone', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Fior Simone', u'NM_DNA': u'           23.68', u'CYCLES_REQUESTED_BY_CUSTOMER': u'100', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Alexander Widmer', u'NANO_DROP': u'CONCND3300', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'3_Dcar_Gibidumsee', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-12-16 12:00:00 +0100', u'KIT': u'NONE', u'UL_EB_MISEQ': u'            16.6', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'alex.widmer@env.ethz.ch', u'UL_DNA': u'             1.7', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_STOCK': u'20', u'UL_DNA_MISEQ': u'             3.4'}, u'BSSE_QGF_20025_140124_SN792_0311_AC36GVACXX_4': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'STARTING_AMOUNT_OF_SAMPLE_IN_NG': u'2000', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'4', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'GAAACC', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Christine.Fritz@usz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:4', u'PREPARED_BY': u'Ina', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Fritz Christine', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Peter Wild', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'15_G12.336 TA2', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-10-29 12:00:00 +0100', u'UL_EB_MISEQ': u'0', u'KIT': u'AGILENT_SURESELECT_ENRICHMENTSYSTEM', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'peter.wild@usz.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_19914_140124_SN792_0311_AC36GVACXX_2': {u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'0.4', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'CGATGTA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:2', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'2_wt L2', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'0', u'NM_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_19956_140124_SN792_0311_AC36GVACXX_7': {u'QC_AT_DBSSE': u'false', u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'189', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'CONCENTRATION_FLOWLANE': u'13', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'2', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'RNA_SEQ', u'CLUSTER_STATION': u'CBOT', u'END_TYPE': u'SINGLE_READ', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CREATED_ON_CS': u'2014-01-23 12:00:00 +0100', u'CONTACT_PERSON_EMAIL': u'arnau.vinavilaseca@unibas.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:7', u'CLUSTER_GENERATION_KIT_VERSION': u'TRUSEQ_CBOT_HS_V3', u'PREPARED_BY': u'Arnau', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Arnau Vina Vilaseca', u'REQUIRED_LANES': u'2', u'NM_DNA': u'0', u'CYCLES_REQUESTED_BY_CUSTOMER': u'58', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Mihaela Zavolan', u'NANO_DROP': u'CONCND3300', u'BARCODES': u'these are 12 samples pooled together with the True seq universal adaptor and personal internal barcode\n\nthe samples should run in two lanes.\n\nlet me know if any questions\n\nArnau', u'AFFILIATION': u'BIOCENTER_BASEL', u'EXTERNAL_SAMPLE_NAME': u'Ina-PseudoUridination', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2014-01-13 12:00:00 +0100', u'KIT': u'NONE', u'UL_EB_MISEQ': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'mihaela.zavolan@unibas.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'2', u'CS_PROTOCOL_VERSION': u'v8', u'SAMPLE_KIND': u'SMALL_RNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20039_140124_SN792_0311_AC36GVACXX_8': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'27434', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'1', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'RNA_SEQ', u'BARCODE': u'ACAGTGA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'minwu@ethz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:8', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Min Wu', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'NOTES': u'TruSeq Strande mRNA sample Prep Kit', u'PRINCIPAL_INVESTIGATOR_NAME': u'Mathias K\xf6lliker', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'22Ab', u'UL_EB_MISEQ': u'0', u'UL_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'mathias.koelliker@unibas.ch', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'TOTAL_RNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20017_140124_SN792_0311_AC36GVACXX_4': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'STARTING_AMOUNT_OF_SAMPLE_IN_NG': u'2000', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'4', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'CAGATCA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Christine.Fritz@usz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:4', u'PREPARED_BY': u'Ina', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Fritz Christine', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Peter Wild', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'7_G09.245 TA1', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-10-29 12:00:00 +0100', u'KIT': u'AGILENT_SURESELECT_ENRICHMENTSYSTEM', u'UL_EB_MISEQ': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'peter.wild@usz.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20013_140124_SN792_0311_AC36GVACXX_4': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'STARTING_AMOUNT_OF_SAMPLE_IN_NG': u'2000', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'4', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'TTAGGCA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Christine.Fritz@usz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:4', u'PREPARED_BY': u'Ina', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Fritz Christine', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Peter Wild', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'3_G11.806 TA2', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-10-29 12:00:00 +0100', u'UL_EB_MISEQ': u'0', u'KIT': u'AGILENT_SURESELECT_ENRICHMENTSYSTEM', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'peter.wild@usz.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_19924_140124_SN792_0311_AC36GVACXX_2': {u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'159', u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'             3.1', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'0.3', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'AGTTCCG', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:2', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'12_Q L3', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'            -3.8', u'NM_DNA': u'            2.90', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'             6.9', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'UL_STOCK': u'10', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'            13.8'}, u'BSSE_QGF_19934_140124_SN792_0311_AC36GVACXX_3': {u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'GGCTACA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:3', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'21_fox-1 3', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'0', u'NM_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20042_140124_SN792_0311_AC36GVACXX_8': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'27434', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'1', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'RNA_SEQ', u'BARCODE': u'CTTGTAA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'minwu@ethz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:8', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Min Wu', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'NOTES': u'TruSeq Strande mRNA sample Prep Kit', u'PRINCIPAL_INVESTIGATOR_NAME': u'Mathias K\xf6lliker', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'26Ny', u'UL_EB_MISEQ': u'0', u'UL_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'mathias.koelliker@unibas.ch', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'TOTAL_RNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20033_140124_SN792_0311_AC36GVACXX_1': {u'QC_AT_DBSSE': u'true', u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'775', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'            18.6', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'14.8', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'3569', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'1', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'END_TYPE': u'PAIRED_END', u'BARCODE': u'ATTCCTA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'simone.fior@env.ethz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:1', u'PREPARED_BY': u'Simone', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Fior Simone', u'NM_DNA': u'           29.38', u'CYCLES_REQUESTED_BY_CUSTOMER': u'100', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Alexander Widmer', u'NANO_DROP': u'CONCND3300', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'6_Dcar_Niedergampel', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-12-16 12:00:00 +0100', u'KIT': u'NONE', u'UL_EB_MISEQ': u'            17.3', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'alex.widmer@env.ethz.ch', u'UL_DNA': u'             1.4', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_STOCK': u'20', u'UL_DNA_MISEQ': u'             2.7'}, u'BSSE_QGF_20041_140124_SN792_0311_AC36GVACXX_8': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'27434', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'1', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'RNA_SEQ', u'BARCODE': u'CAGATCA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'minwu@ethz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:8', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Min Wu', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'NOTES': u'TruSeq Strande mRNA sample Prep Kit', u'PRINCIPAL_INVESTIGATOR_NAME': u'Mathias K\xf6lliker', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'16Ny', u'UL_EB_MISEQ': u'0', u'UL_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'mathias.koelliker@unibas.ch', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'TOTAL_RNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20016_140124_SN792_0311_AC36GVACXX_4': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'STARTING_AMOUNT_OF_SAMPLE_IN_NG': u'2000', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'4', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'GCCAATA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Christine.Fritz@usz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:4', u'PREPARED_BY': u'Ina', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Fritz Christine', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Peter Wild', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'6_G09.245 NO', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-10-29 12:00:00 +0100', u'UL_EB_MISEQ': u'0', u'KIT': u'AGILENT_SURESELECT_ENRICHMENTSYSTEM', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'peter.wild@usz.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20020_140124_SN792_0311_AC36GVACXX_4': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'STARTING_AMOUNT_OF_SAMPLE_IN_NG': u'2000', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'4', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'TAGCTTA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Christine.Fritz@usz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:4', u'PREPARED_BY': u'Ina', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Fritz Christine', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Peter Wild', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'10_G11.838 TA2', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-10-29 12:00:00 +0100', u'UL_EB_MISEQ': u'0', u'KIT': u'AGILENT_SURESELECT_ENRICHMENTSYSTEM', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'peter.wild@usz.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_16028_140124_SN792_0311_AC36GVACXX_5': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'10847', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'24', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'ina.nissen@bsse.ethz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:5', u'LOT': u'9306315', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Ina Nissen', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Christian Beisel', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'PhiX', u'UL_EB_MISEQ': u'0', u'KIT': u'NONE', u'UL_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'christian.beisel@bsse.ethz.ch', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20018_140124_SN792_0311_AC36GVACXX_4': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'STARTING_AMOUNT_OF_SAMPLE_IN_NG': u'1000', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'4', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'ACTTGAA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Christine.Fritz@usz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:4', u'PREPARED_BY': u'Ina', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Fritz Christine', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Peter Wild', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'8_G11.838 NO', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-10-29 12:00:00 +0100', u'UL_EB_MISEQ': u'0', u'KIT': u'AGILENT_SURESELECT_ENRICHMENTSYSTEM', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'peter.wild@usz.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_19956_140124_SN792_0311_AC36GVACXX_6': {u'QC_AT_DBSSE': u'false', u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'189', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'CONCENTRATION_FLOWLANE': u'13', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'2', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'RNA_SEQ', u'CLUSTER_STATION': u'CBOT', u'END_TYPE': u'SINGLE_READ', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CREATED_ON_CS': u'2014-01-23 12:00:00 +0100', u'CONTACT_PERSON_EMAIL': u'arnau.vinavilaseca@unibas.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:6', u'CLUSTER_GENERATION_KIT_VERSION': u'TRUSEQ_CBOT_HS_V3', u'PREPARED_BY': u'Arnau', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Arnau Vina Vilaseca', u'REQUIRED_LANES': u'2', u'NM_DNA': u'0', u'CYCLES_REQUESTED_BY_CUSTOMER': u'58', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Mihaela Zavolan', u'NANO_DROP': u'CONCND3300', u'BARCODES': u'these are 12 samples pooled together with the True seq universal adaptor and personal internal barcode\n\nthe samples should run in two lanes.\n\nlet me know if any questions\n\nArnau', u'AFFILIATION': u'BIOCENTER_BASEL', u'EXTERNAL_SAMPLE_NAME': u'Ina-PseudoUridination', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2014-01-13 12:00:00 +0100', u'KIT': u'NONE', u'UL_EB_MISEQ': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'mihaela.zavolan@unibas.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'2', u'CS_PROTOCOL_VERSION': u'v8', u'SAMPLE_KIND': u'SMALL_RNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_19930_140124_SN792_0311_AC36GVACXX_3': {u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'147', u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'            18.7', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'2.84', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'ACAGTGA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:3', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'17_asd-1 2 (OLD)', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'            17.3', u'NM_DNA': u'           29.72', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'             1.3', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'UL_STOCK': u'20', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'             2.7'}, u'BSSE_QGF_20012_140124_SN792_0311_AC36GVACXX_4': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'STARTING_AMOUNT_OF_SAMPLE_IN_NG': u'2000', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'4', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'CGATGTA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Christine.Fritz@usz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:4', u'PREPARED_BY': u'Ina', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Fritz Christine', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Peter Wild', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'2_G11.806 TA1', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-10-29 12:00:00 +0100', u'UL_EB_MISEQ': u'0', u'KIT': u'AGILENT_SURESELECT_ENRICHMENTSYSTEM', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'peter.wild@usz.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_19923_140124_SN792_0311_AC36GVACXX_2': {u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'161', u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'             6.2', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'0.55', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'AGTCAAC', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:2', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'11_Q L2', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'             2.4', u'NM_DNA': u'            5.26', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'             3.8', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'UL_STOCK': u'10', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'             7.6'}, u'BSSE_QGF_20043_140124_SN792_0311_AC36GVACXX_8': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'27434', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'1', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'RNA_SEQ', u'BARCODE': u'AGTCAAC', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'minwu@ethz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:8', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Min Wu', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'NOTES': u'TruSeq Strande mRNA sample Prep Kit', u'PRINCIPAL_INVESTIGATOR_NAME': u'Mathias K\xf6lliker', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'14Ny', u'UL_EB_MISEQ': u'0', u'UL_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'mathias.koelliker@unibas.ch', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'TOTAL_RNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_19929_140124_SN792_0311_AC36GVACXX_3': {u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'153', u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'            19.0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'3.9', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'TGACCAA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:3', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'16_asd-1 1 (OLD)', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'            18.0', u'NM_DNA': u'           39.22', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'             1.0', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'UL_STOCK': u'20', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'             2.0'}, u'BSSE_QGF_19919_140124_SN792_0311_AC36GVACXX_2': {u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'162', u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'            19.1', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'4.89', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'CAGATCA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:2', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'7_58 80 L1', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'            18.3', u'NM_DNA': u'           46.44', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'             0.9', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'UL_STOCK': u'20', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'             1.7'}, u'BSSE_QGF_19925_140124_SN792_0311_AC36GVACXX_2': {u'QC_AT_DBSSE': u'true', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'CONCENTRATION_FLOWLANE': u'12', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'1', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'CLUSTER_STATION': u'CBOT', u'END_TYPE': u'SINGLE_READ', u'BARCODE_COMPLEXITY_CHECKER': u'OK', u'CREATED_ON_CS': u'2014-01-23 12:00:00 +0100', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:2', u'PREPARED_BY': u'Deni', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'REQUIRED_LANES': u'1', u'NM_DNA': u'0', u'CYCLES_REQUESTED_BY_CUSTOMER': u'58', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'NANO_DROP': u'CONCND3300', u'AFFILIATION': u'OTHER', u'DNA_CONCENTRATION_OF_LIBRARY': u'2', u'EXTERNAL_SAMPLE_NAME': u'Pool 1(1-12)', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-12-17 12:00:00 +0100', u'UL_EB_MISEQ': u'0', u'KIT': u'NONE', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'8', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'CS_PROTOCOL_VERSION': u'v8', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_19935_140124_SN792_0311_AC36GVACXX_3': {u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'162', u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'             7.9', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'1.01', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'CTTGTAA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:3', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'22_fox-1 asd-1 1', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'             5.8', u'NM_DNA': u'            9.59', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'             2.1', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'UL_STOCK': u'10', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'             4.2'}, u'BSSE_QGF_20037_140124_SN792_0311_AC36GVACXX_8': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'27434', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'1', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'RNA_SEQ', u'BARCODE': u'CGATGTA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'minwu@ethz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:8', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Min Wu', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'NOTES': u'TruSeq Strande mRNA sample Prep Kit', u'PRINCIPAL_INVESTIGATOR_NAME': u'Mathias K\xf6lliker', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'14An', u'UL_EB_MISEQ': u'0', u'UL_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'mathias.koelliker@unibas.ch', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'TOTAL_RNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20044_140124_SN792_0311_AC36GVACXX_8': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'27434', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'1', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'RNA_SEQ', u'BARCODE': u'AGTTCCG', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'minwu@ethz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:8', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Min Wu', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'NOTES': u'TruSeq Strande mRNA sample Prep Kit', u'PRINCIPAL_INVESTIGATOR_NAME': u'Mathias K\xf6lliker', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'37Ny', u'UL_EB_MISEQ': u'0', u'UL_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'mathias.koelliker@unibas.ch', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'TOTAL_RNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20019_140124_SN792_0311_AC36GVACXX_4': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'STARTING_AMOUNT_OF_SAMPLE_IN_NG': u'1000', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'4', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'GATCAGA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Christine.Fritz@usz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:4', u'PREPARED_BY': u'Ina', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Fritz Christine', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Peter Wild', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'9_G11.838 TA1', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-10-29 12:00:00 +0100', u'KIT': u'AGILENT_SURESELECT_ENRICHMENTSYSTEM', u'UL_EB_MISEQ': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'peter.wild@usz.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_19926_140124_SN792_0311_AC36GVACXX_3': {u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'160', u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'             5.8', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'0.49', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'ATCACGA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:3', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'13_wt (N2) 1 (OLD)', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'             1.5', u'NM_DNA': u'            4.71', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'             4.2', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'UL_STOCK': u'10', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'             8.5'}, u'BSSE_QGF_20021_140124_SN792_0311_AC36GVACXX_4': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'STARTING_AMOUNT_OF_SAMPLE_IN_NG': u'1000', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'4', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'GGCTACA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Christine.Fritz@usz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:4', u'PREPARED_BY': u'Ina', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Fritz Christine', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Peter Wild', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'11_G09.258 NO', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-10-29 12:00:00 +0100', u'KIT': u'AGILENT_SURESELECT_ENRICHMENTSYSTEM', u'UL_EB_MISEQ': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'peter.wild@usz.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_19936_140124_SN792_0311_AC36GVACXX_3': {u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'163', u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'             5.8', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'0.5', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'AGTCAAC', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:3', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'23_fox-1 asd-1 2', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'             1.5', u'NM_DNA': u'            4.72', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'             4.2', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'UL_STOCK': u'10', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'             8.5'}, u'BSSE_QGF_20040_140124_SN792_0311_AC36GVACXX_8': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'27434', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'1', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'RNA_SEQ', u'BARCODE': u'GCCAATA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'minwu@ethz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:8', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Min Wu', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'NOTES': u'TruSeq Strande mRNA sample Prep Kit', u'PRINCIPAL_INVESTIGATOR_NAME': u'Mathias K\xf6lliker', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'37Br', u'UL_EB_MISEQ': u'0', u'UL_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'mathias.koelliker@unibas.ch', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'TOTAL_RNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_19938_140124_SN792_0311_AC36GVACXX_3': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'CONCENTRATION_FLOWLANE': u'12', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'1', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'CLUSTER_STATION': u'CBOT', u'BARCODE_COMPLEXITY_CHECKER': u'OK', u'CREATED_ON_CS': u'2014-01-23 12:00:00 +0100', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:3', u'CLUSTER_GENERATION_KIT_VERSION': u'TRUSEQ_CBOT_HS_V3', u'PREPARED_BY': u'Deni', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'NANO_DROP': u'CONCND3300', u'AFFILIATION': u'OTHER', u'DNA_CONCENTRATION_OF_LIBRARY': u'2', u'EXTERNAL_SAMPLE_NAME': u'Pool 2 (13-24)', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-12-17 12:00:00 +0100', u'UL_EB_MISEQ': u'0', u'KIT': u'NONE', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'CS_PROTOCOL_VERSION': u'v8', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20026_140124_SN792_0311_AC36GVACXX_4': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'CONCENTRATION_FLOWLANE': u'12', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'1', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'CLUSTER_STATION': u'CBOT', u'END_TYPE': u'SINGLE_READ', u'BARCODE_COMPLEXITY_CHECKER': u'OK', u'CREATED_ON_CS': u'2014-01-24 12:00:00 +0100', u'CONTACT_PERSON_EMAIL': u'Christine.Fritz@usz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:4', u'CLUSTER_GENERATION_KIT_VERSION': u'TRUSEQ_CBOT_HS_V3', u'PREPARED_BY': u'Ina', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Fritz Christine', u'REQUIRED_LANES': u'1', u'NM_DNA': u'0', u'CYCLES_REQUESTED_BY_CUSTOMER': u'50', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'NOTES': u'Test', u'PRINCIPAL_INVESTIGATOR_NAME': u'Peter Wild', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'Pool_Exome 23.01.14', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-10-29 12:00:00 +0100', u'UL_EB_MISEQ': u'0', u'KIT': u'AGILENT_SURESELECT_ENRICHMENTSYSTEM', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'peter.wild@usz.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'2', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_19921_140124_SN792_0311_AC36GVACXX_2': {u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'200', u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'            19.1', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'5.91', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'GGCTACA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:2', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'9_58 80 L3', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'            18.2', u'NM_DNA': u'           45.46', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'             0.9', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'UL_STOCK': u'20', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'             1.8'}, u'BSSE_QGF_20038_140124_SN792_0311_AC36GVACXX_8': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'27434', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'1', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'RNA_SEQ', u'BARCODE': u'TGACCAA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'minwu@ethz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:8', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Min Wu', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'NOTES': u'TruSeq Strande mRNA sample Prep Kit', u'PRINCIPAL_INVESTIGATOR_NAME': u'Mathias K\xf6lliker', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'16Ab', u'UL_EB_MISEQ': u'0', u'UL_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'mathias.koelliker@unibas.ch', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'TOTAL_RNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20028_140124_SN792_0311_AC36GVACXX_1': {u'QC_AT_DBSSE': u'true', u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'770', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'            17.9', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'9.4', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'3569', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'1', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'END_TYPE': u'PAIRED_END', u'BARCODE': u'TTAGGCA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'simone.fior@env.ethz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:1', u'PREPARED_BY': u'Simone', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Fior Simone', u'NM_DNA': u'           18.78', u'CYCLES_REQUESTED_BY_CUSTOMER': u'100', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Alexander Widmer', u'NANO_DROP': u'CONCND3300', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'1_Dcar_Unterstalden', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-12-16 12:00:00 +0100', u'KIT': u'NONE', u'UL_EB_MISEQ': u'            15.7', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'alex.widmer@env.ethz.ch', u'UL_DNA': u'             2.1', u'NUMBER_OF_ATTACHMENTS': u'1', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_STOCK': u'20', u'UL_DNA_MISEQ': u'             4.3'}, u'BSSE_QGF_20034_140124_SN792_0311_AC36GVACXX_1': {u'QC_AT_DBSSE': u'true', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'3569', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'1', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'END_TYPE': u'PAIRED_END', u'BARCODE_COMPLEXITY_CHECKER': u'OK', u'CONTACT_PERSON_EMAIL': u'simone.fior@env.ethz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:1', u'PREPARED_BY': u'Simone', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Fior Simone', u'NM_DNA': u'0', u'CYCLES_REQUESTED_BY_CUSTOMER': u'100', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Alexander Widmer', u'NANO_DROP': u'CONCND3300', u'AFFILIATION': u'OTHER', u'DNA_CONCENTRATION_OF_LIBRARY': u'2', u'EXTERNAL_SAMPLE_NAME': u'Pool_Set2_Simone', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-12-16 12:00:00 +0100', u'KIT': u'NONE', u'UL_EB_MISEQ': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'alex.widmer@env.ethz.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'1', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_19917_140124_SN792_0311_AC36GVACXX_2': {u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'160', u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'            18.6', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'2.9', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'ACAGTGA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:2', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'5_mir-58 L2', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'            17.1', u'NM_DNA': u'           27.88', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'             1.4', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'UL_STOCK': u'20', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'             2.9'}, u'BSSE_QGF_19918_140124_SN792_0311_AC36GVACXX_2': {u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'GCCAATA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:2', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'6_mir-58 L3', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'0', u'NM_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20011_140124_SN792_0311_AC36GVACXX_4': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'STARTING_AMOUNT_OF_SAMPLE_IN_NG': u'2000', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'4', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'ATCACGA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Christine.Fritz@usz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:4', u'PREPARED_BY': u'Ina', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Fritz Christine', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Peter Wild', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'1_G11.806 NO', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-10-29 12:00:00 +0100', u'UL_EB_MISEQ': u'0', u'KIT': u'AGILENT_SURESELECT_ENRICHMENTSYSTEM', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'peter.wild@usz.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_19915_140124_SN792_0311_AC36GVACXX_2': {u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'160', u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'            19.0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'3.99', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'TTAGGCA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:2', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'3_wt L3', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'            17.9', u'NM_DNA': u'           38.37', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'             1.0', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'UL_STOCK': u'20', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'             2.1'}, u'BSSE_QGF_19916_140124_SN792_0311_AC36GVACXX_2': {u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'160', u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'            18.5', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'2.83', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'TGACCAA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:2', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'4_mir-58 L1', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'            17.1', u'NM_DNA': u'           27.21', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'             1.5', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'UL_STOCK': u'20', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'             2.9'}, u'BSSE_QGF_19932_140124_SN792_0311_AC36GVACXX_3': {u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'161', u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'CAGATCA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:3', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'19_fox-1 1', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'0', u'NM_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20031_140124_SN792_0311_AC36GVACXX_1': {u'QC_AT_DBSSE': u'true', u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'740', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'            18.3', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'11.6', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'3569', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'1', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'END_TYPE': u'PAIRED_END', u'BARCODE': u'GTTTCGG', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'simone.fior@env.ethz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:1', u'PREPARED_BY': u'Simone', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Fior Simone', u'NM_DNA': u'           24.12', u'CYCLES_REQUESTED_BY_CUSTOMER': u'100', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Alexander Widmer', u'NANO_DROP': u'CONCND3300', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'4_Dcar_Simplonpass', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-12-16 12:00:00 +0100', u'KIT': u'NONE', u'UL_EB_MISEQ': u'            16.7', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'alex.widmer@env.ethz.ch', u'UL_DNA': u'             1.7', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_STOCK': u'20', u'UL_DNA_MISEQ': u'             3.3'}, u'BSSE_QGF_20014_140124_SN792_0311_AC36GVACXX_4': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Sample got sequenced more than once. Please check the flow lane properties for detailed description!', u'STARTING_AMOUNT_OF_SAMPLE_IN_NG': u'2000', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'4', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'BARCODE': u'TGACCAA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'Christine.Fritz@usz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:4', u'PREPARED_BY': u'Ina', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Fritz Christine', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Peter Wild', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'4_G08.792 TA1', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-10-29 12:00:00 +0100', u'KIT': u'AGILENT_SURESELECT_ENRICHMENTSYSTEM', u'UL_EB_MISEQ': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'peter.wild@usz.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_20045_140124_SN792_0311_AC36GVACXX_8': {u'QC_AT_DBSSE': u'false', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'27434', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'1', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'RNA_SEQ', u'BARCODE_COMPLEXITY_CHECKER': u'OK', u'CONTACT_PERSON_EMAIL': u'minwu@ethz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:8', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Min Wu', u'NM_DNA': u'0', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'NOTES': u'TruSeq Strande mRNA sample Prep Kit', u'PRINCIPAL_INVESTIGATOR_NAME': u'Mathias K\xf6lliker', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'Pool1_Min Wu_TruSeq Str.', u'UL_EB_MISEQ': u'0', u'UL_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'mathias.koelliker@unibas.ch', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'TOTAL_RNA', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_19931_140124_SN792_0311_AC36GVACXX_3': {u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'GCCAATA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:3', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'18_asd-1 3 (OLD)', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'0', u'NM_DNA': u'0', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'0', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'0'}, u'BSSE_QGF_19933_140124_SN792_0311_AC36GVACXX_3': {u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'161', u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'             8.6', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'1.45', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'ACTTGAA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:3', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'20_fox-1 2', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'             7.1', u'NM_DNA': u'           13.86', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'             1.4', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'UL_STOCK': u'10', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'             2.9'}, u'BSSE_QGF_19913_140124_SN792_0311_AC36GVACXX_2': {u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'163', u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'             8.3', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'1.22', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'ATCACGA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:2', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'1_wt L1', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'             6.5', u'NM_DNA': u'           11.51', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'             1.7', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'UL_STOCK': u'10', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'             3.5'}, u'BSSE_QGF_19922_140124_SN792_0311_AC36GVACXX_2': {u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'163', u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'             7.8', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'0.97', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'CTTGTAA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:2', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'10_Q L1', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'             5.6', u'NM_DNA': u'            9.16', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'             2.2', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'UL_STOCK': u'10', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'             4.4'}, u'BSSE_QGF_20032_140124_SN792_0311_AC36GVACXX_1': {u'QC_AT_DBSSE': u'true', u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'870', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'            18.4', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'13.8', u'CELL_PLASTICITY_SYSTEMSX': u'false', u'NCBI_ORGANISM_TAXONOMY': u'3569', u'LIBRARY_PROCESSING_SUCCESSFUL': u'false', u'HOW_OFTEN_SEQUENCED': u'1', u'BAREBACKED': u'false', u'SEQUENCING_APPLICATION': u'GENOMIC_DNA_SEQ', u'END_TYPE': u'PAIRED_END', u'BARCODE': u'CGTACGT', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'simone.fior@env.ethz.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:1', u'PREPARED_BY': u'Simone', u'LIBRARY_PROCESSING_FAILED': u'false', u'CONTACT_PERSON_NAME': u'Fior Simone', u'NM_DNA': u'           24.40', u'CYCLES_REQUESTED_BY_CUSTOMER': u'100', u'LIBRARY_PROCESSING_POSSIBLE': u'false', u'PRINCIPAL_INVESTIGATOR_NAME': u'Alexander Widmer', u'NANO_DROP': u'CONCND3300', u'AFFILIATION': u'OTHER', u'EXTERNAL_SAMPLE_NAME': u'5_Dcar_Faldumalp', u'BIOLOGICAL_SAMPLE_ARRIVED': u'2013-12-16 12:00:00 +0100', u'KIT': u'NONE', u'UL_EB_MISEQ': u'            16.7', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'alex.widmer@env.ethz.ch', u'UL_DNA': u'             1.6', u'NUMBER_OF_ATTACHMENTS': u'0', u'SAMPLE_KIND': u'GENOMIC_DNA', u'UL_STOCK': u'20', u'UL_DNA_MISEQ': u'             3.3'}, u'BSSE_QGF_19920_140124_SN792_0311_AC36GVACXX_2': {u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'162', u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'            16.9', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'1.38', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'ACTTGAA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:2', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'8_58 80 L2', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'            13.9', u'NM_DNA': u'           13.11', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'             3.1', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'UL_STOCK': u'20', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'             6.1'}, u'BSSE_QGF_19927_140124_SN792_0311_AC36GVACXX_3': {u'FRAGMENT_SIZE_PREPARED_ILLUMINA': u'160', u'HOW_OFTEN_SEQUENCED': u'1', u'UNIQUE_BARCODES': u'OK', u'UL_EB': u'             6.0', u'FLOW_CELL_PROPERTIES': u'Illumina RTA Version: 1.17.21.3\nSequencer : QGF HiSeq2000 (Rua)\nRun type: SINGLE_READ\nNumber of cycles: 51\nFLOWCELLTYPE: HiSeq Flow Cell v3\nKit : TruSeq SBS Kit v3', u'CONCENTRATION_PREPARED_ILLUMINA': u'0.52', u'SEQUENCING_APPLICATION': u'SMALL_RNA_SEQ', u'BARCODE': u'CGATGTA', u'BARCODE_COMPLEXITY_CHECKER': u'No Pool', u'CONTACT_PERSON_EMAIL': u'deni.subasic@imls.uzh.ch', u'INVOICE': u'false', 'LANE': u'140124_SN792_0311_AC36GVACXX:3', u'NCBI_ORGANISM_TAXONOMY': u'9606', u'EXTERNAL_SAMPLE_NAME': u'14_wt (N2) 2 (OLD)', u'CONTACT_PERSON_NAME': u'Deni Subasic', u'UL_EB_MISEQ': u'             2.0', u'NM_DNA': u'            5.00', u'PRINCIPAL_INVESTIGATOR_EMAIL': u'michael.hengartner@imls.uzh.ch', u'UL_DNA': u'             4.0', u'NUMBER_OF_ATTACHMENTS': u'0', u'PRINCIPAL_INVESTIGATOR_NAME': u'Michael Hengartner', u'SAMPLE_KIND': u'PROCESSED_DNA_LIBRARY', u'UL_STOCK': u'10', u'AFFILIATION': u'OTHER', u'UL_DNA_MISEQ': u'             8.0'}}
-      self.samplesPerLaneDict3 = {u'8': 9, u'1': 7, u'5': 1, u'7': 1, u'2': 13, u'6': 1, u'3': 13, u'4': 14}
-      self.flowCellName3 = 'C36GVACXX'
-                 
-    def test_createHiseqSampleSheet_PhiX_and_NoIndex (self):
-      '''
-      Case1: we have Phix and a non-barcoded sample in the same lane
-      Only one sample is allowed per lane
-      '''
-      
-      sampleSheetDict1, testFile = sampleSheetFile = createHiseqSampleSheet(self.parentDict, self.flowCellDict, 
-                                        self.samplesPerLaneDict, self.flowCellName, self.configMap, self.logger, self.parser)
-      
-      d1 = {u'6_BSSE_QGF_16255_140127_SN792_0312_AC36DWACXX_6': [u'C36DWACXX,6,BSSE_QGF_16255_140127_SN792_0312_AC36DWACXX_6,481459, ,Ga_lib_37,N,SINGLE_READ_151,ETHZ_D-BSSE,140127_SN792_0312_AC36DWACXX_6'],
-            u'5_BSSE_QGF_19988_140127_SN792_0312_AC36DWACXX_5': [u'C36DWACXX,5,BSSE_QGF_19988_140127_SN792_0312_AC36DWACXX_5,481459,ACAGTG,201,Y,SINGLE_READ_151,ETHZ_D-BSSE,140127_SN792_0312_AC36DWACXX_5'],
-            u'!': ['FCID,Lane,SampleID,SampleRef,Index,Description,Control,Recipe,Operator,SampleProject'],
-            u'4_BSSE_QGF_16254_140127_SN792_0312_AC36DWACXX_4': [u'C36DWACXX,4,BSSE_QGF_16254_140127_SN792_0312_AC36DWACXX_4,481459, ,Ga_lib_36,N,SINGLE_READ_151,ETHZ_D-BSSE,140127_SN792_0312_AC36DWACXX_4'],
-            u'7_BSSE_QGF_16256_140127_SN792_0312_AC36DWACXX_7': [u'C36DWACXX,7,BSSE_QGF_16256_140127_SN792_0312_AC36DWACXX_7,481459, ,Ga_lib_38,N,SINGLE_READ_151,ETHZ_D-BSSE,140127_SN792_0312_AC36DWACXX_7'],
-            u'8_BSSE_QGF_16257_140127_SN792_0312_AC36DWACXX_8': [u'C36DWACXX,8,BSSE_QGF_16257_140127_SN792_0312_AC36DWACXX_8,481459, ,Ga_lib_39,N,SINGLE_READ_151,ETHZ_D-BSSE,140127_SN792_0312_AC36DWACXX_8'],
-            u'5_BSSE_QGF_19989_140127_SN792_0312_AC36DWACXX_5': [u'C36DWACXX,5,BSSE_QGF_19989_140127_SN792_0312_AC36DWACXX_5,481459,GTGAAA,293,Y,SINGLE_READ_151,ETHZ_D-BSSE,140127_SN792_0312_AC36DWACXX_5'],
-            u'1_BSSE_QGF_16251_140127_SN792_0312_AC36DWACXX_1': [u'C36DWACXX,1,BSSE_QGF_16251_140127_SN792_0312_AC36DWACXX_1,481459, ,Ga_lib_33,N,SINGLE_READ_151,ETHZ_D-BSSE,140127_SN792_0312_AC36DWACXX_1'],
-            u'2_BSSE_QGF_16252_140127_SN792_0312_AC36DWACXX_2': [u'C36DWACXX,2,BSSE_QGF_16252_140127_SN792_0312_AC36DWACXX_2,481459, ,Ga_lib_34,N,SINGLE_READ_151,ETHZ_D-BSSE,140127_SN792_0312_AC36DWACXX_2'],
-            u'3_BSSE_QGF_16253_140127_SN792_0312_AC36DWACXX_3': [u'C36DWACXX,3,BSSE_QGF_16253_140127_SN792_0312_AC36DWACXX_3,481459, ,Ga_lib_35,N,SINGLE_READ_151,ETHZ_D-BSSE,140127_SN792_0312_AC36DWACXX_3']}
-
-      if (sampleSheetDict1 != d1):
-        self.fail("Dictionaries do not match!")
-
-        
-    def test_createHiseqSampleSheet_PhiX_plus_Index (self):
-      '''
-      Case2: We have several indexed samples plus a PhiX in the lane
-      '''
-      
-      sampleSheetDict2, testFile = sampleSheetFile = createHiseqSampleSheet(self.parentDict2, self.flowCellDict2, 
-                                        self.samplesPerLaneDict2, self.flowCellName2, self.configMap, self.logger, self.parser)
-      
-      d2 = {u'1_BSSE_QGF_20262_140219_M01761_0057_000000000_A825W_1': [u'000000000-A825W,1,BSSE_QGF_20262_140219_M01761_0057_000000000_A825W_1,1773,CAGAGAG-AGAGTAG,G01666,N,PAIRED_END_251,ETHZ_D-BSSE,140219_M01761_0057_000000000_A825W_1'],
-            u'1_BSSE_QGF_20258_140219_M01761_0057_000000000_A825W_1': [u'000000000-A825W,1,BSSE_QGF_20258_140219_M01761_0057_000000000_A825W_1,1773,TCCTGAG-CTAAGCC,G01662,N,PAIRED_END_251,ETHZ_D-BSSE,140219_M01761_0057_000000000_A825W_1'],
-            u'1_BSSE_QGF_20255_140219_M01761_0057_000000000_A825W_1': [u'000000000-A825W,1,BSSE_QGF_20255_140219_M01761_0057_000000000_A825W_1,1773,TAAGGCG-GTAAGGA,G01659,N,PAIRED_END_251,ETHZ_D-BSSE,140219_M01761_0057_000000000_A825W_1'],
-            u'1_BSSE_QGF_20259_140219_M01761_0057_000000000_A825W_1': [u'000000000-A825W,1,BSSE_QGF_20259_140219_M01761_0057_000000000_A825W_1,1773,GGACTCC-TAGATCG,G01663,N,PAIRED_END_251,ETHZ_D-BSSE,140219_M01761_0057_000000000_A825W_1'],
-            u'1_BSSE_QGF_20266_140219_M01761_0057_000000000_A825W_1': [u'000000000-A825W,1,BSSE_QGF_20266_140219_M01761_0057_000000000_A825W_1,1773,GTAGAGG-CTAAGCC,G01670,N,PAIRED_END_251,ETHZ_D-BSSE,140219_M01761_0057_000000000_A825W_1'],
-            u'!': ['FCID,Lane,SampleID,SampleRef,Index,Description,Control,Recipe,Operator,SampleProject'],
-            u'1_BSSE_QGF_20263_140219_M01761_0057_000000000_A825W_1': [u'000000000-A825W,1,BSSE_QGF_20263_140219_M01761_0057_000000000_A825W_1,1773,GCTACGC-ACTGCAT,G01667,N,PAIRED_END_251,ETHZ_D-BSSE,140219_M01761_0057_000000000_A825W_1'],
-            u'1_BSSE_QGF_20261_140219_M01761_0057_000000000_A825W_1': [u'000000000-A825W,1,BSSE_QGF_20261_140219_M01761_0057_000000000_A825W_1,1773,CTCTCTA-TATCCTC,G01665,N,PAIRED_END_251,ETHZ_D-BSSE,140219_M01761_0057_000000000_A825W_1'],
-            u'1_BSSE_QGF_20264_140219_M01761_0057_000000000_A825W_1': [u'000000000-A825W,1,BSSE_QGF_20264_140219_M01761_0057_000000000_A825W_1,1773,CGAGGCT-ACTGCAT,G01668,N,PAIRED_END_251,ETHZ_D-BSSE,140219_M01761_0057_000000000_A825W_1'],
-            u'1_BSSE_QGF_20257_140219_M01761_0057_000000000_A825W_1': [u'000000000-A825W,1,BSSE_QGF_20257_140219_M01761_0057_000000000_A825W_1,1773,AGGCAGA-AAGGAGT,G01661,N,PAIRED_END_251,ETHZ_D-BSSE,140219_M01761_0057_000000000_A825W_1'],
-            u'1_BSSE_QGF_20265_140219_M01761_0057_000000000_A825W_1': [u'000000000-A825W,1,BSSE_QGF_20265_140219_M01761_0057_000000000_A825W_1,1773,AAGAGGC-AAGGAGT,G01669,N,PAIRED_END_251,ETHZ_D-BSSE,140219_M01761_0057_000000000_A825W_1'],
-            u'1_BSSE_QGF_20256_140219_M01761_0057_000000000_A825W_1': [u'000000000-A825W,1,BSSE_QGF_20256_140219_M01761_0057_000000000_A825W_1,1773,CGTACTA-ACTGCAT,G01660,N,PAIRED_END_251,ETHZ_D-BSSE,140219_M01761_0057_000000000_A825W_1'],
-            u'1_BSSE_QGF_20260_140219_M01761_0057_000000000_A825W_1': [u'000000000-A825W,1,BSSE_QGF_20260_140219_M01761_0057_000000000_A825W_1,1773,TAGGCAT-CTCTCTA,G01664,N,PAIRED_END_251,ETHZ_D-BSSE,140219_M01761_0057_000000000_A825W_1']}
-
-      if (sampleSheetDict2 != d2):
-        self.fail("Dictionaries do not match!")
-    
-
-    def test_createHiseqSampleSheet_Lane5_PhiX (self):
-      '''
-      Case3: "Normal" use case with Lane #5 as a PhiX Control lane 
-      '''
-      sampleSheetDict3, testFile = sampleSheetFile = createHiseqSampleSheet(self.parentDict3, self.flowCellDict3, 
-                                        self.samplesPerLaneDict3, self.flowCellName3, self.configMap, self.logger, self.parser)
-      
-      d3 =  {u'4_BSSE_QGF_20018_140124_SN792_0311_AC36GVACXX_4': [u'C36GVACXX,4,BSSE_QGF_20018_140124_SN792_0311_AC36GVACXX_4,9606,ACTTGA,8_G11_838_NO,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_4'],
-             u'5_BSSE_QGF_16028_140124_SN792_0311_AC36GVACXX_5': [u'C36GVACXX,5,BSSE_QGF_16028_140124_SN792_0311_AC36GVACXX_5,10847, ,PhiX,Y,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_5'],
-             u'4_BSSE_QGF_20014_140124_SN792_0311_AC36GVACXX_4': [u'C36GVACXX,4,BSSE_QGF_20014_140124_SN792_0311_AC36GVACXX_4,9606,TGACCA,4_G08_792_TA1,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_4'],
-             u'3_BSSE_QGF_19933_140124_SN792_0311_AC36GVACXX_3': [u'C36GVACXX,3,BSSE_QGF_19933_140124_SN792_0311_AC36GVACXX_3,9606,ACTTGA,20_fox_1_2,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_3'],
-             u'8_BSSE_QGF_20041_140124_SN792_0311_AC36GVACXX_8': [u'C36GVACXX,8,BSSE_QGF_20041_140124_SN792_0311_AC36GVACXX_8,27434,CAGATC,16Ny,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_8'],
-             u'6_BSSE_QGF_19956_140124_SN792_0311_AC36GVACXX_6': [u'C36GVACXX,6,BSSE_QGF_19956_140124_SN792_0311_AC36GVACXX_6,9606, ,Ina_PseudoUridination,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_6'],
-             u'2_BSSE_QGF_19918_140124_SN792_0311_AC36GVACXX_2': [u'C36GVACXX,2,BSSE_QGF_19918_140124_SN792_0311_AC36GVACXX_2,9606,GCCAAT,6_mir_58_L3,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_2'],
-             u'2_BSSE_QGF_19916_140124_SN792_0311_AC36GVACXX_2': [u'C36GVACXX,2,BSSE_QGF_19916_140124_SN792_0311_AC36GVACXX_2,9606,TGACCA,4_mir_58_L1,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_2'],
-             u'3_BSSE_QGF_19927_140124_SN792_0311_AC36GVACXX_3': [u'C36GVACXX,3,BSSE_QGF_19927_140124_SN792_0311_AC36GVACXX_3,9606,CGATGT,14_wt_N2_2_OLD_,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_3'],
-             u'2_BSSE_QGF_19913_140124_SN792_0311_AC36GVACXX_2': [u'C36GVACXX,2,BSSE_QGF_19913_140124_SN792_0311_AC36GVACXX_2,9606,ATCACG,1_wt_L1,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_2'],
-             u'3_BSSE_QGF_19929_140124_SN792_0311_AC36GVACXX_3': [u'C36GVACXX,3,BSSE_QGF_19929_140124_SN792_0311_AC36GVACXX_3,9606,TGACCA,16_asd_1_1_OLD_,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_3'],
-             u'8_BSSE_QGF_20037_140124_SN792_0311_AC36GVACXX_8': [u'C36GVACXX,8,BSSE_QGF_20037_140124_SN792_0311_AC36GVACXX_8,27434,CGATGT,14An,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_8'],
-             u'4_BSSE_QGF_20025_140124_SN792_0311_AC36GVACXX_4': [u'C36GVACXX,4,BSSE_QGF_20025_140124_SN792_0311_AC36GVACXX_4,9606,GAAACC,15_G12_336_TA2,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_4'],
-             u'4_BSSE_QGF_20020_140124_SN792_0311_AC36GVACXX_4': [u'C36GVACXX,4,BSSE_QGF_20020_140124_SN792_0311_AC36GVACXX_4,9606,TAGCTT,10_G11_838_TA2,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_4'],
-             u'4_BSSE_QGF_20016_140124_SN792_0311_AC36GVACXX_4': [u'C36GVACXX,4,BSSE_QGF_20016_140124_SN792_0311_AC36GVACXX_4,9606,GCCAAT,6_G09_245_NO,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_4'],
-             u'7_BSSE_QGF_19956_140124_SN792_0311_AC36GVACXX_7': [u'C36GVACXX,7,BSSE_QGF_19956_140124_SN792_0311_AC36GVACXX_7,9606, ,Ina_PseudoUridination,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_7'],
-             u'2_BSSE_QGF_19922_140124_SN792_0311_AC36GVACXX_2': [u'C36GVACXX,2,BSSE_QGF_19922_140124_SN792_0311_AC36GVACXX_2,9606,CTTGTA,10_Q_L1,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_2'],
-             u'1_BSSE_QGF_20033_140124_SN792_0311_AC36GVACXX_1': [u'C36GVACXX,1,BSSE_QGF_20033_140124_SN792_0311_AC36GVACXX_1,3569,ATTCCT,6_Dcar_Niedergampel,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_1'],
-             u'4_BSSE_QGF_20017_140124_SN792_0311_AC36GVACXX_4': [u'C36GVACXX,4,BSSE_QGF_20017_140124_SN792_0311_AC36GVACXX_4,9606,CAGATC,7_G09_245_TA1,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_4'],
-             u'1_BSSE_QGF_20030_140124_SN792_0311_AC36GVACXX_1': [u'C36GVACXX,1,BSSE_QGF_20030_140124_SN792_0311_AC36GVACXX_1,3569,GTGGCC,3_Dcar_Gibidumsee,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_1'],
-             u'8_BSSE_QGF_20043_140124_SN792_0311_AC36GVACXX_8': [u'C36GVACXX,8,BSSE_QGF_20043_140124_SN792_0311_AC36GVACXX_8,27434,AGTCAA,14Ny,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_8'],
-             u'3_BSSE_QGF_19926_140124_SN792_0311_AC36GVACXX_3': [u'C36GVACXX,3,BSSE_QGF_19926_140124_SN792_0311_AC36GVACXX_3,9606,ATCACG,13_wt_N2_1_OLD_,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_3'],
-             u'1_BSSE_QGF_20029_140124_SN792_0311_AC36GVACXX_1': [u'C36GVACXX,1,BSSE_QGF_20029_140124_SN792_0311_AC36GVACXX_1,3569,GATCAG,2_Dcar_Grengiols,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_1'],
-             u'3_BSSE_QGF_19936_140124_SN792_0311_AC36GVACXX_3': [u'C36GVACXX,3,BSSE_QGF_19936_140124_SN792_0311_AC36GVACXX_3,9606,AGTCAA,23_fox_1_asd_1_2,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_3'],
-             u'3_BSSE_QGF_19935_140124_SN792_0311_AC36GVACXX_3': [u'C36GVACXX,3,BSSE_QGF_19935_140124_SN792_0311_AC36GVACXX_3,9606,CTTGTA,22_fox_1_asd_1_1,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_3'],
-             u'2_BSSE_QGF_19921_140124_SN792_0311_AC36GVACXX_2': [u'C36GVACXX,2,BSSE_QGF_19921_140124_SN792_0311_AC36GVACXX_2,9606,GGCTAC,9_58_80_L3,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_2'],
-             u'8_BSSE_QGF_20038_140124_SN792_0311_AC36GVACXX_8': [u'C36GVACXX,8,BSSE_QGF_20038_140124_SN792_0311_AC36GVACXX_8,27434,TGACCA,16Ab,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_8'],
-             u'8_BSSE_QGF_20044_140124_SN792_0311_AC36GVACXX_8': [u'C36GVACXX,8,BSSE_QGF_20044_140124_SN792_0311_AC36GVACXX_8,27434,AGTTCC,37Ny,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_8'],
-             u'4_BSSE_QGF_20012_140124_SN792_0311_AC36GVACXX_4': [u'C36GVACXX,4,BSSE_QGF_20012_140124_SN792_0311_AC36GVACXX_4,9606,CGATGT,2_G11_806_TA1,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_4'],
-             u'!': ['FCID,Lane,SampleID,SampleRef,Index,Description,Control,Recipe,Operator,SampleProject'],
-             u'2_BSSE_QGF_19919_140124_SN792_0311_AC36GVACXX_2': [u'C36GVACXX,2,BSSE_QGF_19919_140124_SN792_0311_AC36GVACXX_2,9606,CAGATC,7_58_80_L1,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_2'],
-             u'3_BSSE_QGF_19928_140124_SN792_0311_AC36GVACXX_3': [u'C36GVACXX,3,BSSE_QGF_19928_140124_SN792_0311_AC36GVACXX_3,9606,TTAGGC,15_wt_N2_3_OLD_,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_3'],
-             u'3_BSSE_QGF_19932_140124_SN792_0311_AC36GVACXX_3': [u'C36GVACXX,3,BSSE_QGF_19932_140124_SN792_0311_AC36GVACXX_3,9606,CAGATC,19_fox_1_1,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_3'],
-             u'8_BSSE_QGF_20039_140124_SN792_0311_AC36GVACXX_8': [u'C36GVACXX,8,BSSE_QGF_20039_140124_SN792_0311_AC36GVACXX_8,27434,ACAGTG,22Ab,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_8'],
-             u'2_BSSE_QGF_19917_140124_SN792_0311_AC36GVACXX_2': [u'C36GVACXX,2,BSSE_QGF_19917_140124_SN792_0311_AC36GVACXX_2,9606,ACAGTG,5_mir_58_L2,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_2'],
-             u'4_BSSE_QGF_20024_140124_SN792_0311_AC36GVACXX_4': [u'C36GVACXX,4,BSSE_QGF_20024_140124_SN792_0311_AC36GVACXX_4,9606,CAAAAG,14_G12_336_TA1,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_4'],
-             u'4_BSSE_QGF_20019_140124_SN792_0311_AC36GVACXX_4': [u'C36GVACXX,4,BSSE_QGF_20019_140124_SN792_0311_AC36GVACXX_4,9606,GATCAG,9_G11_838_TA1,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_4'],
-             u'1_BSSE_QGF_20031_140124_SN792_0311_AC36GVACXX_1': [u'C36GVACXX,1,BSSE_QGF_20031_140124_SN792_0311_AC36GVACXX_1,3569,GTTTCG,4_Dcar_Simplonpass,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_1'],
-             u'4_BSSE_QGF_20011_140124_SN792_0311_AC36GVACXX_4': [u'C36GVACXX,4,BSSE_QGF_20011_140124_SN792_0311_AC36GVACXX_4,9606,ATCACG,1_G11_806_NO,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_4'],
-             u'4_BSSE_QGF_20021_140124_SN792_0311_AC36GVACXX_4': [u'C36GVACXX,4,BSSE_QGF_20021_140124_SN792_0311_AC36GVACXX_4,9606,GGCTAC,11_G09_258_NO,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_4'],
-             u'2_BSSE_QGF_19924_140124_SN792_0311_AC36GVACXX_2': [u'C36GVACXX,2,BSSE_QGF_19924_140124_SN792_0311_AC36GVACXX_2,9606,AGTTCC,12_Q_L3,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_2'],
-             u'2_BSSE_QGF_19923_140124_SN792_0311_AC36GVACXX_2': [u'C36GVACXX,2,BSSE_QGF_19923_140124_SN792_0311_AC36GVACXX_2,9606,AGTCAA,11_Q_L2,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_2'],
-             u'2_BSSE_QGF_19914_140124_SN792_0311_AC36GVACXX_2': [u'C36GVACXX,2,BSSE_QGF_19914_140124_SN792_0311_AC36GVACXX_2,9606,CGATGT,2_wt_L2,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_2'],
-             u'3_BSSE_QGF_19931_140124_SN792_0311_AC36GVACXX_3': [u'C36GVACXX,3,BSSE_QGF_19931_140124_SN792_0311_AC36GVACXX_3,9606,GCCAAT,18_asd_1_3_OLD_,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_3'],
-             u'1_BSSE_QGF_20032_140124_SN792_0311_AC36GVACXX_1': [u'C36GVACXX,1,BSSE_QGF_20032_140124_SN792_0311_AC36GVACXX_1,3569,CGTACG,5_Dcar_Faldumalp,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_1'],
-             u'4_BSSE_QGF_20013_140124_SN792_0311_AC36GVACXX_4': [u'C36GVACXX,4,BSSE_QGF_20013_140124_SN792_0311_AC36GVACXX_4,9606,TTAGGC,3_G11_806_TA2,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_4'],
-             u'3_BSSE_QGF_19934_140124_SN792_0311_AC36GVACXX_3': [u'C36GVACXX,3,BSSE_QGF_19934_140124_SN792_0311_AC36GVACXX_3,9606,GGCTAC,21_fox_1_3,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_3'],
-             u'3_BSSE_QGF_19937_140124_SN792_0311_AC36GVACXX_3': [u'C36GVACXX,3,BSSE_QGF_19937_140124_SN792_0311_AC36GVACXX_3,9606,AGTTCC,24_fox_1_asd_1_3,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_3'],
-             u'2_BSSE_QGF_19915_140124_SN792_0311_AC36GVACXX_2': [u'C36GVACXX,2,BSSE_QGF_19915_140124_SN792_0311_AC36GVACXX_2,9606,TTAGGC,3_wt_L3,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_2'],
-             u'4_BSSE_QGF_20015_140124_SN792_0311_AC36GVACXX_4': [u'C36GVACXX,4,BSSE_QGF_20015_140124_SN792_0311_AC36GVACXX_4,9606,ACAGTG,5_G08_792_NO,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_4'],
-             u'2_BSSE_QGF_19920_140124_SN792_0311_AC36GVACXX_2': [u'C36GVACXX,2,BSSE_QGF_19920_140124_SN792_0311_AC36GVACXX_2,9606,ACTTGA,8_58_80_L2,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_2'],
-             u'1_BSSE_QGF_20028_140124_SN792_0311_AC36GVACXX_1': [u'C36GVACXX,1,BSSE_QGF_20028_140124_SN792_0311_AC36GVACXX_1,3569,TTAGGC,1_Dcar_Unterstalden,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_1'],
-             u'8_BSSE_QGF_20040_140124_SN792_0311_AC36GVACXX_8': [u'C36GVACXX,8,BSSE_QGF_20040_140124_SN792_0311_AC36GVACXX_8,27434,GCCAAT,37Br,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_8'],
-             u'3_BSSE_QGF_19930_140124_SN792_0311_AC36GVACXX_3': [u'C36GVACXX,3,BSSE_QGF_19930_140124_SN792_0311_AC36GVACXX_3,9606,ACAGTG,17_asd_1_2_OLD_,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_3'],
-             u'8_BSSE_QGF_20042_140124_SN792_0311_AC36GVACXX_8': [u'C36GVACXX,8,BSSE_QGF_20042_140124_SN792_0311_AC36GVACXX_8,27434,CTTGTA,26Ny,N,SINGLE_READ_51,ETHZ_D-BSSE,140124_SN792_0311_AC36GVACXX_8']}
-      
-      if (sampleSheetDict3 != d3):
-        self.fail("Dictionaries do not match!")
-     
-    def tearDown(self):
-      pass
-
-suite = unittest.TestLoader().loadTestsFromTestCase(TestCreateHiseqSampleSheet)
-unittest.TextTestRunner(verbosity=2).run(suite)
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/Jython/createSampleSheet_Illumina_NGS.py b/deep_sequencing_unit/source/Jython/createSampleSheet_Illumina_NGS.py
deleted file mode 100644
index 327c19822c2..00000000000
--- a/deep_sequencing_unit/source/Jython/createSampleSheet_Illumina_NGS.py
+++ /dev/null
@@ -1,507 +0,0 @@
-'''
-@copyright:
-Copyright 2013 ETH Zuerich, CISD
- 
-@license:
-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.
-
-@author:
-Manuel Kohler
-
-@description:
-Creates the SampleSheet.csv out of values from openBIS for Demultiplexing 
-used in the Illumina pipeline (configureBclToFastq.pl) 
-
-@attention:
-Runs under Jython
-
-@note:
-Takes into account to replace special characters with an underscore so that the Illumina script
-does not fail
-
-HiSeq Header Description
-========================
-Column Header  Description
-FCID  Flow cell ID
-Lane  Positive integer, indicating the lane number (1-8)
-SampleID  ID of the sample
-SampleRef  The reference used for alignment for the sample
-Index  Index sequences. Multiple index reads are separated by a hyphen (for example, ACCAGTAA-GGACATGA).
-Description  Description of the sample
-Control  Y indicates this lane is a control lane, N means sample
-Recipe Recipe used during sequencing
-Operator Name or ID of the operator
-SampleProject  The project the sample belongs to
-'''
-
-from __future__ import with_statement
-import os
-import logging
-import re
-import sys
-import string
-import smtplib
-import operator
-from ConfigParser import SafeConfigParser
-from optparse import OptionParser
-from datetime import *
-
-from ch.systemsx.cisd.openbis.dss.client.api.v1 import OpenbisServiceFacadeFactory
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-from java.util import EnumSet
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SampleFetchOption
-
-lineending = {'win32':'\r\n', 'linux':'\n', 'mac':'\r'}
-COMMA = ','
-SAMPLETYPE = 'SAMPLETYPE'
-
-def getLaneAncestors(service, lane, logger):
-  '''
-  Gets all ancestors and corresponding properties of a sample
-  '''
-  fetchOptions = EnumSet.of(SampleFetchOption.ANCESTORS, SampleFetchOption.PROPERTIES)
-  sc = SearchCriteria();
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, lane));
-  dList = service.searchForSamples(sc, fetchOptions)
-
-  def recursiveSamples(list, codeList, propertyDict):
-    '''
-    Recursively walks through the sample tree and write the sample codes
-    to a list and the properties into a dictionary. The sample code is
-    the key, the properties are the values
-    '''
-       
-    for element in list:
-      elementCode = element.getCode()
-      codeList.append(elementCode)
-      elementProperties = element.getProperties()
-      
-      tmpDict = {}
-      
-      for eP in elementProperties:
-        tmpDict[eP] = elementProperties[eP]
-        
-      tmpDict[SAMPLETYPE] = element.getSampleTypeCode()
-      propertyDict[elementCode] = tmpDict
-
-      elementParents = element.getParents()
-      
-      if (elementParents.size() > 0):
-        recursiveSamples(elementParents, codeList, propertyDict)
- 
-  codeList = []
-  propertyDict = {}
-    
-  recursiveSamples(dList, codeList, propertyDict)
-  
-  logger.info(codeList)
-  logger.info(propertyDict)
-  
-  return codeList, propertyDict
-
-
-def login(configDict, logger):
-  logger.info('Logging into ' + configDict['openbisServer'])
-  try:
-    service = OpenbisServiceFacadeFactory.tryCreate(configDict['openbisUserName'],
-                                                  configDict['openbisPassword'],
-                                                  configDict['openbisServer'],
-                                                  configDict['connectionTimeout'])
-  except BaseException:
-    print ('Could not connect to ' + configDict['openbisServer'] + '. Please check if the server ' +
-    'address is OK, the firewall is not blocking the communication, or openBIS is down.')
-
-  return service
-
-def logout (service, logger):
-  service.logout()
-  logger.info('Logged out')
-
-def setUpLogger(logPath, logLevel=logging.INFO):
-  logFileName = 'createSampleSheet'
-  d = datetime.now()
-  logFileName = logFileName + '_' + d.strftime('%Y-%m-%d_%H_%M_%S') + '.log'
-  logging.basicConfig(filename=logPath + logFileName,
-                      format='%(asctime)s [%(levelname)s] %(message)s', level=logLevel)
-  logger = logging.getLogger(logFileName)
-  return logger
-
-def parseOptions(logger):
-  logger.info('Parsing command line parameters')
-  parser = OptionParser(version='%prog 1.0')
-  parser.add_option('-f', '--flowcell',
-                  dest='flowcell',
-                  help='The flowcell which is used to create the SampleSheet.csv',
-                  metavar='<flowcell>')
-  parser.add_option('-l', '--lineending',
-                  dest='lineending',
-                  type='choice',
-                  action='store',
-                  choices=['win32', 'linux', 'mac'],
-                  default='linux',
-                  help='Specify end of line separator: win32, linux, mac. Default: linux' ,
-                  metavar='<lineending>')
-  parser.add_option('-o', '--outdir',
-                  dest='outdir',
-                  default='./',
-                  help='Specify the ouput directory. Default: ./' ,
-                  metavar='<outdir>')
-  parser.add_option('-s', '--singlelane',
-                  dest='singlelane',
-                  default=False,
-                  action='store_true',
-                  help='Creates a single Sample Sheet for each lane. Default: False')
-  parser.add_option('-d', '--debug',
-                  dest='debug',
-                  default=False,
-                  action='store_true',
-                  help='Verbose debug logging. Default: False')
-  parser.add_option('-v', '--verbose',
-                  dest='verbose',
-                  default=False,
-                  action='store_true',
-                  help='Write Sample Sheet to stout. Default: False')
-
-  (options, args) = parser.parse_args()
-
-  if options.outdir[-1] <> '/':
-    options.outdir = options.outdir + '/'
-
-  if options.flowcell is None:
-    parser.print_help()
-    exit(-1)
-  return options
-
-def parseConfigurationFile(logger, propertyFile='etc/createSampleSheet_Illumina_NGS.properties'):
-  '''
-  Parses the given config files and returns the values
-  '''
-  logger.info('Reading config file ' + propertyFile)
-  config = SafeConfigParser()
-  config.read(propertyFile)
-  config.sections()
-  return config
-
-def readConfig(logger):
-
-  GENERAL = 'GENERAL'
-  OPENBIS = 'OPENBIS'
-  ILLUMINA = 'ILLUMINA'
-
-  configDict = {}
-
-  configParameters = parseConfigurationFile(logger)
-
-  configDict['facilityName'] = configParameters.get(GENERAL, 'facilityName')
-  configDict['facilityNameShort'] = configParameters.get(GENERAL, 'facilityNameShort')
-  configDict['facilityInstitution'] = configParameters.get(GENERAL, 'facilityInstitution')
-  configDict['sampleSheetFileName'] = configParameters.get(GENERAL, 'sampleSheetFileName')
-  configDict['separator'] = configParameters.get(GENERAL, 'separator')
-  configDict['indexSeparator'] = configParameters.get(GENERAL, 'indexSeparator')
-
-  configDict['openbisUserName'] = configParameters.get(OPENBIS, 'openbisUserName')
-  configDict['openbisPassword'] = configParameters.get(OPENBIS, 'openbisPassword', raw=True)
-  configDict['openbisServer'] = configParameters.get(OPENBIS, 'openbisServer')
-  configDict['connectionTimeout'] = configParameters.getint(OPENBIS, 'connectionTimeout')
-  configDict['illuminaFlowCellTypeName'] = configParameters.get(OPENBIS, 'illuminaFlowCellTypeName')
-
-  configDict['illuminaFlowLaneTypeName'] = configParameters.get(OPENBIS, 'illuminaFlowLaneTypeName')
-  configDict['libraryPoolTypeName'] = configParameters.get(OPENBIS, 'libraryPoolTypeName')
-  configDict['libraryTypeName'] = configParameters.get(OPENBIS, 'libraryTypeName')
-  configDict['rawTypeName'] = configParameters.get(OPENBIS, 'rawTypeName')
-  configDict['masterTypeName'] = configParameters.get(OPENBIS, 'masterTypeName')
-  configDict['index1Name'] = configParameters.get(OPENBIS, 'index1Name')
-  configDict['index2Name'] = configParameters.get(OPENBIS, 'index2Name')
-  configDict['operator'] = configParameters.get(OPENBIS, 'operator')
-  configDict['endType'] = configParameters.get(OPENBIS, 'endType')
-  configDict['lengthIndex1'] = configParameters.get(OPENBIS, 'lengthIndex1')
-  configDict['lengthIndex2'] = configParameters.get(OPENBIS, 'lengthIndex2')
-  
-  configDict['endType'] = configParameters.get(OPENBIS, 'endType')
-  configDict['cycles'] = configParameters.get(OPENBIS, 'cycles')
-  configDict['runFolderName'] = configParameters.get(OPENBIS, 'runFolderName')
-  configDict['ncbiOrganismTaxonomy'] = configParameters.get(OPENBIS, 'ncbiOrganismTaxonomy')
-  configDict['externalSampleName'] = configParameters.get(OPENBIS, 'externalSampleName')
-  
-  configDict['phixNcbiCode'] = configParameters.getint(OPENBIS, 'phixNcbiCode')
-
-  configDict['hiSeqNames'] = configParameters.get(ILLUMINA, 'hiSeqNames')
-  configDict['hiSeqHeader'] = configParameters.get(ILLUMINA, 'hiSeqHeader')
-
-  return configDict
-
-def sanitizeString(myString):
-  return re.sub('[^A-Za-z0-9]+', '_', myString)
-
-def getVocabulary(vocabularyCode):
-  ''' Returns the vocabulary terms and vocabulary labels of a vocabulary in a dictionary
-      specified by the parameter vocabularyCode
-      '''
-  terms = []
-  vocabularies = service.listVocabularies()
-  vocabularyDict = {}
-  for vocabulary in vocabularies:
-    if (vocabulary.getCode() == vocabularyCode):
-      terms = vocabulary.getTerms()
-  if terms:
-    for term in terms:
-      vocabularyDict[term.getCode()] = term.getLabel()
-  else:
-    print ('No vocabulary found for ' + vocabularyCode)
-  return vocabularyDict
-
-def getFlowCell (illuminaFlowCellTypeName, flowCellName, service, logger):
-  '''
-  Getting the the matching FlowCell
-  '''
-  sc = SearchCriteria();
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, illuminaFlowCellTypeName));
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCellName));
-  foundSample = service.searchForSamples(sc)
-  try:
-    assert foundSample.size() == 1
-  except AssertionError:
-    print (str(foundSample.size()) + ' flow cells found which match.')
-    exit(1)
-
-  logger.info('Found ' + foundSample[0].getCode() + ' in openBIS')
-  # Search for contained samples
-  sampleSc = SearchCriteria()
-  sampleSc.addSubCriteria(SearchSubCriteria.createSampleContainerCriteria(sc))
-  foundContainedSamples = service.searchForSamples(sampleSc)
-  
-  return foundSample[0], foundContainedSamples
-
-
-def getParents(sampleName, service):
-  '''
-  Returns a list of parents of a sample 
-  '''
-  sc = SearchCriteria();
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleName));
-  foundSample = service.searchForSamples(sc)
-
-  # set the criteria for getting the parents when providing the child name
-  sampleSc = SearchCriteria()
-  sampleSc.addSubCriteria(SearchSubCriteria.createSampleChildCriteria(sc))
-  foundParentSamples = service.searchForSamples(sampleSc)
-
-  return foundParentSamples
-
-def getContainedSampleProperties(logger, containedSamples, service):
-  '''
-  Takes a java.util.ArrayList of contained samples, retrieves the parents and their properties and returns it
-  as a dictionary. The key is the sample name, the value is a dictionary of the properties
-  '''
-  laneParentDict = {}
-
-  for lane in containedSamples:
-    parents = getParents (lane.getCode(), service)
-
-    for parent in parents:
-      parentCode = parent.getCode()
-      parentProperties = parent.getProperties()
-
-      propertyDict = {}
-      for property in parentProperties:
-        propertyDict[property] = parentProperties.get(property)
-
-      propertyDict['LANE'] = lane.getCode()
-      propertyDict['SAMPLE_TYPE'] = parent.getSampleTypeCode()
-      myKey = sanitizeString(lane.getCode() + '_' + parentCode)
-      laneParentDict[myKey] = propertyDict
-
-  logger.info('Found ' + str(len(laneParentDict)) + ' samples on the flow cell.')
-  return laneParentDict
-
-
-def convertSampleToDict(foundFlowCell, configDict):
-  '''
-  converts <type 'ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample'> to a python dict
-  '''
-  flowCellDict = {}
-  fcProperties = foundFlowCell.getProperties()
-  for property in fcProperties:
-    flowCellDict[property] = fcProperties.get(property)
-  flowCellDict['Name'] = foundFlowCell.getIdentifier().split('/')[-1]
-  flowCellDict['CODE'] = foundFlowCell.getCode()
-  return flowCellDict
-
-def writeSampleSheet(configDict, flowCellName, sortedSampleSheetList, myoptions, logger, fileName):
-  '''
-  Write the given list of class sampleSheetLine to a csv file
-  '''
-  newline = lineending[myoptions.lineending]
-  myFile = fileName + '_' + flowCellName + '.csv'
-  try:
-    with open(myFile, 'w') as sampleSheetFile:
-      sampleSheetFile.write(configDict['hiSeqHeader'] + newline)
-      for laneElement in sortedSampleSheetList:
-        for indexElement in laneElement:
-          if myoptions.verbose:
-            print indexElement
-          sampleSheetFile.write(indexElement.__str__() + newline)
-    logger.info('Writing file ' + myFile)
-
-  except IOError:
-    logger.error('File error: ' + str(err))
-    print ('File error: ' + str(err))
-
-
-def writeSampleSheetPerLane(configDict, flowCellName, sortedSampleSheetList, myoptions, logger, fileName):
-  '''
-  Write the given list of class sampleSheetLine to multiple csv files
-  '''
-  newline = lineending[myoptions.lineending]
-
-  for laneElement in sortedSampleSheetList:
-    lane = sortedSampleSheetList.index(laneElement) + 1
-    myFile = fileName + '_' + flowCellName + '_' + str(lane) +'.csv'
-    try:
-      with open(myFile, 'w') as sampleSheetFile:
-        sampleSheetFile.write(configDict['hiSeqHeader'] + newline)
-        for indexElement in laneElement:
-          if myoptions.verbose:
-            print indexElement
-          sampleSheetFile.write(indexElement.__str__() + newline)
-    
-      logger.info('Writing file ' + myFile)
-
-    except IOError:
-      logger.error('File error: ' + str(err))
-      print ('File error: ' + str(err))
-
-
-
-class sampleSheetLine:
-  '''
-  Represents one line in a Illumina Sample Sheet
-  '''
-  
-  def __init__(self, fcId='', lane=0, sampleId='', sampleRef='', index='', description='',
-                 control='', recipe='', operator='', sampleProject=''):
-    self.fcId = fcId
-    self.lane = lane
-    self.sampleId = sampleId
-    self.sampleRef = sampleRef
-    self.index = index
-    self.description = description
-    self.control = control
-    self.recipe = recipe
-    self.operator = operator
-    self.sampleProject = sampleProject
-
-  def __repr__(self):
-    return self.__str__()
-      
-  def __str__(self):
-    return str(self.fcId) + COMMA + str(self.lane) + COMMA + str(self.sampleId) + COMMA +  \
-      str(self.sampleRef) + COMMA + str(self.index) + COMMA + str(self.description) + COMMA + \
-      str(self.control) + COMMA + str(self.recipe) + COMMA + str(self.operator) + COMMA + \
-      str(self.sampleProject)
-
-def main():
-  '''
-  Main script
-  '''
-  demuxPenalty = -1
-  print datetime.now()
-
-  logger = setUpLogger('log/')
-  logger.info('Started Creation of Sample Sheet...')
-
-  myoptions = parseOptions(logger)
-  if myoptions.debug:
-    logger.setLevel(logging.DEBUG)
-
-  flowCellName = myoptions.flowcell
-  configDict = readConfig(logger)
-  service = login(configDict, logger)
-
-  foundFlowCell, containedSamples = getFlowCell(configDict['illuminaFlowCellTypeName'], flowCellName, service, logger)
-  flowCellName = foundFlowCell.getCode()
-  flowCellDict = convertSampleToDict(foundFlowCell, configDict)
-  
-  index1ReadLength = int(flowCellDict[configDict['lengthIndex1']]) + demuxPenalty
-  indexRead2Length = int(flowCellDict[configDict['lengthIndex2']]) + demuxPenalty
-
-  laneParentDict = getContainedSampleProperties(logger, containedSamples, service)
-  
-  sortedParentList = laneParentDict.keys()
-  sortedParentList.sort()
-  
-  sampleSheetList = []
-  
-  for laneKey in sortedParentList:
-    lane = laneParentDict[laneKey]['LANE']
-    logger.info('Processing Lane '+ lane)
-    codeList, propertyDict = getLaneAncestors(service, lane, logger)
-    
-    ssLine = sampleSheetLine (operator=configDict['facilityInstitution'])
-    ssLineList = []
-    
-    for code in codeList:
-      sampleProperties = propertyDict[code]
-      
-      # Precedence of the EXTERNAL_SAMPLE_NAME property is:
-      # RAW_SAMPLE -> LIBRARY -> LIBRARY_POOL 
-      try:
-        ssLine.description = sanitizeString(sampleProperties[configDict['externalSampleName']])
-      except:
-        pass
-      
-      if sampleProperties[SAMPLETYPE] == configDict['libraryTypeName']:
-        
-        index = ''
-          
-        if configDict['index1Name'] in sampleProperties and index1ReadLength > 0:
-          index = sampleProperties[configDict['index1Name']][0:index1ReadLength]
-        
-        if configDict['index2Name'] in sampleProperties and indexRead2Length > 0:
-          index = index + configDict['indexSeparator'] + sampleProperties[configDict['index2Name']][0:indexRead2Length]
-          
-        ssLine.fcId = flowCellName
-        ssLine.lane = lane[-1]
-        ssLine.sampleId = code + '_' + flowCellDict[configDict['runFolderName']] + '_' + ssLine.lane
-        ssLine.index = index
-        
-      if sampleProperties[SAMPLETYPE] == configDict['masterTypeName']:
-        ssLine.sampleRef = sampleProperties[configDict['ncbiOrganismTaxonomy']] 
-        
-        # Check if PhiX Control
-        if int(ssLine.sampleRef) == configDict['phixNcbiCode']:
-          ssLine.control = 'Y'
-        else:
-          ssLine.control = 'N'
-        
-        ssLine.recipe = flowCellDict[configDict['endType']] + '_' + flowCellDict[configDict['cycles']]
-        ssLine.sampleProject = flowCellDict[configDict['runFolderName']] + '_' + ssLine.lane
-        
-        ssLineList.append(ssLine)
-        ssLine = sampleSheetLine (operator=configDict['facilityInstitution'])
-
-    sampleSheetList.append(ssLineList)
-
-  if myoptions.singlelane:
-    writeSampleSheetPerLane (configDict, flowCellName, sampleSheetList, myoptions, logger, fileName=myoptions.outdir +
-                      configDict['sampleSheetFileName'])
-  else:    
-    writeSampleSheet(configDict, flowCellName, sampleSheetList, myoptions, logger, fileName=myoptions.outdir +
-                      configDict['sampleSheetFileName'])
-    
-  logout(service, logger)
-  print datetime.now()
-
-if __name__ == "__main__":
-    main()
diff --git a/deep_sequencing_unit/source/Jython/createSampleSheet_Illumina_NGS_Test.py b/deep_sequencing_unit/source/Jython/createSampleSheet_Illumina_NGS_Test.py
deleted file mode 100644
index a6f6db94500..00000000000
--- a/deep_sequencing_unit/source/Jython/createSampleSheet_Illumina_NGS_Test.py
+++ /dev/null
@@ -1,45 +0,0 @@
-import unittest
-import re 
-from createSampleSheet_Illumina_NGS import *
-
-class TestsanitizeString(unittest.TestCase):
-
-  def testDefault(self):
-    self.assertEqual(sanitizeString('abc#a$v%c^D&P-'), 'abc_a_v_c_D_P_')
-
-  def testOnlySpecialChars(self):         
-    self.assertEqual(sanitizeString('@#$%^&*('), '_')
-
-
-class TestGetFlowCell(unittest.TestCase):
-  
-  def setUp(self):
-    self.logger = setUpLogger('log/')
-    configDict = readConfig(self.logger)
-    self.service = OpenbisServiceFacadeFactory.tryCreate(configDict['openbisUserName'],
-                                                  configDict['openbisPassword'],
-                                                  configDict['openbisServer'],
-                                                  configDict['connectionTimeout'])
-    print('Ran SetUp...')
-
-  
-  def testGetFlowCell (self):
-
-    myCode = 'D1W0VACXX'
-    foundFlowCell, containedSamples = getFlowCell ('ILLUMINA_FLOW_CELL', myCode, self.service, self.logger)
-    
-    self.assertEqual(foundFlowCell.getCode(), myCode)
-    self.assertEqual(containedSamples.size(), 8)
-    
-    fcProp = foundFlowCell.getProperties()
-    self.assertEqual(fcProp['SEQUENCER'], 'SN792')
-    
-  def tearDown(self):
-    self.service.logout()
-    self.logger.info('Logged out') 
-
-def main():
-    unittest.main()
-
-if __name__ == '__main__':
-    main()
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/Jython/createSampleSheet_bcl2fastq.py b/deep_sequencing_unit/source/Jython/createSampleSheet_bcl2fastq.py
deleted file mode 100644
index a3b321c76f3..00000000000
--- a/deep_sequencing_unit/source/Jython/createSampleSheet_bcl2fastq.py
+++ /dev/null
@@ -1,786 +0,0 @@
-'''
-@copyright:
-Copyright 2016 ETH Zuerich, SIS
- 
-@license:
-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.
-
-@author:
-Manuel Kohler
-
-@description:
-Creates the SampleSheet.csv out of values from openBIS for Demultiplexing 
-used in the Illumina pipeline (bcl2fastq) 
-
-@attention:
-Runs under Jython
-
-@note:
-Takes into account to replace special characters with an underscore so that the Illumina script
-does not fail
-
-HiSeq Header Description
-========================
-Column Header  Description
-FCID  Flow cell ID
-Lane  Positive integer, indicating the lane number (1-8)
-SampleID  ID of the sample
-SampleRef  The reference used for alignment for the sample
-Index  Index sequences. Multiple index reads are separated by a hyphen (for example, ACCAGTAA-GGACATGA).
-Description  Description of the sample
-Control  Y indicates this lane is a control lane, N means sample
-Recipe Recipe used during sequencing
-Operator Name or ID of the operator
-SampleProject  The project the sample belongs to
-'''
-
-import os
-import logging
-import re
-import sys
-import string
-import smtplib
-import argparse
-from ConfigParser import SafeConfigParser
-from datetime import *
-from collections import OrderedDict
-
-from email.MIMEMultipart import MIMEMultipart
-from email.MIMEBase import MIMEBase
-from email.MIMEText import MIMEText
-from email.Utils import COMMASPACE, formatdate
-from email import Encoders
-
-from ch.systemsx.cisd.openbis.dss.client.api.v1 import OpenbisServiceFacadeFactory
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-lineending = {'win32':'\r\n', 'linux':'\n', 'mac':'\r'}
-COMMA = ','
-CSV = ".csv"
-
-
-class Sequencers:
-    HISEQ_4000, HISEQ_3000, HISEQ_2500, HISEQ_2000, HISEQ_X, NEXTSEQ_500, MISEQ , UNIDENTIFIED = \
-        ('Illumina HiSeq 4000', 'Illumina HiSeq 3000', 'Illumina HiSeq 2500', 'Illumina HiSeq 2000',
-         'Illumina HiSeq X', 'Illumina NextSeq 500', 'Illumina MiSeq', 'Unidentified')
-HISEQ_LIST = [Sequencers.HISEQ_2000, Sequencers.HISEQ_2500, Sequencers.HISEQ_3000, Sequencers.HISEQ_4000, Sequencers.HISEQ_X]
-
-
-def login(logger, config_dict):
-    logger.info('Logging into ' + config_dict['openbisServer'])
-    service = OpenbisServiceFacadeFactory.tryCreate(config_dict['openbisUserName'],
-                                                    config_dict['openbisPassword'],
-                                                    config_dict['openbisServer'],
-                                                    config_dict['connectionTimeout'])
-    return service
-
-
-def logout (service, logger):
-    service.logout()
-    logger.info('Logged out')
-
-
-def setUpLogger(logPath, logLevel=logging.INFO):
-    logFileName = 'create_sample_sheet_dict'
-    d = datetime.now()
-    logFileName = logFileName + '_' + d.strftime('%Y-%m-%d_%H_%M_%S') + '.log'
-    logging.basicConfig(filename=logPath + logFileName,
-                      format='%(asctime)s [%(levelname)s] %(message)s', level=logLevel)
-    logger = logging.getLogger(logFileName)
-    return logger
-
-
-def parseOptions(logger):
-    logger.info('Parsing command line parameters')
-    parser = argparse.ArgumentParser(version='%prog 1.0', description='Process some integers.')
-    parser.add_argument('-f', '--flowcell',
-                  dest='flowcell',
-                  help='The flowcell which is used to create the SampleSheet.csv',
-                  metavar='<flowcell>')
-    parser.add_argument('-m', '--mailist',
-                  dest='maillist',
-                  default=False,
-                  action='store_true',
-                  help='Generated Sample Sheet will be addtionally sent as email to the defined list of recipients')
-    parser.add_argument('-l', '--lineending',
-                  dest='lineending',
-                  action='store',
-                  choices=['win32', 'linux', 'mac'],
-                  default='win32',
-                  help='Specify end of line separator: win32, linux, mac. Default: win32' ,
-                  metavar='<lineending>')
-    parser.add_argument('-o', '--outdir',
-                  dest='outdir',
-                  default='./',
-                  help='Specify the ouput directory. Default: ./' ,
-                  metavar='<outdir>')
-    parser.add_argument('-s', '--singlelane',
-                  dest='singlelane',
-                  default=True,
-                  action='store_true',
-                  help='Creates a single Sample Sheet for each lane. Default: False')
-    parser.add_argument('-d', '--debug',
-                  dest='debug',
-                  default=False,
-                  action='store_true',
-                  help='Verbose debug logging. Default: False')
-    parser.add_argument('--verbose',
-                  dest='verbose',
-                  default=False,
-                  action='store_true',
-                  help='Write Sample Sheet to stout. Default: False')
-
-    args = parser.parse_args()
-    
-    if args.outdir[-1] <> '/':
-        args.outdir = args.outdir + '/'
-
-    if args.flowcell is None:
-        parser.print_help()
-        exit(-1)
-    return args
-
-
-def parseConfigurationFile(propertyFile='etc/createSampleSheet.properties'):
-    '''
-    Parses the given config files and returns the values
-    '''
-    config = SafeConfigParser()
-    config.read(propertyFile)
-    config.sections()
-    return config
-
-
-def readConfig(logger):
-    GENERAL = 'GENERAL'
-    OPENBIS = 'OPENBIS'
-    ILLUMINA = 'ILLUMINA'
-    
-    logger.info('Reading config file')
-    config_dict = {}
-    
-    configParameters = parseConfigurationFile()
-    config_dict['facilityName'] = configParameters.get(GENERAL, 'facilityName')
-    config_dict['facilityNameShort'] = configParameters.get(GENERAL, 'facilityNameShort')
-    config_dict['facilityInstitution'] = configParameters.get(GENERAL, 'facilityInstitution')
-    config_dict['mailList'] = configParameters.get(GENERAL, 'mailList')
-    config_dict['mailFrom'] = configParameters.get(GENERAL, 'mailFrom')
-    config_dict['smptHost'] = configParameters.get(GENERAL, 'smptHost')
-    config_dict['SampleSheetFileName'] = configParameters.get(GENERAL, 'SampleSheetFileName')
-    config_dict['separator'] = configParameters.get(GENERAL, 'separator')
-    config_dict['indexSeparator'] = configParameters.get(GENERAL, 'indexSeparator')
-    
-    config_dict['openbisUserName'] = configParameters.get(OPENBIS, 'openbisUserName')
-    config_dict['openbisPassword'] = configParameters.get(OPENBIS, 'openbisPassword', raw=True)
-    config_dict['openbisServer'] = configParameters.get(OPENBIS, 'openbisServer')
-    config_dict['connectionTimeout'] = configParameters.getint(OPENBIS, 'connectionTimeout')
-    config_dict['illuminaFlowCellTypeName'] = configParameters.get(OPENBIS, 'illuminaFlowCellTypeName')
-    config_dict['index1Name'] = configParameters.get(OPENBIS, 'index1Name')
-    config_dict['index2Name'] = configParameters.get(OPENBIS, 'index2Name')
-    config_dict['index1Length'] = configParameters.get(OPENBIS, 'index1Length')
-    config_dict['index2Length'] = configParameters.get(OPENBIS, 'index2Length')
-    config_dict['endType'] = configParameters.get(OPENBIS, 'endType')
-    config_dict['cycles'] = configParameters.get(OPENBIS, 'cycles')
-    config_dict['controlLane'] = configParameters.get(OPENBIS, 'controlLane')
-    config_dict['ncbi'] = configParameters.get(OPENBIS, 'ncbi')
-    config_dict['externalSampleName'] = configParameters.get(OPENBIS, 'externalSampleName')
-    config_dict['laneCount'] = configParameters.get(OPENBIS, 'laneCount')
-    config_dict['kit'] = configParameters.get(OPENBIS, 'kit')
-    config_dict['10XSampleType'] = configParameters.get(OPENBIS, '10XSampleType')
-    config_dict['10XIndexSet'] = configParameters.get(OPENBIS, '10XIndexSet')
-    config_dict['recovered_cells'] = configParameters.get(OPENBIS, 'recovered_cells')
-    
-    config_dict['headerSection'] = configParameters.get(ILLUMINA, 'headerSection')
-    config_dict['readsSection'] = configParameters.get(ILLUMINA, 'readsSection')
-    config_dict['settingsSection'] = configParameters.get(ILLUMINA, 'settingsSection')
-    config_dict['dataSectionSingleRead'] = configParameters.get(ILLUMINA, 'dataSectionSingleRead')
-    config_dict['dataSectionDualRead'] = configParameters.get(ILLUMINA, 'dataSectionDualRead')
-    config_dict['workflow'] = configParameters.get(ILLUMINA, 'workflow')
-    config_dict['application'] = configParameters.get(ILLUMINA, 'application')
-    config_dict['chemistry'] = configParameters.get(ILLUMINA, 'chemistry')
-    
-    config_dict['truSeqAdapter1'] = configParameters.get(ILLUMINA, 'truSeqAdapter1')
-    config_dict['truSeqAdapter2'] = configParameters.get(ILLUMINA, 'truSeqAdapter2')
-    config_dict['nexteraAdapter'] = configParameters.get(ILLUMINA, 'nexteraAdapter')
-    config_dict['iemFileVersion'] = configParameters.get(ILLUMINA, 'iemFileVersion')
-    
-    config_dict['configureBclToFastqPath'] = configParameters.get(ILLUMINA, 'configureBclToFastqPath')
-    config_dict['failedReads'] = configParameters.get(ILLUMINA, 'failedReads')
-    config_dict['clusterCount'] = configParameters.get(ILLUMINA, 'clusterCount')
-    config_dict['clusterCountNumber'] = configParameters.get(ILLUMINA, 'clusterCountNumber')
-    config_dict['outputDir'] = configParameters.get(ILLUMINA, 'outputDir')
-    config_dict['sampleSheetName'] = configParameters.get(ILLUMINA, 'sampleSheetName')
-    config_dict['baseMask'] = configParameters.get(ILLUMINA, 'baseMask')
-    
-    return config_dict
-
-
-def getDate():
-    d = datetime.now()
-    return d.strftime('%A, %d of %B %Y')
-
-
-def sanitize_string(myString):
-    return re.sub('[^A-Za-z0-9]+', '_', myString)
-
-
-def get_vocabulary(vocabulary_code, service):
-    """
-    Returns the vocabulary terms and vocabulary labels of a vocabulary in a dictionary
-    specified by the parameter vocabularyCode
-    """
-    
-    terms = []
-    vocabularies = service.listVocabularies()
-    vocabulary_dict = {}
-    for vocabulary in vocabularies:
-        if vocabulary.getCode() == vocabulary_code:
-            terms = vocabulary.getTerms()
-    if terms:
-        for term in terms:
-            vocabulary_dict[term.getCode()] = term.getLabel()
-    else:
-        print ('No vocabulary found for ' + vocabulary_code)
-#     print(vocabulary_dict)
-    return vocabulary_dict
-
-
-def send_email(emails, flowCellName, config_dict, logger, subject, body, files=""):
-    """
-    Send out an email to the specified recipients
-    """
-    COMMASPACE = ', '
-    emails_list = emails.split()
-    
-    msg = MIMEMultipart()
-    msg['From'] = config_dict['mailFrom']
-    msg['To'] = COMMASPACE.join(emails_list)
-    msg['Date'] = formatdate(localtime=True)
-    msg['Subject'] = subject
-    
-    msg.attach(MIMEText(body))
-    
-    for f in files:
-        part = MIMEBase('application', 'octet-stream')
-        part.set_payload(open(f, 'rb').read())
-        Encoders.encode_base64(part)
-        part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f))
-        msg.attach(part)
-    
-    smtp = smtplib.SMTP(config_dict['smptHost'])
-    smtp.sendmail(config_dict['mailFrom'], emails_list, msg.as_string())
-    smtp.close()
-    logger.info('Sent email to ' + COMMASPACE.join(emails_list))
-
-
-def get_flowcell (illuminaFlowCellTypeName, flowCellName, service, logger):
-    """
-    Getting the the matching FlowCell
-    """
-    sc = SearchCriteria();
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, illuminaFlowCellTypeName));
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCellName));
-    foundSample = service.searchForSamples(sc)
-    try:
-        assert foundSample.size() == 1
-    except AssertionError:
-        print (str(foundSample.size()) + ' flow cells found which match.')
-        exit(1)
-
-    logger.info('Found ' + foundSample[0].getCode() + ' in openBIS')
-    # Search for contained samples
-    sampleSc = SearchCriteria()
-    sampleSc.addSubCriteria(SearchSubCriteria.createSampleContainerCriteria(sc))
-    foundContainedSamples = service.searchForSamples(sampleSc)
-
-    return foundSample[0], foundContainedSamples
-
-
-def get_reverse_complement(sequence):
-    lookup_table = {'A': 'T', 'T': 'A', 'G': 'C', 'C': 'G'}
-    reverse_complement = ''
-    for nucleotide in reversed(sequence):
-        reverse_complement += lookup_table[nucleotide]
-    return reverse_complement
-
-
-def get_model(run_id):
-    """
-    Guesses the sequencer model from the run folder name
-
-    Current Naming schema for Illumina run folders, as far as I know,
-    no documentation found on this, Illumina introduced a field called
-    <InstrumentID> on the NextSeq runParameters.xml. That might be an
-    option for the future. Alternatively a combination of the fields
-    <ApplicationName> and <ApplicationVersion>.
-
-    MiSeq: 150130_M01761_0114_000000000-ACUR0
-    NextSeq: 150202_NS500318_0047_AH3KLMBGXX
-    HiSeq 2000: 130919_SN792_0281_BD2CHRACXX
-    HiSeq 2500: 150203_D00535_0052_AC66RWANXX
-    HiSeq 3000: 150724_J00121_0017_AH2VYMBBXX
-    HiSeq 4000: 150210_K00111_0013_AH2372BBXX
-    HiSeq X: 141121_ST-E00107_0356_AH00C3CCXX
-    """
-    date, machine_id, run_number, fc_string = os.path.basename(run_id).split("_")
-
-    if machine_id.startswith("NS"):
-        model = Sequencers.NEXTSEQ_500
-    elif machine_id.startswith("M"):
-        model = Sequencers.MISEQ
-    elif machine_id.startswith("D"):
-        model = Sequencers.HISEQ_2500
-    elif machine_id.startswith("SN"):
-        model = Sequencers.HISEQ_2000
-    elif machine_id.startswith("J"):
-        model = Sequencers.HISEQ_3000
-    elif machine_id.startswith("K"):
-        model = Sequencers.HISEQ_4000
-    elif machine_id.startswith("ST"):
-        model = Sequencers.HISEQ_X
-    else:
-        model = Sequencers.UNIDENTIFIED
-    return model
-
-
-def get_parents(sampleName, service):
-    """
-    Returns a list of parents of a sample 
-    """
-    sc = SearchCriteria();
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleName));
-    foundSample = service.searchForSamples(sc)
-    
-    try:
-        assert foundSample.size() == 1
-    except AssertionError:
-        print (str(foundSample.size()) + ' flow lanes found which match.')
-    
-    # set the criteria for getting the parents when providing the child name
-    sampleSc = SearchCriteria()
-    sampleSc.addSubCriteria(SearchSubCriteria.createSampleChildCriteria(sc))
-    foundParentSamples = service.searchForSamples(sampleSc)
-    
-    return foundParentSamples
-
-
-def get_lane_sample_properties(lane, service, config_dict):
-    parentDict = {}
-    parents = get_parents (lane.getCode(), service)
-
-    try:
-        assert parents.size() >= 1
-    except AssertionError:
-        pass
-
-    for parent in parents:
-        parentCode = parent.getCode()
-        parentProperties = parent.getProperties()
-        propertyDict = {}
-        for property in parentProperties:
-            propertyDict[property] = parentProperties.get(property)
-
-        propertyDict['LANE'] = lane.getCode()
-        
-        myKey = sanitize_string(parentCode + '_' + lane.getCode())
-        parentDict[myKey] = propertyDict
-        
-    return parentDict
-
-
-
-def get_contained_sample_properties(contained_samples, service, config_dict):
-    """
-    Takes a  list of contained samples, retrieves the parents and their properties and returns it
-    as a dictionary. The key is the sample name, the value is a list of the properties
-
-    Additionally a dictionary with the lane (key) and the number of samples (value) is returned
-    """
-    parentDict = {}
-    samplesPerLaneDict = {}
-    barcodesPerLaneDict = {}
-
-    for lane in contained_samples:
-        parents = get_parents (lane.getCode(), service)
-
-        try:
-            assert parents.size() >= 1
-        except AssertionError:
-            pass
-#             print (str(parents.size()) + ' parents found for lane ' + lane.getCode())
-
-        samplesPerLaneDict[lane.getCode()[-1]] = len(parents)
-
-        for parent in parents:
-            parentCode = parent.getCode()
-            parentProperties = parent.getProperties()
-            propertyDict = {}
-            for property in parentProperties:
-                propertyDict[property] = parentProperties.get(property)
-
-            propertyDict['LANE'] = lane.getCode()
-            plain_lane = lane.getCode().split(':')[-1]
-            
-            try:
-                if barcodesPerLaneDict.has_key(plain_lane):
-                    barcodesPerLaneDict[plain_lane].append(propertyDict[config_dict['index1Name']])
-                else:
-                    barcodesPerLaneDict[plain_lane] = [propertyDict[config_dict['index1Name']]]
-            except:
-                  pass
-
-            try:
-                if barcodesPerLaneDict.has_key(plain_lane):
-                    barcodesPerLaneDict[plain_lane].append(propertyDict[config_dict['10XIndexSet']])
-                else:
-                    barcodesPerLaneDict[plain_lane] = [propertyDict[config_dict['10XIndexSet']]]
-            except:
-                  pass
-
-            myKey = sanitize_string(parentCode + '_' + lane.getCode())
-            parentDict[myKey] = propertyDict
-
-    return parentDict, samplesPerLaneDict, barcodesPerLaneDict
-
-
-def transform_sample_to_dict(foundFlowCell):
-    """
-    converts <type 'ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample'> to a python dict
-    """
-    flowCellDict = {}
-    fcProperties = foundFlowCell.getProperties()
-    
-    for property in fcProperties:
-        flowCellDict[property] = fcProperties.get(property)
-    flowCellDict['Project'] = foundFlowCell.getExperimentIdentifierOrNull().split('/')[-1]
-    flowCellDict['Name'] = foundFlowCell.getIdentifier().split('/')[-1]
-    return flowCellDict
-
-
-def write_sample_sheet_single_lane(model, ordered_sample_sheet_dict, flowCellDict, index_length_dict,
-                                         parentDict, config_dict, myoptions, logger, csv_file):
-    
-    newline = lineending[myoptions.lineending]
-    
-    if (model is Sequencers.NEXTSEQ_500):
-        lane_number = 2
-    else:
-        lane_number = int(flowCellDict[config_dict['laneCount']]) + 1
-
-    for lane in range(1, lane_number):
-        header_list = create_header_section (model, config_dict, parentDict, flowCellDict, index_length_dict, lane)
-        per_lane_dict = [ordered_sample_sheet_dict[key] for key in ordered_sample_sheet_dict.keys() if int(key[0]) == lane]
-        csv_file_path = myoptions.outdir + csv_file + "_" + str(lane) + CSV
-        try:
-            with open(csv_file_path, 'wb') as sample_sheet_file:                
-                for header_element in header_list:
-                    sample_sheet_file.write(header_element + newline)
-                    if myoptions.verbose:
-                        print(header_element + newline)
-                for sample in per_lane_dict:
-                    sample_sheet_file.write(str(sample[0]) + newline)
-                    if myoptions.verbose:
-                        print(str(sample[0]) + newline)
-        except IOError:
-            logger.error('File error: ' + str(err))
-            print ('File error: ' + str(err))
-
-def write_marker_file(flowCellDict, myoptions):
-    marker_file_path = myoptions.outdir + ".10x_run_" + flowCellDict['Name']
-    with open(marker_file_path, 'wb') as marker_file:
-        for flowcell_prop in flowCellDict:
-            marker_file.write(flowcell_prop)
-
-
-def create_header_section (model, config_dict, parentDict, flowCellDict, index_length_dict, lane):
-
-    kitsDict = {"CHIP_SEQ_SAMPLE_PREP" : ["", ""],
-                "TRUSEQ_RNA_SAMPLEPREPKIT_V2_ILLUMINA" : ["A", "TruSeq LT"],
-                "NEXTERA_XT_DNA_SAMPLE_PREPARATION_KIT_ILLUMINA" : ["S", "Nextera XT"],
-                "TRUSEQ_CHIP_SAMPLE_PREP_KIT" : ["A", "TruSeq LT"],
-                "MRNA_SEQ_SAMPLE_PREP" : ["", ""],
-                "TRUSEQRNA_SAMPLE_PREP_KIT" : ["A", "TruSeq LT"],
-                "NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1" : ["A", "TruSeq LT"],
-                "NEBNEXT_CHIP-SEQ_LIBRARY_PREP_REAGENT_SET" : ["A", "TruSeq LT"],
-                "RIBOZERO_SCRIPTSEQ_MRNA-SEQ_KIT" : ["", ""],
-                "NEXTERA_DNA_SAMPLE_PREPARATION_KIT_ILLUMINA" : ["N", "Nextera"],
-                "GENOMICDNA_SAMPLE_PREP" : ["", ""],
-                "AGILENT_SURESELECTXT_AUTOMATEDLIBRARYPREP" : ["", ""],
-                "TRUSEQ_DNA_SAMPLE_PREP_KIT" : ["A", "TruSeq LT"],
-                "NEXTERA_DNA_SAMPLE_PREP_KITS" : ["N", "Nextera"],
-                "AGILENT_SURESELECT_ENRICHMENTSYSTEM" : ["", ""],
-                "TRUSEQ_DNA_SAMPLE_PREP_KIT_V2" : ["A", "TruSeq LT"],
-                "AGILENT_SURESELECT_HUMAN_ALL_EXON_V5_UTRS" : ["", ""],
-                "POLYA_SCRIPTSEQ_MRNA-SEQ_KIT" : ["", ""],
-                "AGILENT_SURESELECTXT2_MOUSE_ALL_EXON" : ["", ""],
-                "PAIRED_END_DNA_SAMPLE_PREP" : ["", ""],
-                "NEXTERA_DNA_SAMPLE_PREP_KIT_BUFFER_HMW" : ["N", "Nextera"]
-    }
-    
-    separator = config_dict['separator']
-    header_list = []
-    
-    len_index1 = index_length_dict[int(lane)][0]
-    len_index2 = index_length_dict[int(lane)][1]
-    
-    # here we take the first sample to determine the Sample Prep Kit 
-    try:
-        assay = kitsDict [parentDict.itervalues().next()[config_dict['kit']]][1]
-    except:
-#         print "No Kit set for sample. Will not set the assay value in the sample sheet"
-        assay = ""
-    
-    header_section = config_dict['headerSection'].split(separator)
-    header_section.reverse()
-    header_list = [header_section.pop().strip()]
-    header_list.append(header_section.pop().strip() + separator + config_dict['iemFileVersion'])
-    header_list.append(header_section.pop().strip() + separator + config_dict['facilityInstitution'])
-    header_list.append(header_section.pop().strip() + separator + config_dict['facilityName'])
-    header_list.append(header_section.pop().strip() + separator + flowCellDict['Name'])
-    header_list.append(header_section.pop().strip() + separator + datetime.now().strftime('%m/%d/%Y'))
-    header_list.append(header_section.pop().strip() + separator + config_dict['workflow'])
-    header_list.append(header_section.pop().strip() + separator + config_dict['application'])
-    header_list.append(header_section.pop().strip() + separator + assay) 
-    header_list.append(header_section.pop().strip() + separator + flowCellDict[config_dict['endType']] + '_' + flowCellDict[config_dict['cycles']])
-    header_list.append(header_section.pop().strip() + separator + config_dict['chemistry'])
-#     if config_dict['10XIndexSet']:
-#         header_list.append(config_dict['recovered_cells'])
-    header_list.append('')
-
-    reads_section = config_dict['readsSection'].split(separator)
-    reads_section.reverse()
-    header_list.append(reads_section.pop())
-    header_list.append(flowCellDict[config_dict['cycles']])
-    if (flowCellDict[config_dict['endType']] == 'PAIRED_END'):
-        header_list.append(flowCellDict[config_dict['cycles']])
-    header_list.append('')
-
-    settings_section = config_dict['settingsSection'].split(separator)
-    settings_section.reverse()
-    header_list.append(settings_section.pop())
-#     if ('nextera' in assay.lower()):
-#         header_list.append(config_dict['nexteraAdapter'])
-#     if ('truseq' in assay.lower()):
-#         header_list.append(config_dict['truSeqAdapter1'])
-#         header_list.append(config_dict['truSeqAdapter2'])
-    header_list.append('')
-
-    if int(flowCellDict['INDEXREAD2']) > 0 and len_index2 > 0:
-        SeqDataSection = config_dict['dataSectionDualRead'].split(',')
-    else:
-        SeqDataSection = config_dict['dataSectionSingleRead'].split(',')
-
-    SeqDataSection.reverse()
-    header_list.append(SeqDataSection.pop())
-    
-    if model in Sequencers.NEXTSEQ_500:
-        # leaving out the 'Lane', as there are four but treat them as one
-        header_list.append(','.join(SeqDataSection.pop().strip().split()[1:]))
-    else:
-        header_list.append(','.join(SeqDataSection.pop().strip().split()))
-    
-    return header_list
-    
-
-def verify_index_length (parentDict, flowCellDict, config_dict, logger):
-    
-    index_length_dict = {}
-    verified_per_lane_dict = []
-    
-    flowcell_len_index1 = int(flowCellDict['INDEXREAD'])
-    flowcell_len_index2 = int(flowCellDict['INDEXREAD2'])
-    
-    logger.info("Flowcell has index length [" + str(flowcell_len_index1) + ", " + str(flowcell_len_index2) + "]")
-
-    for lane in range(1, int(flowCellDict['LANECOUNT']) + 1):
-        index1_set = set ()
-        index2_set = set ()
-        index1_length = 0
-        index2_length = 0
-        
-        logger.info("Lane: " + str(lane))
-        per_lane_list = [parentDict[key] for key in parentDict.keys() if int(key[-1]) == lane]
-        
-        for sample in per_lane_list:
-            # If no index then just skip this  sample
-            if (config_dict['index1Name'] not in sample) or (sample[config_dict['index1Name']] == 'NOINDEX'):
-                continue
-            index1 = sample[config_dict['index1Name']]
-            index2 = ""
-            if config_dict['index2Name'] in sample:
-                index2 = sample[config_dict['index2Name']]
-            
-            index1_set.add(len(index1))
-            if index2:
-                index2_set.add(len(index2))
-            else:
-                index2_set.add(0)
-                
-        # adding the index length of the flow cell to make sure that dual-indexed 
-        # samples also work on a single-indexed run
-        index1_set.add(flowcell_len_index1)
-        index2_set.add(flowcell_len_index2)
-         
-        if index1_set:
-            index1_length = min(index1_set)
-        if index2_set:
-            index2_length = min(index2_set)
-
-        index_length_dict[lane] = [index1_length, index2_length]
-        logger.info("Index1 Length Set: " + str(index1_set))
-        logger.info("Index2 Length Set: " + str(index2_set))
-        logger.info("Final length of index1 " + str(index1_length))
-        logger.info("Final length of index2 " + str(index2_length))
-        # print("Lane " + str(lane) + " [" + str(index1_length) + "," + str(index2_length) + "]")
-                    
-    return index_length_dict
-
-  
-def create_sample_sheet_dict(service, barcodesPerLaneDict, containedSamples, samplesPerLaneDict, model, parentDict, index_length_dict, flowCellDict,
-                             config_dict, index1Vocabulary, index2Vocabulary, flowCellName, logger):
-
-    sampleSheetDict = {}
-    _10_run = False
-    separator = config_dict['separator']
-    
-    for lane in containedSamples: 
-        lane_sample_properties = get_lane_sample_properties(lane, service, config_dict)
-        lane_int = lane.getCode().split(':')[-1]
-        single_index_set = False
-
-        try:
-            logger.info(barcodesPerLaneDict[lane_int])
-        except:
-            print("No index found for lane " + str(lane_int) + ". Using the first sample which is not phix.")
-            for key in lane_sample_properties.keys():
-                if lane_sample_properties[key][u'NCBI_ORGANISM_TAXONOMY'] != u'10847' and not single_index_set: 
-                    index1 = ""
-                    lane_string = ""
-                    if model in HISEQ_LIST or model in Sequencers.MISEQ:
-                        lane_string = lane_int + separator
-
-                    line = separator.join([lane_string + key, key + '_' + sanitize_string(lane_sample_properties[key][config_dict['externalSampleName']]), "", "", "", "", key, ""])
-                    sampleSheetDict[lane_int + '_' + key] = [line]
-                    single_index_set = True
-    
-
-        for key in lane_sample_properties.keys():
-            
-            # If no index or 'NOINDEX' assigned then just skip this  sample
-            if ((config_dict['index1Name'] not in lane_sample_properties[key] or lane_sample_properties[key][config_dict['index1Name']] == 'NOINDEX') and
-                config_dict['10XIndexSet'] not in lane_sample_properties[key]):
-                continue
-            
-            index1 = "" 
-            index2 = ""
-                        
-            if config_dict['index1Name'] in lane_sample_properties[key]:
-                index1 = lane_sample_properties[key][config_dict['index1Name']]
-                len_index1 = index_length_dict[int(lane_int)][0]
-                    
-            if config_dict['10XIndexSet'] in lane_sample_properties[key]:
-                index1 = lane_sample_properties[key][config_dict['10XIndexSet']]
-                # Do not modify the index length, as these are index sets provided by 10x 
-                len_index1 = len(index1)
-                _10_run = True
-                                 
-            if config_dict['index2Name'] in lane_sample_properties[key]:
-                index2 = lane_sample_properties[key][config_dict['index2Name']]
-                # Not needed, won't use it any more
-                indexNumber = index2Vocabulary[lane_sample_properties[key][config_dict['index2Name']]].split()[2]
-        
-            # try:
-            #    kit = lane_sample_properties[key][config_dict['kit']]
-            #    prefix = kitsDict[kit][0]
-            # except:
-            #    prefix = ""
-    
-            len_index2 = index_length_dict[int(lane_int)][1]
-    
-            lane_string = ""
-            if model in HISEQ_LIST or model in Sequencers.MISEQ:
-                lane_string = lane_int + separator
-            
-            if int(flowCellDict['INDEXREAD2']) > 0 and len_index2 > 0:
-                if model in Sequencers.NEXTSEQ_500:
-                    index2_processed = get_reverse_complement(index2[0:len_index2])
-                else:
-                    index2_processed = index2
-              
-                line = separator.join([lane_string + key,
-                                    key + '_' + sanitize_string(lane_sample_properties[key][config_dict['externalSampleName']]) + '_' + index1[0:len_index1] + '_' + index2[0:len_index2],
-                                    "", "", "", index1[0:len_index1], "", index2_processed, key, ""])
-                sampleSheetDict[lane_int + '_' + key] = [line]
-
-            else:
-                line = separator.join([lane_string + key, key + '_' + sanitize_string(lane_sample_properties[key][config_dict['externalSampleName']]) + '_' + index1[0:len_index1],
-                                       "", "", "", index1[0:len_index1], key, ""])
-                sampleSheetDict[lane_int + '_' + key] = [line]
-    
-    csv_file_name = config_dict['SampleSheetFileName'] + '_' + flowCellName
-    ordered_sample_sheet_dict = OrderedDict(sorted(sampleSheetDict.items(), key=lambda t: t[0]))
-    
-    return _10_run, ordered_sample_sheet_dict, csv_file_name
-
-'''
-Main script
-'''
-
-def main ():
-
-    logger = setUpLogger('log/')
-    logger.info('Started Creation of Sample Sheet...')
-
-    myoptions = parseOptions(logger)
-
-    if myoptions.debug:
-        logger.setLevel(logging.DEBUG)
-
-    flowCellName = myoptions.flowcell
-    config_dict = readConfig(logger)
-    service = login(logger, config_dict)
-
-    foundFlowCell, containedSamples = get_flowcell(config_dict['illuminaFlowCellTypeName'], flowCellName,
-                                                service, logger)
-    parentDict, samplesPerLaneDict, barcodesPerLaneDict = get_contained_sample_properties(containedSamples, service, config_dict)
-    flowCellName = foundFlowCell.getCode()
-    flowCellDict = transform_sample_to_dict(foundFlowCell)
-    model = get_model(flowCellDict['RUN_NAME_FOLDER'])
-    if not myoptions.verbose:
-        print("Auto-detected: " + model)
-    logger.info("Auto-detected: " + model)
-
-    index1Vocabulary = get_vocabulary(config_dict['index1Name'], service)
-    index2Vocabulary = get_vocabulary(config_dict['index2Name'], service)
-    index_length_dict = verify_index_length(parentDict, flowCellDict, config_dict, logger)
-    _10_run, ordered_sample_sheet_dict, csv_file_name = create_sample_sheet_dict(service, barcodesPerLaneDict, containedSamples,
-                                                                        samplesPerLaneDict, model, parentDict, index_length_dict,
-                                                                        flowCellDict, config_dict, index1Vocabulary, index2Vocabulary,
-                                                                        flowCellName, logger)
-    if len(ordered_sample_sheet_dict) < len(containedSamples):
-        subject = "Warning: Creation of Sample Sheet (" + flowCellName + ") failed. No indices found."
-        body = "Warning: No parents/libraries assigned to one of the flowlanes of " + flowCellName + \
-        ". Either it is a non-indexed lane or the parents are not set.\n" + \
-        "Check in the following map for missing lanes:\n" + str(ordered_sample_sheet_dict)
-        send_email(config_dict['mailList'], flowCellName, config_dict, logger, subject, body)
-    else:
-        write_sample_sheet_single_lane(model, ordered_sample_sheet_dict, flowCellDict, index_length_dict,
-                                          parentDict, config_dict, myoptions, logger, csv_file_name)
-        if _10_run:
-            write_marker_file(flowCellDict, myoptions)
-
-    logout(service, logger)
-
-if __name__ == "__main__":
-    main()
diff --git a/deep_sequencing_unit/source/Jython/createSampleSheet_bcl2fastq.sh b/deep_sequencing_unit/source/Jython/createSampleSheet_bcl2fastq.sh
deleted file mode 100755
index 5c44c2ff891..00000000000
--- a/deep_sequencing_unit/source/Jython/createSampleSheet_bcl2fastq.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/bash
-#
-# Launch script for CISD openBIS Create Sample Sheet for Illumina NGS 
-# Runs on Unix / Linux systems.
-# -------------------------------------------------------------------------
-
-JYTHON_FILE=createSampleSheet_bcl2fastq.py
-
-#
-# change to installation directory
-#
-bin=$0
-if [ -L $bin ]; then
-  bin=`dirname $bin`/`readlink $bin`
-fi
-WD=`dirname $bin`
-cd $WD
-SCRIPT=./`basename $0`
-
-if [ "$JAVA_HOME" != "" ]; then
-  JAVA_BIN="$JAVA_HOME/bin/java"
-else
-  JAVA_BIN="java"
-fi
-
-ALL_JAVA_OPTS="-Djavax.net.ssl.trustStore=etc/openBIS.keystore $JAVA_OPTS"
-
-LIB="lib"
-# echo "Starting Sample Sheet Creator for openBIS Illumina NGS"
-${JAVA_BIN} ${ALL_JAVA_OPTS} -cp ${LIB}/commons-codec.jar:${LIB}/commons-httpclient.jar:${LIB}/commons-logging.jar:${LIB}/dss_client.jar:${LIB}/spring.jar:${LIB}/stream-supporting-httpinvoker.jar:${LIB}/jython27-2.7.0.jar org.python27.util.jython $JYTHON_FILE "$@"
diff --git a/deep_sequencing_unit/source/Jython/createSampleSheet_bcl2fastq_Test.py b/deep_sequencing_unit/source/Jython/createSampleSheet_bcl2fastq_Test.py
deleted file mode 100644
index 772faceddad..00000000000
--- a/deep_sequencing_unit/source/Jython/createSampleSheet_bcl2fastq_Test.py
+++ /dev/null
@@ -1,575 +0,0 @@
-import unittest
-import re
-# import pytest
-from createSampleSheet_bcl2fastq import *
-
-def getTodayDate():
-    from datetime import date
-    d = date.today()
-    return d.strftime("%m/%d/%Y")
-
-
-class test_sanitize_string(unittest.TestCase):
- 
- 
-    def testDefault(self):
-        self.assertEqual(sanitize_string('abc#a$v%c^D&P-'), 'abc_a_v_c_D_P_')
- 
- 
-    def testOnlySpecialChars(self):         
-        self.assertEqual(sanitize_string('@#$%^&*('), '_')
- 
- 
-class test_get_model(unittest.TestCase):
- 
- 
-    def test_HiseqX(self):
-        self.assertEqual(get_model('141121_ST-E00107_0356_AH00C3CCXX'), Sequencers.HISEQ_X)
- 
- 
-    def test_expectError(self):
-        self.assertNotEqual(get_model('150724_J00121_0017_AH2VYMBBXX'), Sequencers.NEXTSEQ_500)
- 
- 
-class test_get_reverse_complement(unittest.TestCase):
- 
- 
-    def test_happyCase(self):
-        self.assertEqual(get_reverse_complement('ACTGAATTTT'), 'AAAATTCAGT', 'Reverse complement is faulty')
- 
- 
-    def test_failingCase(self):
-        self.assertNotEqual(get_reverse_complement('ACTG'), 'CAGA')
- 
- 
- 
-class create_sample_sheet_C7GMNANXX(unittest.TestCase):
-    """
-    HiSeq 2500, PAIRED_END, Dual Index
-    
-    """
- 
-    def setUp(self):
-        self.myCode = 'C7GMNANXX'
-        self.logger = setUpLogger('log/')
-        self.config_dict = readConfig(self.logger)
-         
-        import argparse
-        import shlex
-        parser = argparse.ArgumentParser()
-         
-        parser.add_argument('--flowcell')
-        parser.add_argument('--lineending')
-        parser.add_argument('--outdir')
-        parser.add_argument('--verbose')
-         
-        cmd_string = ['--flowcell', self.myCode, '--lineending', 'win32', '--outdir', '../../targets/playground', '--verbose', 'false']
-        self.options = parser.parse_args(cmd_string)
- 
-        self.service = OpenbisServiceFacadeFactory.tryCreate(self.config_dict['openbisUserName'],
-                                                      self.config_dict['openbisPassword'],
-                                                      self.config_dict['openbisServer'],
-                                                      self.config_dict['connectionTimeout'])
-         
-        self.flowcell, self.containedSamples = get_flowcell('ILLUMINA_FLOW_CELL',
-                                            self.myCode, self.service, self.logger)
-        self.flowCellDict = transform_sample_to_dict(self.flowcell)
-        self.parentDict, self.samplesPerLaneDict, self.barcodesPerLaneDict = get_contained_sample_properties(
-                                                    self.containedSamples, self.service, self.config_dict)
-        self.flowCellName = self.flowcell.getCode()
-        self.index1Vocabulary = get_vocabulary(self.config_dict['index1Name'], self.service)
-        self.index2Vocabulary = get_vocabulary(self.config_dict['index2Name'], self.service)
-        self.index_length_dict = verify_index_length(self.parentDict, self.flowCellDict, self.config_dict, self.logger)
-        self.model = get_model(self.flowCellDict['RUN_NAME_FOLDER'])
- 
- 
-    def test_get_flowCell (self):
-        self.assertEqual(self.flowcell.getCode(), self.myCode)
-        self.assertEqual(self.containedSamples.size(), 8)
-         
-        fcProp = self.flowcell.getProperties()
-        self.assertEqual(fcProp['SEQUENCER'], 'D00535')
-        self.assertEqual(self.flowCellDict['FLOWCELLTYPE'], 'HiSeq Flow Cell v4')
-     
-     
-    def test_get_contained_sample_properties(self):
-        self.assertEqual(self.parentDict['BSSE_QGF_34778_C7GMNANXX_1']['BARCODE'], 'GTCCGC')
-        self.assertEqual(self.samplesPerLaneDict['2'], 23)
- 
- 
-    def test_get_vocabulary(self):        
-        self.assertEqual(self.index1Vocabulary['CACTCAA'], 'Illumina A032 CACTCAA')
-        self.assertEqual(self.index2Vocabulary['GTAAGGAG'],'Index2 (i5) 505 GTAAGGAG')
- 
- 
-    def test_verify_index_length(self):
-        self.assertDictEqual(self.index_length_dict, {6: [6, 0], 5: [6, 0], 7: [8, 8], 8: [8, 8], 3: [8, 0], 2: [6, 0], 1: [6, 0], 4: [8, 0]})
-         
-         
-    def test_create_sample_sheet_dict(self):
-         
-        self.model = get_model(self.flowCellDict['RUN_NAME_FOLDER'])
- 
-        self.ordered_sample_sheet_dict, self.csv_file_name = create_sample_sheet_dict(self.service, self.barcodesPerLaneDict, self.containedSamples, self.samplesPerLaneDict, self.model, self.parentDict,
-                                                                                      self.index_length_dict, self.flowCellDict, self.config_dict, self.index1Vocabulary,
-                                                                                      self.index2Vocabulary, self.flowCellName, self.logger)
-         
-        self.ordered_sample_sheet_dict['5_BSSE_QGF_32303_C7GMNANXX_5'] = \
-        [u'5,BSSE_QGF_32303_C7GMNANXX_5,BSSE_QGF_32303_C7GMNANXX_5_TR_EG_1_GGCTAC,,,SureSelectXT,GGCTAC,BSSE_QGF_32303_C7GMNANXX_5,']
- 
-        self.ordered_sample_sheet_dict['5_BSSE_QGF_36788_C7GMNANXX_5'] = \
-        [u'5,BSSE_QGF_36788_C7GMNANXX_5,BSSE_QGF_36788_C7GMNANXX_5_G_33_run2_TAAGGC,,,N701,TAAGGC,BSSE_QGF_36788_C7GMNANXX_5,']
-         
-        self.ordered_sample_sheet_dict['BSSE_QGF_32281_C7GMNANXX_8']= \
-        [u'8,BSSE_QGF_32281_C7GMNANXX_8,BSSE_QGF_32281_C7GMNANXX_8_F2_18_3_P162Nextera_TAGGCATG_CTATTAAG,,,N706,TAGGCATG,518,CTATTAAG,BSSE_QGF_32281_C7GMNANXX_8,']
-         
-         
-    def test_create_header_section(self):
-         
-        self.date = getTodayDate()
-        self.create_header_section = create_header_section(self.model, self.config_dict, self.parentDict, self.flowCellDict, self.index_length_dict, 5)
-        self.assertListEqual(self.create_header_section, ['[Header]', 'IEMFileVersion,4', 'Investigator Name,ETHZ_D-BSSE',
-                                                          'Project Name,Genomics Facility Basel', u'Experiment Name,C7GMNANXX',
-                                                          'Date,'+ self.date, 'Workflow,GenerateFASTQ', 'Application,FASTQ Only',
-                                                          'Assay,', u'Description,PAIRED_END_126', 'Chemistry,Default', '', '[Reads]',
-                                                          u'126', u'126', '', '[Settings]', '', '[Data]',
-                                                         'Lane,Sample_ID,Sample_Name,Sample_Plate,Sample_Well,I7_Index_ID,index,Sample_Project,Description'])
-         
-        self.create_header_section = create_header_section(self.model, self.config_dict, self.parentDict, self.flowCellDict, self.index_length_dict, 8)
-        self.assertListEqual(self.create_header_section, ['[Header]', 'IEMFileVersion,4', 'Investigator Name,ETHZ_D-BSSE', 'Project Name,Genomics Facility Basel',
-                                                          u'Experiment Name,C7GMNANXX', 'Date,'+ self.date, 'Workflow,GenerateFASTQ', 'Application,FASTQ Only',
-                                                          'Assay,', u'Description,PAIRED_END_126', 'Chemistry,Default', '', '[Reads]', u'126', u'126', '',
-                                                          '[Settings]', '', '[Data]', 'Lane,Sample_ID,Sample_Name,Sample_Plate,Sample_Well,I7_Index_ID,index,I5_Index_ID,index2,Sample_Project,Description'])
-         
-         
-    def test_write_sample_sheet_single_lane(self):
-        self.model = get_model(self.flowCellDict['RUN_NAME_FOLDER'])
- 
-        self.ordered_sample_sheet_dict, self.csv_file_name = create_sample_sheet_dict(self.service, self.barcodesPerLaneDict, self.containedSamples, self.samplesPerLaneDict, self.model, self.parentDict,
-                                                                                      self.index_length_dict, self.flowCellDict, self.config_dict, self.index1Vocabulary,
-                                                                                      self.index2Vocabulary, self.flowCellName, self.logger)
-         
-        write_sample_sheet_single_lane(self.model, self.ordered_sample_sheet_dict, self.flowCellDict, self.index_length_dict,
-                                          self.parentDict, self.config_dict, self.options, self.logger, self.csv_file_name)
-     
-    def tearDown(self):
-        self.service.logout()
-        self.logger.info('Logged out')
- 
- 
- 
- 
- 
- 
-class create_sample_sheet_C7P5KANXX(unittest.TestCase):
-    """
-    HiSeq 2500, SINGLE_READ, Dual Index 
-    
-    """
- 
- 
-    def setUp(self):
-        self.myCode = 'C7P5KANXX'
-        self.logger = setUpLogger('log/')
-        self.config_dict = readConfig(self.logger)
-         
-        import argparse
-        import shlex
-        parser = argparse.ArgumentParser()
-         
-        parser.add_argument('--flowcell')
-        parser.add_argument('--lineending')
-        parser.add_argument('--outdir')
-        parser.add_argument('--verbose')
-
-         
-        cmd_string = ['--flowcell', self.myCode, '--lineending', 'win32', '--outdir', '../../targets/playground', '--verbose', 'false']
-        self.options = parser.parse_args(cmd_string)
- 
-        self.service = OpenbisServiceFacadeFactory.tryCreate(self.config_dict['openbisUserName'],
-                                                      self.config_dict['openbisPassword'],
-                                                      self.config_dict['openbisServer'],
-                                                      self.config_dict['connectionTimeout'])
-         
-        self.flowcell, self.containedSamples = get_flowcell('ILLUMINA_FLOW_CELL',
-                                            self.myCode, self.service, self.logger)
-        self.flowCellDict = transform_sample_to_dict(self.flowcell)
-        self.parentDict, self.samplesPerLaneDict, self.barcodesPerLaneDict = get_contained_sample_properties(
-                                                    self.containedSamples, self.service, self.config_dict)
-        self.flowCellName = self.flowcell.getCode()
-        self.index1Vocabulary = get_vocabulary(self.config_dict['index1Name'], self.service)
-        self.index2Vocabulary = get_vocabulary(self.config_dict['index2Name'], self.service)
-        self.index_length_dict = verify_index_length(self.parentDict, self.flowCellDict, self.config_dict, self.logger)
- 
- 
-    def test_get_flowCell (self):
-        self.assertEqual(self.flowcell.getCode(), self.myCode)
-        self.assertEqual(self.containedSamples.size(), 8)
-         
-        fcProp = self.flowcell.getProperties()
-        self.assertEqual(fcProp['SEQUENCER'], 'D00404')
-        self.assertEqual(self.flowCellDict['FLOWCELLTYPE'], 'HiSeq Flow Cell v4')
-     
-     
-    def test_get_contained_sample_properties(self):
-        self.assertEqual(self.parentDict['BSSE_QGF_36781_C7P5KANXX_8']['BARCODE'], 'CTTGTAA')
-        self.assertEqual(self.parentDict['BSSE_QGF_36779_C7P5KANXX_8']['NCBI_ORGANISM_TAXONOMY'], '10090')
-        self.assertEqual(self.samplesPerLaneDict['8'], 6)
-  
-    def test_verify_index_length(self):
-        self.assertDictEqual(self.index_length_dict, {6: [8, 8], 5: [8, 8], 7: [8, 8], 8: [7, 7], 3: [8, 8], 2: [8, 8], 1: [8, 8], 4: [8, 8]})
-          
-          
-    def test_create_sample_sheet_dict(self):
-          
-        self.model = get_model(self.flowCellDict['RUN_NAME_FOLDER'])
-  
-        self.ordered_sample_sheet_dict, self.csv_file_name = create_sample_sheet_dict(self.service, self.barcodesPerLaneDict, self.containedSamples, self.samplesPerLaneDict, self.model, self.parentDict,
-                                                                                      self.index_length_dict, self.flowCellDict, self.config_dict, self.index1Vocabulary,
-                                                                                      self.index2Vocabulary, self.flowCellName, self.logger)
-         
-        self.assertDictEqual(self.ordered_sample_sheet_dict,
-             {u'8_BSSE_QGF_36781_C7P5KANXX_8': [u'8,BSSE_QGF_36781_C7P5KANXX_8,BSSE_QGF_36781_C7P5KANXX_8_Ribomethseq_mousecerebellum_comparison_CTTGTAA_NOINDEX,,,,CTTGTAA,,NOINDEX,BSSE_QGF_36781_C7P5KANXX_8,'],
-              u'8_BSSE_QGF_36780_C7P5KANXX_8': [u'8,BSSE_QGF_36780_C7P5KANXX_8,BSSE_QGF_36780_C7P5KANXX_8_Ribomethseq_HEK_comparison_GCCAATA_NOINDEX,,,,GCCAATA,,NOINDEX,BSSE_QGF_36780_C7P5KANXX_8,'], 
-              u'8_BSSE_QGF_36552_C7P5KANXX_8': [u'8,BSSE_QGF_36552_C7P5KANXX_8,BSSE_QGF_36552_C7P5KANXX_8_CLIP_444_1_TGACCAA_NOINDEX,,,,TGACCAA,,NOINDEX,BSSE_QGF_36552_C7P5KANXX_8,'], 
-              u'8_BSSE_QGF_36779_C7P5KANXX_8': [u'8,BSSE_QGF_36779_C7P5KANXX_8,BSSE_QGF_36779_C7P5KANXX_8_HITS_CLIP_Fibrillarin_mouseNeurons_2_CAGATCA_NOINDEX,,,,CAGATCA,,NOINDEX,BSSE_QGF_36779_C7P5KANXX_8,']})
- 
-          
-    def test_create_header_section(self):
-        self.date = getTodayDate()
- 
-        self.model = get_model(self.flowCellDict['RUN_NAME_FOLDER'])
-        self.create_header_section = create_header_section(self.model, self.config_dict, self.parentDict, self.flowCellDict, self.index_length_dict, 5)
-        self.assertListEqual(self.create_header_section, ['[Header]', 'IEMFileVersion,4', 'Investigator Name,ETHZ_D-BSSE',
-                                                          'Project Name,Genomics Facility Basel', u'Experiment Name,C7P5KANXX',
-                                                          'Date,'+ self.date, 'Workflow,GenerateFASTQ', 'Application,FASTQ Only',
-                                                          'Assay,', u'Description,SINGLE_READ_51', 'Chemistry,Default', '',
-                                                          '[Reads]', u'51', '', '[Settings]', '', '[Data]',
-                                                          'Lane,Sample_ID,Sample_Name,Sample_Plate,Sample_Well,I7_Index_ID,index,I5_Index_ID,index2,Sample_Project,Description'])
-          
-    def test_write_sample_sheet_single_lane(self):
-        self.model = get_model(self.flowCellDict['RUN_NAME_FOLDER'])
-  
-        self.ordered_sample_sheet_dict, self.csv_file_name = create_sample_sheet_dict(self.service, self.barcodesPerLaneDict, self.containedSamples, self.samplesPerLaneDict, self.model, self.parentDict,
-                                                                                      self.index_length_dict, self.flowCellDict, self.config_dict, self.index1Vocabulary,
-                                                                                      self.index2Vocabulary, self.flowCellName, self.logger)
-         
-        write_sample_sheet_single_lane(self.model, self.ordered_sample_sheet_dict, self.flowCellDict, self.index_length_dict,
-                                          self.parentDict, self.config_dict, self.options, self.logger, self.csv_file_name)
-     
-    def tearDown(self):
-        self.service.logout()
-        self.logger.info('Logged out')
-
-
-class create_sample_sheet_HJWC3BGXX(unittest.TestCase):
-    """
-    NextSeq, SINGLE_READ, Single index
-    """
-     
-     
-    def setUp(self):
-        self.myCode = 'HJWC3BGXX'
-        self.logger = setUpLogger('log/')
-        self.config_dict = readConfig(self.logger)
-         
-        import argparse
-        import shlex
-        parser = argparse.ArgumentParser()
-         
-        parser.add_argument('--flowcell')
-        parser.add_argument('--lineending')
-        parser.add_argument('--outdir')
-        parser.add_argument('--verbose')
-         
-        cmd_string = ['--flowcell', self.myCode, '--lineending', 'win32', '--outdir', '../../targets/playground', '--verbose', 'false']
-        self.options = parser.parse_args(cmd_string)
- 
-        self.service = OpenbisServiceFacadeFactory.tryCreate(self.config_dict['openbisUserName'],
-                                                      self.config_dict['openbisPassword'],
-                                                      self.config_dict['openbisServer'],
-                                                      self.config_dict['connectionTimeout'])
-         
-        self.flowcell, self.containedSamples = get_flowcell('ILLUMINA_FLOW_CELL',
-                                            self.myCode, self.service, self.logger)
-        self.flowCellDict = transform_sample_to_dict(self.flowcell)
-        self.parentDict, self.samplesPerLaneDict, self.barcodesPerLaneDict = get_contained_sample_properties(
-                                                    self.containedSamples, self.service, self.config_dict)
-        self.flowCellName = self.flowcell.getCode()
-        self.index1Vocabulary = get_vocabulary(self.config_dict['index1Name'], self.service)
-        self.index2Vocabulary = get_vocabulary(self.config_dict['index2Name'], self.service)
-        self.index_length_dict = verify_index_length(self.parentDict, self.flowCellDict, self.config_dict, self.logger)
- 
- 
-    def test_get_flowCell (self):
-        self.assertEqual(self.flowcell.getCode(), self.myCode)
-        self.assertEqual(self.containedSamples.size(), 1)
-         
-        fcProp = self.flowcell.getProperties()
-        self.assertEqual(fcProp['SEQUENCER'], 'NS500318')
-        self.assertEqual(self.flowCellDict['ILLUMINA_PIPELINE_VERSION'], '2.4.6')
-     
-     
-    def test_get_contained_sample_properties(self):
-        self.assertEqual(self.parentDict['BSSE_QGF_37091_HJWC3BGXX_1']['BARCODE'], 'AGTCAAC')
-        self.assertEqual(self.parentDict['BSSE_QGF_37100_HJWC3BGXX_1']['NCBI_ORGANISM_TAXONOMY'], '9606')
-        self.assertEqual(self.samplesPerLaneDict['1'], 18)
-   
-    def test_verify_index_length(self):
-        self.assertDictEqual(self.index_length_dict, {3: [6, 0], 2: [6, 0], 1: [6, 0], 4: [6, 0]})
- 
- 
-    def test_create_sample_sheet_dict(self):
-           
-        self.model = get_model(self.flowCellDict['RUN_NAME_FOLDER'])
-   
-        self.ordered_sample_sheet_dict, self.csv_file_name = create_sample_sheet_dict(self.service, self.barcodesPerLaneDict, self.containedSamples, self.samplesPerLaneDict, self.model, self.parentDict,
-                                                                                      self.index_length_dict, self.flowCellDict, self.config_dict, self.index1Vocabulary,
-                                                                                      self.index2Vocabulary, self.flowCellName, self.logger)
-          
-        self.assertDictEqual(self.ordered_sample_sheet_dict,
-                            {u'1_BSSE_QGF_37098_HJWC3BGXX_1': [u'BSSE_QGF_37098_HJWC3BGXX_1,BSSE_QGF_37098_HJWC3BGXX_1_TB_358_PQR_2_0_GTTTCG,,,,GTTTCG,BSSE_QGF_37098_HJWC3BGXX_1,'],
-                             u'1_BSSE_QGF_37093_HJWC3BGXX_1': [u'BSSE_QGF_37093_HJWC3BGXX_1,BSSE_QGF_37093_HJWC3BGXX_1_TB_356_PQR_1_0_ATGTCA,,,,ATGTCA,BSSE_QGF_37093_HJWC3BGXX_1,'],
-                             u'1_BSSE_QGF_37094_HJWC3BGXX_1': [u'BSSE_QGF_37094_HJWC3BGXX_1,BSSE_QGF_37094_HJWC3BGXX_1_TB_357_BKM_1_0_CCGTCC,,,,CCGTCC,BSSE_QGF_37094_HJWC3BGXX_1,'],
-                             u'1_BSSE_QGF_37095_HJWC3BGXX_1': [u'BSSE_QGF_37095_HJWC3BGXX_1,BSSE_QGF_37095_HJWC3BGXX_1_TB_356_MTD_1_0_GTCCGC,,,,GTCCGC,BSSE_QGF_37095_HJWC3BGXX_1,'],
-                             u'1_BSSE_QGF_37087_HJWC3BGXX_1': [u'BSSE_QGF_37087_HJWC3BGXX_1,BSSE_QGF_37087_HJWC3BGXX_1_TB_355_DMSO1_GATCAG,,,,GATCAG,BSSE_QGF_37087_HJWC3BGXX_1,'],
-                             u'1_BSSE_QGF_37096_HJWC3BGXX_1': [u'BSSE_QGF_37096_HJWC3BGXX_1,BSSE_QGF_37096_HJWC3BGXX_1_TB_358_GDC_1_0_GTGAAA,,,,GTGAAA,BSSE_QGF_37096_HJWC3BGXX_1,'],
-                             u'1_BSSE_QGF_37092_HJWC3BGXX_1': [u'BSSE_QGF_37092_HJWC3BGXX_1,BSSE_QGF_37092_HJWC3BGXX_1_TB_357_COL_0_05_AGTTCC,,,,AGTTCC,BSSE_QGF_37092_HJWC3BGXX_1,'],
-                             u'1_BSSE_QGF_37088_HJWC3BGXX_1': [u'BSSE_QGF_37088_HJWC3BGXX_1,BSSE_QGF_37088_HJWC3BGXX_1_TB_355_PQR_0_5_TAGCTT,,,,TAGCTT,BSSE_QGF_37088_HJWC3BGXX_1,'],
-                             u'1_BSSE_QGF_37089_HJWC3BGXX_1': [u'BSSE_QGF_37089_HJWC3BGXX_1,BSSE_QGF_37089_HJWC3BGXX_1_TB_359_BKM_0_5_1_GGCTAC,,,,GGCTAC,BSSE_QGF_37089_HJWC3BGXX_1,'],
-                             u'1_BSSE_QGF_37101_HJWC3BGXX_1': [u'BSSE_QGF_37101_HJWC3BGXX_1,BSSE_QGF_37101_HJWC3BGXX_1_TB_357_GDC_2_0_ACTGAT,,,,ACTGAT,BSSE_QGF_37101_HJWC3BGXX_1,'],
-                             u'1_BSSE_QGF_37090_HJWC3BGXX_1': [u'BSSE_QGF_37090_HJWC3BGXX_1,BSSE_QGF_37090_HJWC3BGXX_1_TB_358_MTD_0_5_CTTGTA,,,,CTTGTA,BSSE_QGF_37090_HJWC3BGXX_1,'],
-                             u'1_BSSE_QGF_37099_HJWC3BGXX_1': [u'BSSE_QGF_37099_HJWC3BGXX_1,BSSE_QGF_37099_HJWC3BGXX_1_TB_360_BKM_2_0_1_CGTACG,,,,CGTACG,BSSE_QGF_37099_HJWC3BGXX_1,'],
-                             u'1_BSSE_QGF_37091_HJWC3BGXX_1': [u'BSSE_QGF_37091_HJWC3BGXX_1,BSSE_QGF_37091_HJWC3BGXX_1_TB_358_GDC_0_5_AGTCAA,,,,AGTCAA,BSSE_QGF_37091_HJWC3BGXX_1,'],
-                             u'1_BSSE_QGF_37102_HJWC3BGXX_1': [u'BSSE_QGF_37102_HJWC3BGXX_1,BSSE_QGF_37102_HJWC3BGXX_1_TB_361_COL_0_2_1_ATTCCT,,,,ATTCCT,BSSE_QGF_37102_HJWC3BGXX_1,'],
-                             u'1_BSSE_QGF_37100_HJWC3BGXX_1': [u'BSSE_QGF_37100_HJWC3BGXX_1,BSSE_QGF_37100_HJWC3BGXX_1_TB_357_MTD_2_0_GAGTGG,,,,GAGTGG,BSSE_QGF_37100_HJWC3BGXX_1,'],
-                             u'1_BSSE_QGF_37097_HJWC3BGXX_1': [u'BSSE_QGF_37097_HJWC3BGXX_1,BSSE_QGF_37097_HJWC3BGXX_1_TB_358_COL_0_1_GTGGCC,,,,GTGGCC,BSSE_QGF_37097_HJWC3BGXX_1,']})
-           
-    def test_create_header_section(self):
-        self.model = get_model(self.flowCellDict['RUN_NAME_FOLDER'])
-        lane = 1
-        self.date = getTodayDate()
-        self.create_header_section = create_header_section(self.model, self.config_dict, self.parentDict, self.flowCellDict, self.index_length_dict, lane)
-        self.assertListEqual(self.create_header_section, ['[Header]', 'IEMFileVersion,4', 'Investigator Name,ETHZ_D-BSSE', 'Project Name,Genomics Facility Basel',
-                                                          u'Experiment Name,HJWC3BGXX', 'Date,' + self.date, 'Workflow,GenerateFASTQ', 'Application,FASTQ Only',
-                                                          'Assay,', u'Description,SINGLE_READ_81', 'Chemistry,Default', '', '[Reads]', u'81', '', '[Settings]', '',
-                                                          '[Data]', 'Sample_ID,Sample_Name,Sample_Plate,Sample_Well,I7_Index_ID,index,Sample_Project,Description'])
-           
-    def test_write_sample_sheet_single_lane(self):
-        self.model = get_model(self.flowCellDict['RUN_NAME_FOLDER'])
-   
-        self.ordered_sample_sheet_dict, self.csv_file_name = create_sample_sheet_dict(self.service, self.barcodesPerLaneDict, self.containedSamples, self.samplesPerLaneDict, self.model, self.parentDict,
-                                                                                      self.index_length_dict, self.flowCellDict, self.config_dict, self.index1Vocabulary,
-                                                                                      self.index2Vocabulary, self.flowCellName, self.logger)
-          
-        write_sample_sheet_single_lane(self.model, self.ordered_sample_sheet_dict, self.flowCellDict, self.index_length_dict,
-                                          self.parentDict, self.config_dict, self.options, self.logger, self.csv_file_name)
-     
-    def tearDown(self):
-        self.service.logout()
-        self.logger.info('Logged out')
-
-
-class create_sample_sheet_000000000_AH5W3(unittest.TestCase):
-    """
-    MiSeq, PAIRED_END, Single Index
-    """
-    
-    
-    def setUp(self):
-        self.myCode = '000000000-AH5W3'
-        self.logger = setUpLogger('log/')
-        self.config_dict = readConfig(self.logger)
-        
-        import argparse
-        import shlex
-        parser = argparse.ArgumentParser()
-        
-        parser.add_argument('--flowcell')
-        parser.add_argument('--lineending')
-        parser.add_argument('--outdir')
-        parser.add_argument('--verbose')
-
-        
-        cmd_string = ['--flowcell', self.myCode, '--lineending', 'win32', '--outdir', '../../targets/playground', '--verbose', 'true']
-        self.options = parser.parse_args(cmd_string)
-
-        self.service = OpenbisServiceFacadeFactory.tryCreate(self.config_dict['openbisUserName'],
-                                                      self.config_dict['openbisPassword'],
-                                                      self.config_dict['openbisServer'],
-                                                      self.config_dict['connectionTimeout'])
-        
-        self.flowcell, self.containedSamples = get_flowcell('ILLUMINA_FLOW_CELL',
-                                            self.myCode, self.service, self.logger)
-        self.flowCellDict = transform_sample_to_dict(self.flowcell)
-        self.parentDict, self.samplesPerLaneDict, self.barcodesPerLaneDict = get_contained_sample_properties(
-                                                    self.containedSamples, self.service, self.config_dict)
-        self.flowCellName = self.flowcell.getCode()
-        self.index1Vocabulary = get_vocabulary(self.config_dict['index1Name'], self.service)
-        self.index2Vocabulary = get_vocabulary(self.config_dict['index2Name'], self.service)
-        self.index_length_dict = verify_index_length(self.parentDict, self.flowCellDict, self.config_dict, self.logger)
-
-
-    def test_get_flowCell (self):
-        self.assertEqual(self.flowcell.getCode(), self.myCode)
-        self.assertEqual(self.containedSamples.size(), 1)
-        
-        fcProp = self.flowcell.getProperties()
-        self.assertEqual(fcProp['SEQUENCER'], 'M01761')
-        self.assertEqual(self.flowCellDict['ILLUMINA_PIPELINE_VERSION'], '1.18.54')
-    
-    
-    def test_get_contained_sample_properties(self):
-        self.assertEqual(self.parentDict['BSSE_QGF_36763_000000000_AH5W3_1']['BARCODE'], 'ATGTCAG')
-        self.assertEqual(self.parentDict['BSSE_QGF_36761_000000000_AH5W3_1']['NCBI_ORGANISM_TAXONOMY'], '10090')
-        self.assertEqual(self.samplesPerLaneDict['1'], 10)
-   
-    def test_verify_index_length(self):
-        self.assertDictEqual(self.index_length_dict,{1: [6, 0]})
- 
- 
-    def test_create_sample_sheet_dict(self):
-           
-        self.model = get_model(self.flowCellDict['RUN_NAME_FOLDER'])
-   
-        self.ordered_sample_sheet_dict, self.csv_file_name = create_sample_sheet_dict(self.service, self.barcodesPerLaneDict, self.containedSamples, self.samplesPerLaneDict, self.model, self.parentDict,
-                                                                                      self.index_length_dict, self.flowCellDict, self.config_dict, self.index1Vocabulary,
-                                                                                      self.index2Vocabulary, self.flowCellName, self.logger)
-          
-        
-        self.assertDictEqual(self.ordered_sample_sheet_dict,
-                {u'1_BSSE_QGF_36763_000000000_AH5W3_1': [u'1,BSSE_QGF_36763_000000000_AH5W3_1,BSSE_QGF_36763_000000000_AH5W3_1_H7_PRE_Idx_15_ATGTCA,,,,ATGTCA,BSSE_QGF_36763_000000000_AH5W3_1,'],
-                 u'1_BSSE_QGF_36765_000000000_AH5W3_1': [u'1,BSSE_QGF_36765_000000000_AH5W3_1,BSSE_QGF_36765_000000000_AH5W3_1_H8_NBC_Idx_16_CCGTCC,,,,CCGTCC,BSSE_QGF_36765_000000000_AH5W3_1,'],
-                 u'1_BSSE_QGF_36768_000000000_AH5W3_1': [u'1,BSSE_QGF_36768_000000000_AH5W3_1,BSSE_QGF_36768_000000000_AH5W3_1_H8_BMPC_Idx_19_GTGAAA,,,,GTGAAA,BSSE_QGF_36768_000000000_AH5W3_1,'],
-                 u'1_BSSE_QGF_36767_000000000_AH5W3_1': [u'1,BSSE_QGF_36767_000000000_AH5W3_1,BSSE_QGF_36767_000000000_AH5W3_1_H8_PRE_Idx_20_GTGGCC,,,,GTGGCC,BSSE_QGF_36767_000000000_AH5W3_1,'],
-                 u'1_BSSE_QGF_36766_000000000_AH5W3_1': [u'1,BSSE_QGF_36766_000000000_AH5W3_1,BSSE_QGF_36766_000000000_AH5W3_1_H8_SPC_Idx_18_GTCCGC,,,,GTCCGC,BSSE_QGF_36766_000000000_AH5W3_1,'],
-                 u'1_BSSE_QGF_36761_000000000_AH5W3_1': [u'1,BSSE_QGF_36761_000000000_AH5W3_1,BSSE_QGF_36761_000000000_AH5W3_1_H7_NBC_Idx_12_CTTGTA,,,,CTTGTA,BSSE_QGF_36761_000000000_AH5W3_1,'],
-                 u'1_BSSE_QGF_36762_000000000_AH5W3_1': [u'1,BSSE_QGF_36762_000000000_AH5W3_1,BSSE_QGF_36762_000000000_AH5W3_1_H7_SPC_Idx_13_AGTCAA,,,,AGTCAA,BSSE_QGF_36762_000000000_AH5W3_1,'],
-                 u'1_BSSE_QGF_36764_000000000_AH5W3_1': [u'1,BSSE_QGF_36764_000000000_AH5W3_1,BSSE_QGF_36764_000000000_AH5W3_1_H7_BMPC_Idx_14_AGTTCC,,,,AGTTCC,BSSE_QGF_36764_000000000_AH5W3_1,']})
-
-
-    def test_create_header_section(self):
-        self.model = get_model(self.flowCellDict['RUN_NAME_FOLDER'])
-        lane = 1
-        self.date = getTodayDate()
-        self.create_header_section = create_header_section(self.model, self.config_dict, self.parentDict, self.flowCellDict, self.index_length_dict, lane)
-        self.assertListEqual(self.create_header_section, ['[Header]', 'IEMFileVersion,4', 'Investigator Name,ETHZ_D-BSSE', 'Project Name,Genomics Facility Basel',
-                                                          u'Experiment Name,000000000-AH5W3', 'Date,' + self.date, 'Workflow,GenerateFASTQ', 'Application,FASTQ Only',
-                                                          'Assay,', u'Description,PAIRED_END_301', 'Chemistry,Default', '', '[Reads]', u'301', u'301', '', '[Settings]', '',
-                                                          '[Data]', 'Lane,Sample_ID,Sample_Name,Sample_Plate,Sample_Well,I7_Index_ID,index,Sample_Project,Description'])
-           
-    def test_write_sample_sheet_single_lane(self):
-        self.model = get_model(self.flowCellDict['RUN_NAME_FOLDER'])
-
-        self.ordered_sample_sheet_dict, self.csv_file_name = create_sample_sheet_dict(self.service, self.barcodesPerLaneDict, self.containedSamples, self.samplesPerLaneDict, self.model, self.parentDict,
-                                                                                      self.index_length_dict, self.flowCellDict, self.config_dict, self.index1Vocabulary,
-                                                                                      self.index2Vocabulary, self.flowCellName, self.logger)
-
-        write_sample_sheet_single_lane(self.model, self.ordered_sample_sheet_dict, self.flowCellDict, self.index_length_dict,
-                                          self.parentDict, self.config_dict, self.options, self.logger, self.csv_file_name)
-    
-    def tearDown(self):
-        self.service.logout()
-        self.logger.info('Logged out')
-
-
-
-class create_sample_sheet_H32NFBCXX(unittest.TestCase):
-    """
-    HiSeq 2500 Rapid Run with no indices
-    """
-    
-    
-    def setUp(self):
-        self.myCode = 'H32NFBCXX'
-        self.logger = setUpLogger('log/')
-        self.config_dict = readConfig(self.logger)
-        
-        import argparse
-        import shlex
-        parser = argparse.ArgumentParser()
-        
-        parser.add_argument('--flowcell')
-        parser.add_argument('--lineending')
-        parser.add_argument('--outdir')
-        parser.add_argument('--verbose')
-        
-        cmd_string = ['--flowcell', self.myCode, '--lineending', 'win32', '--outdir', '../../targets/playground', '--verbose', 'false']
-        self.options = parser.parse_args(cmd_string)
-
-        self.service = OpenbisServiceFacadeFactory.tryCreate(self.config_dict['openbisUserName'],
-                                                      self.config_dict['openbisPassword'],
-                                                      self.config_dict['openbisServer'],
-                                                      self.config_dict['connectionTimeout'])
-        
-        self.flowcell, self.containedSamples = get_flowcell('ILLUMINA_FLOW_CELL',
-                                            self.myCode, self.service, self.logger)
-        self.flowCellDict = transform_sample_to_dict(self.flowcell)
-        self.parentDict, self.samplesPerLaneDict, self.barcodesPerLaneDict = get_contained_sample_properties(
-                                                    self.containedSamples, self.service, self.config_dict)
-        self.flowCellName = self.flowcell.getCode()
-        self.index1Vocabulary = get_vocabulary(self.config_dict['index1Name'], self.service)
-        self.index2Vocabulary = get_vocabulary(self.config_dict['index2Name'], self.service)
-        self.index_length_dict = verify_index_length(self.parentDict, self.flowCellDict, self.config_dict, self.logger)
-
-
-    def test_get_flowCell (self):
-        self.assertEqual(self.flowcell.getCode(), self.myCode)
-        self.assertEqual(self.containedSamples.size(), 2)
-        
-        fcProp = self.flowcell.getProperties()
-        self.assertEqual(fcProp['SEQUENCER'], u'D00535')
-        self.assertEqual(self.flowCellDict['ILLUMINA_PIPELINE_VERSION'], '1.18.64')
-    
-    
-    def test_get_contained_sample_properties(self):
-        self.assertNotIn(self.parentDict['BSSE_QGF_29352_H32NFBCXX_1'],['BARCODE'])
-#         self.assertEqual(self.parentDict['BSSE_QGF_29352_H32NFBCXX_1']['NCBI_ORGANISM_TAXONOMY'], '32644')
-#         self.assertEqual(self.samplesPerLaneDict['1'], 2)
-   
-    def test_verify_index_length(self):
-        self.assertDictEqual(self.index_length_dict,{1: [7, 0], 2:[7, 0]})
-  
-  
-    def test_create_sample_sheet_dict(self):
-            
-        self.model = get_model(self.flowCellDict['RUN_NAME_FOLDER'])
-    
-        self.ordered_sample_sheet_dict, self.csv_file_name = create_sample_sheet_dict(self.service, self.barcodesPerLaneDict, self.containedSamples, self.samplesPerLaneDict, self.model, self.parentDict,
-                                                                                      self.index_length_dict, self.flowCellDict, self.config_dict, self.index1Vocabulary,
-                                                                                      self.index2Vocabulary, self.flowCellName, self.logger)
-           
-        self.assertDictEqual(self.ordered_sample_sheet_dict,
-                {u'1_BSSE_QGF_29352_H32NFBCXX_1': [u'1,BSSE_QGF_29352_H32NFBCXX_1,BSSE_QGF_29352_H32NFBCXX_1_Lib_Amph_4,,,,,BSSE_QGF_29352_H32NFBCXX_1,'],
-                 u'2_BSSE_QGF_29352_H32NFBCXX_2': [u'2,BSSE_QGF_29352_H32NFBCXX_2,BSSE_QGF_29352_H32NFBCXX_2_Lib_Amph_4,,,,,BSSE_QGF_29352_H32NFBCXX_2,']})
- 
-    def test_create_header_section(self):
-        self.model = get_model(self.flowCellDict['RUN_NAME_FOLDER'])
-        lane = 1
-        self.date = getTodayDate()
-        self.create_header_section = create_header_section(self.model, self.config_dict, self.parentDict, self.flowCellDict, self.index_length_dict, lane)
-        self.assertListEqual(self.create_header_section, ['[Header]', 'IEMFileVersion,4', 'Investigator Name,ETHZ_D-BSSE', 'Project Name,Genomics Facility Basel',
-                                                          u'Experiment Name,H32NFBCXX', 'Date,' + self.date, 'Workflow,GenerateFASTQ', 'Application,FASTQ Only',
-                                                          'Assay,', u'Description,SINGLE_READ_201', 'Chemistry,Default', '', '[Reads]', u'201', '', '[Settings]', '',
-                                                          '[Data]', 'Lane,Sample_ID,Sample_Name,Sample_Plate,Sample_Well,I7_Index_ID,index,Sample_Project,Description'])
-            
-    def test_write_sample_sheet_single_lane(self):
-        self.model = get_model(self.flowCellDict['RUN_NAME_FOLDER'])
- 
-        self.ordered_sample_sheet_dict, self.csv_file_name = create_sample_sheet_dict(self.service, self.barcodesPerLaneDict, self.containedSamples, self.samplesPerLaneDict, self.model, self.parentDict,
-                                                                                      self.index_length_dict, self.flowCellDict, self.config_dict, self.index1Vocabulary,
-                                                                                      self.index2Vocabulary, self.flowCellName, self.logger)
- 
-        write_sample_sheet_single_lane(self.model, self.ordered_sample_sheet_dict, self.flowCellDict, self.index_length_dict,
-                                          self.parentDict, self.config_dict, self.options, self.logger, self.csv_file_name)
-     
-    def tearDown(self):
-        self.service.logout()
-        self.logger.info('Logged out')
-
-
-def main():
-    unittest.main()
-
-if __name__ == '__main__':
-    main()
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/Jython/createSampleSheet_miseq.py b/deep_sequencing_unit/source/Jython/createSampleSheet_miseq.py
deleted file mode 100644
index 558b4a74816..00000000000
--- a/deep_sequencing_unit/source/Jython/createSampleSheet_miseq.py
+++ /dev/null
@@ -1,589 +0,0 @@
-'''
-@copyright:
-Copyright 2012 ETH Zuerich, CISD
- 
-@license:
-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.
-
-@author:
-Manuel Kohler
-
-@description:
-Creates the SampleSheet.csv out of values from openBIS for Demultiplexing 
-used in the Illumina pipeline (configureBclToFastq.pl) 
-
-@attention:
-Runs under Jython
-
-@note:
-Takes into account to replace special characters with an underscore so that the Illumina script
-does not fail
-
-HiSeq Header Description
-========================
-Column Header  Description
-FCID  Flow cell ID
-Lane  Positive integer, indicating the lane number (1-8)
-SampleID  ID of the sample
-SampleRef  The reference used for alignment for the sample
-Index  Index sequences. Multiple index reads are separated by a hyphen (for example, ACCAGTAA-GGACATGA).
-Description  Description of the sample
-Control  Y indicates this lane is a control lane, N means sample
-Recipe Recipe used during sequencing
-Operator Name or ID of the operator
-SampleProject  The project the sample belongs to
-'''
-
-from __future__ import with_statement
-import os
-import logging
-import re
-import sys
-import string
-import smtplib
-from ConfigParser import SafeConfigParser
-from optparse import OptionParser
-from datetime import *
-
-from email.MIMEMultipart import MIMEMultipart
-from email.MIMEBase import MIMEBase
-from email.MIMEText import MIMEText
-from email.Utils import COMMASPACE, formatdate
-from email import Encoders
-
-from ch.systemsx.cisd.openbis.dss.client.api.v1 import OpenbisServiceFacadeFactory
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-lineending = {'win32':'\r\n', 'linux':'\n', 'mac':'\r'}
-COMMA = ','
-
-def login(logger, configMap):
-  logger.info('Logging into ' + configMap['openbisServer'])
-  service = OpenbisServiceFacadeFactory.tryCreate(configMap['openbisUserName'],
-                                                  configMap['openbisPassword'],
-                                                  configMap['openbisServer'],
-                                                  configMap['connectionTimeout'])
-  return service
-
-def logout (service, logger):
-  service.logout()
-  logger.info('Logged out')
-
-def setUpLogger(logPath, logLevel=logging.INFO):
-  logFileName = 'createSampleSheet'
-  d = datetime.now()
-  logFileName = logFileName + '_' + d.strftime('%Y-%m-%d_%H_%M_%S') + '.log'
-  logging.basicConfig(filename=logPath + logFileName,
-                      format='%(asctime)s [%(levelname)s] %(message)s', level=logLevel)
-  logger = logging.getLogger(logFileName)
-  return logger
-
-def parseOptions(logger):
-  logger.info('Parsing command line parameters')
-  parser = OptionParser(version='%prog 1.0')
-  parser.add_option('-f', '--flowcell',
-                  dest='flowcell',
-                  help='The flowcell which is used to create the SampleSheet.csv',
-                  metavar='<flowcell>')
-  parser.add_option('-m', '--mailist',
-                  dest='maillist',
-                  default=False,
-                  action='store_true',
-                  help='Generated Sample Sheet will be addtionally sent as email to the defined list of recipients',
-                  metavar='<maillist>')
-  parser.add_option('-l', '--lineending',
-                  dest='lineending',
-                  type='choice',
-                  action='store',
-                  choices=['win32', 'linux', 'mac'],
-                  default='win32',
-                  help='Specify end of line separator: win32, linux, mac. Default: win32' ,
-                  metavar='<lineending>')
-  parser.add_option('-o', '--outdir',
-                  dest='outdir',
-                  default='./',
-                  help='Specify the ouput directory. Default: ./' ,
-                  metavar='<outdir>')
-  parser.add_option('-s', '--singlelane',
-                  dest='singlelane',
-                  default=False,
-                  action='store_true',
-                  help='Creates a single Sample Sheet for each lane. Default: False')
-  parser.add_option('-d', '--debug',
-                  dest='debug',
-                  default=False,
-                  action='store_true',
-                  help='Verbose debug logging. Default: False')
-  parser.add_option('-v', '--verbose',
-                  dest='verbose',
-                  default=False,
-                  action='store_true',
-                  help='Write Sample Sheet to stout. Default: False')
-
-
-  (options, args) = parser.parse_args()
-
-  if options.outdir[-1] <> '/':
-    options.outdir = options.outdir + '/'
-
-  if options.flowcell is None:
-    parser.print_help()
-    exit(-1)
-  return options
-
-def parseConfigurationFile(propertyFile='etc/createSampleSheet.properties'):
-  '''
-  Parses the given config files and returns the values
-  '''
-  config = SafeConfigParser()
-  config.read(propertyFile)
-  config.sections()
-  return config
-
-def readConfig(logger):
-  GENERAL = 'GENERAL'
-  OPENBIS = 'OPENBIS'
-  ILLUMINA = 'ILLUMINA'
-
-  logger.info('Reading config file')
-  configMap = {}
-
-  configParameters = parseConfigurationFile()
-  configMap['facilityName'] = configParameters.get(GENERAL, 'facilityName')
-  configMap['facilityNameShort'] = configParameters.get(GENERAL, 'facilityNameShort')
-  configMap['facilityInstitution'] = configParameters.get(GENERAL, 'facilityInstitution')
-  configMap['mailList'] = configParameters.get(GENERAL, 'mailList')
-  configMap['mailFrom'] = configParameters.get(GENERAL, 'mailFrom')
-  configMap['smptHost'] = configParameters.get(GENERAL, 'smptHost')
-  configMap['SampleSheetFileName'] = configParameters.get(GENERAL, 'SampleSheetFileName')
-  configMap['separator'] = configParameters.get(GENERAL, 'separator')
-  configMap['indexSeparator'] = configParameters.get(GENERAL, 'indexSeparator')
-
-  configMap['openbisUserName'] = configParameters.get(OPENBIS, 'openbisUserName')
-  configMap['openbisPassword'] = configParameters.get(OPENBIS, 'openbisPassword', raw=True)
-  configMap['openbisServer'] = configParameters.get(OPENBIS, 'openbisServer')
-  configMap['connectionTimeout'] = configParameters.getint(OPENBIS, 'connectionTimeout')
-  configMap['illuminaFlowCellTypeName'] = configParameters.get(OPENBIS, 'illuminaFlowCellTypeName')
-  configMap['index1Name'] = configParameters.get(OPENBIS, 'index1Name')
-  configMap['index2Name'] = configParameters.get(OPENBIS, 'index2Name')
-  configMap['index1Length'] = configParameters.get(OPENBIS, 'index1Length')
-  configMap['index2Length'] = configParameters.get(OPENBIS, 'index2Length')
-  configMap['endType'] = configParameters.get(OPENBIS, 'endType')
-  configMap['cycles'] = configParameters.get(OPENBIS, 'cycles')
-  configMap['controlLane'] = configParameters.get(OPENBIS, 'controlLane')
-  configMap['ncbi'] = configParameters.get(OPENBIS, 'ncbi')
-  configMap['externalSampleName'] = configParameters.get(OPENBIS, 'externalSampleName')
-  configMap['laneCount'] = configParameters.get(OPENBIS, 'laneCount')
-  configMap['kit'] = configParameters.get(OPENBIS, 'kit')
-
-  configMap['hiSeqNames'] = configParameters.get(ILLUMINA, 'hiSeqNames')
-  configMap['miSeqNames'] = configParameters.get(ILLUMINA, 'miSeqNames')
-  configMap['hiSeqHeader'] = configParameters.get(ILLUMINA, 'hiSeqHeader')
-
-  configMap['miSeqHeaderSection'] = configParameters.get(ILLUMINA, 'miSeqHeaderSection')
-  configMap['miSeqReadsSection'] = configParameters.get(ILLUMINA, 'miSeqReadsSection')
-  configMap['miSeqSettingsSection'] = configParameters.get(ILLUMINA, 'miSeqSettingsSection')
-  configMap['miSeqDataSectionSingleRead'] = configParameters.get(ILLUMINA, 'miSeqDataSectionSingleRead')
-  configMap['miSeqDataSectionDualRead'] = configParameters.get(ILLUMINA, 'miSeqDataSectionDualRead')
-  configMap['miSeqWorkflow'] = configParameters.get(ILLUMINA, 'miSeqWorkflow')
-  configMap['miSeqApplication'] = configParameters.get(ILLUMINA, 'miSeqApplication')
-  configMap['miSeqChemistry'] = configParameters.get(ILLUMINA, 'miSeqChemistry')
-
-  configMap['truSeqAdapter1'] = configParameters.get(ILLUMINA, 'truSeqAdapter1')
-  configMap['truSeqAdapter2'] = configParameters.get(ILLUMINA, 'truSeqAdapter2')
-  configMap['nexteraAdapter'] = configParameters.get(ILLUMINA, 'nexteraAdapter')
-  configMap['iemFileVersion'] = configParameters.get(ILLUMINA, 'iemFileVersion')
-
-  configMap['configureBclToFastqPath'] = configParameters.get(ILLUMINA, 'configureBclToFastqPath')
-  configMap['failedReads'] = configParameters.get(ILLUMINA, 'failedReads')
-  configMap['clusterCount'] = configParameters.get(ILLUMINA, 'clusterCount')
-  configMap['clusterCountNumber'] = configParameters.get(ILLUMINA, 'clusterCountNumber')
-  configMap['outputDir'] = configParameters.get(ILLUMINA, 'outputDir')
-  configMap['sampleSheetName'] = configParameters.get(ILLUMINA, 'sampleSheetName')
-  configMap['baseMask'] = configParameters.get(ILLUMINA, 'baseMask')
-
-  return configMap
-
-def getDate():
-  d = datetime.now()
-  return d.strftime('%A, %d of %B %Y')
-
-def sanitizeString(myString):
-  return re.sub('[^A-Za-z0-9]+', '_', myString)
-
-def getVocabulary(vocabularyCode, service):
-  ''' Returns the vocabulary terms and vocabulary labels of a vocabulary in a dictionary
-      specified by the parameter vocabularyCode
-      '''
-  terms = []
-  vocabularies = service.listVocabularies()
-  vocabularyDict = {}
-  for vocabulary in vocabularies:
-    if (vocabulary.getCode() == vocabularyCode):
-      terms = vocabulary.getTerms()
-  if terms:
-    for term in terms:
-      vocabularyDict[term.getCode()] = term.getLabel() 
-  else:
-    print ('No vocabulary found for ' + vocabularyCode)
-  return vocabularyDict
-
-def sendMail(emails, files, flowCellName, configMap, logger):
-  '''
-  Send out an email to the specified recipients
-  '''
-  COMMASPACE = ', '
-  listofEmails = emails.split()
-
-  msg = MIMEMultipart()
-  msg['From'] = configMap['mailFrom']
-  msg['To'] = COMMASPACE.join(listofEmails)
-  msg['Date'] = formatdate(localtime=True)
-  msg['Subject'] = 'Generated Sample Sheet for flowcell ' + flowCellName
-
-  msg.attach(MIMEText('Sample Sheet for ' + flowCellName + ' attached.'))
-
-  for f in files:
-        part = MIMEBase('application', 'octet-stream')
-        part.set_payload(open(f, 'rb').read())
-        Encoders.encode_base64(part)
-        part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f))
-        msg.attach(part)
-
-  smtp = smtplib.SMTP(configMap['smptHost'])
-  smtp.sendmail(configMap['mailFrom'], listofEmails, msg.as_string())
-  smtp.close()
-  logger.info('Sent email to ' + COMMASPACE.join(listofEmails))
-
-
-def getFlowCell (illuminaFlowCellTypeName, flowCellName, service, logger):
-  '''
-  Getting the the matching FlowCell
-  '''
-  sc = SearchCriteria();
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, illuminaFlowCellTypeName));
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCellName));
-  foundSample = service.searchForSamples(sc)
-  try:
-    assert foundSample.size() == 1
-  except AssertionError:
-    print (str(foundSample.size()) + ' flow cells found which match.')
-    exit(1)
-
-  logger.info('Found ' + foundSample[0].getCode() + ' in openBIS')
-  # Search for contained samples
-  sampleSc = SearchCriteria()
-  sampleSc.addSubCriteria(SearchSubCriteria.createSampleContainerCriteria(sc))
-  foundContainedSamples = service.searchForSamples(sampleSc)
-
-  return foundSample[0], foundContainedSamples
-
-
-def getParents(sampleName, service):
-  '''
-  Returns a list of parents of a sample 
-  '''
-  sc = SearchCriteria();
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleName));
-  foundSample = service.searchForSamples(sc)
-
-  try:
-    assert foundSample.size() == 1
-  except AssertionError:
-    print (str(foundSample.size()) + ' flow lanes found which match.')
-
-  # set the criteria for getting the parents when providing the child name
-  sampleSc = SearchCriteria()
-  sampleSc.addSubCriteria(SearchSubCriteria.createSampleChildCriteria(sc))
-  foundParentSamples = service.searchForSamples(sampleSc)
-
-  return foundParentSamples
-
-def getContainedSampleProperties(containedSamples, service):
-
-  # TODO: update description and function name
-  '''   
-  Takes a  list of contained samples, retrieves the parents and their properties and returns it
-  as a dictionary. The key is the sample name, the value is a list of the properties
-  
-  Additionally a dictionary with the lane (key) and the number of samples (value) is returned  
-  '''
-  parentDict = {}
-  samplesPerLaneDict = {}
-
-  for lane in containedSamples:
-    parents = getParents (lane.getCode(), service)
-
-    try:
-      assert parents.size() >= 1
-    except AssertionError:
-      print (str(parents.size()) + ' parents found for lane ' + lane.getCode())
-
-    samplesPerLaneDict[lane.getCode()[-1]] = len(parents)
-
-    for parent in parents:
-      parentCode = parent.getCode()
-      parentProperties = parent.getProperties()
-      propertyDict = {}
-      for property in parentProperties:
-        propertyDict[property] = parentProperties.get(property)
-
-      propertyDict['LANE'] = lane.getCode()
-
-      myKey = sanitizeString(parentCode + '_' + lane.getCode())
-      parentDict[myKey] = propertyDict
-
-  return parentDict, samplesPerLaneDict
-
-
-def convertSampleToDict(foundFlowCell):
-  '''
-  converts <type 'ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample'> to a python dict
-  '''
-  flowCellDict = {}
-  fcProperties = foundFlowCell.getProperties()
-  for property in fcProperties:
-    flowCellDict[property] = fcProperties.get(property)
-  flowCellDict['Project'] = foundFlowCell.getExperimentIdentifierOrNull().split('/')[-1]
-  flowCellDict['Name'] = foundFlowCell.getIdentifier().split('/')[-1]
-  return flowCellDict
-
-
-def pickleDemultiplexCommandList(logger, demultiplexCommandList, fileName):
-  import pickle
-
-  try:
-    with open(fileName, 'w') as pickleDemux:
-      pickle.dump(demultiplexCommandList, pickleDemux)
-    logger.info('Writing file ' + fileName)
-  except IOError, err:
-    logger.error('File error: ' + str(err))
-    print ('File error: ' + str(err))
-
-
-def writeMiSeqSampleSheet(sampleSheetDict, headerList, flowCellName, myoptions, logger, fileName):
-  '''
-  Writes the given dictionary to a csv file. The order does not matter. As the header is not fixed
-  we first need to write the headerList in the file. This is specific to MiSeq
-  '''
-  newline = lineending[myoptions.lineending]
-  try:
-    with open(fileName, 'wb') as sampleSheetFile:
-      for listElement in headerList:
-        if myoptions.verbose:
-          print listElement
-        sampleSheetFile.write(listElement + newline)
-      for sample in sampleSheetDict:
-        if myoptions.verbose:
-          print sampleSheetDict[sample][0]
-        sampleSheetFile.write(sampleSheetDict[sample][0] + newline)
-
-      logger.info('Writing file ' + fileName)
-
-  except IOError:
-    logger.error('File error: ' + str(err))
-    print ('File error: ' + str(err))
-
-  return fileName
-
-def get_reverse_complement(sequence):
-    lookup_table = {'A': 'T', 'T': 'A', 'G': 'C', 'C': 'G'}
-    reverse_complement = ''
-    for nucleotide in reversed(sequence):
-        reverse_complement += lookup_table[nucleotide]
-    return reverse_complement
-
-
-def createMiSeqSampleSheet(parentDict, flowCellDict, configMap, index1Vocabulary, index2Vocabulary,
-                            flowCellName, logger, myoptions):
-  '''
-  '''
-
-  kitsDict = {"CHIP_SEQ_SAMPLE_PREP" : ["",""],
-              "TRUSEQ_RNA_SAMPLEPREPKIT_V2_ILLUMINA" : ["A","TruSeq LT"],
-              "NEXTERA_XT_DNA_SAMPLE_PREPARATION_KIT_ILLUMINA" : ["S", "Nextera XT"],
-              "TRUSEQ_CHIP_SAMPLE_PREP_KIT" : ["A","TruSeq LT"],
-              "MRNA_SEQ_SAMPLE_PREP" : ["",""],
-              "TRUSEQRNA_SAMPLE_PREP_KIT" : ["A","TruSeq LT"],
-              "NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1" : ["A","TruSeq LT"],
-              "NEBNEXT_CHIP-SEQ_LIBRARY_PREP_REAGENT_SET" : ["A","TruSeq LT"],
-              "RIBOZERO_SCRIPTSEQ_MRNA-SEQ_KIT" : ["",""],
-              "NEXTERA_DNA_SAMPLE_PREPARATION_KIT_ILLUMINA" : ["N", "Nextera"],
-              "GENOMICDNA_SAMPLE_PREP" : ["",""],
-              "AGILENT_SURESELECTXT_AUTOMATEDLIBRARYPREP" : ["",""],
-              "TRUSEQ_DNA_SAMPLE_PREP_KIT" : ["A","TruSeq LT"],
-              "NEXTERA_DNA_SAMPLE_PREP_KITS" : ["N", "Nextera"],
-              "AGILENT_SURESELECT_ENRICHMENTSYSTEM" : ["",""],
-              "TRUSEQ_DNA_SAMPLE_PREP_KIT_V2" : ["A","TruSeq LT"],
-              "AGILENT_SURESELECT_HUMAN_ALL_EXON_V5_UTRS" : ["",""],
-              "POLYA_SCRIPTSEQ_MRNA-SEQ_KIT" : ["",""],
-              "AGILENT_SURESELECTXT2_MOUSE_ALL_EXON" : ["",""],
-              "PAIRED_END_DNA_SAMPLE_PREP" : ["",""],
-              "NEXTERA_DNA_SAMPLE_PREP_KIT_BUFFER_HMW" : ["N", "Nextera"]
-  }
-
-  sampleSheetDict = {}
-  headerList = []
-
-  # here we take the fisrat sample to determine the Sample Prep Kit 
-  try:
-    assay = kitsDict [parentDict.itervalues().next()[configMap['kit']]][1]
-  except:
-    print "No Kit set for sample. Will not set the assay value in the sample sheet"
-    assay = ""
-    pass
-
-  separator = configMap['separator']
-
-  miSeqHeaderSection = configMap['miSeqHeaderSection'].split(separator)
-  miSeqHeaderSection.reverse()
-  headerList = [miSeqHeaderSection.pop().strip()]
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + configMap['iemFileVersion'])
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + configMap['facilityInstitution'])
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + configMap['facilityName'])
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + flowCellDict['Name'])
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + datetime.now().strftime('%m/%d/%Y'))
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + configMap['miSeqWorkflow'])
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + configMap['miSeqApplication'])
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + assay) 
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + flowCellDict[configMap['endType']] + '_' + flowCellDict[configMap['cycles']])
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + configMap['miSeqChemistry'])
-  headerList.append('')
-
-  miSeqReadsSection = configMap['miSeqReadsSection'].split(separator)
-  miSeqReadsSection.reverse()
-  headerList.append(miSeqReadsSection.pop())
-  headerList.append(flowCellDict[configMap['cycles']])
-  if (flowCellDict[configMap['endType']] == 'PAIRED_END'):
-    headerList.append(flowCellDict[configMap['cycles']])
-  headerList.append('')
-
-  miSeqSettingsSection = configMap['miSeqSettingsSection'].split(separator)
-  miSeqSettingsSection.reverse()
-  headerList.append(miSeqSettingsSection.pop())
-  if ('nextera' in assay.lower()):
-    headerList.append(configMap['nexteraAdapter'])
-  if ('truseq' in assay.lower()):
-    headerList.append(configMap['truSeqAdapter1'])
-    headerList.append(configMap['truSeqAdapter2'])
-  headerList.append('')
-
-  if int(flowCellDict['INDEXREAD2']) > 0:
-    miSeqDataSection = configMap['miSeqDataSectionDualRead'].split(',')
-  else:
-    miSeqDataSection = configMap['miSeqDataSectionSingleRead'].split(',')
-    
-  miSeqDataSection.reverse()
-  headerList.append(miSeqDataSection.pop())
-  headerList.append(','.join(miSeqDataSection.pop().strip().split()))
-
-  for key in parentDict.keys():
-    lane = parentDict[key]['LANE'][-1:]
-    # If no index then just skip this  sample
-    if configMap['index1Name'] not in parentDict[key]:
-      continue
-    index1 = parentDict[key][configMap['index1Name']]
-
-    if configMap['index2Name'] in parentDict[key]:
-      index2 = parentDict[key][configMap['index2Name']]
-      indexNumber = index2Vocabulary[parentDict[key][configMap['index2Name']]].split()[2]
-
-    try:
-      kit = parentDict[key][configMap['kit']]
-      prefix = kitsDict[kit][0]
-    except:
-      print "Missing Kit on " + str(key)
-      prefix = ""
-
-    len_index1 = int(flowCellDict['INDEXREAD'])
-    len_index2 = int(flowCellDict['INDEXREAD2'])
-
-    if int(flowCellDict['INDEXREAD2']) > 0:
-      sampleSheetDict[lane + '_' + key] = [key + separator
-                            + key + '_' + sanitizeString(parentDict[key][configMap['externalSampleName']]) + '_' + index1[0:len_index1] + '_' + index2[0:len_index2] + separator
-                            + separator
-                            + separator
-                            + index1Vocabulary[index1].split()[1] + separator
-                            + index1[0:len_index1] + separator
-                            + prefix + indexNumber + separator
-                            + get_reverse_complement(index2[0:len_index2]) + separator
-                            + key + separator
-                            ]
-    else:
-            sampleSheetDict[lane + '_' + key] = [key + separator
-                            + key + '_' + sanitizeString(parentDict[key][configMap['externalSampleName']]) + '_' + index1[0:len_index1] + separator
-                            + separator
-                            + separator
-                            + index1Vocabulary[index1].split()[1] + separator
-                            + index1[0:len_index1] + separator
-                            + key + separator
-                            ]
-    
-  myFileName = myoptions.outdir + configMap['SampleSheetFileName'] + '_' + \
-                   flowCellName + '.csv'
-
-  sampleSheetFile = writeMiSeqSampleSheet(sampleSheetDict, headerList, flowCellName,
-                                          myoptions, logger, fileName=myFileName)
-  return sampleSheetFile
-
-'''
-Main script
-'''
-def main ():
-
-  logger = setUpLogger('log/')
-  logger.info('Started Creation of Sample Sheet...')
-
-  myoptions = parseOptions(logger)
-
-  if myoptions.debug:
-    logger.setLevel(logging.DEBUG)
-
-  flowCellName = myoptions.flowcell
-  configMap = readConfig(logger)
-  service = login(logger, configMap)
-
-  foundFlowCell, containedSamples = getFlowCell(configMap['illuminaFlowCellTypeName'], flowCellName,
-                                                service, logger)
-  parentDict, samplesPerLaneDict = getContainedSampleProperties(containedSamples, service)
-  logger.info('Found ' + str(len(parentDict)) + ' samples on the flow cell ' + flowCellName)
-
-  flowCellName = foundFlowCell.getCode()
-  if '-' in flowCellName:
-    flowCellName = flowCellName.split('_')[3]
-  elif len(flowCellName) > 12:
-    flowCellName = flowCellName.split('_')[3][1:]
-  else:
-    pass
-
-  flowCellDict = convertSampleToDict(foundFlowCell)
-
-  hiseqList = configMap['hiSeqNames'].split()
-  miseqList = configMap['miSeqNames'].split()
-
-  runFolderName = flowCellDict['Name']
-
-  index1Vocabulary = getVocabulary(configMap['index1Name'], service)
-  index2Vocabulary = getVocabulary(configMap['index2Name'], service)
-  SampleSheetFile = createMiSeqSampleSheet(parentDict, flowCellDict, configMap,
-                             index1Vocabulary, index2Vocabulary, flowCellName, logger, myoptions)
-
-  if myoptions.maillist:
-    sendMail(configMap['mailList'], [SampleSheetFile], flowCellName, configMap, logger)
-
-  logout(service, logger)
-
-
-if __name__ == "__main__":
-    main()
diff --git a/deep_sequencing_unit/source/Jython/createSampleSheet_nextseq.py b/deep_sequencing_unit/source/Jython/createSampleSheet_nextseq.py
deleted file mode 100644
index fa1517dbac0..00000000000
--- a/deep_sequencing_unit/source/Jython/createSampleSheet_nextseq.py
+++ /dev/null
@@ -1,596 +0,0 @@
-'''
-@copyright:
-Copyright 2012 ETH Zuerich, CISD
- 
-@license:
-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.
-
-@author:
-Manuel Kohler
-
-@description:
-Creates the SampleSheet.csv out of values from openBIS for Demultiplexing 
-used in the Illumina pipeline (configureBclToFastq.pl) 
-
-@attention:
-Runs under Jython
-
-@note:
-Takes into account to replace special characters with an underscore so that the Illumina script
-does not fail
-
-HiSeq Header Description
-========================
-Column Header  Description
-FCID  Flow cell ID
-Lane  Positive integer, indicating the lane number (1-8)
-SampleID  ID of the sample
-SampleRef  The reference used for alignment for the sample
-Index  Index sequences. Multiple index reads are separated by a hyphen (for example, ACCAGTAA-GGACATGA).
-Description  Description of the sample
-Control  Y indicates this lane is a control lane, N means sample
-Recipe Recipe used during sequencing
-Operator Name or ID of the operator
-SampleProject  The project the sample belongs to
-'''
-
-from __future__ import with_statement
-import os
-import logging
-import re
-import sys
-import string
-import smtplib
-from ConfigParser import SafeConfigParser
-from optparse import OptionParser
-from datetime import *
-
-from email.MIMEMultipart import MIMEMultipart
-from email.MIMEBase import MIMEBase
-from email.MIMEText import MIMEText
-from email.Utils import COMMASPACE, formatdate
-from email import Encoders
-
-from ch.systemsx.cisd.openbis.dss.client.api.v1 import OpenbisServiceFacadeFactory
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-lineending = {'win32':'\r\n', 'linux':'\n', 'mac':'\r'}
-COMMA = ','
-
-def login(logger, configMap):
-  logger.info('Logging into ' + configMap['openbisServer'])
-  service = OpenbisServiceFacadeFactory.tryCreate(configMap['openbisUserName'],
-                                                  configMap['openbisPassword'],
-                                                  configMap['openbisServer'],
-                                                  configMap['connectionTimeout'])
-  return service
-
-def logout (service, logger):
-  service.logout()
-  logger.info('Logged out')
-
-def setUpLogger(logPath, logLevel=logging.INFO):
-  logFileName = 'createSampleSheet'
-  d = datetime.now()
-  logFileName = logFileName + '_' + d.strftime('%Y-%m-%d_%H_%M_%S') + '.log'
-  logging.basicConfig(filename=logPath + logFileName,
-                      format='%(asctime)s [%(levelname)s] %(message)s', level=logLevel)
-  logger = logging.getLogger(logFileName)
-  return logger
-
-def parseOptions(logger):
-  logger.info('Parsing command line parameters')
-  parser = OptionParser(version='%prog 1.0')
-  parser.add_option('-f', '--flowcell',
-                  dest='flowcell',
-                  help='The flowcell which is used to create the SampleSheet.csv',
-                  metavar='<flowcell>')
-  parser.add_option('-m', '--mailist',
-                  dest='maillist',
-                  default=False,
-                  action='store_true',
-                  help='Generated Sample Sheet will be addtionally sent as email to the defined list of recipients',
-                  metavar='<maillist>')
-  parser.add_option('-l', '--lineending',
-                  dest='lineending',
-                  type='choice',
-                  action='store',
-                  choices=['win32', 'linux', 'mac'],
-                  default='win32',
-                  help='Specify end of line separator: win32, linux, mac. Default: win32' ,
-                  metavar='<lineending>')
-  parser.add_option('-o', '--outdir',
-                  dest='outdir',
-                  default='./',
-                  help='Specify the ouput directory. Default: ./' ,
-                  metavar='<outdir>')
-  parser.add_option('-s', '--singlelane',
-                  dest='singlelane',
-                  default=False,
-                  action='store_true',
-                  help='Creates a single Sample Sheet for each lane. Default: False')
-  parser.add_option('-d', '--debug',
-                  dest='debug',
-                  default=False,
-                  action='store_true',
-                  help='Verbose debug logging. Default: False')
-  parser.add_option('-v', '--verbose',
-                  dest='verbose',
-                  default=False,
-                  action='store_true',
-                  help='Write Sample Sheet to stout. Default: False')
-
-
-  (options, args) = parser.parse_args()
-
-  if options.outdir[-1] <> '/':
-    options.outdir = options.outdir + '/'
-
-  if options.flowcell is None:
-    parser.print_help()
-    exit(-1)
-  return options
-
-def parseConfigurationFile(propertyFile='etc/createSampleSheet.properties'):
-  '''
-  Parses the given config files and returns the values
-  '''
-  config = SafeConfigParser()
-  config.read(propertyFile)
-  config.sections()
-  return config
-
-def readConfig(logger):
-  GENERAL = 'GENERAL'
-  OPENBIS = 'OPENBIS'
-  ILLUMINA = 'ILLUMINA'
-
-  logger.info('Reading config file')
-  configMap = {}
-
-  configParameters = parseConfigurationFile()
-  configMap['facilityName'] = configParameters.get(GENERAL, 'facilityName')
-  configMap['facilityNameShort'] = configParameters.get(GENERAL, 'facilityNameShort')
-  configMap['facilityInstitution'] = configParameters.get(GENERAL, 'facilityInstitution')
-  configMap['mailList'] = configParameters.get(GENERAL, 'mailList')
-  configMap['mailFrom'] = configParameters.get(GENERAL, 'mailFrom')
-  configMap['smptHost'] = configParameters.get(GENERAL, 'smptHost')
-  configMap['SampleSheetFileName'] = configParameters.get(GENERAL, 'SampleSheetFileName')
-  configMap['separator'] = configParameters.get(GENERAL, 'separator')
-  configMap['indexSeparator'] = configParameters.get(GENERAL, 'indexSeparator')
-
-  configMap['openbisUserName'] = configParameters.get(OPENBIS, 'openbisUserName')
-  configMap['openbisPassword'] = configParameters.get(OPENBIS, 'openbisPassword', raw=True)
-  configMap['openbisServer'] = configParameters.get(OPENBIS, 'openbisServer')
-  configMap['connectionTimeout'] = configParameters.getint(OPENBIS, 'connectionTimeout')
-  configMap['illuminaFlowCellTypeName'] = configParameters.get(OPENBIS, 'illuminaFlowCellTypeName')
-  configMap['index1Name'] = configParameters.get(OPENBIS, 'index1Name')
-  configMap['index2Name'] = configParameters.get(OPENBIS, 'index2Name')
-  configMap['index1Length'] = configParameters.get(OPENBIS, 'index1Length')
-  configMap['index2Length'] = configParameters.get(OPENBIS, 'index2Length')
-  configMap['endType'] = configParameters.get(OPENBIS, 'endType')
-  configMap['cycles'] = configParameters.get(OPENBIS, 'cycles')
-  configMap['controlLane'] = configParameters.get(OPENBIS, 'controlLane')
-  configMap['ncbi'] = configParameters.get(OPENBIS, 'ncbi')
-  configMap['externalSampleName'] = configParameters.get(OPENBIS, 'externalSampleName')
-  configMap['laneCount'] = configParameters.get(OPENBIS, 'laneCount')
-  configMap['kit'] = configParameters.get(OPENBIS, 'kit')
-
-  configMap['hiSeqNames'] = configParameters.get(ILLUMINA, 'hiSeqNames')
-  configMap['miSeqNames'] = configParameters.get(ILLUMINA, 'miSeqNames')
-  configMap['hiSeqHeader'] = configParameters.get(ILLUMINA, 'hiSeqHeader')
-
-  configMap['miSeqHeaderSection'] = configParameters.get(ILLUMINA, 'miSeqHeaderSection')
-  configMap['miSeqReadsSection'] = configParameters.get(ILLUMINA, 'miSeqReadsSection')
-  configMap['miSeqSettingsSection'] = configParameters.get(ILLUMINA, 'miSeqSettingsSection')
-  configMap['miSeqDataSectionSingleRead'] = configParameters.get(ILLUMINA, 'miSeqDataSectionSingleRead')
-  configMap['miSeqDataSectionDualRead'] = configParameters.get(ILLUMINA, 'miSeqDataSectionDualRead')
-  configMap['miSeqWorkflow'] = configParameters.get(ILLUMINA, 'miSeqWorkflow')
-  configMap['miSeqApplication'] = configParameters.get(ILLUMINA, 'miSeqApplication')
-  configMap['miSeqChemistry'] = configParameters.get(ILLUMINA, 'miSeqChemistry')
-  
-  configMap['nextSeqDataSectionSingleRead'] = configParameters.get(ILLUMINA, 'nextSeqDataSectionSingleRead')
-  configMap['nextSeqDataSectionDualRead'] = configParameters.get(ILLUMINA, 'nextSeqDataSectionDualRead')
-
-  configMap['truSeqAdapter1'] = configParameters.get(ILLUMINA, 'truSeqAdapter1')
-  configMap['truSeqAdapter2'] = configParameters.get(ILLUMINA, 'truSeqAdapter2')
-  configMap['nexteraAdapter'] = configParameters.get(ILLUMINA, 'nexteraAdapter')
-  configMap['iemFileVersion'] = configParameters.get(ILLUMINA, 'iemFileVersion')
-
-  configMap['configureBclToFastqPath'] = configParameters.get(ILLUMINA, 'configureBclToFastqPath')
-  configMap['failedReads'] = configParameters.get(ILLUMINA, 'failedReads')
-  configMap['clusterCount'] = configParameters.get(ILLUMINA, 'clusterCount')
-  configMap['clusterCountNumber'] = configParameters.get(ILLUMINA, 'clusterCountNumber')
-  configMap['outputDir'] = configParameters.get(ILLUMINA, 'outputDir')
-  configMap['sampleSheetName'] = configParameters.get(ILLUMINA, 'sampleSheetName')
-  configMap['baseMask'] = configParameters.get(ILLUMINA, 'baseMask')
-
-  return configMap
-
-def getDate():
-  d = datetime.now()
-  return d.strftime('%A, %d of %B %Y')
-
-def sanitizeString(myString):
-  return re.sub('[^A-Za-z0-9]+', '_', myString)
-
-def getVocabulary(vocabularyCode, service):
-  ''' Returns the vocabulary terms and vocabulary labels of a vocabulary in a dictionary
-      specified by the parameter vocabularyCode
-      '''
-  terms = []
-  vocabularies = service.listVocabularies()
-  vocabularyDict = {}
-  for vocabulary in vocabularies:
-    if (vocabulary.getCode() == vocabularyCode):
-      terms = vocabulary.getTerms()
-  if terms:
-    for term in terms:
-      vocabularyDict[term.getCode()] = term.getLabel() 
-  else:
-    print ('No vocabulary found for ' + vocabularyCode)
-  return vocabularyDict
-
-def sendMail(emails, files, flowCellName, configMap, logger):
-  '''
-  Send out an email to the specified recipients
-  '''
-  COMMASPACE = ', '
-  listofEmails = emails.split()
-
-  msg = MIMEMultipart()
-  msg['From'] = configMap['mailFrom']
-  msg['To'] = COMMASPACE.join(listofEmails)
-  msg['Date'] = formatdate(localtime=True)
-  msg['Subject'] = 'Generated Sample Sheet for flowcell ' + flowCellName
-
-  msg.attach(MIMEText('Sample Sheet for ' + flowCellName + ' attached.'))
-
-  for f in files:
-        part = MIMEBase('application', 'octet-stream')
-        part.set_payload(open(f, 'rb').read())
-        Encoders.encode_base64(part)
-        part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f))
-        msg.attach(part)
-
-  smtp = smtplib.SMTP(configMap['smptHost'])
-  smtp.sendmail(configMap['mailFrom'], listofEmails, msg.as_string())
-  smtp.close()
-  logger.info('Sent email to ' + COMMASPACE.join(listofEmails))
-
-
-def getFlowCell (illuminaFlowCellTypeName, flowCellName, service, logger):
-  '''
-  Getting the the matching FlowCell
-  '''
-  sc = SearchCriteria();
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, illuminaFlowCellTypeName));
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCellName));
-  foundSample = service.searchForSamples(sc)
-  try:
-    assert foundSample.size() == 1
-  except AssertionError:
-    print (str(foundSample.size()) + ' flow cells found which match.')
-    exit(1)
-
-  logger.info('Found ' + foundSample[0].getCode() + ' in openBIS')
-  # Search for contained samples
-  sampleSc = SearchCriteria()
-  sampleSc.addSubCriteria(SearchSubCriteria.createSampleContainerCriteria(sc))
-  foundContainedSamples = service.searchForSamples(sampleSc)
-
-  return foundSample[0], foundContainedSamples
-
-
-def getParents(sampleName, service):
-  '''
-  Returns a list of parents of a sample 
-  '''
-  sc = SearchCriteria();
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleName));
-  foundSample = service.searchForSamples(sc)
-
-  try:
-    assert foundSample.size() == 1
-  except AssertionError:
-    print (str(foundSample.size()) + ' flow lanes found which match.')
-
-  # set the criteria for getting the parents when providing the child name
-  sampleSc = SearchCriteria()
-  sampleSc.addSubCriteria(SearchSubCriteria.createSampleChildCriteria(sc))
-  foundParentSamples = service.searchForSamples(sampleSc)
-
-  return foundParentSamples
-
-def getContainedSampleProperties(containedSamples, service):
-
-  # TODO: update description and function name
-  '''   
-  Takes a  list of contained samples, retrieves the parents and their properties and returns it
-  as a dictionary. The key is the sample name, the value is a list of the properties
-  
-  Additionally a dictionary with the lane (key) and the number of samples (value) is returned  
-  '''
-  parentDict = {}
-  samplesPerLaneDict = {}
-
-  for lane in containedSamples:
-    parents = getParents (lane.getCode(), service)
-
-    try:
-      assert parents.size() >= 1
-    except AssertionError:
-      print (str(parents.size()) + ' parents found for lane ' + lane.getCode())
-
-    samplesPerLaneDict[lane.getCode()[-1]] = len(parents)
-
-    for parent in parents:
-      parentCode = parent.getCode()
-      parentProperties = parent.getProperties()
-      propertyDict = {}
-      for property in parentProperties:
-        propertyDict[property] = parentProperties.get(property)
-
-      propertyDict['LANE'] = lane.getCode()
-
-      myKey = sanitizeString(parentCode + '_' + lane.getCode())
-      parentDict[myKey] = propertyDict
-
-  return parentDict, samplesPerLaneDict
-
-
-def convertSampleToDict(foundFlowCell):
-  '''
-  converts <type 'ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample'> to a python dict
-  '''
-  flowCellDict = {}
-  fcProperties = foundFlowCell.getProperties()
-  for property in fcProperties:
-    flowCellDict[property] = fcProperties.get(property)
-  flowCellDict['Project'] = foundFlowCell.getExperimentIdentifierOrNull().split('/')[-1]
-  flowCellDict['Name'] = foundFlowCell.getIdentifier().split('/')[-1]
-  return flowCellDict
-
-
-def pickleDemultiplexCommandList(logger, demultiplexCommandList, fileName):
-  import pickle
-
-  try:
-    with open(fileName, 'w') as pickleDemux:
-      pickle.dump(demultiplexCommandList, pickleDemux)
-    logger.info('Writing file ' + fileName)
-  except IOError, err:
-    logger.error('File error: ' + str(err))
-    print ('File error: ' + str(err))
-
-
-def writeMiSeqSampleSheet(sampleSheetDict, headerList, flowCellName, myoptions, logger, fileName):
-  '''
-  Writes the given dictionary to a csv file. The order does not matter. As the header is not fixed
-  we first need to write the headerList in the file. This is specific to MiSeq
-  '''
-  newline = lineending[myoptions.lineending]
-  try:
-    with open(fileName, 'wb') as sampleSheetFile:
-      for listElement in headerList:
-        if myoptions.verbose:
-          print listElement
-        sampleSheetFile.write(listElement + newline)
-      for sample in sampleSheetDict:
-        if myoptions.verbose:
-          print sampleSheetDict[sample][0]
-        sampleSheetFile.write(sampleSheetDict[sample][0] + newline)
-
-      logger.info('Writing file ' + fileName)
-
-  except IOError:
-    logger.error('File error: ' + str(err))
-    print ('File error: ' + str(err))
-
-  return fileName
-
-def get_reverse_complement(sequence):
-    lookup_table = {'A': 'T', 'T': 'A', 'G': 'C', 'C': 'G'}
-    reverse_complement = ''
-    for nucleotide in reversed(sequence):
-        reverse_complement += lookup_table[nucleotide]
-    return reverse_complement
-
-
-def createSampleSheet(parentDict, flowCellDict, configMap, index1Vocabulary, index2Vocabulary,
-                            flowCellName, logger, myoptions):
-  '''
-  '''
-
-  kitsDict = {"CHIP_SEQ_SAMPLE_PREP" : ["",""],
-              "TRUSEQ_RNA_SAMPLEPREPKIT_V2_ILLUMINA" : ["A","TruSeq LT"],
-              "NEXTERA_XT_DNA_SAMPLE_PREPARATION_KIT_ILLUMINA" : ["S", "Nextera XT"],
-              "TRUSEQ_CHIP_SAMPLE_PREP_KIT" : ["A","TruSeq LT"],
-              "MRNA_SEQ_SAMPLE_PREP" : ["",""],
-              "TRUSEQRNA_SAMPLE_PREP_KIT" : ["A","TruSeq LT"],
-              "NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1" : ["A","TruSeq LT"],
-              "NEBNEXT_CHIP-SEQ_LIBRARY_PREP_REAGENT_SET" : ["A","TruSeq LT"],
-              "RIBOZERO_SCRIPTSEQ_MRNA-SEQ_KIT" : ["",""],
-              "NEXTERA_DNA_SAMPLE_PREPARATION_KIT_ILLUMINA" : ["N", "Nextera"],
-              "GENOMICDNA_SAMPLE_PREP" : ["",""],
-              "AGILENT_SURESELECTXT_AUTOMATEDLIBRARYPREP" : ["",""],
-              "TRUSEQ_DNA_SAMPLE_PREP_KIT" : ["A","TruSeq LT"],
-              "NEXTERA_DNA_SAMPLE_PREP_KITS" : ["N", "Nextera"],
-              "AGILENT_SURESELECT_ENRICHMENTSYSTEM" : ["",""],
-              "TRUSEQ_DNA_SAMPLE_PREP_KIT_V2" : ["A","TruSeq LT"],
-              "AGILENT_SURESELECT_HUMAN_ALL_EXON_V5_UTRS" : ["",""],
-              "POLYA_SCRIPTSEQ_MRNA-SEQ_KIT" : ["",""],
-              "AGILENT_SURESELECTXT2_MOUSE_ALL_EXON" : ["",""],
-              "PAIRED_END_DNA_SAMPLE_PREP" : ["",""],
-              "NEXTERA_DNA_SAMPLE_PREP_KIT_BUFFER_HMW" : ["N", "Nextera"]
-  }
-
-  sampleSheetDict = {}
-  headerList = []
-
-  # here we take the fisrat sample to determine the Sample Prep Kit 
-  try:
-    assay = kitsDict [parentDict.itervalues().next()[configMap['kit']]][1]
-  except:
-    print "No Kit set for sample. Will not set the assay value in the sample sheet"
-    assay = ""
-    pass
-
-  separator = configMap['separator']
-
-  miSeqHeaderSection = configMap['miSeqHeaderSection'].split(separator)
-  miSeqHeaderSection.reverse()
-  headerList = [miSeqHeaderSection.pop().strip()]
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + configMap['iemFileVersion'])
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + configMap['facilityInstitution'])
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + configMap['facilityName'])
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + flowCellDict['Name'])
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + datetime.now().strftime('%m/%d/%Y'))
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + configMap['miSeqWorkflow'])
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + configMap['miSeqApplication'])
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + assay) 
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + flowCellDict[configMap['endType']] + '_' + flowCellDict[configMap['cycles']])
-  headerList.append(miSeqHeaderSection.pop().strip() + separator + configMap['miSeqChemistry'])
-  headerList.append('')
-
-  miSeqReadsSection = configMap['miSeqReadsSection'].split(separator)
-  miSeqReadsSection.reverse()
-  headerList.append(miSeqReadsSection.pop())
-  headerList.append(flowCellDict[configMap['cycles']])
-  if (flowCellDict[configMap['endType']] == 'PAIRED_END'):
-    headerList.append(flowCellDict[configMap['cycles']])
-  headerList.append('')
-
-  miSeqSettingsSection = configMap['miSeqSettingsSection'].split(separator)
-  miSeqSettingsSection.reverse()
-  headerList.append(miSeqSettingsSection.pop())
-  if ('nextera' in assay.lower()):
-    headerList.append(configMap['nexteraAdapter'])
-  if ('truseq' in assay.lower()):
-    headerList.append(configMap['truSeqAdapter1'])
-    headerList.append(configMap['truSeqAdapter2'])
-  headerList.append('')
-
-  if int(flowCellDict['INDEXREAD2']) > 0:
-    miSeqDataSection = configMap['nextSeqDataSectionDualRead'].split(',')
-  else:
-    miSeqDataSection = configMap['nextSeqDataSectionSingleRead'].split(',')
-    
-  miSeqDataSection.reverse()
-  headerList.append(miSeqDataSection.pop())
-  headerList.append(','.join(miSeqDataSection.pop().strip().split()))
-
-  for key in parentDict.keys():
-    lane = parentDict[key]['LANE'][-1:]
-    # If no index then just skip this  sample
-    if (configMap['index1Name'] not in parentDict[key]) or (parentDict[key][configMap['index1Name']] == 'NOINDEX'):
-      continue
-    index1 = parentDict[key][configMap['index1Name']]
-
-    if configMap['index2Name'] in parentDict[key]:
-      index2 = parentDict[key][configMap['index2Name']]
-      indexNumber = index2Vocabulary[parentDict[key][configMap['index2Name']]].split()[2]
-
-    try:
-      kit = parentDict[key][configMap['kit']]
-      prefix = kitsDict[kit][0]
-    except:
-      print "Missing Kit on " + str(key)
-      prefix = ""
-
-    len_index1 = int(flowCellDict['INDEXREAD'])
-    len_index2 = int(flowCellDict['INDEXREAD2'])
-
-    if int(flowCellDict['INDEXREAD2']) > 0:
-      sampleSheetDict[lane + '_' + key] = [
-                            lane + separator
-                            + key + separator
-                            + key + '_' + sanitizeString(parentDict[key][configMap['externalSampleName']]) + '_' + index1[0:len_index1] + '_' + index2[0:len_index2] + separator
-                            + separator
-                            + separator
-                            + index1Vocabulary[index1].split()[1] + separator
-                            + index1[0:len_index1] + separator
-                            + prefix + indexNumber + separator
-                            + get_reverse_complement(index2[0:len_index2]) + separator
-                            + key + separator
-                            ]
-    else:
-            sampleSheetDict[lane + '_' + key] = [
-                              lane + separator
-                            + key + separator
-                            + key + '_' + sanitizeString(parentDict[key][configMap['externalSampleName']]) + '_' + index1[0:len_index1] + separator
-                            + separator
-                            + separator
-                            + index1Vocabulary[index1].split()[1] + separator
-                            + index1[0:len_index1] + separator
-                            + key + separator
-                            ]
-    
-  myFileName = myoptions.outdir + configMap['SampleSheetFileName'] + '_' + \
-                   flowCellName + '.csv'
-
-  sampleSheetFile = writeMiSeqSampleSheet(sampleSheetDict, headerList, flowCellName,
-                                          myoptions, logger, fileName=myFileName)
-  return sampleSheetFile
-
-'''
-Main script
-'''
-def main ():
-
-  logger = setUpLogger('log/')
-  logger.info('Started Creation of Sample Sheet...')
-
-  myoptions = parseOptions(logger)
-
-  if myoptions.debug:
-    logger.setLevel(logging.DEBUG)
-
-  flowCellName = myoptions.flowcell
-  configMap = readConfig(logger)
-  service = login(logger, configMap)
-
-  foundFlowCell, containedSamples = getFlowCell(configMap['illuminaFlowCellTypeName'], flowCellName,
-                                                service, logger)
-  parentDict, samplesPerLaneDict = getContainedSampleProperties(containedSamples, service)
-  logger.info('Found ' + str(len(parentDict)) + ' samples on the flow cell ' + flowCellName)
-
-  flowCellName = foundFlowCell.getCode()
-  if '-' in flowCellName:
-    flowCellName = flowCellName.split('_')[3]
-  elif len(flowCellName) > 12:
-    flowCellName = flowCellName.split('_')[3][1:]
-  else:
-    pass
-
-  flowCellDict = convertSampleToDict(foundFlowCell)
-
-  hiseqList = configMap['hiSeqNames'].split()
-  miseqList = configMap['miSeqNames'].split()
-
-  runFolderName = flowCellDict['Name']
-
-  index1Vocabulary = getVocabulary(configMap['index1Name'], service)
-  index2Vocabulary = getVocabulary(configMap['index2Name'], service)
-  SampleSheetFile = createSampleSheet(parentDict, flowCellDict, configMap,
-                             index1Vocabulary, index2Vocabulary, flowCellName, logger, myoptions)
-
-  if myoptions.maillist:
-    sendMail(configMap['mailList'], [SampleSheetFile], flowCellName, configMap, logger)
-
-  logout(service, logger)
-
-
-if __name__ == "__main__":
-    main()
diff --git a/deep_sequencing_unit/source/Jython/createSampleSheet_nov.py b/deep_sequencing_unit/source/Jython/createSampleSheet_nov.py
deleted file mode 100644
index a6da0077a0a..00000000000
--- a/deep_sequencing_unit/source/Jython/createSampleSheet_nov.py
+++ /dev/null
@@ -1,409 +0,0 @@
-'''
-@copyright:
-Copyright 2012 ETH Zuerich, CISD
- 
-@license:
-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.
-
-@author:
-Manuel Kohler
-
-@description:
-Creates the SampleSheet.csv out of values from openBIS for Demultiplexing 
-used in the Illumina pipeline (configureBclToFastq.pl) 
-
-@attention:
-Runs under Jython
-
-@note:
-Takes into account to replace special characters with an underscore so that the Illumina script
-does not fail
-
-HiSeq Header Description
-========================
-Column Header  Description
-FCID  Flow cell ID
-Lane  Positive integer, indicating the lane number (1-8)
-SampleID  ID of the sample
-SampleRef  The reference used for alignment for the sample
-Index  Index sequences. Multiple index reads are separated by a hyphen (for example, ACCAGTAA-GGACATGA).
-Description  Description of the sample
-Control  Y indicates this lane is a control lane, N means sample
-Recipe Recipe used during sequencing
-Operator Name or ID of the operator
-SampleProject  The project the sample belongs to
-'''
-
-from __future__ import with_statement
-import os
-import logging
-import re
-import sys
-import string
-import smtplib
-from ConfigParser import SafeConfigParser
-from optparse import OptionParser
-from datetime import *
-
-from ch.systemsx.cisd.openbis.dss.client.api.v1 import OpenbisServiceFacadeFactory
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-from java.util import EnumSet
-
-lineending = {'win32':'\r\n', 'linux':'\n', 'mac':'\r'}
-COMMA = ','
-
-def login(configMap, logger):
-  logger.info('Logging into ' + configMap['openbisServer'])
-  try:
-    service = OpenbisServiceFacadeFactory.tryCreate(configMap['openbisUserName'],
-                                                  configMap['openbisPassword'],
-                                                  configMap['openbisServer'],
-                                                  configMap['connectionTimeout'])
-  except:
-    raise ('Could not connect to ' + configMap['openbisServer'] + '. Please check if the server ' +
-    'address is OK, the firewall is not blocking the communication or openBIS is down.')
-
-  return service
-
-def logout (service, logger):
-  service.logout()
-  logger.info('Logged out')
-
-def setUpLogger(logPath, logLevel=logging.INFO):
-  logFileName = 'createSampleSheet'
-  d = datetime.now()
-  logFileName = logFileName + '_' + d.strftime('%Y-%m-%d_%H_%M_%S') + '.log'
-  logging.basicConfig(filename=logPath + logFileName,
-                      format='%(asctime)s [%(levelname)s] %(message)s', level=logLevel)
-  logger = logging.getLogger(logFileName)
-  return logger
-
-def parseOptions(logger):
-  logger.info('Parsing command line parameters')
-  parser = OptionParser(version='%prog 1.0')
-  parser.add_option('-f', '--flowcell',
-                  dest='flowcell',
-                  help='The flowcell which is used to create the SampleSheet.csv',
-                  metavar='<flowcell>')
-  parser.add_option('-l', '--lineending',
-                  dest='lineending',
-                  type='choice',
-                  action='store',
-                  choices=['win32', 'linux', 'mac'],
-                  default='linux',
-                  help='Specify end of line separator: win32, linux, mac. Default: linux' ,
-                  metavar='<lineending>')
-  parser.add_option('-o', '--outdir',
-                  dest='outdir',
-                  default='./',
-                  help='Specify the ouput directory. Default: ./' ,
-                  metavar='<outdir>')
-  parser.add_option('-d', '--debug',
-                  dest='debug',
-                  default=False,
-                  action='store_true',
-                  help='Verbose debug logging. Default: False')
-  parser.add_option('-v', '--verbose',
-                  dest='verbose',
-                  default=False,
-                  action='store_true',
-                  help='Write Sample Sheet to stout. Default: False')
-
-  (options, args) = parser.parse_args()
-
-  if options.outdir[-1] <> '/':
-    options.outdir = options.outdir + '/'
-
-  if options.flowcell is None:
-    parser.print_help()
-    exit(-1)
-  return options
-
-def parseConfigurationFile(logger, propertyFile='etc/createSampleSheet_nov.properties'):
-  '''
-  Parses the given config files and returns the values
-  '''
-  logger.info('Reading config file ' + propertyFile)
-  config = SafeConfigParser()
-  config.read(propertyFile)
-  config.sections()
-  return config
-
-def readConfig(logger):
-
-  GENERAL = 'GENERAL'
-  OPENBIS = 'OPENBIS'
-  ILLUMINA = 'ILLUMINA'
-
-  configMap = {}
-
-  configParameters = parseConfigurationFile(logger)
-
-  configMap['facilityName'] = configParameters.get(GENERAL, 'facilityName')
-  configMap['facilityNameShort'] = configParameters.get(GENERAL, 'facilityNameShort')
-  configMap['facilityInstitution'] = configParameters.get(GENERAL, 'facilityInstitution')
-  configMap['sampleSheetFileName'] = configParameters.get(GENERAL, 'sampleSheetFileName')
-  configMap['lanePrefix'] = configParameters.get(GENERAL, 'lanePrefix')
-  configMap['separator'] = configParameters.get(GENERAL, 'separator')
-  configMap['indexSeparator'] = configParameters.get(GENERAL, 'indexSeparator')
-
-  configMap['openbisUserName'] = configParameters.get(OPENBIS, 'openbisUserName')
-  configMap['openbisPassword'] = configParameters.get(OPENBIS, 'openbisPassword', raw=True)
-  configMap['openbisServer'] = configParameters.get(OPENBIS, 'openbisServer')
-  configMap['connectionTimeout'] = configParameters.getint(OPENBIS, 'connectionTimeout')
-  configMap['illuminaFlowCellTypeName'] = configParameters.get(OPENBIS, 'illuminaFlowCellTypeName')
-  configMap['index1Name'] = configParameters.get(OPENBIS, 'index1Name')
-  configMap['index2Name'] = configParameters.get(OPENBIS, 'index2Name')
-  configMap['species'] = configParameters.get(OPENBIS, 'species')
-  configMap['sampleName'] = configParameters.get(OPENBIS, 'sampleName')
-  configMap['operator'] = configParameters.get(OPENBIS, 'operator')
-  configMap['endType'] = configParameters.get(OPENBIS, 'endType')
-  configMap['readLength'] = configParameters.get(OPENBIS, 'readLength')
-  configMap['lengthIndex1'] = configParameters.get(OPENBIS, 'lengthIndex1')
-  configMap['lengthIndex2'] = configParameters.get(OPENBIS, 'lengthIndex2')
-  configMap['gaNumber'] = configParameters.get(OPENBIS, 'gaNumber')
-
-  configMap['hiSeqNames'] = configParameters.get(ILLUMINA, 'hiSeqNames')
-  configMap['hiSeqHeader'] = configParameters.get(ILLUMINA, 'hiSeqHeader')
-
-  return configMap
-
-def sanitizeString(myString):
-  return re.sub('[^A-Za-z0-9]+', '_', myString)
-
-def getVocabulary(vocabularyCode):
-  ''' Returns the vocabulary terms and vocabulary labels of a vocabulary in a dictionary
-      specified by the parameter vocabularyCode
-      '''
-  terms = []
-  vocabularies = service.listVocabularies()
-  vocabularyDict = {}
-  for vocabulary in vocabularies:
-    if (vocabulary.getCode() == vocabularyCode):
-      terms = vocabulary.getTerms()
-  if terms:
-    for term in terms:
-      vocabularyDict[term.getCode()] = term.getLabel()
-  else:
-    print ('No vocabulary found for ' + vocabularyCode)
-  return vocabularyDict
-
-def getFlowCell (illuminaFlowCellTypeName, flowCellName, service, logger):
-  '''
-  Getting the the matching FlowCell
-  '''
-  sc = SearchCriteria();
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, illuminaFlowCellTypeName));
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCellName));
-  foundSample = service.searchForSamples(sc)
-  try:
-    assert foundSample.size() == 1
-  except AssertionError:
-    print (str(foundSample.size()) + ' flow cells found which match.')
-    exit(1)
-
-  logger.info('Found ' + foundSample[0].getCode() + ' in openBIS')
-  # Search for contained samples
-  sampleSc = SearchCriteria()
-  sampleSc.addSubCriteria(SearchSubCriteria.createSampleContainerCriteria(sc))
-  foundContainedSamples = service.searchForSamples(sampleSc)
-
-  return foundSample[0], foundContainedSamples
-
-
-def getParents(sampleName, service):
-  '''
-  Returns a list of parents of a sample 
-  '''
-  sc = SearchCriteria();
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleName));
-  foundSample = service.searchForSamples(sc)
-
-  # set the criteria for getting the parents when providing the child name
-  sampleSc = SearchCriteria()
-  sampleSc.addSubCriteria(SearchSubCriteria.createSampleChildCriteria(sc))
-  foundParentSamples = service.searchForSamples(sampleSc)
-
-  return foundParentSamples
-
-def getContainedSampleProperties(logger, containedSamples, service):
-  '''
-  Takes a  list of contained samples, retrieves the parents and their properties and returns it
-  as a dictionary. The key is the sample name, the value is a list of the properties
-  '''
-  laneParentDict = {}
-
-  for lane in containedSamples:
-    parents = getParents (lane.getCode(), service)
-
-    for parent in parents:
-      parentCode = parent.getCode()
-      parentProperties = parent.getProperties()
-
-      propertyDict = {}
-      for property in parentProperties:
-        propertyDict[property] = parentProperties.get(property)
-
-      propertyDict['LANE'] = lane.getCode()
-      propertyDict['SAMPLE_TYPE'] = parent.getSampleTypeCode()
-      myKey = sanitizeString(parentCode + '_' + lane.getCode())
-      laneParentDict[myKey] = propertyDict
-
-  logger.info('Found ' + str(len(laneParentDict)) + ' samples on the flow cell.')
-  return laneParentDict
-
-
-def convertSampleToDict(foundFlowCell, configMap):
-  '''
-  converts <type 'ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample'> to a python dict
-  '''
-  flowCellDict = {}
-  fcProperties = foundFlowCell.getProperties()
-  for property in fcProperties:
-    flowCellDict[property] = fcProperties.get(property)
-  flowCellDict['Name'] = foundFlowCell.getIdentifier().split('/')[-1]
-  flowCellDict['CODE'] = foundFlowCell.getCode()
-  return flowCellDict
-
-def getIndex(indx1, indx2, index1ReadLength, indexRead2Length, properties, configMap):
-  if indx1 in properties and index1ReadLength > 0:
-    index = properties[indx1][0:index1ReadLength]
-  else:
-    index = ''
-  if indx2 in properties and indexRead2Length > 0:
-    index = index + configMap['indexSeparator'] + properties[indx2][0:index1ReadLength]
-  return index
-
-
-def getSampleProperties(parentsKey, service, logger):
-  for sample in parentsKey:
-    sampleProperties = sample.getProperties()
-    logger.debug(sample.getSampleTypeCode() + ' ' + sample.getCode())
-    parentSamples = getParents(sample.getCode(), service)
-    for parentSample in parentSamples:
-      logger.debug(parentSample.getSampleTypeCode() + ' ' + parentSample.getCode())
-      parentSampleProperties = parentSample.getProperties()
-
-  return parentSample, parentSampleProperties
-
-
-def createSampleSheetDict(configMap, control, sampleSheetDict, flowCellName, flowCellOperator,
-                           end_type, cycles, lane, gaNumber, index, sample, sampleProperties, library):
-  sampleSheetDict[lane + '_' + sample.getCode()] = [
-    flowCellName + COMMA + lane + COMMA + library.getCode() + COMMA +
-    sampleProperties[configMap['species']] + COMMA + index + COMMA +
-    sanitizeString(sampleProperties[configMap['sampleName']]) + COMMA + control + COMMA +
-    end_type + '_' + cycles + COMMA + flowCellOperator + COMMA + gaNumber]
-
-def createHiseqSampleSheet(laneParentDict, flowCellDict, configMap, service, logger, myoptions):
-  '''
-    Builds up a dictionary with all entries in the Sample Sheet
-  '''
-  control = 'N'
-  # the illlumina pipeline uses always one base less than the sequencer is sequencing
-  demultiplexIndexLengthPenalty = 0
-
-  sampleSheetDict = {}
-  # Making sure this is on the top of the Sample Sheet
-  sampleSheetDict[u'!'] = ([configMap['hiSeqHeader']])
-
-  indx1 = configMap['index1Name']
-  indx2 = configMap['index2Name']
-
-  flowCellName = flowCellDict['CODE']
-  flowCellOperator = flowCellDict[configMap['operator']]
-  end_type = flowCellDict[configMap['endType']]
-  cycles = flowCellDict[configMap['readLength']]
-  index1ReadLength = int(flowCellDict[configMap['lengthIndex1']]) + demultiplexIndexLengthPenalty
-  indexRead2Length = int(flowCellDict[configMap['lengthIndex2']]) + demultiplexIndexLengthPenalty
-
-  for key in laneParentDict.keys():
-    lane = laneParentDict[key]['LANE'][-1:]
-    properties = laneParentDict[key]
-    sampleName = laneParentDict[key]['LIBRARYID']
-
-    # already Library with index
-    if indx1 in properties:
-      gaNumber = laneParentDict[key][configMap['gaNumber']]
-      index = getIndex(indx1, indx2, index1ReadLength, indexRead2Length, properties, configMap)
-      sample, sampleProperties = getSampleProperties(getParents(sampleName, service), service, logger)
-
-      createSampleSheetDict(configMap, control, sampleSheetDict, flowCellName, flowCellOperator,
-                          end_type, cycles, lane, gaNumber, index, sample, sampleProperties)
-    else:
-      for library in getParents(sampleName, service):
-        libraryProperties = library.getProperties()
-        gaNumber = libraryProperties[configMap['gaNumber']]
-        if not gaNumber:
-          logger.warning('No GA number found for ' + library.getCode())
-        index = getIndex(indx1, indx2, index1ReadLength, indexRead2Length, libraryProperties, configMap)
-        if not index:
-          logger.warning('No index found for ' + library.getCode())
-        sample, sampleProperties = getSampleProperties(getParents(library.getCode(), service), service, logger)
-
-        createSampleSheetDict(configMap, control, sampleSheetDict, flowCellName, flowCellOperator,
-                          end_type, cycles, lane, gaNumber, index, sample, sampleProperties, library)
-
-  logger.debug(sampleSheetDict)
-  sortedSampleSheetList = sampleSheetDict.keys()
-  sortedSampleSheetList.sort()
-  writeSampleSheet(flowCellName, sampleSheetDict, sortedSampleSheetList, myoptions, logger, fileName=myoptions.outdir +
-                      configMap['sampleSheetFileName'])
-
-def writeSampleSheet(flowCellName, sampleSheetDict, sortedSampleSheetList, myoptions, logger, fileName):
-  '''
-  Write the given dictionary to a csv file
-  '''
-  newline = lineending[myoptions.lineending]
-  myFile = fileName + '_' + flowCellName + '.csv'
-  try:
-    with open(myFile, 'w') as sampleSheetFile:
-      for listElement in sortedSampleSheetList:
-        if myoptions.verbose:
-          print sampleSheetDict[listElement][0]
-        sampleSheetFile.write(sampleSheetDict[listElement][0] + newline)
-
-      logger.info('Writing file ' + myFile)
-
-  except IOError:
-    logger.error('File error: ' + str(err))
-    print ('File error: ' + str(err))
-
-
-def main():
-  '''
-  Main script
-  '''
-  logger = setUpLogger('log/')
-  logger.info('Started Creation of Sample Sheet...')
-
-  myoptions = parseOptions(logger)
-  if myoptions.debug:
-    logger.setLevel(logging.DEBUG)
-
-  flowCellName = myoptions.flowcell
-  configMap = readConfig(logger)
-  service = login(configMap, logger)
-
-  foundFlowCell, containedSamples = getFlowCell(configMap['illuminaFlowCellTypeName'], flowCellName, service, logger)
-  flowCellName = foundFlowCell.getCode()
-  flowCellDict = convertSampleToDict(foundFlowCell, configMap)
-
-  laneParentDict = getContainedSampleProperties(logger, containedSamples, service)
-  createHiseqSampleSheet(laneParentDict, flowCellDict, configMap, service, logger, myoptions)
-
-  logout(service, logger)
-
-if __name__ == "__main__":
-    main()
diff --git a/deep_sequencing_unit/source/Jython/create_QGF_Invoices.py b/deep_sequencing_unit/source/Jython/create_QGF_Invoices.py
deleted file mode 100644
index 804dcceef72..00000000000
--- a/deep_sequencing_unit/source/Jython/create_QGF_Invoices.py
+++ /dev/null
@@ -1,403 +0,0 @@
-'''
-  Copyright 2012 ETH Zuerich, CISD
-  
-  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.
- '''
-
-'''
-@author Manuel Kohler
-
-Creates Excel-based invoices for the Quantitative Genomics Facility, 
-D-BSSE, ETH Zurich
-
-'''
-
-import os
-import re
-import sys
-from datetime import *
-from java.io import FileOutputStream
-from org.apache.poi.hssf.usermodel import HSSFWorkbook
-from org.apache.poi.poifs.filesystem import POIFSFileSystem
-from org.apache.poi.xssf.usermodel import XSSFWorkbook
-from ch.systemsx.cisd.openbis.dss.client.api.v1 import OpenbisServiceFacadeFactory
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-
-facilityName = "Quantitative Genomics Facility"
-facilityInstitution = "D-BSSE, ETHZ"
-facilityNameShort = "QGF"
-subHeader = "Detailed Sample Overview"
-PRINCIPAL_INVESTIGATOR = "Principal Investigator"
-CONTACT_PERSON = "Contact person"
-FLOW_CELL_ID = "Flow Cell ID"
-defaultFonts = "Calibri"
-
-excelFormats = {"xls": "HSSFWorkbook()" , "xlsx": "XSSFWorkbook()"}
-
-columnHeaders = ["EXTERNAL_SAMPLE_NAME", "BARCODE", "BIOLOGICAL_SAMPLE_ARRIVED", "KIT_PREPARED",
-                 "KIT", "FRAGMENT_SIZE_PREPARED_ILLUMINA", "CONCENTRATION_PREPARED_ILLUMINA",
-                 "NOTES", "PRICE"]
-
-columnHeadersMap = {"EXTERNAL_SAMPLE_NAME": "Sample Name",
-                    "BARCODE": "Index",
-                    "BIOLOGICAL_SAMPLE_ARRIVED": "Received",
-                    "PREPARED_BY" : "Prepared by",
-                    "FRAGMENT_SIZE_PREPARED_ILLUMINA" : "Frag Size",
-                    "CONCENTRATION_PREPARED_ILLUMINA" : "Conc",
-                    "NOTES" : "Notes",
-                    "PRICE" : "Price"}
-
-fcPropertyList = ["SEQUENCER", "FLOW_CELL_SEQUENCED_ON", "END_TYPE", "ILLUMINA_PIPELINE_VERSION",
-                    "CYCLES_REQUESTED_BY_CUSTOMER", "FLOWCELLTYPE", "SBS_KIT"]
-
-dataSetFileNameEntitySeparator = ":"
-
-outputPath = "/local0/openbis/invoices"
-
-invoicePropertyName = "INVOICE"
-pIPropertyName = "PRINCIPAL_INVESTIGATOR_NAME"
-contactPersonNamePropertyName = "CONTACT_PERSON_NAME"
-
-'''
-class invoiceDataSet:
-  def __init__(self):
-    self.code = ''
-    self.externalSampleName = ''
-    self.sampleID = ''
-    self.biologicalSampleArrived = ''
-    self.preparedBy = ''
-    self.preparedDate = ''
-    self.kitUsed = ''
-    self.fragmentSizePrepared = ''
-    self.concentrationPrepared = ''
-    self.dataTransferred = ''
-    self.price = ''
-    
-
-  def setDefaultHeader(self):
-    code = "Sample code"
-    externalSampleName = "External Sample Name" 
-    sampleID = "Internal #"
-    biologicalSampleArrived = "Received"
-    preparedBy = "Prepared by"
-    preparedDate = "Prepared on" 
-    kitUsed = "Kit used"
-    fragmentSizePrepared = "Fragment size prepared in bp"
-    concentrationPrepared = "concentration prepared in ul/ng" 
-    dataTransferred = "Data transferred"
-    price = "Price excl. VAT"
-''' 
-    
-class flowCell:
-  def __init__(self):
-    self.id = ''
-    self.sequencer = ''
-    self.flowCellSequencedOn = ''
-    self.endType = ''
-    self.illuminaPipelineVersion = ''
-    self.cyclesRequestedByCustomer = ''
-    self.flowCellType = ''
-    self.sbsKit = '' 
-     
-    
-    
-class uniqueRow():
-  '''
-  Little helper class which ensures the unique use of a row 
-  '''
-  def __init__(self):
-    self.row = -1
-     
-  def getNextRow (self):
-    self.row += 1
-    return self.row
-  
-  def setRow(self, rowNumber):
-    self.row = rowNumber
-    return self.row
-  
-class uniqueColumn():
-  '''
-  Little helper class which ensures the unique use of a column 
-  '''
-  def __init__(self):
-    self.column = -1
-     
-  def getCurrentColumn(self):
-    return self.column
-  
-  def getNextColumn (self):
-    self.column += 1
-    return self.column
-  
-  def setColumn(self, columnNumber):
-    self.column = columnNumber
-    return self.column
-
-def getDate():
-  d = datetime.now()
-  return d.strftime("%A, %d of %B %Y")
-
-def setFont(wb, fontSize = 10):
-  font = wb.createFont()
-  font.setFontHeightInPoints(fontSize)
-  font.setFontName(defaultFonts)
-  font.setItalic(False)
-  font.setStrikeout(False)
-  # Fonts are set into a style so create a new one to use.
-  style = wb.createCellStyle()
-  style.setFont(font)
-  return style
-
-
-def getVocabulary(vocabularyCode):
-  ''' Returns the vocabulary term and vocabulary label of a vocabulary specified by the parameter
-  vocabularyCode in a map'''
-
-  vocabularies = service.listVocabularies()
-  vocabularyMap = {}
-  for vocabulary in vocabularies:
-    if (vocabulary.getCode() == vocabularyCode):
-      terms = vocabulary.getTerms()
-  for term in terms:
-    vocabularyMap[term.getCode()] = term.getLabel()
-  return vocabularyMap 
-  
-
-def getNonbilledSamples (sampleType):
-  '''Getting all samples where no Invoice was sent 
-     @param param: Sample Type which we are looking for  
-  '''
-
-  sc = SearchCriteria();
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, sampleType));
-  sc.addMatchClause(SearchCriteria.MatchClause.createPropertyMatch(invoicePropertyName, "false"));
-  foundSamples = service.searchForSamples(sc)
-  return foundSamples
-
-def groupByPi (sampleList):
-  principalInvestigatorDict = {}
-
-  for sample in sampleList:
-    pI = sample.getProperties().get(pIPropertyName)
-    if principalInvestigatorDict.has_key(pI):
-      principalInvestigatorDict[pI].append(sample)
-    else: 
-      principalInvestigatorDict[pI] = [sample]
-  return principalInvestigatorDict
-
-def groupByContactPerson (sampleList):
-  groupedByPersonDict = {}
-
-  for sample in sampleList:
-    contact = sample.getProperties().get(contactPersonNamePropertyName)
-    if groupedByPersonDict.has_key(contact):
-      groupedByPersonDict[contact].append(sample)
-    else: 
-      groupedByPersonDict[contact] = [sample]    
-  return groupedByPersonDict
-
-def getContainer(sample):
-  
-  flowcell = None
-  
-  parentSearchCriteria = SearchCriteria()
-  # define Parent
-  parentSearchCriteria.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sample.getCode()))
-  childrenSearchCriteria = SearchCriteria()
-  # we look for children with this parent
-  childrenSearchCriteria.addSubCriteria(SearchSubCriteria.createSampleParentCriteria(parentSearchCriteria))
-  children = service.searchForSamples(childrenSearchCriteria)
-  
-  for child in children:
-    child = child.getCode()
-    try:
-      containerName, lane = child.split(dataSetFileNameEntitySeparator)
-    except:
-      # No container
-      containerName = ""
-      lane = ""
-    
-    if containerName <> "":
-      containerSearch = SearchCriteria()
-      containerSearch.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, containerName))
-      containerList = service.searchForSamples(containerSearch)
-
-      for container in containerList:
-        flowcell = flowCell ()
-        flowcell.id = containerName
-        '''flowcell.sequencer = container.getProperties().get("SEQUENCER")
-        flowcell.flowCellSequencedOn = container.getProperties().get("FLOW_CELL_SEQUENCED_ON")
-        flowcell.endType = container.getProperties().get("END_TYPE")
-        flowcell.illuminaPipelineVersion = container.getProperties().get("ILLUMINA_PIPELINE_VERSION")
-        flowcell.cyclesRequestedByCustomer = container.getProperties().get("CYCLES_REQUESTED_BY_CUSTOMER")
-        flowcell.flowCellType = container.getProperties().get("FLOWCELLTYPE")
-        flowcell.sbsKit = container.getProperties().get("SBS_KIT") '''
-  return flowcell
-        
-def writeExcel(piName, groupedByPersonDict, format = "xls"):
-  '''
-  '''
-  
-  myRows = uniqueRow()
-  kitVocabulary = getVocabulary("KIT")
-  setOfFlowcells = set ()
-  
-  def writeHeader():
-    # Write header
-    row = sheet.createRow(myRows.getNextRow())
-    row.createCell(0).setCellValue(facilityName + ", " + facilityInstitution)
-    row.getCell(0).setCellStyle(setFont(wb, 14))
-    row1 = sheet.createRow(myRows.getNextRow())
-    row1.createCell(0).setCellValue(getDate())
-    row1.getCell(0).setCellStyle(setFont(wb, 10))
-    
-  
-  def createRow(key = "", value = "", rowNumber = 0, fontSize = 10):
-    '''
-    '''
-    if rowNumber == 0: 
-      row = sheet.createRow(myRows.getNextRow())
-    else:
-      row = rowNumber
-    row.createCell(0).setCellValue(key)
-    row.createCell(1).setCellValue(value)
-    row.getCell(0).setCellStyle(setFont(wb, fontSize))
-    row.getCell(1).setCellStyle(setFont(wb, fontSize))
-    return row
-  
-  def writeFooter(sheet):
-    footer = sheet.getFooter()
-    footer.setRight("generated on " + datetime.now().strftime("%H:%M - %d.%m.%Y"))
-
-  wb = (eval(excelFormats[format]))
-  createHelper = wb.getCreationHelper()
-  sheet = wb.createSheet(facilityNameShort)
-  # 3/2 = 150 percent magnification when opening the workbook
-  sheet.setZoom(3, 2)
-
-  writeHeader()
-  createRow(PRINCIPAL_INVESTIGATOR, piName)
-  contactrow = myRows.setRow(myRows.getNextRow())
-   
-  for contactPerson in groupedByPersonDict: 
-    myColumns = uniqueColumn()
-    createRow(CONTACT_PERSON, contactPerson, 0, 14)
-    
-    sampleList = groupedByPersonDict[contactPerson]
-    
-    sampleHeader = sheet.createRow(myRows.getNextRow())
-    sampleHeader.createCell(myColumns.getNextColumn()).setCellValue("Flow Cell")
-    sampleHeader.getCell(myColumns.getCurrentColumn()).setCellStyle(setFont(wb, 10))
-    sampleHeader.createCell(myColumns.getNextColumn()).setCellValue("Sample Code")
-    sampleHeader.getCell(myColumns.getCurrentColumn()).setCellStyle(setFont(wb, 10))
-    for c in columnHeaders:
-      sampleHeader.createCell(myColumns.getNextColumn()).setCellValue(c)
-      sampleHeader.getCell(myColumns.getCurrentColumn()).setCellStyle(setFont(wb, 10))
-  
-    for singleSample in sampleList:
-      singleSampleColumns = uniqueColumn()
-      fc = getContainer(singleSample)
-      
-      rowN = sheet.createRow(myRows.getNextRow())
-      contactrow += 3
-      
-      code = singleSample.getCode()
-      if fc is not None:
-        rowN.createCell(singleSampleColumns.getNextColumn()).setCellValue(fc.id)
-        rowN.getCell(singleSampleColumns.getCurrentColumn()).setCellStyle(setFont(wb, 10))
-        setOfFlowcells.add(fc.id)
-      rowN.createCell(singleSampleColumns.getNextColumn()).setCellValue(code)
-      rowN.getCell(singleSampleColumns.getCurrentColumn()).setCellStyle(setFont(wb, 10))
-      
-      for column in columnHeaders:
-        if column == "KIT":
-          if singleSample.getProperties().get(column) is not None:        
-            val = kitVocabulary[singleSample.getProperties().get(column)]
-        else:
-          val = singleSample.getProperties().get(column)
-        rowN.createCell(singleSampleColumns.getNextColumn()).setCellValue(val)
-        rowN.getCell(singleSampleColumns.getCurrentColumn()).setCellStyle(setFont(wb, 10))
-
-    createRow()
-  
-  
-  createRow("Flow Cell Details", "", 0, 14)
-  
-  for FC in setOfFlowcells:
-    containerSearch = SearchCriteria()
-    containerSearch.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, FC))
-    containerList = service.searchForSamples(containerSearch)
-    
-    print (len(containerList))
-    
-    for container in containerList:
-      #index = containerList.index(container)
-      #createRow("Number",index+1)
-      createRow(FLOW_CELL_ID, FC)
-      for property in fcPropertyList:
-        createRow(property, container.getProperties().get(property))
-      createRow()
-  
-  # adjust width
-  for i in range(0, 20):
-    sheet.autoSizeColumn(i)
-
-  # set layout to landscape
-  sheet.getPrintSetup().setLandscape(True)
-  
-  writeFooter(sheet)
-  
-  #  Write the output to a file
-  fileOut = FileOutputStream(outputPath + "/" + facilityNameShort + "_" + piName.replace(" ", "_") + 
-                             datetime.now().strftime("_%d_%m_%Y.") + format)
-  wb.write(fileOut);
-  fileOut.close();  
-
-def progressBar(toolbar_width = 40):
-  '''
-  '''
-  # setup toolbar
-  sys.stdout.write("[%s]" % (" " * toolbar_width))
-  sys.stdout.flush()
-  sys.stdout.write("\b" * (toolbar_width + 1)) # return to start of line, after '[' 
-  
-
-'''
-Main script
-'''
-
-# for now setting the format by hand
-format = "xlsx" 
-
-service = OpenbisServiceFacadeFactory.tryCreate("openBISUsername", "password", "https://my-openbis.bsse.ethz.ch:8443", 5000)
-
-foundSamples = getNonbilledSamples("ILLUMINA_SEQUENCING")
-groupByPiDict = groupByPi(foundSamples)
-
-print "Found " + str(len(groupByPiDict)) + " Principal Investigators"
-
-progressBar(len(groupByPiDict))
-
-for principalInvestigator in groupByPiDict:
-  groupedByPersonDict = groupByContactPerson(groupByPiDict[principalInvestigator])
-  # create an Excel file for each PI
-  writeExcel(principalInvestigator, groupedByPersonDict, format)
-  sys.stdout.write("*")
-  sys.stdout.flush()
-sys.stdout.write("\n")
-
-service.logout()
-print("DONE")
diff --git a/deep_sequencing_unit/source/Jython/create_QGF_Invoices.sh b/deep_sequencing_unit/source/Jython/create_QGF_Invoices.sh
deleted file mode 100755
index 28e4b125993..00000000000
--- a/deep_sequencing_unit/source/Jython/create_QGF_Invoices.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-LIB=lib/
-CLASSPATH=lib/
-cd lib
-java -cp dss_client.jar:jython.jar:stream-supporting-httpinvoker.jar:spring.jar:commons-logging.jar:commons-httpclient.jar:commons-codec.jar:commons-lang.jar:log5j.jar:poi-3.7-20101029.jar:poi-ooxml-3.7-20101029.jar:poi-ooxml-schemas-3.7-20101029.jar org.python.util.jython ../create_QGF_Invoices.py
diff --git a/deep_sequencing_unit/source/Jython/create_QGF_Invoices_simplified.py b/deep_sequencing_unit/source/Jython/create_QGF_Invoices_simplified.py
deleted file mode 100644
index 125add0755a..00000000000
--- a/deep_sequencing_unit/source/Jython/create_QGF_Invoices_simplified.py
+++ /dev/null
@@ -1,629 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Copyright 2016 ETH Zuerich, CISD
-  
-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.
-
-@author Manuel Kohler
-
-@description:
-Creates Excel-based invoices for the Quantitative Genomics Facility,
-D-BSSE, ETH Zurich
-
-@attention:
-Runs under Jython
-
-@note:
-
-'''
-
-import os
-import re
-import sys
-import logging
-import collections
-from datetime import *
-from ConfigParser import SafeConfigParser
-from optparse import OptionParser
-from java.io import FileOutputStream
-from org.apache.poi.hssf.usermodel import HSSFWorkbook
-from org.apache.poi.hssf.usermodel import HeaderFooter
-from org.apache.poi.poifs.filesystem import POIFSFileSystem
-from org.apache.poi.xssf.usermodel import XSSFWorkbook
-from ch.systemsx.cisd.openbis.dss.client.api.v1 import OpenbisServiceFacadeFactory
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-from java.util import EnumSet
-from java.util import TreeMap
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SampleFetchOption
-
-excelFormats = {"xls": "HSSFWorkbook()" , "xlsx": "XSSFWorkbook()"}
-
-column_headers_tuple = (("EXTERNAL_SAMPLE_NAME", "Sample Name"),
-                    ("BARCODE", "Index"),
-                    ("INDEX2", "Index2"),
-                    ("PREPARED_BY", "Prepared by"),
-                    ("KIT", "Kit"),
-                    ("QC_AT_DBSSE", "QC at D-BSSE"),
-                    ("CONTACT_PERSON_NAME", "Contact Person"),
-                    ("NOTES", "Notes"),
-                    ("BIOLOGICAL_SAMPLE_ARRIVED", "Received")
-                    )
-
-# Keep the order of the tuples
-column_headers_dict = collections.OrderedDict(column_headers_tuple)
- 
-class uniqueRow():
-    '''
-    Little helper class which ensures the unique use of a row 
-    '''
-    def __init__(self):
-        self.row = -1
-    
-    def getNextRow (self):
-        self.row += 1
-        return self.row
-    
-    def setRow(self, rowNumber):
-        self.row = rowNumber
-        return self.row
-
-class uniqueColumn():
-    '''
-    Little helper class which ensures the unique use of a column 
-    '''
-    def __init__(self):
-        self.column = -1
-    
-    def getCurrentColumn(self):
-        return self.column
-    
-    def getNextColumn (self):
-        self.column += 1
-        return self.column
-    
-    def setColumn(self, columnNumber):
-        self.column = columnNumber
-        return self.column
-
-def getDate():
-    d = datetime.now()
-    return d.strftime("%A, %d-%B-%Y")
-
-
-def setFont(wb, configMap, fontSize=10, boldness=False, underline=False):
-    font = wb.createFont()
-    font.setFontHeightInPoints(fontSize)
-    font.setFontName(configMap["defaultFonts"])
-    font.setItalic(False)
-    font.setStrikeout(False)
-    font.setBold(boldness)
-    if underline:
-        font.setUnderline(font.U_SINGLE);
-    # Fonts are set into a style so create a new one to use.
-    style = wb.createCellStyle()
-    style.setFont(font)
-    return style
-
-
-def getVocabulary(service, vocabularyCode):
-    ''' Returns the vocabulary term and vocabulary label of a vocabulary specified by the parameter
-    vocabularyCode in a map'''
-    
-    vocabularies = service.listVocabularies()
-    vocabularyMap = {}
-    for vocabulary in vocabularies:
-        if (vocabulary.getCode() == vocabularyCode):
-            terms = vocabulary.getTerms()
-    for term in terms:
-        vocabularyMap[term.getCode()] = term.getLabel()
-    return vocabularyMap
-
-
-def identify_sequencer(sequencer_code):
-    sequencer_map = {"M": "MiSeq", "N": "NextSeq"}
-    if (sequencer_code[0] in sequencer_map):
-        return sequencer_map[sequencer_code[0]]
-    else:
-        return "HiSeq"
-    
-
-def merge_two_dicts(x, y):
-    '''Given two dicts, merge them into a new dict as a shallow copy.'''
-    z = x.copy()
-    z.update(y)
-    return z
-
-
-def camel_case_string(string):
-    full_name = ""
-    for split in string.split("_"):
-        full_name += split[0].upper() + split[1:] + " "
-    return full_name.strip()
-    
-
-def writeHeader(sheet, myRows, wb, configMap, piName, piSpace):
-  # Write header
-  row = sheet.createRow(myRows.getNextRow())
-  row.createCell(0).setCellValue(configMap["facilityName"] + ", " + configMap["facilityInstitution"])
-  row.getCell(0).setCellStyle(setFont(wb, configMap, 10, True))
-  row1 = sheet.createRow(myRows.getNextRow())
-  row1.createCell(0).setCellValue(getDate())
-  row1.getCell(0).setCellStyle(setFont(wb, configMap, 10, True))
-  
-  createRow(configMap, wb, sheet, myRows, "Principal Investigator", camel_case_string(piName), 0, 10, True, columnspace=1)
-  createRow(configMap, wb, sheet, myRows,"Data Space", piSpace, 0, 10, True, columnspace=1)
-  createRow(configMap, wb, sheet, myRows)
-  createRow(configMap, wb, sheet, myRows,"Samples", "", 0, 10, True, True)
-
-
-def createRow(configMap, wb, sheet, myRows, key="", value="", rowNumber=0, fontSize=10, boldness=False, underline=False, columnspace=0):
-    if rowNumber == 0:
-      row = sheet.createRow(myRows.getNextRow())
-    else:
-      row = rowNumber
-    row.createCell(0).setCellValue(key)
-    row.createCell(1+columnspace).setCellValue(value)
-    row.getCell(0).setCellStyle(setFont(wb, configMap, fontSize, boldness, underline))
-    row.getCell(1+columnspace).setCellStyle(setFont(wb, configMap, fontSize, boldness, underline))
-    return row
-
-
-def writeXLSHeader (configMap, service, sheet):
-    header = sheet.getHeader()
-    header.setCenter(configMap["facilityName"] + "\n" + datetime.now().strftime("%d-%B-%Y"))
-
-
-def writeXLSFooter(service, sheet):
-    footer = sheet.getFooter()
-    footer.setCenter( "Page " + HeaderFooter.page() + " of " + HeaderFooter.numPages() )
-    #footer.setRight("generated on " + datetime.now().strftime("%H:%M - %d.%m.%Y"))
-
-
-def write_flowcell_details(configMap, flowCellProperties, myRows, sequencerVocabulary, runModeVocabulary, flowcell, wb, sheet, createRow):
-    createRow(configMap, wb, sheet, myRows)
-    createRow(configMap, wb, sheet, myRows)
-    createRow(configMap, wb, sheet, myRows)
-    createRow(configMap, wb, sheet, myRows)
-    createRow(configMap, wb, sheet, myRows, "Flow Cell Details", "", 0, 14, columnspace=1)
-    createRow(configMap, wb, sheet, myRows, "Flow Cell", flowcell, columnspace=1)
-    for property in flowCellProperties:
-        if (property == "SEQUENCER"):
-            val = sequencerVocabulary[flowCellProperties[property]]
-        else:
-            val = flowCellProperties[property]
-        if (property == "RUN_MODE"):
-            val = runModeVocabulary[flowCellProperties[property]]
-        else:
-            val = flowCellProperties[property]
-        createRow(configMap, wb, sheet, myRows, property, val, columnspace=1)
-    
-    createRow(configMap, wb, sheet, myRows)
-
-
-
-def write_samples(configMap, myRows, wb, sheet, setFont, sample, sampleValues, working_column_headers_dict, lane, write_lane=False):
-    
-    singleSampleColumns = uniqueColumn()
-    rowN = sheet.createRow(myRows.getNextRow())
-
-    if write_lane:
-        rowN.createCell(singleSampleColumns.getNextColumn()).setCellValue(str(sampleValues['LANE']))
-        rowN.getCell(singleSampleColumns.getCurrentColumn()).setCellStyle(setFont(wb, configMap, 10))   
-        rowN.createCell(singleSampleColumns.getNextColumn()).setCellValue(configMap['sampleCodePrefix'] + sample.split("_")[1])
-    else:
-        rowN.createCell(singleSampleColumns.getNextColumn()).setCellValue(configMap['sampleCodePrefix'] + sample)
-    
-    rowN.getCell(singleSampleColumns.getCurrentColumn()).setCellStyle(setFont(wb, configMap, 10))
-    for code, label in working_column_headers_dict.iteritems():
-        if (code == 'BIOLOGICAL_SAMPLE_ARRIVED'):
-            try:
-                value = sampleValues[code].split(" ")[0]
-            except:
-                value = ""
-        else:
-            try:
-                value = sampleValues[code]
-            except:
-                value = ""
-        rowN.createCell(singleSampleColumns.getNextColumn()).setCellValue(value)
-        rowN.getCell(singleSampleColumns.getCurrentColumn()).setCellStyle(setFont(wb, configMap, 10))
-    
-    return value
-
-
-def filter_on_nonexisting_columns(regular_samples, check_empty_columns_dict):
-    for key, value_dict in sorted(regular_samples.iteritems()):
-        for code, count in check_empty_columns_dict.iteritems():
-            if code in value_dict:
-                check_empty_columns_dict[code] = check_empty_columns_dict[code] + 1
-    
-    return check_empty_columns_dict
-
-
-
-def write_intermediate_section(configMap, flowCellProperties, myRows, wb, sheet):
-    createRow(configMap, wb, sheet, myRows)
-    createRow(configMap, wb, sheet, myRows)
-    createRow(configMap, wb, sheet, myRows)
-    sequencer = identify_sequencer(flowCellProperties["SEQUENCER"])
-    createRow(configMap, wb, sheet, myRows, key=sequencer + " sequencing", value="", rowNumber=0, fontSize=10, boldness=True, underline=True, columnspace=0)
-    createRow(configMap, wb, sheet, myRows, "Run Folder Name", flowCellProperties["RUN_NAME_FOLDER"], 0, 10, True)
-    createRow(configMap, wb, sheet, myRows)
-    createRow(configMap, wb, sheet, myRows)
-
-
-
-def write_sample_column_header(configMap, working_column_headers_dict, myRows, wb, sheet, write_lane=False):
-    myColumns = uniqueColumn()
-    sampleHeader = sheet.createRow(myRows.getNextRow())
-    
-    if write_lane:
-        sampleHeader.createCell(myColumns.getNextColumn()).setCellValue("Flowcell:Lane")
-        sampleHeader.getCell(myColumns.getCurrentColumn()).setCellStyle(setFont(wb, configMap, 10, True))
-    
-    sampleHeader.createCell(myColumns.getNextColumn()).setCellValue("Sample Code")
-    sampleHeader.getCell(myColumns.getCurrentColumn()).setCellStyle(setFont(wb, configMap, 10, True))
-    for code, label in working_column_headers_dict.iteritems():
-        sampleHeader.createCell(myColumns.getNextColumn()).setCellValue(label)
-        sampleHeader.getCell(myColumns.getCurrentColumn()).setCellStyle(setFont(wb, configMap, 10, True))
-    
-
-
-def writeExcel(myoptions, configMap, service, piName, laneDict, sampleDict, piDict,
-               piSpace, flowCellProperties, flowcellName, logger,format="xls"):
-    '''
-    Writes out all data to an Excel file
-    '''
-    accumulated_pi_dict = {}
-    pool_samples = {}
-    regular_samples = {}
-    check_empty_columns_dict = {"INDEX2": 0, "NOTES": 0, "BIOLOGICAL_SAMPLE_ARRIVED": 0}
-    working_column_headers_dict = column_headers_dict.copy()
-    
-    myRows = uniqueRow()
-    sequencerVocabulary = getVocabulary(service, "SEQUENCER")
-    runModeVocabulary = getVocabulary(service, "RUN_MODE_VOCABULARY")
-    setOfFlowcells = set ()
-    try:
-        # expecting the old running folder name
-        runDate, seqId, runningNumber, flowcell = flowCellProperties["RUN_NAME_FOLDER"].split("_")
-        flowcell = flowcell[1:]
-    except:
-        flowcell = flowcellName
-    
-    wb = (eval(excelFormats[format]))
-    createHelper = wb.getCreationHelper()
-    sheet = wb.createSheet(configMap["facilityNameShort"])
-    # 4/3 = 133 percent magnification when opening the workbook
-    sheet.setZoom(4, 3)
-    
-    writeHeader(sheet, myRows, wb, configMap, piName, piSpace)
-    
-    listofLanes = piDict[piName]
-    listofLanes.sort()
-    logger.debug(listofLanes)
-       
-    for lane in listofLanes:
-        for sample_code in sampleDict[lane]:
-            sampleValues = sampleDict[lane][sample_code]
-
-            # if there is a shared lane do not mix them 
-            if (sanitizeString(sampleValues['PRINCIPAL_INVESTIGATOR_NAME']) != sanitizeString(piName)):
-                continue
-            
-            # Find the Pools:
-            try:
-                if sampleValues['BARCODE'] != 'NOINDEX':
-                    regular_samples[sample_code] = sampleValues
-                else:
-                    pool_samples[lane + "_" + sample_code] = sampleValues
-            except:
-                if sampleValues.has_key('10X_INDEX_SET'):
-                    regular_samples[sample_code] = sampleValues
-                elif int(sampleValues['NCBI_ORGANISM_TAXONOMY']) != 10847:
-                    pool_samples[lane + "_" + sample_code] = sampleValues
-                else:
-                    regular_samples[sample_code] = sampleValues
-
-    logger.debug("Found {0} samples.".format(len(regular_samples)))
-    logger.debug("Found {0} pools.".format(len(pool_samples)))
-
-    merged_regular_pool =  merge_two_dicts(regular_samples, pool_samples)
-    check_empty_columns_dict = filter_on_nonexisting_columns(merged_regular_pool, check_empty_columns_dict)    
-    
-    for key, values in check_empty_columns_dict.iteritems():        
-        if values == 0:
-            logger.debug("Popped! " + key)
-            working_column_headers_dict.pop(key)
-            
-    logger.debug("check_empty_columns_dict: {0}".format(check_empty_columns_dict))
-    
-    write_sample_column_header(configMap, working_column_headers_dict, myRows, wb, sheet)
-    for reg_sample in sorted(regular_samples):     
-        value = write_samples(configMap, myRows, wb, sheet, setFont, reg_sample, regular_samples[reg_sample], working_column_headers_dict, lane)
-  
-    write_intermediate_section(configMap, flowCellProperties, myRows, wb, sheet)   
-    
-    write_sample_column_header(configMap, working_column_headers_dict, myRows, wb, sheet, write_lane=True)            
-    for pool in sorted(pool_samples):
-        value = write_samples(configMap, myRows, wb, sheet, setFont, pool, pool_samples[pool], working_column_headers_dict, lane, write_lane=True)       
-    
-    write_flowcell_details(configMap, flowCellProperties, myRows, sequencerVocabulary, runModeVocabulary, flowcell, wb, sheet, createRow)
-    
-    # adjust width
-    for i in range(0, 20):
-        sheet.autoSizeColumn(i)
-    
-    # set layout to landscape
-    #sheet.getPrintSetup().setLandscape(True)
-    
-    #left_margin_inches = sheet.getMargin(sheet.LeftMargin)
-    #right_margin_inches = sheet.getMargin(sheet.RightMargin)
-    
-    sheet.setMargin(sheet.LeftMargin, 0.5)
-    sheet.setMargin(sheet.RightMargin, 0.5)
-    
-    writeXLSFooter(service, sheet)
-    writeXLSHeader(configMap, service, sheet)
-    
-    # sanitizeString(piName) + datetime.now().strftime("_%d_%m_%Y.") + format
-    #  Write the output to a file
-    fileName = myoptions.outdir + configMap["facilityNameShort"] + "_" + flowcell + "_" + \
-              sanitizeString(piName) + "." + format
-    fileOut = FileOutputStream(fileName)
-    # need this print for use as an openBIS webapp
-    print fileName
-    
-    wb.write(fileOut);
-    fileOut.close();
-
-
-def sanitizeString(myString):
-    myString = myString.replace(u'ä', 'ae')
-    myString = myString.replace(u'ü', 'ue')
-    myString = myString.replace(u'ö', 'oe')
-    return re.sub('[^A-Za-z0-9]+', '_', myString.strip()).lower()
-
-
-def setUpLogger(logPath, logLevel=logging.INFO):
-    logFileName = 'createInvoices'
-    d = datetime.now()
-    logFileName = logFileName + '_' + d.strftime('%Y-%m-%d_%H_%M_%S') + '.log'
-    logging.basicConfig(filename=logPath + logFileName,
-                      format='%(asctime)s [%(levelname)s] %(message)s', level=logLevel)
-    logger = logging.getLogger(logFileName)
-    return logger
-
-
-def parseConfigurationFile(propertyFile='etc/service.properties'):
-    '''
-    Parses the given config files and returns the values
-    '''
-    config = SafeConfigParser()
-    config.read(propertyFile)
-    config.sections()
-    return config
-
-def readConfig(logger):
-    GENERAL = 'GENERAL'
-    OPENBIS = 'OPENBIS'
-    EXCEL = 'EXCEL'
-    
-    logger.info('Reading config file')
-    configMap = {}
-    
-    configParameters = parseConfigurationFile()
-    configMap['facilityName'] = configParameters.get(GENERAL, 'facilityName')
-    configMap['facilityNameShort'] = configParameters.get(GENERAL, 'facilityNameShort')
-    configMap['facilityInstitution'] = configParameters.get(GENERAL, 'facilityInstitution')
-    configMap['mailList'] = configParameters.get(GENERAL, 'mailList')
-    configMap['mailFrom'] = configParameters.get(GENERAL, 'mailFrom')
-    configMap['smptHost'] = configParameters.get(GENERAL, 'smptHost')
-    configMap['separator'] = configParameters.get(GENERAL, 'separator')
-    configMap['indexSeparator'] = configParameters.get(GENERAL, 'indexSeparator')
-    
-    configMap['openbisUserName'] = configParameters.get(OPENBIS, 'openbisUserName')
-    configMap['openbisPassword'] = configParameters.get(OPENBIS, 'openbisPassword', raw=True)
-    configMap['openbisServer'] = configParameters.get(OPENBIS, 'openbisServer')
-    configMap['connectionTimeout'] = configParameters.getint(OPENBIS, 'connectionTimeout')
-    configMap['pIPropertyName'] = configParameters.get(OPENBIS, 'pIPropertyName')
-    configMap['sampleCodePrefix'] = configParameters.get(OPENBIS, 'sampleCodePrefix')
-    
-    configMap['defaultFonts'] = configParameters.get(EXCEL, 'defaultFonts')
-    
-    return configMap
-
-def login(logger, configMap):
-    logger.info('Logging into ' + configMap['openbisServer'])
-    service = OpenbisServiceFacadeFactory.tryCreate(configMap['openbisUserName'],
-                                                    configMap['openbisPassword'],
-                                                    configMap['openbisServer'],
-                                                    configMap['connectionTimeout'])
-    return service
-
-def parseOptions(logger):
-    logger.info('Parsing command line parameters')
-    parser = OptionParser(version='%prog 1.0')
-    parser.add_option('-f', '--flowcell',
-                    dest='flowcell',
-                    help='The flowcell which is used to create the SampleSheet.csv',
-                    metavar='<flowcell>')
-    parser.add_option('-o', '--outdir',
-                    dest='outdir',
-                    default='./',
-                    help='Specify the ouput directory. Default: ./' ,
-                    metavar='<outdir>')
-    parser.add_option('-d', '--debug',
-                    dest='debug',
-                    default=False,
-                    action='store_true',
-                    help='Verbose debug logging. Default: False')
-    
-    (options, args) = parser.parse_args()
-    
-    if options.outdir[-1] <> '/':
-        options.outdir = options.outdir + '/'
-    
-    if options.flowcell is None:
-        parser.print_help()
-        exit(-1)
-    return options
-
-
-def getFLowcellData(service, configMap, flowcell, logger):
-
-    laneCodeList = []
-    fetchOptions = EnumSet.of(SampleFetchOption.ANCESTORS, SampleFetchOption.PROPERTIES)
-    
-    sc = SearchCriteria();
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowcell));  
-    fcList = service.searchForSamples(sc, fetchOptions)
-    if not fcList:
-        print("No flowcell found with code: " + flowcell)
-        sys.exit()
-    
-    scContained = SearchCriteria()
-    scContained.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowcell));
-    
-    scContainedMain = SearchCriteria();
-    scContainedMain.addSubCriteria(SearchSubCriteria.createSampleContainerCriteria(scContained))
-    
-    containedSamples = service.searchForSamples(scContainedMain)
-    
-    for lane in containedSamples:
-        laneCode = lane.getCode()
-        laneCodeList.append(laneCode)
-        logger.debug("Found lane " + laneCode + " in flow cell")
-    logger.info("All lanes found: " + str(laneCodeList))
-    
-    for p in fcList:
-        flowCellProperties = p.getProperties()
-      
-    numberOfLanes = int(flowCellProperties['LANECOUNT'])
-    
-    foundLaneNumber = containedSamples.size()
-    if (foundLaneNumber > numberOfLanes):
-        numberOfLanes = foundLaneNumber
-        logger.info("Found " + str(foundLaneNumber) + " lanes! This differs from the lane number " +
-             "registered in the flow cell. --> Lanes got splitted!")
-    
-    laneDict = {}
-    sampleDict = {}
-    piDict = {}
-    spaceDict = {}
-    invoiceDict = {}
-    
-    for lane in laneCodeList:
-        myLane = lane
-        laneSc = SearchCriteria();
-        laneSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, myLane));
-        laneList = service.searchForSamples(laneSc, fetchOptions)
-        logger.debug("Length of laneList for " + myLane + " is " + str(len(laneList)))
-        
-        for l in laneList:
-            laneProperties = l.getProperties()
-            laneDict[lane] = laneProperties
-            laneParents = l.getParents()
-            
-            s = {}
-            for samples in laneParents:
-                sampleCode = samples.getCode()
-                sampleProperties = samples.getProperties()
-                
-                sample_properties_dict={}
-                for key, value in sampleProperties.iteritems():
-                    sample_properties_dict[key] = value
-                
-                
-                sample_properties_dict["LANE"] = lane
-                s[sampleCode.split("-")[-1]] = sample_properties_dict
-                sampleDict[lane] = s
-                pi = sanitizeString(sample_properties_dict[configMap["pIPropertyName"]])
-                try:
-                    invoiceProperty = sample_properties_dict['INVOICE']
-                except:
-                    # Can happen when sample was registered via Excel, the boolean value is not set in the DB
-                    logger.info("Sample {0} has no property 'Invoice'. Setting it to false".format(sampleCode))
-                    invoiceProperty = 'false'
-                # if sample got created via Excel upload, the property could be not set, which is represented by None
-                if (invoiceProperty is None):
-                    invoiceProperty = 'false'
-                sentInvoice = {'true': True, 'false': False}.get(invoiceProperty.lower())
-                logger.debug("PI for " + sampleCode + ": " + pi)
-                logger.debug("Invoice sent for " + sampleCode + ": " + str(sentInvoice))
-                
-                if piDict.has_key(pi):
-                    piDict[pi].append(lane)
-                    # Making the lanes unique
-                    piDict[pi] = list(set(piDict[pi]))
-                else:
-                    piDict[pi] = [lane]
-                    spaceDict[pi] = l.getSpaceCode()
-                
-                if not sentInvoice:
-                    if invoiceDict.has_key(pi):
-                        invoiceDict[pi].append(lane)
-                        # Making the lanes unique
-                        invoiceDict[pi] = list(set(invoiceDict[pi]))
-                    else:
-                        invoiceDict[pi] = [lane]
-                
-    
-    logger.debug(spaceDict)
-    
-    logger.info("Found the following PIs on the lanes: ")
-    logger.info(piDict)
-    logger.info("Found the following PIs with non-invoiced samples : ")
-    logger.info(invoiceDict)
-    
-    # simply sort the hashmap
-    treeMap = TreeMap (flowCellProperties)
-    return laneDict, sampleDict, piDict, treeMap, spaceDict, invoiceDict
-
-
-'''
-Main script
-'''
-
-def main():
-
-    # for now setting the format by hand
-    format = "xlsx"
-    magicString = "@Invoice@"
-    
-    logger = setUpLogger('log/')
-    logger.info('Started Creation Invoices...')
-    
-    myoptions = parseOptions(logger)
-    configMap = readConfig(logger)
-    if myoptions.debug:
-        logger.setLevel(logging.DEBUG)
-    
-    service = login(logger, configMap)
-    flowcellName = myoptions.flowcell
-    laneDict, sampleDict, piDict, flowCellProperties, spaceDict, invoiceDict = getFLowcellData(service, configMap, flowcellName, logger)
-    
-    for piName in piDict:
-        # create an Excel file for each PI
-        writeExcel(myoptions, configMap, service, piName, laneDict, sampleDict,
-                 piDict, spaceDict[piName], flowCellProperties,
-                 flowcellName, logger, format)
-    
-    for invoicePi in invoiceDict:
-        print (magicString + invoicePi)
-    
-    service.logout()
-
-if __name__ == "__main__":
-    main()
diff --git a/deep_sequencing_unit/source/Jython/duplicateBarcodeChecker.py b/deep_sequencing_unit/source/Jython/duplicateBarcodeChecker.py
deleted file mode 100644
index e39e569845f..00000000000
--- a/deep_sequencing_unit/source/Jython/duplicateBarcodeChecker.py
+++ /dev/null
@@ -1,104 +0,0 @@
-import smtplib
-import string
-import copy
- 
-def sendMail(registratorEmail, indexStrings='', sampleIdentifier='', additionalText=''):
-  '''
-  Send out an email to the specified recipients
-  '''
-  COMMASPACE = ", "
-  
-  loe = ["manuel.kohler@bsse.ethz.ch"]
-  if registratorEmail and registratorEmail not in loe:
-    loe.append(registratorEmail)
-  
-  TO = COMMASPACE.join(loe)
-  SUBJECT = "WARNING! For pooled sample " + sampleIdentifier
-  FROM = "qgf@openbis-dsu.ethz.ch"
-  HOST = "smtp0.ethz.ch"
-  text = "Sample: "+ sampleIdentifier + "\nBarcode: " + indexStrings + "\n" + additionalText
-  BODY = string.join((
-        "From: %s" % FROM,
-        "To: %s" % TO,
-        "Subject: %s" % SUBJECT ,
-        "",
-        text
-        ), "\r\n")
-  server = smtplib.SMTP(HOST)
-  server.sendmail(FROM, [TO], BODY)
-  server.quit()
-
-def checkDuplicateBarcodes():
-  '''
-  'parents' are a HashSet of SamplePropertyPE
-  ''' 
-  VOCABULARY_INDEX1 = 'BARCODE'
-  VOCABULARY_INDEX2 = 'INDEX2'
-
-  SUCCESS_MESSAGE="OK"
-  registratorEmail = entity.entityPE().registrator.email
-  poolName = entity.entityPE().sampleIdentifier
-  
-  listofIndices = []
-  listofIndices2 = []
-  returnString = " "
-
-  for e in entity.entityPE().parents:
-    for s in e.properties:
-
-      if s.entityTypePropertyType.propertyType.simpleCode == VOCABULARY_INDEX1:
-        index = s.getVocabularyTerm().code
-        listofIndices.append(index)
-
-      if s.entityTypePropertyType.propertyType.simpleCode == VOCABULARY_INDEX2:
-        index = s.getVocabularyTerm().code
-        listofIndices2.append(index)
-
-    sampleIdentifier = e.sampleIdentifier
-
-  # if dual-indexed
-  if listofIndices2:
-    dualIndexList = []
-    if len(listofIndices) != len(listofIndices2):
-      indices = "\nIndex1 :" + str(listofIndices) + "\nIndex2: " + str(listofIndices2) 
-      returnString = "Dual indexing assignment is not complete for pool sample " + str(poolName)
-      sendMail(registratorEmail, indices , str(poolName), returnString)
-      return returnString
-    
-    # build up a list of dual indices
-    for l in range(len(listofIndices)):
-      try:
-        dualIndexList.insert(l, [listofIndices[l], listofIndices2[l]])
-      except:
-        pass
-     
-    # copy, needed by the for loop
-    dualIndexListOrig = copy.deepcopy(dualIndexList)
-
-    for dualIndex in dualIndexListOrig:
-      dualIndexList.remove(dualIndex)
-      if dualIndex in dualIndexList:
-        returnString = "WARNING! You assigned duplicate indices \n " + str(dualIndex) + \
-                        " in the dual-indexed pooled sample!"
-        sendMail(registratorEmail, str(dualIndex), str(poolName), returnString)
-        return returnString
-      else:
-        returnString = SUCCESS_MESSAGE
-        return returnString  
-
-  # else single index
-  else:
-    uniqueList=list(set(listofIndices))
-    if len(listofIndices) != len(uniqueList):
-      for index in uniqueList:
-        listofIndices.remove(index)
-      returnString = "WARNING! You assigned duplicate indices \n " + str(listofIndices) + \
-                        " in the single-indexed pooled sample!"
-      sendMail(registratorEmail, str(listofIndices), str(poolName), returnString)
-    else:
-      returnString = SUCCESS_MESSAGE
-    return returnString
-
-def calculate(): 
-    """Main script function. The result will be used as the value of appropriate dynamic property."""
-    return checkDuplicateBarcodes()
diff --git a/deep_sequencing_unit/source/Python/bam2wig.py b/deep_sequencing_unit/source/Python/bam2wig.py
deleted file mode 100644
index be4d750b593..00000000000
--- a/deep_sequencing_unit/source/Python/bam2wig.py
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/env python
-'''
-Creates a Wiggle file out of a BAM file
-
-Prerequisites:
-- BAM index file, create with 'samtools index <bamfile.bam>'
-- BAM file must be sorted, sort with 'samtools sort <bamfile.bam> bamfile.sorted'
-
-Documentation says: 'If an index for a BAM file exists (.bai), it will be opened automatically.
-Without an index random access to reads via fetch() and pileup() is disabled.'
-
-@author: Manuel Kohler
-@copyright: ETH Zurich
-@precondition:  Working pysam egg
-'''
-
-import sys, pysam
-
-#def bam2wig():
-#  '''Usage: python bam2wig <bamfile>'''  
-#  
-#  if sys.argv[1] == '':
-#    print(my_function.__doc__)
-#    sys.exit(1)
-#  else:
-bamfile_name = sys.argv[1]
-#  
-try:
-    with pysam.Samfile(bamfile_name, 'rb') as bamfile:
-        wigfile_name = bamfile_name.replace('.bam', '.wig')
-        wigfile = open(wigfile_name, 'w')
-
-        header_full = 'track type=wiggle_0 name=' + wigfile_name
-        variable_wig = 'variableStep chrom='
-
-        print >> wigfile, header_full
-        print ('Number of genes: ') + str(bamfile.nreferences)
-        for gene_names in range(bamfile.nreferences):
-          try:
-            print (bamfile.getrname(gene_names))
-            '''UCSC conformity'''
-            if bamfile.getrname(gene_names) == 'dmel_mitochondrion_genome':
-              print >> wigfile, variable_wig + "M"
-            else:
-              print >> wigfile, variable_wig + bamfile.getrname(gene_names)
-            for pile in bamfile.pileup(bamfile.getrname(gene_names)):
-              print >> wigfile, pile.pos + 1, pile.n
-          except ValueError as valerr:
-            print ('Value error ' + str(valerr))
-except IOError as err:
-    print (bam_file + 'not found! ' + str(err))
diff --git a/deep_sequencing_unit/source/Python/calculateCRC32.py b/deep_sequencing_unit/source/Python/calculateCRC32.py
deleted file mode 100644
index a60eefe6b6e..00000000000
--- a/deep_sequencing_unit/source/Python/calculateCRC32.py
+++ /dev/null
@@ -1,56 +0,0 @@
-#! /usr/bin/env python
-'''
-@copyright:
-Copyright 2012 ETH Zuerich, CISD
- 
- @license:
- 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.
-
-   @author:
-   Manuel Kohler
-
-   @description:
-   Calulates the crc32 checksum of a file and returns it in a hexadecimal number
-'''
-
-import zlib
-from optparse import OptionParser
-
-
-def parseOptions():
-    parser = OptionParser(version='%prog 1.0')
-    parser.add_option('-f', '--file', dest='file', 
-    help='File for calculation of crc32 checksum',
-    metavar='<file>') 
-
-    (options, args) = parser.parse_args()
-    if options.file is None:
-      parser.print_help()
-      exit(-1)
-    return options
-
-
-def crc(fileName):
-  prev = 0
-  for eachLine in open(fileName,"rb"):
-    prev = zlib.crc32(eachLine, prev)
-  return "%X"%(prev & 0xFFFFFFFF)
-
-def main():
-
-  myoptions = parseOptions()
-  value = crc(myoptions.file)
-  print(value)
-
-if __name__ == "__main__":
-  main()
diff --git a/deep_sequencing_unit/source/Python/concatenatePdfs.py b/deep_sequencing_unit/source/Python/concatenatePdfs.py
deleted file mode 100644
index 715ca5e670e..00000000000
--- a/deep_sequencing_unit/source/Python/concatenatePdfs.py
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/python
-'''
-Concatenates several pdfs in a given directory depending
-on the lane number in the file name. 
-This number is defined as the last number in the file name
-separated by '_'
-The concatenated file will be named:
-flow_cell + '_' + lane + '_quality.pdf'
-
-@author: Manuel Kohler
-@copyright: ETH Zurich
-@precondition: Working pdftk installation
-'''
-
-import os
-import fnmatch
-import subprocess
-from optparse import OptionParser
-
-PDFTK = '/usr/local/dsu/pdftk-1.41/pdftk/pdftk'
-LANES = 8
-
-class pdfList(list):
-  def __init__ (self, lane, pdfs=[]):
-    list.__init__([])
-    self.lane = lane
-    self.extend(pdfs)
-
-def options():
-  parser = OptionParser()
-  parser.add_option("-p", "--path", dest="path", action="store", type="string",
-                  help="Path of the fastq files", metavar="PATH")
-  (options, args) = parser.parse_args()
-  return (options.path)
-
-def concatenatePdfs(file_list, lane):
-  # take the first list element as a reference for the final pdf name
-  flow_cell = '_'.join(file_list[0].split('_', 4)[0:4])
-  print(flow_cell)
-  new_name = flow_cell + '_' + lane + '_quality.pdf'
-  args = [PDFTK, 'cat', 'output', new_name]
-  [args.insert(1, i) for i in file_list]
-  a = subprocess.Popen(args)
-  a.wait()
-  [os.remove(file) for file in file_list]
-
-def createPdfList (lane):
-  path = options()
-  # create pdf list depending on lane
-  ll = 'lane' + lane
-  vars()[ll] = pdfList(lane)
-
-  for file in os.listdir(path):
-    if fnmatch.fnmatch(file, '*.pdf'):
-      for l in (file.split('_')[4]):
-          if (l == lane):
-            (vars()[ll]).append(file)
-  vars()[ll].sort()
-  return (vars()[ll])
-
-def __main__():
-  list_of_pdfs = []
-  for i in range(1, LANES + 1):
-    l = createPdfList(str(i))
-    list_of_pdfs.append(l)
-  
-  [concatenatePdfs(list_of_pdfs[i], list_of_pdfs[i].lane) for i in range(len(list_of_pdfs))]    
-  print("DONE...")
-
-__main__()
diff --git a/deep_sequencing_unit/source/Python/fastq_quality.py b/deep_sequencing_unit/source/Python/fastq_quality.py
deleted file mode 100755
index 80064b84e5d..00000000000
--- a/deep_sequencing_unit/source/Python/fastq_quality.py
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/links/application/dsu/Python-3.2/python
-
-'''
-Docu
-'''
-
-import subprocess
-import shlex
-import os
-import fnmatch
-import concurrent.futures
-
-rscriptPath = '/links/application/dsu/R-scripts'
-pwd = os.getcwd()
-pattern = '*.fastq.gz'
-rscript = '/links/application/dsu/R-2.13.2/bin/Rscript'
-concatenationScript='/links/application/dsu/bin/concatenate_pdfs.py'
-maxConcurrentJobs=5
-
-def run_me(fastqFile):
-  (path, file) = os.path.split(fastqFile)
-  os.chdir(path)
-  args =  rscript + ' --vanilla ' + rscriptPath + '/' + 'fastq_quality.R ' + file
-  #print(args)
-  SplitArgs = shlex.split(args)
-  p = subprocess.Popen(SplitArgs)
-  p.wait()
-  #subprocess.Popen(concatenationScript)
-
-def findFiles (pattern):
-  matches = []
-  for root, dirnames, filenames in os.walk(pwd):
-    for filename in fnmatch.filter(filenames, pattern):
-        matches.append(os.path.join(root, filename))
-  return matches
-            
-def callR():
-  matchingFiles = findFiles(pattern)
-  with concurrent.futures.ThreadPoolExecutor(max_workers=maxConcurrentJobs) as executor:
-    out = [executor.submit(run_me, lane)
-                    for lane in matchingFiles]
-callR()
diff --git a/deep_sequencing_unit/source/Python/fastqc_plots.py b/deep_sequencing_unit/source/Python/fastqc_plots.py
deleted file mode 100755
index 693e00b2b64..00000000000
--- a/deep_sequencing_unit/source/Python/fastqc_plots.py
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/links/application/dsu/Python-3.2/python
-
-import subprocess
-import collections
-import os
-import fnmatch
-import concurrent.futures
-import logging
-from datetime import *
-
-fastqcBinary ='/links/application/dsu/FastQC/fastqc'
-outDir = '../fastqc'
-threads = '10'
-cmdLine = [fastqcBinary, '--outdir', outDir, '--quiet', '--casava', '--nogroup', '--threads', threads]
-
-pwd = os.getcwd()
-pattern = '*.fastq.gz'
-maxConcurrentJobs=5
-
-def setUpLogger(logPath):
-  d=datetime.now()
-  logFileName = '/fastqc_' + d.strftime("%Y-%m-%d_%H_%M_%S") + '.log'
-  logging.basicConfig(filename=logPath + logFileName, format='%(asctime)s %(message)s', level=logging.DEBUG)
-
-def run_me(path,files):
-  '''
-  Builds up the final command and runs it using the subprocess module 
-  '''
-  os.chdir(path)
-
-  filesToProcess = []
-  for file in files:
-   filesToProcess.append(os.path.join(path, file)) 
-  
-  logging.info('Processing '+ str(filesToProcess))
-  
-  p = subprocess.Popen(cmdLine + filesToProcess)
-  p.wait()
-
-def findPaths (pattern):
-  '''
-  Finds all files matching the given pattern and writes the result in a 
-  dictionary with the path as the key and the list of files as the value 
-  '''
-  fileDict = {}
-  for root, dirnames, filenames in os.walk(pwd):
-    for filename in fnmatch.filter(filenames, pattern):
-        if (root in fileDict):
-          fileDict[root].append(filename)
-        else:
-          fileDict[root] = [filename]
-  return fileDict
-            
-def callCommandLine():
-  '''
-  Calls a command line program with maxConcurrentJobs in parallel
-  '''
-  matchingPaths = findPaths(pattern)
-  for path in matchingPaths.items():
-    if (not os.path.isdir(outDir)):
-      os.makedirs(outDir)
-
-  with concurrent.futures.ThreadPoolExecutor(max_workers=maxConcurrentJobs) as executor:
-    out = [executor.submit(run_me, path, files)
-                    for path,files in matchingPaths.items()]
-
-callCommandLine()
diff --git a/deep_sequencing_unit/source/Python/filterOnQualityForFastqGzip.py b/deep_sequencing_unit/source/Python/filterOnQualityForFastqGzip.py
deleted file mode 100644
index 9c434a9bdcb..00000000000
--- a/deep_sequencing_unit/source/Python/filterOnQualityForFastqGzip.py
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/local/dsu/Python-3.2/python
-'''
-Usage: python filter_on_quality_for_gzip.py <fastqfile>o
-Reqires bcltofastq converted gzipped fastq file which are generated 
-by the Illumina pipeline Casava 1.8+
-  
-@author: Manuel Kohler
-@copyright: ETH Zurich
-@precondition: gzip
-'''
-
-import gzip 
-import sys
-import argparse
-
-
-def parseCommandLine():
-  parser = argparse.ArgumentParser(description='Counts the filtered and ' + 
-                                  'non-filtered read of a gzipped fastq file')
-  parser.add_argument('-i', '--input_file', dest='fastq_file', action='store',
-                   required=True, help='Which fastq.gz file you want to process?')  
-  parser.add_argument('-o', '--output', dest='output', action='store', default='fastq_stats',
-                  type=str, help='Output file name')
-  parser.add_argument('-f', '--format', dest='format', action='store', default='txt',
-                   type=str, choices=['txt', 'json', 'both'], help='Output format')
-
-  args = parser.parse_args()
-  return(args)
-
-line_number = 1
-new_line = 1
-is_filtered = 0
-
-def formatNumber(n):
-  return ('{:>20}'.format('{:,}'.format(n)))
-
-def calulatePercentage(v1, v2):
-  return round(100 * (v1 / (v1 + v2)), 2)
-
-args = parseCommandLine()
-
-with gzip.open(args.fastq_file, 'rb') as file:
-  for line in file:
-    if (line_number == new_line):
-      # fastq quadruples
-      new_line = line_number + 4
-      l = line.decode('utf8')
-      #print(l.split(':')[7]) 
-      if (l.split(':')[7] == 'Y'):
-        is_filtered += 1
-    line_number += 1
-
-unfiltered = ((line_number - 1) / 4) - is_filtered
-print('File: ' + args.fastq_file)
-print(str(formatNumber(int(unfiltered))) + ' number of non-filtered reads (GOOD)')
-print(str(formatNumber(is_filtered)) + ' number of filtered reads (BAD)')
-print(str(formatNumber(calulatePercentage(unfiltered, is_filtered))) + ' % of non-filtered reads (GOOD)')
-print(str(formatNumber(calulatePercentage(is_filtered, unfiltered))) + ' % of filtered reads (BAD)')
diff --git a/deep_sequencing_unit/source/Python/filter_on_quality_for_gzip.py b/deep_sequencing_unit/source/Python/filter_on_quality_for_gzip.py
deleted file mode 100644
index 9194ecc999f..00000000000
--- a/deep_sequencing_unit/source/Python/filter_on_quality_for_gzip.py
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/local/dsu/Python-3.2/python
-'''
-Usage: python filter_on_quality_for_gzip.py <fastqfilei.gz>
-Reqires bcltofastq converted gzipped fastq file which are generated 
-by the Illumina pipeline Casava 1.8+
-  
-@author: Manuel Kohler
-@copyright: ETH Zurich
-@precondition: gzip
-'''
-
-import gzip 
-import sys
-import argparse
-
-
-def parseCommandLine():
-  parser = argparse.ArgumentParser(description='Counts the filtered and ' + 
-                                  'non-filtered read of a gzipped fastq file')
-  parser.add_argument('-i', '--input_file', dest='fastq_file', action='store',
-                   required=True, help='Which fastq.gz file you want to process?')  
-  parser.add_argument('-o', '--output', dest='output', action='store', default='fastq_stats',
-                  type=str, help='Output file name')
-  parser.add_argument('-f', '--format', dest='format', action='store', default='txt',
-                   type=str, choices=['txt', 'json', 'both'], help='Output format')
-
-  args = parser.parse_args()
-  return(args)
-
-line_number = 1
-new_line = 1
-is_filtered = 0
-
-def formatNumber(n):
-  return ('{:>20}'.format('{:,}'.format(n)))
-
-def calulatePercentage(v1, v2):
-  return round(100 * (v1 / (v1 + v2)), 2)
-
-args = parseCommandLine()
-
-with gzip.open(args.fastq_file, 'rb') as file:
-  for line in file:
-    if (line_number == new_line):
-      # fastq quadruples
-      new_line = line_number + 4
-      l = line.decode('utf8')
-      #print(l.split(':')[7]) 
-      if (l.split(':')[7] == 'Y'):
-        is_filtered += 1
-    line_number += 1
-
-unfiltered = ((line_number - 1) / 4) - is_filtered
-print('File: ' + args.fastq_file)
-print(str(formatNumber(int(unfiltered))) + ' number of non-filtered reads (GOOD)')
-print(str(formatNumber(is_filtered)) + ' number of filtered reads (BAD)')
-print(str(formatNumber(calulatePercentage(unfiltered, is_filtered))) + ' % of non-filtered reads (GOOD)')
-print(str(formatNumber(calulatePercentage(is_filtered, unfiltered))) + ' % of filtered reads (BAD)')
diff --git a/deep_sequencing_unit/source/Python/rename_file.py b/deep_sequencing_unit/source/Python/rename_file.py
deleted file mode 100644
index f47eefb4120..00000000000
--- a/deep_sequencing_unit/source/Python/rename_file.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/local/dsu/Python-3.2/python
-
-'''
-Just a litlle helper function which can rename files given a regex and replace
-this with another string
-
-'''
-
-import os
-import re
-import argparse
-
-def parseCommandLine():
-  parser = argparse.ArgumentParser(description='Renames files and removes a given ' + 
-                                  'regex from the file name')
-  parser.add_argument('-d', '--directory', dest='dir', action='store',
-                   required=True, help='Directory conatining the files')  
-  parser.add_argument('-r', '--regex', dest='regular_expression', action='store',
-                    required=True, type=str, help='Regex which should be removed from file name')
-  parser.add_argument('-w', '--with', dest='replacement', action='store',
-                    required=True, type=str, help='replacement string')
-
-  args = parser.parse_args()
-  return(args)
-
-
-def ren(old, replace, replacement):
-  new = re.sub(replace, replacement, old)
-  if (new != old):
-    print ("rename: " + old + " to " + new)
-    os.rename(old, new)
-  else:
-    print(old + " left unchanged!")
-
-args = parseCommandLine()
-
-os.chdir(args.dir)
-list_of_files = os.listdir(args.dir)
-list_of_files.sort()
-[ren(file, args.regular_expression, args.replacement) for file in list_of_files ]
-print('*** ' + str(len(list_of_files)) + " files processed ***")
diff --git a/deep_sequencing_unit/source/Python/solexaQa.py b/deep_sequencing_unit/source/Python/solexaQa.py
deleted file mode 100644
index e95dd73616e..00000000000
--- a/deep_sequencing_unit/source/Python/solexaQa.py
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/env python
-'''
-Python Wrapper for a perl based program.
-Generates tile based quality graphics
-
-Output: pdf 
-@author: Manuel Kohler
-@copyright: ETH Zurich
-@precondition: Working pdftk and SolexaQA.pl binaries
-
-'''
-
-import subprocess
-import shlex
-import os
-import sys
-from optparse import OptionParser
-
-SCRIPT = "/usr/local/dsu/bin/SolexaQA/SolexaQA.pl"
-PDFTK = '/usr/local/dsu/pdftk-1.41/pdftk/pdftk'
-
-parser = OptionParser()
-parser.add_option("-p", "--path", dest="path", action="store", type="string",
-                  help="Path of the fastq files", metavar="PATH")
-parser.add_option("-v", dest="verbose", action="store_true",
-                  help="tell me all")
-(options, args) = parser.parse_args()
-path = options.path
-os.chdir(path)
-
-listdir = os.listdir(path)
-for file in listdir:
-  if file.endswith('fastq'):
-    args = SCRIPT + " -sanger " + path + "/" + file
-    Newargs = shlex.split(args)
-    p = subprocess.Popen(Newargs)
-    p.wait()
-    #convert -page A4 ETHZ_BSSE_110204_62Y8YAAXX_7.fastq.png  ETHZ_BSSE_110204_62Y8YAAXX_7.fastq_TileStatistics_A4.pdf
-    convert = ['convert', '-page', 'A4', file + '.png', file + '.png.pdf']
-    c = subprocess.Popen(convert)
-    c.wait()
-    #rm *.matrix *.segments *.quality *.png
-    os.remove(file + '.matrix')
-    os.remove(file + '.segments')
-    os.remove(file + '.quality')
-    os.remove(file + '.png')
-   
-    files = file + '.segments.hist.pdf', file + '.quality.pdf', file + '.png.pdf' 
-    assemble = [ PDFTK, 'cat', 'output', file.replace('.', '_', 1) + '_SolexaQA.pdf']
-    [assemble.insert(1, i) for i in files]
-    a = subprocess.Popen(assemble)
-    a.wait()
-    [os.remove(f) for f in files] 
-print("Finished...")
diff --git a/deep_sequencing_unit/source/R/CreatePerCycleReadQuality.R b/deep_sequencing_unit/source/R/CreatePerCycleReadQuality.R
deleted file mode 100644
index 81c41ec7e0e..00000000000
--- a/deep_sequencing_unit/source/R/CreatePerCycleReadQuality.R
+++ /dev/null
@@ -1,12 +0,0 @@
-library(multicore)
-library(ShortRead)
-args <- commandArgs(TRUE)
-reads <- readFastq(args[1])
-if (length(reads) > 1000000) {
-	reads <- sample(reads,1000000) # if more than a million reads, sample randomly
-}
-qual <- FastqQuality(quality(quality(reads))) # get quality scores
-readM <- as(qual, "matrix") # convert scores to matrix
-pdf(file=paste(args[1],"boxplot.pdf", sep="_")) # Save box plot as boxplot.pdf in current folder
-boxplot(readM, outline = FALSE, main="Per Cycle Read Quality", sub=args[1], xlab="Cycle", ylab="Phred Quality", col="grey")
-dev.off()
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/R/barcodeDistribution.R b/deep_sequencing_unit/source/R/barcodeDistribution.R
deleted file mode 100644
index 33b7a9c2670..00000000000
--- a/deep_sequencing_unit/source/R/barcodeDistribution.R
+++ /dev/null
@@ -1,113 +0,0 @@
-library("ShortRead")
-
-# Collect arguments
-args <- commandArgs(TRUE)
-print(args)
-path <- (args[1])
-flowcell <- (args[2])
-pattern <- (args[3])
-#flowcell <- "C3CFPACXX"
-#path <- "/Users/kohleman/PycharmProjects/qgf/barcodeDistribution/testData"  
-#pattern <- 'lane4'
-filenames <- list.files(path, pattern=pattern, full.names=TRUE)
-totalIndexList <- ""
-
-plotTopIndices <- function (topIndices, xName="", path) {
-  
-  # Creates a barplot out of a data frame.
-  #
-  # Args:
-  #   topIndices: data.frame which must have the columns 
-  #   'totalIndexList' and 'Freq'
-  #   xName: Name for the x-axes (xlab)
-  #
-  # Returns:
-  #   an image/ a pdf
-  
-  fileName <- (paste(xName,".pdf", sep=""))
-  fileFullPath <- (file.path(path, fileName))
-
-  pdf(file=fileFullPath)
-  par(mfcol=c(1, 1))
-  countLength<- nchar(toString(max(topIndices$Freq)))
-  
-  par(las=2) 
-  par(mar=c(5,8,4,2)) # increase y-axis margin.
-  
-  b <- barplot(topIndices$Freq, main="Top 15 indices distribution", xlab=paste("Count of Indices for", xName), horiz=TRUE,
-               names=topIndices$totalIndexList, cex.names=.75, las=1)
-  text(cex=.75, x=topIndices$Freq/2, y=b, labels=topIndices$Freq, xpd=TRUE)
-  dev.off()
-}
-
-# -----------------------------------------------------------------------------
-
-multmerge <- function(datalist, mergeBy){
-  # Merges a list if data frames by the 'mergeBy' parameter
-  Reduce(function(...) {merge(..., by = mergeBy, all=TRUE)}, datalist)
-}
-
-# returns string w/o leading or trailing whitespace
-trim <- function (x) gsub("^\\s+|\\s+$", "", x)
-
-# -----------------------------------------------------------------------------
-
-streamFASTQ <- function (file, verbose = TRUE) {
-
-  fileBaseName <- basename(file)
-  strm <- FastqStreamer(file, readerBlockSize=1e7)
-  if (verbose) {
-    print (paste("Opening " ,fileBaseName))
-  }
-  s <- unlist(strsplit(fileBaseName, "_"))
-    
-  repeat {
-    fq <- yield(strm)
-    if (length(fq) == 0)
-      break
-    
-    #print (fq)
-    #print(sread(fq))
-    #print(quality(fq))
-    
-    header <- id(fq)
-    a <- (as.character(header))
-    split <- (strsplit(a, ":"))
-    indexList <- lapply(split, function(x) strsplit(x, ":")[10])
-    indices <- unlist(indexList)
-    
-    totalIndexList <- c(totalIndexList, indices)
-  }
-
-  close(strm)
-
-  counts <- as.data.frame(table(totalIndexList)) 
-  sortedCounts <- counts[order(- counts$Freq), ]
-  
-  return (sortedCounts)
-}
-
-ldf <- lapply(filenames, streamFASTQ)
-
-# if there are more than one FASTQ file we do some more stuff
-if (length(ldf) > 1) {
-  list1 <- multmerge(ldf, "totalIndexList")
-  # Replacing all NAs with 0
-  list1 [is.na(list1)] <- 0
-  # sum up the values row-wise for each column, but leave out the first column
-  list1$Freq<- apply(list1[,c(-1)],1,sum)
-} else {
-  print ("Only one FASTQ found")
-  list1 <- ldf[[1]]
-}
-
-subList <- list1[c("totalIndexList","Freq")]
-orderedDf <- subList[with(subList, order(- Freq)), ]
-topIndices <- orderedDf[1:15, ]
-#print (topIndices)
-
-fileBaseName <- paste(flowcell, unlist(strsplit(basename(filenames[1]), "_"))[1], sep="_")
-#fileBaseName <- trim(fileBaseName)
-plotTopIndices (topIndices, fileBaseName, path)
-
-#write.table(list1, file = "list1.csv", sep = ",", col.names = NA, qmethod = "double")
diff --git a/deep_sequencing_unit/source/R/createQaReport.R b/deep_sequencing_unit/source/R/createQaReport.R
deleted file mode 100644
index 3463d50a994..00000000000
--- a/deep_sequencing_unit/source/R/createQaReport.R
+++ /dev/null
@@ -1,7 +0,0 @@
-require(multicore)
-require (ShortRead)
-args <- commandArgs(TRUE)
-fastq_file <- args[1]
-qa <- qa(getwd(),args[1], type="fastq")
-report_dest <- paste(fastq_file, "ShortRead_qa", sep="_")
-qa_report <- report (qa, dest=report_dest , type="html")
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/R/fastq_quality.R b/deep_sequencing_unit/source/R/fastq_quality.R
deleted file mode 100644
index 58beca86018..00000000000
--- a/deep_sequencing_unit/source/R/fastq_quality.R
+++ /dev/null
@@ -1,101 +0,0 @@
-# Needs ShortRead_1.11.42 or higher
-#
-# @author Manuel Kohler
-# ETHZ Zurich, 2011
-
-require(ShortRead)
-require(RColorBrewer)
-#require(RSvgDevice)
-
-args <- commandArgs(TRUE)
-
-loadFile <- function(args) {
-  file <- args[1]
-}
-
-splitPathAndFileName <- function(fullPath) {
-  # Splits a full path into path and file name and returns it as a list
-
-  fastqFileOnly <- basename(fullPath)
-  pathOnly <- dirname(fullPath)
-  return (c(pathOnly, fastqFileOnly)) 
-}
-
-
-subSampledReads <- function(fastqFile, samples=1e7, blocksize=2e9) {
-  # needed ShortRead_1.11.42
-  fastqFile
-  fqSub <- FastqSampler(fastqFile, n=samples, readerBlockSize=blocksize, verbose=FALSE)
-  subReads <- yield(fqSub)
-  return (subReads)
-}
-
-boxPlotPerCycle <- function() {
-  # Boxplot for per cycle Phred quality
-  qual <- FastqQuality(quality(quality(subReads))) # get quality scores
-  readM <- as(qual, "matrix") # convert scores to matrix
-  boxplot(readM, outline = FALSE, main="Per Cycle Read Quality", sub=fastq_only,
-          xlab="Cycle", ylab="Phred Quality", col=brewer.pal(11, "Spectral")[1])
-  return (boxplot)
-}
-
-nucleotidesPerCyclePlot <- function() {
-  # Nucleotide distribution per cycle
-  a <-alphabetByCycle(sread(subReads))
-  cycles <- dim(a)[2]
-  total_number_bases_first_cycle <- a[,1][[1]]+ a[,1][[2]]+a[,1][[3]]+ a[,1][[4]]
-                                + a[,1][[5]]
-  n <- c(names(a[1,1]),names(a[2,1]), names(a[3,1]), names(a[4,1]),
-         names(a[15,1]))
-  par(xpd=T, mar=par()$mar+c(0,0,0,4))
-  barplot(a, main="Numbers of nucleotides per cycle", sub=fastq_only,
-         ylab="Absolute number",  col=heat.colors(5), names.arg=c(1:cycles))
-  legend(cycles+10, total_number_bases_first_cycle, n, fill=heat.colors(5))
-  return (barplot)
-}
-
-cumOccurencesPlot <- function() {
-  # Taken from
-  # http://www.bioconductor.org/help/workflows/high-throughput-sequencing/
-  # Calculate and plot cumulative reads vs. occurrences
-
-  #seq <- readFastq(subReads)
-  tbl <- tables(subReads)[[2]]
-  xy <- xyplot(cumsum(nReads * nOccurrences) ~ nOccurrences, tbl,
-           scales=list(x=list(log=TRUE)), main=fastq_only, type="b", pch=20,
-           xlab="Number of Occurrences",
-           ylab="Cumulative Number of Reads")
-  return(xy)
-}
-
-
-plotPdf <- function (plotObject) {
-  pdf(file=paste(fastq_file, "quality.pdf", sep="_"))
-  plotObject
-  dev.off() 
-}
-
-plotSvg <- function (plotObject) {
-  devSVG(file = paste(fastq_file,"quality.svg", sep="_"), width = 10,
-       height = 8, bg = "white", fg = "black", onefile=TRUE, xmlHeader=TRUE)
-  plotObject
-  dev.off()
-}
-
-# MAIN ########################################################################
-
-fastq_file <- loadFile(args)
-subReads <- subSampledReads(fastq_file)
-
-fastqFilePathVector <- splitPathAndFileName(fastq_file)
-fastq_only <- fastqFilePathVector[2]
-
-pdf(file=paste(fastq_file,"quality.pdf", sep="_"), paper="a4")
- box <- boxPlotPerCycle()
- nuc <- nucleotidesPerCyclePlot()
-  
-dev.off()
-
-#plotPdf(box)
-#plotPdf(nuc)
-#plotPdf(cumOccurencesPlot())
diff --git a/deep_sequencing_unit/source/R/nucleotidesPerCycle.R b/deep_sequencing_unit/source/R/nucleotidesPerCycle.R
deleted file mode 100644
index f30016232c7..00000000000
--- a/deep_sequencing_unit/source/R/nucleotidesPerCycle.R
+++ /dev/null
@@ -1,14 +0,0 @@
-library(multicore)
-library(ShortRead)
-args <- commandArgs(TRUE)
-reads <- readFastq(args[1])
-
-a <-alphabetByCycle(sread(reads))
-cycles <- dim(a)[2]
-total_number_bases_first_cycle <- a[,1][[1]]+ a[,1][[2]]+a[,1][[3]]+ a[,1][[4]]+ a[,1][[5]]
-n <- c(names(a[1,1]),names(a[2,1]), names(a[3,1]), names(a[4,1]), names(a[15,1]))
-pdf(file=paste(args[1],"nuc_per_cycle.pdf", sep="_")) # Save box plot as boxplot.pdf in current folder
-par(xpd=T, mar=par()$mar+c(0,0,0,4))
-barplot(a, main="Numbers of nucleotides per cycle", sub=args[1], ylab="Absolute number",  col=heat.colors(5), names.arg=c(1:cycles))
-legend(cycles+10, total_number_bases_first_cycle, n, fill=heat.colors(5))
-dev.off()
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/R/numberOfOccurrences.R b/deep_sequencing_unit/source/R/numberOfOccurrences.R
deleted file mode 100644
index 4183dd9eb2b..00000000000
--- a/deep_sequencing_unit/source/R/numberOfOccurrences.R
+++ /dev/null
@@ -1,19 +0,0 @@
-# Taken from http://www.bioconductor.org/help/workflows/high-throughput-sequencing/
-
-## Load packages; also loads Biostrings, IRanges, ...
-library(multicore)
-library(ShortRead)
-
-args <- commandArgs(TRUE)
-seq <- readFastq(args[1])
-
-pdf(file=paste(args[1],"NumberOfOccurrences.pdf", sep="_"))
-
-## Calculate and plot cumulative reads vs. occurrences
-tbl <- tables(seq)[[2]]
-xyplot(cumsum(nReads * nOccurrences) ~ nOccurrences, tbl, 
-scales=list(x=list(log=TRUE)), main=args[1], type="b", pch=20,
-xlab="Number of Occurrences", 
-ylab="Cumulative Number of Reads")
-
-dev.off()
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/SQL/DBM_postgres_trigger.sql b/deep_sequencing_unit/source/SQL/DBM_postgres_trigger.sql
deleted file mode 100644
index c2fead97618..00000000000
--- a/deep_sequencing_unit/source/SQL/DBM_postgres_trigger.sql
+++ /dev/null
@@ -1,31 +0,0 @@
-CREATE OR REPLACE FUNCTION set_dbm_relations() RETURNS trigger AS $dbm_relations$
-DECLARE
-    groups RECORD;
-    next_ag_id tech_id;
-    next_ra_id tech_id;
-    space_id tech_id;
-    robert_user_id int := 240;
-    florian_user_id int := 404;
-    role authorization_role := 'OBSERVER';
-    dbm_string varchar:= 'DBM%';
-BEGIN
-
-    FOR groups IN SELECT code FROM spaces WHERE code LIKE dbm_string EXCEPT ALL
-                  SELECT code FROM authorization_groups WHERE code LIKE dbm_string LOOP
-        SELECT nextval('authorization_group_id_seq') INTO next_ag_id;
-        INSERT INTO authorization_groups (id, code, pers_id_registerer) VALUES (next_ag_id, groups.code, 1);
-        INSERT INTO authorization_group_persons (ag_id, pers_id) VALUES (next_ag_id, robert_user_id);
-        INSERT INTO authorization_group_persons (ag_id, pers_id) VALUES (next_ag_id, florian_user_id);
-
-        SELECT id FROM spaces WHERE code=groups.code INTO space_id;
-        SELECT nextval('role_assignment_id_seq') INTO next_ra_id;
-        INSERT INTO role_assignments (id, role_code, space_id, pers_id_registerer, ag_id_grantee) VALUES (next_ra_id, role, space_id, 1, next_ag_id);
-    END LOOP;
-    RETURN NULL;
-END;
-$dbm_relations$ LANGUAGE plpgsql;
-
--- DROP TRIGGER IF EXISTS dbm_relations ON spaces;
-
-CREATE TRIGGER dbm_relations AFTER INSERT ON spaces
-FOR EACH ROW EXECUTE PROCEDURE set_dbm_relations();
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/bash/CreatePerCycleReadQuality.sh b/deep_sequencing_unit/source/bash/CreatePerCycleReadQuality.sh
deleted file mode 100644
index 6eb5ad9ec0b..00000000000
--- a/deep_sequencing_unit/source/bash/CreatePerCycleReadQuality.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/bash
-
-R_SCRIP_PATH=/usr/local/dsu/R-scripts
-
-for i in `ls -1 *.fastq`
-do
-        Rscript --vanilla $R_SCRIP_PATH/CreatePerCycleReadQuality.R $i &
-        FC_NAME=`echo $i | cut -f1 -d \. | cut -f1-4 -d _`
-done
-
-wait $!
-
-sleep 180
-
-/usr/local/dsu/pdftk-1.41/pdftk/pdftk *.pdf cat output "${FC_NAME}_ALL_boxplots.pdf"
-
-for i in 1 2 3 4 6 7 8
-do
-        if [ -f "${FC_NAME}_${i}.fastq_boxplot.pdf" ]; then
-                /usr/local/dsu/pdftk-1.41/pdftk/pdftk "${FC_NAME}_${i}.fastq_boxplot.pdf"  "${FC_NAME}_5.fastq_boxplot.pdf" cat output "${FC_NAME}_${i}_boxplot.pdf"
-                rm "${FC_NAME}_${i}.fastq_boxplot.pdf"
-        fi
-done
-mv ${FC_NAME}_5.fastq_boxplot.pdf ${FC_NAME}_5_boxplot.pdf
-
-echo DONE
diff --git a/deep_sequencing_unit/source/bash/RTA_check_on_missing_images.sh b/deep_sequencing_unit/source/bash/RTA_check_on_missing_images.sh
deleted file mode 100755
index 0fbaca5ebc3..00000000000
--- a/deep_sequencing_unit/source/bash/RTA_check_on_missing_images.sh
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/bin/bash
-# Checks on missing pictures in the 'Images' folder of the new Illumina Pipeline 1.4
-# July 2009
-# Author: Manuel Kohler
-# Needs one parameter to specify the number of cycles which may vary
-
-export NUMBER_OF_CYCLES=$1
-export NUMBER_OF_LANES=8
-export NUMBER_OF_TILES_PER_LANE=100
-export NUMBER_OF_IMAGES_PER_TILE=2
-export IMAGES_PER_CYCLE=$[ ${NUMBER_OF_TILES_PER_LANE}*${NUMBER_OF_IMAGES_PER_TILE} ]
-#----------------------------------------------
-export RUN_BASE=/array0/Incoming/Runs
-export LATEST_FOLDER=`ls -1tr $RUN_BASE | tail -1`  
-#export IMAGE_PATH=$RUN_BASE/$LATEST_FOLDER/Images
-export IMAGE_PATH=$2
-#----------------------------------------------
-export MAILX="/bin/mail"
-export MAIL_LIST="manuel.kohler@bsse.ethz.ch"
-#----------------------------------------------
-export BOX=`uname -n`
-export PRG=`basename $0`
-export USAGE="Usage: ${PRG} <Number_of_cycles> <Image_Path>"
-export DAY=`date |cut -c1-3`
-export BUILDSTAMP=`date '+%Y.%m.%d_%H_%M'`
-export MISSING_IMAGES=$IMAGE_PATH/missing_images_${BUILDSTAMP}.txt
-#----------------------------------------------
-if [ -z "${NUMBER_OF_CYCLES}"  -o -z "${IMAGE_PATH}" ]
-then
-   echo "${USAGE}"
-   exit 1
-fi
-#----------------------------------------------
-echo -e "Checking $IMAGE_PATH as Image Folders"
-echo -e "Looking for $IMAGES_PER_CYCLE Images in $NUMBER_OF_CYCLES cycle folders..."
-
-# Create a reference file
-for j in cnf cif; do
- for (( k = 1; k <= $NUMBER_OF_TILES_PER_LANE; k++ )); do
-  echo \_$k.$j >> $IMAGE_PATH/image_reference.txt;
- done
-done
-#----------------------------------------------
-for i in $IMAGE_PATH/L00*; do 
- for c in $i/*; do
-  NUMBER=`ls -1 $c | wc -l`;
-  if [ $NUMBER -ne ${IMAGES_PER_CYCLE} ]; 
-   then
-    echo $c 
-    ls -1 $c > $IMAGE_PATH/incomplete_files.txt
-#    cat $IMAGE_PATH/incomplete_files.txt | cut -d "_" -f3- | sort -n > $IMAGE_PATH/incomplete_files-s.txt
-    diff $IMAGE_PATH/incomplete_files.txt  $IMAGE_PATH/image_reference.txt; 
- fi
- done;
-done > $IMAGE_PATH/missing.txt 
-#----------------------------------------------
-sed '/^[0-9]/d' $IMAGE_PATH/missing.txt > $IMAGE_PATH/missing_tmp.txt
-sed 's/^> //' $IMAGE_PATH/missing_tmp.txt > $MISSING_IMAGES
-#----------------------------------------------
-#rm  $IMAGE_PATH/image_reference.txt $IMAGE_PATH/incomplete_files.txt
-#----------------------------------------------
-$MAILX -s "Missing Images in last GA run on $BOX discovered! ( ${MISSING_IMAGES} )" $MAIL_LIST < ${MISSING_IMAGES}
-exit 0;
diff --git a/deep_sequencing_unit/source/bash/add_p.sh b/deep_sequencing_unit/source/bash/add_p.sh
deleted file mode 100755
index 45a01b3495c..00000000000
--- a/deep_sequencing_unit/source/bash/add_p.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/bash
-# Simply adds a 'p' to the int and nse files  
-
-for i in `ls *int*`; do 
-  #j=`echo $i |  cut -c 1-16` 
-  mv $i $i.p
-  #echo -e "Moving $i to $j";
-done
diff --git a/deep_sequencing_unit/source/bash/check_on_missing_images.sh b/deep_sequencing_unit/source/bash/check_on_missing_images.sh
deleted file mode 100755
index f2f7bb5e292..00000000000
--- a/deep_sequencing_unit/source/bash/check_on_missing_images.sh
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/bin/bash
-# Checks on missing pictures in the 'Images' folder of the new Illumina Pipeline 1.4
-# July 2009
-# Author: Manuel Kohler
-# Needs one parameter to specify the number of cycles which may vary
-
-export NUMBER_OF_CYCLES=$1
-export NUMBER_OF_LANES=8
-export NUMBER_OF_TILES_PER_LANE=100
-export NUMBER_OF_IMAGES_PER_TILE=4
-export IMAGES_PER_CYCLE=$[ ${NUMBER_OF_TILES_PER_LANE}*${NUMBER_OF_IMAGES_PER_TILE} ]
-#----------------------------------------------
-export RUN_BASE=/array0/Runs
-export LATEST_FOLDER=`ls -1tr $RUN_BASE | tail -1`  
-export IMAGE_PATH=$RUN_BASE/$LATEST_FOLDER/Images
-#----------------------------------------------
-export MAILX="/bin/mailx"
-export MAIL_LIST="manuel.kohler@bsse.ethz.ch"
-#----------------------------------------------
-export BOX=`uname -n`
-export PRG=`basename $0`
-export USAGE="Usage: ${PRG} <Number_of_cycles>"
-export DAY=`date |cut -c1-3`
-export BUILDSTAMP=`date '+%Y.%m.%d_%H_%M'`
-export MISSING_IMAGES=$IMAGE_PATH/missing_images_${BUILDSTAMP}.txt
-#----------------------------------------------
-if [ -z "${NUMBER_OF_CYCLES}" ]
-then
-   echo "${USAGE}"
-   exit 1
-fi
-#----------------------------------------------
-echo -e "Checking $IMAGE_PATH as Image Folders"
-echo -e "Looking for $IMAGES_PER_CYCLE Images in $NUMBER_OF_CYCLES cycle folders..."
-
-# Create a reference file
-for (( k = 1; k <= $NUMBER_OF_TILES_PER_LANE; k++ )); do
- for j in a c g t; do
-  echo $k\_$j.tif >> $IMAGE_PATH/image_reference.txt;
- done
-done
-#----------------------------------------------
-for i in $IMAGE_PATH/L00*; do 
- for c in $i/*; do
-  NUMBER=`ls -1 $c | wc -l`;
-  if [ $NUMBER -ne ${IMAGES_PER_CYCLE} ]; 
-   then
-    echo $c 
-    ls -1 $c > $IMAGE_PATH/incomplete_files.txt
-    cat $IMAGE_PATH/incomplete_files.txt | cut -d "_" -f3- | sort -n > $IMAGE_PATH/incomplete_files-s.txt
-    diff $IMAGE_PATH/incomplete_files-s.txt  $IMAGE_PATH/image_reference.txt; 
- fi
- done;
-done > $IMAGE_PATH/missing.txt 
-#----------------------------------------------
-sed '/^[0-9]/d' $IMAGE_PATH/missing.txt > $IMAGE_PATH/missing_tmp.txt
-sed 's/^> //' $IMAGE_PATH/missing_tmp.txt > $MISSING_IMAGES
-#----------------------------------------------
-rm  $IMAGE_PATH/image_reference.txt $IMAGE_PATH/incomplete_files.txt $IMAGE_PATH/incomplete_files-s.txt $IMAGE_PATH/missing.txt $IMAGE_PATH/missing_tmp.txt
-#----------------------------------------------
-$MAILX -s "Missing Images in last GA run on $BOX discovered! ( ${MISSING_IMAGES} )" $MAIL_LIST < ${MISSING_IMAGES}
-exit 0;
diff --git a/deep_sequencing_unit/source/bash/check_read_numbers.sh b/deep_sequencing_unit/source/bash/check_read_numbers.sh
deleted file mode 100644
index 7bf8cf3ccc5..00000000000
--- a/deep_sequencing_unit/source/bash/check_read_numbers.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/bash
-
-export RUN_BASE=/net/bs-dsu-data/array0/dsu/runs/ellac
-export LATEST_FOLDER=`ls -1dtr $RUN_BASE/*XX* | tail -1`
-export FC=`echo $LATEST_FOLDER | cut -f8 -d/`
-export NUMBER_OF_TILES=`cat $LATEST_FOLDER/Data/Intensities/RTAConfiguration.xml | grep TilesPerLane | cut -d \> -f2 | cut -d \< -f1`
-export MAILX=/bin/mailx
-export MAIL_LIST="manuel.kohler@bsse.ethz.ch"
-export SUMMARY_FILE=$LATEST_FOLDER/Data/Intensities/BaseCalls/GERALD*/Summary.xml
-export SRF_INFO_OUTPUT=$LATEST_FOLDER/Data/Intensities/BaseCalls/Srf/srf_info.txt
-
-
-cat $SRF_INFO_OUTPUT | grep GOOD | cut -f 4 -d " " > numbers
-j=0
-for i in `cat numbers`; do n[j]=$i; j=$j+1 ;done
-
-grep -A 279 \<LaneResultsSummary\> $SUMMARY_FILE | grep -A 1 \<clusterCountPF\> | grep mean | cut -f 2 -d \< | cut -f2 -d \> > summary_temp 
-j=0
-for i in `cat summary_temp`; do echo $i*$NUMBER_OF_TILES| bc -l >> summary_numbers ; done
-for i in `cat summary_numbers`; do sn[j]=$i j=$j+1; done
-
-for k in {0..7}; do echo ${sn[$k]}-${n[$k]} | bc >> difference; done
-
-$MAILX -s "Flow Cell $FC: Number comparison of srf_info and Eland Summary" < difference $MAIL_LIST
-
-rm difference summary_numbers summary_temp numbers 
diff --git a/deep_sequencing_unit/source/bash/cif2txt.sh b/deep_sequencing_unit/source/bash/cif2txt.sh
deleted file mode 100755
index c9c114c7d5f..00000000000
--- a/deep_sequencing_unit/source/bash/cif2txt.sh
+++ /dev/null
@@ -1,51 +0,0 @@
-# Manuel Kohler 2009, CISD, ETH ZŸrich
-# wrapper for the cifToTxt binary provided by Illumina
-
-#Usage: cifToTxt [options]
-
-#Command line options:
-#  -h [ --help ]                 produce help message and exit
-#  -I [ --IPAR ]                 generate IPAR data
-#  -N [ --noise ]                convert noise instead of intensities
-#  -l [ --lane ] arg             identifier of the lane (1, 2, 3, ..., 8)
-#  -t [ --tile ] arg             identifier of the tile (1, 2, 3, ..., 110)
-#  -r [ --repeat ] arg (=1)      identifier of the repeat (1, 2, ...)
-#  -f [ --first-cycle ] arg (=1) first cycle to use (1-based)
-#  -n [ --number-of-cycles ] arg number of cycles to convert
-#  -i [ --input-dir ] arg (=.)   directory where the CIF directories are located
-#  -o [ --output-dir ] arg (=.)  directory where the output file should be 
-#                                written
-#  -c [ --compression ] arg      where arg=bzip2|gzip|none. The data compression
-#                                format used for the output file.
-#!/bin/bash
-
-INTENSITY_FOLDER=$1
-CYCLES=$2
-NUMBER_OF_TILES=$3
-NUMBER_OF_LANES=8
-#INT_NSE_DIR=$1/int_nse
-PRG=`basename $0`
-USAGE="Usage: ${PRG} <Path_to_Intensity_Folder> <Number_of_Cycles> <Number_of_Tiles>\n\nEXAMPLE: ${PRG} /array0/Runs/090720_42HUDAAXX/Data/Intensities/ 38 120" 
-
-if [ -z "${INTENSITY_FOLDER}" -o -z "${CYCLES}" -o -z "${NUMBER_OF_TILES}" ]
-then
-   echo -e "${USAGE}"
-   exit 1
-fi
-
-
-# INT_NSE_DIR  there?
-[ -d $INT_NSE_DIR ] || mkdir -p $INT_NSE_DIR
-
-for (( t = 1; t <= $NUMBER_OF_TILES; t++ )); do
- for (( l = 1; l <= $NUMBER_OF_LANES; l++ )); do
-  echo Lane $l Tile $t;
-  # Convert Signal cif to int
-  /dsf/GAPipeline/bin/cifToTxt -l $l -t $t -n $CYCLES -i $INTENSITY_FOLDER -o $INTENSITY_FOLDER -c none &
-  # Convert Noise cnf to nse (additional -N)
-  /dsf/GAPipeline/bin/cifToTxt -N -l $l -t $t -n $CYCLES -i $INTENSITY_FOLDER -o $INTENSITY_FOLDER -c none &
- done
- # wait for the processes to end after calling 8 Lanes
- wait $!
- sleep 3
-done
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/bash/convert_template.sh b/deep_sequencing_unit/source/bash/convert_template.sh
deleted file mode 100755
index 9e4c5d8afbd..00000000000
--- a/deep_sequencing_unit/source/bash/convert_template.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-#Usage: eland2wig <chromosomes> <trackname> <fragmentsize> <windowsize> <strand>
-eland2wig drosmel.genome Lane5 160 10 0 <s_5_export.txt | gzip - -9 >s_5.wig.gz
diff --git a/deep_sequencing_unit/source/bash/createQaReport.sh b/deep_sequencing_unit/source/bash/createQaReport.sh
deleted file mode 100644
index 1da680cf906..00000000000
--- a/deep_sequencing_unit/source/bash/createQaReport.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-R_SCRIP_PATH=/usr/local/dsu/R-scripts
-
-for i in `ls -1 *.fastq`
-do
-        Rscript --vanilla $R_SCRIP_PATH/createQaReport.R $i &
-done
-wait $!
-echo * DONE *
diff --git a/deep_sequencing_unit/source/bash/create_srfs.sh b/deep_sequencing_unit/source/bash/create_srfs.sh
deleted file mode 100644
index 75456ff4073..00000000000
--- a/deep_sequencing_unit/source/bash/create_srfs.sh
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/bin/bash
-# Processing steps needed from the Illumina Output to the SRF files
-
-export RUN_BASE=/net/bs-dsu-data/array0/dsu/processing
-export LATEST_FOLDER=`ls -1dtr $RUN_BASE/*XX* | tail -1`
-export INTENSITY_FOLDER=Data/Intensities
-export BUSTARD=/usr/local/dsu/GAPipeline/bin/bustard.py
-export CONFIG_FILE=$LATEST_FOLDER/$INTENSITY_FOLDER/config.txt
-export CIF2TXT=/usr/local/dsu/bin/cif2txt.sh
-export LANES2SRF=/usr/local/dsu/bin/lanes2srf_RTA
-export NUMBER_OF_LANES=`cat $LATEST_FOLDER/$INTENSITY_FOLDER/RTAConfiguration.xml | grep NumberOfLanes | cut -d \> -f2 | cut -d \< -f1`
-export NUMBER_OF_TILES=`cat $LATEST_FOLDER/$INTENSITY_FOLDER/RTAConfiguration.xml | grep TilesPerLane | cut -d \> -f2 | cut -d \< -f1`
-export PAIRED_END=`cat  $LATEST_FOLDER/$INTENSITY_FOLDER/RTAConfiguration.xml | grep IsPairedEndRun  | cut -d \> -f2 | cut -d \< -f1`
-export NUMBER_OF_CYCLES=`ls -1tr $LATEST_FOLDER/$INTENSITY_FOLDER/L00$NUMBER_OF_LANES/ | tail -1 | cut -d . -f1 | cut -d C -f2`
-export MAILX=/bin/mailx
-export MAIL_LIST="manuel.kohler@bsse.ethz.ch"
-export RM=/bin/rm
-export MAKE=/usr/bin/make
-
-export PRG=`basename $0`
-export USAGE="Usage: ${PRG} <Path_to_Run_Base> <Number_of_Lanes> \n\nEXAMPLE: ${PRG} /array0/Runs/ 8" 
-
-if [ -z "${RUN_BASE}"  -o -z "${NUMBER_OF_LANES}" ]
-then
-   echo "${USAGE}"
-   exit 1
-fi
-
-cd $LATEST_FOLDER/$INTENSITY_FOLDER
-
-echo "5:ELAND_GENOME /array0/Genomes/PhiX" > $CONFIG_FILE
-if $PAIRED_END;
- then echo "5:ANALYSIS eland_pair" >> $CONFIG_FILE;
- else echo "5:ANALYSIS eland_extended" >> $CONFIG_FILE;
-fi
-echo "ELAND_MULTIPLE_INSTANCES 8" >> $CONFIG_FILE
-echo "EMAIL_LIST manuel.kohler@bsse.ethz.ch" >> $CONFIG_FILE
-
-/usr/local/dsu/GAPipeline/bin/GERALD.pl config.txt --FLOW_CELL v4  --EXPT_DIR BaseCalls/ --make
-cd BaseCalls/GERALD*
-make -j 8 all
-
-#$BUSTARD --CIF . --GERALD=$CONFIG_FILE --control-lane=5 --make
-
-#cd Bustard*
-#echo "Starting parallel make..."
-
-#make recursive -j 15 2>seq_make.err >seq_make.log
-cd $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls
-
-$CIF2TXT $LATEST_FOLDER/$INTENSITY_FOLDER $NUMBER_OF_CYCLES $NUMBER_OF_TILES
-
-#$LANES2SRF $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls $NUMBER_OF_LANES
-#$LANES2SRF /net/bs-dsu-data/array0/dsu/processing/091208_433DAAXX/Data/Intensities/BaseCalls/ 8
-
-export SRF_DIR=Srf
-#export ILLUMINA2SRF=/usr/local/dsu/bin/illumina2srf
-export ILLUMINA2SRF=/usr/local/bin/illumina2srf
-export LF=`echo $LATEST_FOLDER | cut -d / -f7`
-
-[ -d $SRF_DIR ] || mkdir $SRF_DIR
-#for  (( a=1; a<=$NUMBER_OF_LANES; a++ )); do
-#  echo "Starting SRF $a"
-  $ILLUMINA2SRF -clobber -b -o $SRF_DIR/"ETHZ_BSSE_"$LF"_1.srf" $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls/s_1_*_qseq.txt &
-  $ILLUMINA2SRF -clobber -b -o $SRF_DIR/"ETHZ_BSSE_"$LF"_2.srf" $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls/s_2_*_qseq.txt &
-  $ILLUMINA2SRF -clobber -b -o $SRF_DIR/"ETHZ_BSSE_"$LF"_3.srf" $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls/s_3_*_qseq.txt &
-  $ILLUMINA2SRF -clobber -b -o $SRF_DIR/"ETHZ_BSSE_"$LF"_4.srf" $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls/s_4_*_qseq.txt &
-  $ILLUMINA2SRF -clobber -b -o $SRF_DIR/"ETHZ_BSSE_"$LF"_5.srf" $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls/s_5_*_qseq.txt &
-  $ILLUMINA2SRF -clobber -b -o $SRF_DIR/"ETHZ_BSSE_"$LF"_6.srf" $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls/s_6_*_qseq.txt &
-  $ILLUMINA2SRF -clobber -b -o $SRF_DIR/"ETHZ_BSSE_"$LF"_7.srf" $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls/s_7_*_qseq.txt &
-  $ILLUMINA2SRF -clobber -b -o $SRF_DIR/"ETHZ_BSSE_"$LF"_8.srf" $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls/s_8_*_qseq.txt &
-  wait $!
-#done
-
-
-# clean up
-#chmod -R 755 $LATEST_FOLDER
-
-echo -e "SRF creation finished for $LATEST_FOLDER :-)" | $MAILX -s "SRF creation finished for $LATEST_FOLDER :-)" $MAIL_LIST
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/bash/createmd5sums b/deep_sequencing_unit/source/bash/createmd5sums
deleted file mode 100755
index 53fa5796870..00000000000
--- a/deep_sequencing_unit/source/bash/createmd5sums
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/bash
-cd Data
-echo Checksumming Lane 1
-find . -type f | grep -Ev '/s_[2345678][^/]*$' | xargs md5sum >s_1.md5 
-echo Checksumming Lane 2
-find . -type f | grep -Ev '/s_[1345678][^/]*$' | xargs md5sum >s_2.md5 
-echo Checksumming Lane 3
-find . -type f | grep -Ev '/s_[1245678][^/]*$' | xargs md5sum >s_3.md5 
-echo Checksumming Lane 4
-find . -type f | grep -Ev '/s_[1235678][^/]*$' | xargs md5sum >s_4.md5 
-echo Checksumming Lane 5
-find . -type f | grep -Ev '/s_[1234678][^/]*$' | xargs md5sum >s_5.md5 
-echo Checksumming Lane 6
-find . -type f | grep -Ev '/s_[1234578][^/]*$' | xargs md5sum >s_6.md5 
-echo Checksumming Lane 7
-find . -type f | grep -Ev '/s_[1234568][^/]*$' | xargs md5sum >s_7.md5 
-echo Checksumming Lane 8
-find . -type f | grep -Ev '/s_[1234567][^/]*$' | xargs md5sum >s_8.md5 
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/bash/datamover_post.sh b/deep_sequencing_unit/source/bash/datamover_post.sh
deleted file mode 100644
index 3659af90cc1..00000000000
--- a/deep_sequencing_unit/source/bash/datamover_post.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-RM=/usr/bin/rm
-
-ssh bs-isvr01-s.ethz.ch /net/bs-bsse/local0/local/dsu/bin/create_srfs.sh
-
-# get rid of the intensity and noise files generated for the srfs
-$RM /array0/dsu/processing/*/Data/Intensities/*int* /array0/dsu/processing/*/Data/Intensities/*nse*
-
-rsync /array0/dsu/processing/* /array0/dsu/dss/incoming
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/bash/do-sync.sh b/deep_sequencing_unit/source/bash/do-sync.sh
deleted file mode 100755
index 0ec88d12147..00000000000
--- a/deep_sequencing_unit/source/bash/do-sync.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/bin/bash
-
-ADD_ARG=$1
-
-STOR=bs-ssvr01
-RUN=$(basename $(pwd))
-cd /array0/Runs/${RUN} || exit 1
-
-DEST_BSSE="dsf/Samples"
-DEST_FMI="dsf-fmi/Samples"
-DEST_BZ="dsf-biozentrum"
-DEST_UB="dsf-unibs"
-DEST_C1="dsf-customer1"
-DEST_C2="dsf-customer2"
-DEST_C3="dsf-customer3"
-
-DEST1="${STOR}::${DEST_BZ}"
-DEST2="${STOR}::${DEST_BZ}"
-DEST3="${STOR}::${DEST_BZ}"
-DEST4="${STOR}::${DEST_BZ}"
-DEST5="${STOR}::${DEST_BSSE}"
-DEST6="${STOR}::${DEST_BZ}"
-DEST7="${STOR}::${DEST_BZ}"
-DEST8="${STOR}::${DEST_FMI}"
-
-# Lane
-LANE1="UB-DE-257"  
-LANE2="UB-DE-258"  
-LANE3="UB-DE-259"  
-LANE4="UB-DE-260"  
-LANE6="UB-DE-261"  
-LANE7="UB-DE-262"  
-LANE8="FMI-HG-263"  
-# Lane 5 BSSE Control Lane
-LANE5="BSSE-IN-134"
-
-rsync -xav --delete --delete-excluded --exclude "*-tmp-*" --exclude "Images" --exclude "*~" --exclude "s_[2345678]*" Data/ ${DEST1}/${LANE1}-${RUN}-1 --stats $ADD_ARG
-rsync -xav --delete --delete-excluded --exclude "*-tmp-*" --exclude "Images" --exclude "*~" --exclude "s_[1345678]*" Data/ ${DEST2}/${LANE2}-${RUN}-2 --stats $ADD_ARG
-rsync -xav --delete --delete-excluded --exclude "*-tmp-*" --exclude "Images" --exclude "*~" --exclude "s_[1245678]*" Data/ ${DEST3}/${LANE3}-${RUN}-3 --stats $ADD_ARG
-rsync -xav --delete --delete-excluded --exclude "*-tmp-*" --exclude "Images" --exclude "*~" --exclude "s_[1235678]*" Data/ ${DEST4}/${LANE4}-${RUN}-4 --stats $ADD_ARG
-rsync -xav --delete --delete-excluded --exclude "*-tmp-*" --exclude "Images" --exclude "*~" --exclude "s_[1234678]*" Data/ ${DEST5}/${LANE5}-${RUN}-5 --stats $ADD_ARG
-rsync -xav --delete --delete-excluded --exclude "*-tmp-*" --exclude "Images" --exclude "*~" --exclude "s_[1234578]*" Data/ ${DEST6}/${LANE6}-${RUN}-6 --stats $ADD_ARG
-rsync -xav --delete --delete-excluded --exclude "*-tmp-*" --exclude "Images" --exclude "*~" --exclude "s_[1234568]*" Data/ ${DEST7}/${LANE7}-${RUN}-7 --stats $ADD_ARG
-rsync -xav --delete --delete-excluded --exclude "*-tmp-*" --exclude "Images" --exclude "*~" --exclude "s_[1234567]*" Data/ ${DEST8}/${LANE8}-${RUN}-8 --stats $ADD_ARG
-# dirvish-timestemp
diff --git a/deep_sequencing_unit/source/bash/ellac_create_srfs.sh b/deep_sequencing_unit/source/bash/ellac_create_srfs.sh
deleted file mode 100755
index 9f306c0446c..00000000000
--- a/deep_sequencing_unit/source/bash/ellac_create_srfs.sh
+++ /dev/null
@@ -1,150 +0,0 @@
-#!/bin/bash
-# Processing steps needed from the Illumina Output to the SRF files
-
-export SEQUENCER=ellac
-export RUN_BASE=/net/bs-dsu-data/array0/dsu/runs/$SEQUENCER
-export LATEST_FOLDER=`ls -1dtr $RUN_BASE/*XX* | tail -1`
-export INTENSITY_FOLDER=Data/Intensities
-export BUSTARD=/usr/local/dsu/GAPipeline/bin/bustard.py
-export CONFIG_FILE=$LATEST_FOLDER/$INTENSITY_FOLDER/config.txt
-export CIF2TXT=/usr/local/dsu/bin/cif2txt.sh
-export LANES2SRF=/usr/local/dsu/bin/lanes2srf_RTA
-export MAILX=/bin/mailx
-export MAIL_LIST="manuel.kohler@bsse.ethz.ch"
-export RM=/bin/rm
-export MAKE=/usr/bin/make
-export GERALD=/usr/local/CASAVA-1.7.0/bin/GERALD.pl
-export LF=`echo $LATEST_FOLDER | cut -d / -f8`
-export RUN_COMPLETED=$LATEST_FOLDER/Run.completed
-export ANALYSIS_STARTED=$LATEST_FOLDER/Analysis.started
-export OPENBIS_SERVER=http://openbis-dsu.bsse.ethz.ch:8080/openbis/openbis
-export PROCESSING=/net/bs-dsu-data/array0/dsu/processing
-export BCL=/usr/local/dsu/OLB/OLB-1.8.0/bin/setupBclToQseq.py
-
-export PRG=`basename $0`
-export USAGE="Usage: ${PRG} <Path_to_Run_Base> <Number_of_Lanes> \n\nEXAMPLE: ${PRG} /array0/Runs/ 8" 
-
-#if [ -z "${RUN_BASE}"  -o -z "${NUMBER_OF_LANES}" ]
-#then
-#   echo "${USAGE}"
-#   exit 1
-#fi
-
-function gerald_basic {
-        cd $LATEST_FOLDER/$INTENSITY_FOLDER
-        export PAIRED_END=`cat  $LATEST_FOLDER/$INTENSITY_FOLDER/RTAConfiguration.xml | grep IsPairedEndRun  | cut -d \> -f2 | cut -d \< -f1`
-        echo "5:ELAND_GENOME /array0/Genomes/PhiX" > $CONFIG_FILE
-        if $PAIRED_END;
-         then echo "5:ANALYSIS eland_pair" >> $CONFIG_FILE;
-         else echo "5:ANALYSIS eland_extended" >> $CONFIG_FILE;
-        fi
-        echo "ELAND_SET_SIZE 8" >> $CONFIG_FILE
-        echo "EMAIL_LIST manuel.kohler@bsse.ethz.ch" >> $CONFIG_FILE
-        $GERALD $CONFIG_FILE --EXPT_DIR $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls --OUT_DIR $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls/GERALD --make
-        cd  $LATEST_FOLDER/$INTENSITY_FOLDER/GERALD
-        make -j 10 all
-        /usr/local/dsu/bin/check_read_numbers.sh $SEQUENCER
-}
-
-function gerald {
-        cd $LATEST_FOLDER/$INTENSITY_FOLDER
-        /usr/local/dsu/openbis-property-client/client/lib/properties.sh $OPENBIS_SERVER $LF
-        sleep 5
-        mv /usr/local/dsu/openbis-property-client/client/lib/config.txt $CONFIG_FILE
-        mv /usr/local/dsu/openbis-property-client/client/lib/bowtie.txt $LATEST_FOLDER/$INTENSITY_FOLDER
-#       chmod -R 755 BaseCalls
-        mkdir -p $PROCESSING/$LF/BaseCalls
-        $GERALD $CONFIG_FILE --EXPT_DIR $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls --OUT_DIR $PROCESSING/$LF/GERALD --make
-        cd $PROCESSING/$LF/GERALD
-        make -j 10 all
-        wait $!
-        chmod -R 755 .
-        rsync -av ../GERALD $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls/
-        rm -rf $PROCESSING/$LF
-        /usr/local/dsu/bin/check_read_numbers.sh $SEQUENCER
-#       rm -rf Temp
-}
-
-function bowtie {
-        /usr/local/dsu/bin/openBIS_bowtie_alignment.sh
-}
-
-
-# no longer needed with the use of the RTA
-function bustard {
-        $BUSTARD --CIF . --GERALD=$CONFIG_FILE --control-lane=5 --make
-        cd Bustard*
-        echo "Starting parallel make..."
-        make recursive -j 15 2>seq_make.err >seq_make.log
-}
-
-
-function cif2txt {
-        cd $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls
-        $CIF2TXT $LATEST_FOLDER/$INTENSITY_FOLDER $NUMBER_OF_CYCLES $NUMBER_OF_TILES
-
-}
-
-
-function bcl2qseq {
-        export LF=`echo $LATEST_FOLDER | cut -d / -f8`
-        $BCL -i $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls/ -p $LATEST_FOLDER/$INTENSITY_FOLDER -o /net/bs-dsu-data/array0/dsu/processing/$LF --in-place --overwrite
-        cd $PROCESSING/$LF
-        make -j15
-        chmod -R 755 .
-        rsync -av . $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls
-        rm -rf $PROCESSING/$LF
-}
-
-
-function create_srf {
-        export SRF_DIR=Srf
-        export ILLUMINA2SRF=/usr/local/bin/illumina2srf
-        export LF=`echo $LATEST_FOLDER | cut -d / -f8`
-
-        cd $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls
-        [ -d $SRF_DIR ] || mkdir $SRF_DIR
-        $ILLUMINA2SRF -clobber -b -o $SRF_DIR/"ETHZ_BSSE_"$LF"_1.srf" $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls/s_1_*_qseq.txt 
-        $ILLUMINA2SRF -clobber -b -o $SRF_DIR/"ETHZ_BSSE_"$LF"_2.srf" $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls/s_2_*_qseq.txt &
-        $ILLUMINA2SRF -clobber -b -o $SRF_DIR/"ETHZ_BSSE_"$LF"_3.srf" $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls/s_3_*_qseq.txt &
-        $ILLUMINA2SRF -clobber -b -o $SRF_DIR/"ETHZ_BSSE_"$LF"_4.srf" $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls/s_4_*_qseq.txt &
-        $ILLUMINA2SRF -clobber -b -o $SRF_DIR/"ETHZ_BSSE_"$LF"_5.srf" $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls/s_5_*_qseq.txt &
-        $ILLUMINA2SRF -clobber -b -o $SRF_DIR/"ETHZ_BSSE_"$LF"_6.srf" $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls/s_6_*_qseq.txt &
-        $ILLUMINA2SRF -clobber -b -o $SRF_DIR/"ETHZ_BSSE_"$LF"_7.srf" $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls/s_7_*_qseq.txt &
-        $ILLUMINA2SRF -clobber -b -o $SRF_DIR/"ETHZ_BSSE_"$LF"_8.srf" $LATEST_FOLDER/$INTENSITY_FOLDER/BaseCalls/s_8_*_qseq.txt &
-        wait $!
-        echo sleeping for 600 secs...
-        sleep 600
-        echo creating srf_info.txt...
-        for i in `ls -1 ${SRF_DIR}/*.srf`; do
-                /usr/local/bin/srf_info -l1 $i >> ${SRF_DIR}/srf_info.txt;
-        done
-        echo creating fastqs...
-        cd ${SRF_DIR}
-        /usr/local/dsu/bin/create_fastq.sh
-        echo removing int and nse files ...
-        rm $LATEST_FOLDER/$INTENSITY_FOLDER/*int* $LATEST_FOLDER/$INTENSITY_FOLDER/*nse*
-}
-
-if [ -f $ANALYSIS_STARTED ];then
-        echo "Analysis already started/done"
-        exit 255
-fi
-
-if [ -f $RUN_COMPLETED ];then
-        touch $ANALYSIS_STARTED
-        echo "Run completed! Starting Analysis..."
-        export NUMBER_OF_LANES=`cat $LATEST_FOLDER/$INTENSITY_FOLDER/RTAConfiguration.xml | grep NumberOfLanes | cut -d \> -f2 | cut -d \< -f1`
-        export NUMBER_OF_TILES=`cat $LATEST_FOLDER/$INTENSITY_FOLDER/RTAConfiguration.xml | grep TilesPerLane | cut -d \> -f2 | cut -d \< -f1`
-        export PAIRED_END=`cat  $LATEST_FOLDER/$INTENSITY_FOLDER/RTAConfiguration.xml | grep IsPairedEndRun  | cut -d \> -f2 | cut -d \< -f1`
-        export NUMBER_OF_CYCLES=`cat  $LATEST_FOLDER/$INTENSITY_FOLDER/RTAConfiguration.xml | grep MaxCycles | cut -d \> -f2 | cut -d \< -f1`
-        sleep 600
-
-        cif2txt
-        bcl2qseq
-        create_srf
-        gerald_basic
-        #gerald
-        #bowtie
-fi
-
diff --git a/deep_sequencing_unit/source/bash/goat_with_missing_tiles.sh b/deep_sequencing_unit/source/bash/goat_with_missing_tiles.sh
deleted file mode 100755
index 0141a08b95f..00000000000
--- a/deep_sequencing_unit/source/bash/goat_with_missing_tiles.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/bash
-
-
-RUN_DIR=/dsf/Analysis/Runs/090701_426LKAAXX/ 
-MISSING_TILES=--tiles=s_1_000[1-9],s_1_00[1-5][0-9],s_1_006[0-1],s_1_006[3-9],s_1_00[7-9][0-9],s_1_0100,s_2,s_3_000[1-9],s_3_00[1-4][0-9],s_3_0050,s_3_005[3-9],s_3_00[6-7][0-9],s_3_008[0-8],s_3_009[0-9],s_3_0100,s_4,s_5_000[1-9],s_5_00[1-3][0-9],s_5_0040,s_5_004[2-9],s_5_005[0-9],s_5_006[0-2],s_5_0064,s_5_006[6-7],s_5_0069,s_5_00[7-9][0-9],s_5_0100,s_6_000[1-9],s_6_00[1-2][0-9],s_6_003[0-8],s_6_00[4-9][0-9],s_6_0100,s_7_000[1-9],s_7_00[1-4][0-9],s_7_005[0-2],s_7_005[4-5],s_7_005[7-9],s_7_00[6-9][0-9],s_7_0100,s_8_000[1-9],s_8_00[1-6][0-9],s_8_007[0-8],s_8_0081,s_8_008[4-9],s_8_009[0-9],s_8_0100
-GOAT=/dsf/GAPipeline-1.4.0/bin/goat_pipeline.py
-#CONTROL_LANE=--control-lane=5
-
-cd $RUN_DIR
-echo Started: `date`
-$GOAT --control-lane=5 $MISSING_TILES ./ --make
-
-echo Finished: `date`
diff --git a/deep_sequencing_unit/source/bash/illumina2srf-pre1.3 b/deep_sequencing_unit/source/bash/illumina2srf-pre1.3
deleted file mode 100755
index 9fb2a5e45d7aedd7ec24657b9d1ec7cd4deace80..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 704053
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%0D-$4G2
zT)=z`8Vm~_;JpnFZ`ZtredMK`bW4Myq<5soe+qdygETV{#lj#byw}T(VK~5r`7vc=
z)ceAo17^<CC;-%GGugmd4&!2sx>{6iCs5q`+|d;DPclC|0g2G^Y;ZAgeMSUD1hdm7
zQb%kegOd0sn<!L-li_DX(@WyrHc_;{Br+(8vuvW!0!d_060ZSK7(zD3vm00q>~f|z
z2U?cRQAwR+OG6!mS^#gZ`m0#~OuYC_Z?EVTyu%D;b(^@jyiuH3p&H~#Te@@`cnDki
zNgHkH1YCx)p5mf7#IjS=T&$QeXimLMic3~n;2AW-HeQNR;2AW}xA9Vf0xvq;FdHxB
zBk&BGUK=k&gY7V`_@EgHn&#+~JppUQYO;x|00h?2p>TIhbR(rDj(^O(bmh=7$wWK`
z=yc`4I{GN?MA=M)K7sc{>_jY;6@<5sf$E;teshl^8ubbY+gc2f^*_IXZQ6f{J5}<+
z1~-iJG3jaS#WL%&1(->x%irfD$Vd=ihi$m{EH&{0aO(Kh!1HgzjCUobf`<GNszV3?
zJl1qn;%<bE-}2wCL^u_r+K$ncn2-uhOi?GNaMSIO)|IG7@FQe|;Cuvki9DNAF(2%U
zxw0?#SYL2eUvMpg2a&#Kth|4suFfhLkfB^$?upeRe2NHX#IEm3u$-(@qbz%H)U&LE
zx?BfNiwLA<B&Ae_wm~Yf+3ITCVaa+gD?=%6i{Um})@ulYb#wy4n*}<$9Klu*R1?2P
z+XH-B#!?e>rU3szz!_>{DPTK$DJ_=ADabwZXuBGp7ga_{_*GXYC>GA4j!04f>U|xE
zBI+Md@7sv2^5OBVJo`W7wif8f#o#BMnKEdlIs7Rs6vaPM6WkXG7Rw69TLH9;7khS}
znI(@SQ+qb`H}0^YziwWN1C7@sLSb*q6nr#2(SW>7<!&m@^9;i~$1KZSzC@-tbvgzS
zX2hqloC+;}22%v%K5CFHUl{A>sRmt%D*TJGLc#7$h4_pMaS7aQyN~UFr>Hgs&lIJG
z`M}b2J5FEsj!8zn9!ox7Ql=P53P?*PTE%DFX0fuw{k#d-ey`J#V_xJwd=(U)szR#9
zf69;tb&oM&#FO<R9QGF&3927r<jbOio@XT4A;2crNKBSgpK%|R9Mo(hIf0=Zf6z!$
z$-+ir6+U3f7DGNO#pgU*beLd@o@D-hhrMexA49P*ZnNh;O2DXm(IbSi_H4+aGQKC8
zR~heR6JOB$9L!|PA#?Lz$hLGTK=Va}L*mv{NA{TFFEC<(8B(e753ow88Ru=7#)fP)
z&wC8^;$`5VkjG>SjXn**K?t(5{21YHGZ@Z@seN79dKnf7q>n&CA7F}iL@b%&mA({C
zm$x32DW2_1@wh9+%Kj<X-qx)$#WI-!kC0_8v{U>9;h)+mj+JIfq$om)RDZu(reoPI
zv(vFQC3ZU0hAPOeCSE`VX@pFHyJ}gvc8ZG-9%83B)9$0T8m5ecw;er!iejzB0!%9Z
zw>&~N!@%Js1Sw4)!tElA<HCES6<Bn>h;|Z4a}Z>-qY<tXVMMzf4OiO?%w2u_8eIHh
z4!>Q9h-kGk8u?AMqmkd$PP8fL=7L|DjL7m`Xh&rE&U7O3foQ<P`l21}iZ;-Rb`p9s
zq8-9=EHr@}K1C4Kz#1on3wUQA=}m_;NmhPKA8CU_S|LeK_mLiRNbQpJn?BOd9nxS~
zd#(!G#kk!eoi9l<`bZInR0)#YRX@ye^AIK#vi;Wn1bQLuk<btWnq@psh50Xym9SFm
zaEUX(!0zM12Ah-blpT1y@hp4xhDEX`{^?<4@ht7$hF?g`uYkdoMbYgI@o#2Ar1&G~
zysUU&uLs{VHm_wFas92$oJuCbjB3f6Z8z{4M_!P`8?39d#zWcBkJUsSy1V|{k;ut0
zI`}3D^Na~cjncIkHHyJhjv5L_4GWf{e-FU&lrun<wBy|LMSo;@uW#)VqZ7;IxChqn
z4!IJ`(bP%mZA15&kIb!~Arg$58h=UHs0-Gt8DYNzwue?~4X}9JF@8B(NjBQ(Rosr0
z<5!{#=)zv}T;MD|V~85peQVeF=Wsm%Unk&9jJSYPb@`s+&@@}S4suB1z$8>)J3#Qr
zb$CvYJO?>EH8)Q&P^F|JECj8-b-!ft);D&+&X!Cz3m64E$<5?@3dRw{x*AMUrFZ8P
zHb%Bv=gBPQJ6U`z&FC~I3tj^F-qe~Q%DI+Ve2ViNsO&`!ljkIpe22*seN3!&8CP}U
zJ`Nfh;!jV4&!eCP4WSQ}+$+2cJvf!Qs2^q-5#eQVv9qMj+$WUYQ6lJ2pAuaMW}5y;
z843vh)#t+$rIk;>EU}?*a;kqxsPSKWLwFRqGoIgyh>DiQwR^4fsDZcxy-PEmr3kqa
z7kWf~3;zIiE$858vTCQ@a(38*lf+nMEWnk(`7@^5i(PyEfjGS7(}kDSP=#i$(e&cP
zCD;1OxB$SN=Y7mbf263deAvGe1!SQDytEilR}b^!RP!n33Cz~WMvR^zIFI-}=bcg7
zbtU7*R!%ApjK%TS09HG)$5xKLBm|$LRzO&Z=nVP?UlPsH43Vuh70#l%y8MWenb9Ll
zu8a;Y`B`*8$#u2OvG<WPR*#cO3I(T3;UbOzaY)H^(Lp6Mo1@;6D`Q8o6iqy|W1pma
zA2-?>E-s1w9&W{mXGUOs%EZR-)|Lj?1NaUDA;F#m@4zhLkv&7Sj5QRk)W3=4qh0P+
z#<8S}AA%7QZj-eXMM|X*`iz70uITN8ftf8*&<(S$qKJ(l_x}xMst8hVVGrHV$_Y?8
z^vC)&x)IxW900NZZH>Y@PHHBD!wBCunfboyi(|q1e4nm_<I{AB;v;8_6f_eI{r{Q9
zSl5ERc^L$tC4ajUUIrCsm+Sh%yDLG0k3Lmsm1qdp=(P*xu<vbchIk4Z2cO0JXJ7De
z^iFx%4cGXMxwx+Q4G&ZQ8ubYo)3NJszo^j!L`jv}vTdF!FY$LTDaQ*OLCjB$=W$FM
z`+!|7&A>r9{){{LYoU#3r|;gO6_-Y}WHm12qLnTkj5l*|$dtQIRcJ{p<O~%L-H5xB
zrq4jXF`~RhiL!9@eLC3UMYl(IVR5LwPjuK%&G{d&`)%r3lVW`TI}(!?ammLLy*w51
zn{Nfi`WegX6su^LM6yq%kRN^~kyp8q{H=84Y+dX|e&vx!-g8SOkAE(c``pM$UrOX*
z4tq}Sm*X-Fd4B9h9-Aq7zUoF6?36K|b0e>iGPQWwQ#6AWMF`FfmmnZdJe!GU$Z=T`
zuT+gdf55o`tjgelM`%$%KDUr>zKL$c7a*5>$U`@Ut-S0k(+iam`osH{Xct&bXcR7m
z<Trl11lOLIoCL#;md8;(Ts^mMgV@gmHRA5MF+LZsb>UVoAD>k59#7wUlZ$cQUKC~N
zC47f0_8}Gf3KWIsbTY^K8gKV`=Dv(QCFo_DCs=I8+IsFyEqB=UyO!^9i^nN&N?sh0
z=Xk-}AU<*bp)0sa2tvGLU&>XLSPxD~E*{B87v_G#cX;*{Zoz?aJ~9Hc7%aw<?7rYe
zy!pU~B91~R_RlcR9r`e}E!^Joqfl4yJ)0v=t}i`ImeCr%6Y(D2h#B8ntDe32_KfJZ
zeF621jeM$ruSt-U-)4UMKWrNL$j3EU6_Ag7n7|@EANjaxGgu56xDW0g9>hj6aXemT
z68jCx%^Vh=h@;zuTh-MAQC>VohBAME(#AKkh<M6l=|+mcIX-1yT({+h=Spzn<jbJm
zCJym8eqA*$NAJcn9TV<g56At(b+EEeplhRxqj$f!#_8QSVUKsBVKi`O74N;FLk9J&
z=D(r6=(6bE;>{?&?_<P76x7Y@Hzxui>PE4sjeHv$5Bo(|u<MhNUg<M);U{bQjp7hL
zU$py9CV#{V8de;7Hl=chK`{$qhlzcvA9lev68r0Z*k^Z3Y-2xc?^^<E-HJ}yk1+SJ
zBwS6xwW!YA+_0?itLEU3B<+IqME`tK5{C695@IqR+aU>=?i9BCp4%^JpHOgVvdt4F
zsKfe)o5q@7bU-G0I-PI{JQIk-`n8*2=d@MWt`2L__s|a545#$b!b!9cTlfLI14o{f
zps|DAimeXZx7m$;3Vq?zkhqP7CvfEZi49A#J@W=MEE(jP8wnV7-jFdNJF#cUsXbTA
z`4%}m_G@x#*UjMRJ5TRU)_t4Uv-n&sIq?`C1vT#y)Ezj6%dLZnzu}tl<;jUBdtzAn
z+K6jo_8VCp=!~D@mD;K?fw9rS@;$lXO3ae4r*fkNEbP~3UuQ9TT19#LzmLn|5Bu8q
zrHNer&crVel&0!pS>95<jHt%%g5HYpPrY*?qR992I3B9;i6Hf}YFFD<4P^_4##Tfp
z&Rs7Gsm7l|QuR(QU6o!nK0KQCDYmh2OJJ=Rg!P!BLePCi`D(b=!YDt*dOJ@&cF1RW
z2Z|RcW6N-aZyoq4>&s+n^T$YK7l5=eq%i_T%X1^*ZQbQpKowoF;OQ#jjyhw#jab$h
zh`{otUiv+T%}>u5{x3{~BE|e^oMN^g`Bme5MOPBOk_23C+yAJVpg$oq-YT?6SbcH&
zP`m|hZ3EqwH#fJUdMO{CR1*&)wn%r+wRU-|p97VubUD(o$fu&nebvG9Us%l-gdt9i
z?>Q0-tZK<GW63<Hjjk98X6plX^!K^@AjhP>(lLWgAfO<aQy-OH0nJYPP`|Y6?gu(0
z_+_A3cc-NU-}RRxmRZ*?B}zZqW_c9|J-?8GvF&%?{WkfY-%gIrxZ8)fTwKq$@c9u9
z4~+!$mvGY$_xURISNPP0>min7L^s3ZtvozYXz&e^EAU!rJBO5{w?PLY>21^V!}{dh
zpkC(->-E`qHpOc{nbJ4phjIH;j`wMAg^2#b@}hXSvdMcqyjCi%lj5d4yooRIm~8Z7
zV;&Y@mlW9LYx~%1&RYRvctsJ;Y!zscS2-}_jgFx1$92i+8L$A|T4qIojtItg-w#gR
z{}VEC-nZ!|9nH9`2>0zy;YGjix~yr>zTnZgVCE7b%~0fE>gAT#e<iv@Y@qPDdR7|?
zSX>`YFD~c4lsL<@rze1y%rJUX%6SW1;E*01nu}9li*O6!zE-^M2hVq?&m27xv*n6h
zyfnhIHk*9G;yFd?a+(V)!LxIkQ=w*bog)>wc1OiqIQa1eZ$mig7ak6dwED`sym@q`
zFlqGCrr?E=pf``*A6|<W-T{~x6$N~g4o}KvWgBHV*o^d;14c=Lt+1bkjA&N2*$n%}
zxqL0Uju8_M`A7t{WYn)ZF)=Mw6|)l?58~(6g2fARaR3>bZtJV{D-i}Ksm6h8h1=-d
zrPB{fc?FHDO8BE4iPb1#5DqIB5tcs$Kw9IY-4@o~v+3tM?qDxfc~}FFXk=FSupNtc
zC2|`-#VNS14D%Ei1U}DzGenzA?IP5cdme3ST<rdcM_6BWdaK9^(t$s+DW9IF9>_7z
z$8aYmpPX&}>I`nD;K6jUXVX<tLJ30y61|JhMvE7~Wz7y2*XKlWm~J-S5$-ukGe$#i
z_i4$wXj>2lL8*(sikXF59XAbH-I2=RLS%p+kNFVm1?W0Bx{kihlRSK!i3*N$a_mfY
z=f_+w2sc~Pzrlr8O&{v#`?z?N4L5&2;^Vm7;N}aMGjbPW+oRGqy7>IOm>Eb;!g%`%
z$#~peJkIpWA}U!M<Afq_1@s+Z&rT;P-e7ojNn114j{HF#J&zv0zF9c^|G@%)U24iH
z-<y(?QCNW@oUeijfbW3YrP0%tE>dXoqZOQ>nBUhi`{t4@jA{Op_LR#pe-dh)kJdF`
z!sy)d3{5!HLHS%R4ix>IU)&VxFwa6z_^+rX?i`(pn&O<@@MKl5-rZ0#5O*<pj&9tA
zXSfK&1}3)Z<9xAC5erIxL<Y_cXr4}U+b`{mg?o4-COwt8WAuMw#E?%kuYvch@4#8}
zA~?`zBFE&!Opkt}&pH{sN1iPat1GMp%b73i|0e4zR7mXI%6q1Kg{yH%9z=+T1-gQM
z^dZbNRER-ylm<U0z<Fd)3Z$D;C+amW5k|KK(L_O>oXKN4eDnFmi_Gfslc29a!04d8
z5h!3l_D{{I#xV_e=dgIlRx{4;HrI-?J`O%?lynD-%Wzr|GdoCsJ<{TpA1!&S$IcuF
zj~@XNH{IbL{RW|MWIA3$ZTpwE=QOg;!`hpsqrE0%k2&*}-0&zoAFyOD?Ovea5+yo4
z%$MWwYB-LAeq=7V2bD@r%mVZ6QBGRTX~2Y&(M;S)`~q)%<a<!$k$A2&fAK?&?c#b&
zo)+1Mow<=vYOneA?WiQ8pnve(2=d3vUM20;Y%~UbuLd9=JuUE{aq$dEP`#VYzyu;L
zB!K5QG`%Vhn0&n|-@KLl`nQ1?>1_K}4ZVUZ48s=hLDkWMJ{+NkMZ^5NMjEqIY#YUg
zZ>WU>@!T}Vqmcpk+_<<e63!_0M*krqMK_weeg+kP-kG19+X1>0F2N<f1wL~l&|2ey
z0wsE-QGwBJ@g*{Em;?F5BJ5Yu;?rd&XmDAQ4-6Rm=)2~DQ&LP}uOdZD-U8DCb4QYr
zk?&|`nNygBzJt1GjYF6LxahmHH<Y2`X1gG_)4|vpy@Z2yS2?Do(7f_oegNk2+f^<U
zv#We09pJ9=A|gQ)O4(IjB0xC6xRQ+?Kzj(YH<eG;;Z{HV3R;+L8^}YvY(UF`mt2C(
zo$e~m{bMqRllD<RUa0%0F!JJwB#frK0e!=hhzR{v6NTs%I76IcKcIB*KfdC8$bRMe
zp8@>bl3;2cmE!aXG9;%!SEU$y|F4{q-oc4hT#xt0=7hQ`#W>xstSso$e{l-B!e;+}
zW$SqXr9+<)=F~@94M%M%`X54g)GbQY$D?kro5#+##Z{Rd9T_lg^dfsP8i{%RJLUz<
z9Isu+YtU;##-eO9GLJJNw8v+V_O$?de#Q9$X;jx7d;B*?frK#=kqQx#zbfVGFPhG^
zBn%~A$(9+6y3vqte8R5ny{#xCUIc4J8+FL>uz&mGb}Kc&Y5aWiy1zkrG0gweF^8LQ
zmX|VcJBt(ngn`F`!9Jgd8Mwkf6SadKh<UMA_2R!bw8D_DV{2eQ+5c#4SHq%gPwXQ`
zj7i>jz%cqS-uDp`JvIIYqN;Zu#J_Ud2zjXSR)PFIkvvc+XMq7@u`kdyT4;y4VlE17
z+=PaLdont=PxSAY&p$5Zp7=M?!w19IB_35o$mPo)2L@UMXPL2@0#)JLdKebEw}tQ$
zubvSSzDGIUxgU)zc+7k>VwU5T`_Yg~d7il<hK4y6RhLuCqvh|t3~xY|IF`jhE^uHI
zI>==VVUYp?kQ)CAN=MZkPX_;j*%Y(z=uz{2A}748f8r>aKEs~IBs_q7*2)PU-UB+O
z^qT7HpHvgOkR1ACUBf}}z$UM)KWc(Ypgm1O&p<bS!>QC+z}fb8yrVk&-2?oVgLs}r
z{GbE0POM4fnrq-8$Ua_;J{}NH_N&V|ai>`r3U3O7pqJIPKEyx981H{&1Du!c|B10?
zsFcW<R8G6dsFJV84@aYA^YQq9@-;DJs+gxT8Xu3}D6;eYzh?LTW3pngB?jCOET_43
zr;Wtoj#vc4o0n%C^D)?Y1I3lOi>HS5Z$g<fQu!KVl>cZ<zNe-UJ8OFr7psF}Cgk=^
zfOA$Y#P1$)KVqyg8f%67A(ogiw+gQ*MVwdK<g;xX20<cS8T{95n1c%F?P^QK*d`n^
z*idmzQ+b9_QH7@&o60j0Xe#%DIKHVo3&d-i$_E$~)q*$>fzAx2sT_u-`-YBD71fJY
zNPW41haJ27*0%%W3w!P7ES)7Rt#R=L<U15kj=_>(C}NYrg;+enE~@#-GOWxbC*#+h
zHiaVpHn+{DUj?_dtJ9wIi>D{m<sTtkAX(Wfei1Mrwz3QNgz-pY&mhb#JmKO!_$ex5
zG)|KZ&2RX6aP+!{uS?Z97nty~c6fB5X=qWhA~RULb1{D0Z{t*^2}Qmz^N}CYBEMK0
zUZmPCP6foGo!;Y6%AtN<{NXy;Ay-@AT3z&5I8dv=xMAVIUM2cyr+1*jw^t$^vSbK%
zdW)2vB;&%o;Ag7%JAcGkbJ1s|{A9s^EVZTp$=}_Jyw<SrxL#Pg1we>GM7m)_`-)?6
z8^^VNfgzjkH*z7Maq(n`dcUT>5jz%pfnrtx%M3fU8I{QGXhsZN+xZ9|+@^UCA6&+M
z({2Z2?ohjN8oyN*PYUDF@j%1HN^DBlxS}r5P^`qphmDH*Ktqud8w0;(KD_SMhD()b
ze$OT44GVFV3ECAq4?(Oi$IiqTOQf-rxl_=v@L~jWIZOLI_L``wZNK8<SnZN$g-+m^
zIxN4NZ`Gs4=xks@c_GNgoS|X78;Z5X<+nh2aH;8+h%PLICK`(xrM>onmgrU!uP`iD
z0BL~)3M;Nal>y}cKt*rGw0$z3EXC{E1Mw_r24<Oc$<g@DL#WPi<xNA;@D=sRYcsS6
zwgng^sNw~+iuq3b<h7Y7RPr*hT~NGNO)^*gO++bESLYNpT7ibIPF0s(hr;*eRFt06
z#WJU{^>_qTWNjlV=7WDK-=6#WSfol)=ad8`NAi9pA3NXSC#nKome_SmuX06Q@>-}{
zzZ%v%e0$a;z0Xpvp`_M}w?_h<Wxa~U%X@ai$?<GlSZ{^4@mW*)9YL(_W40X22^z~+
zA~EmA4}{;WDKR`#k5$(#H{1wa#BWSi48@W}w5JP^VAvNpnwKnjUNjq?-hFkZB<O9T
zHL(~_F06gw*3RJ7UIqVTv6(b=jn`Mp$DM;$;}Jm#BRr6vP&<Der?_J1k{3}M=7f!T
zzBJnz$iV-Zd>~79?#<XH5&K(of#t%Q{d-%oU$wwILl*k$u@mLbe4<xjE;Gze2hb<_
zmhi%iWh)U6HG3Nm4ddBG^9a-eGi4(|yoO(qLT}&$PI#eAi`*xW#<OH@{-hBD^TW<K
z?b<Ii*}wO~(mCsWLE|PGeUt{%&*&vi_g(A=k-t!Ztea;b$H-Xh3(YCxyT|a*&FAhw
zcd8ib6rz%aOLOJy%EVD7Qn5TD)<m(lZ7-gPg_6|j=u+`w90vR<`$vtc>6QVWVE+ix
zMEl2$CUbrc{8al#k?Oc+4|qCv9Pq8@SL^cnC;v~Gm_}z$en19%%CBW0x8Z&n$n)JN
z1Nja2%0NN49jD0mJBcaV`Cu8&fAek<C-EJzQQ~)2p75_^y^II_^!xb~8KuuB>sE>H
zGvfY17>Ctc0rLemd^$qUJ$ZfgHA4oUFu1cU+tXP#2+w2Zb(Q6EVBJuMeqxT8j@Zno
z0`v8!fi`Z-#T*fP^ULoB6vl0b2JwByPngeF27$(}j3wobEW9>}y;IBpdx!28j5?#2
zhawyC9<a}-egfAPy$u0QHt|xTKGb92=_|0&tFyft!VL&(dNdoJXmxfr5X_@1m@Vf^
z)!9D$$OFf_Q5CrhjoQG{MMa7yh^MNLZ*6SN)GJ0>{Bgd*?bh2VPtYEp<XiyrLnxe>
zABu?qmYBrM5uGDnGoD<F%tHE`c-stT5n>~FA}RHp;a<^0(&h)LZt^-exYT8Lfr0$>
z!Jb9%SGy_|d*Tv8SHZy<6WbqH{5g9GwD<2T5jnZ=QW)o6^NCwo?@pspAcIN<9z*LK
zpmdJ*VA=C=BKZ{da&hnhKWK&{5=ljGZwg+SnGAT^zRqr{z7oSbh9$vZ$xf>rCY#%B
z>YYp@e*kd2T_##47N}FH>MZkI*IAZvO=nr=cxxJBy2j&eQZ%Xe75T2B{*s(rQ(ldZ
zF@eA~{_mv~HlC!Ws>`UiQfR9eQfOYkEi}Fr1)=SiLi-A(?=Q4@(|%BBQjlCMz6F)S
zPV<m+Klb3(BMv$q>qm$`B?l4iSFda5bzZrtKe8K7?pI%#NnbH|Wd<bc66s6Ui7Am@
znG&hjF0nB7C~lufuY^divbdo}dmO;J>lUb1zlZa_<TVWV77AuyTr!IwDD~*iM2;)L
z{j0<j1f4gWsZjjGPpe_&vE-W!gw3DUu{GPolBK$Q38Ld=bNEb^d~#h~Gc;T8E^n$H
z#9CqeA4E0DD31A-yoVIQ<kcAz67@C|Y3JrvZzy@bCmG1pR)mr{a26`_0<f~+Q^XZ>
zJlzE03~0hpu};A$SX}8_@-|onJYSO&`>UH%AX$z<-DZ{lU$6onQI*A&-_OSG&qigz
z4>Ch~R+2xD_EyrniBdv$N<GgGTS%dYbqtpBfNY0&ZXGWrqHq2J?rLKz9!5W8o_0HI
zE~jUhe~a#GKZ!m|M8WV^saQXSp^^P8jF6b7BKzi^J5vK-1F{#tXN2=8m{d56xVh%$
zheT8HQi0d}%@i~%eZ`Gx{797e0FYi>h=ySfU}8?uJ~|LqK>Si0x(J!}oM&%C-#-AW
z2po>ocrGH@3koB$krrbpf5xq{crkv)?IBU^PeYk=o!@cATn4zgYvjgr{NpTiNU?u?
z=dD<FvuFIU@3GY^kSF>S=k*)j=3>ui{8|*BOt{>bo{vqz8*$)!BzW=Q)?_aAWSQe@
zBv>aw%?9fwSZssyC3ptG$U+=rSm}hYD~2bHe(nbA%sbp*y*URU4~Gq9<oR^1{|L!I
ziw#`nfDb!R`mpl?Kj3DEAmB7Nd!ay;ferr`p7*bbigbps*gF}XWp0!AI5?{W>*(;>
z2rQ{o`|BG!(RXYd-hVwuM8l679cR1QfnuDXQ17_`mZ8z>$KIZ+h3>ftN`$!@I(~dj
z7HWo;MuXD1!yJC6qpw)s7tMhe$Pk}RGIAU5d$2j!Fqaz>^K+xWcQwU}k$z3_yban-
z@uUsfP4PbjMN=F*)egy~7~lr$%!5umQtM3<Ab)4iZVDWm7=}9H5Ebm7-5g&03J-q+
z2-gJo8$fvp=l8Q9sN;p8`1?>PfIktH0{AOYDS$r`W!q;V&n3U3EG_;<K`IVeG2gmQ
zY;iJB?*!&E(6fQK$qc5FFvIVOd0#3f1A<>F35!Ln;Az#N#@~%hjL1BdisiRPiNT=(
z?Tg+Er%{a`@Uqk4sDqj)$AJwtGOmDJgy8xt$ciof(7SAL(TBw$4B+Sx8$iQ;M1S<}
z4TBL={2UA%3ZAk!bU2lQ3_NcVG((x_z+w}_n2?K~x=dDOHJTZ!*4}mqFC*by=b+z*
zKKx7AB}U7Wy)<rv`4WuTV1Wc{2|{svny1%%+X1K@xx{q2F?qy1>&E00^9N#(pdbL5
z;dd=sY57j^$U@{+LcQ>Vp*)yZeLR*9p*5NK35h}7wYs-hUDFyUZVjs8R-PHa01znt
ze94=F4^Fp{&%NwQkv35u!AeW!<l^_bR|m-J>P-B`#GrO`>{@;3Jax_1Kyf#?wPUCg
z?1IIc7rtJJwFqBja_DTaV`h(bWSH+T%=}+6BrjGAbIiq;V$3760*BduU%EhX+mhGe
zw$@fcdPQnH0}G<5-$BMQsri4Hdl&Gis&nx>lT2WM;2tGnYC(gIHc_jIVr3L10~6Sz
z6Geeay;5U2^we4^GeRpQ(3xoV*^W(H+uFP5)c$L)+M|M647or8wAuh(P`pH}vWAh1
zQX!zi_j}jcGa1yL)AKy%`+pygX4YPN?R9zATJL)AYeO93ig%MUI}YZT)=MO1QM|P!
zzbNb`F2P|<q-Rjvgf3H~=gGtpBt`&8^jLi)rZmT)>Jlt@?_Jb2nZ5pCQD(W<3<pEP
zYo>Lm85t(c(A0v8WY&*B3l(Ivr)#j-TYcrMzT<B&3#wd}MjH>U+gQ}HK5XmmN-C|}
zVCVr^3XQ|~JG*f>v*?orK?KyU;<SH6XzS8}%)UW0W;&xt%9sZ?n`7(}H&$K2^keiM
zF7Dc1(KQhCb(8k%zp^NN-C<<8GbvL_{;+~Fydp<8smsjH{2R5)nk$zDH<?M0fzGp=
z_Nun)WiWD7k+VPsF;B${^A<|p0yVENZ;9kBR56{0JXzOPM|^59j{5#W0lk;IfQW5!
z^=v+4AsO+)j3s0=k&!!9GQS*}p)Gig2vA<%lwSzaRK2VOu!CrF4N{P4X}(S{J!iGY
zq3`BdH=AD@9KNbzQNA-g%97A<3Bx1LWF3jSy{yOCnX72qLv=BdIkcu$JuiJRsLn%w
zqO8AfD4QOO`Zl1>q}ynMt<)$gcz=!9pLr<o6;NQR5{l~mHDY{Lm@79&SSyLjUb<|z
zuPD@wVY$vJ{VI<aOhdJCEzh|g7}LQ6qAhW6si4(zHI|+T()|Rk{F5QRep^C?-wN<|
za@b1!kza}T6A*v9)UEp|3(Sxm<t`^b|7*D&Ifs{wMGJ&gZ~$`vx49aDYxBiX_xegq
zHn4thFBBv@T&-XReO&E$yHOIWujyy8*Wl(Y?1F<0p$`(9gimfl)3dZ{uEEV4uc0@n
z$){c`zw2ZH&4se8Mh84a8en5><xHrwxgi<N?0DO?X<$Pf3C*64!-fUBjiv~D>szO-
zLv&NORJZhsV@u|9;$V>@cQ|@a@aQFx@D<QY3-h!Q!abpvmK4%UnXLk)qX{itDH6UY
zNOA#UzBWJ32mTY~k+avr-2dqEA0f=V3TTZlq_v~!;3T#(U(oQ^XQEL8=T?2O)7Q1<
zWMAJVaN%l${@~W{zFOA5_bm9x1bYxGFBeA*Ii4by7K4l~)kjLd<G(vctPp=zkm%Bv
zGhd)2ORp0>La19iPOc;=%P!@7pkGCI<zG!9sbAe<US0FNS+L_wC5=4l1zW~*<`T+y
zC;UG%n$FJ;jRreT8I3UJGMXp%8Rj{Sc-kDhxp8qO%4yk;`yt%(^_aw8-Kp<oZv*T4
zLWdL2WR~;s<QZ1#=TtTstIfTTG12t3_)>$hSkB3v!cMA_ef^sTJ>()3#{{~QCnE0A
zeZ%(yie4nNC9V6L&(_W$8pw@uZqIJiQ0@lA^TSR#g4E5S=dIWw-I2XZw}!1%oQPb^
zefKT&fFi_4%rtqOsnj=`O1G-D^OU42=C^0&LYs+V%KKNh0i9HN-DYRdw*gbg<bZF}
zo)KN4cM`ji0*k(zc=GNs?g_3h)EzIa=|-32hW%&E@Ox(V+_)Zf1__hxo*Z+p3TkP8
z*qvFiWgvoF8js`2W1LOl32%qDyp}E-6CQCed2o2xu`60eWKS3RxzVkd(Z&m|B9GF3
zxGNKAbY_B<1Ia-O)>pK=>=lvgu<8*ST~!h0T55N3@Nq`Mq0o)`cW<<*%l36+=ok?3
zn;q(2d^0_YIGY;SQs;)Z3~IG@q-Ikjv|(|L&92MKgPya~S90zz4svZ*<isOe29jNY
z@Q6+d-nKpBtS^~?Ip_wbyX(-&T|3A7`jZ30Yx<oT6?&vw1{h>yLYIcsa+ZU(5C1^a
zv45ZQB*b0Oth#MlC@yAn_4GG6cqCr#+vVFfB0Hi-bWyH9C3!Cz7N{q04^_8I92O=q
zqL}+>+nHQdhg~?ht*rTUT<eS^#Pi|6tP%FZ=j*)?8w~s*nsy^Y*(JSE7h&oTBIk4=
zt|B<!?s{Xm&`hW1^06l(uAsc3?h1}~?l`mVUP9Md%ovc|R8`Bd7L>~PEtg-h7n@y$
z_dkMlFc0^Yul0rCj;z#ZK9jI?wYGaKKS9g_=~w#9K-k$Ow-g3r>B&80;^a4Dn5@{o
z8GbQ$hqU`@F@Mgc4*|pI#@rJzh>9kA0uAo0_rvZOf>9%Kp>Xrfb`y0IQ-r=`M}^sy
zn|3yYHgT0)+W%+Uc|N(r$IkFCAudjc0RI#JoY=<mS}8~yRgy1V-n3KR@!|Z4b4xLQ
z&YIshU3%3wolYhG)6ieZ?Y^)(ZO|C1_5>pr#<@7viF^(bMw3h@FoA}KtPcphu*xcr
z&x-)HVCE%QHf?<+c8Q#FL2d6QGG2CS_)wH(W+y)gCL;R6>LeB_%Ns&F5~qtwQ-Fvr
z*><k3ww+5V;gSn3g%w4mc=S9MqZHRHQPZ%-^q06bV`p9z6mbR{>b8ZANz1)4=Xqe$
zV*nFh;-BBTf5|xfCXcmNc8A;IrNzjy!fo_x#ZqE<`{E~tQG{w3hLi94t&}!|*t9eI
zDEEsm|2m4oSFM%nxo$g|@ogChw}pLKuAkxl0hmPF^;dCET(v9|ek=9wQQdz`wk>-(
zC9jY|91-KO_@~{g%Fs(ef=rQP9eW!p6a0h0Rpu(4UM}SY3+O~{|K`4L-JclaeLPB?
z#s{7}O};<jAAiq%BduWI_vgT*-a-BBx8$HN{x#Mavv7jY4_TZ#WJ)HV$lO7P1eAtH
z2nAEi8*&|;bhuRgCjwa^OQ15KW}rw#Uo06OOZgq|y~l7SdA#O2OiQpPTTGh9Y`568
z%OFi0K?V#o0zTos@CK(>Og%s=Vrchg(c?+1zSLB`-G)WnX0+e_s%h!eXCIWTroDE_
z;-DQ`9I);<%$UMN!!b?_4I)SS8(FsVve?IMYuC=RE>}-AalPCg(T~f`Dap>DUE<&5
z&h)zr1F8aIKN5ORlnBJN-zu9&mT^Pq?}^Tc^9~CE<QP5xeX|)Q$g@&R7BTg)8j9^w
z@y_z9dJ4ikio+CUQ;?9oKD89td=z<O6yYMK3Xsk`u`$*n-7Sy`Nquxa=AP0l7mKYd
zk<RMb&>g-c&6V_C6aPvRk<hz|7jfEwgG11{7)9U|bsQ~$3Z=0pWC>cWe`AMc@4?;n
z<R!S<UP!m=SNhg;-hs32v#c0hDg!CYI%FoydcuC9Q!H=HT)c;z``+V4d30CRJVwd>
z=<~0T+Kv02D7F)CMci2d9dhh6Bwx0B210CSr`-fi+Z}Z7O38=drbuWLj?wAWRYg=N
z@irHNZR<Mw{C5gKsaAe;waLK=2_-hqm9{$uT~4ywPi>l+?+zwYDXD<!o=arvHoN|B
zm-v6+M83_Wiu2r|%EVg;AEvqf6>{u+7OGb!yaeKLi66IZ_mS1oE~<B_Pp%4eV&(NV
zCye90!GPb6$~>(Y)WdruD$^c^qhh}KKpn(p&b>5{JXi#u=+`55AFgGPXbLV&P~pyH
z<=G|P{&lC83m8JZOTQEb2;tC%#9QK+Bq{?|s1^%j7rQI_DQvxYia7YCtkq5fsveez
z#e%^mhsHU45aXCBIRo72Cj4<Mz5A$d|DwNeLrcxud>-DiBfEx9Kyo#0GGoKDq9m3c
zcY4hdKj(};;wE)RVVUmU1h~aSzwI;BELVF*@FZ+PQ#7a{mX4JcW&Q135zKj*JVbDZ
zQp!Oa*~tt#jK$n>*V+6U_o{IZQRE^MjDr=*Bsep<A!wFAoW8;rYl6An6lDftCD^@O
z8fZQrO2{7x^*5J0y>%NRHO~PQ-w}*54opv%AIoV9P2>ms!Q>uae58O(K5N-PHIWN1
z4On+gki`cwo&~LpLO@n$!9LO-=yGE9n|+S;6{*mtIx8z^UsTC7CEjuu1t3Q!#@tcZ
z0R-v@Nqb4UOzx9q%i=SG^5j?z1K-wg2!PB4YhM8hnpx5EJl@L=JL;)8JL+5@s866Z
zMR&5NR<JI3^`G*JX1rHc8?WZ`D(0T|176YKnn@HNiapGZ;YJ)tgEQ5|vb2^~ohc+d
zKBMfrFZw;rL8NLTbqbMEE5F&PVXzvm<h9ff2Z{ouj*o@E!>_5d8Kb`aS~thqQaeD^
zMqIs?6Q265)IHP@=12z(g{=quRX*y4I+}>KGVSlDGZW*J!q^zRzv2VYxx_D5r`#yR
zW9K}(-#;^uSnjodQNH~@;%}Wn!vYKQwh4{Mhed0$_X2<~@~)t|#2>>TypGEJw+Z<+
z%D4LB;J@%4{7I~8qWIcYO(ISAq*^$053W(Z<t;>)3h*(SLXsT|fGp6^#4Fql?1MUy
zw=wtBPcAwI;`+;hC&uKfXru}a{MXbvh#i`44xtYztJ~$4xR?Ij*%@&!9qjmm?&J;t
zE7Y4i?ftOWGW7&GkpTK?K8%ERB~Y)v_MzUXg}hVmT`vGJbD^%E$1qQk73`jo*~_uh
zPMB2|awdbQ*TceB!Im+sNd_NhpxAP6%z4=Xl0_})IZ1P3u6RrAQwRn*j~`ihByS>l
ztVu2)d7Me!Oj7<)U?EA=Op=U~6kP>LsG}k@CX!rA677^Emy;CDF3A*0X`f^p$x$YG
z7fJq;+;)D;O!6L*GGFB0OLDYH{)8mtxa8hP@)(o6pQNl7avvaRkyLMEIiUwzibKB4
zs=!}ulU$036w2h4sXp?!FxxM|=I=g@HnAxX7jFTG80gKz%<kIX7j;N)_(l$Q^<BP+
zh2C&dKM7KbFdNAu$F)p|IEOr+xu#S~K2IJxt}m66BJ!_!`<h8WSoL0qYQC0U_0`K@
z`4Lz`b@Zs;@=8uQ`2@DNPa|9buhFNt6TbyRdJ=wL9NJ?9%Q$7A9G)Z@5BihS0-&KT
z{y#V-u?b8kaY%ydCZv;fopSz0T8mf`-T^E?OJoI$Va?QBuYCfH`JeU#D3P<oUFgRh
zK)th<k2sf0#zdUMfFS5z;&+eR^5%%W&g_(U1q53DtVd^#CAIxp#wer>LZ_pLsrq=;
z*D5E8Oq6K*v&TW7Mx`}5!*BozEc*)bH-N1+zOA`JEUT|c9>z4Kk58I6B@Z8~*Sn$e
zl82AWk-e!HL$aHokuYNA?mB@Bu7Uw~4i`*Am^F3FIWL*g3Kl1RXHH=0cj<I?d~)zO
zE47yTlY=z0nS^{I1<RJ5<#p#m)1CN9$-!e2Pv@3|N&%gQ^iBQ}U3#g6^;9}u4a}qx
z+184+vde&K!D-_Khd!XD^L5zi;uI|r_EN`#a1%t<d=14h;tz%+r;DELT1F!CJ2a3`
zU&L8jE8|E!J0pG5gp$k?99|u=Xas;6+;yaDqcZ0(@A)=2d)XzKPfE78wgJEP@6lt)
z+*(kNy!lzas=2(W+nljLJ_gZv@DG0u(t8NEIQy*B7W$!&Idub{J0<xZ%;a%REpJ)&
zk6g_xzlTF-Zmqx^u|8yLRLIYVc_u6M2)W7k2%Ypz5;=ou_5N<GF&E0tR&SGJlMA_g
zFAV=WsYb<UCn6!jS#+X!IgRs;xu<+gZoGkHF1fBKnp_)Dn?bMm$WgMSWk6K%cy$#_
zpK;DpchQJ;j^^YZyqS}Gj`W5lShVI|&JqsK->{*t;lrHCfxh{S4KHQXlb;vtjw~CG
zgN7n?J#ErnwjG$JcrObk7h=QnZ-Jh`gHD4@jF<3U=f=w0s0P|SF(Gf;2gz}56{3-w
zJYQTmhH5w_>g&-RP}BIN4_u+!DA60&b}F1Nmk|Nk0DhVWcyn<A*_F~EHPW;dzXvbi
z02|xX(AT#-x1YtZ%zUeMBMH>e6bi<ZzpvfgBa4?JmRX4tG}~KX@SD_kv}3ToIIxIQ
z^>e_b-`=F`5&anH+Fd(~?Gc3E>$kg<Kc5%K=LID%Jr_z0KFWDTod?Fza-OdE_XX0J
zw*;_-UyK_)ktPD!JLE2l^kg60LQS_i|0-y|H#B|``0w@XDe0(p|E);b5MjY%5P>N<
zBk1d!VSpvEE}Dpjvq$R=eXpo8LA5w(*d@}D7v;*dg91RG*yk5Ipopd)e-`0q**<zc
z;G%Gep54G@o3mhRSG?605rerZ@EI3q{;sN%M|C@W)ofdzc<$+A#Dphs?v)9#(?6+N
zUeD>V-^0QBR!R|Ov9MoNjh_QIgx*?q>eO`XRPfDq(26hP+lj2tUz<#&<WrxszD9*Z
z>snqHkru8nFc4Pj51ID}BM^0{c9pWz@b-24-Li+_(9eL(lg*U&UkTPKp=*8(ASdoG
zcVd1R06%iJ)HCzg{u)#(4(p?+E0(^$N@q5`{CNF?#2b(iF@xe{GZVmxF`TxH!p#wl
ziXcMwR&2++1ECCpIy!~3Eqi2oF#EdQ^*WrySM@+=Gf=$%5ZVuqUn}}$>``|#Pq$sm
zcEbn^u)|u%=MudJaUo{}`|0oSEBJg4bA8VAGEEe6Z=IMQIiG`%>4OjN4TgzB^Mu60
z@^Lbt6FOGX>!i8de2A1QzyToBSAhNPrgbd0v>)5nrE3XJvz(C@r6cDR3A%!(?Al)9
z#LLS8sD@A<p5ju%c2=)7VC$=}4cK5ogNb!3)(HqT?x#U`wQ*JTkNW6Dx#UZ4%oIT9
z!g7h;8PyL|A5&nZE(V|Looe?@*V{jaMps@n3ScC#NK{;?MXd5m9&`nE`mtK7#0D*T
z;DxAjNaW8p2Gn6UP;!jul0I?a$YsN_V=f%Iv`n_Dd!=ZY5}5n<M$`TaY^OOG?MwN#
z?l2LwqRu_O0n%aep5b>2gAF@(`T9vmQAI|bB_OnVd;yjObg#q)Cf_SddX?;}&{yR$
zZQAU|o4HJsm*$uXUloNz&I>5^v8!yqESkkZp(r^8W%MNPC+ShZ50LaI;NQtH$v<vE
zQ6vRBQT8E{9x?m~NskzQjHE{luO{gc!<{5OVt6e{j~HH0(j$idLXsXyANomp#PBmD
z`A>4U^6L@9FOe)ZxdS9UV)$<)nQ<vAofI0&`sVLslx)#TE{YYogu3!dc*SV}5#+_-
zR~88$yP^G(wBM&0*{)#du-z1d+ir`LSGMf1)Av;Er8bece3Ke;qLwj<JxB}?Uw5TH
zk0L$puQbt#u)#XqQjG*3J&nIIbSQpo_Cz^<BqKsbcVZOMv=#3OZJx+DTWi+Wr}m4(
z#5>fTJYrejnni2L!II|rcGL4nQrRxa)IHJ#^qs!s!Q%S1)&6=$-`wC5c%0#d9}^fS
z4-Sh6$@HvsSywVsB4t$x!kXSxxs(pJrOJi!#t^Bdi&|R#%Jt~-HEApL8ENxiiItiw
zi42<H?NsR;qzjod$fE2dQ?_{;txhDZx#Z-*k;py%QJcqpxXpg*k#Ca+eeqjpI6ezf
z<aR1)Z@!;ur3nuotT-qpnvcn!T=k>$kVXv+>A0h-AK9`oGn->4nbH%c0k@9fYhV?9
ze6E=@=LPHTb7db1sJ)M2MFecQ&rvTUAp(6qu6dHpPA^BvxbTz075Dk8WZ9`n2SsMt
zn>~j47K64Lz7G=;C_RUoyKOil*=KGlC6fup-1da*0=X0Bi2BRl#N;Xe_#}_vbmDz2
z50Ll2BSV(rOg<HUhQ-KG4L6e<WHI89D8iX>QFkmhBJD$BMEQc_0#On1zIHWVFDIk)
zLn!}GQ(CSYJt8D_SlEPQkKcux(k!_;pGG+)<EPtAC3IVAYVG{`pV>*Ips}^cO+Hbh
zP07S_5o90Zq@7y{oygVh_;`I{GTg<zd@vd2;y3*Ah0hLU<Cj}2Q{x24(gC0&^-D*h
zCBr<K?aJ3-;=MwXk4>z!Rz5OL7ICh9sY!jCLR6RdqY%GqL7E(8E7l5jJ4#gS93rS=
z<Bg{jb$kQK1R{vgEKvV@5c2t24d-w~O`*mNC)v;&Iw`$Wr^=hjywO`Dw=ZSgtn;<q
zrB~X=W@f%iJ8ULOItOzl_$IfPvyZS)bS$ZySo(I*6h|?q_7gJER_pnQI&|a&O`mBW
zPwn0bjkHCJ{z2sh=-K+_OZ2&Jf9p1VBGg;o>lIq!rtK`OB>uZx{J?u1L&f8PcBmQh
z5;hCnq_l|u6Jhf4nyLrT&R*w*Edz)k_oWvd@fPL|HAa7v2ndb0Be~nBigiYVAlS)T
zO#;JOU&L6MtUwsXqWM&W`ap9BK@}=g6PpIYBEfa-Yvlqa(SC@LvJP^UbDQij{WP<%
zL;d_U=+qzQAa%tR9;EzLR_iD#$Ub7|Nv$72An&|8izqu1sqaV&ZWdLQL@*yG7nE1D
z1dx2R{tZBA#zLLe=vCEcrFN5RH+|sDErZ@iURxr>V^Eb)B!&Pm*t#o<PqF9AANHL2
zd9LO=4A`eu%5U@6wNzkNJ4%Z9iI6Ab!s&89Rse@iKJbAitXelmtOh9UY_#O$2nFV$
zysN;zcU%L8*vK?1(WJ!abkI4oN_ME)jKu@IQq&!Oi95L(TjxOE3@uDiON59By`_7X
zxLY`%*ikzmJq<N;@#67z6J+}2UH4tygn+Up=9cSZ_UQ&ftzbugQS}X{5Zbb1ukdl5
z>bRL80p2`lL^vfek9m~{GW#+2*Nb#*yxXu>e<KHeHVoCJd8{z31OERW4Hk9$sDG-X
zJZoZ05+1xFRT^Me{A<oCJR~QHPlnx%UzvQ5Q|Wr9mm&c<J&6!dH1OVy65FS$LQtpZ
z(&KLmV_Bs~lo6SCVd<i>CR19_b+*6oRpq$CSC1mU&&O-pX4oLuHdxU$(o4d%sP`_>
zLq{Yf9<O*cSK6{pj^^HRPj|LTyaA*#g)V3F+lg<RcwO%-QM>Op>yBwnh{m*Tn_3DS
zv)%L0%JIWF{l8X8!Z_xYeG3^2?x0-El@h0Jl9eQ*0v}cp#7)foGBFMaR*{bHAEBxM
ziJq}uD>X^VyA@)jR#CT$18HjAF5M+T6u*6if=$ngE5qz(i>y_#ss8!NgGb`W&R=n`
z2<#y`{kBnpfUQ+$B2=di7>7<t1Y=F>8`1ouX50s~*xj+FPOU3#BGTong5u$`%10)*
zTehzs_lrJj<@90Ti<8h}!15LoF0e!*^1|Nu+HgZe1QhyfV)ydq;dEq})%sIvwN~{<
zU3AJIVw6iLt^K}E<xdV!Wp^}P{yaf}hpN1lDwhtY%3;D%v>8Dmaffy<|AtgqoVctJ
zBlSQuJ=1qveIwM^DuqHd>hxzC1YR(VO92N1;ZCx{vK>&atqsJSy#;Jd^o*0D&h^3U
z8+_jgav`pPx9YPsavrY(kn6xGRGx$7XbsEwx*<5`!GGq<v^RLf=}N52eiwQoH~*sP
z72^GYAYQvJ8catlK(JVNR|s*{Ajgc@bubz$^?MG~h<i<7J{0lyA&td|AysuxKJ^_<
zE=yj!PH7Y0ugEFvp39au*DV4u+(R#WzwU^8jHtVqr+*1+)P+MRc0urLk6Eiyv!#mp
zFiool6Bq-oT8HJt?{ub?E;S9(%=`HU-!~0PUcO`Rn~n*axhc~STA%ni4TM<&UL)>w
z_}yNt{a&2!q-INDV{0L*kGt<@^fBSY!MD+L%P^rmzKZF?*52Voy)$qsa|ZH;58A%S
z>54VM(!S=qH0}Skwd#?GR44`z+?jB~eBm!Kf~fb5Alim=6%Gqt%4!=3F@IQ<ipVJ9
zrQuB~`=IQE`OXZCu!KE+FKD%jN+%4)jwbhD!SR-L*G;mPM0aGPf)dk@6WuEa3LD2K
zdvcYYd3D}4*>z9ZO-OP4|0Yf7Ziz}ZIG?DkoZ7PQN~ASY;&-|eHd_HxDR$t)#!jTH
zDu$#0OB=N3Y{ytA%5L1B-;Er-sP=Qa(RRlky&=2*ha2+8R4jvHQ)>OGi{aG4kL*bt
zmi3-IRd4g$p7hK%{^8b~Dt(om84FEk3~OoXs2y4dROh!Z#}5qiRW@gV2};`xpJsuP
z-UA=!*_dMoJ-KSO_8)+`Ou!tU^>HB1O;Y;{dT%D4{D`DOc4YxdumuC#XPjgUUf5=)
z{)`i`-U()(a&|HbZGmUDS>|Hdx-0}NM5eI$v%k%m;_2TxF+xp+H7PjDy+OhfT#_z_
z+w1+1dE3R9w`rR;ZDm&Tf}^$!I2&i+7*rDR^@k^Ph2FmP;+l6F2y?M1yk)2J_LesY
z%n+W?o%WxE_1ZPpMX=-p-y{#7ym-8*^TS=Q1)PmBXGRdCJ%34fL|6KfK<Md3uhcxJ
zkpLRlccMt1G5Fc?nz5!MikR5V$^4&Nv&p%NTDJ_+M8k-UruImY2`6*L<=E`KBQglP
z<owVkZkjm8N`I3H4m<sn4A)>x)U`!LMyzkcLwp93!xO~NA)Fip@68DI`iqM^0i+n^
z03XZ)ZTEblwaRxp+sZ-rL&aNOBG(`;_xvpbHfD*szpTbcO;=<>|CWI^|JVpn*w@oe
zzx%^mwl|E}6lpsKTR)oQMdA&w8#%cr)#rM0bbR4in(78ucL-kQw5IbG4tHu6CyK;i
z(NmeYj&raI!9bPRR7~PztVNV7&%?dnV)ClJbP4H7FYPB?;iXGSBly+d4I^#D!DGa1
zW^GX7elVXy{qY~&pPooze@@Hy$JqRvN=wX7u^7O1I|UUF(I-ML4QQb~f^8v~AZbl-
zi)xH)kQu8>rkNA1C-F%`69JKrit0ss6>C!7Ik;0OkqPuL8d?`0{wH=iMA5X~$f=NT
zPaLg(LB91@6Z*#3LqYCKTs?4LOdp2YZbLR~CF5s-{hdQR;=CTI*_V9prsjE@-U}le
zM69-~DB{}}3B8U%Q{CqD#FwSC#26}xL;T-CSD11um6BW(jFn={#PxQgK|CPeg|Q2v
z*sWx<Zi4mZ)!%a8R8DBAN*Z8dauuFuDvY1s5PEajEL|i064rdINKY%Hp}t$MmO~^Q
zdMSP$!UY-=GWVw-3y~lQkzc?x>F_d!KXhKv{<{(tyjKfiV@|D<&aqUwXk+NWqV12@
zwqsT?9vM={30%jv<_ECH>Mv7rl0yUL6^D+{`^Bdt$HbI*3SP=zp)96U`<PbN7kRex
zc3o%3D6%uJkg2=H(i2btEY=4C&|JI|nHsJCsMMMYSqLJ4Mq}&MOIIs0KcE^6X;cdq
zvi3!~0~pP9#{X>88!w;`kuS}6(lA;L`R)e!F8{`8SjeX{U>-A`5A}!6U<&pt+7Y6w
zCq9acZ;J@O^(bH{T&+?))zpi9VtiEQxjdBik-J<5>iwAaEB~AK-~Y$&^ZbVwzZKf&
zEr<nJ536;J0MwoGpT%}x@7^OAOY9Eo<zPY&39F%b4(-6Ndu+R-hAc~j;dn|QnjG|F
zf06zo_FV<9Wy}2`_xcZZI-&IlXCi%If&c9NHNRweJg$+54hDADn&0FyQ1XcT-C}wK
z_?VUpO^DV5uc$`dL96u|-WmN;VUyCM3%w>0bWrAFdsUGyQZ7w+J^K#2L&#38-T!d!
zOgOEN^zd1BE4@>zE<SRkt)bG-hVJ&V?$=opBujiNX#~0ZtLjOwksq5pd_-PVzxML(
zG<mRkuc}fnZ;{D6Me<(Ld0`x#+k`%`(~q7aj2CbEOzAcWDGvI9L}{%;#=)+dM9xR>
z+w%s$p&BEC2#kQX_rzmfY?3m^P$&8}HLHeSlxz}*z5yTFj7FuX;MCV~snWr=l9U&h
z0wSM5FvAdq9Uck;sXYx-F8)n$ys&djPd=0y3Pie2+#U3Y4q>Il^_*C0{4)Nj#AR!!
z<hN4As6i0b-#({*K|(6}AcGg)WS!NDa7#OlL9xb(6M><R6uy%lHnOp*ShR3gh3>yP
zn=+tAbsu$RUt*nhEN3L@j}HjT&wbTD<8&aF;SSaEds3U#l0WDMaWS9Y9{(NM7ir_W
z4`~!0KdB(BonE+!vM|@fieL<!EEP&q=TVb<^%<JX%qKsG&x8*XnNmO<XIhbArNr3K
zc99f`rWM;1(ZTDWx<JXD284i;I}Hc{C3jjizt#NK@>|RABz`B^O}FD*K6#BuoYeO(
zKv%&t@$B%8!Uc-YFGblXs$kd0%;~8>i>Id|>`g`3n~HEH1~D`;wbGMD!B1C*4z#SL
zjcTz#RG*dl7g3~(CMpphV`YAOC1x?zI1+%5{U_)){KV~zoIop)W8rPOQT^?0L1Rj&
zXQ|}v5S7fL^HNDI62r5JHdRX)V5#F0EPYKKBQJ3y#eqJ*D1lf)k&(J8y7Q9Ewze?n
zIhvkOS_$o7fb7M~M);x6nRnF(bbK;<w<vMq6U+*`*~58G{}9%jd}U%gyG`UtvMLVl
z*C_0-$=^%PFtN~9k5Z2?S5F8wX=@dcl@vYefD~PFztiA9&|lIj<y*Ho`ZqBKG&lj^
z^tD3l>wno5QkT=KNj`NW;^FM8oE<Mr^42>$QJ3Yi7rN^HRH}=@E#-ISlnb@cTH;Ec
zs|WL>RIQc(STnkzwlc?2K+fB|eqMm04-2s?kW=_w^(r6!_t3F5bo{g=L*9lv8zTcc
zl4GFr1L|pO@DT>#G2l}y#pJRhAoGBLMGE43qJI;X28ovW0hH`rw)><!$T?W5{s1W4
zC#AgV0ljN1AW)GK=$tfE<n2*VsbOxYRG<QUm||U_x{<mxR5GV(P#F56KtAGWHo<9Z
zG+dtug6j!VQ3+$VTvee?dW-r%ZRqL9L#rdaSw(N8_z3$J8$xR(TGy@=I-Ki~hCnoG
z8`A6ryek)WA%wBg7#W=iYokq_BC}{KM}8E>0_U$%GgVxL$-1uNS#bLDL#HNC^4oCj
z*H%sPTq5xgnMgFB2nH+i70P~$Hr25VP+T}BNhs7_&9I1II1sTSdoe~Lpxap{+As{(
zvFWMXCeK<-oB#<gu*4C=%!?L8<$lb~9h<bCL)Wij08>}0tI7!e#p*9n5?%#{5=7tB
z$;F~U(OoT<Mcp<F*#*oECqy-NZ>EyP#s<vk)|D6$xqw8Z5r75D=A}g4<qIRsSn@Qp
zF0YL?rhqZVHO1$_pm5|Tur`J|NyPcgCv-n?PWX2YL|{^mZZZ<;YW|`0w<Lnxa&vaH
zrpM@PIJAD*a^ywQ@!q0SBY3N+Y$L;bO!HuRC{|=pkA*R*2cVsV+{+DT95Y%t!y;Mu
z&<yL|=?k3GQ&&ztD+l<ByST=9^@9TMZDJ>Kq<K!=E-WJ}!%tQMObwF;>#{vw)4SDY
zOw%45e?b{mdec*ANe=9DP%a{l@t@MVzb#T$@9a&y-cYlLN?U#(4(+z?j!QS=fMPeG
z=p~j7pc$IOvLFhB>}WBC1WjA%n|Ujocoo_l0ZeFTo391Uf?2qn>jCWlcIj6LghWSO
z-=+nxNYzrKfdI8EeI;`$)vynQ@B;nR7iB(0Mub|he3tl3@k!q7FbP)rfR<&LWfjI8
zNv{WSh}Mu$H~a;v`r4}U%qzNF1eR%Kko$XAdv!3w*4+>DE;q{}NU3Zih{or1M=5%*
zaP}h1rM;zZWbUAFcy$r$|4&r_GqYGmttaG9qG-tc%h0o|h0Im@xjJ8d#?X5?pEBp`
z=T0WneE(^lJ(y=YNw*9B-6{vu0JNBnv!;X76L@tfIz3|A^>9^kKln@tW@eaZqt4Tf
zoDJhq;z0ULG3ebTrkNDPw&^~8<qW&O>H$(Zx|#kZx|#kZx*5OhD5<$e_#ic5A`y93
zSAC5ppa%dZ1dEFi3(r(67R_Xq6EJMx{bXku=`+<?95dK;I^AnPZ$)a#6pSpG4;vl)
z0@G7%KgRyDS!G?Xm)H|}oozN{P$Nv-r<%{xM3j{hRj7=wO*#dgRElY%5aU&nPc$=~
z56?JKEHjVj!wXGsRa}b8oC=r5sfCSLO|RXR4cWfuxL5P!T=g&Wm7Q*_rcW}m0O{lC
zvF#xEm!a=JhlPZRdvc(~MvA?hYUQ6D+8RF@Vy?Dm$(=T2?3p4}&}&e1xSJS!wiCZW
z>F{jq7;!Yjo?HhuGGHts?k9ti>ZDAqE@QP`F1?XvAEeo+d%mP)QX^Hix|vB}MOvxT
zb(bHlG+^ZGb2KesE==*JsmMyLr<>j+=`e6K)yM@xuH_L0dn8(%MsYyAykCv;0Q+az
z74BzE(`r9M(XBor8!7#0Py=U=dc|u~#02j5sswyM8}R8HpeI*_A1fkH^$mKT>oCqp
z&u6kI)Z2`XwRx=uAZ{3X)X?N!o8R=>Z2bl=G8ak<_n5`@h+b@F7{E>JxHj7*=v&qG
z27;-nvIqjwSI(SDR+}u+MrVL=3!u-Z7=c_ntyJcH3ckvp9KCJgV^<idT9=xHWWH*6
z8_R%bkzJ~`O(bYKSxpjiTFI>>2`w(k3X*sjNis;Xl%x^N>G+dXNEhkA4!xdWi+!Ka
za)d&80iQx&>E@|TS}&n>Jlu4B=*G1ruBi>~NZ0lNfGnu(D1Pok@(1}~ALyZwOMg}U
zi>bgLAM4?XoUj9<G7&_`vL-a8f9NYU(fcIv6wxE0s`n`2Y$5EPv^vlMBGpjGo~>s+
z{#$Y;=$s>GnVcWGavk0tWid^B@^6GnmB%9em}Bf0!CmZ8a;(TkZ{nSuUIe4NM^!L=
zdNp3AGaoi=F5l<!KP&mNfnK3OGtt##WlrKxUVM@=TR2bOLeLh_x91DFi_QFhLH1i6
zv~VUZ(3kjDH%I>`dxw`K{7US67+WV-unYAWMY*7ke8z)_I|r|<1k~6LHENg1`+=d?
zp+1Es*Sk}wRAH#s*D@T5UcHe1Yj$E-eq1-oxP-9H$%FFaK^9s#9wz<28Bf^ifK$1~
z>*Mp{u+IYL{s(fx>>(kX0YBs8PLA1ZE*bYje6^H4AroHdefkqfOqr*JP`^^<t}y3=
zA-h+@_<Ez$i;B_hWSQvE$x!sHRa1|dwb?Q{6yPGG`0#xFkH@!WE;FufKht#T`7kr0
zhf}KV1OZ4#@rEB)CBlk;!H%-*>7i|Un7Ci}?%$|DdKdpu_Pgj?^XId-e){zx&FazT
zv^k{B<tvHPKeD@ohy2*PoY>hzn{CZ@=mXWwoNH0q<FWKIUo8EoSQ*MWv*8RmWDkg)
zL<dQ+bx*f)wK{!=_wiS$2gnVlXOG97en)y@vAS2w*sRvC09cMES%vF%>TT9`HCa~2
zliKV-R%|1m0vRiXT#d3wPj;vudS&Sk^EDAeiyf-f%R7-gy+Uu|Lo<hEWMzu^V~JF>
z5MIddwedZnVvnY0G`w)kcm^t_!NL0?R^^X3hm-Fg>1`;wGJZ|8=_Nb8jP1j<GcT$U
zOh|8JypA>|w%cFy$DBuH6GfaSg#|Y3HjMv}sP-Siy&ak+yjmo{>ekbVuP>>Hb=g4n
zu8s<-(jmpw12ib&VMIOaJYfwZGiY~KM?2PC$ZSl}WnNK^hYGD9ku5nOKtSlg9b!l6
zFIt(qcjazB?&p~bzAYxC$`jH9k^DDNQ^fg&Y@?X-TiHdu(|iq{*~iDKI64FdrW^ZZ
zUC`rx7Dx7%rl;nwbY-s*e2Adjv%iPG7gfrU8fJg+Na7#Ldy|866R#uHlHFd6MGOe<
z8QE8Q4<&b(hMkF3(9UYC0fUZi1$h;JP&QhgSdvM+A83OG65kWYLka5^5Heo8Ir9j6
zIgkJpL+~TsYytdi&>KiDQJLRm)gqm)HIkZ15@5ET)6C{Ho1#u-WJoSb;+rSWN<6Jy
zxTHHn9)co_3re4`kWKtv{EIQM-lN99p$GYsSQ;->XOFlW{HxAdg2~S7Y}3bu&}CtY
zfO?TE`jw>v_joa6<P76^6VKrbASBFP4-%@z%i+4aDW=SWUJmXzAVY%|zs4EXmXxh2
zQsc3boqkx5fOPC{e={5S2*-|O>+O&Hoou}goh&aha)r}BhG*e=M7SX}>vh1ARQDhR
z;V=-xDpigBS8`Ba^^#_^&DSIcuk`GS2MJ^FE14$uqDw+pckS$$3GY+a`6LY=QD*~C
z*@i!<s@9eNj%$E~`MAGolK%Z&RlVfH#`9ySqU4|*zg;9}eNX}LgNa|FM6lDVt7JQB
zGD*`{>L!4b{RQ|q{jiOV7F{(`vT^j)b|0QeUbJK)B4Clnf126P$m~E-K)bxE{tu^_
zkb^gnr@NY&LrU}e>4y!m`>J~TEmP<MUS(hKz-S0X*#X3#$m+$>(I_l!Ii(;zIp;M&
z{3qcjAcvV3WaaA7T?VhV?gB8`y9(uzIew3|JcJ)(=~Ys}Q9R#VAiyrgpff6$ZS7I*
ztVBH(e_#e$E(LTFA4`rh>szz=3mDtuwd~QUhM@Zh5KsOzAVI*Az~0Kd<lX}IU`<ly
z^?dryhPP6eQ5O^ZrSqBKZf}CsEG9tYTmSXk#-Jl)awUBBOsQtYS{VjLm`^SdtJwIr
zh0)RY<i?#En#-|Zvs$0iO+MNtxYgA~Vc$BZYu-jnO(79q&}H;X_3Xv@g2?05n+1>V
zqsys<&sXp{l`YgyB0mhMyOpeR6x=CIr$kzn)%qXIknKJy-4h^h1I=ZQXL1exWFJ_q
zdvuXy=;Vsjmrs#p^{82dd%We*qwZlN+9f}gb!hk-@tXSiY1F0pp7f)W^s3#XzI@26
zvNNa?1<h}z>LG^fD;g+PtH>EVKp4rVpTQsp$Dg?#pnR{~FTHJ*PD`xg;|yqIsHXV3
zd-C6_$1jpT=>ZDx_ozYEkrth{$_FNLhu4@|stao%Yo(j$2wDZ8>YN6t#(@8GQp#zS
z>B`(FY?#)e?NJwdgS(782KO{SvPYun#ev-3culOUzt1p*>}U-z&dfKY1~;u|fOR9s
z8taa~MXGU{G-~qHLjro(b15MIGP~u&KHUv@CMi9Yf0@5P^3mH0-~{vNbeZZ7PvzAX
z+GKK5y5K*cS7PZ0KXyOHVCMxhu`j(%`QB^ZrhJ0>TCQMITB)y4B8P^*bs`V!Oz$~<
z2K%#KpG7hXjobtxsZY`04{go+hz)b5-kKNaI_9$etkfl>*`0qrw_tZ-==m_B5=|`_
zq?_BQA4b0aXoKpt^>f)qqFL*SKa$(0g#cH7&@_PI*7UyJ#u(gIS&hQP$udM3k=w94
zc$u3#vn+R4N+-Er_Cn_2GB#Pe-e0*RQ1;iTlPU7i{WTFVe`J460ccu8SFnT5;6M;m
zKaW`^o_$6(lD9hVGt!Kds7ZPCG(Vgt`JK5*t0b({Y38-4Z9iu5?oltu@hFS8gaJ^`
z9TdzB6MdTVf>~?dsb`EI=yzrr4!v3|uk<p6zsT7Kd-S5#&jT%6NX2L3m)q$-2@Q~=
z6MIW$^-c5Dopo+euO=0)R;O!(^e3SRbRnTx#!BADS`2p-bIcf`v1<Z_AR3<&qVZmD
zebTaMB;%jP&U`4|(MpO612u;J67T5K%#m0Anw~XT;a;j}F}t1fSyY+lpJZx2PB@h0
z+CZlF?>T&`Eh_>A_XW)%@DR!f2|cvpEhQ_);Xv)cAd=MVs(P`ynJL;9TeKQ;)o(Y$
zfjDdJw7~-+016;b4vKhIL}*Cd5aeNUt3{X?|E5s0W$xgu=1;T%pzuw6X04ooYNbEb
z8UNSGrzYNrNyPOuqLEynNgNz0h&BakRrN5Yn9!|Ue}mrSv-A&fc<?B_NqbuBO=@ck
z^(N{Q08f9JX<@-gFvZ|wByedzD8&EbPc<-xiYQE<1o8QKH@D2S&Cvn{YvpFW9{}2l
zwE`Q@rJ;3~)<jqlMTdgP!CEW1m$xiFk&-1l1N0an_c?HG&QA5h)?E8SJm$aPuCWh&
zVY|l-)vO_BrT!ud*x6!r>~*ve)m>C(t(+!K7(O7oLr2r_>Rfaws@sxSz6Wld`DSju
z1I^SX#(;U9%@BN>#(TYl=lX>-3Y?fr(MdC@S<F!ZlAV?tsCdrI6aXHbHHxhE<dMUV
z-HaVld~EaBB*sHukn~7YH*-lO0`2>Hl1Dy>k9h179-%;s9-AzQ0{YBb|A=~9bfm3P
zwShAw=hQ98OFXx(!HutU_2s7kL#Uf;9;3rY`bvLGhNM2GzAw2m{Aj!DeVrFkpe0eB
zovznoy1WRJD01TGI{l&E_GP=BY1q-+9<&}LWYS)Bmo&~M#oLp6MNT#iPs=q-*=zJ#
z>MK2)JnA`;@61WL&Rp{t$0WTQO@^dA1H&ADn8QEjx{4w6^FjPPyfd38SPx!@;o26v
zgqsgFS0`Qwh3fGO7yBcyOUt<3{)>TZf8FN3(*L;303!R8yorF3<R)`1Re3S{xM}&n
zXdmgy8u7JNPY=_hhYycWZ`~GgDj#FpNsKUDHw5y|by(~__>$f9p87?uXhSf5nid9p
z#Cl2S{l3y+^i9B!eGyuyZdYIFyNxD84M3u0*B)gq+wS2*<ne-#+?GmnkUgsDJj^Jx
zTKZS!37axeQvc9A)tV>QJk^`0W#$Q9R!V-=Jb8g;zhIu`nRm0y(*pC<V4fD5r}NFz
z67y7Jo&x6SlltjT?LbE|j<MZjn@)Gen~wC`?w`bi&J^7%M5Ozt2l5%Onv93?8Bd#x
z$MP9ZnvBkThIWgUGvOD!k@Ne<{ATaXhtZSsZL1Jj19jT}MG4Qd7qdxyjSQy+5g54L
zLH)g+W2v8N<)+E!r4?i0lNv6Fmg^EZq$18jl#=tx`|4*>kjNIZ<!63h{UmvqED!k2
zRC>R%faJN_`>pkU>%Cvw`<*Mleey?22fW{T-tPkMccJ&YM1K30FP9(w*?r5~O-hn&
zL&<x+Wa5@^@(uWYk?Zue-j^@X`oK`~p`qksL&;7r+1I*0m-*on{X>`P$odxRQ==x0
zH4TX5?vtGN8kP<9@msynAv;uQKG%+4tLYUfy9XM=l${r!p3i+DpSvJlo6qgZ=Prz&
zn9u!vK6i=LTFfq!J+@7)6g7+>zV<LthD|R__m<{AsElvPcW-_^w<7*zK6hq5w>ti-
zeC`GL+*+b4fM&9;#;gXvNIVsNcL)@_wzaZSe`PA%#pU34bv=k6x6nlJ0!_;r&?_Rh
z7Kp*l3xQ4;kqk~NXL=WVos(}jKsYb+F+osuVHn&#HK9U|sN41K9-+3tQ)1UN7pt!1
z?G;5>c3G>YO`4CT78fr%4Kul6(P^0NPMhpBOpbp6>nuE)ua0p=DSlTK+*R&=u`=df
zQ;Ch6I|o0kOZi`ny>72X*Mgf&<alw;CGw|#EKmM1k}8+fv64ED#0B%GIz&t4O0>|^
zEogP7)id(=F<j;sAK}g_$HQ}T%khPQRx}i)99n-ATXX8MYUj~LkBHu|(cHV{h)vhD
zc~TXoD!LpotfkxnK9LyK!_4DC9v2QhF5z*B_sEhE4ZK{_)?U~FMkh$kO08s8RW}kB
z;tPwm(5R&P)EZ_aBUAqPw>ZV0kWJjtOlpnGA9ckTfw<h1dp;+ucH(Pq&wQC`3f9Lg
z^#qmZHP91BowpT&_FlfmVez$Jfyua~Yq@N{JiiEi5I;_xdV<v5BX?*+<noc27uV_r
zd$O5a4L_F}2FybA>Y1fRN-4u+9o^p7bbCi1KkX7fxp{0IE-%BeND&vd&^v?}NSCco
zyhT*tb_uxoGy13D^gR+dLey;tcO5F00FIXuJGlV|4Qu60;;pVM>e^1+eG>I01pDLH
zE`}QOOQ8PsT?3=)`n$FV>-vdBypyoE85${0td*d+IKAEJCmicQ34WjP^AMTFFNar+
zFHHNN65!OWmv2gaIDbeNicB4rk7&+a10(DDd+IugS}?<hN0hYH@00S|N7c!Db!@sU
zn8hReDqauQ9i(WnZ)4ZMafKbCGg+dE4maP9ly5gFKFurvtqjp`$-|?<1WmeQEBi3~
z*yCS6|7QY_%?(bMHw`N<=PH63!>pByN8s(y^;*E!#k0TbO_Sh8f(o58GUDr!3k`aC
z%Y|?J9VM?MQS9U1$g2qB9rU_8TrM-1K``wKhP*dI-__`vcWO4)ye-|V*;Ml!!v;uQ
zHN9P#(RFXvbcd5W%bcevvA%0J5pep->Yj7nso7iew#-288&z7jo~Twey_E0Dl!WWv
zZgAE|YBok{)`x*>xUN5f%~4Hf*G{XB8V`-K?i>#=B!!#6iHmQ+_XTUNhgi;ZZ)C3f
zGHx?0nG6|_3_9#Xl{sS=?@X$cmnP*mKQcV7OrsF~8x)chFrW~r;ru0-HNje?JEOx4
zWv{G)a7`y;-X4fBD8NwDugA~G*Vk-h<aNEy0RZ)O*N$M_^Uk4~gEfa)M|JoVQTBPp
zT=zD?bN)(MmeF8McbBqQO-Ijbrc4$<Zhwa75RfW78v+A=_V+Xusaeu{&_(NAw=Vuw
z+<*~oHz%AIv1N)U>NYt2;7%`~I);ediQW1_0qEJHEwAJ441EcuDVDSt;;JZBN$8h`
zAU?*j+?&S}!DF*oUsS{uhC#^&)doT@Bz6f0OjLP~chf3}tlL*F6hSU<o%VT#yj8o7
zfl@cMN&~i_G;ql3{P=`9UsFk*>ZT~NOn5_F|4vO#<IXXd-abwxnjX3nJ|NGYclkBk
z{|Y^(v{DE|0izef9>E=M6aLqECOLpUBp^g1A%8WAI+?)|uPFW*<m%+KL$%fjDB*)9
z@SFUKTy^#lN*lbGcqzLbdN6<f%8by+toS@QAx?`Mg~8H3D!VRmC!URRCw>y;ZTEWO
zp>G#4CGPl48GwEzkwK=4S5~jYWhEYK!oT>>rh7jH2pk!Eyx?G&v^?h`g-Hw9=ko}B
zxj;h4WA+Gv=XuVN^dmJ1qZ*}6@60Y$Qv}4x+iQ#BVGdjg8~bbh$+TK*y5$1LdcI#;
zt@*?e>R2g_#j?2B5Z|wYkbc!IuL>n_V6?8Mz9=5Tz!|)J3*}6(z=H2LNh$IRzMo{i
zU!~vNKGTf3CMe}@x8-S+ec|mhnUmus4>FvgXB<jP0!7%g+RRctqG|P@*qnaW=mR}-
zh%j~#tbh(7aE)B(*D}9IDJ$~9&;l~WL-x?l?uaNPdepZ>$SOzKw93RY*?tWViFS?d
zXkXaboIp|A*@MGj1>uI```(W=ZEVkuXvDu%o?mYW%?!3DuvH=)QD{R<1T7o575>#M
zc7TzbzBN3%Zoi%`oRgDpRjSD{90#bbvz@s%|Ibuk($Hz-p<%%j;~0jXN?Ac?>-ifT
zXSH4pM-g5f{C3{uWDoj#@iIxt?eeTH+qjtYiKOa?dQ(qjqy2>JZ?C!?YCsxF4wexe
zg6iJa&MR6ux<j;q2ZW?XA_4cljJ_aM>tFF^5fUCe=`e7AlUtg4$vd@(JhHgh$$Ko4
zs3`&Sh+R>D5@hMO#A(C8UR9Wna#_Jsb+tVDp7RtCag34cbf=fuYAzU22(*s^<Rmi!
z01}nnrW5`(pZ}o;llNs1=aB6-mdOzQi3`kWB<RdRak>!?>lNFF2D_cXBJNyYFj(&~
zH&}Tr7_52B6b{zQ$_=*L_HA?<u^E~Z{3m+m%&AZl5D1Cs^IEI*4zQxNvT=m9a?Z%K
zf27k`?aY~!_SeHLrN%oA^N41)!D@YwQtq;9z*Z}POb;^;vd_UluM&O^Vw(jaNZV*6
zH&gvb-mosf`+WiRh<^KuU6SCtV`Q+-Ml)^3KT`upL@NLLK)NhoJ7Yf%MtU|_U|pFC
z!7*~5MMJG`qw_h!O+-q(Gph%@^~GxITf^B0?wm<L2K`bU!*&z6W;E0b!70L74H>bI
z5!lp!2sSH6=3rCsCJ&o?^;>}rZ~uP`oBAAVDhgpU$-stFy;3`y2%^<o#=jpF^iYu7
zbO;BW7VUs@JmA!k<-%A;5)BuT)e%)hrrD>6K^x{`CSeYtB_kxiVQ#O#0*tb3E?2Bu
ztrx+nsz1mVeGQsH&72|3YtzAe8-E-|8<WX2l!*CDJo(La`^DjFD5AV5XjO@sBK2c<
zBaOomZCfcV0dSX8nvP5vl#a-Yj)ehtNtyZ?DiSSmcbE9h4LKrd){a_>bf*c{A@bR3
z_v`FG`Xly9x&~1vy=uD)7pQ;B7sS~`w?p&-v?gjrz^gnowZdxEf&tKJPz1pQj=0kA
zhUbZZJawKh-eQ-8DQYzlK?qIa>vg^G;r@?X_$>I`+V>$|ml}g%XKXat>kob1zqluM
z23?N0Q34omxHLVk)=F&xL~M$xO7=62k&t0i#{W$M{aUH-%X`fCtd28v>=MFyVeV<&
z(X8{OxI}FfNww~2(+99n5<&Y=V|wDrw(ph3^n9PH)$?CowMLd#*jhPmtlH%l?FN@r
z;ZWynO}=gsizM83-RN*z14!9lb%|TXsuN^lJ9la8ijN=_nJ>G9nCbuPm?i4WVbJAO
z+*LVtgut0DOlH6a^K+zWcF1cMJmc#I@Mtp#tg9mL%H#rf=ms<$&X<YvNyZg=dI6Gu
zBvb^;VBAQRL9ZrO6}9BBn)-m6DwVZ_C*0It|0IMlXGGK2L!|nvuui;r*k}*>ceW!6
z$jwzyZcVB5p==0E^;>s}BP3eW?~OgBNGT0>+)LE;fLkw5&n6{DI&x2_giufy%X^lA
zCZe;?LZ5o3R1nb}$3smRN_xdxqGv{GtuB(jLpyPagqA`7q)H5=#UMYxuP9@K^1NcL
zd?5M<ArC9iOX@ASF3#Fqq6J3(qN`WCkfG^U4Kove=s25oB9f@9q+5_smrFDY5CyT%
zJ1TT<xQI7Wvt13NfY-kr>eoYcSgrFx>zNz)<B`P#>$E{WGc%3k89ep^Bv9sJU8G)*
zcR-t^h`}t(L%-ITYjSbOd_@zE=<nKC4eCp!x_42hFA>gzL99Ro4D<LEFf7o&zpGlP
ze;=t@qJLLcE$0{TNJW6BzG#gQbm}>uSLM3+?<LTC0hQOMq5_TN;JCzhOgu1rBZiX-
zM4cIdFxS3Bg-UrIYHWuPC@j;cb9u092k#OUzCJ_{JBP3Xh<Ls4dD&hNZDw7Eot83!
zD*V4d(O?TMVh;LqRnU3I+eIRw!5n<|P@lSe@373VpdbQ<8i(stA@b$p8I@{3%Z`O1
z2xpS2VZQZMPL-S*&~ssTG5))I)Yr_akwOH}yO9kM0fSbC2?HVv2#6D|yLUX145Cek
zZ6Ba`(X2l)O%`)!P}B@asP#xDkFVQ|I4ZO;aS*gviPu;p9q%4bfvZNs-i)s6WZzL)
zAk?3DS8MVj?w7!>*iGH4u{Y>VJP9U6n|j4-&e!K!VLpL$`tK3AY*^5WGZvvCS6S5i
z7k5X_pst8Jk0$;WPLKO6*BMGP?A%&L#lo8nHUaxkX56<WI#H@$)|ozDntD)WB8dzF
zmn!<8@%SJ0>lj~ky#^lV9;8^)%~gcD*{1_I2sW>ep<De53zP0}#&J?<JRV6;ERj)x
z;KArY^+}Yj0&;jL&auWO`ghxi9BOa-{Ak>z+rr>>IY+_z_)?eo`FJ!XhY)=|-T5%0
zkCt5ZzmDT|FU$c6<~`Oe8|I<;7#;X;(7Ya>b45UXeve=h5U4)=0G;j14IT!=YhZ!p
zoj&xLNHf)Ym`Dh=uNQ0&NChFDfF{$!_SJfp=nTdPa%zM3xpJ+lj5thk4OVW#?!1om
zN!`q{sEI-SwRzNkSm-2o^pAo>7cXTs=#{?aWbmcBOz?_(Q46osW}U{*Q`v_PAIU^8
zq6R-ZeG)YcVr`c6vq>D6#3;bvTz~=se^K=@$5D5NCfK5Giy_!rVUE=Yd=>4RVF<QG
z<b<!%_lg-0{AbNYZXy;D<f&Kcj7mfjas<etsfdqI8#RD%_!M{&&(f2z;?$GAHZaa@
zs75DIhBVehLcTUx<~HE*d32WZyr$OF)3O*fgairTOz%z=Sxkf&&_Q!Q0_XeFW-$`C
zd0bn(!kx<8U0IRrJch8!J|y0o6K{#~UsvN@&d3S7xR*>g!E39k`x=VQTCiwAUxUBy
ztXeZ67!z=>U0Xwd?zT0IpoeV@Bf0<JpCHzv$q$aeV_K<R=8pA&B+V>D!O$LFCQs9M
zWWiQ<o5wt-$zvg>$z!x@*HN6N$;xw@m!$otGsQswUd@px$Waa)WYz-}1z1|ZRPD7Z
z#7^#68df3+o@4xclwv&z9WMf#5t^7^s>kvsde6UbSAm{G>+ZkPhJ+qNxWuhsQMgDg
z4{NB^w4-J^bqF-K42%T*_kV-qX6#}rQ>*!2b+R5vL#=mP0FJaJfq!BOsf0QvnL4(~
za!v}D`4za#@sJsMy;^s_`!U0>XZJVMe`Ng7iT~e>U;0jmhQ?p<KOg`5`SHU^%J}uh
zj&P{snro%L>w#gZ7_BeSflp_L-DA8a_x#h~UShy~vot4|!wa0Md7cIS+s@Yew=Yt)
zl=gr!yF59$q9}0>lVyY)5UA|8BkFW&$gb8Li8_m0o%Dwh_g1<~F!L60pe$Ot8?Ra-
zeO^GNS}ZQdZ>6bSaI!`u5DT_@CO1_>34EGQ+imx{qF(7m$EhG>cTNy`mSX@q*4d<9
zWpiL`RA#N5HClF|;9I&xyhlPmj_B9@Y~y2f2L-Vk_pB-R{NG+43k<A_WG`PD@TTg(
z$4!++7e)jloT%9u-c)rRl0kf>LV%<1jzhKxhWO2a+zbL&C?tRy0EL%bIMZ)^Q{36*
zV62usGP6VA4%BA~{<ROh@P8W)3k6rqHo(}Ymx^FesCl||6l(=5t+C}tFnJD#=0v1N
zAypBQnv6nxu0IisYf$k}32?JWUxzX#aYPnpPC?+I68jHBFuw_{aVaT5&OE6b0CnaT
z-Vf;$wcG?-OdY0W#ajWEpnH{{3$ZRQi=}T8?~`|IZt|_;(x~g#oBOc%i|LxjUvXbw
zO78(p-433c*exQA6xGbPt|Cb8?dU){^&Ki3^mnNBIYPrvoWn;(zhKpM#yD03`i3pE
zG8^LOVwCMhD^Q2<l=!<y<R(yI7~NAi^sbdI=YbyfCJ&z@(eH@#bXo5^*0n;8-5VAP
zH<GFqQky8sTtobMx;~eA(w(nP+zqpFI=2#kzI4+RAJuRbR%OSTnz`JAQam=u8lP3x
zF*%=e0Xe#F6&*2?sg1PMDY^XWj%y3@^{rq*<(GP<0mvZsf*m)T0veS1Yk}r`tGY|Q
z#FW6(;%KtWlu;YWfs<JBsk&{PkKBUx6Njr9JJRO0kS6L^6bXl3UbdaJCo^W&Ue6Fr
z07zyhTZcIi;G3bFv1ZVI6wbevoWc8|yn1(*QC&ri+DdCF#FZ&{i94=ZOaUe!4+R0Z
zvx0PJ4T5!1LYzovZ1)<r^|r)oIUQC5_q_UV?apnAA$wTS#c-Wwlpxvt?BsG;JN#+^
zWc;+|naLx?@pF?$O5)cW`JOZnHXwAy+6u^@N&?~bIL~3Ys=8m*KJDc~>1DT?yjKPa
z^47}wB6i1W^X@+j%ReA4-a(ttpXFE~N_AtniXr>$_8}1fibxTL3}`6;y2Ap0$Q5r1
zdvA5Lz=LDO{Iog^n6hf@rbYAY5>OM`D^#!c1dIjk^qH-CgZOr<ufBU&%#0HkX`4nd
zVV^`jA~p~PNW=!V{{5ZyEfG`px%zpv7Ar8>(kzU}rP!#f);>r>PL}EvOb`(h_!Ix(
z-lgAt9DY7ZQixrPZzE*zJ-WD+64^;QQjLP=cJw<M&DHd(C#aWBn_Fz<m3rWv!@__Q
z$7v#8n5#Yv2Phqb^^G-spufgBQ@Q(Od6*ubP51Q+ebT9gyb@Ox$(8|C<X?+CN=pW(
zb2gd+L@W-sO&={)sq=N6cj*u0!zw=1r;_0)Kg>zmCA0q5IZ0t685FR~_gdWtT!6jw
z=Hp<0)Y%vby%9lE6XAjtDNi5;f$U{(dys8?h~1lcR&#c^^EQUS=DShp9Ylfntc?$X
zwA$cIX8{hw5#^5*H2bA+{p$FV16b}139@qjya?m>VScX~_cA-O6&%!2+UfZ{m^fLZ
zH7Gy`EhavvoMks7+{M?|cp-{l+K$1@&tzB5l?yzG!p_Y;*H%>!3aIscCQtIl3xT91
zi;~+zuARP}oj<Nhy}6raC20S;_`RY9AY4z~wnn)aY%P~4xXWe|x&aTTDF9UNYe0!G
z(_2t`)CIt(0sVc9xMFk!?rqsj%8n7>qb8KH(e%>sW}&GvO4~_5SR~!!t_fMOAQkGA
z&uq6=y&y%vF#!?a%g2+axVI9c2v;H9s9Fz@GW;+6vXIA^tz#p0CGIR3Y?t?QA-B*4
z9Ns;d6Ls|swFO0D>52VZ52jzgp(|MqC^-D|Pk46gW-;9p9@*IvpNZGMz6C0|W4P+)
zq~?}^3D5)$(2f3nQ7fN@n)%N|TILhNp}E1t+j%APn?}j3L&Ax6TI{wK0Bu|#?iYM0
z_uCvOxZP3Ti9ozWL_qMMqW%xN7fTNgOAjui2jNdm4}>3QT%yL+GXG%IoetQM2+^sa
zbm~TIQgo46)9YE>wAba7;8ESZ-KKl2r^Bq_*I2_ZK?KGdxwQvYr=dc~y_kfZJJ9GZ
zs8Ew$q1FAvg7GPhj^Z{ET1c#t0{{!0+=(I*Y=)M`|Iq2l*z_*S%|g0Dk)zny?PVX}
z+ic&5?IS?t8rl*9Y#-m)EHD}Cji|Ri)ex}LW$R>q?2<-a9V^Bs<L%Iv#4*{6G`$k)
ziJyR33gkW~UT1q^xAaKkbFoKYI8%*%hu%!LylhMrun#jYePT4CCq6g-x$~D<LFY4P
zmOAkzAnmM^0P)B!tkietj1E9(PUWb3?L}C_ZHv>Li0E^RIF7|&P{!~x6k0L{_fk15
zOYD*cY&W37fX6Jl#(#fKJf$nkAJicZ>cziN6W@|eKyhbJR8Ca4fvd6T0o;oG2Gke|
z<bcm`bS2sK+($;39$8QOy(_i_yb^Lz$KXUFNQ@E&5T>7)z2Jc_-8_IoK<>|&&>i02
zP(+(7rNlI3+6?5(epwoyeZR43ZFZE<8=7H=6Q$~ltaElP$Pj`NPyQ~}(SXD|ye8Z?
zoHmNGSBe<;iEY478&}7tO7(&G?J;K|Fkuu}JkeSMyO<#ggrY!53RP+t%>h8wiIb$x
z;nWF=McEDAkuz@6v0&*qGO8=Xp@y>Co=s2G27%J<IqdE1T3M8XkY1?eGpJ#RTQH;#
z-HWpp;xr>*1ApyT#~7&ND_&8QxtikQUzDeh;$xcU2|e^lp@&XGj7(oV;%D7+407o4
z&F8&G{JoB*Yd%b4sWTW9qt^r#_sKyY{U1XgeTORNw`YHJw1MWF^c{OTe*a3;dB=91
znpIMauM8JXMoN73`}=V2UZz2GxGe1SV99sem)avvZ^>fdyuM_3#Cf6Qa_(B*sSN<d
z{I6@{IN#G^HdoW-<KaYO2!|SNLj{I#7|r=Mbv+%#Xl`%KI}vV7?pi;(4*H&pn5L)4
z1;SnH$A#<GN0W!j7T-JdNY%6VK@!sqJk=iXx`Ds&9ge63ba!OGTB|M}X04i`yJ4*&
z4%w;`x?T%n(zj|xpzF<G#P<Rgf~#g=H{4ei@%4)7U_VxV*o$r)SF`tjr?=Lfw=uQS
z<G^>InUgtiS$A~OZ>zv!GiP>LV6`ba$1W5Tg@&6i<SiVvdE=1brZ)ntH9u;yxqe*D
zJB&vgU;5tZT7P1lHrVv_=b*n4gV3jgx%n~%n|c;Dj>h~_>^zx;kp;70-C6IAYa!#J
zkJ1riOo=h3XJ?5ure|mA{TO3Rv6nT*n36Kan3BR6Q-1ylW6bV|v$bpeagn+gYp}gU
z&9(mcNZp2-F6U`yeb@Tok-ArESV(n@G)RGdM!TtN!?+p-%~#l{b~)?oHg>HK@N$gP
z2oHt-MM=cDt|<F=I*=Ox%S1-B>MHIrm@zEkdy#=f(&LI*N3v|h7FIIKiuL7qk&+pK
zNXZTUNQtGlvoRdaTn?D5RboS$iI8-M6O7<UkvyJ9LJEIIN-%oT0Kf$LVbyw%!m`1d
z@#KBjlR;?3ho&V>nqbB2J=5RJ%R*?-_kygAWV!hqucFS(!%}j{=GFA_XC^Z@LG(m=
zh5dpQ6@X~&QaUX8y8TsG1!xefVx-6b1VKa}m3SNRjw4W&8Ji5^!pl9QoLnBg+Bc(`
zO^}OEk0bqIu5hp~T#RITapfXEf2;R#crLEa?v(wEvE9-BUG8*P(@yc_#LP$31kUv8
z`nJi%&S1|P`g^2rx{%66**#u+$(BlA_%X@4?L5tfWRIKLR>uAp<4ZJjp~aQAjU(ng
z-jikLEI&9h@mgKy@}=h-8ExIu8LjEe5`z~NM&Ashc=LKc#NTSt0wm6PV~H#yW`{1i
zui}&<o%p#VrtNPSR~(<nNmh%GK&2ge{??m$C{k~4mm^rN0qs%0l(h2-eCahi^ub)o
zu~iGk=R#6eYVKn_0K4W8CQ1SI1znPglqC8ZydE}GGFEhj4I0kb6<%>jU85;dHM#E|
zB9Zx;O!CnDh<qsLS|S?Q6>n{o+BmVHar;GcC{ibV2tM(zlfp$Yh=qFbWQ8|+le<#w
zbgJsFd~syERkP%6t7hSAR?UJ<R?WOFt7h&Wt(uwtZq?Y|wrc8ENXa7RrO&UW0UTU@
z8G)#YAj*)^NGhmC-A`VV%6{6L&$RzIXtWMvhJZf>mqgjlqM&MeQy?e?7RoLmgs@Oa
zq5j2x%{2qRRc)8>flwuHdW{Y>R@i({O@H0+Wz9j9L{i&@)9B8$>cy;-(h2WQAd+55
zyb=aofRm#ZAW$jgmio;5!~hmT>Lp?6K2*+(#2XKyFa{v;-*w#N3g_K5lc-cZOzac6
zXUJGgV;D-$#Rz6*<wtKo)-&H%KaP_SQU}?Zj{L6a1+z4dKOQ>~A#JIoUshF*_K$C2
z?uE8>O5Z)6_ipL*zfZundK|iD=7F={ls&4ydZ{1(q?G?ieP`$E`>Cn#@V<YtzAt`k
zeXj}v(fw;M_5F<c3OXk8GVaIqC{eR)xdKRfZ|*pN8Wm4zk^2OVG4Nf0m2DsYs(`3o
z<XM*tAUbVA|Bd>vZX3F?3+>RlTW^3ZJc;Yg34UVNcy??Lu}Pu);QQ1U^#Vzh;b0a2
zi+$m>RrR-G<RmK>qI<<!>B7;sAi-Tj&%-vYDXIiJeLv=dTj!qV-Rd_~Mbp{44SipF
zN%<*7v%qkrCjOE;K1v2k-T!!JLXp<BA}vkNs#L}sjRo(Pewq?YzaTmML3xmrd=CFN
z+YTK+oUEL^Is{$(rZCD4iA@DCi5%WZDAQ$U!bGsnFRfg3k*KO|=a7h2u_Fj@(^NVv
z@>Ou{wCd#-j7<EM_@kJO_4=!e9;2lq8_#X5*5yj;9<F+p*0V1u2@~6%z2|8D2lV*$
zF$|E^&J|(qESj8Ex#*M9BnTJ@9X{){at*#fO3s<=HqB>xwL-6Q4fAqoGsjPfzrCO=
z;X=3+ndRw*$34K+o$VBQz@KP|Id9n3gS)e*Y50P?J|2I3N@HLFCwM}TM>+!E1qOM_
z4&7e6_#A^fSP#3E&5FsP84oes#=$kMQg&88JUi&%_S)=v+x>c_?R>pD69*iug6xZC
zJ9+&V`OQ|@{{u{n_9fMhq&mLXO;w8VRNJA^(~mm^bF9OV<nb@VwSi?4WbeJLl+Zni
zli?KHLYIXPxlu-~2Vb^p5PA}FZ7ngYV%GH6u~ns~+to6*Sj_ju>R9OY`0&04J#~zr
zZgcd&yV+l>Tfkn~yFa}DlZSlq^OJ{)<Cy*@a2H!#?Opq#S(ZSL`W3bI6^&&AjNnrc
zPHwzDPWFDgWN~G-SM%5SpP51|2!uH;XavNS_#P-4!Jl{W%Mr-uDVcQ^?2x~Qme(2w
zZ~2b9v7Kkk*Pr97XcNrYmjkRE^BvQJi3X1E`dsAKoR^>h=Dg4y;OO}&?B94b8ipIs
z5e7;xk5RWUP`gjiE)I5PzZRAsr(PCQIPGb|nChi8V-mW`6tCCg;aDYzlIOoNpoMoG
zw^C(+1UmVaEit<p<f|ga8}<q{wRQ@#C!0;*X+#ut(jAL=mPTF&1ZWw)U>=hjS@oS(
z!%nmVYQ4Y~3^OeG)UfcQzK$DB8H94`_d~A&;Z?qlC0=dcBfmpfN!@{7)#{a7n0%@P
z<wbmfK2Od@q*A|s9j6qr$p!Hu;)^+-a=tt+@h?*91h#pl7luchcTKBR*Ssh|*(&Im
zWsS^E<c?^Kv;-0>D3LqXv$1SLMIt&XXVtaq_SP^PG(mHwmH3a^sa93LM3sW%-Q=a?
zDzmL#jMtf!5$B-1Ur#q#3rzd8O1dS>!h|*x(_$&m_X32G@H+F`>uY!ASnAAu`Z&s;
z*KqDg@t8Jsf{X!xo?>LG1xGN47hHR0EMJ;sHT2Ho@AK%)Ti+lswL^#o>KmRr{bd6g
zKHV+7d*_5A=b|?L0+FIQt();onPuI57n9GTv{Ff(*kGl;K>|^lmHL`a7%vnn)x=Z8
zy`kK_0TUTEoK2|kF{s++quRTII<SL_gf_(|inHxZF0PBeE_(4=zPdN!yj-&m`U=At
zSS0@>{gvat!uuxi7tRun2HrM=y19odP;dRbcYgAMqPWdv&hcsCbUmRm?5063BK*36
zha55#&K0!2*C`RY#jCeI)th(?bZwzp;hMro(P6<Cb?C}ixpZ!+?=Y2eNuibccb1x5
zvDbPp39k|EXB2<oVrr8%q(+J)N@=V`HH7-Pk}ZDQ{Pvnd>96@<Cb@T%VD8;GBZj)2
zzGV}+m>AJUG#v{c&RW`2wW}D<<51|GIFhdTE^C#KT;Je)Ck!vqRV*>py|Gx|LKlea
ztmj@~PXtz(zmmZ%$-33VU9btSIWJ~YGM+i$3oySd|BB`t#cS+3p{ua1G4mC_OysT6
zM!tz4C~J>jjPqyRwlD|txfqU>e=@1Ulh4h?Ti*&_-q2P)YDQam3IC5GeFoi(qC^ZG
zN^E4k&@Cx2t=C^t#Gg?`;a>k4McEhm8C4{o6=bf{nYyS{W=cLZl&OnK6WJd#nP&Zh
z7Kb?(y}4sTky|>z-yGi0z0ci8V2Cxng(g=K;P9Dm3BKEbk*)gm^GNp3TQo|Jymf@M
zy|}KkcX{Q^rlQa2*ydbA#|`1Tp7;WD{rF=)KoHT<-PSJet(8|W&t1OM=0vuy^eif%
zWRco%t?Z0W%}!XUZ<A%a<ybiWNGJr6tcu%S@`>d<m0BseFNTh2+ho;2S7gT`RqeFJ
zIN560?mj$75y*sE{Jfo{Jg7VVBxrsbcjtZAyyRATxpOUjW`7uC?pTu&iD7@Y-qyDG
z%D0N&q$o^+G)rwH1XJWBuG(N5$sXbOxy|;q>CWnZACQK|(~yMGx5cIkhdsW8v=uWd
zE)?00@pI7jDb3aJ{JMVTGF-g(0_v3KWGqN%8$uv0Ut*o6heR$MP9DCn<$V5*jql~}
zC*wQ$8+=S|yO+Ba8k^pn?ymlYv@aGtI<#@_vt}>|H!RvS#ouUrsf=V?l{*V1NBkIf
zS~(jp)NQryld<X{N^jkVCW$et`@};uATa!<Jgccs2n<D<sfn2t^44zpw!Cw1Cj@)F
zm{*FCy$4veqH748sXq#CmfCIio94^!m{x#@8|xpGhyb|$G@m9qAR(3r1JL0QS}XO+
zYV(g2!jr8cPW!LeD5-q(kV|>pne!UO!r^M_kGb{&Hlmek)DQIwHFmAnEiYN3k?*-Y
zxC_h0grS;bc=-iIiOac}q9_q1&Qj6*c1*}OAYhnM6h9^VS>|u*@}+3>6KC+tYUTX|
zS>(%?UO?tp)^g}=D<!u9@IFYFobEW6U>;Vjoibcjv9r$oMtOSanqsl({Ho3^t76}{
zU!xPvHw%XMM$1L8N8ySk_e^DovJs{(&=}~-c|gQxb(A0L>xTkfm`^P+sr1YeaID?k
zHCWu{uaQqRThQfmZ!Hh?wtQb3yY5jVr_1CrkM18+dY&H_CAZA;3VBvnL+<H4C9IU2
zl$UH9Q`BsmSh}iT{bCEtmCzLGM{D#nOC(P#wGp|}(H}`rU0L?-(*8l!%neq;)4kat
z_TzihEBt1DuD{U(od??V(Ru9-;6X-WI_SL9Iq*GzEX?JN)p;6%65T<U(~Q^9W=EPZ
z)PWD40e3w-PmlXgf_^lPkY{z{D&2L-WW1840bqtKm_j{7Z#AL<Kcoh**JY$f6)$M$
z9vYGbYP$=dm@%+AQR-z*++sQM{~zMc1U{<jdi*n!2}A^6)QC~B1RXRHRANzygqjHx
zm}poOP+LW*v5{7-w9W{vkc4K^<~a;fwQ8$XTdmsuu%KdCidi86SD=CjMR4T}!{!EI
zOa9+;@0%rv*7m>g(ad}I-Syma&pqedbIz?`%rzZ-jL>8?cr_ats#m`lucks?thef=
z4agftXsn3w^h;+->C_qP?0GmTwRgp;cZm`l^d(_%fSHSatTG5y(@Q=_HLi%PTJrL4
zjZ^K@xkf_~!P(V%&Fjo5op|V#6v(v6G3kVfs^bmo#406RqYH);1;aB}bzt4|=32V)
zE9r{4M^p5jq=a8`OK&tumveZONITR-NxHT4Wq}HDLCPOc`2<aMUld~Yq6USSPTeVu
znE7<7TcH%Jv;bjrN~dHH^7mqyhQ&q(t6(AT)=1TA3M}L^^iO9_fyKScsYtdn!IEXd
z%EpPN4UE~kq$wrC6UN&Uqu|l7hMs(%t|s<t@uI7kT{X;s*nKE`twfP2ISo}s6G1m>
zR=6b8)#@o4SYiP3I#|XvSnN1E34>MS=7Km<V9AI}M01YH+seY_u<!(Sfm}|2kH2yV
z?s_nb0e|>+)iR_=Z?TMZK+G#lcQ5&Lm;I@N%dcFL@bi=e0%9$8|4h`icA~GKT{89v
z{?!-0G7AqkpE;(tF?T6-O1Hbjn2gB_N9ss14+5$Hy8Nseq)suj@}d7Kr9Nv|-Nbyi
zaN+k%0fl}i+0l;?=!Jzotj>2)`Z2x<VUTYaVSJ^W5D59!lRAo)o=<glt#*UGhY5pN
zS9TG4Yj(1lw%#S&2~#^(kr*9Tr^K316i0HICH>%po{%k3rn+_>wGruuzu`&fAn&@4
zLq#l(tXJSHRf@_%ibSDiC4X*YruQMTrdWNeZFtbgiR~qWDNj<CRX>G_c=E)xHhKn`
zN{2D`FJP*GQR_?Oj5{%Nm(X#hV+i{tgUqo%s1#o>CP?(IYL@LJ7fC}>k{Gm$`K$Bw
zN(=raS}03GxtjL9kpPl%TL9<FDZZV`M?S-P4qrRYSGn}bTk{dIr-a4IC%8BPT)3jI
z-KgCv3Hz)mi)?U#sLK>uendE7#^ej%Mx6DjnKk$1V%O9gL`Cc~<}Ts^|1{8bd=5M{
z+dKF=1#|T#!68jkB3Um}0mq8&g`n&A>}28-xm*%|h`>N9pCq^?;e<p&nX3m0z0WD8
zY~P9k_xE_nI-$ZC>Hb~?7iD>kVtlz*RUi`-w^S6Y@);w!E(<>dKvYt&#i;!y;NY(C
zl3^twq`D{7Fs|$k_pdNM%a~hBQUc?{g1($D_yxzp?i1+jFS)en1UG2}FuIIx**QRO
zUyt-|Nno|F2XT#3a)Hdg9$X}nl2jx~;BH%QNd^;23YvqprR8hUNEHd*d22p#2P>cs
z68@<qYtYE7_7d5@9CXQFqXM;oa}xst;GL~jw!`oQkmIFCr03#<QrpCnwc~Z@D*|u#
zQ~2;*y`yJ<FX4OKQJ4IV?8iRG{YvwwSyqQ5@N3}~ZkJtFmW*<0F+xHM!xLCCFG(gV
zLgngJypb~<>ZDHL!gGB6_qcFL1#5g7u;q>$HSfIpTq;b}MX4zwD!TKNDP^uSQhF<y
z`XX@QQixhszTm>8{~0bs_rMD>>Cq4P)obUxh44790TR7lO<Wq49V0fLN`aJAE~(24
zW^&TNeFfo0+1q^Ki!a|a0HaB*7VvUojW7VO^Z^=hy|q8%MJz)7rR5KL^k(>8a-+|z
z1ZKi*h~>MvgGB?)`UeL8Y64h<2I*3#>_jD~=W0Gd*7(@<4=}q+m}=2jmtx$eH>`DV
z#;iNGI^pG($$eASnVe!WKcY|S;JspA&7rO(JUED%Xigq4mCK$lHC9Q7MS7F@tQ~4M
zUC37$PW@Gm0A|AtbX6H4vBE3ZXpE(riQ!2IEJm$#2Pc5QsZy;-50ZE$iJ&o}4gA_)
z1c`{s%wI{6Sk3&bdD064Tf&gAf7~u+QnwuYnv9Bh`CaM^Pt<TPEP$-p&=CV5^&t)$
zWiYQsf?vDJHpCu@K(1CG4k(NeHuhZ%W6ZIj5&Dde0^e%sYx%L@`^u^WeA#%=cWLk>
zL2Sb&^budfCF7Ci?n61Ix2TCK<ghfbP&c3_?}jxUNYywvkxw*{@3yN04k$J1A5Joh
zlsLTGn*EZ!RI#wD6>VYuuIS5@5rl&kMNYF(!8(@#5JvUq;JmaZy*u`BcGJ`dHNUkv
z)D$&Tbs^7_Ut3~1B_x`4?PAIQSN_n$DWc{7;Kg|NrVs{?O8GEVKCDiBm}-Q?5{(bj
z<io<mhiOJgorQ&G&5#cdCqB%uFG3(5iD;1fScUSby~Ixkp+B>xl$N*4I^s-@iwhc8
z2$Mf+s_^yfZwvM7H2d{W>Q&^LSu^;0zy4Z;4$``tY4w@GEJ3f3M&uCZsA{okfy;(&
ze6D`OM-iCLm+qLGe5R~r#7OI3!(~l$Ro)<yq?ke;B}HaGRP2yT`H%-?pE)u9JT>Kc
zTFUbbp1qOLP<YYuu`jTPJR>cC_XXhpfRa{bO|eJV*xG&k`ZY0r{R(5JpmRU3(W|K-
z-UaCneV(di`I2e&?+p1>QP%i4MPA|sq|c;v&p1v^u+A8-EnYwdMw+fsY{KI;#xwG(
zYKs?;(W@BR38O1N^g4e2qs}wX6cJF=Z?0G8Kyv<5w685Ka8_JzA;%SVwA!Q2d8#iT
z7koD|Dy?=OXMH}yzs=ix*j0iDQ`e}-(B~l-TwUC0T@RR`E1*~#?7FwKd}aP>bu`Ka
zb}sCx>V081dwZSlL=OLa;q<yu>bFPTD3`qVl!>bwMbO8#G+)8?;9H=XBPz>7>vLu6
z;dY$2BiDdO$*WHon!e&ZcVA0d;5#yyII*-x0~aPI05vOeThWdLw?sy{uu@%b_^sw6
zE?;Eu^KLbOBi0{UKnm&oxV9qa#<n8YMx#Ehc2`|-T4gaeHNv^BW+-WKy?VXxG^ZNR
zy>6p^6yv&=czL5-{Py5ije}=3tb#qkH6`X?Pii~?@3lCuTm8M);0HYf<A}AL67dtM
zNmT#k9eyY3Tieyu#3mSpUe0-RlwXhin`{3Lwtt7%zeCT}`G#fd-$H(*T#*GZ`Src4
zfBge=dKqC1Bz^n_{X5Zqzs~-CgI&)QyWA~yeN*jrZkKvZF{!w&8GFT=PL3>n_-C6d
zE7~1bII8X-30?X~balqu^Z3hq+B_pPS3kP-{2H~VNQTCe9!BFNE(@6jR9_#6UlQ8a
zeVBgD{y?5Fr~4qIDECuL0N>BZTO)FBwo$*r*<4{>kr6GD8Wxv8??^6-O!Q1EHFq*H
z3A^v`HeNGn(j=pC6_pwFU(SAC)hG2-n8hxmaWZJwHTy$JZT>LB?1*Fyub`Q28F^Uf
z<ENDOnNh#Nxdy$w+h`m^@9Zk5z$DUSeo^j0`j*#`2imM~V%G}{D$Ma14bEan?MD6E
zYBW^nTvL=QMvNb1n4Nj6ROPBj1y14cZ#Q@_GF;*E{$sNAda3%mq=09mzMY=oS`6lV
z!WiB*7H^JZ^^Le6H5RXnxJUl@)iAjtgPkfjH4%1Y!5VWTk)K;5g$!>ceRVeT!RP5T
z7Oytn!~pFyzJ5wws$a%pg8GrL22SwDO;Ve4LnO<LWL+iZpgCfmW*#)He_ScOS>QAl
zT;;}ncdxO)+uPX^_GZwKH0I=pV-<;Lo}06rEhEjWUzI|VOU0?AkpnhPAYk9z_cnL*
zr@8ND-J91^u)!$%Ow;ZI?%)TrJ88kK&8sTUZSFk1%v|eZeS}X`M=IX^9sbCJo@z3g
zQ2S=LzhG_fL#*~^GE)JpK0o#D-vg97`sWd9^M24_TBOjCHq$eM;#Pmgk!g02#k=-^
zH}61mSAR}xvhI%zy^1oO{iW<$sxTG@JUtk`H`4pWWv#u=tu<He$L)SErg{hZHy`Yi
z_bMoA?iF|m^j3+cKv+BfT6_<)oE3R%;&6pWFX=@{K4etxku_@N*be-FA!TVho8)?T
zum$@L;rdck^{f<Upj<E{V`RjAiRp}OD2tR}GdP(rIE|S`BPNb->Xl*Cf1&Z~gA6*e
ze<L=ht5_&lWxfxputIEv^n<zWYJq@D5qFv(f9#J^W9$>P>KduP(NN9QAGR0Zm*zn#
z)k|joCTh$h)<#ior;dP-t*~)}b3=vsvmQ2$v+ZZ>0F&ATi3^qMtDG!;qyA18XH0vH
zxu~cSu+?2ru?$o(zJm8>UF0usW-nmx&n~cnJCbjqrog`>f`&5+$X7-JJ-T#>nQula
zohHS)tPRT*OUP9>9AvdeW^{R%KocCX6YBaR6SKD<Tdt`58E1)Ju7>8AD~&@QTG>V`
zC6Vh`BknYs`4K&34Xl>Xu){TdVr#2Bmm@%omp<d{Ez+A&2<kbxyf@<e9*;zwEodPE
zqq#vG3`>al@!IH!dk_s)-PhK`A);q@)19Ka3raYkrc>(jG#!yrZJE{yiE+eM==Mc_
zfpL68$pmk)*d@Iowkd~|g?z4<A$hDT&@&6=l~Z!LX4~VhiP7SA0xPvzcl6_<N({TP
z`Wv4O4@@@MS}5YKi8&*MTVUug=fQ9gNY42OmTE+F6C%!HpZi^AD&jt)G%_|r3lx!w
z*-qiJ9)V-V!?OhM=GzH-#O<%{F(!AR@!$3_W)#nhG3E{eS4`rnq1cZLCmNyOQDNao
zeVq=+ohaQVfzn=Ag$c3rx+~0{{PX~}8LS)NCg+STVpuIfcwM%`ff!oyzJmW-`M;U>
zR+mq_1&xqmIyv6YD2B7R%vm@(SSRgx%{1MNZjXkfy?8^;*za^E)Ss#|$IRvSL~moe
zgP)O(OL@AT$SL*5>vKhm$%x3w#<<`ap5Q>bs~+r)Pn#VHQ={!Q#9SxtE{N?(H)D<K
z)Kn`ZC^cWVuFbWl9P;7e5E@@Ajwd>V2g((J@#}r9s%LT5xmM_aSR#hYS~?;V(*0pC
zmIppiVq=ZvGF!vmOvAsa`A{0?%@W(@9&n(nJXRbj+?AnFrI0``UDgkm3ggtA-&E1=
z_9AU4tqi1oZ|&w%^Q|`Lcw_FnWCwe$hy?C%M6z(N1zAcQDq<|i18ztm@MMg+6NJfM
zH^%&QjD%gqkj?Fh-O7F;i1TL~abPf+BcKlG*J3R^N<E0mw@5wp7K>{6c7jHpHXB)1
zf+#HtS(1p;q!7zLJj)Y6_X6(-%A77JGneX$<1N^2VfC-u>di+r^J`CtJ*wyUwWpCY
zsvzuq(wXSlvC5U`u0^MS9>>T^ai2#IgU69}=I<(8>eKn^0LL=XwknyvaT}-9VqLR<
z#Trec?W8}p(#|MEf}vEVKgwkf&8Jr6aMvU<z;zG+uAF6m!7$9Izmap$&#a%_E_&Jq
z3(8q)uCQ+AwdPP2C+M(JqTS#YwPJn{#qX1#pxnRCp1xV6YXYp-PjZz;f@wl`%;wTG
zE^cLJGfvdLKr~jfBhAXZ3AC-<RZ4xCQ~=GvJSR|s(IUmHU(udY^q`xOSo65nNnjia
zvGC4~^b84ds}(_f!a^qif!l92@nWxl??{Lok5seydQ}Y;kVXg_02C=JV}B(0jNWvW
zJx*!3zv;4yDXqXMEnLitZ8b!zETgaWR+Lc2-lcNBq}dczg}D_2U>TCNbE-Xxm4U4A
zb#TLNUWO~Iv?Izv4{nOFhqa^R&1b8efn9Rs1}MXmvy)k$A*&obZb6$LEf<VQu~*ad
zg3UEKzvde@@zC=-LoNx*Wio}dGuIw&5f!8AY-`R>nAIc9>Pq9j-vZ_Q&7$4v%M;uN
zqCb%bQb&iqKz^4!HdIU}FgkF9!wSGXL|I-TYZISh$e22xC*QhYvWy8`%^}(?#ceW^
zQwAhrrS!|hTMvdP8xzA)pUj&uIJsgHi_;-yqx-D;7%hh>*JIk{XU~+0@C!W~FSBu-
z2y|1#cXX=Qa7}}-&S;%iiW^udM(_FiO4~~^Ww^?`hfTv;i)#XgvEanR1aFJ|UFkD1
zPOX`hO@Ah9alys_oYvmMR>+Gx7pQSA`J>Z;dd0j{V93<#>E08c?j!g-0}#x1O|Htr
zWV|c7h(B^#fc`_qWi9&=i5XO8Plt8fkL?UfCBj-DqxGQV!lHs%-)im_U=$Bf_`$AD
z*hxNcl#mg7C?P*O_pa?o2CXC@nKo30jAx0N5R;w_;w6MbTSy#c{}$T6MfR`H7V7-A
z&{szPMR*)<(Q$q!+CpGLIJAYuDYo!<i~T-zfG&5tUC%VTT)?hxhTYCgsh7TbtmB^q
zA!m9B3(RXSw>I+Z!ahu7y1700D+y^v=uZ2QeLlvc#vcY5XQL&K#&fii!bTg5C%|EY
zV`UL7G?bcKyp5u0^)@J>uwFv1J6kHu6OG1^h<Dr~uurqqq{rn@#p63a#o-Jo3fA7{
zsdFn#KOFN&guK<MLSZ+7&-od}XhKPQxp8TamatC#Hm#LLuFg!hsMt1|?E&H#i*Mo-
z@>;l#cGoK+C4Rl!XsBT#G!lhh1ja{gfzdtE7x6fa#fBCYjRor?gA>vsTj_rzD-Kbz
z;tryZ{qG2i4I(Vs{O`As7nK=%<$$=nI5sIS9<b%a;cRumXn2ul4xqxvKE#if7k8(~
ziyBLCK63cdLLL#yY`L)?hEq-6{ky$u50&J#dJ!;vNSLXj<8Bchwa|ESLTF?oFX`1y
zYy_DQV%DY#jb5}#A|ncJX>r^)e5NO>!W`WL<%m#}O!U;U3UE|R=TW!=h1T)>6{a(~
z6Gf%qyPj;VhX6&96~857E7GrU4V{WB`j}mx-O&H1g%UmG|Lm~-Z?D(nT9suQy_U0~
zxZcp-zeR>4tetpIcq8*YUCgfvokIj%9X-c7_y^epV5`Ob>-%Un%}*3>TIaq<37fMI
z${A=dX4I<-4r`7$>ztLBdm|yw5h^2pWSR)kz4+gKUg&fenK>V~1=Y`jA9>9?V2V~j
zE=3C0<g!&+e8)awzeC#Gz`nxinh2WSh`I}X68ygCCFPXL`aT_m8<Rs(wx(UI5<epm
z2P&@kbUPYzt}1s}6X$n!Et8H4-?qmp;Z>ftFOz)MCA^kIN=S;0Kv<JQ?fRMLuxqXI
zm%oEwHNg(ngtKa;Cd9zuS#wPNQhB_YHK(X<d2gvjBxpQMsv0<<XiLNFSnOXJ^?7x0
z^4&lMd+PRh1yTxRO9UpBLlxDi$X`d>?z5EUA>@{Ni_i0&<*d_?lWKeg(corpq*j<x
zuh|2@2^dfa#kU%5Np91tYrNW(ok=E4rAX@LArv3Pv_5S0|GgZxiopmJJTRcB`iQI4
zY$-8+<OrP03%lIIK(nZN7ghywco=V>%v=+<dnJHpr6no~j0!L-h^66JJ2KLnaZh~7
zjRL}**9^A2l-~S7Hhz@Hwa80P{ew4V#&J+BbZK=H7pFCMWY@VDL*P0x>wJsFX1ODS
z2a%c3V!RH)t9mN61GH?+g?nVuXq+w(93gF<$yF~C!zh<f?WeRE)@_D$o80-5hvp^g
zM6Q{M5LF&s8XmQE6YtZVxX<pyeeq7*=RzrdNVF`?$fHg1bDami(w)s<yg)+f7OR1s
zz`^c~SKZvh6*Spu_}zQt++gl4stY7KfX)yo&;cHR!hJwNbU7=k7NoX`JgVd?TRQhe
zf^aSI^Km6-DUMvLy@=h~={4U*6t>QN*k<M0f&*FCB5r>3xvsb7u&XRG6<$ZsfHzP>
z42^km246uXH8nW}Uh@D7t+331Sf+DZk&Ibx-0_9e^pA^~M-yxw<Z>K=``n%~`M$Ys
z8}M_}?b)9zS_}|=Wz}D8x>Xt}IqYpKIb2*)_oE{`bYkFL(#7ffrO~0_0$texMr(w`
z=0$L#dxu)Sp+l&PK@2cLdbX*=Y~}tQ@wNUIJzQV)h?1nm?&dl=67K<r($a&D6p%E3
zLl01|V$<cz<D91DTekd0)ss<S^zHSo>A5db(W#a?!Zn<uUhYGFC;i%NFZVO`a%YSz
z_wUGZ58SMm`T}NFs|h!1Y-^QOj(B~nReo0*tK6kl`CT%v$E_irnSgA%Q&87EJ!So_
zCWHw!Jtd1(FIoYQORd=}T_DJnsxmm#<K$i@wMI_@5~*u+oUV49UJ$QWwM4HHa0@Z;
zE4b^`M_p7nQ7UZG-E!hR&l2lienr*#=!p~qcp+J?ss5Ie%rAYBS*{7CVv~)VnkXr)
zoezkB#RXYoM6BFNiP~LbB6qorxv%n^zgYok9U}R1k^S<!VwdVCH5?+69_*jLCXaid
zxZ&#6f>lZ@>@&)?p)?eWBkZE){z`gbehMZWhoGYr6Fx-cERX_;L}JG91Vms9MbF`r
zKqNj-KOQH}lKY(^Lo-XuSA-{qGGQo%h<fXM_qfcxxohMh&D=YPT2xQWwfW6?YiA!Y
z5Q2=k69L20Odi!;t=_g#oj(3_p+*^n@hfBZnOH@w$c+;qO!yW3f!>IU4C5PL<TljO
zxO&;LKc+agh0YNG2>p>Oi-i6>d;fn$f2JXaH4Aj0KY__Yd$1>OtleB$cog;VjS;##
zM#zsQHJJ%gGZqpLK^?0Is;{86>P;D+jMiIHSJ72sUKmC1gUY#byP_kqv1mF%bXT9u
z3`;p#e~Vo|yOS?(Rg!YN#?GSG?@<l@v+9*tgxXELnrI_IAd<B<+qHg`8XQ&IYgH?w
zg@V2pB=EO8zXVfvN9P2i{w6ePN308fD+ECH`%<$ha9Z^t+3vmO1%cD652XdJsgAMF
zKLmi|Q!M*D6m>7l6-F+W&U~Anf|q$6#V+4jF7vJ8I=73fhVcPmhB<f;l`Dr2n~thr
z0UM%FMCx!6&SGy~hv2Vsm8u2uZ0^?;tvb4*b=@m6=HAR;C6n~W&(X=eVrJtkm$O4E
zkS-Vv9e$2H?AyD%H_8w+Wwhxd@uJ?*CYW+=Axk_cOS}^d&9+XMC%i7JTPclN07dPt
zGO!w>QJ%pA8`0Kz)wN(O?@PQ&x1v^6Mq+&zG%u0m?=!}&(Ke6maE7r!xzBtR#DL$B
znU!Vh25b0XZQ1zaTvJ-Uj+EXE%zf^8?g#69{ari{Jy$j1KE}coLrT4H@8*dO5_B%<
z94Y%^8v7z^Hr4IsDE?pZ3;*f*-9A^X-%_*rKjI%`{fdE^TE7@_Cf4tHf*&A<yJDXC
zmT=6le8jCU%4J$HnU;AicrW;o@YC_tT4b-**lZTl4yHw;nA-4tCfpPoZXWC3Y2(^P
zj?(ZXJe1oa$Tsmfwf?;Y8-wd&^QqxERfArQF0)e#bI>W}A-3E|Xw)CfZRu8SlZq@c
zFXar(TtC75JTmhPIP#rxdxV@xyb=-hrtBDH5zgR4;>AEy>>YFes4xmUbk6+DH^)SJ
zW2+4jFDNr#ExPQo;2HiA%IYArh<w09tt|n>=T+NSL94jb(YWsszD0iFq)4ov#%~ec
z@lYhAbiSaISRk1*2O0H<U(IsB$Vals_u{(2gl8{OM6#gM{|HxgWIAT8FZkU2)VOb|
zth2i7oy~_bylrVt9$oTScUwA-X*}YX&67KjK@~mFqRJ%@>dFi**ThZUJGqsX%+KPD
z<i2WtN)vTivSnc)RmAyOQ(D32I!${N#^$o_By@$?%E5p@OKe{_Cg@bWxjC>WF1hla
zbk?{-PA==)9l6q(-xSXJb-}B%+(gY;nNlnoy&tydD17%`%RxmVq=I6Tkc5<rqIjnE
znPcxvD+4#eQ*hYeGtaJ^z_EhZS<Am7p*VwNNlqNZ@xo9KAyM5P#rP1fl#sGF_Q~FX
zNcjNXw4WJ+n^1n5Ep@&@&gO#|xDv|opts;(RZBI4)e$FfYB!brB^mDlnVkEsJT8RY
z4v9cEOgNAnXv1KuA}n-jrO+t?GfPA@I$H)MtDHtx8&yZ?D)d^&$RO2O#T!g?Iq7AK
z75uY=df;f1psn;d6B0x?RlGB->-nOhyk-(pw$B)Xo#{xqg9%Ag$B@<bIf&(>$MJ-0
zomUE@pq3`uO#&@QH+wO_VckYoE#0#94G>-tL?eaIOCp2IkkxYEy)vwJ85X9Wg4_fY
zz<2S8)0jJ3@|g#U>YcINrjDMhh&pJ5i^n=|;=x5qofo60W_Q7EOc2Z42xyp1Vqtag
zRqQtWj{uJBIw!_g_M?~QwD_|tGRj@kmL7k#>zTR4YrgKyJ6u}+h4sA24hq98vuERZ
z0>P^3VSIdgZ;8xGlZnf~U9PmVxyywgn|SzH&r(ZroPVQO?XI?-qtzvrN}-RtGl_&2
zjP>=Gx5{v^oUh9oCcNLaf|Zp&H5#sBt8;SuC?TqlCmXzq$!#&}y=lnQ#Z@E3a^>z8
zN^=8GHES+1lF?IzIFUwB*xApn$Vi5-)6*hcWv|)-1j*K_?&lf}>!ms<0@0+pjl3v6
zUKJ(?>Q{J1d@ftbA0K1jW<8IGoR#D3IXuG#TbmPBP3Rl5NZYQ0_hy|f)8@2{`pnR}
zUu>;DSRJ@PzF*~RbBb9dS!QlY&d3?GbJUE)CpuS6G=_X?LUU;$_E?I(OAyf9-@K>4
zbH8+YZC7Mwm71Q6)UMB9WwrGjr4&+XZYn3kv7ICx!5Xh-B^&$ez^c-RbKz+ah0|o6
zrA)yFa_K3^It^D@8`fmQfJQ2*SxNVF9aYQy<zHG?{6+wcPAnD0pbVP6E7lsyp!n>O
zk->OKDuG|wzH`{71EQ)>JJ-ST`OPeXZ2W<PanbQ4w(Ea)DnHyE+`xct<C2OA=svL1
z!h;gZLu;JWqq%Zb4z&3x#roma5y4M@;2Xi+C3!ogPiUxb@p$A|M2=<mVJ3hj{oKK7
z|C19OIgpVPoqqB=Ix_UaSWmUTn=5<;U(Pz!xl4|20mp5BRGklg67{kt`O5>C^p&@l
zmaiWhDa=tanK<`3-?Q$2l#H~8DuZ)A3C-y*kTDZgu?$0~eomkBcEak<<f#(MKo5i#
zs6<AVBep!FB85X@+%-!Vj?5aJ=z{fFybBF%D5`{XoS`@%b)EuFeP&Id<?Ir3zb{XP
z57;QDN10I%UG~wP95FFIhn+_WQYy?VEN7W>dx>+m=-aLJOp&jEjKM8&n8cncEmzSR
zek{$0vphcYqUhxbLEm0K-fN-fZwgJ<Of3?YGR7Gu)cej;#HE%SDmZ-|EXV6Pgbo*S
zpFWu{6~+atjG9Lo264OxAFu{IB4(3^l}ym)a+lQI>>LyMiL3G)b*^f+2jd_nsj|)b
z3O)$J`ujXb#zbyUcLIRHGR1?aP)<dMD7+~x-wD4XBL^Vau~RwM^eWq;66ZEw0Y!|t
z2Z5u&We6Mt2b97VGkpl0rOsXcNI&d|uy%XTdhz$2T}&x>At&#CGb(4cxFV2|DSlSK
z=p_<&<ujury>om8Y($l#y|cSS=UeqXET9G)j-7=*nQSG__jS`xwAdMp$D8O+Xieah
zQZDFAQ&+$3qb*wb{F%UO7<6|687CG6utFt{%JY=2mOF%%{Be;JrUXv)JjGXGJ0|zv
zGFlF$dpJ=cVJ`&$O7gaq=IzG5Au;m%dI&}{fE=G`iFgk|STPKVC1u+r4*V+r5?Les
zt5y@`&u@>8Q=E<F7bO0zkhLQtBQq~gBOp?F*Q5!A3Yxt$7cLY)W=jyWOw0Qat^hMV
z*=j0?9CbC2Q46Nckydvd%I=krFM16{0$uASdivLmNAg)g!&u0an4J*u!`{62%F6#K
z<}iBwqiQILxchO;cE;F9zub8x1$&MA{z;M2a)f`bh+SLe+%u+Nom^JBoMfN5+UwjX
z;iM^YnuMh|r1;!mTfw`=+?nK%PV`6dj_Rdu5`m{xp4!cIB`^V^j;2L0B7ff%k>0st
z&+TM$fRH-tiUFSz6k`6c8w-OK{>be;QJNk$=3E1yO>2-M4iGSH=$HY^DiBJ6Hg&@*
zWpOgvGMotvWYYuS0b;Fi#$NWB&Az<%qZ6o1b+WC*>ChQmu`QUl&}58&r2$V)e$z3y
zSfK%@;Y8kzjrE0cSV#wgJH3%{2~M_$tQB)@3NO1odbOJI<bE5uvxnj>2(by*Gdd0V
z=2pT^qHE;@nFOv2m3W4*2Sj(|LTu}z*`n4!W;5o#0vI96t7G4phr55>N?x^jqqi;#
zuG)w^Mv8#7yv>G&uV7p7?RZLIZc(T!@FQONRe9XGfmOAuXIxb9TIB^^oI8+cULC`=
z_eEGgGAAW<na))OErA(gep|b4Mz4Z@R(+)LXX%<piXF?us;{A%r^dPbu|_{YAa!kz
zMy;i~Zw2p`)N$lE=N7<^^bv5!xskGX6y;W3**V=SJBSouu8m57Nd5iN?%y}@J*huY
z+o{@I;SOwj7PeImQEYuWCUIyGSX^?r9|t}_2lPk7oqJPIx-6^0ykZ)e8|E`Mj-0S{
zk-!*5B&i4){`kXqd9eQWJBiI_)JEiUWMsM>2!6YCCY%4+^xPgfj{r$Bti$x47#%@B
z6<bgIwiD2F1yDF&D7Pq~*vEThzNeb1BpSb*AeZqjLbycZ7Y@5Dyxj97zbpnB5k{FK
za{fXDo|c9e>8`r#!s-d-i2a=}J@l8%#Ft%kRzjdbiS&H36SXB_sJIm!_sdeMKsl)p
z553ttSJ7Ch*@elbj0jU8xx(U2{M*=~^smnt%=S{5E*x{PQkbH5y-PAErmUTo$&+m@
z69?%Ok`zd%#vcUk!ewO00~ft}WDcxrAJib0b%4G^gBX58`j!KTbIZ(_>{r8lY@9{b
z#(5gXGsJdhH~<%_>G#&%;cPyFOniq+euy^b;yFzx!AC=B9Rb{kA*nS@>5v==0ySU5
zI{cUo`=>q6(Fd86h3a>aa{iJzY2uwZS;ddc$(*NB<|Kc!6<`Rl`Fyxbe;B5wgb&xt
zhX)e=H%9%XO7C`ZeE(MBb9&8z!a#P>uosI4m#d@OUwL`BY_v1DmB4gMSt?!p3O^=Z
zT*uY!n~_comC7DVSUPm4ye<6TZ?^GF7?hpW%d4dp2k}I)ijJQP#`Td>eh}r)l^85%
z`D+^2h+>RLXyt8371a2nTS!@tls`G#lMB-N3{Ssx<v@q=glfjlH&2%8Hh(!5d$)K%
zF<gt3UlH<`U?F_U&fM^#1=3e82*s*ugLoz`4zTZH*fqu*er&#c!+H+^%WLX4fB9z1
z&77Bpvvx`(1nyJAg<uEaZu)JqV)v-BvWU&Jz#zqqv|Asu^3;lxP#U-}iGdir2`g4u
zp&a)0+*WVReASpUwmxNi^m3aF!cz1G=OP(Ihx8kxTREG@zLpzF#18FjHRxj<*Qxr|
zD)g79`NOANvSOekj0h3Fp{0ZPAs8wSRaFFEK^h_E0qi8RI0yf7flD#$)(*JlRUJO_
zee1kYYz|GaNA!FM6u+^5%KrC1?cYPKNB8eR3`wvYmi|fH_^<1r`Kfhp$+zquz>|=9
zuUo@Z-AYdz97qGD<y?M3(2L%{V37?2oJ7Kby&cvZ<{i~?;z(4xqNO-*+3P5d-*W$e
z=#%A;UESEM#Qn;vU<VMH=mJa=#;6YFpkb3*qt<D2p&(4jpCbH<8_mWtgoc`q!palc
z(ombUI#D?vY)eB=x&qE-B`nMr!GDN2h)s10v!c%<lKLV!@B1f+lTB!5=oXjz;WxOh
zW;cA(Eoz?od5p$2-sL>A`y-Wk8)YrZ3};5`c#`#gW#sk|xIc{{%$U1xL35x`xcIID
zj8|JEZ+Y8Dqp@s6XTt`@g73$~5*ZnhNPIFFbE_B%uAU>#nV;yP`C+<PJPht+dvNS&
zGB_n5$q2bP4}<wzxUOMwi6ig}x+oWw)!qdSQk{tuJEcGL<>E+j7w(k3y$wR3bbNUQ
zRNaMU+7-B#Cfbj(R=c#DfQr6=K8)^9ys$H+RG8e#L|zYcZ(yimFt;+evXV{)-0)sv
zsEqRlX$1C?>Bvr*3-Y09QV==Cq2rV&u$)i!*jp+4;{@0`)DE9<;gHm8^_Ke3na1g+
z%myUj7DWQG!zYC=A-f=PD??#<D(BTt7^b2y8c*p;G*GPPPs&3|l#8YEw-i!>+3(xt
zm)4Mjvc~i}7|c4r0Olw<pq$bbCCFcG%?`^_z|o)8Xp=SDF;fO_pQ?OadnhQ@TbHW_
z14KWy%PRt=doEST`Jtj$ziu3eCzdSxc%aJg%$5!j{DhcFb5X35;R#h>RexCRBC@q)
zTDLt9J#Md2+X@((0HnQ6rGFdMz95SOxNK891@=U0p8z<+h+!4Df?!gk<Vw5@;p0&{
zu2!JXvZgitUYT?RO@G0rz**Io4Gw${DKNe~DNo&jUL^$|SGC8|D2=(H%nT$&Z2)jM
zvK3&%ja1BFhP7HH&w`lC84{D<-jGR<A8>2RUoZ=fBZA$3?=_qXh;S$7PhT{A49-mA
z;sSs9CV%9?M`h!+@+bzwSSQE!rC~Q$)pMhcxR&?BFng<YnJLVU7yI+Mk4g^nU)X$)
zU3P0lMTNO>|BmK^uDl(X4m#IyDags7<!+h~JK=RW64W-$xWP+wEDz~-{9LCm)9F6w
z6z&VCzupUsT4vVO)tMX3E!20U|I$L*A+r3z^t>Gy7gFzUDZj(6_m`@?Val;pd<E&<
zoK_q5k_%8wB2)Y$o^r`}<V+Y-v{p_EK5O`r%+`5i1*jP+8}?%U^3{ZrRn*vDzGDK5
zb$3HAIwUYD3wu@x6ZZ@-Q5vz<KpI{gWs&*M3n)2bfD;gpb}S`S80GJA5EvNkkKE>j
zdg*Ea&8^*wOJ|~Np$$jW5cgXTKcz|s6ZeHlgodux_<*=>gv~WXpM?6xQPTFY0qen7
zMxc=vKA?6rN}a$pW#v1H!;Ai|*sgt*9=S~ouG@T<Ye<yGf^aaFnA{Z?Jodcgs`^lt
z)7P>i_WoYp5)S=ZRoYbfR>TjUe|?##ileUuv-tWVjzKxD^X?7)$fElNh#L3YtMFlt
zj-@+^4YT^c81HgD-mb43?=0Z@e{sCuq5AIqpTv2cd1P4*V`01fT+q?VB^Lza9MW`v
zRI9H}>5)uvlcJPH%g#(DiW$95?3qm5lt}ECOk7DKO&pg@!I?l(6lQA&jz6gsm>2zu
zoFW;pO^^4gTBqnu|2;8-{HabEoXm5BPB}lBa)nMgDVZ`%r<|5dIY+0QoJ`5mDH3DR
z?vF&Zp+Bc2Q})7_kuoHiB9Q<|$w;QWu2bY*J-eP|I_1=4%5ys9jAY6~Iwdoi5+X%|
zx_>gU3Ts}SI53&`lSJZ0$;3${(lKG3>~4HlH*tD0Wq?i*R~$Q!p;OLErX11roSjUG
z=@d^g<z1a}VKSv%r{pG6R$|FZe+DE|p3-^pk|}@EdEChq884-DoMVLmcj%P!l6kJz
zDHkMDN_C1T?Co(~s#DUFDFb!N@yV2vbxQAKic_cbNv7<fhZ_DTBojC3Zi{1v-P|gj
z@||Q#y-vwbraY}vh9*<)*C`h#Q>sbP&0UgAyayg7T%)4lG*zA^8;Nf9`pFQ(WfJ2%
zI-^7HFxO9Rou{-IW#y=#<9?FDPi%uG2)#xEwc`(YF*67+S}cSW?hQGBL#bjjq!NgD
zy5IUPo;p{AeP24RD1Yo_l}&C|l3V04H<RsKg#qoi(fZ{b!X%`rylhQZls~AlYcfk9
zAqjK7p{6rlnf{6<oX}mu1o+l;aI&9+-_x^<h4lV`oB2C1a07pH=LIJ5lNT7r-;0F*
z50vn9N#OG0@Ep6DSA@0l5ok^VQGS!9XiXGpWyP>)^Z+#Zzb}3n&<;mrLi}OXcDIJr
zj0gv*MKWQj;HyyB$6J4GpO9>J#-#kpVT>pVv_22!IskJm{2v+vTaPC;=H?sLeS3uE
z2@JR8?8iLSfJ~G&A{~hWZJzp_Z!2#Wd7hN-w&E<lpNjllzX<tuGDU7d{zeJD-TGp;
zR2}?F&7r=5C%L1;Cr*a@msV4O<-e4Jq#!WHX&VLv|1juAbS67S1^SI+#!rEv*W=K7
zNKO@qoo~IR8u>ra|9vkBKQ03Z=mCJQdH_$$0G^<?s_VMHe)B^s#FFxx?}tSd?~cst
z>g?>?zh*$o><_B>7qGb2mNJaE*~;ACQq8ap-x_~}*wTh?m4hwo1AooCY5u%-tw*5}
zIySkQMHxR+$I=obrBw9@Djt#W->`naOU>HABz7jmjIYY=icwQjlFXh&C-65ndKx`Q
z;m?xre@(GuHvX*djz5@Ie`y)2Cu)}nTq4(@%JjzZM`WjO#voaL;gf-rQWAe;t@%_|
z{x`r>Bhfd4v@Gv^%Maay854(bg-;ruU(q*#M4*-6(QkGth@PDU(Xk=QD%0{?+Y1Bf
zbX4XzSw>`@9E8ahAyEp(3cP=V4>(Hyr6v{`O5n@V6lGW(uQ3_@!de`Y{%E*fAaIrS
zC~%easNt$r*|vJsUXdD}wlt0(@W<BUGez3|Mu>`!<TpappBJ_ELE?bu&wyxxJq*zo
zSp&zGzm+_Ep&G}xkcaPH_;2N5!W_}I19_*mON1S<IGGT*69vrZaA=WiDC5F|zaZ{q
z<+*Yxy}pdFFinK!bn6*59~4XInleTf%vZUqwlHvRn|E4&y%8(In$E&teJOfqq5is%
z^Kp^Mpig4n<-IZbLn?`jG)S#_{4m9btkF9Z{-j;sI?rFuO;+j8EC4@L1miM5rqk{x
zO<yhHZ)cMd;E{h)<3<`(CtFrE4JavXWuP#Bv!<`@p+Cyl<eyUhHwv$4Roo;i#kYmS
zI*BlOs4(~rvFqYG0lleX63YF6-QsV8WmBol!s4Q<aW)nC%}1mVUeZ>YZrljn?G^zM
zK=2){FNX=4l9k^qilKY(X<G*5{+N57*W6heen={5s3w>Aa(^E$8-`(on&8E`^7iX#
z<k#RGl+k?6mv_h;8Qiac@OxEft`+SvDom^)GOg2a)m8O3Q$Ib#o(<~<j$N&B_jGni
zaDzvxm%F9=y^Pu$=rSgFkalxdXmj9N>z-eTZX**ziI^e!7|=pK^KH1_XlUK%D|Y4t
zqUtUk^{K=`U=o(~iLp#sUpl`^Jf8ebDt{1Zc#k!EyI=vwC>{gzL81`?vET`E(rwjr
z9B14&7ts65Z}51$;YE+jq?U#Y--Au^nj!USWljc5@iXje)JpK(((tbrG6-Mzlv|%4
z$eV()Fgb)r@pH_b3kG<GdBeXJ-hs!V!5eV^*%dn-oM;c7Uv$;2l%`318)qMK&|Y9@
z&7rEQ_pKQ-1OyTTHFw{N+~At$T*23qWyqLPCir@L`bYBzN^wV{cxPFg%5Cr;N3$ps
zL{UU26mIoU7{IZ*b*=Wd(WYJM;t*~)ST3dK9bQT)@UE?~2TCA}4Q};EYG#vER<O<Z
z&D%61N6kf?Dxc{HtqYth0g#F~p7w=%*UE^9mKx|$*H@e@QmzMhPXfIp`hlFPyOI~P
zUVljSHuxKV<Svf<_gI@TsTNUv3{45J`v>ymXJFtg`N`$7PJZ$NS@LsH#k|1r@^Fb!
zTMYey`O0EXx8C_!X4<H|k~$>vN)~FU4W;FeJ)~weGO3rJ6H~G1=*HOo>2A(Ugp-pC
zWI$Wzic%DCPODUURNDm4YlL<Sa4;&&ZgXe!^0xWTKaMj|BFc*iO@?(R6DNB|Hs^63
zW;`o8oxMAurfHh4v^+}1Bfairg#J!_bnZPmr*I4ibnDZWpllF(XxnnpJ;A7C<)>45
zY5T9^WJPd%@(<~&zQ??KP#wf@OpLe{PcD=*CpLE^y7)G`@fhbvv?6}?H%JBWoNobv
z=!w8Ir2%Mp?9bLF=@OwVP!#GYLViqXiBlK3yNd;P;y&MaXAU7sS=SJIqwYJhz%e?-
zu#R&kwclH^rS5GwJtzu1TeHk|A@LLbV1v3f*jGjPOx68BHnTaMXt!1&BB4nXOg^G8
zc~@Xv!*QUi@T#u~bu$&MjV-T0K8hc~!4M^xSEbL={Pr-=-WNXeiN6j6c{c|F;Xd<t
ztU2HaUW6iz%{`M0vbksTD=brv`kn6)TMaq29wOgouaJ6Ljk#|q3`zG<heQDR$X_$e
z5ts=^$4*rANp7>QX(5JuQ{Y+%Siu{?ow0`-t0~o<ekz4PS)PvLDU&CwH{nne@}+<F
z+(1X*hv7c*o4*b_3FX&SgO@`)8R<ezQwE*}yRksuH6tH&I?>Zt%7>-0uoEo4^%KPH
zvb2FuQH`9@-zIa6P90mo=n2dfrXuNKzR5ooIuVNXVhVqhs_#@M2B!z)G}@(Zl39Uo
zmr^GB;_^=PHR@EHb5j1<rdcYHf4Vc!oR7)zUG@hF_DY?PA!QzYFaQUqjs+}nj`>f{
z$CCW}H}IRMstyFcJ->O)vjWU-$8Smm*(5yU`#+p6MpB}`%ase3u!J_|ieU)Kd?R!L
z4_Iu)&SU+E+FuL~&7ER8M!@R9#lC_=#@wfvFK>0BhwQ?8YO|mCslj&3_j6XQFu?E<
zr3E{UP%W8=c7%D%%HZFsXE`qjKJ6D1P)J@5IvK6UYZro(Y4xPAP{y3H0ycUh6q2?I
z+RV19E93nk@>j8si+u?a-b4hb6Qy&?oD>VFHe=5BnI^hfg;=#B*VpaXP?Yx30=^%k
zDyv&nJEW@n1WBo?^5xhzRiZ5Nqci|wLt|)hlq<_|?!gR1j1CCV9{3K2DPzUzAirsz
z>r_m$oNKsaj}8`m8r<`FD<_h~ldDu_zLDM-B%g@Yau=ztt2&)cxh-`k`Vr>Ig2xB<
z{x;=~cD8;VKNgYtbEto!U4KQIZh&ZA5_*Cbb|qRkN1e*`9&Ic>kuXV}v`~?D)nR8-
zMV^G%pb?ie@;=9<k~Z2!D~ew3mG#oma0=Hk3x2!;0J^LXAG8TWYoMP@T9z0$@3Q8n
zvu#?=z-e;SvK7BJZFa++Cc=*#`{(bPE#VW&@4BGKcyMLxorJ(p&8)`HvqYe=GOw3O
z`G=%iZv8xuXU%<o{sZ+<;hN&%Kad1->-EuhdFUpuu90=VjY9)lC8g|_Y{MHyw$aON
z7My!EJW1us7Sn4I<`icn>v5@5w%*oYZa&tJ%7lnr`<r4udu7vZ)Ox;^{_=g+_v4kQ
zi0pyIKJ&I*Z;kknzfXhWY85FwB4pQkLJgs&nrEV%%MYt*BY!cK3!crXo(y09v3YWL
zeDG?L1OW0cdLy&qjcAMQYZ6ULiQpQbC=g|Sma`J#FkL9mOw)7xM*CA-oj=ZG+<g<}
zrFx^*#Yeji>z64t{8T?DXJxXkl7=QorLPKcR|8b`;#PzDtOgi8Jy|E&J-VRPPl{pg
z7MCMGH-6A0hYAe^?5~YQlWuh=(cAjyj?S(n@+!hiYm%NJZ*?wXzaf1mOgvKVht{e)
zF`uhXAHTyPy!wSk{VAh(Br1{{7BYDLFfN*DSQR`~0u)fJ1xEt+=^U?r;jcO9Cj3>+
zicI5Lb=x1iic#OEm(;U5P+UF2!IL9+qtS4{X!wje#APeBf`Ycd-h%eP&e+TJWC)kd
zS$#NR_)HCHMJ7kHUt3C=4%X72*vf{>8M*9~?=xiKOc8Io6821pY=R)dO%72P_M-pe
z61Crv=2(`qPy&_1af!iek$r1#=YM=_?>1>5JmR#<0o3*ZMq?slBIX_Q{@&Zz(BVd;
zQ*wnJ^KrmFCiuKT%Bgw5h61&6yR{qlB6d#*Mi9#|5?_P|$IWC#CPu%IxFVqk$?}PL
zr99>w?bhFu<ufSW`$cE6wBGN#l~<yL;05JRkn%rGmM4ZBi7!I%yR}ak2|>SjFO<k4
zC5KW{`i+&BV4$}20zbO7_m%N>h7;qxTUcT0eU+dZvp;Zj0h#7)!~D%3<obyYW3GY&
z>XM}F#H*uAN8XUH{$?vfcq9yF^lLPiq-<R%o|HLIRm&>@LCur(G$ddfqWDq${R(`?
zCi{B<-R&)Q%DS_3Oj*`)7kgAUOOKo_&R36WryD%J0{`7OIN9@mih_SUWRB`<%2cG#
z^JCA))8Z<1jQL>l*n5b`bWlW4D8gEWg*Hn1U@rb9&PR!oI6;Wb9y4k4i<D0kXOCN}
z%uiKu)>M{t`&Ucrg7&s1?Hh~Z?ITpIRWaY}@%cP`t@FNGLu&h9gMVL$PfnuON&M5}
zJ)x9nlQLet<o;hFS((`^geX&u&bq2w7ZqUP9|fNA?qw-pehZ|cV(QJ(^&UVyl^nXR
zH{tJ{fcF6ze_sXcqmW8~{_-*EP*DH6^&aY0K*3wlV81zHz>@>z+C#mbQ0|@B?cE%4
z;EC?vqut)yM+=p3w2#izKXS6`jIOV-rIt8<u8rBy0(0&x?0L3C5X`jhs1V`j7OYt+
zx$jPnUicnYLgGWI&57aJGaJg-M)I3PM177z@|#JQMGv=~CT(dLd)^;Gzr`V*`#j#{
zgV=H0Lf@poP5PS=`UG}GsTCyk$G55yelz5Ggw~aM0pkbtqWJjy)sn54R=E?xI-Oq>
zY$A@b%CLTe<m-|m>`D!Y@o8Fb_P*#f@NW{6O{|}+%3HLd@~y%<L<SGSa)(%=O2ygJ
z2wkN(ilJL_{vaFX9%~34gG=JPX-{eSR_g`nr}#oCPS(1by5a*RKsuJ!%RTcLDD+4S
z2HMBKy8XQztJlbA#Ao&<t_D{K*x-PUi6V2Jj6~L8?FIl<t&794t>R4@%77=|rw;F}
z5`mnIrOf<{qF&;6zDV8l?#?SCgD)irNjTZ>8Ptn--d8|l4=%X1rh^gwf)SRM|4W#*
z8j35{lz9?U0=c-{)EAe_{`7@3i2K=Cu{;D8A-o-;ayh*OqUuC3O1c`&?6xi@6A&5x
zy|X`YP?PYiFW-z6;PJF3N*(DBSI|68X{jno%e>ylYsEa}=%^HG!izCWtZ!>EjWd9Y
zU>f@U3CUFP=f#tx_*UzeH}NYxb-IIZf$stB#%c;%FDMv|*unBq7r1lIY4ySEk<5W?
zU<dJTx0Y9vfFcIvwZ<Qwxm#J@ssTIx!le?OwlnVi^|~yaLye9KdN+Hgs8EDLWms9N
zi$*PXW}!qm|4R-SO3Y7`t=e9EN=L{X-aWoz-pEM5bJoW2Q2u%E*s1Vi-h#Kyf8Nz6
zGNFqjyy}_hj;`QNIX(kT0v9{1S3s(o4o9G`F-LrJyym}<NaOWQf3c+Cle;hTNepK4
z-+m^2*=^mca5{KgEGYaAAF1|C2Ug}@1XE01e~zH7AKElht)sojEiC@b9|}^zMJyBA
z5x4!f4hUw{bRZ|cO0uE~GVT<r;5FZiin3mm)hgmJH_YQsR3CI!&v3&k&)^wXr+RJ;
zZ$i0>(+i&F>wetS<vQYUHj~o+<0dB#wa#YZ5)p}iO{AYQ%Cyp(5&t7c8*0L@8Y32(
z9}CK~@u=n;fj-?NhY`9(WmhcF4%KzbEB!72ozGxSsOg8~vwBk!WE)0qVGuaLr%0*V
z+Q{WV63a4MbcFRC_?%>LZ37OPH}1t|o#kNd0*_e+M(vj%wz&gkySYEXz@&}X@ytMn
zW@D`8T`6o#IQ@0LII#n~+84RKxF@$5b@-f|FLYUl%Iu-gQC!+tEvGz9-Ui3bg8w*T
zzGr1iqvazaB%{)#8)M2p_H+E;(CI<a)i6*ZX?~KLom(w0pGyl?*nVMY7mtyA=AMy}
zp%=)KTz7yKJVaV#!3aKE)l#3LGa_2JZjv{_2C?W-6*o$!tf-(#O-FyDRt$`c#pyZm
z4(Lq%$z--_7;ejGj&YR%nY#Wm&|#jrn!h!%{y;MhWpeC*(KAo^8=nNk_e%8w;`^yR
zx)7bP%=pABW!@_0MJuJv6n-k@JdpEEt$ocEQ_gLZ1%OAaUs4|{eli$vxikSTo#JmF
z?PpMUtc)Hnzt)%I<1t#>+h|b{7Uzw01Oj7T&ATEnT~9+`#<Iv7rE+V$^wd0atq_>-
zh!6NEbOyTqiS?JCsxpBAN|7#vrd*6%x*M%RcTit6#jK;ovqtnI8zF*9&!ChH%Kjzc
zemr~U4E7AGi4Hb2eP7W@iQqhMirN7#@Gg0T#KuW%&`X6G;JB)dlaK2TH{KXeQYl7g
zfY7h-h@LV6wZ^tkh2VqKYE9!sYiZ1_ZRtxNMH;YfpG*b?jCHUb!LfAzBn&cE@*;L5
zfa@oMQtZ5bx+rSq@%)OK`8xGG-!n!1F7ixOzso(-_=VAs5y4)}_Y|Qr=Cmw{b+Tmy
z1sTD);C%%1lpNoJ$(wz!qT;R#j9N4RP{*LV(ZN2xlo2})i??L4A{cY%r?mI~NNl3_
z<5hd7-17(4!@n1QYS)>k_{nO7enrQbtLq<!itYOW;0RxQDIZAkla#+s4pqlqFX??Q
zB|)!6K?Kb)d>3RnHewi|;Y`_Akwe|r79O$Vk5W69+SXoLl@O;0Kz-gOwKOuTziOr=
z9PCatBW@QQPL5>m2hQi%i=CCvVpmkP&?RgAals~8>o2paWoI)#Q!=KCEJ*ZS-o4Gc
zv!Sp^o<b+q_?&yGc?j3kQvwk^N0wYsiIdW30Z}4|g_>wx*xgx+!f0_m<n!c450ftX
z=02y<bz$a<lG~hhigZNwxY|KNU)ULneDb$gjgLYfJtm-r2lK%>aM8OWZ$8uQ(F2kJ
zx6+KKCPu@Xtd-b#GB95lT~O^tD2mo4C$<W;Nibj;of5K@w99z1e9q6*E-^E+XBokx
z02Ui2&LWtWZSUaX7CE;JnHm?y(J94r5w_d9`ung7jNb`&J_Minp+@K?8m3N<-w6Oj
zACl`Ip6+@CY^wc&DGy(~`(cGZJ>&IQeW)ay{*EL|ndlpmtxvnkcFHy=fL`P^(G2SY
z48fveg{Vl}m;yO*gVMY&YfEC@)7(&wq?xLXoXANxe9n$EnK8Lr(MN1@$0$W4L0luW
zh&-bHMzsVLX)iGkTLVC5kVjcq4-=JeQJIq?uT8QYq-#VUD?N(9-o&>)tBen9dO?Vi
z;*R%QJ3gbIw^6;Er1mLM+y4!`+VXhH{(*_1>>u!ZqP>;lJoq>3vddI2(b)z@(zLz?
z_+#KC7rF~6<it3$OlzRF%1yw6k%&{ftsw)InTAK>5TtQIf%IaVYy&x>^u@C77TaSX
z{13UkDD5AE(;>3^ucdY&vMU3v;Rob{Km3yBHQTLTtU{eT{D9=<(-8TAA=o3c_mZmU
zCG`nNZ4SzL*a{WiT=bEQm#szF>#6Z#QmLF-Fv}Oaz1cgj%b_y!bL-~o=!DtAW#cnX
z?z&L)Qh6;fcNYe@O!uHOP*E0n+LH;RSc(?ge7E7&ggE$n3W|W%929Xd@I$qQNP=UQ
z%<*HMA<_an!!UkjXDCv?^F4m`yT~(MzRzAE9cir|enIee@umQ()U%Oc%I_4_K=27Q
zC4v>>q{{-g)*!*2Vh<>83Hg-#cAo9lAT_M*7!p`Hx`XTOJ#M>o-!-Z{;0iR!R+K{z
z!s!>R7kTD=HH%6W>}|;8=z?ttIa9J&?@;GqwX=Y|pc$L(d5w3<UMsr|X#`NXNP1kU
z(B>W_)K9FFU<lONj(qr0%7+7juy3>QmMQ&Kd)r=ClVqAUNye=^LhG8YUr*bzyV*_c
zXKxEUf4K24b=_LWFCO@(G~$NLMbTrUE^ClLxAHynsQSSwhjj>CJlq(N!N|KF%o&pX
z1%YJb9;XPnpIA>}+Zp{170RcF_>|A}szr|I@g$}2H>vuE&%w6mMljd<gfK@acD51f
zgl7>(;(fY<duY0xi+?=Po>^FSBeY&}NMxo+4;~`32vMt?a0lW|e|q)7%Z$)7G9+kD
zrnw5s4HZ5j%fXF41?%s=*kAC@bfVa*oWV_eHb2A2<0F+l;_WJ~#=R!6o`SgY7Ocm(
z*WsA{8t2oY{?eN0KFn1F1&jR5B@w+MSEWU~Zef%&+uQ{gw7K&yY;*T=$i0Bo1#H_-
zNlzjnPth=0DzA&?JVR6iMGPDR1b;i9c>L$j&@u2#NG`{#&*|s!Ja4d{ujBbwOoHT@
z!t)k8eX5-&mZRyJ-0om8Px|_t_6)9;A}m@DIw6OtGr6xvotzk<{~=Rp*pTt$_@zJe
zui?<om3PoPKwIOp@PfalS&-^4ha1CjEFf9Pe1EDXQosZL$X)62I;_h;SG@?a?NU4z
zDiX^r6NoyA?ut8}3Ss8G5si|9e|6#Mml?Gfgs43rF=@c}GV`<OC_&R*rI8yvPFxq|
zlutPnDy*VuZjsa7&tGSqiG`?50e;gB1hwM11N{^1teb!vf8-XoQ=c!_at=bf(#sq9
zqCLxv&@_cxacae8A~-o2oU}>FR%@H&hQg&mOr$&r{GRpbK`Jv_qXt8#y~B;a6`%<n
zuz}`cRSWJy#zF7f+zIOSGmYa)Q#L|<e9Th>I|J2Q)`f;e+8?8qsHNUvznp$NTSusm
z#<&(y4^^NcYYVxhoWtrb9W=Mf0?N8d^%ch22>q4HAll_uW%(nIc{p}*R5Y*Rdc2V5
zS3GkY5UZM7lS1l~x-2L>#Cm|bmH`r*u@ur|y+s<ApK|1Gggz%lF;ol_ac8J}YT``t
zO6j?<^+V(r<{dm+CU?#>ECn#)+J!Yx%(~@jwk}ReT90Ym3<!Kjn~f4<i%Wd5ZLZmz
zhSN|U5d}6`&&!Cp&$jk3jERISv^I+*M!VA(ns<pPHkOG>R8e#4WU6FI$yfO&&og+I
zIIY&g@ts}P8B!x=iTX3!{1BMT!K);%iRUJ4$&h7^9MOO6vHDX0gfQmzl`R_<b4YuM
zE@!^WR;t>x?!~G#)_%Bg<xzO?bG4X^P%%AMau9&>hD*3sW#w04@`<^o4Z<OgfT>1}
zrC2<a89pnVemFAF;aFE%vn8!;(CwZKQOmBO0i%8b%jGtAh})AtWfGQjBHRlHGX$$a
z?$!01y@^5f8u34>&W>Fx`~oVSx|5ZMHL61_<ce9o{y}a}S%Ed{lInv4gIjE^&t2Gr
zMi#006`Z4-bs>`~vhS(DMOEQ!<$$yS?_@PKMRzbYYP&W<WpHFFaZo%FoVrvog(HSB
z7GbJ};N^IdOw76Xy~&7fVnnhk_5)Jc|M&2V+EjtX2py1>7#{KB4>@LxJg8C|egRX5
z`{P4&Ec!0r=N)cb-)$a(6J%{RNYNC^V*MzEsQrnL(R1jU>~D?FP~5si>N82VuV+>}
zw+cQS{Qxz~;l@qf8>y5=zJGKh)4oi?qfi=Y=1=28(!hF_Z!}k47szXyyq+en%pvx*
zyaJEfo}^gk0UQO@bjKW#8)J}?_H-+(O|hZ}+4!aP&GaiyIE8L~n9_J7-=aP$6M1RG
zQi>|QdxN+ZS$`|jjnycsIpR_Iy0FmeXc#n>uXF6Ls6z$#v-rxoY&cP-ZJPb9RDb(n
zqU4=Y@@o6*ApLcuD!HTKd?|T}{mszd&XsTRDLq{>oMLC#&FE;h2N|qpjU~04B#kZN
z3Dz}6O<Ly;=0GP^8vM54TzD1%DCT$`lw8#P2*2Rls{-zx)FdWhwQo@>98!6dM%M_v
zLdu8-Wo3ordTD=n4CWk@avB;bM@KHcX@KC{IV^za)qI~<Gs|&&@ame|J%gQU{|e;W
zBqI8PtbonYcVG(}e<`j0RwfeiRNJ&faR*Sl=tl@$LTS>kly6(DH|}JnGASa7dvPUX
zJ0DEckPqeK8f9Wl80|g#$rT_M^C{~{xoT&5qIZe(M#hKZw%7|)!XE1xA)0)cD<9O(
z=mWsf;Z%_@uL&`70Vw|T%AN<AL6r5VC9bQLNk0Nxhas~m@><eqL3HiW{otBiPvce@
z>N8_xIBl`D^Nv+t=D(}&*_8S$sqdO&)h8zjv&f0zjUqY$W-1ppGH_BiLmcU0tMwq`
zRoPYsI5e7&;}741GND<MaG^g!Z~99nz%&|g#g=J)<QVYqhyD#bu2sB3wZK!u;~`b?
z*TKW_@9OKBQlEmys6>70d`0`!V&yg1`WHAOH?I)|Gcqx~i+EqXI4*16=NskB3A#h8
zgU1n>#mT*q!H?w*ONq+aJ>K&~6o;zPK&esRAG7vitByL6p_IKlw(cA{t#tAsuM}+v
zm2ckXyUytfd~7vA2(SweyC0EUbtP)E32hF(BkZBw3gOniQh)BZsNYHb+hmb^%lf~Z
z5V)JO*D+{1+S7;gSN@fS2Nv?^C6FO^&EY!sVW=sX70XknXy%zYeB<tDY=ANe(k%$_
zcY!7x;d`h=U3^7&#@_M4CNq8KLqf8Oooz0bM*1hbiL1vp#u-ju!yB3g%FT^MkFmbu
z^18Aw)$%$%k6K>Geh%k4>t#Qxxq=lEH0M39F?J_HXjwU-{B~Gp00eKr&dSpXZgFMA
zcQLxWyeLLVZH^p23>p@;pZUY7X364KloD0v82#BM>)kSO*Ge^aWyRx5gv*%q2!yU+
zqxtTvKK5bZZ%E)MzZ@nA@fe<KlNAC|h*pCjk{G`!`XI`X6o)cxl2p^xXZrDGM;E5Q
zj~1i9TXG{x+}0&GtG~0=-&*z8RDUDt?@!d<pQ^t<SAVCgzcba}->SbA>hE>(S4&R%
zFJaz#V%zobN|DwMcng|>nY^0361~X?oymU7`}@4hw*fqFkmt+1&R`ZVuj&^9ai1+Y
z`%C6=c4nePr~BfWzr)KgJ97{N&Gf<g1)KcCaMC24wL-UXKF_Dhv$T=J%klcf6@)EI
z?`l<FD7KPf60a})LtW4aEmRC&dT0E7n|^PPzh~-(K8U~H>V_dq7a}A;D>L6D#uMQ^
zjgYtz=?{O@AMEr6iFAQ41?=>Xs95L!bGP)@6X`M&$^6$P>Up+XdJ*XiC{K4VC;<G9
zJPRZQfG6n}mjYl9{Q@L@r;D9w7aN?+=?wPg#m?ypp2W++);Iufq?o|3K~k99b9sJA
ze{}{==jB=b;tKZR<x%~T78uD(y)I(ZikC++Cnx!ZI^kivDEeic@Eg0hQF}TG`ex+e
z8ecs66NN8_-J!OuMBxi`f;&<8OcIugRHnj-`BdXZqP(z6l<#U$Lxg|nWFeBUM<=8O
zR`9Y!UJBqIKNbFjgy-~E+TW_PKawc_rcS7{%Nw<?kg&8T?W<5gy8n~;df8}N`zPE4
z^^H~UX+~`;@5(<sI+hJeuQ$FwoT%+BGQ_ql6<gPo@mwU|nUA65Jy+*-s>wM+zqr)o
z7<MheK1$e*#$@bj{heu-m-Ts)U0&Z<slRV%*7XnP`)l$n=yd@vjrzr<mibHiB`uhx
z^kC7jKwjcSL}zO#FSDzW#k|0-#t8j`93<Rrf6V9kHv41H!^=(j#T7i2mkIhME!b<R
zc=|`r)ivK@7nb$@eY>y`sv`&VP$s`o$XIf{D)W)0!mLZMxnBC$rsL{BP=H&X-qUW{
zsFnC<B<ycegJ-5bAwgYiN$N*BmH8YhY(;(g+lg#vlb}?Xq&6qA{a9yvA(8Dm$#x!p
zlrL8FDvd<9>+hghoyb!4={F>5n64Ab5;ati5S0*SdbmxgRN~<l<9?$24{I?(8Pd>a
zAW_nOSL+*9d>^*hN%_0vTC)rncZK)W{94V*%u?(j{IieHnuA-|%U@pcM}$O9y!KdQ
z%SD49+*B5Rc@>Frf^el*l(5*w;JTwFda<Pq-VCG6Z3hcUR6&ilTW1xi)7Zx)SW)vf
zcet*J8lp>R1jBuzUG6CwBK|b!0Iltmw&zD$&BkX5wF(Cgmq$kav!-M8^gd=2JK!{S
zKv8O0=h6ol8$W?!VXg418^3QwQ6NzBVRi6MuO1AisgB@_c1zZ;X`r-x1%m$ba3St$
zIq#I8<`3NdyjSU-%U`hO?#q^5N$)tRYPd!HZZj4%tHoq2*ig_?c?SABfm}Qss8ZkU
zTago(7rU33tJ+>Bwkg3dR8tAePFy}f*9iyy3RBc&_5A{HX(k-zyWK+XE{rsKs>Ad&
z)hu3d<7%cfy`YW^>sjgmK!KAuNrEMfzJq*YH@l<_+>k_jSC4M~UT4y}c^>|$%HA8J
z9&OR1f;nUJcdBSa+Ej-nK2<CpKV5-SfJ}@z$?`Z^MC-BLs4pQX_hcs=;V(rCl$mfc
z*=jut;Z}T&c#E2Cey$w~Jwd_z)#9OIgx2y*c}L;YfWPqe06a$tP7VVLCrp13b5Umc
zk;mb6)Tj&34`dV$3b+e%g1=XNF}EaJ4*a_C?BEuXU9s&76R_`oN#d-*a(4@#<_-6(
z=@??vyyV22qA9~`_T*A!4G3dgo7cG_nhi)nMWQ#-#q*3>v3-k|+DIw0r8Mo@OkGx*
zDl5N8k7f)PO4nXUZUKe@gzamy)p`=pYxWN2PhjvPDk>}B%I`1Bj4{NqVAkVpoR{cX
zY0Z&Smq_%PQe(_Y>DsK6Z10fXtt+*}Mnc~|isB{Colz7aR5{u`VxfSzW+{JbnlioS
zXgAgNSt2wsUhO&Ev&zDZ*Q^Q<#=93Gy!-sEk(z#egwOK!w7fmsR7kAqYh3=*n*0OT
zQI9`;1RY=v`Hiv`?r}txavtO?utoYWd!!!bT}2vz^d)PFXd&Z$`2$%>!`GsKDCUOl
z(HSbRd1=k)jEtxc(CQ~qo2aK)qxw<!p-yPK6_o;d4u7jgC^LW8r1;Qe?)~LNL0svK
z{!A)NZS`ytte+GzYvpT73)Xv$afEF5<U|iaQYEVSf(8YIW&jX9cvRsSH^{+%KwUR7
zFgeN@@)iGqDcih!Im&<FlmE(p;NN%+$UUNvE9r`O4J7|1>5-UlLy#nL`j-vE{)E<G
z;f)m1RA~s3iV&tdUM2|%f6_Jl+TQdiHxn|8th1<J%5kQv9eE^4h);;NQ|Vu#J#8*J
zl0peh#Ocyjb5plAAclJ;OY7EG>lQ{&(_0x2T3dC5izTQ!zn0s;7?&E94uWT`mzwm@
z2BK&YS@oo1>D^W_9i2WYwPkAtnN^6rRIyMGtDAnthMykKT@>m*9<Q8TBw@yQ`u}I+
zIjF|N1TmcWB-!Ih?=~JaRaY+rZ}oVdo!D(W&)x7}jOQr|CB}2I%+LGJs|MsW<r+SI
zbz(#xtVCm(lx@mnD^)<QIf#$Rr|jixpzsz5r}MvMJ-3)cB{o(H!&GdwmOLR1srXT|
z79<Ac`Wuh!ZLDrS?y=GclP<si;Mb0asPXS8F&c9Q>)NT3SD-`-)@ensd7>%UT4L_B
zHm~AavfB9=yOnTb`_oeQTjSxA{-8l#VtyRM$$Y<cu%6zg>E1@isNU?iK9)pCpdLcI
z_2uJ<AuRhl3W!8=g?}Yr=Y3Y~S<;6Uq{n{c57$3J$t8t=#BaVOr@@AAuXR$~Q@Ay7
znMPUmW$Rxr$WXRgw=D10?JwD{qNQ}kI^*nk%_<~0raLc`4sa}^J^SQpD$Uqfbkk+s
zK)O&Wc@Dak%5UhYMBnj>K)$=mgNQB-*K(qOE1-3@poCswAS>4zp)T5O?K+~m3(B1R
zgYJyYQPY%4FF+m9uc!z(d&NAXL(`7jeAH@R=w+>XV|9K%(dfD64rT7pZv8^H32d#$
z8BuZxT2GLjs}Pd(<SU(UC<BM6oZD*tLml}=Q3J={W#*$$!}z=4ZFE%PT~J@^tCsix
zw7^SitbkQQW5pE9DHVp)1j#ku78dvmPz{4A7FU^3vX?ty0{yrVqEDc&VrObP`b^I=
zF(`1bbjJT#@MMoQK$u8#j}Wj=#<9f;-$TZ`-$CotxP-=0yq~|CRlFHyCxBVze(P~W
z5jnqtezREYSg1!SyqLDedAjr-)<&#J+WOsSh1%%Paj9P@O!~-+!5xBETbB*6=U`+;
z;2{bNskr1)u-ue_^TBt8793|u$X)rm>LFPi_!BHszp^F=K0|@0B=I#lkTY9j56R2l
zm#Mmq&@hVHb^qWeQcG*}=c=|n*69OOfhdf#s`b^=^*ak$z5f95T=Ey&?|-|1cR^Ho
z^ghTgJ!%s@zd8)HUR%K;=u2Lk-)25hZ7NgLgv)L=lO`z1I-H5_T1CiwPjE>q@~Bbm
zi(($E@F{;^bP+WQy;Jza`_u7v!6)7yjK2#$@gB0@)z+r=0UhpuK+Zd}YdX`3uMn8T
zv=)gdwcT2|odM|8H_qHa$HWMCnqCM(u>T_aw_yHPwlr{WSfX&SHO5_v*13s<dBGQ`
zsd22r2i!`xK!0QPNp=E#NlzqzQ)0Psv4@)>#1$K*@F|78xIc5Z+!fK*6J@I;24kPw
zf{C5q9C4YC$nzHulfS22B7ge~<!{{opgp}WZ=z>tPtW8@r1|#rUOb70pgrBqljuw0
z`2kOcH5zN?h9<R4xa`ZCin?V9@MI%JE{b>5<{u>gsonDr`-c3e`o9zp2$=@!PO)7_
z_Q8*BtL0*`<Tr^g_NdZgZv$B92&6BpE~@{77zk}O(+^Z}D0i6c3W@qewH<MO)lQ*x
zB&37ss)N~bJxh{*ip%d@PY%*4`CT=hTgLIaM<NR6z))uSFssQFhtv%5m|fY=Uw-ku
zG^bito)muPZmU|i{R5)+NQbYYZFKHe+Chkm^=qMzm;j#OGK`0^Fkj3GE+n)`W?JRN
z-sNtF6gys|Fv*iS^DNuAd#hEU$_78eoS|k#Zi;nFam07NBevtK`iTF0Jj*JN9?wFS
zIG~G<2hW?-@%&uB9(z1a8ILTrV~^(&RrcGAN9g?;S)>sC6nk}+r%-!#FCDMZ56Slu
z$eoKAO#<Y<5%l^9xx{>BinGi6>P%Ls>iKL~Vzwn)6i12p_zPLVPV#oo5Q#-NOkxoh
z0c1b6;*|C-kx8+jp2Q1NIL_f`OPDWQ0=YV{q~?GdNhE9fxsl>5P$aA14f8ds$udT5
zNxOLJEN$7m-KvnCUkIvH3Nn4_RqAUMl~IKkETI9ZHP(<=KAOLuRA#Q6AY+O2{v$m>
z^}u@CPHs`)v<D_dMyC-!%zW4IcW^;n!B(F!_AO!xRTg44iM7r=Z#Y9Np#HrfxYtBa
z)#UaSycv8=*0IE#Al_C=`|4^q75_xHeK8T6X*p6jY;9Mv;r<+f=kGHXJ83rV$XH=Q
zvzlE}_b17^wLHiC>it}w_ry2zFXEf|urX$vK&`i)3N&q;0F64VF!O9pb(l*g^lL(O
zOIf$MLzgz+h1!A#OjU-pR#jrQ1eOAM>^YgwMS4CnrWfh?%&1^-_C6^v2Apx%`8<YE
zAMhA)$2!^Z{{=1MLP?LoVbc(lE<C9~ebQ`(o@Mi0#X1T4-AI$M{{cZV(k{N@9&xwX
zgHf3u?n1~M6|+CLl0`0W(DR>)|H__rTRs~#>{|-@&)(SqcVi6@DGLjkCxz8vjIGuJ
zOe{Eq3k(kH)Nr5kzc&DD!8x9V<k8WHmO=P@!V9#Z17)>;k5C}oQy_M<tE3|AXxH#7
zcC;JS?|jcT^}EPpso&+Ez5F5!OD9_GmZXjOyz4e}(AEjw;_);jT=q4pEhCh}>Y{|?
z3@=xmvWB0`D8!$$-3SF(F)0;3ttylQBwgW6<E|YgJ<rfRKOWmE$ue=YcjUfSj>xt`
zfcz1BHAyt;AM`xSuOG9s@$yUhgZBG%_WL~heTw})$9|v6FDI=BM+Q!+KImQO3>+_S
zqlw_d{nY+P62M(k2ynx5R!IGN>Jz~I5i=ncMa8fq(v@evWtFqPzRHvAD)%r-Y(`|{
z`Rg$AFB}=jEcCwU4D`xhS4byYYFfC*s3p<Mi@v@}vCENOK1P+&OI7E$82E?7zjola
z+f|lIFY&RZm;Unfu`~2ugCAL&Rmv`}O!)?qrzAWsb4++NA$3HzEVKJdW|xv`vdYu5
zQcD`~k}*-w>5|#Wl0~|tn%464P194_T#vh#YV(C;$=qbg9=fDLfb#SwQ%gP?FF8F~
zatM9JHd1=~I<w*pUz=IGuCiRlQ5qhHs-!eLJ$Foa9QjbD_p0y~j2?DZdIf63VZ|i4
zQWJQ;DD_=3bSt3(1+{PqZB=H~3kWhs?Ipl%Un{4_=krinK0T|Eu3_JkWv?U{@mEQ(
zF#tGaaecU6LSx5`lr?GnuA|#Zdn|#$-IlKPIErvsnkuT2EX-u+?i8q2U7<+G6f~q+
z!gU#Qe^0wCcxmF#e!Xcm2Z~C=ql;<|j9qp<UyYKr+*;<AB(Z~V*I3@d?@m8Y>#6rX
zh48zG=zoetklPV`gQ*c`=708KOC8S(C8v1X+-|ImM^BAEOp8CvP!CFWlVcd~@X=Yu
z9L%wl3X(P<xotQiSrZ{UDF9N#X8!!kMvf~}5c(Vl2`#NDEx(rdc%%Ke?~L!HzD#58
z%XG{and&SJSK<6EfyAKfpIAlINm35aC|$FyA^JU6zvoyv`h5r=CC$o|_nN9~ECZTJ
z!?T41Ny)+bD?>l#@+hXp|BJnMfseAd_y3<<fEZ&oYSd_{t~QZ?1QI}-AeUWo+hBkQ
zAq1s`kPAr-NlbPjc!A(1oUCDi(<%pBYduy^b6RUX)k<nLaucGpig?3Y!7EP;71WBU
z2>XA3=XsvZCIrQ{r~kgruTl2%%*=PbGxMGM%y(v_j5#x2+ORU+DrMAhDQ2#)Eofg<
z?21H(y<*xf8NOghH4NCHltI~fY1M1lzS=nNJCU}Q|Axf5YZzrm>kg;*vf&&#nswVn
z&eq8IZW;OnMQk}$iW9a2#N2&bC~+`9EMIk|FC$O7Io{sKIY=DjYWZqZ(O@M-&F{=S
za-mp!7_GiX3un&ARGCE)L*K5+PAc+zd-Z!MsiI~l77SNpz1Zb0acvUK*9Y^3<_*-C
zg#}##Zo%6Du3}S^{>Rq5m`Rb#U(Dm&Z?kXHc_Bqny6Y|a`Ikb0zMrsW&I~7gjaaq3
z?)j}5y?nai{WGk7D!*U`Q<_6Fe24Wjh?bP1agu;00+%sF!pBUfM!;XqD|uQ*e<Z0d
z2vMHA6#hZh&54~-JyoiW>X|*$nJ-mr))9mISli~?6p<B5XDZx97kZz5?Eu!l#~ft6
zHnDv`%}<&+R^qPT`-$orS{`ISI7p5z^MIISItvteHhOT9&WUvELSsclzduvc<c_4y
zIYxSo+mUuA_D}B>{UhZb5UDw{3RIo6nUOlcm>?LbwTZ0*$g^h7oh@nDkDSTbmg5w4
zlbk#;M3^%pOR=mrBi=8AmZP29d3$IEoiiZ9Etm(goaxG(A;F$M7|TRqc~>aQZS0O%
z#Y*yg+#oFTvt}ulJO4aLF?#+GEPoctvUUK=eV7NvGN-suv1}NO<w{}sU?|Js16Z!@
z&r%wZN3B9&AB^Q?!t%GFET6ihf5J2Rvy{H<(b?HWs$Bhn96zD{?EMgy+d^3`8^H2?
z%pnO^v9ws;Fc`}gVfp(|mfsq{@(2A{s#wm<&(4(`A2Arqal-P&P?ozd?w@dn3SzBl
zSpJ$zhFzECC%Rl59ny!=Im%Q(nkd%hWC<<;spk0>7I&XX6K~2wM(NFcl|_lgsw@wY
zPtpvEl1&JCQy;lXa-mtbnoaV1`;*_)N3OVA<a14O59C=)F@&z|HWeAE19!XVP?>Q^
zXpC*8LTCAUY>zz4jp<u^5}4Olqi)F5vC{X#>bC=wkgYv&G~)~SXUDpZYbnrFu7h@K
zcih$w<FIqv9(iN+TSAMW(YinYZ&`_DJpG5|O-v*!ZI8&V0hZ~^`Kq(p@)O<iP;uGn
z_f4<KguznKJ4B+`7lV$?K4=;V?Iv!|U`=8X|57`3R>xqH0NW@UUg@r8F(!NSB2GT3
zhFEDeed78BZE}|HUggR#CytcT(X&oK;vFQOkYVj6h+<|gU%&&aM&E6Ty?pxCCjJ@V
zN*CNTkyTdWO)1qZ$YPGfte=4bmk4x2mK20nJ2l1wk5*9#^$01yS&0kaUP&AXU{RLu
z{(<r63$yx5!mR5T<{iTcQ)b!+tX5xzsKVCQQs(8jn&hzb&ql;pPJOF$CDEeqdz3?d
zq3z%(MAkinLaWvbq-R@3$}HBMi<B?v*;Wtm_z~vr_n3cBe5G4swEFUOA*0pjr>eHZ
z);t;-+at|te#o3@u=x`)eoR=%8g_GHs)|5!;-ku{IWgTdcbH~}X@0~sy97(Ox!NAy
zAzt<Wc*v+*4>6`Zh1sBlYI$8?dX+a#PGQy;>h)sN>tr+3ubAD1dVT-bMufw~>l160
zENoBQW(dF>$z+Lxq?nK9L=i=2hSA!QsqaadFvm>Nxy_|qc0bHuh#{4nt(MUhWSt>o
z46XDrLe|cxrr&yqu^(+7`!#OlNMJWq78Z^<)SQPlPcG`&r9V!iOWBayE5ga{8SML9
zO2YK_z9I2pcjb*?%0r&42)R!;cjaFpSapv2gw=fBC*w76=Unty%q#m@kc(qA_@*i;
zS(N!a|AZ^@SqyHNEF$wPlZBla*+Q81KVso77mFydNHZ)7X?0@Q^~u*CBvQUNQM}@A
z7l-YUm*i?_hkJtWHED%7rvKd54_J1@<x_6AL8)i^6K^6m{rvN($t;j@kZU-{NLy-X
zKUigh)LJMGQBhFqhyRvNSG3_i8F0$_eft$(v3@_VKYinu(93!{D|WnS;QNEIq)yJz
zb*r-*vZl_&kOCliaP=f5p)9pren`LMK_#EdUEZE1S^tjryyWyA3txHp@1*DGi8c0%
zI3$*p(c@-LrKa0|`jz6*O?uU}O2*R$a*>$fzVrccH||;vdGFB{ymdKvUYKa61w?tT
zm(cW=oYDq2C+^3f^hF=_Twgw?Gn%Lnb*?Yd&qm5J6_yEwsDb=W+$uH%Q`c~%irGT7
zt9D4wQW13*Na|KUrhEuT&vVk!zbO7Cm2&^~`y!ij4DyRfuJ>p(@6pqle+YrNz4}YV
zdAMp1xrvLFH{}v~>Q$P@cd<3%URqmUV8vY~M;y79vN?`#gTTJLWVS`1XDC<qeUg4%
zc*vg6qe9YiR)4!tzIwRwW@~2qkS_f(<+W2T<#w(<w3e}gbL*jqEGF*P1gLsyE6vtS
zZ4Ee&><sgq<Mh6d2Ix^j+7-bXnWi?^X}I_EEi$EiOq57N121z)Vd^-VBRT|;OvG)9
zHe;J@&HEDC>MsH|Ru|U4ih--xI=i3|P0F@!Q#<@?6W_orcg6jhY9Jl*0ey9XoFaT!
z<&D4SiKfrbUcOLGPk8e4h5i4XtwnJ;kE8jByV=#2>EIDs*{N}~PGIdhbCE0}fR!fJ
znb>IHRjyBLam^~sPi&*NRQMvV?xuVMI%NffX{!{Vl%96dE19O!yLzVxO&^_Mq<RR3
zw#+yLu<msPP5Xlky2T%%CdeX@y&@wsy@7MJncQ*lzAK`^E>gSy7s`M0lLn=IP|9SX
zyv3yakwKZv<tmYp19_$jWwD}kdpNh0Dpc`(R1%pAr*~4M=1CEZ*SL|qEz@q=ozHi&
z`F)1dpSvY1L$|GsCP7XV#_~`!%*wcq1(jZQR*gi^upiP7{M-=2nTSk!`d5z9EriSN
ztC10MPCm<58sGg0cEJslCK5uHTl!0b_7{JkP?`I>s=xRX3rc2xv4=)4*kAnS9J9Z;
zKTLV(-(URfyp#49-Pg^g6!yPQ>agr*sdrsP>qrzl^lXWTZ+iy`l!XLtkdlr5eM%`r
zFq_CwO6e*LB^+t**lBfe{{aK30sOzDe|(eT6q?@04T(zs_%;<InBFJj&GbITa1;;y
z)4TcHlcrbNQ}g*wbV-!<YgAiKJkQujpGmLzgq$g6k4O{-^AjB-KTt;*SqAZbKFQaE
zO5iK>Nav=ip_!_ES!i-N+t^$4ZlA=~>!ggmtG1v)q(tQjM<{GoSsfh>e=z%-CHqzW
z_m}r$RCxU*<QXb&uK!l@o{T(b8P#pz&(qDFAalu#4y*s`c^iFSu1u7s+gXH~N$?>b
z`jJY8+WOMVr63>BZ%-jSVZMq`ZR<r5*wCFmpihS+Ex?$_iOQoAHP_YLr=q@3pKLXj
z>=YaK$V&u9^w}o6>rn!hT}!)cX~^3O&Rsd8`w0%kq&-f{ff$&JNO_USB#cM8qW^7c
zPR7xDbP8K75P6SYxxv=Fo-aM=Y~rFcz^UH_N!lV#p=u6x+!J};;CJMf=+qSSLbQ5^
zB((qI8P2wutPU=7c#qEPFxGgvMcq~UJU3pnMxN{R&5ZAMBMXU-92Nd4AxgZOXwJR8
z(e68$;d?$z`;#i)EVnBOmWrcXLjEm@a_=Pf0&njW-ZQxZAGYQSsPM)4q~>c)5917O
z9zE?(-9xc6#t%-80WwfxRge2fOo|>T-lYwa@SLr~c+grof0U-8<2i`)lhQ=(%toj?
zhtc99ZT+4z8LjPd`f>`K6mUsyUTIN0kqGPM-aYO}pMqPV-g6f7?$V+H*~@1)V5LKU
z6&qoZtS^Lxvu$O8Gh!tw4$KeaGVIboUIbJR1*tL=RZ+Y%qNpH@HQpSD(^nMlD%~T^
zo)MRgUsx>H@}*W*5s|H#qJ>1sUe*JM5*G%@U|X)!WHU2WR7Uh0scO=zFCZ7K5+v&a
z1<H(%&Q3K@loN_u<v!MJdNC35_6{-b=aW&r(01C%Mg0tkHNzrxWrgXYN1-GoU9Kve
zzM+5Z(nf+>+PF-TDh*Ojl&!gz_FjfY!db?$f6|8&f$sCLHrs)a_J5G~Q=XlGe?zV3
zBAG6XVL5^dCK^32P&nl9F3%F&OviuT;MzTm*AD2LI0vOB6YJ@h6uayw_j76_w@YtB
zSUuZ<8a)h!X^vjter{8pahHAvIl$SDYdOcsxRl8}ZCDm#LG=rL-+kihl78c!c)e77
zLHsB=8}NLuEhh0RH~D3EI#O=DPTSL(87ZbAt(ijvhqh)86&%)@$>~I<Lamw1H?k5>
zYt1}OFuFA}TJZGN%+qCRA-A2I^~rkMn&&uVZs9^dVm!lrnhE3m7U~+uS!41u-s9ag
zQN}o=C#zB!@VwL4bZ?hWYr=9u`pI3g_Y*^h)k^<ZNq=vok$x^y<0iC6UgSEnu-)9l
z&E`xZ7lK;m%y6+F$w7-qu^`QcMcN*QO+)*q>}#bjDl~m;bV>XA_0y+XYBPP_F`?<R
z%MoF+Ekbf3tThwW3KG~#y1<Cm%-|jH!MDc0JU=2s<J<T(;_EW+>Q{<4c|K|j`Z=OM
zw_lZN6o66H=~GaUCWd0+lG~r7q!WtMzbCzhRNx)%3EYYNCV5N4b90z}wdJtWoyRk4
za;<}8ywtE|(tT#|s`iua$*SX*k<eG@?-=<fz8gQ|?FG^p=;<P0_he~jqta-3V;+<E
zePz9&%E$v<l;K03r&Y|18(@|G$7qS!leQLl<$!BV+&9e<l`Iz%@~G+lNq>^m&GIk!
zB|3*(r98_Ylbk>D5Xvyov;6T?t#EnxtJV4WH1c;;tMjN}c&qaZ!RS`!F-d0}-xstx
zkBc1`5In1u5)e629&c!MigFE+`_S_%N$ssiWN`MGehbJ=w0l&?7Hm(H!YtZTF8>YO
z5@zY%kay~uHcRP-GvA-;TVbGDvnM^5m_iR-4>>`t^)1OUW3aJH-*K6lV>><D)Apzn
z0Vt&0b%zM)h?_+KqCd*nnsqxHlH0=aGd}ika{DbrWO86W0*Abeot|dAtM!7C6Frmi
z!98aio^36eWQ)bXej)?pKRAO(i$Qn@gMFJ$h&~n1WFQlj*iV(rUr;h{lDzMe_f2PU
zCFPe2ya3-{Ti`PGl&)*es6K(i#27+yY;JSb49#lhDts6yEXeyK&wFWmvW!KNN|KdD
zlZ|ph)?5v>gshi>xxz_*l`BRthxCIZRj$}tWSAvcdG%L>VdUKqf(Ydwl>5P+;ijTT
z+Uxqh|DcYpv$E@XOanr%u|j_n2}|hCQwsgx;1n9Vdh|rf+`*n0E40!RL({C#YQI)!
z=MM;te#IyvA)$S`k=&xdy!o*zFpRcC^r4OUo2l<;&J&O6;XhVWlY~L4A{|%4_SIL)
z8%3V|F1c3-)_d+0dN;51Hqi2--({G$VCJ02A^q2e`9aKaV!p>P-;J5U=pp_4hM5~(
z8q_5G7Q@_xdAPXOE3>V+nu36xUF^PV+7&Ci8xw=q;YdTSKR5zPb^m<2;U`)Aj57Ts
z8g`?_?p)I@&ag`ryKvKv@t=e@LF_*Kky;pN*0GZ{A@BBdb8+!S)8$!QSXYoS2uJk3
zILot-Hn9`Skntg17YcQ0TxStHPP6)8htw-StuKuw*L>}e9!Q2S2jtvC5e#IKlBPz5
zyaFJ^Y-8OGil$t<LNpD;e)SIFWsaBV7e=$?GMp|bojE|f>@7L;p;8=V9QvgDmsq4D
zByVrnvZ!5rs}|LNW1=qg!G&wwC$=+rJBFSi#(CsP8Wk=!!J16UW^sUtA|I?talI-Z
zbdoaC_hsAV1L<TZ%ZG!HRQYi6kuDzvd^qHzm=BkHEaHP{OP1^pWf#jw9UqJ2qmhqF
z7yA!Ql0aW}oqV?%-;K7GU-CuNIC`xSdoCl7bYJE2KE45K&Fv)VC_+hBHS1E9eJvxP
zLMWqMZNCv3aeC3%JGM2S9&~FFH<|Mg0f)43tH=eIWf{!EVMd;~6A=svd0g^Dww09p
zxDjL=x24Kmz|CA`B6W|+!qnT)A(G`zxFi@{9#eO!diK#$$FOF{vO3xdTRE9I<Q6{*
zE#CX#YP<En_(d}`o$2W7d=mF~;@-rk#J$Vd@VB)vpy63Hm?s;|7aGiOIgxo1%p2-&
zsFR`rClRG^y33S8O9z~~bEysb@9iub?hdZqAG}Zsg%Yj4;Y0e5T}n*&*VG-KDwgi6
z2gI=AFR+^ry8+={ctpw2)*>?MeubX_9)C>Ix{1L+`};n_UR0E%i#x2=w~X`HNO}H+
zlo4Z+b++_WzAuDqpG>l9Bu_#Q45^kZI9cMupL<-5@Tm^VqkNNZKAZcl_V{))MQD~Z
z%KJqG_d@7=%6AD&Pd1-oFv@!_r!eG$Ba6bmcxDwjk&nvEizzcRh@2rHlct=ZAQOn3
zVIY&HoG6e<Q_g81BfFevkV#X{>8b=`I9)#^M|r%xF~%cI@)C^9_Kbn5*&dzZ`2DY*
zPf7aK`#zGozHtGQr_DLxeP)?GZO#dqFiF}s=L}U-FpEr`y<tp|I8;B!NLgh6lyRQw
z6w}jh{v^G}sm`BNdL9|7P76Ixl2n{pWiFT#hRhiy=Y)eKEhoathzPxcA}o`~fzf6C
z=hWu2fA#!H-unm`R|B9Xc)Jwgxp^$igi(;WZ9!h{nvkgHaJvZg!|3W|iR^4zv3&mo
zHCf8@uME=@g+gXgD0g0rBd1tf<WZJHTk{ckw(-o&&Qp5+s_=2fdQ8$X_L*}VW7Z|T
ztK%YB8jAmhi^T=jvsB>u{^388smup6{E-*9M(#7FGBFG>ogCL?E`y|<M_VJg&xTn{
zYb00TIFEs1eH^?541l<Y0aOrU`qFAlW?UJ6^gPTI%bEzta=~wD;$$Llxft&67RjKG
z2A;6?i$|^-ma&GAtj1r@L*i+<>8Tb}GVR%EwI6E!swS<nw#777&0Pl`FG*)vgSC3H
zh-VGyU+8D6Q3B!Uh;gBm939~h39Dr^VCh_SHt8(=770}4kY|_?=#y#;`jQ%9&s8IA
zSH^3egX(aKu`=?<wJbCG_N6_=wo2%@oguj~aCc?A>ftpOHPw<KxuounZ>si=iy%Dz
zL4fXDBN()beGKP=gHII<7rBd<WrTC`KxB6CPLJ^_mgylI4<Tc5;c*GUk}cfQOLdj8
zxEXHbmxQa{lRIhR1_}2MZ6}2L^WkQ=KcjmJ33uq1gu4bdUn{+HPYidQ74BHV6#-n#
zF&qYy2U%?FJAc)`JgE~(6e{(6vO2V399R0f<;nMoKAzB6Gf^c;wrP00QP!(j|G8b0
zdL{WR#p%OfaXO%ny;WlRku@)8L_y)wtG;2D7gjA~7nJQrN=<^<4Z%+;rs9{M@qx)t
z6@vr%AAO3U?3>E4N`@%kfLop{fc(2+B}*XG`K;T+Ps-$u6Pdhxfnwq*NZS)+5OGol
z#V0bj-DJQK8tz|yPi4$cRX!ciS720P>;89a2H79drT#ODFb<(gkAgCQ9{&9=pKmb-
zQS+?V{$0(p_F|^-KBPZwn7c5mdDf$bxdU^Yxc}TRw_{fGtREWYO_&MykbbLSZpEzT
zSvM%NaTo?WyU<jac8jQbT&6r=p4EE3^ltLbmqWQXB#WPMrk~M<otkG|Xxb$hcBw)a
zZQ4Z|c50q=WP>r!I*b7O&$HezU0%lJgn8D^6XoqJl$S*Q%rVbnbG)mP!`gCVcI8Gj
zQFe9>lld#>Rb2k~+f^Ixk9636H80ZpL6bl77T>%CU#>kOcer=*^3yKXB7C_M+(nGg
zhkU%6sbvc#y-o9FBMEhdKl;OJGBC<JIZvqFQ@uAQhq<qBo6A+|!GZchMy*U4Y%MDZ
zUlkE`Go)~>Yk;fNAH}t&U3t&x?|loSXqj<5*)}&OWYB(oud?>!_S|2wp}!9~Khfjw
zZ};?3>^l0hIAYEqnwO9XZF6NxU`>opx193DDLa+j%3-uZvd(2rdVDCq1lQv98_$#4
z&J!p!U(#GrQK$o1*8W1@c-<`bT)|*$N&i}!iI6R6_C(b(oM_@(Tci(A(gxiky&VT7
zP_{_>{c+nSBb}q}Tvyvv<4K^`I3%uaKUEI|J!6>S47X0hlwg=16qCG|{4+kxdMvN5
zO6g$_T!F>^JXhN)lgSFp+x}0F1x`jk0(!d<Or8-aSGNY-L-Z>x-{bhG*f7vP``sKn
zHTHfvo2X9SI1A-za<w5QBRV}wSf~|mULqu_uF@Vgj+U#NsBqo;O=m`}&F|r^uK)VL
z*zI7xwBlUJL0Z_SaBF#eWl|pFG0t|XTpaYEC4;B~ydWrB#a~#=nVh&+D$ae2v==GP
z+dUORxu=gZ&RsZw^3!uvDe_Db%Jx3W1ox-`l)pDA&tfEmn%m)!t$EsJ**5+Q9cB-U
zifRv8de5F0`})thoe88;u2JI^Jn3VU1b6OJBC<9ASZo;cZjNZXDr9z&t=TrqUWl=q
z<9oWommO}rg~NNV>g8A4=9|NL1+4$;uXu`Laer<orzk8Lm0BA`*}Sux853fT!5kZ6
zj@9olBF8dFoSTb}cF+sxoSh|Wnfz8u`a;fUtFA@{n!Rd*Dat8au}W+BXdFp17b_0v
zE%9bU+Z*Q|Za(S4nvQkGl~9t6T{2Nz>XK%5b8)z<t&tw4TQOm%AlINyh7Yyhqk57!
zc7a{~x?xJc$mM;%SAQ1gp1W1PysK|zUcRB{`~B;aXgU5_GDGr#m)6^6g$Qe?Z8P^U
zhDbeUfYb+(c&<piD1-_7xSMlBB%XuBb3-JagT!-VUH+BqgIKwe6KmT%hx9hY>DPX8
zjKt3g?~MDeX`26<^Ze5|)x-{bukW?|umdBvu}`jl8yfR=;o!x;W-?X!=DPef7tP_Z
z3g6LFSQ+r0%LQP*96FL&Wc5GlVXs+aZBf*zM6W206MkPwh)@$GC%CmTC{<Pla+#O~
z%@<%E9%AM@_rlhk3vHX{(IqWcLy_0H){`nRoIJRI3`s`IV2GwaY1qPG&Ty48VcY!I
zT<V{8(Fu9;BPfjrJ1Ec&ZEk1kVD%rJH(F3zb0JMa8)~|ovCEG9$}~#dMr$t8mrZ6}
z^$*OftH`Xmr<7T9<Jzt|mCVYN%$ggLS=nS(W=LjbBWrTO%)He%Yw|c9?I2c}7q(_!
z=sD|)C(fsenD6+=gMBjml=ZpS5N@#9qM;nF?-VOpvdgwJn%{i$1^UB5n`DouW8!Zs
z;~betH<4j<zs7pppzT|_v~L$d6>Q(`vsvxiMZxxs73zLZR;m6?+Bcmxl=h7x*GQ4;
z*S>uRKGMETV#2&2@q#?2;54QNiE95$cccAdfpS3mhjUMp+5UaR;A}&8ZU6C+Xms`6
z3KFHuC`$F^th-#x3|#s{c{jo8-+zxCaq$dqD`0l8Pk#fZN|G!*%Y_(eyh5SRdlB)r
zHM%Ir#vmhydz^S6z+sru4bvjSG|Dhl8m8ffsm?IP8m30Wq+ufLn}_GMvE09_MYbK}
z&*f{84T-#6*>*Ad9>1Gk(NWrZAYAY1ITmPBHXI6u@<H5M0xQ`Z7|)e_XH5Dwapo*G
z`W5H0arm)q)RvEJ-`)B#NBBN*+Rltbp?O<)#$P=9@=9+?j8tP5-_7y*OFWd|D!rK!
zmhCb!9pzOF4%e<s>F6~5A(O%^64{IN{~Tabsju(jQm5$jo5jYL-Po2bDus3OE|aS*
z8|~XD4Mh7^A=<YJ(Y{saV6!>OI9PlUi>}=9WTz&ezRK=Mb|X(UMYqOB8RIE5N?F8>
zj0)rN+H6;a4;2NqKoype9lz=}q>JhRzlDi06&WwvHb1St>9Ka&a<;NvQqh8>KDIUg
zoFw9ul^9z=v$eU)xK20Y*_+&k+3hy#jc*1+E#9AGR4-H4$)FUQmst1@)=5!n-)_cs
zkr~_WIZ_af6x3OEQ~T^HEj#wH11eTedw$S1Bc43$X)`e6S({(Z3iRwZV#*_nEZ~{(
zZ7C3!mnCkm5*Jl1Fi`EE#wbz!zE~GS)o*<7o4hQY=fe@E(H^u7spx0+28NpVtw-^~
z6!!~1`7^n1{b}{PMg6|0eh;eO=j7MO8RM6S;(t2?;XWZgxC4fEOda5~scU-Ex4ExT
z*Hu3uObl0{4!TY<JPTXHRTj~Lt{18cm!FWJ4ObN9g07xOt~K89gv3!XQ53fCZ{xDc
z<lVN;E$mR7|CINwq1MgPMtnoodkuZq)dx4hR4$?899e>`bsat0$1dBbogdrg4|&-m
z%e*KG@(%IGw&Ee{#^VU?#QtO3=)JDeqxwXeLzaDAZ9`JARgbh~v$oa2ab@kdACVuO
z{3C}x%VT4ZhjGt>ils632H8zq1QC}evZrT#)X9fv^AILC;ouY{RxU2Uynhp#vOOOh
z3#c1cd!nU(_U#?H+qaD!xMbFhQaIF<AEt|5Pr5j?Y~jmcTPL@u$|CV+`gaZ-W3t%B
z6PoTPO>LgfbQhMgii%o3XFu3nT|$zw{H4+UIj7@kM(Mi@+A>=sM{}D6i$J6Nb7J_y
z&M=%2V#thjZJO3PI@zCT+xn*{>pL#w`%J#Q+s|@s;!R+oRPvKOOcq-b*qfEy;P_w2
zG)3(wee8N(_r4wGI&HUP4sBlXmhNj9XLH}**1y=bN7L}8nxrQRD95Na>-7k#=Ycs)
zht*&?uI-%a%agR0Jszc3cI|fW=izEb>^ZE4PHn5A<gJt_U7n9YK#We94erx_cbWu3
zD<h-yefnsOJT>^3RiDhID&`HwdbPZ$m=MLF=$zvdcmcw9i~#9K?@Z*h0xjJAiBX_z
zNymwK^$wxkuHK&1pFf?DcmW#S?;J`D$K!sdSbU(KX`|!i-sT~$w$@E4rE)gw5^_zg
z3`m#!<a^Q%_vx$q^GE{ftv5+JUNze4l5U~dr+1UP(qODsN$FllSbg(7=R9@1Bu^&M
zs;?C-!p1BHni0+;TO!@uxRZOj?U8xWX!iN@!`boP66OA;t8{C=KZXZPpH?bV+rqf{
z>{DM?*2pe@OdKR}UqRw`hC99c!ylCrF15iyZmJKLeAu$PSmY9o<*gjA!MQ*=`y+>m
zP<)YzzQdhT(MERtR;mhRK1z>7AW}cL+Vc8}$F;CdwezihCGF*^((dSq^64Y@(sNOh
zx66eg2lB)AE8T3dM+XO9c3pq>Sm3e+iFVQ6U>VOdN+j-m2WggW&*OSs?~X>Mgdrt1
zjHrI<^nKWK8<a#{FM_z|6*ZowNHBeq<5w(b9C2Sl0oFdF0FNf-MgeZ60P7D+oir~~
z^~-%qJY*!TpCXZ5{A7rf7T)_j&I#7+v^}cLxtpSqSL(YLP|6XzTp3R>u)NgCVl=l&
z+4H<x?N0CKLp-nT8gk9JBoQMM`W?x}4B6@ZAj}<uoUyqUE9vB<@XA9;QZx2T&7dYw
zNOukS2HvHy*1snwFu2!qvl<^tsZqDDqkc*%S09uUu2w?NJ91(|fB$|kp~fwpTmu<!
zH|CY@kX3DYpimWiGP<p`!zlU5<cB&vBKhzm8AKYp*%wI;?$hs(W<gyo$%{W?M%x_C
zVNZ+`y%V@cuDp{puHK<y*4NS)^LO)93imw*`Fh&PLUoB0J!|(bRKd!!*6SphM@eQB
z-G=0^tnD8csS>riw@Dg>=EAfskJ`VtMC<I8)Zp+lih~rSJso0ARKzz+6ztEcrl9-C
zTgNQ@BeQ?<9XD2Ad~fT2fvvhjFOoW*>f3ELnnwJIit5io=%2Fa&z4p;ZBLSR*gQR8
zyKP&accXtC#J_KF|4k(Ll>F!6pF!7cTg-@>hy9H4h^%+&=K9NVqcP=?P-z=|N98D<
zG@B~rD9Y;r#KKbNW$GM?G^!hfkVbVAD2?jfV&>IJz#OGWesocx5Ib$=hcJK<@0Ti`
z`U8rg`&UBsY>=vJ09C6&#r>YIb-oy+x@Q2@VnxLxb+kl6`FfDDaR6nyNqM<Rxj#rb
za{y(mL8%ncyXhVR8yFaTq4Z$BuqAKh9I1M~W?mSr@oBqhmcy-&2=%cYZL!=4mw#Ts
z(aKh+9=7#(6t|XpKKg{xLIyG@W<BW{+MvR*Nj!a9#P3}0GoRzyHPo?`qDk5I*<8EA
z9oH@4*4xNL_Yk!r-zio9303{C<S0gGfbvVL;PMTLfrHBzq2IfM)!AJHz__S)3}<n9
zeL5~p9$Oj;g$h~aBE4#xE6$%2=G_(Ud-$v@!l~ey?P%}L@LkPkWf2EhbA0|R7cN=8
zElw8rKilgK+>EQsbVcPMI^1^G7N$Ot+`~E4>Fqsz<^8U(=P_L8RKfUjB>*^wxk_KD
z*ySYZ{0=30n|u>mBz3zYTO`GjCVx)2cW30T$lEOoAD^MYSNM1V*1I)|XxP@v{vII?
zS@|Pn{Dl|?4>L@K8TNMwQ?9=^!aPY(bm=6Ig7`Nl?{x$+Xi!dWF+-F*CQMMge*4!3
z#c)hXa+O;J^OFH7vVu`5Vh`+Z4(1Fa7_<CSF#JUkRx*rYL1O$1C%86=2vzE6PWqP;
z>52Wh;SfZtc*TTqSnFoxBUbr{3)6h@q2<c(5#cWyil?&_O}xkq6N~=*CJgQ)(qD8M
zuIv)=JKXefq4JN;%wS;*@fXEFdx@e!iBpAfDJd8vK12OQHUv6|%P@ZtV|3F6cFD-3
z=p3_>7>S9(dX$P6V;8>VfP|zcRoRUjJUyrRixQxjpkjB0=_6g4CJvsSXn)Z+@G(ho
zonrcMC?8yLJXqXM_ZMA=k1XYbs-j}$Qa+{+E{7O@(Z%@4SLv9k%JLvGIm2I+7?g=A
z3Pv}Sgjj!3a?k}v1tP7{{YY$BbM%y7)=c>=GUHXOOxFyIm%%sAUz7^%0+o{Qnm!gO
zABzXd*YI(szi0wJ%2Y@drjJVH<9mbqILlv@j*n_ZQ)Bw5Qzo9M?Jr*=jI;eklknkI
zv07&OXjDFK2<8X`HzArL2OlfLtmf5V5MQxtbrXUUFRO3i!^qXu&6eF7^)Xo3=lF}V
z@YHHi-rDDTt@^}q-AR3)>o0Oau)*^EeLkcQ!0tBn$;U=Mf~n}2h3EN;@*$A%m5TWf
zl^5mvPRs7Dllo5Z7Zu?9Zj16BKFqN1<wJzI`oGl2VCg>JUsMP|I|M3hS<n*6o3uFH
zkBtbtxL=$vz~uq#75fMIP`-byK2*#fw(K5JRD*^64S&%B*mPKwkM{X~OnJhw^Q69q
z`->Jqutj;|W1FH>VejBm3hL^e%5Jc*zv(Y3gP;on74xSRrSkoZW%uk!eP8G=s>Jth
zi*iq&?-$i4jxV3o_eK7q>QD*qRh0gsx_%P2!{aqvR6<05M}7PeFlxr?{d_9%zs<+s
z_55OgksCJe;;d5nzWPw9)cI7tKj33<-<SA{8u5M5qLk|w%&-~h8@@kQc7sXyTmGV(
z@cm~9RLqYkN)>i5pDOInmEB;z6a5>TaD>4ZiiQuF{+Pjo27_=uf{h6@bg?-2H#Qr7
z>1J{6C)OmWWLl)ck5(TlPIR?~A3EATmi@e5>fb2s0}SYf4F>eMd?*HVyZFQL+><gG
z;om5Y2{iP|27?Rw7|;tFc67rhi9xb|qqH$Fuv^6R$NZ@nB&tswFIA3%iFKrZqclj+
z(D53f$%{!QgVB7dB#b#JgHisC(oVr3)nY)8tQeT#;Y2SCZ~sPVz4}S;G90h4{Lwob
zF__4QnX&TBq2fM8IS!VD(f*Bh8#E4!!L&XGS?ZHu=%3*}7=sl5MrjzKq3<?gFujjK
zzGX*ueG&#^{2QgcgaQ4r!C<!fP`N-iY&g;rpM=3!|3+z5VL&f!Fu10V!2&*2F3>Tb
zgh8r*qqMo9jmRQJ?B6KuZa<l)5e%KW5lor&K^KmViZH#n5gr{mfBi)^1RH<uIR8d@
z0t-%b=f(#;I)91*ow~t*ew~lO7>xICl$IO@Zi@jOyv2Y%-f+BukAaz{Vz6er(3ZXc
zgPRl$AN2l)uO{o`7VD##4<ceruOMB6SylK}i{e)6W3BbEPSKdNGYNFnWd8%wKde3`
z)6i8m-#6FWlbEdzPgHYNedHl72H=f|U7ZR4t!}k){ponXnEzk6`&d9fP2734dRM2;
zM4VNE<e>ZU=VTSJ3FekQljs+HW-M}XpOQLbo$L*Sxzlayc7<~YCBQw`(nom%5o$e*
zm+pyF+Mn`Dcjbj~Fvwb33to)mAAY;ASCi@dwu`xUqWd?;1O5hCQ<Eum>FaskgJF6h
zmaN9bsX28Pde!Wl#(%eBgSR`(`<H-wtSjT?hVi2CCztjnP6~5hG3mH_Vuc)O=nnH|
zr8lJoDtt_}c7{Xlc^-0GbER5;;J)sMIir6q2G*ZeACh*wr+xJ<!HNw%cbynP*MJD>
zn_<99=vL&2+JyP0*u00ryfAK_fpA<IA2qC3@so%WHQzSx+pChA2*|ufVoQ_fS?}j7
zxdKjP`S~ijKjM3Q`loF*@2u~6;KcZJNbub6j#4~V0m^+|Tuq=>zMquU;wboQ`q_tQ
z=|rlB5UD=IjB!5O9tqjL-h7tQjOe2)K3}PnoBKs9nlND`1$)UySH@p#-UdESmI~=M
zyriN_rJ@B&QekU;M*Olj({@#yvu%Rc*%p6`_royn@qqg$Sm*iUojs?U>u(v)Eo-xF
z4#!z`a?Mmj>3Ofajx6#|Q%5n*?EWdMoaC2_UBfm1!8h?_7E3T(>@SBk-dFFGvi-U4
zSH#Ki2E8Y?d!%H0#&fncc0Nw@#*8-565z-YtG)inmqd7!%Pju{RZd00d<-s5|93f~
zdc;@*`u0QAAe0eV0D4mY`LDT+Vmpz+BYU=Swq^}_UJB+q7B)c>EBMVyl;;R21>sxY
zX5lLM9>EdM8{K<Qd(u4|r|5M3T-NR6MzoE_fdO`P7W@xoRXtmu@sX`%3Y@$D6Avms
zC~H!%RH5I}WHRl(L1HVF!bw^Oalb$<7yrfclkQ>|<xzx;I^;bRE)j&=S!ylK;x`I@
zeN-?VoNPN}$lE!u^KM!-V>5+g465CkJBNJ?wpH}wq(+^>?>Wt^FTNhRK_t%q3-QH`
zdy-y8$Fe~dC$HSR^{6;>lF^zgqA^ZCNLw{otlaEC@?eE>9=WZ}8Kt)WoLtJWXc*0l
z41x9azgG*==sEH@5!H&Ta>O1P>&;K&L}fs!4aERa?YS6l61PgK&?KnTeoTV(VV4gn
zf5f&@U)Dno%NIviA}7CdY#2T<*;*bMO0dP2D>t9wuAKBt%TlboM-5wB^S{A%RjT(W
z&FF{3aD#3A`%;N|!mMVvc~2x!K|5P^e~4W-Q_g_*=;_=!W6*cQ!FzOwN$+`4fAs?*
zSGpHs?kmEF(gQKl>z1>W()0@}yZ)1B5JDK2j;h<v^t%m@eV%5CkmUBloJD$O@Vip~
zcJRASzl?9Lm02WvhQb`;Mm<LuQ$r%K!_f$oZ#|{IL!F9^IK=mNXbd_Wl{{2&TrIW!
zXpF7di$qo*J;16A?PUwfpeiTrasY|d^;Gw$?6#HhSy$ea$PF|l^qBg2y1Jnd<<VU{
zdD7Wvbc<>4%k4Kgg{-ijE?4NV(keIRxHz(ys-a0q{-)}qC8;XUZ|No+B~O*%ww9-f
zMxJ-&BDv^@Y}bSbN;!Py?OG$lVfhokar#DiT2F18h3cc~V}+$Kms@=Lib_I=HPNw3
zP*|V!nkHc#bUC1#eAs8tN$<0NPV7~b*%{w%TQ`+D>c5dC;n&f=(Xa24q^VqE6E>$9
zk?Vi3q|G%y#XBPtxZevu`Wh<$_{WEq>ZQRDOriXSToL~4L!H^5zeD(^h&WYlJ|xZF
z7>h4`e=s%YTb7)3?z4^Pv(1SMjlu^9f<oNUNB*MNhUV6Ai5Q(`C9kJ(qa{0u7h9@P
zS#*hQ6*Sy2LPO7(FwGx%pX6S~v?yE45$c(2&$WFoPP$izIJm;L$hS*<^HHEas8q>v
z)jvC#oMRR%9y1YA9D@2ia`DoUog(@|&gHU$M`heT-Iw)+LqGK7F&-y;*S3z+xHMMT
zX<O1b?(h`5om@nTp0j)0hE<u~V`1)$v@I18(xpi6mzD88H_o_cbHqFxx@_OmPTya$
zDC)M&TRhKY`XjZ9k-a_78T~C=3Ozf#$0FP{-eZx{KmKN#KfXnx>W^HNHF8hb7R<L+
zjAWy%=T3Et$P9n=88rF3=t~0J)_<k+rnJruDYyxg8+F3l#fLiBUBHK3+>7~0)ql*R
zj@@0K%l!^pM)q=`A}g$`+X)MO{QJRdqez8h^abJ&nsYKq$S-|Qwy`@A&{h6PiSVX4
zZPy>bEF$E&f*e;*Jo~w}=5Ij0Gh!yvP}1SfE-!=H=1d|X@j@{vF6?EOzaXr_$MN|>
zu_%C&msH55O7Gh?6eZjjtbEA(d8Dmb7COA2M|mFD8IdU*H}w2sX9RU}dsxpsdfj`W
zNeF4{=ZQmT5`F?3bZ1;)0sZI>_VlP9J0;4t=KDFrq4K%sqDcYwbe@#W_GiWIN8B0v
z*uEKRYrYi<8OKUy5LezHzM7j;i1(!9o@eCvqV18{YCnvFE6#||Xx&Lh&u>p~G3@_y
zXM|ItFG~M`oe{a}`$fL>kKdLd2u&j;k|D_1a%e!ZSbw$MxX|S-@)G^|?vWfA;T=nT
zEA|_@zmFECsq1eiX=ZnUf{=b@&{!!t9^pYFt^SkxCkz<!+GaWs1C9MQCxaQM8aY>y
zQ6$q)mqRaG)a8n0WJGUmw>=UeF>Vd#8Z|j_#@h^u^470$t=bOCDAzsF3D~I^VLd+&
z^&=$8NoaP4YjT^KVzDzakq>qKV_46w{$AiN++-M~u3y8S@^1PSZzw&4#>@;vMM^j;
zZ{pwdDnWLCS5>0W^q7&}7G_-XW=1LKSpw}&7GI@%rEUGqHl*iWS*anuMeeKktkc}(
zKqGgAs_xkL8j7BGZB?DK^uL%k7$)g-G2LRAq^HH?#?+l9MGfxrgu5@NlJ=qJUa`nA
zEE<^~-6Q5J409dkHfx|_OdHj+P?DJ4+*2(3+g!$EooY26OG96X8mbh~C|w@wKBYU=
zg{`u=eVEE3o7=J)myeklGx%^~l)}dnWs!?bZ{f0CUF}GLk8yXj74hf|mxMRr&HZ!H
zNWIV1mXq)VZ94hhoG3jq7IyiTr6RtQ<@;{qJ5}0|W_5Fht8`b}+QcShf7=f6$8dG?
zwByVL@((k;l!=PWDtjoi8P9okyHGuiq3d0iu76X6Dq{kvZE@Lc-(^G~3$7}!Y|Xzn
zKI@qOZ81I@`TPx^PJd=VP0E~%{pdZ?v7^a2oEP@7(|eTmOWJ5U<wa>vp_~+%n$2GC
zknGm*|KZV>oJy=>uzJcpG`lsLl8+rqnUhi-%>lNDTPGS;qG_7iyhm)#!p8d-TFWkG
zi#$5Upo$N<z4-@X!POEGtIn0ExR{vb(XOgUwA@Guq}xij{R#!to@gtcX?sk0Q4wPD
zOL4<xf=U4&cKPr}=52i|oIC3$`6DyE+c}w2$W8TJgzwLq=0H{pXqsdEku8j=M4{;>
zj1vfHf$dk#iA~tasLakIH;Hn_g=WdFPrLUxy^5*WaNm85<@^sPZWK~;c<b~YjMrmu
z*ohsDr@d1R)Z6BxT(nPrVIO7Pe`92)yfdjkiHV_5BQ{Zbhhd1p5TpOXpo=p+d$-4P
z-Ugq<ZIRr$2&=5i$`WJrIpn-6VnN~}MM&5(?53@X)T^MUr4#LPxu!ox^c+)r&X<!@
zTkMkq1iviG%lm)f-Y2=1h}rB1VcyRJo_+Z5jFHGC8&Qa4dh|^`iKj#@N{=(_W2~sf
z>Bs+QIwM&I-ZMoJX%$M!fu0McaPe%;S$VWSBK%6a7>39(?uCB$x%-KX3VMs(w{7Id
zjhC(d{1_pxd|LIGJ2lb^L*MSLz1++f*2>Wr@Ae3(<&`}h%IUM$l;h5b;{)9{sR6Ev
zqP~#mIorM)r)JUq(LW{#ne*w)?WMjHP;3+Y9@Xs>pt59ET5MHCl}gLEs=#*}->FuW
z)f3?%No30jC#g*S(b|l*YvSZqg0%;w60hVX%-7U#N)4;_^u)+~)%Q6=C8zJOZF8DZ
zx7Zpsk}Hq4hO4p4Zl~|#3g^ge^u(MelSi*!_56YB)Gk8+a<AaANY771L<MS^+g2In
zU$9hTN$Xrmk>9xFSzZ~~Lhvq%XP3gq5<3J*ak7gy7sMcc`l2_bU@<;q-A12tk6CaT
zB}(ZnpeE%D89tf?`Qx+I_@aQ%j>9PHG4khXyPi^x+H0QgMQa2kE2E4F$H-u!Lf*j6
z<YtF;Pcgc!@J`WeEs`sbLZgWX4s%1+@~4%jdq2N<)li{uAMow=?q4NcZdhSreja^V
z&reZGdPBS%4O_WPF5!{H<ok;_<<IjM`EnqvbUO-d;d$J*>)V>oE!iT2{D`%NOt38t
z%WmW3&Q0=Y#;Y^@k-0rlsO}-)UE$_pUq1TbTE&&a+y`ioXpFc>sT+Ni512-Wd7g0k
zTbf{5K}}j-?zBDeBrk3y9{1`^-0sG*iy<Ps?FjGYva3K=#+xgj@$L0?;ZE;PlqEuK
z@!_&`BnpTk>^fGdvcm3Ef|hi$z~^L1Y2=gLzk&sUyd;4He7l{kg^A(R3M(v;zl0Uh
zy+*>KWpGISNT!VBtKu19#0QW}1jGk-M@Ko;T;n^me`;bNrDwNtdf({5+NQ;|8J(My
zd2!Mg$$TB|1+KONa+?zaSH)qR)Dus2uDFu>%-4~nQkYeb)x%Zp0nfXtzH-Vouk@gP
z{4U0P&_J|ZEfYNcno$HR;gjlQWigI?i1PNtT}I2U|HN`t@1uKr>^R2gzJ9h?#p%l|
zE4u9_#eP@3USe6&YD1Nv7g!c%1Ga0pJ{c>y*sqcSk3B2nomG>hWE5nLe22$P^jSn#
zRS-R!ua?&vhp-T`YAhq|31Qt&Gk8(Ow?oQs_gv<!B5|4yw7d`HwbjSzzxti1NKf}K
zNYRWS%@%sstI|TREN0MPYyL01>)DTr<{fXUF*R}8ezMEiR#b>)bLcvO`9}OcntHq5
z0te|$cpoO;f8B81gW1`(tU$HXm4=~E^(WUV!y`&6{u|@;tHf;Eyeu8pczrS^J`!jZ
z$B9G6!Ic+e(}|x$UsLQVeUp?hUds!6Q~%au9JU#G5dF^6ZR<X#u&ESDO8rYC^-uS*
zRw5TfIsFR~zu+=H5+!CjdK8$nPFXw=ZQ4IT=knhi$p~<p@fl?_)ej4U9{QQ=7+dR)
zU@xW8F2awyY+9UeT9kg)Z)FZkx2lBhD!radNmj6&md})7&8tR6+4Vc`RCgf^KO(Dx
zSxB~xllnfj`;fq(o{7fKnSB_$6HS|${-$qr+B&;DHixZqSH@P)Fk9!gjICU%Weh6P
zsUO<bx5K;Jn7nhF_v7)HnPhigOB7`|qVhfyNBt54>U=ObpUDgcb3VaXm$Z<1aeCJ)
zs@J?J&wq1Np8q>>`ewr-28$T|=NRNYh#1@2tKhDBd(&(mVE&ZIgu2Vdh%y_wR7jDO
zL4p6eNR=&yq^HBb`#Pep<U^)(4#Arc9M;G5MTD3wjYCaOzo5@9Mn3~X237N>Y*`Xq
z_c4nq!a)smyiZ1Ydm{A@UWWha7JvQpmk`VTpjbw8SEM2Ra4xS`!x~u=qB%LFH+9I6
zraEzvRQ{g3D1wa!0mG*<<;HNQ`x^nNJj?2WPI*Bmxvl}H%AnJjpc7h@;<PB}bav3`
zhd2e#^aK?*&1pu+Y{H+keS@8|6V@}#YQn+9L(Mu^Zccaln8m!Lr#(zE{6jWEoHueu
z-qtT7<o=QiWq^UcDE&B!*F4w3+Yo`XX$Pb7G7frlX(cJpUv|rmiX#_Eyf^1}#YYy?
zgmQUO+mP`D!_`g!cf66G-kzwyZdV)ARyHX<Vi7Rv+NaQC6>9xgQiZVDPKKL*VM-&@
zGJ%0rxqYVnPZ;0EB9x{bo>~-}^6MWT+Bem(k8+sqTMXQ9+Rt}n*Vot9Pqce#${Xv-
zOWoyV_R`9d`VzkC?IV&(N7&0e^;I=X>~$se4T7~5_6E1Ixg@FKlF{~MCDopC`z1*g
zmqaVpe;Yr0NljUhWtp%ntgl+SlvpK|*_T$;j8<6EXrDaAUbdp9WNB5Yy}qPoNx8kM
z0jDuzAgih=t@bojEh|?Mn%hvaq<o^is=C^P|B`VH^%eGOYwO%qwKWajv5#8VP=5Uw
zcca@rX3Q8xZ|5&1Pk#B!D{#)XSJc)oEpZDF)N*@SiMs?!aZah1U;dnBWkI)zhLs(T
zV;7FPv8u*Bx~8H0W(h<B5Z9F1Ce57ds_IVgc%nahioLA7qQp}T2j#!c^e^Go)z_Am
zH#8t3i5a1fYN%Q=PNgZto8hm(^ryld=rQQ8PYxcFer`j#y{@u^Ur!BhtJE6>MZ&Wu
z6PkTlgIxk0Y00J3UQu0(%rf!gu5z!iS5#F?fl96~FDYxVPcoeiTVh`8af@I1lMqvQ
zm*Z6YFD<FR4&NmW_QfS-CIjWaOn&*B<#E?}-1ZS=weE%y_GD9tl;H|1I8De>Y9)f@
z7JY-=U27j9HY55ZZy({NR+Kl4p#Y7r(n+$f69yvB2K$JH>qZchhVlk`MSbm3>Pbnx
zTPjR>Nol2>g61i&DJ>6SnQHMFXD?k*3ZKHta`_@EHJ+u55ttM@H<sh57Ih_6^=AHG
zUtzDPfj+lfmCNNN^^`wEYcDOSu3B7QBGveM58onsiAn|eaJ`Yp5fwF7{3Yt@FL~Mu
ztAtS{>gpG(;zO14NV%%2X>h~b5Sh@YTu;ob@axN$mDf`;{)+HZt}nHhRZ)o~9gAz-
zmG<jNfGWpEv?b|FsL3_<<lOAp&it&A<Yko<zuJ0YTvabAG5(B%n7_$|l|;TCi9<|w
zl9efvF-S!MkgRR6r=&>9p%#>RN>wWHP+cyCJZ(&Bzw!~}J+szLTjCbxMiYX-Yeo=v
zDu!@(*Dfh1&h_@?RV1cQ=nZDR)z~YRy5W{%G%2)S<@N?oMMYI3{-t%51do7bgq`NN
zq^5yZ%3klGJP^~0+Un}s<qZ>!BnRUpA4y4N_Q@i*a(lAM?|M&-y>7W=*#Nqw&@H7n
zR@G3(B>1nOuZLckndNaHwNYP#VI(D0LtkAY%vAwCA$&LPk{u^=r)9S{+DmI|>&s}Z
z-9{TOIUEc_K9Z7FK)2!)=t`k0t@YGM>qAp)RCJNx0Dk#nlae_4kyOmT`TWboA2Kgl
zT)V7%w0$v+NL7u!vb@pgBuxJ)GY84fy83eR^U9!avxN2wuY8I95<JiL)TE^@L}>hT
zFSMuBkg)N^6Zx5M_NHcgxU|B^teKKyG$>L`(i+^VNgzAvj~i8?9%Hxn)#T`YLDH+t
zP=sR}2(4^k>bQl5N2%(g?aL{(<*FP}wuQZ9q9j(Bq%5sJF?^b&zbOJqNvY$?zB&&5
zQz63x<x%>3iDpGrJ#sMGOmax9thUm~s+<x^o77BdEbT~A!<Z#EOthER*VoieWW=EL
zxyuNr+&;nRdW<F<3a;Byf2z`#)YVm2m6pihfqGk4S6lC<C8()hfj5RtH8thc4T`H4
z!gon|O}RA5G&PGuT4S?Z^o1X!lQwE$nn9|*={ij6LHR10aVMeAto2lvNgGu{>p|4Z
z?Mus-O6w_IOH#wwq%wo`Jm>70c{6h-+EYrcwha+8ma1J^M}ikqWmTh=k~zknx1^?4
z4FOX!gYoL~pZVqfOGEva2J6!)`@g;-ltHG&K#e;o#?rP(S0t@zX>CnK)siudORFU#
zC1V7GQI>pdQklz7Ug!XES=yNN=xA-0F-)YzRkh%H`Q`6wPgOZ1F$qO0oL`Ww&B-sG
zDL;AIoJ?nac2X&&rlGdFyipA|$CPTNw1)P{lkGRS>r<xGlva9bu4~YeQb#q)Pnnii
z!zj8+O19D1k4Q>l<Q=Webk2Yo86_S3#DXi$u6ANUQmG190!k{Km6J0^1u1b+A4_gv
zSea5<#y~4+%%}!!fSDR#6;H~s2;^ItE@U%n+H@)et))?5REKVifJLaJNn}`M#<jX+
z1*0~RC)V;qK-S2?FkD}`MA{aOmPa|#{Pr_5D(+`C-N)1geV7#3C<fNJHfU1br3_2h
zQVaT7(8vYth{G7_cgfNQEm$Fp`mQ>`5lIb*JDbKu8dp-=N5wc)#@N){zWNemp&VrZ
zd{Rdeb#h127wVWlODk|`{bnjs5VeBYvvOxUXDrOiva*fVtc0OIP?%j@NYg`siq`V-
z^XJaUo9SGb>s&a)SvWhdcwx@Gtih~#V!EGorpq~}Ft2caKTGC5&KYyGzG1JH)HpF|
zg_g8*VN(6Xr0R)D?un9Becj4{UPVjMQu4HvdM#zPmQtss6lf_PE#-PGrAAAcsio9v
zDGgf6IE}N+DVf+;@DJMSF)rnMDc_aa^2Hh=7&9(io92=6beUFQ%y-mi$tai6T8^4t
z(99>LBNa7HkJjeZGg_1S8fwYB(fCWcV$8S-DqLNO%$=gO<_w2w3LO8!|0m>-IMK-O
zGfn(!^F7k^|MDr8o2LfQJvP8RFdn}$-8Y!{)FdO`%S<ev+}~{3TNpOw%iS%yzZHM{
z4+`g>J^j)pEUcn$S!gWB&@$K5F0YXhXKlUqufKmu;9nB>zaWA7a+WB{>lZSl4<_di
z&pb2v56|RJ`QaUROyPS94pV=4$N5voj~_o3`>7Qb72q?IAIN=c^7?I`PVTsH$dr)_
zY|x)SCHj?bO}R0C%#?#yr%ze1ej5Jsr%aBXH|2rck|`IpTsLL?HV^!orgU7`GUfWo
zx8iU8l(%lUO@%eP<1YOFbjtQm+u`xRl=0&qf=|bkd+Q#D*S0C~5A0I$Y3X?$p07+f
zlKcjI-<ncU@jkqJro8gg!|?xfitDY<Rh$>B51&fhrp7-oZ0hxsqlt6ORN^_crRU74
zZ`}|-b#nB1DqTmChfkf|apBYlaxb1r{7K)XQ@4MbJoTcM%chc+sjvJrRi%CXw#%oI
zuBooKCQiM#ZZdlhj;W-PFtQ0FmoTO)`HWmJi!iPxj6%YgM;P;`9!Xw67~ds~62d4|
zGTi=YC1G4g7&U}ZM;HxLkq==s62=XLar4x<R=dj#R!s&OqO;(^957nD_~Pu@vuDk|
z_~K~Im_jjsdElDD*=Iyw5S$!3ZgQx6b(`3AvtfS7#Jfzi=>CO<eEzS<!Dr^L+r))m
zk>Arz_sdPR51>EYG#@d`lO?Bp1I&Lg&5xLPXOk&c6Yn$el3NV>4^|s!H|_t0|F`5Z
z)Xe85GoSA?vBSjY2jqXJSq@$_@q+>7LNn>lAK-7?0P{@Kyu?IJ{na^)MW%xJv*(#h
zPzCd6&SD8@vaBP?Qj{!LWNL*5eb=;%4{wWoIk0c)@9%Xet0oga9bmTXExhQy{`8jp
z-y8G)LE-$fr#~mJct$pQ04zya3(*VdIm_7~cPEdOrKZK6s%qJ)t+&g3M%)_M5vez~
zXbNj<*@>uGVQ*Nmba8F9+C#0VQrjkrtK2Eo<uyy#5;M2tmX_DJ&2?B7b=+*?SF#I+
zcOys^^o9FE6{l;z!&c0V!G3w{D0_BLQ-QT<_V?5-84*mXkmb9o8rkw4HP-ZjJDY{&
zig5!8QLFV;OY5r3B@!$d$<p04Db=z-n>C*`*St)-Yi>@?4ChRxj*vIAFne~sGc!BO
zvKH3X_`;01iZOe<Y&IvAv6eU)W;xEhe3sPVJ2_granAf13$thCj7}O~cJpYvcB3d)
z1PxeP-#1?wtqqWdO8;rB(4GdJJ*m{5G!96e(5OZ;b8F142ofW5vm3IO<?d*0G0C@2
zn#^u+dHo74ud<<%^|aJ9Ej4Z2_z9O^@$K}ClEtO$i-%Y^r)6ek=L8d2QojUNrP11)
zIkR){JYK6Pt*&h-Pi7-LWlBZeNL8&h!&j~=Z~9gFGiJ^zxO(=S!nsBBisxU`7nD#M
z!7Zt*`rdWbOKWQDu4n(ovut_eiW~aVO=Gv>I>}FK0_|Q=$KEJH8)J7aX5)ngK*@(+
zyyp<M+N<yW3%^Vb&iDVZ^7-Ei?*lWxzb^k%rT;3rh*K<Y7M~Xm7;>L&%Kv{Gzoq~0
zhIjVY<R5X0^q>5l<n)fo=fPu!9L_xcFVy%unH+`${;~4;-wMxT=JVI(f2#CfMfX3a
zSk5dyi&1Z>U$L+O1tJYKHR<V$jrm~5YpfX0tTmU8o%Qu4?Am*(tAqQ+bj=<$lu~=q
z3)K!kyUh*trG`bBr%pp<$zEPl>seB1@;5ikPe0u$#X=im;?Zcs{E>+VOx$nc%O*Z!
z;x-e1YvO|@{>;QNGSsMFtoCYIUMZ`sVW7xri|j|wT<j^mt{l|~Ms_ktnW>bgWM9rO
zJD0I{Us-}a2j+@s4K+f(mzC6yG0aIx=yWPkm;_7F2xZh0WMFuZQIf?{J2=5e-;~P@
z%rmjj#8MNlGw}u!eJ0*%V!MgIGx1py$Czk^^L;bCL#F+ECMK9T{0bu;ktTj_+7C4`
z&a@Ahd_FZX*|Z-RPOIs@(nPn3OHC{_alVPOOmvwz#l#6FjxzC`Oe3D#Oza(Cw(KoD
zBdb5XW&iiaOa4LO{IjS36_+9J4|5Id8DO^TEew2xyG8f6;@Nrq<Mp@lJDLA~_VjNr
zGUPD9#DfFOmc51N%<E5Y+5f$9%0DQafA;j3lrC|5>Q^kiu3`D&vdU#O&dl7xxwGfb
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

diff --git a/deep_sequencing_unit/source/bash/lanes2srf b/deep_sequencing_unit/source/bash/lanes2srf
deleted file mode 100755
index 15dbeec0312..00000000000
--- a/deep_sequencing_unit/source/bash/lanes2srf
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-SRF_DIR=Srf
-[ -d $SRF_DIR ] || mkdir -p $SRF_DIR ]
-for a in 1 2 3 4 5 6 7 8; do
-  echo Converting Lane $a to SRF
-  time /dsf/illumina2srf -I -b -o $SRF_DIR/s_${a}.srf s_${a}_*_qseq.txt ;
-done
diff --git a/deep_sequencing_unit/source/bash/lanes2srf-pre1.3 b/deep_sequencing_unit/source/bash/lanes2srf-pre1.3
deleted file mode 100755
index 2d035d0a163..00000000000
--- a/deep_sequencing_unit/source/bash/lanes2srf-pre1.3
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-mkdir Srf
-for a in 1 2 3 4 5 6 7 8; do
-  echo Converting Lane $a to SRF
-  time illumina2srf -r -p -C 0.6 -o Srf/s_${a}.srf -N %r:%l:%t: -n %x:%y s_${a}_*_seq.txt ;
-done
diff --git a/deep_sequencing_unit/source/bash/lanes2srf_RTA b/deep_sequencing_unit/source/bash/lanes2srf_RTA
deleted file mode 100755
index 16617c2ba2e..00000000000
--- a/deep_sequencing_unit/source/bash/lanes2srf_RTA
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/bash
-
-export BUSTARD=$1
-export NUMBER_OF_LANES=$2
-export SRF_DIR=Srf
-export ILLUMINA2SRF=/usr/local/dsu/bin/illumina2srf
-
-export PRG=`basename $0`
-export USAGE="Usage: ${PRG} <Path_to_Bustard_Folder> <Number_of_Lanes> \n\nEXAMPLE: ${PRG} /array0/Runs/090720_42HUDAAXX/Data/Intensities/Bustard/ 8" 
-
-if [ -z "${BUSTARD}"  -o -z "${NUMBER_OF_LANES}" ]
-then
-   echo "${USAGE}"
-   exit 1
-fi
-
-[ -d $SRF_DIR ] || mkdir $SRF_DIR
-for  (( a=1; a<=$NUMBER_OF_LANES; a++ )); do
-  echo Converting Lane $a to SRF
-  $ILLUMINA2SRF -b -o $SRF_DIR/s_${a}.srf $BUSTARD/s_${a}_*_qseq.txt &
-done
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/bash/rm_p.sh b/deep_sequencing_unit/source/bash/rm_p.sh
deleted file mode 100755
index edd0d46ad08..00000000000
--- a/deep_sequencing_unit/source/bash/rm_p.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/bash
-# Simply removes the p from the int and nse files  
-
-for i in `ls *.p`; do 
-  j=`echo $i |  cut -c 1-16` 
-  mv $i $j
-  echo -e "Moving $i to $j";
-done
diff --git a/deep_sequencing_unit/source/core-plugins/core-plugins.properties b/deep_sequencing_unit/source/core-plugins/core-plugins.properties
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/body-style.css b/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/body-style.css
deleted file mode 100644
index 451a137bcce..00000000000
--- a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/body-style.css
+++ /dev/null
@@ -1,60 +0,0 @@
-
-input {
-border: 0px solid;
-height: 25px;
-border-color:#000000;
-outline: none;
-font: 18px "Trebuchet MS";
-}
-
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { 
-font: 16px;
-color:#999999;
- }
-h3 { font: 12px; }
-
-.greytext {font: 18px "Trebuchet MS";}
-.greytext:link {color:#BDBDBD; text-decoration:none}
-.greytext:visited {color:#BDBDBD; text-decoration:none}
-.greytext:active {color:#BDBDBD; text-decoration:none}
-.greytext:hover {color:#000000; text-decoration:none}
-.greytext input {color:#999999; text-decoration:none}
-
-
-.box {
-background-color: white;
-text-rendering: optimizeLegibility;
--webkit-border-radius: 6px;
-height: 50px;
-width: 480px;
-margin-top: 30px;
-padding: 8px 8px 8px 50px;
-border: 3px solid #999999;
-box-sizing: border-box;
--webkit-box-sizing: border-box;
--moz-box-sizing: border-box;
-border-radius: 6px 6px 6px 6px;
-}
-
-.loginname {
-background-image: url(images/sprite.png);
-background-repeat: no-repeat;
-background-position: 5px 10px; 
-}
-
-.password {
-background-image: url(images/sprite.png);
-background-repeat: no-repeat;
-background-position: 5px -30px; 
-}
-
-.loginbutton {
-margin-top: 30px;
-}
-
-div
-{
-}
-
diff --git a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/button.css b/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/button.css
deleted file mode 100644
index cbb0dec6eb3..00000000000
--- a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/button.css
+++ /dev/null
@@ -1,39 +0,0 @@
-button {
-  font: 18px "Trebuchet MS";
-  background-color: #222;
-  background-image: -moz-linear-gradient(top, rgba(255,255,255,.25), rgba(255,255,255,.11));
-  background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, rgba(255,255,255,.25)),color-stop(1, rgba(255,255,255,.11)));
-  background-image: -webkit-linear-gradient(rgba(255,255,255,.25), rgba(255,255,255,.11));
-  color: #fff;
-  text-rendering: optimizeLegibility;
-  text-shadow: 0 -1px 1px #222;
-  padding: 3px 5px 3px 5px;
-  border: 0;
-  border-radius: 6px;
-  border-bottom: 1px solid #222;
-  margin: 0;
-  -moz-box-shadow: 0 1px 3px #999;
-  -webkit-box-shadow: 0 1px 3px #999;
-  box-shadow: 0 1px 3px #999;
-  width: 150px;
-}
-
-button.first {
-  border-top-left-radius: 6px;
-  border-bottom-left-radius: 6px;
-}
-
-button.last {
-  border-top-right-radius: 6px;
-  border-bottom-right-radius: 6px;
-}
-
-button.active {
-  background-color: rgb(65,102,133);
-}
-
-button:hover {
-  background-color: grey;
-  cursor: pointer;
-}
-
diff --git a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/d3.js b/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/d3.js
deleted file mode 100755
index 13abb6dbc6f..00000000000
--- a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/d3.js
+++ /dev/null
@@ -1,4013 +0,0 @@
-(function(){if (!Date.now) Date.now = function() {
-  return +new Date;
-};
-try {
-  document.createElement("div").style.setProperty("opacity", 0, "");
-} catch (error) {
-  var d3_style_prototype = CSSStyleDeclaration.prototype,
-      d3_style_setProperty = d3_style_prototype.setProperty;
-  d3_style_prototype.setProperty = function(name, value, priority) {
-    d3_style_setProperty.call(this, name, value + "", priority);
-  };
-}
-d3 = {version: "2.1.3"}; // semver
-var d3_arraySubclass = [].__proto__?
-
-// Until ECMAScript supports array subclassing, prototype injection works well.
-function(array, prototype) {
-  array.__proto__ = prototype;
-}:
-
-// And if your browser doesn't support __proto__, we'll use direct extension.
-function(array, prototype) {
-  for (var property in prototype) array[property] = prototype[property];
-};
-function d3_this() {
-  return this;
-}
-d3.functor = function(v) {
-  return typeof v === "function" ? v : function() { return v; };
-};
-// A getter-setter method that preserves the appropriate `this` context.
-d3.rebind = function(object, method) {
-  return function() {
-    var x = method.apply(object, arguments);
-    return arguments.length ? object : x;
-  };
-};
-d3.ascending = function(a, b) {
-  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
-};
-d3.descending = function(a, b) {
-  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
-};
-d3.min = function(array, f) {
-  var i = -1,
-      n = array.length,
-      a,
-      b;
-  if (arguments.length === 1) {
-    while (++i < n && ((a = array[i]) == null || a != a)) a = undefined;
-    while (++i < n) if ((b = array[i]) != null && a > b) a = b;
-  } else {
-    while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined;
-    while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;
-  }
-  return a;
-};
-d3.max = function(array, f) {
-  var i = -1,
-      n = array.length,
-      a,
-      b;
-  if (arguments.length === 1) {
-    while (++i < n && ((a = array[i]) == null || a != a)) a = undefined;
-    while (++i < n) if ((b = array[i]) != null && b > a) a = b;
-  } else {
-    while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined;
-    while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;
-  }
-  return a;
-};
-d3.sum = function(array, f) {
-  var s = 0,
-      n = array.length,
-      a,
-      i = -1;
-
-  if (arguments.length === 1) {
-    while (++i < n) if (!isNaN(a = +array[i])) s += a;
-  } else {
-    while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a;
-  }
-
-  return s;
-};
-// R-7 per <http://en.wikipedia.org/wiki/Quantile>
-d3.quantile = function(values, p) {
-  var H = (values.length - 1) * p + 1,
-      h = Math.floor(H),
-      v = values[h - 1],
-      e = H - h;
-  return e ? v + e * (values[h] - v) : v;
-};
-d3.zip = function() {
-  if (!(n = arguments.length)) return [];
-  for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m;) {
-    for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n;) {
-      zip[j] = arguments[j][i];
-    }
-  }
-  return zips;
-};
-
-function d3_zipLength(d) {
-  return d.length;
-}
-// Locate the insertion point for x in a to maintain sorted order. The
-// arguments lo and hi may be used to specify a subset of the array which should
-// be considered; by default the entire array is used. If x is already present
-// in a, the insertion point will be before (to the left of) any existing
-// entries. The return value is suitable for use as the first argument to
-// `array.splice` assuming that a is already sorted.
-//
-// The returned insertion point i partitions the array a into two halves so that
-// all v < x for v in a[lo:i] for the left side and all v >= x for v in a[i:hi]
-// for the right side.
-d3.bisectLeft = function(a, x, lo, hi) {
-  if (arguments.length < 3) lo = 0;
-  if (arguments.length < 4) hi = a.length;
-  while (lo < hi) {
-    var mid = (lo + hi) >> 1;
-    if (a[mid] < x) lo = mid + 1;
-    else hi = mid;
-  }
-  return lo;
-};
-
-// Similar to bisectLeft, but returns an insertion point which comes after (to
-// the right of) any existing entries of x in a.
-//
-// The returned insertion point i partitions the array into two halves so that
-// all v <= x for v in a[lo:i] for the left side and all v > x for v in a[i:hi]
-// for the right side.
-d3.bisect =
-d3.bisectRight = function(a, x, lo, hi) {
-  if (arguments.length < 3) lo = 0;
-  if (arguments.length < 4) hi = a.length;
-  while (lo < hi) {
-    var mid = (lo + hi) >> 1;
-    if (x < a[mid]) hi = mid;
-    else lo = mid + 1;
-  }
-  return lo;
-};
-d3.first = function(array, f) {
-  var i = 0,
-      n = array.length,
-      a = array[0],
-      b;
-  if (arguments.length === 1) f = d3.ascending;
-  while (++i < n) {
-    if (f.call(array, a, b = array[i]) > 0) {
-      a = b;
-    }
-  }
-  return a;
-};
-d3.last = function(array, f) {
-  var i = 0,
-      n = array.length,
-      a = array[0],
-      b;
-  if (arguments.length === 1) f = d3.ascending;
-  while (++i < n) {
-    if (f.call(array, a, b = array[i]) <= 0) {
-      a = b;
-    }
-  }
-  return a;
-};
-d3.nest = function() {
-  var nest = {},
-      keys = [],
-      sortKeys = [],
-      sortValues,
-      rollup;
-
-  function map(array, depth) {
-    if (depth >= keys.length) return rollup
-        ? rollup.call(nest, array) : (sortValues
-        ? array.sort(sortValues)
-        : array);
-
-    var i = -1,
-        n = array.length,
-        key = keys[depth++],
-        keyValue,
-        object,
-        o = {};
-
-    while (++i < n) {
-      if ((keyValue = key(object = array[i])) in o) {
-        o[keyValue].push(object);
-      } else {
-        o[keyValue] = [object];
-      }
-    }
-
-    for (keyValue in o) {
-      o[keyValue] = map(o[keyValue], depth);
-    }
-
-    return o;
-  }
-
-  function entries(map, depth) {
-    if (depth >= keys.length) return map;
-
-    var a = [],
-        sortKey = sortKeys[depth++],
-        key;
-
-    for (key in map) {
-      a.push({key: key, values: entries(map[key], depth)});
-    }
-
-    if (sortKey) a.sort(function(a, b) {
-      return sortKey(a.key, b.key);
-    });
-
-    return a;
-  }
-
-  nest.map = function(array) {
-    return map(array, 0);
-  };
-
-  nest.entries = function(array) {
-    return entries(map(array, 0), 0);
-  };
-
-  nest.key = function(d) {
-    keys.push(d);
-    return nest;
-  };
-
-  // Specifies the order for the most-recently specified key.
-  // Note: only applies to entries. Map keys are unordered!
-  nest.sortKeys = function(order) {
-    sortKeys[keys.length - 1] = order;
-    return nest;
-  };
-
-  // Specifies the order for leaf values.
-  // Applies to both maps and entries array.
-  nest.sortValues = function(order) {
-    sortValues = order;
-    return nest;
-  };
-
-  nest.rollup = function(f) {
-    rollup = f;
-    return nest;
-  };
-
-  return nest;
-};
-d3.keys = function(map) {
-  var keys = [];
-  for (var key in map) keys.push(key);
-  return keys;
-};
-d3.values = function(map) {
-  var values = [];
-  for (var key in map) values.push(map[key]);
-  return values;
-};
-d3.entries = function(map) {
-  var entries = [];
-  for (var key in map) entries.push({key: key, value: map[key]});
-  return entries;
-};
-d3.permute = function(array, indexes) {
-  var permutes = [],
-      i = -1,
-      n = indexes.length;
-  while (++i < n) permutes[i] = array[indexes[i]];
-  return permutes;
-};
-d3.merge = function(arrays) {
-  return Array.prototype.concat.apply([], arrays);
-};
-d3.split = function(array, f) {
-  var arrays = [],
-      values = [],
-      value,
-      i = -1,
-      n = array.length;
-  if (arguments.length < 2) f = d3_splitter;
-  while (++i < n) {
-    if (f.call(values, value = array[i], i)) {
-      values = [];
-    } else {
-      if (!values.length) arrays.push(values);
-      values.push(value);
-    }
-  }
-  return arrays;
-};
-
-function d3_splitter(d) {
-  return d == null;
-}
-function d3_collapse(s) {
-  return s.replace(/(^\s+)|(\s+$)/g, "").replace(/\s+/g, " ");
-}
-/**
- * @param {number} start
- * @param {number=} stop
- * @param {number=} step
- */
-d3.range = function(start, stop, step) {
-  if (arguments.length < 3) {
-    step = 1;
-    if (arguments.length < 2) {
-      stop = start;
-      start = 0;
-    }
-  }
-  if ((stop - start) / step == Infinity) throw new Error("infinite range");
-  var range = [],
-       i = -1,
-       j;
-  if (step < 0) while ((j = start + step * ++i) > stop) range.push(j);
-  else while ((j = start + step * ++i) < stop) range.push(j);
-  return range;
-};
-d3.requote = function(s) {
-  return s.replace(d3_requote_re, "\\$&");
-};
-
-var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
-d3.round = function(x, n) {
-  return n
-      ? Math.round(x * Math.pow(10, n)) * Math.pow(10, -n)
-      : Math.round(x);
-};
-d3.xhr = function(url, mime, callback) {
-  var req = new XMLHttpRequest;
-  if (arguments.length < 3) callback = mime;
-  else if (mime && req.overrideMimeType) req.overrideMimeType(mime);
-  req.open("GET", url, true);
-  req.onreadystatechange = function() {
-    if (req.readyState === 4) callback(req.status < 300 ? req : null);
-  };
-  req.send(null);
-};
-d3.text = function(url, mime, callback) {
-  function ready(req) {
-    callback(req && req.responseText);
-  }
-  if (arguments.length < 3) {
-    callback = mime;
-    mime = null;
-  }
-  d3.xhr(url, mime, ready);
-};
-d3.json = function(url, callback) {
-  d3.text(url, "application/json", function(text) {
-    callback(text ? JSON.parse(text) : null);
-  });
-};
-d3.html = function(url, callback) {
-  d3.text(url, "text/html", function(text) {
-    if (text != null) { // Treat empty string as valid HTML.
-      var range = document.createRange();
-      range.selectNode(document.body);
-      text = range.createContextualFragment(text);
-    }
-    callback(text);
-  });
-};
-d3.xml = function(url, mime, callback) {
-  function ready(req) {
-    callback(req && req.responseXML);
-  }
-  if (arguments.length < 3) {
-    callback = mime;
-    mime = null;
-  }
-  d3.xhr(url, mime, ready);
-};
-d3.ns = {
-
-  prefix: {
-    svg: "http://www.w3.org/2000/svg",
-    xhtml: "http://www.w3.org/1999/xhtml",
-    xlink: "http://www.w3.org/1999/xlink",
-    xml: "http://www.w3.org/XML/1998/namespace",
-    xmlns: "http://www.w3.org/2000/xmlns/"
-  },
-
-  qualify: function(name) {
-    var i = name.indexOf(":");
-    return i < 0 ? name : {
-      space: d3.ns.prefix[name.substring(0, i)],
-      local: name.substring(i + 1)
-    };
-  }
-
-};
-/** @param {...string} types */
-d3.dispatch = function(types) {
-  var dispatch = {},
-      type;
-  for (var i = 0, n = arguments.length; i < n; i++) {
-    type = arguments[i];
-    dispatch[type] = d3_dispatch(type);
-  }
-  return dispatch;
-};
-
-function d3_dispatch(type) {
-  var dispatch = {},
-      listeners = [];
-
-  dispatch.add = function(listener) {
-    for (var i = 0; i < listeners.length; i++) {
-      if (listeners[i].listener == listener) return dispatch; // already registered
-    }
-    listeners.push({listener: listener, on: true});
-    return dispatch;
-  };
-
-  dispatch.remove = function(listener) {
-    for (var i = 0; i < listeners.length; i++) {
-      var l = listeners[i];
-      if (l.listener == listener) {
-        l.on = false;
-        listeners = listeners.slice(0, i).concat(listeners.slice(i + 1));
-        break;
-      }
-    }
-    return dispatch;
-  };
-
-  dispatch.dispatch = function() {
-    var ls = listeners; // defensive reference
-    for (var i = 0, n = ls.length; i < n; i++) {
-      var l = ls[i];
-      if (l.on) l.listener.apply(this, arguments);
-    }
-  };
-
-  return dispatch;
-};
-// TODO align
-d3.format = function(specifier) {
-  var match = d3_format_re.exec(specifier),
-      fill = match[1] || " ",
-      sign = match[3] || "",
-      zfill = match[5],
-      width = +match[6],
-      comma = match[7],
-      precision = match[8],
-      type = match[9],
-      percentage = false,
-      integer = false;
-
-  if (precision) precision = precision.substring(1);
-
-  if (zfill) {
-    fill = "0"; // TODO align = "=";
-    if (comma) width -= Math.floor((width - 1) / 4);
-  }
-
-  switch (type) {
-    case "n": comma = true; type = "g"; break;
-    case "%": percentage = true; type = "f"; break;
-    case "p": percentage = true; type = "r"; break;
-    case "d": integer = true; precision = "0"; break;
-  }
-
-  type = d3_format_types[type] || d3_format_typeDefault;
-
-  return function(value) {
-    var number = percentage ? value * 100 : +value,
-        negative = (number < 0) && (number = -number) ? "\u2212" : sign;
-
-    // Return the empty string for floats formatted as ints.
-    if (integer && (number % 1)) return "";
-
-    // Convert the input value to the desired precision.
-    value = type(number, precision);
-
-    // If the fill character is 0, the sign and group is applied after the fill.
-    if (zfill) {
-      var length = value.length + negative.length;
-      if (length < width) value = new Array(width - length + 1).join(fill) + value;
-      if (comma) value = d3_format_group(value);
-      value = negative + value;
-    }
-
-    // Otherwise (e.g., space-filling), the sign and group is applied before.
-    else {
-      if (comma) value = d3_format_group(value);
-      value = negative + value;
-      var length = value.length;
-      if (length < width) value = new Array(width - length + 1).join(fill) + value;
-    }
-    if (percentage) value += "%";
-
-    return value;
-  };
-};
-
-// [[fill]align][sign][#][0][width][,][.precision][type]
-var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/;
-
-var d3_format_types = {
-  g: function(x, p) { return x.toPrecision(p); },
-  e: function(x, p) { return x.toExponential(p); },
-  f: function(x, p) { return x.toFixed(p); },
-  r: function(x, p) {
-    var n = 1 + Math.floor(1e-15 + Math.log(x) / Math.LN10);
-    return d3.round(x, p - n).toFixed(Math.max(0, Math.min(20, p - n)));
-  }
-};
-
-function d3_format_typeDefault(x) {
-  return x + "";
-}
-
-// Apply comma grouping for thousands.
-function d3_format_group(value) {
-  var i = value.lastIndexOf("."),
-      f = i >= 0 ? value.substring(i) : (i = value.length, ""),
-      t = [];
-  while (i > 0) t.push(value.substring(i -= 3, i + 3));
-  return t.reverse().join(",") + f;
-}
-/*
- * TERMS OF USE - EASING EQUATIONS
- *
- * Open source under the BSD License.
- *
- * Copyright 2001 Robert Penner
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice, this
- *   list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright notice,
- *   this list of conditions and the following disclaimer in the documentation
- *   and/or other materials provided with the distribution.
- *
- * - Neither the name of the author nor the names of contributors may be used to
- *   endorse or promote products derived from this software without specific
- *   prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-var d3_ease_quad = d3_ease_poly(2),
-    d3_ease_cubic = d3_ease_poly(3);
-
-var d3_ease = {
-  linear: function() { return d3_ease_linear; },
-  poly: d3_ease_poly,
-  quad: function() { return d3_ease_quad; },
-  cubic: function() { return d3_ease_cubic; },
-  sin: function() { return d3_ease_sin; },
-  exp: function() { return d3_ease_exp; },
-  circle: function() { return d3_ease_circle; },
-  elastic: d3_ease_elastic,
-  back: d3_ease_back,
-  bounce: function() { return d3_ease_bounce; }
-};
-
-var d3_ease_mode = {
-  "in": function(f) { return f; },
-  "out": d3_ease_reverse,
-  "in-out": d3_ease_reflect,
-  "out-in": function(f) { return d3_ease_reflect(d3_ease_reverse(f)); }
-};
-
-d3.ease = function(name) {
-  var i = name.indexOf("-"),
-      t = i >= 0 ? name.substring(0, i) : name,
-      m = i >= 0 ? name.substring(i + 1) : "in";
-  return d3_ease_clamp(d3_ease_mode[m](d3_ease[t].apply(null, Array.prototype.slice.call(arguments, 1))));
-};
-
-function d3_ease_clamp(f) {
-  return function(t) {
-    return t <= 0 ? 0 : t >= 1 ? 1 : f(t);
-  };
-}
-
-function d3_ease_reverse(f) {
-  return function(t) {
-    return 1 - f(1 - t);
-  };
-}
-
-function d3_ease_reflect(f) {
-  return function(t) {
-    return .5 * (t < .5 ? f(2 * t) : (2 - f(2 - 2 * t)));
-  };
-}
-
-function d3_ease_linear(t) {
-  return t;
-}
-
-function d3_ease_poly(e) {
-  return function(t) {
-    return Math.pow(t, e);
-  }
-}
-
-function d3_ease_sin(t) {
-  return 1 - Math.cos(t * Math.PI / 2);
-}
-
-function d3_ease_exp(t) {
-  return Math.pow(2, 10 * (t - 1));
-}
-
-function d3_ease_circle(t) {
-  return 1 - Math.sqrt(1 - t * t);
-}
-
-function d3_ease_elastic(a, p) {
-  var s;
-  if (arguments.length < 2) p = 0.45;
-  if (arguments.length < 1) { a = 1; s = p / 4; }
-  else s = p / (2 * Math.PI) * Math.asin(1 / a);
-  return function(t) {
-    return 1 + a * Math.pow(2, 10 * -t) * Math.sin((t - s) * 2 * Math.PI / p);
-  };
-}
-
-function d3_ease_back(s) {
-  if (!s) s = 1.70158;
-  return function(t) {
-    return t * t * ((s + 1) * t - s);
-  };
-}
-
-function d3_ease_bounce(t) {
-  return t < 1 / 2.75 ? 7.5625 * t * t
-      : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75
-      : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375
-      : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;
-}
-d3.event = null;
-d3.interpolate = function(a, b) {
-  var i = d3.interpolators.length, f;
-  while (--i >= 0 && !(f = d3.interpolators[i](a, b)));
-  return f;
-};
-
-d3.interpolateNumber = function(a, b) {
-  b -= a;
-  return function(t) { return a + b * t; };
-};
-
-d3.interpolateRound = function(a, b) {
-  b -= a;
-  return function(t) { return Math.round(a + b * t); };
-};
-
-d3.interpolateString = function(a, b) {
-  var m, // current match
-      i, // current index
-      j, // current index (for coallescing)
-      s0 = 0, // start index of current string prefix
-      s1 = 0, // end index of current string prefix
-      s = [], // string constants and placeholders
-      q = [], // number interpolators
-      n, // q.length
-      o;
-
-  // Reset our regular expression!
-  d3_interpolate_number.lastIndex = 0;
-
-  // Find all numbers in b.
-  for (i = 0; m = d3_interpolate_number.exec(b); ++i) {
-    if (m.index) s.push(b.substring(s0, s1 = m.index));
-    q.push({i: s.length, x: m[0]});
-    s.push(null);
-    s0 = d3_interpolate_number.lastIndex;
-  }
-  if (s0 < b.length) s.push(b.substring(s0));
-
-  // Find all numbers in a.
-  for (i = 0, n = q.length; (m = d3_interpolate_number.exec(a)) && i < n; ++i) {
-    o = q[i];
-    if (o.x == m[0]) { // The numbers match, so coallesce.
-      if (o.i) {
-        if (s[o.i + 1] == null) { // This match is followed by another number.
-          s[o.i - 1] += o.x;
-          s.splice(o.i, 1);
-          for (j = i + 1; j < n; ++j) q[j].i--;
-        } else { // This match is followed by a string, so coallesce twice.
-          s[o.i - 1] += o.x + s[o.i + 1];
-          s.splice(o.i, 2);
-          for (j = i + 1; j < n; ++j) q[j].i -= 2;
-        }
-      } else {
-          if (s[o.i + 1] == null) { // This match is followed by another number.
-          s[o.i] = o.x;
-        } else { // This match is followed by a string, so coallesce twice.
-          s[o.i] = o.x + s[o.i + 1];
-          s.splice(o.i + 1, 1);
-          for (j = i + 1; j < n; ++j) q[j].i--;
-        }
-      }
-      q.splice(i, 1);
-      n--;
-      i--;
-    } else {
-      o.x = d3.interpolateNumber(parseFloat(m[0]), parseFloat(o.x));
-    }
-  }
-
-  // Remove any numbers in b not found in a.
-  while (i < n) {
-    o = q.pop();
-    if (s[o.i + 1] == null) { // This match is followed by another number.
-      s[o.i] = o.x;
-    } else { // This match is followed by a string, so coallesce twice.
-      s[o.i] = o.x + s[o.i + 1];
-      s.splice(o.i + 1, 1);
-    }
-    n--;
-  }
-
-  // Special optimization for only a single match.
-  if (s.length === 1) {
-    return s[0] == null ? q[0].x : function() { return b; };
-  }
-
-  // Otherwise, interpolate each of the numbers and rejoin the string.
-  return function(t) {
-    for (i = 0; i < n; ++i) s[(o = q[i]).i] = o.x(t);
-    return s.join("");
-  };
-};
-
-d3.interpolateRgb = function(a, b) {
-  a = d3.rgb(a);
-  b = d3.rgb(b);
-  var ar = a.r,
-      ag = a.g,
-      ab = a.b,
-      br = b.r - ar,
-      bg = b.g - ag,
-      bb = b.b - ab;
-  return function(t) {
-    return "rgb(" + Math.round(ar + br * t)
-        + "," + Math.round(ag + bg * t)
-        + "," + Math.round(ab + bb * t)
-        + ")";
-  };
-};
-
-// interpolates HSL space, but outputs RGB string (for compatibility)
-d3.interpolateHsl = function(a, b) {
-  a = d3.hsl(a);
-  b = d3.hsl(b);
-  var h0 = a.h,
-      s0 = a.s,
-      l0 = a.l,
-      h1 = b.h - h0,
-      s1 = b.s - s0,
-      l1 = b.l - l0;
-  return function(t) {
-    return d3_hsl_rgb(h0 + h1 * t, s0 + s1 * t, l0 + l1 * t).toString();
-  };
-};
-
-d3.interpolateArray = function(a, b) {
-  var x = [],
-      c = [],
-      na = a.length,
-      nb = b.length,
-      n0 = Math.min(a.length, b.length),
-      i;
-  for (i = 0; i < n0; ++i) x.push(d3.interpolate(a[i], b[i]));
-  for (; i < na; ++i) c[i] = a[i];
-  for (; i < nb; ++i) c[i] = b[i];
-  return function(t) {
-    for (i = 0; i < n0; ++i) c[i] = x[i](t);
-    return c;
-  };
-};
-
-d3.interpolateObject = function(a, b) {
-  var i = {},
-      c = {},
-      k;
-  for (k in a) {
-    if (k in b) {
-      i[k] = d3_interpolateByName(k)(a[k], b[k]);
-    } else {
-      c[k] = a[k];
-    }
-  }
-  for (k in b) {
-    if (!(k in a)) {
-      c[k] = b[k];
-    }
-  }
-  return function(t) {
-    for (k in i) c[k] = i[k](t);
-    return c;
-  };
-}
-
-var d3_interpolate_number = /[-+]?(?:\d+\.\d+|\d+\.|\.\d+|\d+)(?:[eE][-]?\d+)?/g,
-    d3_interpolate_rgb = {background: 1, fill: 1, stroke: 1};
-
-function d3_interpolateByName(n) {
-  return n in d3_interpolate_rgb || /\bcolor\b/.test(n)
-      ? d3.interpolateRgb
-      : d3.interpolate;
-}
-
-d3.interpolators = [
-  d3.interpolateObject,
-  function(a, b) { return (b instanceof Array) && d3.interpolateArray(a, b); },
-  function(a, b) { return (typeof b === "string") && d3.interpolateString(String(a), b); },
-  function(a, b) { return (typeof b === "string" ? b in d3_rgb_names || /^(#|rgb\(|hsl\()/.test(b) : b instanceof d3_Rgb || b instanceof d3_Hsl) && d3.interpolateRgb(String(a), b); },
-  function(a, b) { return (typeof b === "number") && d3.interpolateNumber(+a, b); }
-];
-function d3_uninterpolateNumber(a, b) {
-  b = b - (a = +a) ? 1 / (b - a) : 0;
-  return function(x) { return (x - a) * b; };
-}
-
-function d3_uninterpolateClamp(a, b) {
-  b = b - (a = +a) ? 1 / (b - a) : 0;
-  return function(x) { return Math.max(0, Math.min(1, (x - a) * b)); };
-}
-d3.rgb = function(r, g, b) {
-  return arguments.length === 1
-      ? d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb)
-      : d3_rgb(~~r, ~~g, ~~b);
-};
-
-function d3_rgb(r, g, b) {
-  return new d3_Rgb(r, g, b);
-}
-
-function d3_Rgb(r, g, b) {
-  this.r = r;
-  this.g = g;
-  this.b = b;
-}
-
-d3_Rgb.prototype.brighter = function(k) {
-  k = Math.pow(0.7, arguments.length ? k : 1);
-  var r = this.r,
-      g = this.g,
-      b = this.b,
-      i = 30;
-  if (!r && !g && !b) return d3_rgb(i, i, i);
-  if (r && r < i) r = i;
-  if (g && g < i) g = i;
-  if (b && b < i) b = i;
-  return d3_rgb(
-    Math.min(255, Math.floor(r / k)),
-    Math.min(255, Math.floor(g / k)),
-    Math.min(255, Math.floor(b / k)));
-};
-
-d3_Rgb.prototype.darker = function(k) {
-  k = Math.pow(0.7, arguments.length ? k : 1);
-  return d3_rgb(
-    Math.max(0, Math.floor(k * this.r)),
-    Math.max(0, Math.floor(k * this.g)),
-    Math.max(0, Math.floor(k * this.b)));
-};
-
-d3_Rgb.prototype.hsl = function() {
-  return d3_rgb_hsl(this.r, this.g, this.b);
-};
-
-d3_Rgb.prototype.toString = function() {
-  return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);
-};
-
-function d3_rgb_hex(v) {
-  return v < 0x10 ? "0" + v.toString(16) : v.toString(16);
-}
-
-function d3_rgb_parse(format, rgb, hsl) {
-  var r = 0, // red channel; int in [0, 255]
-      g = 0, // green channel; int in [0, 255]
-      b = 0, // blue channel; int in [0, 255]
-      m1, // CSS color specification match
-      m2, // CSS color specification type (e.g., rgb)
-      name;
-
-  /* Handle hsl, rgb. */
-  m1 = /([a-z]+)\((.*)\)/i.exec(format);
-  if (m1) {
-    m2 = m1[2].split(",");
-    switch (m1[1]) {
-      case "hsl": {
-        return hsl(
-          parseFloat(m2[0]), // degrees
-          parseFloat(m2[1]) / 100, // percentage
-          parseFloat(m2[2]) / 100 // percentage
-        );
-      }
-      case "rgb": {
-        return rgb(
-          d3_rgb_parseNumber(m2[0]),
-          d3_rgb_parseNumber(m2[1]),
-          d3_rgb_parseNumber(m2[2])
-        );
-      }
-    }
-  }
-
-  /* Named colors. */
-  if (name = d3_rgb_names[format]) return rgb(name.r, name.g, name.b);
-
-  /* Hexadecimal colors: #rgb and #rrggbb. */
-  if (format != null && format.charAt(0) === "#") {
-    if (format.length === 4) {
-      r = format.charAt(1); r += r;
-      g = format.charAt(2); g += g;
-      b = format.charAt(3); b += b;
-    } else if (format.length === 7) {
-      r = format.substring(1, 3);
-      g = format.substring(3, 5);
-      b = format.substring(5, 7);
-    }
-    r = parseInt(r, 16);
-    g = parseInt(g, 16);
-    b = parseInt(b, 16);
-  }
-
-  return rgb(r, g, b);
-}
-
-function d3_rgb_hsl(r, g, b) {
-  var min = Math.min(r /= 255, g /= 255, b /= 255),
-      max = Math.max(r, g, b),
-      d = max - min,
-      h,
-      s,
-      l = (max + min) / 2;
-  if (d) {
-    s = l < .5 ? d / (max + min) : d / (2 - max - min);
-    if (r == max) h = (g - b) / d + (g < b ? 6 : 0);
-    else if (g == max) h = (b - r) / d + 2;
-    else h = (r - g) / d + 4;
-    h *= 60;
-  } else {
-    s = h = 0;
-  }
-  return d3_hsl(h, s, l);
-}
-
-function d3_rgb_parseNumber(c) { // either integer or percentage
-  var f = parseFloat(c);
-  return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f;
-}
-
-var d3_rgb_names = {
-  aliceblue: "#f0f8ff",
-  antiquewhite: "#faebd7",
-  aqua: "#00ffff",
-  aquamarine: "#7fffd4",
-  azure: "#f0ffff",
-  beige: "#f5f5dc",
-  bisque: "#ffe4c4",
-  black: "#000000",
-  blanchedalmond: "#ffebcd",
-  blue: "#0000ff",
-  blueviolet: "#8a2be2",
-  brown: "#a52a2a",
-  burlywood: "#deb887",
-  cadetblue: "#5f9ea0",
-  chartreuse: "#7fff00",
-  chocolate: "#d2691e",
-  coral: "#ff7f50",
-  cornflowerblue: "#6495ed",
-  cornsilk: "#fff8dc",
-  crimson: "#dc143c",
-  cyan: "#00ffff",
-  darkblue: "#00008b",
-  darkcyan: "#008b8b",
-  darkgoldenrod: "#b8860b",
-  darkgray: "#a9a9a9",
-  darkgreen: "#006400",
-  darkgrey: "#a9a9a9",
-  darkkhaki: "#bdb76b",
-  darkmagenta: "#8b008b",
-  darkolivegreen: "#556b2f",
-  darkorange: "#ff8c00",
-  darkorchid: "#9932cc",
-  darkred: "#8b0000",
-  darksalmon: "#e9967a",
-  darkseagreen: "#8fbc8f",
-  darkslateblue: "#483d8b",
-  darkslategray: "#2f4f4f",
-  darkslategrey: "#2f4f4f",
-  darkturquoise: "#00ced1",
-  darkviolet: "#9400d3",
-  deeppink: "#ff1493",
-  deepskyblue: "#00bfff",
-  dimgray: "#696969",
-  dimgrey: "#696969",
-  dodgerblue: "#1e90ff",
-  firebrick: "#b22222",
-  floralwhite: "#fffaf0",
-  forestgreen: "#228b22",
-  fuchsia: "#ff00ff",
-  gainsboro: "#dcdcdc",
-  ghostwhite: "#f8f8ff",
-  gold: "#ffd700",
-  goldenrod: "#daa520",
-  gray: "#808080",
-  green: "#008000",
-  greenyellow: "#adff2f",
-  grey: "#808080",
-  honeydew: "#f0fff0",
-  hotpink: "#ff69b4",
-  indianred: "#cd5c5c",
-  indigo: "#4b0082",
-  ivory: "#fffff0",
-  khaki: "#f0e68c",
-  lavender: "#e6e6fa",
-  lavenderblush: "#fff0f5",
-  lawngreen: "#7cfc00",
-  lemonchiffon: "#fffacd",
-  lightblue: "#add8e6",
-  lightcoral: "#f08080",
-  lightcyan: "#e0ffff",
-  lightgoldenrodyellow: "#fafad2",
-  lightgray: "#d3d3d3",
-  lightgreen: "#90ee90",
-  lightgrey: "#d3d3d3",
-  lightpink: "#ffb6c1",
-  lightsalmon: "#ffa07a",
-  lightseagreen: "#20b2aa",
-  lightskyblue: "#87cefa",
-  lightslategray: "#778899",
-  lightslategrey: "#778899",
-  lightsteelblue: "#b0c4de",
-  lightyellow: "#ffffe0",
-  lime: "#00ff00",
-  limegreen: "#32cd32",
-  linen: "#faf0e6",
-  magenta: "#ff00ff",
-  maroon: "#800000",
-  mediumaquamarine: "#66cdaa",
-  mediumblue: "#0000cd",
-  mediumorchid: "#ba55d3",
-  mediumpurple: "#9370db",
-  mediumseagreen: "#3cb371",
-  mediumslateblue: "#7b68ee",
-  mediumspringgreen: "#00fa9a",
-  mediumturquoise: "#48d1cc",
-  mediumvioletred: "#c71585",
-  midnightblue: "#191970",
-  mintcream: "#f5fffa",
-  mistyrose: "#ffe4e1",
-  moccasin: "#ffe4b5",
-  navajowhite: "#ffdead",
-  navy: "#000080",
-  oldlace: "#fdf5e6",
-  olive: "#808000",
-  olivedrab: "#6b8e23",
-  orange: "#ffa500",
-  orangered: "#ff4500",
-  orchid: "#da70d6",
-  palegoldenrod: "#eee8aa",
-  palegreen: "#98fb98",
-  paleturquoise: "#afeeee",
-  palevioletred: "#db7093",
-  papayawhip: "#ffefd5",
-  peachpuff: "#ffdab9",
-  peru: "#cd853f",
-  pink: "#ffc0cb",
-  plum: "#dda0dd",
-  powderblue: "#b0e0e6",
-  purple: "#800080",
-  red: "#ff0000",
-  rosybrown: "#bc8f8f",
-  royalblue: "#4169e1",
-  saddlebrown: "#8b4513",
-  salmon: "#fa8072",
-  sandybrown: "#f4a460",
-  seagreen: "#2e8b57",
-  seashell: "#fff5ee",
-  sienna: "#a0522d",
-  silver: "#c0c0c0",
-  skyblue: "#87ceeb",
-  slateblue: "#6a5acd",
-  slategray: "#708090",
-  slategrey: "#708090",
-  snow: "#fffafa",
-  springgreen: "#00ff7f",
-  steelblue: "#4682b4",
-  tan: "#d2b48c",
-  teal: "#008080",
-  thistle: "#d8bfd8",
-  tomato: "#ff6347",
-  turquoise: "#40e0d0",
-  violet: "#ee82ee",
-  wheat: "#f5deb3",
-  white: "#ffffff",
-  whitesmoke: "#f5f5f5",
-  yellow: "#ffff00",
-  yellowgreen: "#9acd32"
-};
-
-for (var d3_rgb_name in d3_rgb_names) {
-  d3_rgb_names[d3_rgb_name] = d3_rgb_parse(
-      d3_rgb_names[d3_rgb_name],
-      d3_rgb,
-      d3_hsl_rgb);
-}
-d3.hsl = function(h, s, l) {
-  return arguments.length === 1
-      ? d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl)
-      : d3_hsl(+h, +s, +l);
-};
-
-function d3_hsl(h, s, l) {
-  return new d3_Hsl(h, s, l);
-}
-
-function d3_Hsl(h, s, l) {
-  this.h = h;
-  this.s = s;
-  this.l = l;
-}
-
-d3_Hsl.prototype.brighter = function(k) {
-  k = Math.pow(0.7, arguments.length ? k : 1);
-  return d3_hsl(this.h, this.s, this.l / k);
-};
-
-d3_Hsl.prototype.darker = function(k) {
-  k = Math.pow(0.7, arguments.length ? k : 1);
-  return d3_hsl(this.h, this.s, k * this.l);
-};
-
-d3_Hsl.prototype.rgb = function() {
-  return d3_hsl_rgb(this.h, this.s, this.l);
-};
-
-d3_Hsl.prototype.toString = function() {
-  return "hsl(" + this.h + "," + this.s * 100 + "%," + this.l * 100 + "%)";
-};
-
-function d3_hsl_rgb(h, s, l) {
-  var m1,
-      m2;
-
-  /* Some simple corrections for h, s and l. */
-  h = h % 360; if (h < 0) h += 360;
-  s = s < 0 ? 0 : s > 1 ? 1 : s;
-  l = l < 0 ? 0 : l > 1 ? 1 : l;
-
-  /* From FvD 13.37, CSS Color Module Level 3 */
-  m2 = l <= .5 ? l * (1 + s) : l + s - l * s;
-  m1 = 2 * l - m2;
-
-  function v(h) {
-    if (h > 360) h -= 360;
-    else if (h < 0) h += 360;
-    if (h < 60) return m1 + (m2 - m1) * h / 60;
-    if (h < 180) return m2;
-    if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;
-    return m1;
-  }
-
-  function vv(h) {
-    return Math.round(v(h) * 255);
-  }
-
-  return d3_rgb(vv(h + 120), vv(h), vv(h - 120));
-}
-function d3_selection(groups) {
-  d3_arraySubclass(groups, d3_selectionPrototype);
-  return groups;
-}
-
-var d3_select = function(s, n) { return n.querySelector(s); },
-    d3_selectAll = function(s, n) { return n.querySelectorAll(s); };
-
-// Prefer Sizzle, if available.
-if (typeof Sizzle === "function") {
-  d3_select = function(s, n) { return Sizzle(s, n)[0]; };
-  d3_selectAll = function(s, n) { return Sizzle.uniqueSort(Sizzle(s, n)); };
-}
-
-var d3_selectionPrototype = [];
-
-d3.selection = function() {
-  return d3_selectionRoot;
-};
-
-d3.selection.prototype = d3_selectionPrototype;
-d3_selectionPrototype.select = function(selector) {
-  var subgroups = [],
-      subgroup,
-      subnode,
-      group,
-      node;
-
-  if (typeof selector !== "function") selector = d3_selection_selector(selector);
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    subgroups.push(subgroup = []);
-    subgroup.parentNode = (group = this[j]).parentNode;
-    for (var i = -1, n = group.length; ++i < n;) {
-      if (node = group[i]) {
-        subgroup.push(subnode = selector.call(node, node.__data__, i));
-        if (subnode && "__data__" in node) subnode.__data__ = node.__data__;
-      } else {
-        subgroup.push(null);
-      }
-    }
-  }
-
-  return d3_selection(subgroups);
-};
-
-function d3_selection_selector(selector) {
-  return function() {
-    return d3_select(selector, this);
-  };
-}
-d3_selectionPrototype.selectAll = function(selector) {
-  var subgroups = [],
-      subgroup,
-      node;
-
-  if (typeof selector !== "function") selector = d3_selection_selectorAll(selector);
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      if (node = group[i]) {
-        subgroups.push(subgroup = selector.call(node, node.__data__, i));
-        subgroup.parentNode = node;
-      }
-    }
-  }
-
-  return d3_selection(subgroups);
-};
-
-function d3_selection_selectorAll(selector) {
-  return function() {
-    return d3_selectAll(selector, this);
-  };
-}
-d3_selectionPrototype.attr = function(name, value) {
-  name = d3.ns.qualify(name);
-
-  // If no value is specified, return the first value.
-  if (arguments.length < 2) {
-    var node = this.node();
-    return name.local
-        ? node.getAttributeNS(name.space, name.local)
-        : node.getAttribute(name);
-  }
-
-  function attrNull() {
-    this.removeAttribute(name);
-  }
-
-  function attrNullNS() {
-    this.removeAttributeNS(name.space, name.local);
-  }
-
-  function attrConstant() {
-    this.setAttribute(name, value);
-  }
-
-  function attrConstantNS() {
-    this.setAttributeNS(name.space, name.local, value);
-  }
-
-  function attrFunction() {
-    var x = value.apply(this, arguments);
-    if (x == null) this.removeAttribute(name);
-    else this.setAttribute(name, x);
-  }
-
-  function attrFunctionNS() {
-    var x = value.apply(this, arguments);
-    if (x == null) this.removeAttributeNS(name.space, name.local);
-    else this.setAttributeNS(name.space, name.local, x);
-  }
-
-  return this.each(value == null
-      ? (name.local ? attrNullNS : attrNull) : (typeof value === "function"
-      ? (name.local ? attrFunctionNS : attrFunction)
-      : (name.local ? attrConstantNS : attrConstant)));
-};
-d3_selectionPrototype.classed = function(name, value) {
-  var re = new RegExp("(^|\\s+)" + d3.requote(name) + "(\\s+|$)", "g");
-
-  // If no value is specified, return the first value.
-  if (arguments.length < 2) {
-    var node = this.node();
-    if (c = node.classList) return c.contains(name);
-    var c = node.className;
-    re.lastIndex = 0;
-    return re.test(c.baseVal != null ? c.baseVal : c);
-  }
-
-  function classedAdd() {
-    if (c = this.classList) return c.add(name);
-    var c = this.className,
-        cb = c.baseVal != null,
-        cv = cb ? c.baseVal : c;
-    re.lastIndex = 0;
-    if (!re.test(cv)) {
-      cv = d3_collapse(cv + " " + name);
-      if (cb) c.baseVal = cv;
-      else this.className = cv;
-    }
-  }
-
-  function classedRemove() {
-    if (c = this.classList) return c.remove(name);
-    var c = this.className,
-        cb = c.baseVal != null,
-        cv = cb ? c.baseVal : c;
-    cv = d3_collapse(cv.replace(re, " "));
-    if (cb) c.baseVal = cv;
-    else this.className = cv;
-  }
-
-  function classedFunction() {
-    (value.apply(this, arguments)
-        ? classedAdd
-        : classedRemove).call(this);
-  }
-
-  return this.each(typeof value === "function"
-      ? classedFunction : value
-      ? classedAdd
-      : classedRemove);
-};
-d3_selectionPrototype.style = function(name, value, priority) {
-  if (arguments.length < 3) priority = "";
-
-  // If no value is specified, return the first value.
-  if (arguments.length < 2) return window
-      .getComputedStyle(this.node(), null)
-      .getPropertyValue(name);
-
-  function styleNull() {
-    this.style.removeProperty(name);
-  }
-
-  function styleConstant() {
-    this.style.setProperty(name, value, priority);
-  }
-
-  function styleFunction() {
-    var x = value.apply(this, arguments);
-    if (x == null) this.style.removeProperty(name);
-    else this.style.setProperty(name, x, priority);
-  }
-
-  return this.each(value == null
-      ? styleNull : (typeof value === "function"
-      ? styleFunction : styleConstant));
-};
-d3_selectionPrototype.property = function(name, value) {
-
-  // If no value is specified, return the first value.
-  if (arguments.length < 2) return this.node()[name];
-
-  function propertyNull() {
-    delete this[name];
-  }
-
-  function propertyConstant() {
-    this[name] = value;
-  }
-
-  function propertyFunction() {
-    var x = value.apply(this, arguments);
-    if (x == null) delete this[name];
-    else this[name] = x;
-  }
-
-  return this.each(value == null
-      ? propertyNull : (typeof value === "function"
-      ? propertyFunction : propertyConstant));
-};
-d3_selectionPrototype.text = function(value) {
-  return arguments.length < 1 ? this.node().textContent
-      : (this.each(typeof value === "function"
-      ? function() { this.textContent = value.apply(this, arguments); }
-      : function() { this.textContent = value; }));
-};
-d3_selectionPrototype.html = function(value) {
-  return arguments.length < 1 ? this.node().innerHTML
-      : (this.each(typeof value === "function"
-      ? function() { this.innerHTML = value.apply(this, arguments); }
-      : function() { this.innerHTML = value; }));
-};
-// TODO append(node)?
-// TODO append(function)?
-d3_selectionPrototype.append = function(name) {
-  name = d3.ns.qualify(name);
-
-  function append() {
-    return this.appendChild(document.createElement(name));
-  }
-
-  function appendNS() {
-    return this.appendChild(document.createElementNS(name.space, name.local));
-  }
-
-  return this.select(name.local ? appendNS : append);
-};
-// TODO insert(node, function)?
-// TODO insert(function, string)?
-// TODO insert(function, function)?
-d3_selectionPrototype.insert = function(name, before) {
-  name = d3.ns.qualify(name);
-
-  function insert() {
-    return this.insertBefore(
-        document.createElement(name),
-        d3_select(before, this));
-  }
-
-  function insertNS() {
-    return this.insertBefore(
-        document.createElementNS(name.space, name.local),
-        d3_select(before, this));
-  }
-
-  return this.select(name.local ? insertNS : insert);
-};
-// TODO remove(selector)?
-// TODO remove(node)?
-// TODO remove(function)?
-d3_selectionPrototype.remove = function() {
-  return this.each(function() {
-    var parent = this.parentNode;
-    if (parent) parent.removeChild(this);
-  });
-};
-// TODO data(null) for clearing data?
-d3_selectionPrototype.data = function(data, join) {
-  var enter = [],
-      update = [],
-      exit = [];
-
-  function bind(group, groupData) {
-    var i,
-        n = group.length,
-        m = groupData.length,
-        n0 = Math.min(n, m),
-        n1 = Math.max(n, m),
-        updateNodes = [],
-        enterNodes = [],
-        exitNodes = [],
-        node,
-        nodeData;
-
-    if (join) {
-      var nodeByKey = {},
-          keys = [],
-          key,
-          j = groupData.length;
-
-      for (i = -1; ++i < n;) {
-        key = join.call(node = group[i], node.__data__, i);
-        if (key in nodeByKey) {
-          exitNodes[j++] = node; // duplicate key
-        } else {
-          nodeByKey[key] = node;
-        }
-        keys.push(key);
-      }
-
-      for (i = -1; ++i < m;) {
-        node = nodeByKey[key = join.call(groupData, nodeData = groupData[i], i)];
-        if (node) {
-          node.__data__ = nodeData;
-          updateNodes[i] = node;
-          enterNodes[i] = exitNodes[i] = null;
-        } else {
-          enterNodes[i] = d3_selection_dataNode(nodeData);
-          updateNodes[i] = exitNodes[i] = null;
-        }
-        delete nodeByKey[key];
-      }
-
-      for (i = -1; ++i < n;) {
-        if (keys[i] in nodeByKey) {
-          exitNodes[i] = group[i];
-        }
-      }
-    } else {
-      for (i = -1; ++i < n0;) {
-        node = group[i];
-        nodeData = groupData[i];
-        if (node) {
-          node.__data__ = nodeData;
-          updateNodes[i] = node;
-          enterNodes[i] = exitNodes[i] = null;
-        } else {
-          enterNodes[i] = d3_selection_dataNode(nodeData);
-          updateNodes[i] = exitNodes[i] = null;
-        }
-      }
-      for (; i < m; ++i) {
-        enterNodes[i] = d3_selection_dataNode(groupData[i]);
-        updateNodes[i] = exitNodes[i] = null;
-      }
-      for (; i < n1; ++i) {
-        exitNodes[i] = group[i];
-        enterNodes[i] = updateNodes[i] = null;
-      }
-    }
-
-    enterNodes.update
-        = updateNodes;
-
-    enterNodes.parentNode
-        = updateNodes.parentNode
-        = exitNodes.parentNode
-        = group.parentNode;
-
-    enter.push(enterNodes);
-    update.push(updateNodes);
-    exit.push(exitNodes);
-  }
-
-  var i = -1,
-      n = this.length,
-      group;
-  if (typeof data === "function") {
-    while (++i < n) {
-      bind(group = this[i], data.call(group, group.parentNode.__data__, i));
-    }
-  } else {
-    while (++i < n) {
-      bind(group = this[i], data);
-    }
-  }
-
-  var selection = d3_selection(update);
-  selection.enter = function() { return d3_selection_enter(enter); };
-  selection.exit = function() { return d3_selection(exit); };
-  return selection;
-};
-
-function d3_selection_dataNode(data) {
-  return {__data__: data};
-}
-function d3_selection_enter(selection) {
-  d3_arraySubclass(selection, d3_selection_enterPrototype);
-  return selection;
-}
-
-var d3_selection_enterPrototype = [];
-
-d3_selection_enterPrototype.append = d3_selectionPrototype.append;
-d3_selection_enterPrototype.insert = d3_selectionPrototype.insert;
-d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;
-d3_selection_enterPrototype.select = function(selector) {
-  var subgroups = [],
-      subgroup,
-      subnode,
-      upgroup,
-      group,
-      node;
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    upgroup = (group = this[j]).update;
-    subgroups.push(subgroup = []);
-    subgroup.parentNode = group.parentNode;
-    for (var i = -1, n = group.length; ++i < n;) {
-      if (node = group[i]) {
-        subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i));
-        subnode.__data__ = node.__data__;
-      } else {
-        subgroup.push(null);
-      }
-    }
-  }
-
-  return d3_selection(subgroups);
-};
-// TODO preserve null elements to maintain index?
-d3_selectionPrototype.filter = function(filter) {
-  var subgroups = [],
-      subgroup,
-      group,
-      node;
-
-  for (var j = 0, m = this.length; j < m; j++) {
-    subgroups.push(subgroup = []);
-    subgroup.parentNode = (group = this[j]).parentNode;
-    for (var i = 0, n = group.length; i < n; i++) {
-      if ((node = group[i]) && filter.call(node, node.__data__, i)) {
-        subgroup.push(node);
-      }
-    }
-  }
-
-  return d3_selection(subgroups);
-};
-d3_selectionPrototype.map = function(map) {
-  return this.each(function() {
-    this.__data__ = map.apply(this, arguments);
-  });
-};
-d3_selectionPrototype.sort = function(comparator) {
-  comparator = d3_selection_sortComparator.apply(this, arguments);
-  for (var j = 0, m = this.length; j < m; j++) {
-    for (var group = this[j].sort(comparator), i = 1, n = group.length, prev = group[0]; i < n; i++) {
-      var node = group[i];
-      if (node) {
-        if (prev) prev.parentNode.insertBefore(node, prev.nextSibling);
-        prev = node;
-      }
-    }
-  }
-  return this;
-};
-
-function d3_selection_sortComparator(comparator) {
-  if (!arguments.length) comparator = d3.ascending;
-  return function(a, b) {
-    return comparator(a && a.__data__, b && b.__data__);
-  };
-}
-// type can be namespaced, e.g., "click.foo"
-// listener can be null for removal
-d3_selectionPrototype.on = function(type, listener, capture) {
-  if (arguments.length < 3) capture = false;
-
-  // parse the type specifier
-  var name = "__on" + type, i = type.indexOf(".");
-  if (i > 0) type = type.substring(0, i);
-
-  // if called with only one argument, return the current listener
-  if (arguments.length < 2) return (i = this.node()[name]) && i._;
-
-  // remove the old event listener, and add the new event listener
-  return this.each(function(d, i) {
-    var node = this;
-
-    if (node[name]) node.removeEventListener(type, node[name], capture);
-    if (listener) node.addEventListener(type, node[name] = l, capture);
-
-    // wrapped event listener that preserves i
-    function l(e) {
-      var o = d3.event; // Events can be reentrant (e.g., focus).
-      d3.event = e;
-      try {
-        listener.call(node, node.__data__, i);
-      } finally {
-        d3.event = o;
-      }
-    }
-
-    // stash the unwrapped listener for retrieval
-    l._ = listener;
-  });
-};
-d3_selectionPrototype.each = function(callback) {
-  for (var j = -1, m = this.length; ++j < m;) {
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      var node = group[i];
-      if (node) callback.call(node, node.__data__, i, j);
-    }
-  }
-  return this;
-};
-//
-// Note: assigning to the arguments array simultaneously changes the value of
-// the corresponding argument!
-//
-// TODO The `this` argument probably shouldn't be the first argument to the
-// callback, anyway, since it's redundant. However, that will require a major
-// version bump due to backwards compatibility, so I'm not changing it right
-// away.
-//
-d3_selectionPrototype.call = function(callback) {
-  callback.apply(this, (arguments[0] = this, arguments));
-  return this;
-};
-d3_selectionPrototype.empty = function() {
-  return !this.node();
-};
-d3_selectionPrototype.node = function(callback) {
-  for (var j = 0, m = this.length; j < m; j++) {
-    for (var group = this[j], i = 0, n = group.length; i < n; i++) {
-      var node = group[i];
-      if (node) return node;
-    }
-  }
-  return null;
-};
-d3_selectionPrototype.transition = function() {
-  var subgroups = [],
-      subgroup,
-      node;
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    subgroups.push(subgroup = []);
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      subgroup.push((node = group[i]) ? {node: node, delay: 0, duration: 250} : null);
-    }
-  }
-
-  return d3_transition(subgroups, d3_transitionInheritId || ++d3_transitionId);
-};
-var d3_selectionRoot = d3_selection([[document]]);
-
-d3_selectionRoot[0].parentNode = document.documentElement;
-
-// TODO fast singleton implementation!
-d3.select = function(selector) {
-  return typeof selector === "string"
-      ? d3_selectionRoot.select(selector)
-      : d3_selection([[selector]]); // assume node
-};
-
-d3.selectAll = function(selector) {
-  return typeof selector === "string"
-      ? d3_selectionRoot.selectAll(selector)
-      : d3_selection([selector]); // assume node[]
-};
-function d3_transition(groups, id) {
-  d3_arraySubclass(groups, d3_transitionPrototype);
-
-  var tweens = {},
-      event = d3.dispatch("start", "end"),
-      ease = d3_transitionEase,
-      then = Date.now();
-
-  groups.id = id;
-
-  groups.tween = function(name, tween) {
-    if (arguments.length < 2) return tweens[name];
-    if (tween == null) delete tweens[name];
-    else tweens[name] = tween;
-    return groups;
-  };
-
-  groups.ease = function(value) {
-    if (!arguments.length) return ease;
-    ease = typeof value === "function" ? value : d3.ease.apply(d3, arguments);
-    return groups;
-  };
-
-  groups.each = function(type, listener) {
-    if (arguments.length < 2) return d3_transition_each.call(groups, type);
-    event[type].add(listener);
-    return groups;
-  };
-
-  d3.timer(function(elapsed) {
-    groups.each(function(d, i, j) {
-      var tweened = [],
-          node = this,
-          delay = groups[j][i].delay,
-          duration = groups[j][i].duration,
-          lock = node.__transition__ || (node.__transition__ = {active: 0, count: 0});
-
-      ++lock.count;
-
-      delay <= elapsed ? start(elapsed) : d3.timer(start, delay, then);
-
-      function start(elapsed) {
-        if (lock.active > id) return stop();
-        lock.active = id;
-
-        for (var tween in tweens) {
-          if (tween = tweens[tween].call(node, d, i)) {
-            tweened.push(tween);
-          }
-        }
-
-        event.start.dispatch.call(node, d, i);
-        if (!tick(elapsed)) d3.timer(tick, 0, then);
-        return 1;
-      }
-
-      function tick(elapsed) {
-        if (lock.active !== id) return stop();
-
-        var t = (elapsed - delay) / duration,
-            e = ease(t),
-            n = tweened.length;
-
-        while (n > 0) {
-          tweened[--n].call(node, e);
-        }
-
-        if (t >= 1) {
-          stop();
-          d3_transitionInheritId = id;
-          event.end.dispatch.call(node, d, i);
-          d3_transitionInheritId = 0;
-          return 1;
-        }
-      }
-
-      function stop() {
-        if (!--lock.count) delete node.__transition__;
-        return 1;
-      }
-    });
-    return 1;
-  }, 0, then);
-
-  return groups;
-}
-
-function d3_transitionTween(b) {
-  return typeof b === "function"
-      ? function(d, i, a) { var v = b.call(this, d, i) + ""; return a != v && d3.interpolate(a, v); }
-      : (b = b + "", function(d, i, a) { return a != b && d3.interpolate(a, b); });
-}
-
-var d3_transitionPrototype = [],
-    d3_transitionId = 0,
-    d3_transitionInheritId = 0,
-    d3_transitionEase = d3.ease("cubic-in-out");
-
-d3_transitionPrototype.call = d3_selectionPrototype.call;
-
-d3.transition = function() {
-  return d3_selectionRoot.transition();
-};
-
-d3.transition.prototype = d3_transitionPrototype;
-d3_transitionPrototype.select = function(selector) {
-  var subgroups = [],
-      subgroup,
-      subnode,
-      node;
-
-  if (typeof selector !== "function") selector = d3_selection_selector(selector);
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    subgroups.push(subgroup = []);
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      if ((node = group[i]) && (subnode = selector.call(node.node, node.node.__data__, i))) {
-        if ("__data__" in node.node) subnode.__data__ = node.node.__data__;
-        subgroup.push({node: subnode, delay: node.delay, duration: node.duration});
-      } else {
-        subgroup.push(null);
-      }
-    }
-  }
-
-  return d3_transition(subgroups, this.id).ease(this.ease());
-};
-d3_transitionPrototype.selectAll = function(selector) {
-  var subgroups = [],
-      subgroup,
-      node;
-
-  if (typeof selector !== "function") selector = d3_selection_selectorAll(selector);
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      if (node = group[i]) {
-        subgroups.push(subgroup = selector.call(node.node, node.node.__data__, i));
-        for (var k = -1, o = subgroup.length; ++k < o;) {
-          subgroup[k] = {node: subgroup[k], delay: node.delay, duration: node.duration};
-        }
-      }
-    }
-  }
-
-  return d3_transition(subgroups, this.id).ease(this.ease());
-};
-d3_transitionPrototype.attr = function(name, value) {
-  return this.attrTween(name, d3_transitionTween(value));
-};
-
-d3_transitionPrototype.attrTween = function(name, tween) {
-  name = d3.ns.qualify(name);
-
-  function attrTween(d, i) {
-    var f = tween.call(this, d, i, this.getAttribute(name));
-    return f && function(t) {
-      this.setAttribute(name, f(t));
-    };
-  }
-
-  function attrTweenNS(d, i) {
-    var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));
-    return f && function(t) {
-      this.setAttributeNS(name.space, name.local, f(t));
-    };
-  }
-
-  return this.tween("attr." + name, name.local ? attrTweenNS : attrTween);
-};
-d3_transitionPrototype.style = function(name, value, priority) {
-  if (arguments.length < 3) priority = "";
-  return this.styleTween(name, d3_transitionTween(value), priority);
-};
-
-d3_transitionPrototype.styleTween = function(name, tween, priority) {
-  if (arguments.length < 3) priority = "";
-  return this.tween("style." + name, function(d, i) {
-    var f = tween.call(this, d, i, window.getComputedStyle(this, null).getPropertyValue(name));
-    return f && function(t) {
-      this.style.setProperty(name, f(t), priority);
-    };
-  });
-};
-d3_transitionPrototype.text = function(value) {
-  return this.tween("text", function(d, i) {
-    this.textContent = typeof value === "function"
-        ? value.call(this, d, i)
-        : value;
-  });
-};
-d3_transitionPrototype.remove = function() {
-  return this.each("end", function() {
-    var p;
-    if (!this.__transition__ && (p = this.parentNode)) p.removeChild(this);
-  });
-};
-d3_transitionPrototype.delay = function(value) {
-  var groups = this;
-  return groups.each(typeof value === "function"
-      ? function(d, i, j) { groups[j][i].delay = +value.apply(this, arguments); }
-      : (value = +value, function(d, i, j) { groups[j][i].delay = value; }));
-};
-d3_transitionPrototype.duration = function(value) {
-  var groups = this;
-  return groups.each(typeof value === "function"
-      ? function(d, i, j) { groups[j][i].duration = +value.apply(this, arguments); }
-      : (value = +value, function(d, i, j) { groups[j][i].duration = value; }));
-};
-function d3_transition_each(callback) {
-  for (var j = 0, m = this.length; j < m; j++) {
-    for (var group = this[j], i = 0, n = group.length; i < n; i++) {
-      var node = group[i];
-      if (node) callback.call(node = node.node, node.__data__, i, j);
-    }
-  }
-  return this;
-}
-d3_transitionPrototype.transition = function() {
-  return this.select(d3_this);
-};
-var d3_timer_queue = null,
-    d3_timer_interval, // is an interval (or frame) active?
-    d3_timer_timeout; // is a timeout active?
-
-// The timer will continue to fire until callback returns true.
-d3.timer = function(callback, delay, then) {
-  var found = false,
-      t0,
-      t1 = d3_timer_queue;
-
-  if (arguments.length < 3) {
-    if (arguments.length < 2) delay = 0;
-    else if (!isFinite(delay)) return;
-    then = Date.now();
-  }
-
-  // See if the callback's already in the queue.
-  while (t1) {
-    if (t1.callback === callback) {
-      t1.then = then;
-      t1.delay = delay;
-      found = true;
-      break;
-    }
-    t0 = t1;
-    t1 = t1.next;
-  }
-
-  // Otherwise, add the callback to the queue.
-  if (!found) d3_timer_queue = {
-    callback: callback,
-    then: then,
-    delay: delay,
-    next: d3_timer_queue
-  };
-
-  // Start animatin'!
-  if (!d3_timer_interval) {
-    d3_timer_timeout = clearTimeout(d3_timer_timeout);
-    d3_timer_interval = 1;
-    d3_timer_frame(d3_timer_step);
-  }
-}
-
-function d3_timer_step() {
-  var elapsed,
-      now = Date.now(),
-      t1 = d3_timer_queue;
-
-  while (t1) {
-    elapsed = now - t1.then;
-    if (elapsed >= t1.delay) t1.flush = t1.callback(elapsed);
-    t1 = t1.next;
-  }
-
-  var delay = d3_timer_flush() - now;
-  if (delay > 24) {
-    if (isFinite(delay)) {
-      clearTimeout(d3_timer_timeout);
-      d3_timer_timeout = setTimeout(d3_timer_step, delay);
-    }
-    d3_timer_interval = 0;
-  } else {
-    d3_timer_interval = 1;
-    d3_timer_frame(d3_timer_step);
-  }
-}
-
-d3.timer.flush = function() {
-  var elapsed,
-      now = Date.now(),
-      t1 = d3_timer_queue;
-
-  while (t1) {
-    elapsed = now - t1.then;
-    if (!t1.delay) t1.flush = t1.callback(elapsed);
-    t1 = t1.next;
-  }
-
-  d3_timer_flush();
-};
-
-// Flush after callbacks, to avoid concurrent queue modification.
-function d3_timer_flush() {
-  var t0 = null,
-      t1 = d3_timer_queue,
-      then = Infinity;
-  while (t1) {
-    if (t1.flush) {
-      t1 = t0 ? t0.next = t1.next : d3_timer_queue = t1.next;
-    } else {
-      then = Math.min(then, t1.then + t1.delay);
-      t1 = (t0 = t1).next;
-    }
-  }
-  return then;
-}
-
-var d3_timer_frame = window.requestAnimationFrame
-    || window.webkitRequestAnimationFrame
-    || window.mozRequestAnimationFrame
-    || window.oRequestAnimationFrame
-    || window.msRequestAnimationFrame
-    || function(callback) { setTimeout(callback, 17); };
-function d3_noop() {}
-d3.scale = {};
-
-function d3_scaleExtent(domain) {
-  var start = domain[0], stop = domain[domain.length - 1];
-  return start < stop ? [start, stop] : [stop, start];
-}
-function d3_scale_nice(domain, nice) {
-  var i0 = 0,
-      i1 = domain.length - 1,
-      x0 = domain[i0],
-      x1 = domain[i1],
-      dx;
-
-  if (x1 < x0) {
-    dx = i0; i0 = i1; i1 = dx;
-    dx = x0; x0 = x1; x1 = dx;
-  }
-
-  nice = nice(x1 - x0);
-  domain[i0] = nice.floor(x0);
-  domain[i1] = nice.ceil(x1);
-  return domain;
-}
-
-function d3_scale_niceDefault() {
-  return Math;
-}
-d3.scale.linear = function() {
-  return d3_scale_linear([0, 1], [0, 1], d3.interpolate, false);
-};
-
-function d3_scale_linear(domain, range, interpolate, clamp) {
-  var output,
-      input;
-
-  function rescale() {
-    var linear = domain.length == 2 ? d3_scale_bilinear : d3_scale_polylinear,
-        uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;
-    output = linear(domain, range, uninterpolate, interpolate);
-    input = linear(range, domain, uninterpolate, d3.interpolate);
-    return scale;
-  }
-
-  function scale(x) {
-    return output(x);
-  }
-
-  // Note: requires range is coercible to number!
-  scale.invert = function(y) {
-    return input(y);
-  };
-
-  scale.domain = function(x) {
-    if (!arguments.length) return domain;
-    domain = x.map(Number);
-    return rescale();
-  };
-
-  scale.range = function(x) {
-    if (!arguments.length) return range;
-    range = x;
-    return rescale();
-  };
-
-  scale.rangeRound = function(x) {
-    return scale.range(x).interpolate(d3.interpolateRound);
-  };
-
-  scale.clamp = function(x) {
-    if (!arguments.length) return clamp;
-    clamp = x;
-    return rescale();
-  };
-
-  scale.interpolate = function(x) {
-    if (!arguments.length) return interpolate;
-    interpolate = x;
-    return rescale();
-  };
-
-  scale.ticks = function(m) {
-    return d3_scale_linearTicks(domain, m);
-  };
-
-  scale.tickFormat = function(m) {
-    return d3_scale_linearTickFormat(domain, m);
-  };
-
-  scale.nice = function() {
-    d3_scale_nice(domain, d3_scale_linearNice);
-    return rescale();
-  };
-
-  scale.copy = function() {
-    return d3_scale_linear(domain, range, interpolate, clamp);
-  };
-
-  return rescale();
-};
-
-function d3_scale_linearRebind(scale, linear) {
-  scale.range = d3.rebind(scale, linear.range);
-  scale.rangeRound = d3.rebind(scale, linear.rangeRound);
-  scale.interpolate = d3.rebind(scale, linear.interpolate);
-  scale.clamp = d3.rebind(scale, linear.clamp);
-  return scale;
-}
-
-function d3_scale_linearNice(dx) {
-  dx = Math.pow(10, Math.round(Math.log(dx) / Math.LN10) - 1);
-  return {
-    floor: function(x) { return Math.floor(x / dx) * dx; },
-    ceil: function(x) { return Math.ceil(x / dx) * dx; }
-  };
-}
-
-// TODO Dates? Ugh.
-function d3_scale_linearTickRange(domain, m) {
-  var extent = d3_scaleExtent(domain),
-      span = extent[1] - extent[0],
-      step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)),
-      err = m / span * step;
-
-  // Filter ticks to get closer to the desired count.
-  if (err <= .15) step *= 10;
-  else if (err <= .35) step *= 5;
-  else if (err <= .75) step *= 2;
-
-  // Round start and stop values to step interval.
-  extent[0] = Math.ceil(extent[0] / step) * step;
-  extent[1] = Math.floor(extent[1] / step) * step + step * .5; // inclusive
-  extent[2] = step;
-  return extent;
-}
-
-function d3_scale_linearTicks(domain, m) {
-  return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));
-}
-
-function d3_scale_linearTickFormat(domain, m) {
-  return d3.format(",." + Math.max(0, -Math.floor(Math.log(d3_scale_linearTickRange(domain, m)[2]) / Math.LN10 + .01)) + "f");
-}
-function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {
-  var u = uninterpolate(domain[0], domain[1]),
-      i = interpolate(range[0], range[1]);
-  return function(x) {
-    return i(u(x));
-  };
-}
-function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {
-  var u = [],
-      i = [],
-      j = 0,
-      n = domain.length;
-
-  while (++j < n) {
-    u.push(uninterpolate(domain[j - 1], domain[j]));
-    i.push(interpolate(range[j - 1], range[j]));
-  }
-
-  return function(x) {
-    var j = d3.bisect(domain, x, 1, domain.length - 1) - 1;
-    return i[j](u[j](x));
-  };
-}
-d3.scale.log = function() {
-  return d3_scale_log(d3.scale.linear(), d3_scale_logp);
-};
-
-function d3_scale_log(linear, log) {
-  var pow = log.pow;
-
-  function scale(x) {
-    return linear(log(x));
-  }
-
-  scale.invert = function(x) {
-    return pow(linear.invert(x));
-  };
-
-  scale.domain = function(x) {
-    if (!arguments.length) return linear.domain().map(pow);
-    log = x[0] < 0 ? d3_scale_logn : d3_scale_logp;
-    pow = log.pow;
-    linear.domain(x.map(log));
-    return scale;
-  };
-
-  scale.nice = function() {
-    linear.domain(d3_scale_nice(linear.domain(), d3_scale_niceDefault));
-    return scale;
-  };
-
-  scale.ticks = function() {
-    var extent = d3_scaleExtent(linear.domain()),
-        ticks = [];
-    if (extent.every(isFinite)) {
-      var i = Math.floor(extent[0]),
-          j = Math.ceil(extent[1]),
-          u = pow(extent[0]),
-          v = pow(extent[1]);
-      if (log === d3_scale_logn) {
-        ticks.push(pow(i));
-        for (; i++ < j;) for (var k = 9; k > 0; k--) ticks.push(pow(i) * k);
-      } else {
-        for (; i < j; i++) for (var k = 1; k < 10; k++) ticks.push(pow(i) * k);
-        ticks.push(pow(i));
-      }
-      for (i = 0; ticks[i] < u; i++) {} // strip small values
-      for (j = ticks.length; ticks[j - 1] > v; j--) {} // strip big values
-      ticks = ticks.slice(i, j);
-    }
-    return ticks;
-  };
-
-  scale.tickFormat = function() {
-    return d3_scale_logTickFormat;
-  };
-
-  scale.copy = function() {
-    return d3_scale_log(linear.copy(), log);
-  };
-
-  return d3_scale_linearRebind(scale, linear);
-};
-
-function d3_scale_logp(x) {
-  return Math.log(x) / Math.LN10;
-}
-
-function d3_scale_logn(x) {
-  return -Math.log(-x) / Math.LN10;
-}
-
-d3_scale_logp.pow = function(x) {
-  return Math.pow(10, x);
-};
-
-d3_scale_logn.pow = function(x) {
-  return -Math.pow(10, -x);
-};
-
-function d3_scale_logTickFormat(d) {
-  return d.toPrecision(1);
-}
-d3.scale.pow = function() {
-  return d3_scale_pow(d3.scale.linear(), 1);
-};
-
-function d3_scale_pow(linear, exponent) {
-  var powp = d3_scale_powPow(exponent),
-      powb = d3_scale_powPow(1 / exponent);
-
-  function scale(x) {
-    return linear(powp(x));
-  }
-
-  scale.invert = function(x) {
-    return powb(linear.invert(x));
-  };
-
-  scale.domain = function(x) {
-    if (!arguments.length) return linear.domain().map(powb);
-    linear.domain(x.map(powp));
-    return scale;
-  };
-
-  scale.ticks = function(m) {
-    return d3_scale_linearTicks(scale.domain(), m);
-  };
-
-  scale.tickFormat = function(m) {
-    return d3_scale_linearTickFormat(scale.domain(), m);
-  };
-
-  scale.nice = function() {
-    return scale.domain(d3_scale_nice(scale.domain(), d3_scale_linearNice));
-  };
-
-  scale.exponent = function(x) {
-    if (!arguments.length) return exponent;
-    var domain = scale.domain();
-    powp = d3_scale_powPow(exponent = x);
-    powb = d3_scale_powPow(1 / exponent);
-    return scale.domain(domain);
-  };
-
-  scale.copy = function() {
-    return d3_scale_pow(linear.copy(), exponent);
-  };
-
-  return d3_scale_linearRebind(scale, linear);
-};
-
-function d3_scale_powPow(e) {
-  return function(x) {
-    return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);
-  };
-}
-d3.scale.sqrt = function() {
-  return d3.scale.pow().exponent(.5);
-};
-d3.scale.ordinal = function() {
-  return d3_scale_ordinal([], {t: "range", x: []});
-};
-
-function d3_scale_ordinal(domain, ranger) {
-  var index,
-      range,
-      rangeBand;
-
-  function scale(x) {
-    return range[((index[x] || (index[x] = domain.push(x))) - 1) % range.length];
-  }
-
-  scale.domain = function(x) {
-    if (!arguments.length) return domain;
-    domain = [];
-    index = {};
-    var i = -1, n = x.length, xi;
-    while (++i < n) if (!index[xi = x[i]]) index[xi] = domain.push(xi);
-    return scale[ranger.t](ranger.x, ranger.p);
-  };
-
-  scale.range = function(x) {
-    if (!arguments.length) return range;
-    range = x;
-    rangeBand = 0;
-    ranger = {t: "range", x: x};
-    return scale;
-  };
-
-  scale.rangePoints = function(x, padding) {
-    if (arguments.length < 2) padding = 0;
-    var start = x[0],
-        stop = x[1],
-        step = (stop - start) / (domain.length - 1 + padding);
-    range = domain.length < 2 ? [(start + stop) / 2] : d3.range(start + step * padding / 2, stop + step / 2, step);
-    rangeBand = 0;
-    ranger = {t: "rangePoints", x: x, p: padding};
-    return scale;
-  };
-
-  scale.rangeBands = function(x, padding) {
-    if (arguments.length < 2) padding = 0;
-    var start = x[0],
-        stop = x[1],
-        step = (stop - start) / (domain.length + padding);
-    range = d3.range(start + step * padding, stop, step);
-    rangeBand = step * (1 - padding);
-    ranger = {t: "rangeBands", x: x, p: padding};
-    return scale;
-  };
-
-  scale.rangeRoundBands = function(x, padding) {
-    if (arguments.length < 2) padding = 0;
-    var start = x[0],
-        stop = x[1],
-        step = Math.floor((stop - start) / (domain.length + padding)),
-        err = stop - start - (domain.length - padding) * step;
-    range = d3.range(start + Math.round(err / 2), stop, step);
-    rangeBand = Math.round(step * (1 - padding));
-    ranger = {t: "rangeRoundBands", x: x, p: padding};
-    return scale;
-  };
-
-  scale.rangeBand = function() {
-    return rangeBand;
-  };
-
-  scale.copy = function() {
-    return d3_scale_ordinal(domain, ranger);
-  };
-
-  return scale.domain(domain);
-};
-/*
- * This product includes color specifications and designs developed by Cynthia
- * Brewer (http://colorbrewer.org/). See lib/colorbrewer for more information.
- */
-
-d3.scale.category10 = function() {
-  return d3.scale.ordinal().range(d3_category10);
-};
-
-d3.scale.category20 = function() {
-  return d3.scale.ordinal().range(d3_category20);
-};
-
-d3.scale.category20b = function() {
-  return d3.scale.ordinal().range(d3_category20b);
-};
-
-d3.scale.category20c = function() {
-  return d3.scale.ordinal().range(d3_category20c);
-};
-
-var d3_category10 = [
-  "#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd",
-  "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"
-];
-
-var d3_category20 = [
-  "#1f77b4", "#aec7e8",
-  "#ff7f0e", "#ffbb78",
-  "#2ca02c", "#98df8a",
-  "#d62728", "#ff9896",
-  "#9467bd", "#c5b0d5",
-  "#8c564b", "#c49c94",
-  "#e377c2", "#f7b6d2",
-  "#7f7f7f", "#c7c7c7",
-  "#bcbd22", "#dbdb8d",
-  "#17becf", "#9edae5"
-];
-
-var d3_category20b = [
-  "#393b79", "#5254a3", "#6b6ecf", "#9c9ede",
-  "#637939", "#8ca252", "#b5cf6b", "#cedb9c",
-  "#8c6d31", "#bd9e39", "#e7ba52", "#e7cb94",
-  "#843c39", "#ad494a", "#d6616b", "#e7969c",
-  "#7b4173", "#a55194", "#ce6dbd", "#de9ed6"
-];
-
-var d3_category20c = [
-  "#3182bd", "#6baed6", "#9ecae1", "#c6dbef",
-  "#e6550d", "#fd8d3c", "#fdae6b", "#fdd0a2",
-  "#31a354", "#74c476", "#a1d99b", "#c7e9c0",
-  "#756bb1", "#9e9ac8", "#bcbddc", "#dadaeb",
-  "#636363", "#969696", "#bdbdbd", "#d9d9d9"
-];
-d3.scale.quantile = function() {
-  return d3_scale_quantile([], []);
-};
-
-function d3_scale_quantile(domain, range) {
-  var thresholds;
-
-  function rescale() {
-    var k = 0,
-        n = domain.length,
-        q = range.length;
-    thresholds = [];
-    while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);
-    return scale;
-  }
-
-  function scale(x) {
-    if (isNaN(x = +x)) return NaN;
-    return range[d3.bisect(thresholds, x)];
-  }
-
-  scale.domain = function(x) {
-    if (!arguments.length) return domain;
-    domain = x.filter(function(d) { return !isNaN(d); }).sort(d3.ascending);
-    return rescale();
-  };
-
-  scale.range = function(x) {
-    if (!arguments.length) return range;
-    range = x;
-    return rescale();
-  };
-
-  scale.quantiles = function() {
-    return thresholds;
-  };
-
-  scale.copy = function() {
-    return d3_scale_quantile(domain, range); // copy on write!
-  };
-
-  return rescale();
-};
-d3.scale.quantize = function() {
-  return d3_scale_quantize(0, 1, [0, 1]);
-};
-
-function d3_scale_quantize(x0, x1, range) {
-  var kx, i;
-
-  function scale(x) {
-    return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];
-  }
-
-  function rescale() {
-    kx = range.length / (x1 - x0);
-    i = range.length - 1;
-    return scale;
-  }
-
-  scale.domain = function(x) {
-    if (!arguments.length) return [x0, x1];
-    x0 = +x[0];
-    x1 = +x[x.length - 1];
-    return rescale();
-  };
-
-  scale.range = function(x) {
-    if (!arguments.length) return range;
-    range = x;
-    return rescale();
-  };
-
-  scale.copy = function() {
-    return d3_scale_quantize(x0, x1, range); // copy on write
-  };
-
-  return rescale();
-};
-d3.svg = {};
-d3.svg.arc = function() {
-  var innerRadius = d3_svg_arcInnerRadius,
-      outerRadius = d3_svg_arcOuterRadius,
-      startAngle = d3_svg_arcStartAngle,
-      endAngle = d3_svg_arcEndAngle;
-
-  function arc() {
-    var r0 = innerRadius.apply(this, arguments),
-        r1 = outerRadius.apply(this, arguments),
-        a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset,
-        a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset,
-        da = (a1 < a0 && (da = a0, a0 = a1, a1 = da), a1 - a0),
-        df = da < Math.PI ? "0" : "1",
-        c0 = Math.cos(a0),
-        s0 = Math.sin(a0),
-        c1 = Math.cos(a1),
-        s1 = Math.sin(a1);
-    return da >= d3_svg_arcMax
-      ? (r0
-      ? "M0," + r1
-      + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1)
-      + "A" + r1 + "," + r1 + " 0 1,1 0," + r1
-      + "M0," + r0
-      + "A" + r0 + "," + r0 + " 0 1,0 0," + (-r0)
-      + "A" + r0 + "," + r0 + " 0 1,0 0," + r0
-      + "Z"
-      : "M0," + r1
-      + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1)
-      + "A" + r1 + "," + r1 + " 0 1,1 0," + r1
-      + "Z")
-      : (r0
-      ? "M" + r1 * c0 + "," + r1 * s0
-      + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1
-      + "L" + r0 * c1 + "," + r0 * s1
-      + "A" + r0 + "," + r0 + " 0 " + df + ",0 " + r0 * c0 + "," + r0 * s0
-      + "Z"
-      : "M" + r1 * c0 + "," + r1 * s0
-      + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1
-      + "L0,0"
-      + "Z");
-  }
-
-  arc.innerRadius = function(v) {
-    if (!arguments.length) return innerRadius;
-    innerRadius = d3.functor(v);
-    return arc;
-  };
-
-  arc.outerRadius = function(v) {
-    if (!arguments.length) return outerRadius;
-    outerRadius = d3.functor(v);
-    return arc;
-  };
-
-  arc.startAngle = function(v) {
-    if (!arguments.length) return startAngle;
-    startAngle = d3.functor(v);
-    return arc;
-  };
-
-  arc.endAngle = function(v) {
-    if (!arguments.length) return endAngle;
-    endAngle = d3.functor(v);
-    return arc;
-  };
-
-  arc.centroid = function() {
-    var r = (innerRadius.apply(this, arguments)
-        + outerRadius.apply(this, arguments)) / 2,
-        a = (startAngle.apply(this, arguments)
-        + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset;
-    return [Math.cos(a) * r, Math.sin(a) * r];
-  };
-
-  return arc;
-};
-
-var d3_svg_arcOffset = -Math.PI / 2,
-    d3_svg_arcMax = 2 * Math.PI - 1e-6;
-
-function d3_svg_arcInnerRadius(d) {
-  return d.innerRadius;
-}
-
-function d3_svg_arcOuterRadius(d) {
-  return d.outerRadius;
-}
-
-function d3_svg_arcStartAngle(d) {
-  return d.startAngle;
-}
-
-function d3_svg_arcEndAngle(d) {
-  return d.endAngle;
-}
-function d3_svg_line(projection) {
-  var x = d3_svg_lineX,
-      y = d3_svg_lineY,
-      interpolate = "linear",
-      interpolator = d3_svg_lineInterpolators[interpolate],
-      tension = .7;
-
-  function line(d) {
-    return d.length < 1 ? null : "M" + interpolator(projection(d3_svg_linePoints(this, d, x, y)), tension);
-  }
-
-  line.x = function(v) {
-    if (!arguments.length) return x;
-    x = v;
-    return line;
-  };
-
-  line.y = function(v) {
-    if (!arguments.length) return y;
-    y = v;
-    return line;
-  };
-
-  line.interpolate = function(v) {
-    if (!arguments.length) return interpolate;
-    interpolator = d3_svg_lineInterpolators[interpolate = v];
-    return line;
-  };
-
-  line.tension = function(v) {
-    if (!arguments.length) return tension;
-    tension = v;
-    return line;
-  };
-
-  return line;
-}
-
-d3.svg.line = function() {
-  return d3_svg_line(Object);
-};
-
-// Converts the specified array of data into an array of points
-// (x-y tuples), by evaluating the specified `x` and `y` functions on each
-// data point. The `this` context of the evaluated functions is the specified
-// "self" object; each function is passed the current datum and index.
-function d3_svg_linePoints(self, d, x, y) {
-  var points = [],
-      i = -1,
-      n = d.length,
-      fx = typeof x === "function",
-      fy = typeof y === "function",
-      value;
-  if (fx && fy) {
-    while (++i < n) points.push([
-      x.call(self, value = d[i], i),
-      y.call(self, value, i)
-    ]);
-  } else if (fx) {
-    while (++i < n) points.push([x.call(self, d[i], i), y]);
-  } else if (fy) {
-    while (++i < n) points.push([x, y.call(self, d[i], i)]);
-  } else {
-    while (++i < n) points.push([x, y]);
-  }
-  return points;
-}
-
-// The default `x` property, which references d[0].
-function d3_svg_lineX(d) {
-  return d[0];
-}
-
-// The default `y` property, which references d[1].
-function d3_svg_lineY(d) {
-  return d[1];
-}
-
-// The various interpolators supported by the `line` class.
-var d3_svg_lineInterpolators = {
-  "linear": d3_svg_lineLinear,
-  "step-before": d3_svg_lineStepBefore,
-  "step-after": d3_svg_lineStepAfter,
-  "basis": d3_svg_lineBasis,
-  "basis-open": d3_svg_lineBasisOpen,
-  "basis-closed": d3_svg_lineBasisClosed,
-  "bundle": d3_svg_lineBundle,
-  "cardinal": d3_svg_lineCardinal,
-  "cardinal-open": d3_svg_lineCardinalOpen,
-  "cardinal-closed": d3_svg_lineCardinalClosed,
-  "monotone": d3_svg_lineMonotone
-};
-
-// Linear interpolation; generates "L" commands.
-function d3_svg_lineLinear(points) {
-  var path = [],
-      i = 0,
-      n = points.length,
-      p = points[0];
-  path.push(p[0], ",", p[1]);
-  while (++i < n) path.push("L", (p = points[i])[0], ",", p[1]);
-  return path.join("");
-}
-
-// Step interpolation; generates "H" and "V" commands.
-function d3_svg_lineStepBefore(points) {
-  var path = [],
-      i = 0,
-      n = points.length,
-      p = points[0];
-  path.push(p[0], ",", p[1]);
-  while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]);
-  return path.join("");
-}
-
-// Step interpolation; generates "H" and "V" commands.
-function d3_svg_lineStepAfter(points) {
-  var path = [],
-      i = 0,
-      n = points.length,
-      p = points[0];
-  path.push(p[0], ",", p[1]);
-  while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]);
-  return path.join("");
-}
-
-// Open cardinal spline interpolation; generates "C" commands.
-function d3_svg_lineCardinalOpen(points, tension) {
-  return points.length < 4
-      ? d3_svg_lineLinear(points)
-      : points[1] + d3_svg_lineHermite(points.slice(1, points.length - 1),
-        d3_svg_lineCardinalTangents(points, tension));
-}
-
-// Closed cardinal spline interpolation; generates "C" commands.
-function d3_svg_lineCardinalClosed(points, tension) {
-  return points.length < 3
-      ? d3_svg_lineLinear(points)
-      : points[0] + d3_svg_lineHermite((points.push(points[0]), points),
-        d3_svg_lineCardinalTangents([points[points.length - 2]]
-        .concat(points, [points[1]]), tension));
-}
-
-// Cardinal spline interpolation; generates "C" commands.
-function d3_svg_lineCardinal(points, tension, closed) {
-  return points.length < 3
-      ? d3_svg_lineLinear(points)
-      : points[0] + d3_svg_lineHermite(points,
-        d3_svg_lineCardinalTangents(points, tension));
-}
-
-// Hermite spline construction; generates "C" commands.
-function d3_svg_lineHermite(points, tangents) {
-  if (tangents.length < 1
-      || (points.length != tangents.length
-      && points.length != tangents.length + 2)) {
-    return d3_svg_lineLinear(points);
-  }
-
-  var quad = points.length != tangents.length,
-      path = "",
-      p0 = points[0],
-      p = points[1],
-      t0 = tangents[0],
-      t = t0,
-      pi = 1;
-
-  if (quad) {
-    path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3)
-        + "," + p[0] + "," + p[1];
-    p0 = points[1];
-    pi = 2;
-  }
-
-  if (tangents.length > 1) {
-    t = tangents[1];
-    p = points[pi];
-    pi++;
-    path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1])
-        + "," + (p[0] - t[0]) + "," + (p[1] - t[1])
-        + "," + p[0] + "," + p[1];
-    for (var i = 2; i < tangents.length; i++, pi++) {
-      p = points[pi];
-      t = tangents[i];
-      path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1])
-          + "," + p[0] + "," + p[1];
-    }
-  }
-
-  if (quad) {
-    var lp = points[pi];
-    path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3)
-        + "," + lp[0] + "," + lp[1];
-  }
-
-  return path;
-}
-
-// Generates tangents for a cardinal spline.
-function d3_svg_lineCardinalTangents(points, tension) {
-  var tangents = [],
-      a = (1 - tension) / 2,
-      p0,
-      p1 = points[0],
-      p2 = points[1],
-      i = 1,
-      n = points.length;
-  while (++i < n) {
-    p0 = p1;
-    p1 = p2;
-    p2 = points[i];
-    tangents.push([a * (p2[0] - p0[0]), a * (p2[1] - p0[1])]);
-  }
-  return tangents;
-}
-
-// B-spline interpolation; generates "C" commands.
-function d3_svg_lineBasis(points) {
-  if (points.length < 3) return d3_svg_lineLinear(points);
-  var path = [],
-      i = 1,
-      n = points.length,
-      pi = points[0],
-      x0 = pi[0],
-      y0 = pi[1],
-      px = [x0, x0, x0, (pi = points[1])[0]],
-      py = [y0, y0, y0, pi[1]];
-  path.push(x0, ",", y0);
-  d3_svg_lineBasisBezier(path, px, py);
-  while (++i < n) {
-    pi = points[i];
-    px.shift(); px.push(pi[0]);
-    py.shift(); py.push(pi[1]);
-    d3_svg_lineBasisBezier(path, px, py);
-  }
-  i = -1;
-  while (++i < 2) {
-    px.shift(); px.push(pi[0]);
-    py.shift(); py.push(pi[1]);
-    d3_svg_lineBasisBezier(path, px, py);
-  }
-  return path.join("");
-}
-
-// Open B-spline interpolation; generates "C" commands.
-function d3_svg_lineBasisOpen(points) {
-  if (points.length < 4) return d3_svg_lineLinear(points);
-  var path = [],
-      i = -1,
-      n = points.length,
-      pi,
-      px = [0],
-      py = [0];
-  while (++i < 3) {
-    pi = points[i];
-    px.push(pi[0]);
-    py.push(pi[1]);
-  }
-  path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px)
-    + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));
-  --i; while (++i < n) {
-    pi = points[i];
-    px.shift(); px.push(pi[0]);
-    py.shift(); py.push(pi[1]);
-    d3_svg_lineBasisBezier(path, px, py);
-  }
-  return path.join("");
-}
-
-// Closed B-spline interpolation; generates "C" commands.
-function d3_svg_lineBasisClosed(points) {
-  var path,
-      i = -1,
-      n = points.length,
-      m = n + 4,
-      pi,
-      px = [],
-      py = [];
-  while (++i < 4) {
-    pi = points[i % n];
-    px.push(pi[0]);
-    py.push(pi[1]);
-  }
-  path = [
-    d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",",
-    d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)
-  ];
-  --i; while (++i < m) {
-    pi = points[i % n];
-    px.shift(); px.push(pi[0]);
-    py.shift(); py.push(pi[1]);
-    d3_svg_lineBasisBezier(path, px, py);
-  }
-  return path.join("");
-}
-
-function d3_svg_lineBundle(points, tension) {
-  var n = points.length - 1,
-      x0 = points[0][0],
-      y0 = points[0][1],
-      dx = points[n][0] - x0,
-      dy = points[n][1] - y0,
-      i = -1,
-      p,
-      t;
-  while (++i <= n) {
-    p = points[i];
-    t = i / n;
-    p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);
-    p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);
-  }
-  return d3_svg_lineBasis(points);
-}
-
-// Returns the dot product of the given four-element vectors.
-function d3_svg_lineDot4(a, b) {
-  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
-}
-
-// Matrix to transform basis (b-spline) control points to bezier
-// control points. Derived from FvD 11.2.8.
-var d3_svg_lineBasisBezier1 = [0, 2/3, 1/3, 0],
-    d3_svg_lineBasisBezier2 = [0, 1/3, 2/3, 0],
-    d3_svg_lineBasisBezier3 = [0, 1/6, 2/3, 1/6];
-
-// Pushes a "C" Bézier curve onto the specified path array, given the
-// two specified four-element arrays which define the control points.
-function d3_svg_lineBasisBezier(path, x, y) {
-  path.push(
-      "C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));
-}
-
-// Computes the slope from points p0 to p1.
-function d3_svg_lineSlope(p0, p1) {
-  return (p1[1] - p0[1]) / (p1[0] - p0[0]);
-}
-
-// Compute three-point differences for the given points.
-// http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Finite_difference
-function d3_svg_lineFiniteDifferences(points) {
-  var i = 0,
-      j = points.length - 1,
-      m = [],
-      p0 = points[0],
-      p1 = points[1],
-      d = m[0] = d3_svg_lineSlope(p0, p1);
-  while (++i < j) {
-    m[i] = d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]));
-  }
-  m[i] = d;
-  return m;
-}
-
-// Interpolates the given points using Fritsch-Carlson Monotone cubic Hermite
-// interpolation. Returns an array of tangent vectors. For details, see
-// http://en.wikipedia.org/wiki/Monotone_cubic_interpolation
-function d3_svg_lineMonotoneTangents(points) {
-  var tangents = [],
-      d,
-      a,
-      b,
-      s,
-      m = d3_svg_lineFiniteDifferences(points),
-      i = -1,
-      j = points.length - 1;
-
-  // The first two steps are done by computing finite-differences:
-  // 1. Compute the slopes of the secant lines between successive points.
-  // 2. Initialize the tangents at every point as the average of the secants.
-
-  // Then, for each segment…
-  while (++i < j) {
-    d = d3_svg_lineSlope(points[i], points[i + 1]);
-
-    // 3. If two successive yk = y{k + 1} are equal (i.e., d is zero), then set
-    // mk = m{k + 1} = 0 as the spline connecting these points must be flat to
-    // preserve monotonicity. Ignore step 4 and 5 for those k.
-
-    if (Math.abs(d) < 1e-6) {
-      m[i] = m[i + 1] = 0;
-    } else {
-      // 4. Let ak = mk / dk and bk = m{k + 1} / dk.
-      a = m[i] / d;
-      b = m[i + 1] / d;
-
-      // 5. Prevent overshoot and ensure monotonicity by restricting the
-      // magnitude of vector <ak, bk> to a circle of radius 3.
-      s = a * a + b * b;
-      if (s > 9) {
-        s = d * 3 / Math.sqrt(s);
-        m[i] = s * a;
-        m[i + 1] = s * b;
-      }
-    }
-  }
-
-  // Compute the normalized tangent vector from the slopes. Note that if x is
-  // not monotonic, it's possible that the slope will be infinite, so we protect
-  // against NaN by setting the coordinate to zero.
-  i = -1; while (++i <= j) {
-    s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0])
-      / (6 * (1 + m[i] * m[i]));
-    tangents.push([s || 0, m[i] * s || 0]);
-  }
-
-  return tangents;
-}
-
-function d3_svg_lineMonotone(points) {
-  return points.length < 3
-      ? d3_svg_lineLinear(points)
-      : points[0] +
-        d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));
-}
-d3.svg.line.radial = function() {
-  var line = d3_svg_line(d3_svg_lineRadial);
-  line.radius = line.x, delete line.x;
-  line.angle = line.y, delete line.y;
-  return line;
-};
-
-function d3_svg_lineRadial(points) {
-  var point,
-      i = -1,
-      n = points.length,
-      r,
-      a;
-  while (++i < n) {
-    point = points[i];
-    r = point[0];
-    a = point[1] + d3_svg_arcOffset;
-    point[0] = r * Math.cos(a);
-    point[1] = r * Math.sin(a);
-  }
-  return points;
-}
-function d3_svg_area(projection) {
-  var x0 = d3_svg_lineX,
-      x1 = d3_svg_lineX,
-      y0 = 0,
-      y1 = d3_svg_lineY,
-      interpolate = "linear",
-      interpolator = d3_svg_lineInterpolators[interpolate],
-      tension = .7;
-
-  function area(d) {
-    if (d.length < 1) return null;
-    var points0 = d3_svg_linePoints(this, d, x0, y0),
-        points1 = d3_svg_linePoints(this, d, x0 === x1 ? d3_svg_areaX(points0) : x1, y0 === y1 ? d3_svg_areaY(points0) : y1);
-    return "M" + interpolator(projection(points1), tension)
-         + "L" + interpolator(projection(points0.reverse()), tension)
-         + "Z";
-  }
-
-  area.x = function(x) {
-    if (!arguments.length) return x1;
-    x0 = x1 = x;
-    return area;
-  };
-
-  area.x0 = function(x) {
-    if (!arguments.length) return x0;
-    x0 = x;
-    return area;
-  };
-
-  area.x1 = function(x) {
-    if (!arguments.length) return x1;
-    x1 = x;
-    return area;
-  };
-
-  area.y = function(y) {
-    if (!arguments.length) return y1;
-    y0 = y1 = y;
-    return area;
-  };
-
-  area.y0 = function(y) {
-    if (!arguments.length) return y0;
-    y0 = y;
-    return area;
-  };
-
-  area.y1 = function(y) {
-    if (!arguments.length) return y1;
-    y1 = y;
-    return area;
-  };
-
-  area.interpolate = function(x) {
-    if (!arguments.length) return interpolate;
-    interpolator = d3_svg_lineInterpolators[interpolate = x];
-    return area;
-  };
-
-  area.tension = function(x) {
-    if (!arguments.length) return tension;
-    tension = x;
-    return area;
-  };
-
-  return area;
-}
-
-d3.svg.area = function() {
-  return d3_svg_area(Object);
-};
-
-function d3_svg_areaX(points) {
-  return function(d, i) {
-    return points[i][0];
-  };
-}
-
-function d3_svg_areaY(points) {
-  return function(d, i) {
-    return points[i][1];
-  };
-}
-d3.svg.area.radial = function() {
-  var area = d3_svg_area(d3_svg_lineRadial);
-  area.radius = area.x, delete area.x;
-  area.innerRadius = area.x0, delete area.x0;
-  area.outerRadius = area.x1, delete area.x1;
-  area.angle = area.y, delete area.y;
-  area.startAngle = area.y0, delete area.y0;
-  area.endAngle = area.y1, delete area.y1;
-  return area;
-};
-d3.svg.chord = function() {
-  var source = d3_svg_chordSource,
-      target = d3_svg_chordTarget,
-      radius = d3_svg_chordRadius,
-      startAngle = d3_svg_arcStartAngle,
-      endAngle = d3_svg_arcEndAngle;
-
-  // TODO Allow control point to be customized.
-
-  function chord(d, i) {
-    var s = subgroup(this, source, d, i),
-        t = subgroup(this, target, d, i);
-    return "M" + s.p0
-      + arc(s.r, s.p1) + (equals(s, t)
-      ? curve(s.r, s.p1, s.r, s.p0)
-      : curve(s.r, s.p1, t.r, t.p0)
-      + arc(t.r, t.p1)
-      + curve(t.r, t.p1, s.r, s.p0))
-      + "Z";
-  }
-
-  function subgroup(self, f, d, i) {
-    var subgroup = f.call(self, d, i),
-        r = radius.call(self, subgroup, i),
-        a0 = startAngle.call(self, subgroup, i) + d3_svg_arcOffset,
-        a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset;
-    return {
-      r: r,
-      a0: a0,
-      a1: a1,
-      p0: [r * Math.cos(a0), r * Math.sin(a0)],
-      p1: [r * Math.cos(a1), r * Math.sin(a1)]
-    };
-  }
-
-  function equals(a, b) {
-    return a.a0 == b.a0 && a.a1 == b.a1;
-  }
-
-  function arc(r, p) {
-    return "A" + r + "," + r + " 0 0,1 " + p;
-  }
-
-  function curve(r0, p0, r1, p1) {
-    return "Q 0,0 " + p1;
-  }
-
-  chord.radius = function(v) {
-    if (!arguments.length) return radius;
-    radius = d3.functor(v);
-    return chord;
-  };
-
-  chord.source = function(v) {
-    if (!arguments.length) return source;
-    source = d3.functor(v);
-    return chord;
-  };
-
-  chord.target = function(v) {
-    if (!arguments.length) return target;
-    target = d3.functor(v);
-    return chord;
-  };
-
-  chord.startAngle = function(v) {
-    if (!arguments.length) return startAngle;
-    startAngle = d3.functor(v);
-    return chord;
-  };
-
-  chord.endAngle = function(v) {
-    if (!arguments.length) return endAngle;
-    endAngle = d3.functor(v);
-    return chord;
-  };
-
-  return chord;
-};
-
-function d3_svg_chordSource(d) {
-  return d.source;
-}
-
-function d3_svg_chordTarget(d) {
-  return d.target;
-}
-
-function d3_svg_chordRadius(d) {
-  return d.radius;
-}
-
-function d3_svg_chordStartAngle(d) {
-  return d.startAngle;
-}
-
-function d3_svg_chordEndAngle(d) {
-  return d.endAngle;
-}
-d3.svg.diagonal = function() {
-  var source = d3_svg_chordSource,
-      target = d3_svg_chordTarget,
-      projection = d3_svg_diagonalProjection;
-
-  function diagonal(d, i) {
-    var p0 = source.call(this, d, i),
-        p3 = target.call(this, d, i),
-        m = (p0.y + p3.y) / 2,
-        p = [p0, {x: p0.x, y: m}, {x: p3.x, y: m}, p3];
-    p = p.map(projection);
-    return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3];
-  }
-
-  diagonal.source = function(x) {
-    if (!arguments.length) return source;
-    source = d3.functor(x);
-    return diagonal;
-  };
-
-  diagonal.target = function(x) {
-    if (!arguments.length) return target;
-    target = d3.functor(x);
-    return diagonal;
-  };
-
-  diagonal.projection = function(x) {
-    if (!arguments.length) return projection;
-    projection = x;
-    return diagonal;
-  };
-
-  return diagonal;
-};
-
-function d3_svg_diagonalProjection(d) {
-  return [d.x, d.y];
-}
-d3.svg.diagonal.radial = function() {
-  var diagonal = d3.svg.diagonal(),
-      projection = d3_svg_diagonalProjection,
-      projection_ = diagonal.projection;
-
-  diagonal.projection = function(x) {
-    return arguments.length
-        ? projection_(d3_svg_diagonalRadialProjection(projection = x))
-        : projection;
-  };
-
-  return diagonal;
-};
-
-function d3_svg_diagonalRadialProjection(projection) {
-  return function() {
-    var d = projection.apply(this, arguments),
-        r = d[0],
-        a = d[1] + d3_svg_arcOffset;
-    return [r * Math.cos(a), r * Math.sin(a)];
-  };
-}
-d3.svg.mouse = function(container) {
-  return d3_svg_mousePoint(container, d3.event);
-};
-
-// https://bugs.webkit.org/show_bug.cgi?id=44083
-var d3_mouse_bug44083 = /WebKit/.test(navigator.userAgent) ? -1 : 0;
-
-function d3_svg_mousePoint(container, e) {
-  var point = (container.ownerSVGElement || container).createSVGPoint();
-  if ((d3_mouse_bug44083 < 0) && (window.scrollX || window.scrollY)) {
-    var svg = d3.select(document.body)
-      .append("svg:svg")
-        .style("position", "absolute")
-        .style("top", 0)
-        .style("left", 0);
-    var ctm = svg[0][0].getScreenCTM();
-    d3_mouse_bug44083 = !(ctm.f || ctm.e);
-    svg.remove();
-  }
-  if (d3_mouse_bug44083) {
-    point.x = e.pageX;
-    point.y = e.pageY;
-  } else {
-    point.x = e.clientX;
-    point.y = e.clientY;
-  }
-  point = point.matrixTransform(container.getScreenCTM().inverse());
-  return [point.x, point.y];
-};
-d3.svg.touches = function(container) {
-  var touches = d3.event.touches;
-  return touches ? Array.prototype.map.call(touches, function(touch) {
-    var point = d3_svg_mousePoint(container, touch);
-    point.identifier = touch.identifier;
-    return point;
-  }) : [];
-};
-d3.svg.symbol = function() {
-  var type = d3_svg_symbolType,
-      size = d3_svg_symbolSize;
-
-  function symbol(d, i) {
-    return (d3_svg_symbols[type.call(this, d, i)]
-        || d3_svg_symbols.circle)
-        (size.call(this, d, i));
-  }
-
-  symbol.type = function(x) {
-    if (!arguments.length) return type;
-    type = d3.functor(x);
-    return symbol;
-  };
-
-  // size of symbol in square pixels
-  symbol.size = function(x) {
-    if (!arguments.length) return size;
-    size = d3.functor(x);
-    return symbol;
-  };
-
-  return symbol;
-};
-
-function d3_svg_symbolSize() {
-  return 64;
-}
-
-function d3_svg_symbolType() {
-  return "circle";
-}
-
-// TODO cross-diagonal?
-var d3_svg_symbols = {
-  "circle": function(size) {
-    var r = Math.sqrt(size / Math.PI);
-    return "M0," + r
-        + "A" + r + "," + r + " 0 1,1 0," + (-r)
-        + "A" + r + "," + r + " 0 1,1 0," + r
-        + "Z";
-  },
-  "cross": function(size) {
-    var r = Math.sqrt(size / 5) / 2;
-    return "M" + -3 * r + "," + -r
-        + "H" + -r
-        + "V" + -3 * r
-        + "H" + r
-        + "V" + -r
-        + "H" + 3 * r
-        + "V" + r
-        + "H" + r
-        + "V" + 3 * r
-        + "H" + -r
-        + "V" + r
-        + "H" + -3 * r
-        + "Z";
-  },
-  "diamond": function(size) {
-    var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)),
-        rx = ry * d3_svg_symbolTan30;
-    return "M0," + -ry
-        + "L" + rx + ",0"
-        + " 0," + ry
-        + " " + -rx + ",0"
-        + "Z";
-  },
-  "square": function(size) {
-    var r = Math.sqrt(size) / 2;
-    return "M" + -r + "," + -r
-        + "L" + r + "," + -r
-        + " " + r + "," + r
-        + " " + -r + "," + r
-        + "Z";
-  },
-  "triangle-down": function(size) {
-    var rx = Math.sqrt(size / d3_svg_symbolSqrt3),
-        ry = rx * d3_svg_symbolSqrt3 / 2;
-    return "M0," + ry
-        + "L" + rx +"," + -ry
-        + " " + -rx + "," + -ry
-        + "Z";
-  },
-  "triangle-up": function(size) {
-    var rx = Math.sqrt(size / d3_svg_symbolSqrt3),
-        ry = rx * d3_svg_symbolSqrt3 / 2;
-    return "M0," + -ry
-        + "L" + rx +"," + ry
-        + " " + -rx + "," + ry
-        + "Z";
-  }
-};
-
-d3.svg.symbolTypes = d3.keys(d3_svg_symbols);
-
-var d3_svg_symbolSqrt3 = Math.sqrt(3),
-    d3_svg_symbolTan30 = Math.tan(30 * Math.PI / 180);
-d3.svg.axis = function() {
-  var scale = d3.scale.linear(),
-      orient = "bottom",
-      tickMajorSize = 6,
-      tickMinorSize = 6,
-      tickEndSize = 6,
-      tickPadding = 3,
-      tickArguments_ = [10],
-      tickFormat_,
-      tickSubdivide = 0;
-
-  function axis(selection) {
-    selection.each(function(d, i, j) {
-      var g = d3.select(this);
-
-      // Ticks.
-      var ticks = scale.ticks.apply(scale, tickArguments_),
-          tickFormat = tickFormat_ == null ? scale.tickFormat.apply(scale, tickArguments_) : tickFormat_;
-
-      // Minor ticks.
-      var subticks = d3_svg_axisSubdivide(scale, ticks, tickSubdivide),
-          subtick = g.selectAll(".minor").data(subticks, String),
-          subtickEnter = subtick.enter().insert("svg:line", "g").attr("class", "tick minor").style("opacity", 1e-6),
-          subtickExit = transition(subtick.exit()).style("opacity", 1e-6).remove(),
-          subtickUpdate = transition(subtick).style("opacity", 1);
-
-      // Major ticks.
-      var tick = g.selectAll("g").data(ticks, String),
-          tickEnter = tick.enter().insert("svg:g", "path").style("opacity", 1e-6),
-          tickExit = transition(tick.exit()).style("opacity", 1e-6).remove(),
-          tickUpdate = transition(tick).style("opacity", 1),
-          tickTransform;
-
-      // Domain.
-      var range = d3_scaleExtent(scale.range()),
-          path = g.selectAll(".domain").data([0]),
-          pathEnter = path.enter().append("svg:path").attr("class", "domain"),
-          pathUpdate = transition(path);
-
-      // Stash the new scale and grab the old scale.
-      var scale0 = this.__chart__ || scale;
-      this.__chart__ = scale.copy();
-
-      tickEnter.append("svg:line").attr("class", "tick");
-      tickEnter.append("svg:text");
-      tickUpdate.select("text").text(tickFormat);
-
-      switch (orient) {
-        case "bottom": {
-          tickTransform = d3_svg_axisX;
-          subtickUpdate.attr("y2", tickMinorSize);
-          tickEnter.select("text").attr("dy", ".71em").attr("text-anchor", "middle");
-          tickUpdate.select("line").attr("y2", tickMajorSize);
-          tickUpdate.select("text").attr("y", Math.max(tickMajorSize, 0) + tickPadding);
-          pathUpdate.attr("d", "M" + range[0] + "," + tickEndSize + "V0H" + range[1] + "V" + tickEndSize);
-          break;
-        }
-        case "top": {
-          tickTransform = d3_svg_axisX;
-          subtickUpdate.attr("y2", -tickMinorSize);
-          tickEnter.select("text").attr("text-anchor", "middle");
-          tickUpdate.select("line").attr("y2", -tickMajorSize);
-          tickUpdate.select("text").attr("y", -(Math.max(tickMajorSize, 0) + tickPadding));
-          pathUpdate.attr("d", "M" + range[0] + "," + -tickEndSize + "V0H" + range[1] + "V" + -tickEndSize);
-          break;
-        }
-        case "left": {
-          tickTransform = d3_svg_axisY;
-          subtickUpdate.attr("x2", -tickMinorSize);
-          tickEnter.select("text").attr("dy", ".32em").attr("text-anchor", "end");
-          tickUpdate.select("line").attr("x2", -tickMajorSize);
-          tickUpdate.select("text").attr("x", -(Math.max(tickMajorSize, 0) + tickPadding));
-          pathUpdate.attr("d", "M" + -tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + -tickEndSize);
-          break;
-        }
-        case "right": {
-          tickTransform = d3_svg_axisY;
-          subtickUpdate.attr("x2", tickMinorSize);
-          tickEnter.select("text").attr("dy", ".32em");
-          tickUpdate.select("line").attr("x2", tickMajorSize);
-          tickUpdate.select("text").attr("x", Math.max(tickMajorSize, 0) + tickPadding);
-          pathUpdate.attr("d", "M" + tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + tickEndSize);
-          break;
-        }
-      }
-
-      tickEnter.call(tickTransform, scale0);
-      tickUpdate.call(tickTransform, scale);
-      tickExit.call(tickTransform, scale);
-
-      subtickEnter.call(tickTransform, scale0);
-      subtickUpdate.call(tickTransform, scale);
-      subtickExit.call(tickTransform, scale);
-
-      function transition(o) {
-        return selection.delay ? o.transition()
-            .delay(selection[j][i].delay)
-            .duration(selection[j][i].duration)
-            .ease(selection.ease()) : o;
-      }
-    });
-  }
-
-  axis.scale = function(x) {
-    if (!arguments.length) return scale;
-    scale = x;
-    return axis;
-  };
-
-  axis.orient = function(x) {
-    if (!arguments.length) return orient;
-    orient = x;
-    return axis;
-  };
-
-  axis.ticks = function() {
-    if (!arguments.length) return tickArguments_;
-    tickArguments_ = arguments;
-    return axis;
-  };
-
-  axis.tickFormat = function(x) {
-    if (!arguments.length) return tickFormat_;
-    tickFormat_ = x;
-    return axis;
-  };
-
-  axis.tickSize = function(x, y, z) {
-    if (!arguments.length) return tickMajorSize;
-    var n = arguments.length - 1;
-    tickMajorSize = +x;
-    tickMinorSize = n > 1 ? +y : tickMajorSize;
-    tickEndSize = n > 0 ? +arguments[n] : tickMajorSize;
-    return axis;
-  };
-
-  axis.tickPadding = function(x) {
-    if (!arguments.length) return tickPadding;
-    tickPadding = +x;
-    return axis;
-  };
-
-  axis.tickSubdivide = function(x) {
-    if (!arguments.length) return tickSubdivide;
-    tickSubdivide = +x;
-    return axis;
-  };
-
-  return axis;
-};
-
-function d3_svg_axisX(selection, x) {
-  selection.attr("transform", function(d) { return "translate(" + x(d) + ",0)"; });
-}
-
-function d3_svg_axisY(selection, y) {
-  selection.attr("transform", function(d) { return "translate(0," + y(d) + ")"; });
-}
-
-function d3_svg_axisSubdivide(scale, ticks, m) {
-  subticks = [];
-  if (m && ticks.length > 1) {
-    var extent = d3_scaleExtent(scale.domain()),
-        subticks,
-        i = -1,
-        n = ticks.length,
-        d = (ticks[1] - ticks[0]) / ++m,
-        j,
-        v;
-    while (++i < n) {
-      for (j = m; --j > 0;) {
-        if ((v = +ticks[i] - j * d) >= extent[0]) {
-          subticks.push(v);
-        }
-      }
-    }
-    for (--i, j = 0; ++j < m && (v = +ticks[i] + j * d) < extent[1];) {
-      subticks.push(v);
-    }
-  }
-  return subticks;
-}
-d3.behavior = {};
-d3.behavior.drag = function() {
-  var event = d3.dispatch("drag", "dragstart", "dragend");
-
-  function drag() {
-    this
-        .on("mousedown.drag", mousedown)
-        .on("touchstart.drag", mousedown);
-
-    d3.select(window)
-        .on("mousemove.drag", d3_behavior_dragMove)
-        .on("touchmove.drag", d3_behavior_dragMove)
-        .on("mouseup.drag", d3_behavior_dragUp, true)
-        .on("touchend.drag", d3_behavior_dragUp, true)
-        .on("click.drag", d3_behavior_dragClick, true);
-  }
-
-  // snapshot the local context for subsequent dispatch
-  function start() {
-    d3_behavior_dragEvent = event;
-    d3_behavior_dragOffset = d3_behavior_dragPoint((d3_behavior_dragTarget = this).parentNode);
-    d3_behavior_dragMoved = 0;
-    d3_behavior_dragArguments = arguments;
-  }
-
-  function mousedown() {
-    start.apply(this, arguments);
-    d3_behavior_dragDispatch("dragstart");
-  }
-
-  drag.on = function(type, listener) {
-    event[type].add(listener);
-    return drag;
-  };
-
-  return drag;
-};
-
-var d3_behavior_dragEvent,
-    d3_behavior_dragTarget,
-    d3_behavior_dragArguments,
-    d3_behavior_dragOffset,
-    d3_behavior_dragMoved,
-    d3_behavior_dragStopClick;
-
-function d3_behavior_dragDispatch(type) {
-  var o = d3.event, p = d3_behavior_dragTarget.parentNode, dx = 0, dy = 0;
-
-  if (p) {
-    p = d3_behavior_dragPoint(p);
-    dx = p[0] - d3_behavior_dragOffset[0];
-    dy = p[1] - d3_behavior_dragOffset[1];
-    d3_behavior_dragOffset = p;
-    d3_behavior_dragMoved |= dx | dy;
-  }
-
-  try {
-    d3.event = {dx: dx, dy: dy};
-    d3_behavior_dragEvent[type].dispatch.apply(d3_behavior_dragTarget, d3_behavior_dragArguments);
-  } finally {
-    d3.event = o;
-  }
-
-  o.preventDefault();
-}
-
-function d3_behavior_dragPoint(container) {
-  return d3.event.touches
-      ? d3.svg.touches(container)[0]
-      : d3.svg.mouse(container);
-}
-
-function d3_behavior_dragMove() {
-  if (!d3_behavior_dragTarget) return;
-  var parent = d3_behavior_dragTarget.parentNode;
-
-  // O NOES! The drag element was removed from the DOM.
-  if (!parent) return d3_behavior_dragUp();
-
-  d3_behavior_dragDispatch("drag");
-  d3_behavior_dragCancel();
-}
-
-function d3_behavior_dragUp() {
-  if (!d3_behavior_dragTarget) return;
-  d3_behavior_dragDispatch("dragend");
-  d3_behavior_dragTarget = null;
-
-  // If the node was moved, prevent the mouseup from propagating.
-  // Also prevent the subsequent click from propagating (e.g., for anchors).
-  if (d3_behavior_dragMoved) {
-    d3_behavior_dragStopClick = true;
-    d3_behavior_dragCancel();
-  }
-}
-
-function d3_behavior_dragClick() {
-  if (d3_behavior_dragStopClick) {
-    d3_behavior_dragCancel();
-    d3_behavior_dragStopClick = false;
-  }
-}
-
-function d3_behavior_dragCancel() {
-  d3.event.stopPropagation();
-  d3.event.preventDefault();
-}
-// TODO unbind zoom behavior?
-// TODO unbind listener?
-d3.behavior.zoom = function() {
-  var xyz = [0, 0, 0],
-      event = d3.dispatch("zoom");
-
-  function zoom() {
-    this
-        .on("mousedown.zoom", mousedown)
-        .on("mousewheel.zoom", mousewheel)
-        .on("DOMMouseScroll.zoom", mousewheel)
-        .on("dblclick.zoom", dblclick)
-        .on("touchstart.zoom", touchstart);
-
-    d3.select(window)
-        .on("mousemove.zoom", d3_behavior_zoomMousemove)
-        .on("mouseup.zoom", d3_behavior_zoomMouseup)
-        .on("touchmove.zoom", d3_behavior_zoomTouchmove)
-        .on("touchend.zoom", d3_behavior_zoomTouchup)
-        .on("click.zoom", d3_behavior_zoomClick, true);
-  }
-
-  // snapshot the local context for subsequent dispatch
-  function start() {
-    d3_behavior_zoomXyz = xyz;
-    d3_behavior_zoomDispatch = event.zoom.dispatch;
-    d3_behavior_zoomTarget = this;
-    d3_behavior_zoomArguments = arguments;
-  }
-
-  function mousedown() {
-    start.apply(this, arguments);
-    d3_behavior_zoomPanning = d3_behavior_zoomLocation(d3.svg.mouse(d3_behavior_zoomTarget));
-    d3_behavior_zoomMoved = false;
-    d3.event.preventDefault();
-    window.focus();
-  }
-
-  // store starting mouse location
-  function mousewheel() {
-    start.apply(this, arguments);
-    if (!d3_behavior_zoomZooming) d3_behavior_zoomZooming = d3_behavior_zoomLocation(d3.svg.mouse(d3_behavior_zoomTarget));
-    d3_behavior_zoomTo(d3_behavior_zoomDelta() + xyz[2], d3.svg.mouse(d3_behavior_zoomTarget), d3_behavior_zoomZooming);
-  }
-
-  function dblclick() {
-    start.apply(this, arguments);
-    var mouse = d3.svg.mouse(d3_behavior_zoomTarget);
-    d3_behavior_zoomTo(d3.event.shiftKey ? Math.ceil(xyz[2] - 1) : Math.floor(xyz[2] + 1), mouse, d3_behavior_zoomLocation(mouse));
-  }
-
-  // doubletap detection
-  function touchstart() {
-    start.apply(this, arguments);
-    var touches = d3_behavior_zoomTouchup(),
-        touch,
-        now = Date.now();
-    if ((touches.length === 1) && (now - d3_behavior_zoomLast < 300)) {
-      d3_behavior_zoomTo(1 + Math.floor(xyz[2]), touch = touches[0], d3_behavior_zoomLocations[touch.identifier]);
-    }
-    d3_behavior_zoomLast = now;
-  }
-
-  zoom.on = function(type, listener) {
-    event[type].add(listener);
-    return zoom;
-  };
-
-  return zoom;
-};
-
-var d3_behavior_zoomDiv,
-    d3_behavior_zoomPanning,
-    d3_behavior_zoomZooming,
-    d3_behavior_zoomLocations = {}, // identifier -> location
-    d3_behavior_zoomLast = 0,
-    d3_behavior_zoomXyz,
-    d3_behavior_zoomDispatch,
-    d3_behavior_zoomTarget,
-    d3_behavior_zoomArguments,
-    d3_behavior_zoomMoved,
-    d3_behavior_zoomStopClick;
-
-function d3_behavior_zoomLocation(point) {
-  return [
-    point[0] - d3_behavior_zoomXyz[0],
-    point[1] - d3_behavior_zoomXyz[1],
-    d3_behavior_zoomXyz[2]
-  ];
-}
-
-// detect the pixels that would be scrolled by this wheel event
-function d3_behavior_zoomDelta() {
-
-  // mousewheel events are totally broken!
-  // https://bugs.webkit.org/show_bug.cgi?id=40441
-  // not only that, but Chrome and Safari differ in re. to acceleration!
-  if (!d3_behavior_zoomDiv) {
-    d3_behavior_zoomDiv = d3.select("body").append("div")
-        .style("visibility", "hidden")
-        .style("top", 0)
-        .style("height", 0)
-        .style("width", 0)
-        .style("overflow-y", "scroll")
-      .append("div")
-        .style("height", "2000px")
-      .node().parentNode;
-  }
-
-  var e = d3.event, delta;
-  try {
-    d3_behavior_zoomDiv.scrollTop = 1000;
-    d3_behavior_zoomDiv.dispatchEvent(e);
-    delta = 1000 - d3_behavior_zoomDiv.scrollTop;
-  } catch (error) {
-    delta = e.wheelDelta || (-e.detail * 5);
-  }
-
-  return delta * .005;
-}
-
-// Note: Since we don't rotate, it's possible for the touches to become
-// slightly detached from their original positions. Thus, we recompute the
-// touch points on touchend as well as touchstart!
-function d3_behavior_zoomTouchup() {
-  var touches = d3.svg.touches(d3_behavior_zoomTarget),
-      i = -1,
-      n = touches.length,
-      touch;
-  while (++i < n) d3_behavior_zoomLocations[(touch = touches[i]).identifier] = d3_behavior_zoomLocation(touch);
-  return touches;
-}
-
-function d3_behavior_zoomTouchmove() {
-  var touches = d3.svg.touches(d3_behavior_zoomTarget);
-  switch (touches.length) {
-
-    // single-touch pan
-    case 1: {
-      var touch = touches[0];
-      d3_behavior_zoomTo(d3_behavior_zoomXyz[2], touch, d3_behavior_zoomLocations[touch.identifier]);
-      break;
-    }
-
-    // double-touch pan + zoom
-    case 2: {
-      var p0 = touches[0],
-          p1 = touches[1],
-          p2 = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2],
-          l0 = d3_behavior_zoomLocations[p0.identifier],
-          l1 = d3_behavior_zoomLocations[p1.identifier],
-          l2 = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2, l0[2]];
-      d3_behavior_zoomTo(Math.log(d3.event.scale) / Math.LN2 + l0[2], p2, l2);
-      break;
-    }
-  }
-}
-
-function d3_behavior_zoomMousemove() {
-  d3_behavior_zoomZooming = null;
-  if (d3_behavior_zoomPanning) {
-    d3_behavior_zoomMoved = true;
-    d3_behavior_zoomTo(d3_behavior_zoomXyz[2], d3.svg.mouse(d3_behavior_zoomTarget), d3_behavior_zoomPanning);
-  }
-}
-
-function d3_behavior_zoomMouseup() {
-  if (d3_behavior_zoomPanning) {
-    if (d3_behavior_zoomMoved) d3_behavior_zoomStopClick = true;
-    d3_behavior_zoomMousemove();
-    d3_behavior_zoomPanning = null;
-  }
-}
-
-function d3_behavior_zoomClick() {
-  if (d3_behavior_zoomStopClick) {
-    d3.event.stopPropagation();
-    d3.event.preventDefault();
-    d3_behavior_zoomStopClick = false;
-  }
-}
-
-function d3_behavior_zoomTo(z, x0, x1) {
-  var K = Math.pow(2, (d3_behavior_zoomXyz[2] = z) - x1[2]),
-      x = d3_behavior_zoomXyz[0] = x0[0] - K * x1[0],
-      y = d3_behavior_zoomXyz[1] = x0[1] - K * x1[1],
-      o = d3.event, // Events can be reentrant (e.g., focus).
-      k = Math.pow(2, z);
-
-  d3.event = {
-    scale: k,
-    translate: [x, y],
-    transform: function(sx, sy) {
-      if (sx) transform(sx, x);
-      if (sy) transform(sy, y);
-    }
-  };
-
-  function transform(scale, o) {
-    var domain = scale.__domain || (scale.__domain = scale.domain()),
-        range = scale.range().map(function(v) { return (v - o) / k; });
-    scale.domain(domain).domain(range.map(scale.invert));
-  }
-
-  try {
-    d3_behavior_zoomDispatch.apply(d3_behavior_zoomTarget, d3_behavior_zoomArguments);
-  } finally {
-    d3.event = o;
-  }
-
-  o.preventDefault();
-}
-})();
diff --git a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/d3.layout.js b/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/d3.layout.js
deleted file mode 100755
index 6cc1d716167..00000000000
--- a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/d3.layout.js
+++ /dev/null
@@ -1,1865 +0,0 @@
-(function(){d3.layout = {};
-// Implements hierarchical edge bundling using Holten's algorithm. For each
-// input link, a path is computed that travels through the tree, up the parent
-// hierarchy to the least common ancestor, and then back down to the destination
-// node. Each path is simply an array of nodes.
-d3.layout.bundle = function() {
-  return function(links) {
-    var paths = [],
-        i = -1,
-        n = links.length;
-    while (++i < n) paths.push(d3_layout_bundlePath(links[i]));
-    return paths;
-  };
-};
-
-function d3_layout_bundlePath(link) {
-  var start = link.source,
-      end = link.target,
-      lca = d3_layout_bundleLeastCommonAncestor(start, end),
-      points = [start];
-  while (start !== lca) {
-    start = start.parent;
-    points.push(start);
-  }
-  var k = points.length;
-  while (end !== lca) {
-    points.splice(k, 0, end);
-    end = end.parent;
-  }
-  return points;
-}
-
-function d3_layout_bundleAncestors(node) {
-  var ancestors = [],
-      parent = node.parent;
-  while (parent != null) {
-    ancestors.push(node);
-    node = parent;
-    parent = parent.parent;
-  }
-  ancestors.push(node);
-  return ancestors;
-}
-
-function d3_layout_bundleLeastCommonAncestor(a, b) {
-  if (a === b) return a;
-  var aNodes = d3_layout_bundleAncestors(a),
-      bNodes = d3_layout_bundleAncestors(b),
-      aNode = aNodes.pop(),
-      bNode = bNodes.pop(),
-      sharedNode = null;
-  while (aNode === bNode) {
-    sharedNode = aNode;
-    aNode = aNodes.pop();
-    bNode = bNodes.pop();
-  }
-  return sharedNode;
-}
-d3.layout.chord = function() {
-  var chord = {},
-      chords,
-      groups,
-      matrix,
-      n,
-      padding = 0,
-      sortGroups,
-      sortSubgroups,
-      sortChords;
-
-  function relayout() {
-    var subgroups = {},
-        groupSums = [],
-        groupIndex = d3.range(n),
-        subgroupIndex = [],
-        k,
-        x,
-        x0,
-        i,
-        j;
-
-    chords = [];
-    groups = [];
-
-    // Compute the sum.
-    k = 0, i = -1; while (++i < n) {
-      x = 0, j = -1; while (++j < n) {
-        x += matrix[i][j];
-      }
-      groupSums.push(x);
-      subgroupIndex.push(d3.range(n));
-      k += x;
-    }
-
-    // Sort groups…
-    if (sortGroups) {
-      groupIndex.sort(function(a, b) {
-        return sortGroups(groupSums[a], groupSums[b]);
-      });
-    }
-
-    // Sort subgroups…
-    if (sortSubgroups) {
-      subgroupIndex.forEach(function(d, i) {
-        d.sort(function(a, b) {
-          return sortSubgroups(matrix[i][a], matrix[i][b]);
-        });
-      });
-    }
-
-    // Convert the sum to scaling factor for [0, 2pi].
-    // TODO Allow start and end angle to be specified.
-    // TODO Allow padding to be specified as percentage?
-    k = (2 * Math.PI - padding * n) / k;
-
-    // Compute the start and end angle for each group and subgroup.
-    x = 0, i = -1; while (++i < n) {
-      x0 = x, j = -1; while (++j < n) {
-        var di = groupIndex[i],
-            dj = subgroupIndex[i][j],
-            v = matrix[di][dj];
-        subgroups[di + "-" + dj] = {
-          index: di,
-          subindex: dj,
-          startAngle: x,
-          endAngle: x += v * k,
-          value: v
-        };
-      }
-      groups.push({
-        index: di,
-        startAngle: x0,
-        endAngle: x,
-        value: (x - x0) / k
-      });
-      x += padding;
-    }
-
-    // Generate chords for each (non-empty) subgroup-subgroup link.
-    i = -1; while (++i < n) {
-      j = i - 1; while (++j < n) {
-        var source = subgroups[i + "-" + j],
-            target = subgroups[j + "-" + i];
-        if (source.value || target.value) {
-          chords.push(source.value < target.value
-              ? {source: target, target: source}
-              : {source: source, target: target});
-        }
-      }
-    }
-
-    if (sortChords) resort();
-  }
-
-  function resort() {
-    chords.sort(function(a, b) {
-      return sortChords(a.target.value, b.target.value);
-    });
-  }
-
-  chord.matrix = function(x) {
-    if (!arguments.length) return matrix;
-    n = (matrix = x) && matrix.length;
-    chords = groups = null;
-    return chord;
-  };
-
-  chord.padding = function(x) {
-    if (!arguments.length) return padding;
-    padding = x;
-    chords = groups = null;
-    return chord;
-  };
-
-  chord.sortGroups = function(x) {
-    if (!arguments.length) return sortGroups;
-    sortGroups = x;
-    chords = groups = null;
-    return chord;
-  };
-
-  chord.sortSubgroups = function(x) {
-    if (!arguments.length) return sortSubgroups;
-    sortSubgroups = x;
-    chords = null;
-    return chord;
-  };
-
-  chord.sortChords = function(x) {
-    if (!arguments.length) return sortChords;
-    sortChords = x;
-    if (chords) resort();
-    return chord;
-  };
-
-  chord.chords = function() {
-    if (!chords) relayout();
-    return chords;
-  };
-
-  chord.groups = function() {
-    if (!groups) relayout();
-    return groups;
-  };
-
-  return chord;
-};
-// A rudimentary force layout using Gauss-Seidel.
-d3.layout.force = function() {
-  var force = {},
-      event = d3.dispatch("tick"),
-      size = [1, 1],
-      drag,
-      alpha,
-      friction = .9,
-      linkDistance = d3_layout_forceLinkDistance,
-      linkStrength = d3_layout_forceLinkStrength,
-      charge = -30,
-      gravity = .1,
-      theta = .8,
-      interval,
-      nodes = [],
-      links = [],
-      distances,
-      strengths;
-
-  function repulse(node, kc) {
-    return function(quad, x1, y1, x2, y2) {
-      if (quad.point !== node) {
-        var dx = quad.cx - node.x,
-            dy = quad.cy - node.y,
-            dn = 1 / Math.sqrt(dx * dx + dy * dy);
-
-        /* Barnes-Hut criterion. */
-        if ((x2 - x1) * dn < theta) {
-          var k = kc * quad.count * dn * dn;
-          node.px -= dx * k;
-          node.py -= dy * k;
-          return true;
-        }
-
-        if (quad.point && isFinite(dn)) {
-          var k = kc * dn * dn;
-          node.px -= dx * k;
-          node.py -= dy * k;
-        }
-      }
-    };
-  }
-
-  function tick() {
-    var n = nodes.length,
-        m = links.length,
-        q,
-        i, // current index
-        o, // current object
-        s, // current source
-        t, // current target
-        l, // current distance
-        k, // current force
-        x, // x-distance
-        y; // y-distance
-
-    // gauss-seidel relaxation for links
-    for (i = 0; i < m; ++i) {
-      o = links[i];
-      s = o.source;
-      t = o.target;
-      x = t.x - s.x;
-      y = t.y - s.y;
-      if (l = (x * x + y * y)) {
-        l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;
-        x *= l;
-        y *= l;
-        t.x -= x * (k = s.weight / (t.weight + s.weight));
-        t.y -= y * k;
-        s.x += x * (k = 1 - k);
-        s.y += y * k;
-      }
-    }
-
-    // apply gravity forces
-    if (k = alpha * gravity) {
-      x = size[0] / 2;
-      y = size[1] / 2;
-      i = -1; if (k) while (++i < n) {
-        o = nodes[i];
-        o.x += (x - o.x) * k;
-        o.y += (y - o.y) * k;
-      }
-    }
-
-    // compute quadtree center of mass and apply charge forces
-    if (k = alpha * charge) {
-      d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes));
-      i = -1; while (++i < n) {
-        if (!(o = nodes[i]).fixed) {
-          q.visit(repulse(o, k));
-        }
-      }
-    }
-
-    // position verlet integration
-    i = -1; while (++i < n) {
-      o = nodes[i];
-      if (o.fixed) {
-        o.x = o.px;
-        o.y = o.py;
-      } else {
-        o.x -= (o.px - (o.px = o.x)) * friction;
-        o.y -= (o.py - (o.py = o.y)) * friction;
-      }
-    }
-
-    event.tick.dispatch({type: "tick", alpha: alpha});
-
-    // simulated annealing, basically
-    return (alpha *= .99) < .005;
-  }
-
-  force.on = function(type, listener) {
-    event[type].add(listener);
-    return force;
-  };
-
-  force.nodes = function(x) {
-    if (!arguments.length) return nodes;
-    nodes = x;
-    return force;
-  };
-
-  force.links = function(x) {
-    if (!arguments.length) return links;
-    links = x;
-    return force;
-  };
-
-  force.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return force;
-  };
-
-  force.linkDistance = function(x) {
-    if (!arguments.length) return linkDistance;
-    linkDistance = d3.functor(x);
-    return force;
-  };
-
-  // For backwards-compatibility.
-  force.distance = force.linkDistance;
-
-  force.linkStrength = function(x) {
-    if (!arguments.length) return linkStrength;
-    linkStrength = d3.functor(x);
-    return force;
-  };
-
-  force.friction = function(x) {
-    if (!arguments.length) return friction;
-    friction = x;
-    return force;
-  };
-
-  force.charge = function(x) {
-    if (!arguments.length) return charge;
-    charge = x;
-    return force;
-  };
-
-  force.gravity = function(x) {
-    if (!arguments.length) return gravity;
-    gravity = x;
-    return force;
-  };
-
-  force.theta = function(x) {
-    if (!arguments.length) return theta;
-    theta = x;
-    return force;
-  };
-
-  force.start = function() {
-    var i,
-        j,
-        n = nodes.length,
-        m = links.length,
-        w = size[0],
-        h = size[1],
-        neighbors,
-        o;
-
-    for (i = 0; i < n; ++i) {
-      (o = nodes[i]).index = i;
-      o.weight = 0;
-    }
-
-    distances = [];
-    strengths = [];
-    for (i = 0; i < m; ++i) {
-      o = links[i];
-      if (typeof o.source == "number") o.source = nodes[o.source];
-      if (typeof o.target == "number") o.target = nodes[o.target];
-      distances[i] = linkDistance.call(this, o, i);
-      strengths[i] = linkStrength.call(this, o, i);
-      ++o.source.weight;
-      ++o.target.weight;
-    }
-
-    for (i = 0; i < n; ++i) {
-      o = nodes[i];
-      if (isNaN(o.x)) o.x = position("x", w);
-      if (isNaN(o.y)) o.y = position("y", h);
-      if (isNaN(o.px)) o.px = o.x;
-      if (isNaN(o.py)) o.py = o.y;
-    }
-
-    // initialize node position based on first neighbor
-    function position(dimension, size) {
-      var neighbors = neighbor(i),
-          j = -1,
-          m = neighbors.length,
-          x;
-      while (++j < m) if (!isNaN(x = neighbors[j][dimension])) return x;
-      return Math.random() * size;
-    }
-
-    // initialize neighbors lazily
-    function neighbor() {
-      if (!neighbors) {
-        neighbors = [];
-        for (j = 0; j < n; ++j) {
-          neighbors[j] = [];
-        }
-        for (j = 0; j < m; ++j) {
-          var o = links[j];
-          neighbors[o.source.index].push(o.target);
-          neighbors[o.target.index].push(o.source);
-        }
-      }
-      return neighbors[i];
-    }
-
-    return force.resume();
-  };
-
-  force.resume = function() {
-    alpha = .1;
-    d3.timer(tick);
-    return force;
-  };
-
-  force.stop = function() {
-    alpha = 0;
-    return force;
-  };
-
-  // use `node.call(force.drag)` to make nodes draggable
-  force.drag = function() {
-    if (!drag) drag = d3.behavior.drag()
-        .on("dragstart", dragstart)
-        .on("drag", d3_layout_forceDrag)
-        .on("dragend", d3_layout_forceDragEnd);
-
-    this.on("mouseover.force", d3_layout_forceDragOver)
-        .on("mouseout.force", d3_layout_forceDragOut)
-        .call(drag);
-  };
-
-  function dragstart(d) {
-    d3_layout_forceDragOver(d3_layout_forceDragNode = d);
-    d3_layout_forceDragForce = force;
-  }
-
-  return force;
-};
-
-var d3_layout_forceDragForce,
-    d3_layout_forceDragNode;
-
-function d3_layout_forceDragOver(d) {
-  d.fixed |= 2;
-}
-
-function d3_layout_forceDragOut(d) {
-  if (d !== d3_layout_forceDragNode) d.fixed &= 1;
-}
-
-function d3_layout_forceDragEnd() {
-  d3_layout_forceDrag();
-  d3_layout_forceDragNode.fixed &= 1;
-  d3_layout_forceDragForce = d3_layout_forceDragNode = null;
-}
-
-function d3_layout_forceDrag() {
-  d3_layout_forceDragNode.px += d3.event.dx;
-  d3_layout_forceDragNode.py += d3.event.dy;
-  d3_layout_forceDragForce.resume(); // restart annealing
-}
-
-function d3_layout_forceAccumulate(quad) {
-  var cx = 0,
-      cy = 0;
-  quad.count = 0;
-  if (!quad.leaf) {
-    var nodes = quad.nodes,
-        n = nodes.length,
-        i = -1,
-        c;
-    while (++i < n) {
-      c = nodes[i];
-      if (c == null) continue;
-      d3_layout_forceAccumulate(c);
-      quad.count += c.count;
-      cx += c.count * c.cx;
-      cy += c.count * c.cy;
-    }
-  }
-  if (quad.point) {
-    // jitter internal nodes that are coincident
-    if (!quad.leaf) {
-      quad.point.x += Math.random() - .5;
-      quad.point.y += Math.random() - .5;
-    }
-    quad.count++;
-    cx += quad.point.x;
-    cy += quad.point.y;
-  }
-  quad.cx = cx / quad.count;
-  quad.cy = cy / quad.count;
-}
-
-function d3_layout_forceLinkDistance(link) {
-  return 20;
-}
-
-function d3_layout_forceLinkStrength(link) {
-  return 1;
-}
-d3.layout.partition = function() {
-  var hierarchy = d3.layout.hierarchy(),
-      size = [1, 1]; // width, height
-
-  function position(node, x, dx, dy) {
-    var children = node.children;
-    node.x = x;
-    node.y = node.depth * dy;
-    node.dx = dx;
-    node.dy = dy;
-    if (children) {
-      var i = -1,
-          n = children.length,
-          c,
-          d;
-      dx = node.value ? dx / node.value : 0;
-      while (++i < n) {
-        position(c = children[i], x, d = c.value * dx, dy);
-        x += d;
-      }
-    }
-  }
-
-  function depth(node) {
-    var children = node.children,
-        d = 0;
-    if (children) {
-      var i = -1,
-          n = children.length;
-      while (++i < n) d = Math.max(d, depth(children[i]));
-    }
-    return 1 + d;
-  }
-
-  function partition(d, i) {
-    var nodes = hierarchy.call(this, d, i);
-    position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));
-    return nodes;
-  }
-
-  partition.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return partition;
-  };
-
-  return d3_layout_hierarchyRebind(partition, hierarchy);
-};
-d3.layout.pie = function() {
-  var value = Number,
-      sort = null,
-      startAngle = 0,
-      endAngle = 2 * Math.PI;
-
-  function pie(data, i) {
-
-    // Compute the start angle.
-    var a = +(typeof startAngle === "function"
-        ? startAngle.apply(this, arguments)
-        : startAngle);
-
-    // Compute the angular range (end - start).
-    var k = (typeof endAngle === "function"
-        ? endAngle.apply(this, arguments)
-        : endAngle) - startAngle;
-
-    // Optionally sort the data.
-    var index = d3.range(data.length);
-    if (sort != null) index.sort(function(i, j) {
-      return sort(data[i], data[j]);
-    });
-
-    // Compute the numeric values for each data element.
-    var values = data.map(value);
-
-    // Convert k into a scale factor from value to angle, using the sum.
-    k /= values.reduce(function(p, d) { return p + d; }, 0);
-
-    // Compute the arcs!
-    var arcs = index.map(function(i) {
-      return {
-        data: data[i],
-        value: d = values[i],
-        startAngle: a,
-        endAngle: a += d * k
-      };
-    });
-
-    // Return the arcs in the original data's order.
-    return data.map(function(d, i) {
-      return arcs[index[i]];
-    });
-  }
-
-  /**
-   * Specifies the value function *x*, which returns a nonnegative numeric value
-   * for each datum. The default value function is `Number`. The value function
-   * is passed two arguments: the current datum and the current index.
-   */
-  pie.value = function(x) {
-    if (!arguments.length) return value;
-    value = x;
-    return pie;
-  };
-
-  /**
-   * Specifies a sort comparison operator *x*. The comparator is passed two data
-   * elements from the data array, a and b; it returns a negative value if a is
-   * less than b, a positive value if a is greater than b, and zero if a equals
-   * b.
-   */
-  pie.sort = function(x) {
-    if (!arguments.length) return sort;
-    sort = x;
-    return pie;
-  };
-
-  /**
-   * Specifies the overall start angle of the pie chart. Defaults to 0. The
-   * start angle can be specified either as a constant or as a function; in the
-   * case of a function, it is evaluated once per array (as opposed to per
-   * element).
-   */
-  pie.startAngle = function(x) {
-    if (!arguments.length) return startAngle;
-    startAngle = x;
-    return pie;
-  };
-
-  /**
-   * Specifies the overall end angle of the pie chart. Defaults to 2Ï€. The
-   * end angle can be specified either as a constant or as a function; in the
-   * case of a function, it is evaluated once per array (as opposed to per
-   * element).
-   */
-  pie.endAngle = function(x) {
-    if (!arguments.length) return endAngle;
-    endAngle = x;
-    return pie;
-  };
-
-  return pie;
-};
-// data is two-dimensional array of x,y; we populate y0
-d3.layout.stack = function() {
-  var values = Object,
-      order = d3_layout_stackOrders["default"],
-      offset = d3_layout_stackOffsets["zero"],
-      out = d3_layout_stackOut,
-      x = d3_layout_stackX,
-      y = d3_layout_stackY;
-
-  function stack(data, index) {
-
-    // Convert series to canonical two-dimensional representation.
-    var series = data.map(function(d, i) {
-      return values.call(stack, d, i);
-    });
-
-    // Convert each series to canonical [[x,y]] representation.
-    var points = series.map(function(d, i) {
-      return d.map(function(v, i) {
-        return [x.call(stack, v, i), y.call(stack, v, i)];
-      });
-    });
-
-    // Compute the order of series, and permute them.
-    var orders = order.call(stack, points, index);
-    series = d3.permute(series, orders);
-    points = d3.permute(points, orders);
-
-    // Compute the baseline…
-    var offsets = offset.call(stack, points, index);
-
-    // And propagate it to other series.
-    var n = series.length,
-        m = series[0].length,
-        i,
-        j,
-        o;
-    for (j = 0; j < m; ++j) {
-      out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);
-      for (i = 1; i < n; ++i) {
-        out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);
-      }
-    }
-
-    return data;
-  }
-
-  stack.values = function(x) {
-    if (!arguments.length) return values;
-    values = x;
-    return stack;
-  };
-
-  stack.order = function(x) {
-    if (!arguments.length) return order;
-    order = typeof x === "function" ? x : d3_layout_stackOrders[x];
-    return stack;
-  };
-
-  stack.offset = function(x) {
-    if (!arguments.length) return offset;
-    offset = typeof x === "function" ? x : d3_layout_stackOffsets[x];
-    return stack;
-  };
-
-  stack.x = function(z) {
-    if (!arguments.length) return x;
-    x = z;
-    return stack;
-  };
-
-  stack.y = function(z) {
-    if (!arguments.length) return y;
-    y = z;
-    return stack;
-  };
-
-  stack.out = function(z) {
-    if (!arguments.length) return out;
-    out = z;
-    return stack;
-  };
-
-  return stack;
-}
-
-function d3_layout_stackX(d) {
-  return d.x;
-}
-
-function d3_layout_stackY(d) {
-  return d.y;
-}
-
-function d3_layout_stackOut(d, y0, y) {
-  d.y0 = y0;
-  d.y = y;
-}
-
-var d3_layout_stackOrders = {
-
-  "inside-out": function(data) {
-    var n = data.length,
-        i,
-        j,
-        max = data.map(d3_layout_stackMaxIndex),
-        sums = data.map(d3_layout_stackReduceSum),
-        index = d3.range(n).sort(function(a, b) { return max[a] - max[b]; }),
-        top = 0,
-        bottom = 0,
-        tops = [],
-        bottoms = [];
-    for (i = 0; i < n; ++i) {
-      j = index[i];
-      if (top < bottom) {
-        top += sums[j];
-        tops.push(j);
-      } else {
-        bottom += sums[j];
-        bottoms.push(j);
-      }
-    }
-    return bottoms.reverse().concat(tops);
-  },
-
-  "reverse": function(data) {
-    return d3.range(data.length).reverse();
-  },
-
-  "default": function(data) {
-    return d3.range(data.length);
-  }
-
-};
-
-var d3_layout_stackOffsets = {
-
-  "silhouette": function(data) {
-    var n = data.length,
-        m = data[0].length,
-        sums = [],
-        max = 0,
-        i,
-        j,
-        o,
-        y0 = [];
-    for (j = 0; j < m; ++j) {
-      for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
-      if (o > max) max = o;
-      sums.push(o);
-    }
-    for (j = 0; j < m; ++j) {
-      y0[j] = (max - sums[j]) / 2;
-    }
-    return y0;
-  },
-
-  "wiggle": function(data) {
-    var n = data.length,
-        x = data[0],
-        m = x.length,
-        max = 0,
-        i,
-        j,
-        k,
-        s1,
-        s2,
-        s3,
-        dx,
-        o,
-        o0,
-        y0 = [];
-    y0[0] = o = o0 = 0;
-    for (j = 1; j < m; ++j) {
-      for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];
-      for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {
-        for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {
-          s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;
-        }
-        s2 += s3 * data[i][j][1];
-      }
-      y0[j] = o -= s1 ? s2 / s1 * dx : 0;
-      if (o < o0) o0 = o;
-    }
-    for (j = 0; j < m; ++j) y0[j] -= o0;
-    return y0;
-  },
-
-  "expand": function(data) {
-    var n = data.length,
-        m = data[0].length,
-        k = 1 / n,
-        i,
-        j,
-        o,
-        y0 = [];
-    for (j = 0; j < m; ++j) {
-      for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
-      if (o) for (i = 0; i < n; i++) data[i][j][1] /= o;
-      else for (i = 0; i < n; i++) data[i][j][1] = k;
-    }
-    for (j = 0; j < m; ++j) y0[j] = 0;
-    return y0;
-  },
-
-  "zero": function(data) {
-    var j = -1,
-        m = data[0].length,
-        y0 = [];
-    while (++j < m) y0[j] = 0;
-    return y0;
-  }
-
-};
-
-function d3_layout_stackMaxIndex(array) {
-  var i = 1,
-      j = 0,
-      v = array[0][1],
-      k,
-      n = array.length;
-  for (; i < n; ++i) {
-    if ((k = array[i][1]) > v) {
-      j = i;
-      v = k;
-    }
-  }
-  return j;
-}
-
-function d3_layout_stackReduceSum(d) {
-  return d.reduce(d3_layout_stackSum, 0);
-}
-
-function d3_layout_stackSum(p, d) {
-  return p + d[1];
-}
-d3.layout.histogram = function() {
-  var frequency = true,
-      valuer = Number,
-      ranger = d3_layout_histogramRange,
-      binner = d3_layout_histogramBinSturges;
-
-  function histogram(data, i) {
-    var bins = [],
-        values = data.map(valuer, this),
-        range = ranger.call(this, values, i),
-        thresholds = binner.call(this, range, values, i),
-        bin,
-        i = -1,
-        n = values.length,
-        m = thresholds.length - 1,
-        k = frequency ? 1 : 1 / n,
-        x;
-
-    // Initialize the bins.
-    while (++i < m) {
-      bin = bins[i] = [];
-      bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);
-      bin.y = 0;
-    }
-
-    // Fill the bins, ignoring values outside the range.
-    i = -1; while(++i < n) {
-      x = values[i];
-      if ((x >= range[0]) && (x <= range[1])) {
-        bin = bins[d3.bisect(thresholds, x, 1, m) - 1];
-        bin.y += k;
-        bin.push(data[i]);
-      }
-    }
-
-    return bins;
-  }
-
-  // Specifies how to extract a value from the associated data. The default
-  // value function is `Number`, which is equivalent to the identity function.
-  histogram.value = function(x) {
-    if (!arguments.length) return valuer;
-    valuer = x;
-    return histogram;
-  };
-
-  // Specifies the range of the histogram. Values outside the specified range
-  // will be ignored. The argument `x` may be specified either as a two-element
-  // array representing the minimum and maximum value of the range, or as a
-  // function that returns the range given the array of values and the current
-  // index `i`. The default range is the extent (minimum and maximum) of the
-  // values.
-  histogram.range = function(x) {
-    if (!arguments.length) return ranger;
-    ranger = d3.functor(x);
-    return histogram;
-  };
-
-  // Specifies how to bin values in the histogram. The argument `x` may be
-  // specified as a number, in which case the range of values will be split
-  // uniformly into the given number of bins. Or, `x` may be an array of
-  // threshold values, defining the bins; the specified array must contain the
-  // rightmost (upper) value, thus specifying n + 1 values for n bins. Or, `x`
-  // may be a function which is evaluated, being passed the range, the array of
-  // values, and the current index `i`, returning an array of thresholds. The
-  // default bin function will divide the values into uniform bins using
-  // Sturges' formula.
-  histogram.bins = function(x) {
-    if (!arguments.length) return binner;
-    binner = typeof x === "number"
-        ? function(range) { return d3_layout_histogramBinFixed(range, x); }
-        : d3.functor(x);
-    return histogram;
-  };
-
-  // Specifies whether the histogram's `y` value is a count (frequency) or a
-  // probability (density). The default value is true.
-  histogram.frequency = function(x) {
-    if (!arguments.length) return frequency;
-    frequency = !!x;
-    return histogram;
-  };
-
-  return histogram;
-};
-
-function d3_layout_histogramBinSturges(range, values) {
-  return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));
-}
-
-function d3_layout_histogramBinFixed(range, n) {
-  var x = -1,
-      b = +range[0],
-      m = (range[1] - b) / n,
-      f = [];
-  while (++x <= n) f[x] = m * x + b;
-  return f;
-}
-
-function d3_layout_histogramRange(values) {
-  return [d3.min(values), d3.max(values)];
-}
-d3.layout.hierarchy = function() {
-  var sort = d3_layout_hierarchySort,
-      children = d3_layout_hierarchyChildren,
-      value = d3_layout_hierarchyValue;
-
-  // Recursively compute the node depth and value.
-  // Also converts the data representation into a standard hierarchy structure.
-  function recurse(data, depth, nodes) {
-    var childs = children.call(hierarchy, data, depth),
-        node = d3_layout_hierarchyInline ? data : {data: data};
-    node.depth = depth;
-    nodes.push(node);
-    if (childs) {
-      var i = -1,
-          n = childs.length,
-          c = node.children = [],
-          v = 0,
-          j = depth + 1;
-      while (++i < n) {
-        d = recurse(childs[i], j, nodes);
-        d.parent = node;
-        c.push(d);
-        v += d.value;
-      }
-      if (sort) c.sort(sort);
-      if (value) node.value = v;
-    } else if (value) {
-      node.value = +value.call(hierarchy, data, depth) || 0;
-    }
-    return node;
-  }
-
-  // Recursively re-evaluates the node value.
-  function revalue(node, depth) {
-    var children = node.children,
-        v = 0;
-    if (children) {
-      var i = -1,
-          n = children.length,
-          j = depth + 1;
-      while (++i < n) v += revalue(children[i], j);
-    } else if (value) {
-      v = +value.call(hierarchy, d3_layout_hierarchyInline ? node : node.data, depth) || 0;
-    }
-    if (value) node.value = v;
-    return v;
-  }
-
-  function hierarchy(d) {
-    var nodes = [];
-    recurse(d, 0, nodes);
-    return nodes;
-  }
-
-  hierarchy.sort = function(x) {
-    if (!arguments.length) return sort;
-    sort = x;
-    return hierarchy;
-  };
-
-  hierarchy.children = function(x) {
-    if (!arguments.length) return children;
-    children = x;
-    return hierarchy;
-  };
-
-  hierarchy.value = function(x) {
-    if (!arguments.length) return value;
-    value = x;
-    return hierarchy;
-  };
-
-  // Re-evaluates the `value` property for the specified hierarchy.
-  hierarchy.revalue = function(root) {
-    revalue(root, 0);
-    return root;
-  };
-
-  return hierarchy;
-};
-
-// A method assignment helper for hierarchy subclasses.
-function d3_layout_hierarchyRebind(object, hierarchy) {
-  object.sort = d3.rebind(object, hierarchy.sort);
-  object.children = d3.rebind(object, hierarchy.children);
-  object.links = d3_layout_hierarchyLinks;
-  object.value = d3.rebind(object, hierarchy.value);
-
-  // If the new API is used, enabling inlining.
-  object.nodes = function(d) {
-    d3_layout_hierarchyInline = true;
-    return (object.nodes = object)(d);
-  };
-
-  return object;
-}
-
-function d3_layout_hierarchyChildren(d) {
-  return d.children;
-}
-
-function d3_layout_hierarchyValue(d) {
-  return d.value;
-}
-
-function d3_layout_hierarchySort(a, b) {
-  return b.value - a.value;
-}
-
-// Returns an array source+target objects for the specified nodes.
-function d3_layout_hierarchyLinks(nodes) {
-  return d3.merge(nodes.map(function(parent) {
-    return (parent.children || []).map(function(child) {
-      return {source: parent, target: child};
-    });
-  }));
-}
-
-// For backwards-compatibility, don't enable inlining by default.
-var d3_layout_hierarchyInline = false;
-d3.layout.pack = function() {
-  var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort),
-      size = [1, 1];
-
-  function pack(d, i) {
-    var nodes = hierarchy.call(this, d, i),
-        root = nodes[0];
-
-    // Recursively compute the layout.
-    root.x = 0;
-    root.y = 0;
-    d3_layout_packTree(root);
-
-    // Scale the layout to fit the requested size.
-    var w = size[0],
-        h = size[1],
-        k = 1 / Math.max(2 * root.r / w, 2 * root.r / h);
-    d3_layout_packTransform(root, w / 2, h / 2, k);
-
-    return nodes;
-  }
-
-  pack.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return pack;
-  };
-
-  return d3_layout_hierarchyRebind(pack, hierarchy);
-};
-
-function d3_layout_packSort(a, b) {
-  return a.value - b.value;
-}
-
-function d3_layout_packInsert(a, b) {
-  var c = a._pack_next;
-  a._pack_next = b;
-  b._pack_prev = a;
-  b._pack_next = c;
-  c._pack_prev = b;
-}
-
-function d3_layout_packSplice(a, b) {
-  a._pack_next = b;
-  b._pack_prev = a;
-}
-
-function d3_layout_packIntersects(a, b) {
-  var dx = b.x - a.x,
-      dy = b.y - a.y,
-      dr = a.r + b.r;
-  return (dr * dr - dx * dx - dy * dy) > .001; // within epsilon
-}
-
-function d3_layout_packCircle(nodes) {
-  var xMin = Infinity,
-      xMax = -Infinity,
-      yMin = Infinity,
-      yMax = -Infinity,
-      n = nodes.length,
-      a, b, c, j, k;
-
-  function bound(node) {
-    xMin = Math.min(node.x - node.r, xMin);
-    xMax = Math.max(node.x + node.r, xMax);
-    yMin = Math.min(node.y - node.r, yMin);
-    yMax = Math.max(node.y + node.r, yMax);
-  }
-
-  // Create node links.
-  nodes.forEach(d3_layout_packLink);
-
-  // Create first node.
-  a = nodes[0];
-  a.x = -a.r;
-  a.y = 0;
-  bound(a);
-
-  // Create second node.
-  if (n > 1) {
-    b = nodes[1];
-    b.x = b.r;
-    b.y = 0;
-    bound(b);
-
-    // Create third node and build chain.
-    if (n > 2) {
-      c = nodes[2];
-      d3_layout_packPlace(a, b, c);
-      bound(c);
-      d3_layout_packInsert(a, c);
-      a._pack_prev = c;
-      d3_layout_packInsert(c, b);
-      b = a._pack_next;
-
-      // Now iterate through the rest.
-      for (var i = 3; i < n; i++) {
-        d3_layout_packPlace(a, b, c = nodes[i]);
-
-        // Search for the closest intersection.
-        var isect = 0, s1 = 1, s2 = 1;
-        for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {
-          if (d3_layout_packIntersects(j, c)) {
-            isect = 1;
-            break;
-          }
-        }
-        if (isect == 1) {
-          for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {
-            if (d3_layout_packIntersects(k, c)) {
-              if (s2 < s1) {
-                isect = -1;
-                j = k;
-              }
-              break;
-            }
-          }
-        }
-
-        // Update node chain.
-        if (isect == 0) {
-          d3_layout_packInsert(a, c);
-          b = c;
-          bound(c);
-        } else if (isect > 0) {
-          d3_layout_packSplice(a, j);
-          b = j;
-          i--;
-        } else { // isect < 0
-          d3_layout_packSplice(j, b);
-          a = j;
-          i--;
-        }
-      }
-    }
-  }
-
-  // Re-center the circles and return the encompassing radius.
-  var cx = (xMin + xMax) / 2,
-      cy = (yMin + yMax) / 2,
-      cr = 0;
-  for (var i = 0; i < n; i++) {
-    var node = nodes[i];
-    node.x -= cx;
-    node.y -= cy;
-    cr = Math.max(cr, node.r + Math.sqrt(node.x * node.x + node.y * node.y));
-  }
-
-  // Remove node links.
-  nodes.forEach(d3_layout_packUnlink);
-
-  return cr;
-}
-
-function d3_layout_packLink(node) {
-  node._pack_next = node._pack_prev = node;
-}
-
-function d3_layout_packUnlink(node) {
-  delete node._pack_next;
-  delete node._pack_prev;
-}
-
-function d3_layout_packTree(node) {
-  var children = node.children;
-  if (children) {
-    children.forEach(d3_layout_packTree);
-    node.r = d3_layout_packCircle(children);
-  } else {
-    node.r = Math.sqrt(node.value);
-  }
-}
-
-function d3_layout_packTransform(node, x, y, k) {
-  var children = node.children;
-  node.x = (x += k * node.x);
-  node.y = (y += k * node.y);
-  node.r *= k;
-  if (children) {
-    var i = -1, n = children.length;
-    while (++i < n) d3_layout_packTransform(children[i], x, y, k);
-  }
-}
-
-function d3_layout_packPlace(a, b, c) {
-  var da = b.r + c.r,
-      db = a.r + c.r,
-      dx = b.x - a.x,
-      dy = b.y - a.y,
-      dc = Math.sqrt(dx * dx + dy * dy),
-      cos = (db * db + dc * dc - da * da) / (2 * db * dc),
-      theta = Math.acos(cos),
-      x = cos * db,
-      h = Math.sin(theta) * db;
-  dx /= dc;
-  dy /= dc;
-  c.x = a.x + x * dx + h * dy;
-  c.y = a.y + x * dy - h * dx;
-}
-// Implements a hierarchical layout using the cluster (or dendogram) algorithm.
-d3.layout.cluster = function() {
-  var hierarchy = d3.layout.hierarchy().sort(null).value(null),
-      separation = d3_layout_treeSeparation,
-      size = [1, 1]; // width, height
-
-  function cluster(d, i) {
-    var nodes = hierarchy.call(this, d, i),
-        root = nodes[0],
-        previousNode,
-        x = 0,
-        kx,
-        ky;
-
-    // First walk, computing the initial x & y values.
-    d3_layout_treeVisitAfter(root, function(node) {
-      if (node.children) {
-        node.x = d3_layout_clusterX(node.children);
-        node.y = d3_layout_clusterY(node.children);
-      } else {
-        node.x = previousNode ? x += separation(node, previousNode) : 0;
-        node.y = 0;
-        previousNode = node;
-      }
-    });
-
-    // Compute the left-most, right-most, and depth-most nodes for extents.
-    var left = d3_layout_clusterLeft(root),
-        right = d3_layout_clusterRight(root),
-        x0 = left.x - separation(left, right) / 2,
-        x1 = right.x + separation(right, left) / 2;
-
-    // Second walk, normalizing x & y to the desired size.
-    d3_layout_treeVisitAfter(root, function(node) {
-      node.x = (node.x - x0) / (x1 - x0) * size[0];
-      node.y = (1 - node.y / root.y) * size[1];
-    });
-
-    return nodes;
-  }
-
-  cluster.separation = function(x) {
-    if (!arguments.length) return separation;
-    separation = x;
-    return cluster;
-  };
-
-  cluster.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return cluster;
-  };
-
-  return d3_layout_hierarchyRebind(cluster, hierarchy);
-};
-
-function d3_layout_clusterY(children) {
-  return 1 + d3.max(children, function(child) {
-    return child.y;
-  });
-}
-
-function d3_layout_clusterX(children) {
-  return children.reduce(function(x, child) {
-    return x + child.x;
-  }, 0) / children.length;
-}
-
-function d3_layout_clusterLeft(node) {
-  var children = node.children;
-  return children ? d3_layout_clusterLeft(children[0]) : node;
-}
-
-function d3_layout_clusterRight(node) {
-  var children = node.children;
-  return children ? d3_layout_clusterRight(children[children.length - 1]) : node;
-}
-// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm
-d3.layout.tree = function() {
-  var hierarchy = d3.layout.hierarchy().sort(null).value(null),
-      separation = d3_layout_treeSeparation,
-      size = [1, 1]; // width, height
-
-  function tree(d, i) {
-    var nodes = hierarchy.call(this, d, i),
-        root = nodes[0];
-
-    function firstWalk(node, previousSibling) {
-      var children = node.children,
-          layout = node._tree;
-      if (children && (n = children.length)) {
-        var n,
-            firstChild = children[0],
-            previousChild,
-            ancestor = firstChild,
-            child,
-            i = -1;
-        while (++i < n) {
-          child = children[i];
-          firstWalk(child, previousChild);
-          ancestor = apportion(child, previousChild, ancestor);
-          previousChild = child;
-        }
-        d3_layout_treeShift(node);
-        var midpoint = .5 * (firstChild._tree.prelim + child._tree.prelim);
-        if (previousSibling) {
-          layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
-          layout.mod = layout.prelim - midpoint;
-        } else {
-          layout.prelim = midpoint;
-        }
-      } else {
-        if (previousSibling) {
-          layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
-        }
-      }
-    }
-
-    function secondWalk(node, x) {
-      node.x = node._tree.prelim + x;
-      var children = node.children;
-      if (children) {
-        var i = -1,
-            n = children.length;
-        x += node._tree.mod;
-        while (++i < n) {
-          secondWalk(children[i], x);
-        }
-      }
-    }
-
-    function apportion(node, previousSibling, ancestor) {
-      if (previousSibling) {
-        var vip = node,
-            vop = node,
-            vim = previousSibling,
-            vom = node.parent.children[0],
-            sip = vip._tree.mod,
-            sop = vop._tree.mod,
-            sim = vim._tree.mod,
-            som = vom._tree.mod,
-            shift;
-        while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {
-          vom = d3_layout_treeLeft(vom);
-          vop = d3_layout_treeRight(vop);
-          vop._tree.ancestor = node;
-          shift = vim._tree.prelim + sim - vip._tree.prelim - sip + separation(vim, vip);
-          if (shift > 0) {
-            d3_layout_treeMove(d3_layout_treeAncestor(vim, node, ancestor), node, shift);
-            sip += shift;
-            sop += shift;
-          }
-          sim += vim._tree.mod;
-          sip += vip._tree.mod;
-          som += vom._tree.mod;
-          sop += vop._tree.mod;
-        }
-        if (vim && !d3_layout_treeRight(vop)) {
-          vop._tree.thread = vim;
-          vop._tree.mod += sim - sop;
-        }
-        if (vip && !d3_layout_treeLeft(vom)) {
-          vom._tree.thread = vip;
-          vom._tree.mod += sip - som;
-          ancestor = node;
-        }
-      }
-      return ancestor;
-    }
-
-    // Initialize temporary layout variables.
-    d3_layout_treeVisitAfter(root, function(node, previousSibling) {
-      node._tree = {
-        ancestor: node,
-        prelim: 0,
-        mod: 0,
-        change: 0,
-        shift: 0,
-        number: previousSibling ? previousSibling._tree.number + 1 : 0
-      };
-    });
-
-    // Compute the layout using Buchheim et al.'s algorithm.
-    firstWalk(root);
-    secondWalk(root, -root._tree.prelim);
-
-    // Compute the left-most, right-most, and depth-most nodes for extents.
-    var left = d3_layout_treeSearch(root, d3_layout_treeLeftmost),
-        right = d3_layout_treeSearch(root, d3_layout_treeRightmost),
-        deep = d3_layout_treeSearch(root, d3_layout_treeDeepest),
-        x0 = left.x - separation(left, right) / 2,
-        x1 = right.x + separation(right, left) / 2,
-        y1 = deep.depth || 1;
-
-    // Clear temporary layout variables; transform x and y.
-    d3_layout_treeVisitAfter(root, function(node) {
-      node.x = (node.x - x0) / (x1 - x0) * size[0];
-      node.y = node.depth / y1 * size[1];
-      delete node._tree;
-    });
-
-    return nodes;
-  }
-
-  tree.separation = function(x) {
-    if (!arguments.length) return separation;
-    separation = x;
-    return tree;
-  };
-
-  tree.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return tree;
-  };
-
-  return d3_layout_hierarchyRebind(tree, hierarchy);
-};
-
-function d3_layout_treeSeparation(a, b) {
-  return a.parent == b.parent ? 1 : 2;
-}
-
-// function d3_layout_treeSeparationRadial(a, b) {
-//   return (a.parent == b.parent ? 1 : 2) / a.depth;
-// }
-
-function d3_layout_treeLeft(node) {
-  return node.children ? node.children[0] : node._tree.thread;
-}
-
-function d3_layout_treeRight(node) {
-  return node.children ? node.children[node.children.length - 1] : node._tree.thread;
-}
-
-function d3_layout_treeSearch(node, compare) {
-  var children = node.children;
-  if (children) {
-    var child,
-        n = children.length,
-        i = -1;
-    while (++i < n) {
-      if (compare(child = d3_layout_treeSearch(children[i], compare), node) > 0) {
-        node = child;
-      }
-    }
-  }
-  return node;
-}
-
-function d3_layout_treeRightmost(a, b) {
-  return a.x - b.x;
-}
-
-function d3_layout_treeLeftmost(a, b) {
-  return b.x - a.x;
-}
-
-function d3_layout_treeDeepest(a, b) {
-  return a.depth - b.depth;
-}
-
-function d3_layout_treeVisitAfter(node, callback) {
-  function visit(node, previousSibling) {
-    var children = node.children;
-    if (children) {
-      var child,
-          previousChild = null,
-          i = -1,
-          n = children.length;
-      while (++i < n) {
-        child = children[i];
-        visit(child, previousChild);
-        previousChild = child;
-      }
-    }
-    callback(node, previousSibling);
-  }
-  visit(node, null);
-}
-
-function d3_layout_treeShift(node) {
-  var shift = 0,
-      change = 0,
-      children = node.children,
-      i = children.length,
-      child;
-  while (--i >= 0) {
-    child = children[i]._tree;
-    child.prelim += shift;
-    child.mod += shift;
-    shift += child.shift + (change += child.change);
-  }
-}
-
-function d3_layout_treeMove(ancestor, node, shift) {
-  ancestor = ancestor._tree;
-  node = node._tree;
-  var change = shift / (node.number - ancestor.number);
-  ancestor.change += change;
-  node.change -= change;
-  node.shift += shift;
-  node.prelim += shift;
-  node.mod += shift;
-}
-
-function d3_layout_treeAncestor(vim, node, ancestor) {
-  return vim._tree.ancestor.parent == node.parent
-      ? vim._tree.ancestor
-      : ancestor;
-}
-// Squarified Treemaps by Mark Bruls, Kees Huizing, and Jarke J. van Wijk
-// Modified to support a target aspect ratio by Jeff Heer
-d3.layout.treemap = function() {
-  var hierarchy = d3.layout.hierarchy(),
-      round = Math.round,
-      size = [1, 1], // width, height
-      padding = null,
-      pad = d3_layout_treemapPadNull,
-      sticky = false,
-      stickies,
-      ratio = 0.5 * (1 + Math.sqrt(5)); // golden ratio
-
-  // Compute the area for each child based on value & scale.
-  function scale(children, k) {
-    var i = -1,
-        n = children.length,
-        child,
-        area;
-    while (++i < n) {
-      area = (child = children[i]).value * (k < 0 ? 0 : k);
-      child.area = isNaN(area) || area <= 0 ? 0 : area;
-    }
-  }
-
-  // Recursively arranges the specified node's children into squarified rows.
-  function squarify(node) {
-    if (!node.children) return;
-    var rect = pad(node),
-        row = [],
-        children = node.children.slice(), // copy-on-write
-        child,
-        best = Infinity, // the best row score so far
-        score, // the current row score
-        u = Math.min(rect.dx, rect.dy), // initial orientation
-        n;
-    scale(children, rect.dx * rect.dy / node.value);
-    row.area = 0;
-    while ((n = children.length) > 0) {
-      row.push(child = children[n - 1]);
-      row.area += child.area;
-      if ((score = worst(row, u)) <= best) { // continue with this orientation
-        children.pop();
-        best = score;
-      } else { // abort, and try a different orientation
-        row.area -= row.pop().area;
-        position(row, u, rect, false);
-        u = Math.min(rect.dx, rect.dy);
-        row.length = row.area = 0;
-        best = Infinity;
-      }
-    }
-    if (row.length) {
-      position(row, u, rect, true);
-      row.length = row.area = 0;
-    }
-    node.children.forEach(squarify);
-  }
-
-  // Recursively resizes the specified node's children into existing rows.
-  // Preserves the existing layout!
-  function stickify(node) {
-    if (!node.children) return;
-    var rect = pad(node),
-        children = node.children.slice(), // copy-on-write
-        child,
-        row = [];
-    scale(children, rect.dx * rect.dy / node.value);
-    row.area = 0;
-    while (child = children.pop()) {
-      row.push(child);
-      row.area += child.area;
-      if (child.z != null) {
-        position(row, child.z ? rect.dx : rect.dy, rect, !children.length);
-        row.length = row.area = 0;
-      }
-    }
-    node.children.forEach(stickify);
-  }
-
-  // Computes the score for the specified row, as the worst aspect ratio.
-  function worst(row, u) {
-    var s = row.area,
-        r,
-        rmax = 0,
-        rmin = Infinity,
-        i = -1,
-        n = row.length;
-    while (++i < n) {
-      if (!(r = row[i].area)) continue;
-      if (r < rmin) rmin = r;
-      if (r > rmax) rmax = r;
-    }
-    s *= s;
-    u *= u;
-    return s
-        ? Math.max((u * rmax * ratio) / s, s / (u * rmin * ratio))
-        : Infinity;
-  }
-
-  // Positions the specified row of nodes. Modifies `rect`.
-  function position(row, u, rect, flush) {
-    var i = -1,
-        n = row.length,
-        x = rect.x,
-        y = rect.y,
-        v = u ? round(row.area / u) : 0,
-        o;
-    if (u == rect.dx) { // horizontal subdivision
-      if (flush || v > rect.dy) v = v ? rect.dy : 0; // over+underflow
-      while (++i < n) {
-        o = row[i];
-        o.x = x;
-        o.y = y;
-        o.dy = v;
-        x += o.dx = v ? round(o.area / v) : 0;
-      }
-      o.z = true;
-      o.dx += rect.x + rect.dx - x; // rounding error
-      rect.y += v;
-      rect.dy -= v;
-    } else { // vertical subdivision
-      if (flush || v > rect.dx) v = v ? rect.dx : 0; // over+underflow
-      while (++i < n) {
-        o = row[i];
-        o.x = x;
-        o.y = y;
-        o.dx = v;
-        y += o.dy = v ? round(o.area / v) : 0;
-      }
-      o.z = false;
-      o.dy += rect.y + rect.dy - y; // rounding error
-      rect.x += v;
-      rect.dx -= v;
-    }
-  }
-
-  function treemap(d) {
-    var nodes = stickies || hierarchy(d),
-        root = nodes[0];
-    root.x = 0;
-    root.y = 0;
-    root.dx = size[0];
-    root.dy = size[1];
-    if (stickies) hierarchy.revalue(root);
-    scale([root], root.dx * root.dy / root.value);
-    (stickies ? stickify : squarify)(root);
-    if (sticky) stickies = nodes;
-    return nodes;
-  }
-
-  treemap.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return treemap;
-  };
-
-  treemap.padding = function(x) {
-    if (!arguments.length) return padding;
-
-    function padFunction(node) {
-      var p = x.call(treemap, node, node.depth);
-      return p == null
-          ? d3_layout_treemapPadNull(node)
-          : d3_layout_treemapPad(node, typeof p === "number" ? [p, p, p, p] : p);
-    }
-
-    function padConstant(node) {
-      return d3_layout_treemapPad(node, x);
-    }
-
-    var type;
-    pad = (padding = x) == null ? d3_layout_treemapPadNull
-        : (type = typeof x) === "function" ? padFunction
-        : type === "number" ? (x = [x, x, x, x], padConstant)
-        : padConstant;
-    return treemap;
-  };
-
-  treemap.round = function(x) {
-    if (!arguments.length) return round != Number;
-    round = x ? Math.round : Number;
-    return treemap;
-  };
-
-  treemap.sticky = function(x) {
-    if (!arguments.length) return sticky;
-    sticky = x;
-    stickies = null;
-    return treemap;
-  };
-
-  treemap.ratio = function(x) {
-    if (!arguments.length) return ratio;
-    ratio = x;
-    return treemap;
-  };
-
-  return d3_layout_hierarchyRebind(treemap, hierarchy);
-};
-
-function d3_layout_treemapPadNull(node) {
-  return {x: node.x, y: node.y, dx: node.dx, dy: node.dy};
-}
-
-function d3_layout_treemapPad(node, padding) {
-  var x = node.x + padding[3],
-      y = node.y + padding[0],
-      dx = node.dx - padding[1] - padding[3],
-      dy = node.dy - padding[0] - padding[2];
-  if (dx < 0) { x += dx / 2; dx = 0; }
-  if (dy < 0) { y += dy / 2; dy = 0; }
-  return {x: x, y: y, dx: dx, dy: dy};
-}
-})();
diff --git a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/d3.time.js b/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/d3.time.js
deleted file mode 100644
index e1c0831c88e..00000000000
--- a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/d3.time.js
+++ /dev/null
@@ -1,692 +0,0 @@
-(function(){d3.time = {};
-
-var d3_time = Date;
-d3.time.format = function(template) {
-  var n = template.length;
-
-  function format(date) {
-    var string = [],
-        i = -1,
-        j = 0,
-        c,
-        f;
-    while (++i < n) {
-      if (template.charCodeAt(i) == 37) {
-        string.push(
-            template.substring(j, i),
-            (f = d3_time_formats[c = template.charAt(++i)])
-            ? f(date) : c);
-        j = i + 1;
-      }
-    }
-    string.push(template.substring(j, i));
-    return string.join("");
-  }
-
-  format.parse = function(string) {
-    var date = new d3_time(1900, 0, 1),
-        i = d3_time_parse(date, template, string, 0);
-    if (i != string.length) return null;
-    if (date.hour12) {
-      var hours = date.getHours() % 12;
-      date.setHours(date.hour12pm ? hours + 12 : hours);
-    }
-    delete date.hour12;
-    delete date.hour12pm;
-    return date;
-  };
-
-  format.toString = function() {
-    return template;
-  };
-
-  return format;
-};
-
-function d3_time_parse(date, template, string, j) {
-  var c,
-      p,
-      i = 0,
-      n = template.length,
-      m = string.length;
-  while (i < n) {
-    if (j >= m) return -1;
-    c = template.charCodeAt(i++);
-    if (c == 37) {
-      p = d3_time_parsers[template.charAt(i++)];
-      if (!p || ((j = p(date, string, j)) < 0)) return -1;
-    } else if (c != string.charCodeAt(j++)) {
-      return -1;
-    }
-  }
-  return j;
-}
-
-var d3_time_zfill2 = d3.format("02d"),
-    d3_time_zfill3 = d3.format("03d"),
-    d3_time_zfill4 = d3.format("04d"),
-    d3_time_sfill2 = d3.format("2d");
-
-var d3_time_formats = {
-  a: function(d) { return d3_time_weekdays[d.getDay()].substring(0, 3); },
-  A: function(d) { return d3_time_weekdays[d.getDay()]; },
-  b: function(d) { return d3_time_months[d.getMonth()].substring(0, 3); },
-  B: function(d) { return d3_time_months[d.getMonth()]; },
-  c: d3.time.format("%a %b %e %H:%M:%S %Y"),
-  d: function(d) { return d3_time_zfill2(d.getDate()); },
-  e: function(d) { return d3_time_sfill2(d.getDate()); },
-  H: function(d) { return d3_time_zfill2(d.getHours()); },
-  I: function(d) { return d3_time_zfill2(d.getHours() % 12 || 12); },
-  j: d3_time_dayOfYear,
-  L: function(d) { return d3_time_zfill3(d.getMilliseconds()); },
-  m: function(d) { return d3_time_zfill2(d.getMonth() + 1); },
-  M: function(d) { return d3_time_zfill2(d.getMinutes()); },
-  p: function(d) { return d.getHours() >= 12 ? "PM" : "AM"; },
-  S: function(d) { return d3_time_zfill2(d.getSeconds()); },
-  U: d3_time_weekNumberSunday,
-  w: function(d) { return d.getDay(); },
-  W: d3_time_weekNumberMonday,
-  x: d3.time.format("%m/%d/%y"),
-  X: d3.time.format("%H:%M:%S"),
-  y: function(d) { return d3_time_zfill2(d.getFullYear() % 100); },
-  Y: function(d) { return d3_time_zfill4(d.getFullYear() % 10000); },
-  Z: d3_time_zone,
-  "%": function(d) { return "%"; }
-};
-
-var d3_time_parsers = {
-  a: d3_time_parseWeekdayAbbrev,
-  A: d3_time_parseWeekday,
-  b: d3_time_parseMonthAbbrev,
-  B: d3_time_parseMonth,
-  c: d3_time_parseLocaleFull,
-  d: d3_time_parseDay,
-  e: d3_time_parseDay,
-  H: d3_time_parseHour24,
-  I: d3_time_parseHour12,
-  // j: function(d, s, i) { /*TODO day of year [001,366] */ return i; },
-  L: d3_time_parseMilliseconds,
-  m: d3_time_parseMonthNumber,
-  M: d3_time_parseMinutes,
-  p: d3_time_parseAmPm,
-  S: d3_time_parseSeconds,
-  // U: function(d, s, i) { /*TODO week number (sunday) [00,53] */ return i; },
-  // w: function(d, s, i) { /*TODO weekday [0,6] */ return i; },
-  // W: function(d, s, i) { /*TODO week number (monday) [00,53] */ return i; },
-  x: d3_time_parseLocaleDate,
-  X: d3_time_parseLocaleTime,
-  y: d3_time_parseYear,
-  Y: d3_time_parseFullYear
-  // ,
-  // Z: function(d, s, i) { /*TODO time zone */ return i; },
-  // "%": function(d, s, i) { /*TODO literal % */ return i; }
-};
-
-// Note: weekday is validated, but does not set the date.
-function d3_time_parseWeekdayAbbrev(date, string, i) {
-  return string.substring(i, i += 3).toLowerCase() in d3_time_weekdayAbbrevLookup ? i : -1;
-}
-
-var d3_time_weekdayAbbrevLookup = {
-  sun: 3,
-  mon: 3,
-  tue: 3,
-  wed: 3,
-  thu: 3,
-  fri: 3,
-  sat: 3
-};
-
-// Note: weekday is validated, but does not set the date.
-function d3_time_parseWeekday(date, string, i) {
-  d3_time_weekdayRe.lastIndex = 0;
-  var n = d3_time_weekdayRe.exec(string.substring(i, i + 10));
-  return n ? i += n[0].length : -1;
-}
-
-var d3_time_weekdayRe = /^(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)/ig;
-
-var d3_time_weekdays = [
-  "Sunday",
-  "Monday",
-  "Tuesday",
-  "Wednesday",
-  "Thursday",
-  "Friday",
-  "Saturday"
-];
-
-function d3_time_parseMonthAbbrev(date, string, i) {
-  var n = d3_time_monthAbbrevLookup[string.substring(i, i += 3).toLowerCase()];
-  return n == null ? -1 : (date.setMonth(n), i);
-}
-
-var d3_time_monthAbbrevLookup = {
-  jan: 0,
-  feb: 1,
-  mar: 2,
-  apr: 3,
-  may: 4,
-  jun: 5,
-  jul: 6,
-  aug: 7,
-  sep: 8,
-  oct: 9,
-  nov: 10,
-  dec: 11
-};
-
-function d3_time_parseMonth(date, string, i) {
-  d3_time_monthRe.lastIndex = 0;
-  var n = d3_time_monthRe.exec(string.substring(i, i + 12));
-  return n ? (date.setMonth(d3_time_monthLookup[n[0].toLowerCase()]), i += n[0].length) : -1;
-}
-
-var d3_time_monthRe = /^(?:January|February|March|April|May|June|July|August|September|October|November|December)/ig;
-
-var d3_time_monthLookup = {
-  january: 0,
-  february: 1,
-  march: 2,
-  april: 3,
-  may: 4,
-  june: 5,
-  july: 6,
-  august: 7,
-  september: 8,
-  october: 9,
-  november: 10,
-  december: 11
-};
-
-var d3_time_months = [
-  "January",
-  "February",
-  "March",
-  "April",
-  "May",
-  "June",
-  "July",
-  "August",
-  "September",
-  "October",
-  "November",
-  "December"
-];
-
-function d3_time_parseLocaleFull(date, string, i) {
-  return d3_time_parse(date, d3_time_formats.c.toString(), string, i);
-}
-
-function d3_time_parseLocaleDate(date, string, i) {
-  return d3_time_parse(date, d3_time_formats.x.toString(), string, i);
-}
-
-function d3_time_parseLocaleTime(date, string, i) {
-  return d3_time_parse(date, d3_time_formats.X.toString(), string, i);
-}
-
-function d3_time_parseFullYear(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 4));
-  return n ? (date.setFullYear(n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_parseYear(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setFullYear(d3_time_century() + +n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_century() {
-  return ~~(new Date().getFullYear() / 1000) * 1000;
-}
-
-function d3_time_parseMonthNumber(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setMonth(n[0] - 1), i += n[0].length) : -1;
-}
-
-function d3_time_parseDay(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setDate(+n[0]), i += n[0].length) : -1;
-}
-
-// Note: we don't validate that the hour is in the range [0,23].
-function d3_time_parseHour24(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setHours(+n[0]), i += n[0].length) : -1;
-}
-
-// Note: we don't validate that the hour is in the range [1,12].
-function d3_time_parseHour12(date, string, i) {
-  date.hour12 = true;
-  return d3_time_parseHour24(date, string, i);
-}
-
-function d3_time_parseMinutes(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setMinutes(+n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_parseSeconds(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setSeconds(+n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_parseMilliseconds(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 3));
-  return n ? (date.setMilliseconds(+n[0]), i += n[0].length) : -1;
-}
-
-// Note: we don't look at the next directive.
-var d3_time_numberRe = /\s*\d+/;
-
-function d3_time_parseAmPm(date, string, i) {
-  var n = d3_time_amPmLookup[string.substring(i, i += 2).toLowerCase()];
-  return n == null ? -1 : (date.hour12pm = n, i);
-}
-
-var d3_time_amPmLookup = {
-  am: 0,
-  pm: 1
-};
-
-function d3_time_year(d) {
-  return new d3_time(d.getFullYear(), 0, 1);
-}
-
-function d3_time_daysElapsed(d0, d1) {
-  return ~~((d1 - d0) / 864e5 - (d1.getTimezoneOffset() - d0.getTimezoneOffset()) / 1440);
-}
-
-function d3_time_dayOfYear(d) {
-  return d3_time_zfill3(1 + d3_time_daysElapsed(d3_time_year(d), d));
-}
-
-function d3_time_weekNumberSunday(d) {
-  var d0 = d3_time_year(d);
-  return d3_time_zfill2(~~((d3_time_daysElapsed(d0, d) + d0.getDay()) / 7));
-}
-
-function d3_time_weekNumberMonday(d) {
-  var d0 = d3_time_year(d);
-  return d3_time_zfill2(~~((d3_time_daysElapsed(d0, d) + (d0.getDay() + 6) % 7) / 7));
-}
-
-// TODO table of time zone offset names?
-function d3_time_zone(d) {
-  var z = d.getTimezoneOffset(),
-      zs = z > 0 ? "-" : "+",
-      zh = ~~(Math.abs(z) / 60),
-      zm = Math.abs(z) % 60;
-  return zs + d3_time_zfill2(zh) + d3_time_zfill2(zm);
-}
-d3.time.format.utc = function(template) {
-  var local = d3.time.format(template);
-
-  function format(date) {
-    try {
-      d3_time = d3_time_format_utc;
-      var utc = new d3_time();
-      utc._ = date;
-      return local(utc);
-    } finally {
-      d3_time = Date;
-    }
-  }
-
-  format.parse = function(string) {
-    try {
-      d3_time = d3_time_format_utc;
-      var date = local.parse(string);
-      return date && date._;
-    } finally {
-      d3_time = Date;
-    }
-  };
-
-  format.toString = local.toString;
-
-  return format;
-};
-
-function d3_time_format_utc() {
-  this._ = new Date(Date.UTC.apply(this, arguments));
-}
-
-d3_time_format_utc.prototype = {
-  getDate: function() { return this._.getUTCDate(); },
-  getDay: function() { return this._.getUTCDay(); },
-  getFullYear: function() { return this._.getUTCFullYear(); },
-  getHours: function() { return this._.getUTCHours(); },
-  getMilliseconds: function() { return this._.getUTCMilliseconds(); },
-  getMinutes: function() { return this._.getUTCMinutes(); },
-  getMonth: function() { return this._.getUTCMonth(); },
-  getSeconds: function() { return this._.getUTCSeconds(); },
-  getTimezoneOffset: function() { return 0; },
-  valueOf: function() { return this._.getTime(); },
-  setDate: function(x) { this._.setUTCDate(x); },
-  setDay: function(x) { this._.setUTCDay(x); },
-  setFullYear: function(x) { this._.setUTCFullYear(x); },
-  setHours: function(x) { this._.setUTCHours(x); },
-  setMilliseconds: function(x) { this._.setUTCMilliseconds(x); },
-  setMinutes: function(x) { this._.setUTCMinutes(x); },
-  setMonth: function(x) { this._.setUTCMonth(x); },
-  setSeconds: function(x) { this._.setUTCSeconds(x); }
-};
-var d3_time_formatIso = d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ");
-
-d3.time.format.iso = Date.prototype.toISOString ? d3_time_formatIsoNative : d3_time_formatIso;
-
-function d3_time_formatIsoNative(date) {
-  return date.toISOString();
-}
-
-d3_time_formatIsoNative.parse = function(string) {
-  return new Date(string);
-};
-
-d3_time_formatIsoNative.toString = d3_time_formatIso.toString;
-function d3_time_range(floor, step, number) {
-  return function(t0, t1, dt) {
-    var time = floor(t0), times = [];
-    if (time < t0) step(time);
-    if (dt > 1) {
-      while (time < t1) {
-        var date = new Date(+time);
-        if (!(number(date) % dt)) times.push(date);
-        step(time);
-      }
-    } else {
-      while (time < t1) times.push(new Date(+time)), step(time);
-    }
-    return times;
-  };
-}
-d3.time.second = function(date) {
-  return new Date(~~(date / 1e3) * 1e3);
-};
-
-d3.time.second.utc = d3.time.second;
-d3.time.seconds = d3_time_range(d3.time.second, function(date) {
-  date.setTime(date.getTime() + 1e3);
-}, function(date) {
-  return date.getSeconds();
-});
-
-d3.time.seconds.utc = d3.time.seconds;
-d3.time.minute = function(date) {
-  return new Date(~~(date / 6e4) * 6e4);
-};
-
-d3.time.minute.utc = d3.time.minute;d3.time.minutes = d3_time_range(d3.time.minute, d3_time_minutesStep, function(date) {
-  return date.getMinutes();
-});
-
-d3.time.minutes.utc = d3_time_range(d3.time.minute, d3_time_minutesStep, function(date) {
-  return date.getUTCMinutes();
-});
-
-function d3_time_minutesStep(date) {
-  date.setTime(date.getTime() + 6e4); // assumes no leap seconds
-}
-d3.time.hour = function(date) {
-  var offset = date.getTimezoneOffset() / 60;
-  return new Date((~~(date / 36e5 - offset) + offset) * 36e5);
-};
-
-d3.time.hour.utc = function(date) {
-  return new Date(~~(date / 36e5) * 36e5);
-};
-d3.time.hours = d3_time_range(d3.time.hour, d3_time_hoursStep, function(date) {
-  return date.getHours();
-});
-
-d3.time.hours.utc = d3_time_range(d3.time.hour.utc, d3_time_hoursStep, function(date) {
-  return date.getUTCHours();
-});
-
-function d3_time_hoursStep(date) {
-  date.setTime(date.getTime() + 36e5);
-}
-d3.time.day = function(date) {
-  return new Date(date.getFullYear(), date.getMonth(), date.getDate());
-};
-
-d3.time.day.utc = function(date) {
-  return new Date(~~(date / 864e5) * 864e5);
-};
-d3.time.days = d3_time_range(d3.time.day, function(date) {
-  date.setDate(date.getDate() + 1);
-}, function(date) {
-  return date.getDate() - 1;
-});
-
-d3.time.days.utc = d3_time_range(d3.time.day.utc, function(date) {
-  date.setUTCDate(date.getUTCDate() + 1);
-}, function(date) {
-  return date.getUTCDate() - 1;
-});
-d3.time.week = function(date) {
-  (date = d3.time.day(date)).setDate(date.getDate() - date.getDay());
-  return date;
-};
-
-d3.time.week.utc = function(date) {
-  (date = d3.time.day.utc(date)).setUTCDate(date.getUTCDate() - date.getUTCDay());
-  return date;
-};
-d3.time.weeks = d3_time_range(d3.time.week, function(date) {
-  date.setDate(date.getDate() + 7);
-}, function(date) {
-  return ~~((date - new Date(date.getFullYear(), 0, 1)) / 6048e5);
-});
-
-d3.time.weeks.utc = d3_time_range(d3.time.week.utc, function(date) {
-  date.setUTCDate(date.getUTCDate() + 7);
-}, function(date) {
-  return ~~((date - Date.UTC(date.getUTCFullYear(), 0, 1)) / 6048e5);
-});
-d3.time.month = function(date) {
-  return new Date(date.getFullYear(), date.getMonth(), 1);
-};
-
-d3.time.month.utc = function(date) {
-  return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), 1));
-};
-d3.time.months = d3_time_range(d3.time.month, function(date) {
-  date.setMonth(date.getMonth() + 1);
-}, function(date) {
-  return date.getMonth();
-});
-
-d3.time.months.utc = d3_time_range(d3.time.month.utc, function(date) {
-  date.setUTCMonth(date.getUTCMonth() + 1);
-}, function(date) {
-  return date.getUTCMonth();
-});
-d3.time.year = function(date) {
-  return new Date(date.getFullYear(), 0, 1);
-};
-
-d3.time.year.utc = function(date) {
-  return new Date(Date.UTC(date.getUTCFullYear(), 0, 1));
-};
-d3.time.years = d3_time_range(d3.time.year, function(date) {
-  date.setFullYear(date.getFullYear() + 1);
-}, function(date) {
-  return date.getFullYear();
-});
-
-d3.time.years.utc = d3_time_range(d3.time.year.utc, function(date) {
-  date.setUTCFullYear(date.getUTCFullYear() + 1);
-}, function(date) {
-  return date.getUTCFullYear();
-});
-// TODO nice
-function d3_time_scale(linear, methods, format) {
-
-  function scale(x) {
-    return linear(x);
-  }
-
-  scale.invert = function(x) {
-    return d3_time_scaleDate(linear.invert(x));
-  };
-
-  scale.domain = function(x) {
-    if (!arguments.length) return linear.domain().map(d3_time_scaleDate);
-    linear.domain(x);
-    return scale;
-  };
-
-  scale.ticks = function(m, k) {
-    var extent = d3_time_scaleExtent(scale.domain());
-    if (typeof m !== "function") {
-      var span = extent[1] - extent[0],
-          target = span / m,
-          i = d3.bisect(d3_time_scaleSteps, target, 1, d3_time_scaleSteps.length - 1);
-      if (Math.log(target / d3_time_scaleSteps[i - 1]) < Math.log(d3_time_scaleSteps[i] / target)) --i;
-      m = methods[i];
-      k = m[1];
-      m = m[0];
-    }
-    return m(extent[0], extent[1], k);
-  };
-
-  scale.tickFormat = function() {
-    return format;
-  };
-
-  scale.copy = function() {
-    return d3_time_scale(linear.copy(), methods, format);
-  };
-
-  // TOOD expose d3_scale_linear_rebind?
-  scale.range = d3.rebind(scale, linear.range);
-  scale.rangeRound = d3.rebind(scale, linear.rangeRound);
-  scale.interpolate = d3.rebind(scale, linear.interpolate);
-  scale.clamp = d3.rebind(scale, linear.clamp);
-
-  return scale;
-}
-
-// TODO expose d3_scaleExtent?
-function d3_time_scaleExtent(domain) {
-  var start = domain[0], stop = domain[domain.length - 1];
-  return start < stop ? [start, stop] : [stop, start];
-}
-
-function d3_time_scaleDate(t) {
-  return new Date(t);
-}
-
-function d3_time_scaleFormat(formats) {
-  return function(date) {
-    var i = formats.length - 1, f = formats[i];
-    while (!f[1](date)) f = formats[--i];
-    return f[0](date);
-  };
-}
-
-var d3_time_scaleSteps = [
-  1e3,    // 1-second
-  5e3,    // 5-second
-  15e3,   // 15-second
-  3e4,    // 30-second
-  6e4,    // 1-minute
-  3e5,    // 5-minute
-  9e5,    // 15-minute
-  18e5,   // 30-minute
-  36e5,   // 1-hour
-  108e5,  // 3-hour
-  216e5,  // 6-hour
-  432e5,  // 12-hour
-  864e5,  // 1-day
-  1728e5, // 2-day
-  6048e5, // 1-week
-  1728e6, // 1-month
-  7776e6, // 3-month
-  31536e6 // 1-year
-];
-
-var d3_time_scaleLocalMethods = [
-  [d3.time.seconds, 1],
-  [d3.time.seconds, 5],
-  [d3.time.seconds, 15],
-  [d3.time.seconds, 30],
-  [d3.time.minutes, 1],
-  [d3.time.minutes, 5],
-  [d3.time.minutes, 15],
-  [d3.time.minutes, 30],
-  [d3.time.hours, 1],
-  [d3.time.hours, 3],
-  [d3.time.hours, 6],
-  [d3.time.hours, 12],
-  [d3.time.days, 1],
-  [d3.time.days, 2],
-  [d3.time.weeks, 1],
-  [d3.time.months, 1],
-  [d3.time.months, 3],
-  [d3.time.years, 1]
-];
-
-var d3_time_scaleLocalFormats = [
-  [d3.time.format("%Y"), function(d) { return true; }],
-  [d3.time.format("%B"), function(d) { return d.getMonth(); }],
-  [d3.time.format("%b %d"), function(d) { return d.getDate() != 1; }],
-  [d3.time.format("%a %d"), function(d) { return d.getDay() && d.getDate() != 1; }],
-  [d3.time.format("%I %p"), function(d) { return d.getHours(); }],
-  [d3.time.format("%I:%M"), function(d) { return d.getMinutes(); }],
-  [d3.time.format(":%S"), function(d) { return d.getSeconds() || d.getMilliseconds(); }]
-];
-
-var d3_time_scaleLocalFormat = d3_time_scaleFormat(d3_time_scaleLocalFormats);
-
-d3.time.scale = function() {
-  return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);
-};
-var d3_time_scaleUTCMethods = [
-  [d3.time.seconds.utc, 1],
-  [d3.time.seconds.utc, 5],
-  [d3.time.seconds.utc, 15],
-  [d3.time.seconds.utc, 30],
-  [d3.time.minutes.utc, 1],
-  [d3.time.minutes.utc, 5],
-  [d3.time.minutes.utc, 15],
-  [d3.time.minutes.utc, 30],
-  [d3.time.hours.utc, 1],
-  [d3.time.hours.utc, 3],
-  [d3.time.hours.utc, 6],
-  [d3.time.hours.utc, 12],
-  [d3.time.days.utc, 1],
-  [d3.time.days.utc, 2],
-  [d3.time.weeks.utc, 1],
-  [d3.time.months.utc, 1],
-  [d3.time.months.utc, 3],
-  [d3.time.years.utc, 1]
-];
-
-var d3_time_scaleUTCFormats = [
-  [d3.time.format.utc("%Y"), function(d) { return true; }],
-  [d3.time.format.utc("%B"), function(d) { return d.getUTCMonth(); }],
-  [d3.time.format.utc("%b %d"), function(d) { return d.getUTCDate() != 1; }],
-  [d3.time.format.utc("%a %d"), function(d) { return d.getUTCDay() && d.getUTCDate() != 1; }],
-  [d3.time.format.utc("%I %p"), function(d) { return d.getUTCHours(); }],
-  [d3.time.format.utc("%I:%M"), function(d) { return d.getUTCMinutes(); }],
-  [d3.time.format.utc(":%S"), function(d) { return d.getUTCSeconds() || d.getUTCMilliseconds(); }]
-];
-
-var d3_time_scaleUTCFormat = d3_time_scaleFormat(d3_time_scaleUTCFormats);
-
-d3.time.scale.utc = function() {
-  return d3_time_scale(d3.scale.linear(), d3_time_scaleUTCMethods, d3_time_scaleUTCFormat);
-};
-})();
diff --git a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/images/openBIS_Logo.svg b/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/images/openBIS_Logo.svg
deleted file mode 100644
index 70ac6c77f27..00000000000
--- a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/images/openBIS_Logo.svg
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="400.023px" height="174.566px" viewBox="0 0 400.023 174.566" enable-background="new 0 0 400.023 174.566"
-	 xml:space="preserve">
-<g id="Layer_1">
-	<g>
-		<text transform="matrix(1 0 0 1 46.4854 154.2764)"><tspan x="0" y="0" fill="#010101" font-family="'HelveticaNeue-Bold'" font-size="93.505" letter-spacing="-4">open</tspan><tspan x="204.679" y="0" fill="#231F20" font-family="'HelveticaNeue'" font-size="93.505">BIS</tspan></text>
-		<rect x="204.234" y="158.748" fill="none" width="192.64" height="14.936"/>
-		<text transform="matrix(1 0 0 1 204.2329 169.876)" fill="#010101" font-family="'HelveticaNeue'" font-size="15.5842">Biology Information System</text>
-		<g>
-			<g>
-				<g>
-					<g>
-						<polygon fill="#068172" points="125.213,81.967 141.416,98.167 147.252,92.333 131.053,76.132 125.213,76.132 						"/>
-					</g>
-					<g>
-						<g>
-							<polygon fill="#068172" points="120.206,81.967 104.005,98.167 98.168,92.333 114.368,76.132 120.206,76.132 							"/>
-						</g>
-						<g>
-							<polygon fill="#068172" points="120.206,65.286 104.005,49.084 98.168,54.92 114.368,71.12 120.206,71.12 							"/>
-						</g>
-					</g>
-				</g>
-				<g>
-					<polygon fill="#068172" points="125.213,65.286 141.416,49.084 147.252,54.92 131.053,71.12 125.213,71.12 					"/>
-				</g>
-			</g>
-			<g>
-				<g>
-					<polygon fill="#A4A4A4" points="76.131,16.201 92.331,0 98.168,5.836 81.969,22.036 76.13,22.036 					"/>
-				</g>
-				<g>
-					<g>
-						<polygon fill="#ADACAF" points="76.131,32.882 92.331,49.084 98.168,43.247 81.969,27.048 76.13,27.048 						"/>
-					</g>
-					<g>
-						<g>
-							<polygon fill="#ADACAF" points="71.122,32.882 54.921,49.084 49.084,43.247 65.283,27.048 71.123,27.048 							"/>
-						</g>
-						<g>
-							<polygon fill="#ADACAF" points="71.122,16.201 54.921,0 49.084,5.836 65.283,22.036 71.123,22.036 							"/>
-						</g>
-					</g>
-				</g>
-			</g>
-			<g>
-				<g>
-					<polygon fill="#ADACAF" points="27.046,65.286 43.247,49.084 49.083,54.92 32.884,71.12 27.045,71.12 					"/>
-				</g>
-				<g>
-					<polygon fill="#ADACAF" points="27.046,81.967 43.247,98.167 49.083,92.333 32.884,76.132 27.045,76.132 					"/>
-				</g>
-				<g>
-					<polygon fill="#ADACAF" points="22.038,81.967 5.837,98.167 0,92.333 16.199,76.132 22.038,76.132 					"/>
-				</g>
-				<g>
-					<polygon fill="#ADACAF" points="22.038,65.286 5.837,49.084 0,54.92 16.199,71.12 22.038,71.12 					"/>
-				</g>
-			</g>
-		</g>
-	</g>
-</g>
-<g id="Layer_2">
-</g>
-</svg>
diff --git a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/images/sprite.png b/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/images/sprite.png
deleted file mode 100644
index b9e19ef18acf68223cf6878c397ffa47ae933478..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 748
zcmV<I0u%j-P)<h;3K|Lk000e1NJLTq0015U0027(1^@s6Y*9KV0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!j!8s8RCwC#na@ibK@`Vl6BD5ZHtofu
z7QO2^C$YDj(pzsvXmj$QAhd`2qop?wrpKf`M0zSH_$MgX9Bm3YDws=KDWofGL4_p!
zzWTPTVSmhKC*(2@-p(-l-h6i6&b-~7HF~|C7=?_<8dj^-X%q!kk_NO~DwQq<0UI(S
z2DC^JsOfR~J>aX#!GO-A_!`pB8sOz9;Dm(Dwj!Iz-~|aAlOv-PY)bZ(RSmw9?8{OO
zK9sO&VRAKwF}cD<T~t1~I6=?^Yk8cuq06v28cG6jt?7Q_XMlblO6KBJN#S1dF*&C5
zQAZsJ29#3auB)jHedJLm*@Ld)0<2i~7|>cDR50i_^s)~sI3h=}CKsTEfY3gKPWqgi
zgKv4DP{WZj&_#rd<t2~99+zGtF2saNJv98laiuT_ctHW!<XaZ$)u$oU$aGL&#;9KQ
z5@JN6!5XZ=8mz$@tic+r!5XYy#(cgOU!$0HHJ#xj?43&Ry%%}_*HFCl`3(I7-M|Ix
zDg^_&iQ<if&lccsm4E?#j{1iPelGz3sA6)h+`AgX=!E#K#2#^_Qkmi%0FljRZ}a(l
zI+MwWdcA(zY&O#Yz8$`BBLc6>KIe3J>a;pgl3XsAHcitG=p-2tN^;HR{{MBHOeSv}
zs3WOV%7_uoUmk4_XmwzIydv<Ae{t({#womxg>BoS-ENOd0M5kS9+#uE|3!OUJJ3&D
zr(1c+_NVSy{nJ^y6kd!zVOdtX+wJ=OETLO)z)P#umwfUl*3rJ`TBhG=6`;N^?tY-0
zIN+M_-`DbzJvbLtB@hbPjD*iQptC9;5>KFCLhQe>o!VT@Bd07zVWgiM6P%-I_ofy%
eTe;=000RI_wd#yk{QvO)0000<MNUMnLSTaTC|&6Q

diff --git a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/index.html b/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/index.html
deleted file mode 100644
index f7fb7d9adfb..00000000000
--- a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/index.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
-<head>
-	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-	<meta HTTP-EQUIV="REFRESH" content="0; url=openbis-dsu-downloader.html">
-</head>
-<body>
-</body>
-</html>
diff --git a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/openbis-dsu-downloader.html b/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/openbis-dsu-downloader.html
deleted file mode 100644
index 081ee156543..00000000000
--- a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/openbis-dsu-downloader.html
+++ /dev/null
@@ -1,835 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-  <title>Quantitative Genomics Facility</title>
-
-  <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
-  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-  <meta name="google" value="notranslate">
-
-  <link type="text/css" rel="stylesheet" href="body-style.css" />
-  <link type="text/css" rel="stylesheet" href="button.css" />
-  <link type="text/css" rel="stylesheet" href="tree.css" />
-  <script type="text/javascript" src="d3.js"></script>
-  <script type="text/javascript" src="d3.layout.js"></script>
-  <script type="text/javascript" src="d3.time.js"></script>
-  <script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-  <script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-  <script type="text/javascript" src="/openbis/resources/js/openbis-action-deferrer.js"></script>
-  <script type="text/javascript" src="openbis-dsu.js"></script>
-  <!-- To speed development, cache the requests -->
-  <!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-  <script>
-
-dsu = new openbis_dsu('/openbis/openbis', '/datastore_server');
-
-//After logout the URL redirected to, just go to current URL in this case
-var logouturl = $(location).attr('href');
-
-// A helper function for drawing the lines between nodes
-var diagonal = d3.svg.diagonal().projection(function(d) { return [d.y, d.x] });	
-
-// The tree visualization
-var vis;
-
-// The node inspectors
-var inspectors;
-
-var inspectorsWidth = 500;
-
-// The root of the tree
-var root = { code : "QGF", label: "QGF", children : [], type: 'ROOT' };
-
-// The inspected elements
-var inspected = [];
-
-// A date formatter for grouping samples by registration year / month
-var yearmonthformat = d3.time.format("%Y-%m");
-
-///
-/// FUNCTIONS FOR PUTTING DATA INTO THE TREE
-///
-
-function initTree(){
-	 dsu.retrieveSequencingSamples(function(data){
-		 addSamplesToTree(data.result);
-		 showSpaces();
-		 updateDiagram(500);
-	 });
-}
-
-function addSamplesToTree(samples)
-{
-	if (samples == null){
-		return;
-	}
-	
-	// Create sample nodes 
-	samples = samples.map(function(sample) {
-		return {
-			code : sample.permId,
-			label: sample.properties["EXTERNAL_SAMPLE_NAME"] + " [" +   sample.code + "]",
-			bis: sample,
-			type: 'SAMPLE' 
-    }
-	});
-	
-	sortArray(samples, 'code', false);
-	
-	// Create sample group nodes (group by registration date) 
-	var sampleGroupsMap = [];
-	var sampleGroups = [];
-	
-	samples.forEach(function(sample) {
-		var date = yearmonthformat(new Date(sample.bis.registrationDetails.registrationDate));
-		var sampleGroup = sampleGroupsMap[date];
-		
-		if (undefined === sampleGroup) {
-			sampleGroup = {
-					code: date,
-					label: date,
-					samples: [],
-					type: 'SAMPLE_GROUP'
-			};
-			sampleGroupsMap[date] = sampleGroup;
-			sampleGroups.push(sampleGroup);
-		}
-		sampleGroup.samples.push(sample);
-	});
-
-	// Sort sample groups from newest to oldest
-	sortArray(sampleGroups, 'code', false);
-	
-	// Create space nodes
-	var isFirstSampleGroup = true;
-	sampleGroups.forEach(function(sampleGroup){
-		var spacesMap = [];
-		var spaces = [];
-		
-    sampleGroup.samples.forEach(function(sample){
-	    	var spaceCode = sample.bis.spaceCode;
-    	  var space = spacesMap[spaceCode];
-    	  
-    	  if(undefined == space){
-    	     space = {
-    	    		  code: sampleGroup.code + "#" + spaceCode,
-    	    		  label: spaceCode,
-    	    		  _children: [],
-    	    		  type: 'SPACE'
-    	     }
-    	     spacesMap[spaceCode] = space;
-    	     spaces.push(space);
-    	  }
-    	  space._children.push(sample);
-    });
-
-		// Sort spacees
-		spaces.sort(function(space1, space2) {
-			    if (space1.label == space2.label) return 0;
-			    return (space1.label < space2.label) ? -1 : 1;
-	  });
-    
-    if(spaces.length > 1){
-    	sortArray(spaces, 'label', true);
-    	sampleGroup._children = spaces;
-    }else{
-      sampleGroup._children = sampleGroup.samples;
-    }
-    
-    if(isFirstSampleGroup){
-    	openAllForNode(sampleGroup);
-    	isFirstSampleGroup = false;
-    }
-	});
-	
-	if (samples.length > 0){
-		root.children = sampleGroups;
-	}
-		
-}
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 20);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-function closeAll(){
-	  root.children.forEach(function(sampleGroup){
-		  closeAllForNode(sampleGroup);
-	  });
-	  
-	  if(inspected.length > 0){
-		  var inspectedCopy = inspected.slice(0);
-		  inspectedCopy.forEach(function(elem){
-			  if(elem.inspected){
-			    toggle_inspected(elem);
-			  }
-		  });
-	  }else{
-	    updateDiagram(500);
-	  }
-}
-
-function closeAllForNode(node){
-	  closeChildren(node);
-	  getChildren(node).forEach(function(child){
-	    closeAllForNode(child);
-	  });
-}
-
-function openAllForNode(node){
-	openChildren(node);
-	getChildren(node).forEach(function(child){
-		openAllForNode(child);
-	});
-}
-
-function getVisibleLeafsCountForNode(node){
-	if(node.children){
-			var count = 0;
-			node.children.forEach(function(child){
-				count += getVisibleLeafsCountForNode(child);
-			});
-			return count;
-	}else{
-		return 1;
-	}
-}
-
-function getVisibleLabelsMaxLength(node){
-	if(node.children){
-		var length = 0;
-		node.children.forEach(function(child){
-			var childLength = getVisibleLabelsMaxLength(child);
-			if(childLength > length){
-				length = childLength;
-			}
-		});
-		return length;
-	}else{
-		  return node.label.length * 13;		
-	}
-}
-
-function showSpaces()
-{	
-	// Don't show anything yet, just initialize the visualization
-	createVis();
-}
-
-
-var didCreateVis = false;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{	
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	visgroup = d3.select("#main").append("div");
-
-	// An svg element for the tree visualization
-	vis = visgroup.append("svg:svg")
-	  .attr("id","mainVis")
-  	.append("svg:g")
-		.attr("transform", "translate(40, 0)");
-
-	  var legend = vis.append("svg:g")
-	  .attr("class","legend")
-	  .attr("transform", "translate(-30, 0)");
-	  
-	  var legendSeq = legend.append("svg:g").attr("class","sequenced").attr("transform","translate(0, 20)");
-	  legendSeq.append("svg:circle").attr("r", 5.5);
-	  legendSeq.append("svg:text").text("Sequenced").attr("dx", 10).attr("dy",4);
-
-	  var legendNotSeq = legend.append("svg:g").attr("class","notsequenced").attr("transform","translate(0, 40)");
-	    legendNotSeq.append("svg:circle").attr("r", 5.5);
-	    legendNotSeq.append("svg:text").text("Not Sequenced").attr("dx", 10).attr("dy",4);
-	  
-	// An element for the inspectors.
-	inspectors = visgroup.append("span")
-	  .attr("id","inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "relative")
-		.style("overflow", "auto")
-		.style("float", "right")
-	  .style("top", "20px")
-	  .style("display", "none");
-
-	didCreateVis = true;
-}
-
-
-/**
- * Draw / update the tree
- */
-function updateDiagram(duration)
-{	
-  log('Updating diagram');
-	
-  var inspectorsSize = inspected.length > 0 ? inspectorsWidth : 0;
-  var labelsSize = getVisibleLabelsMaxLength(root);
-  
-  var treeWidth = Math.max(300, getAppWidth() - inspectorsSize - labelsSize);
-  var treeHeight = Math.max(100, getAppHeight());
-  
-  var visWidth = treeWidth + labelsSize - 20;
-  var visHeight = treeHeight;
-  
-  var mainWidth = visWidth + inspectorsSize;
-  var mainHeight = visHeight;
-  
-	// Adjust a size of the vis 
-	d3.select("#mainVis")
-	  .attr("width", visWidth)
-    .attr("height", visHeight);
-    
-  d3.select("#main")
-    .style("width", mainWidth)
-    .style("height", mainHeight);
-	
-	// Adjust a size of the tree 
-  tree = d3.layout.tree().size([treeHeight, treeWidth])	
-	
-	// Update the root and compute the new layout 
-	var nodes = tree.nodes(root);
-
-	// Draw / update the links	
-	var link = vis.selectAll("path.link").data(tree.links(nodes), function(d) { return d.code });
-	
-	link.enter().append("svg:path")
-			.attr("class", "link")
-			.attr("d", function(d) {
-				var y0 = (null != d.source.y0) ? d.source.y0 : d.source.y; 
-				var x0 = (null != d.source.x0) ? d.source.x0 : d.source.x;
-				var o = {x: x0, y: y0};
-				return diagonal({source: o, target: o});
-			})
-		.transition()
-			.duration(duration)
-			.attr("d", diagonal);
-		
-	link.transition()
-		.duration(duration)
-		.attr("d", diagonal);
-		
-	link.exit().transition()
-		.duration(duration)
-		.attr("d", function(d) {
-				var y0 = (null != d.source.y0) ? d.source.y0 : d.source.y; 
-				var x0 = (null != d.source.x0) ? d.source.x0 : d.source.x;
-				var o = {x: x0, y: y0};
-				return diagonal({source: o, target: o});
-			})
-		.remove();
-
-	// Draw / update the nodes
-	var node = vis.selectAll("g.node").data(nodes, function(d) { return d.code });
-	
-	var nodeEnter = 
-		node.enter().append("svg:g")
-			.attr("class", classForNode)
-			.attr("transform", translateSrc)
-			.on("click", toggle_open);
-
-	nodeEnter.append("svg:circle")
-		.attr("r", 5.5);
-
-	nodeEnter.append("svg:text")
-		.attr("dx", function(d) { return hasChildren(d) ? -8 : 8 })
-		.attr("dy", 3)
-		.attr("text-anchor", function(d) { return getTextAnchorType(d) })
-		.text(function(d) { return d.label });
-
-	nodeEnter
-		.transition()
-			.duration(duration)
-			.attr("transform", translateDst);
-		
-	
-	// Transition nodes to their new position.
-	node.transition()
-		.duration(duration)
-		.attr("class", classForNode)
-		.attr("transform", translateDst);
-
-	// Move the text elements to the appropriate position
-	node.selectAll("text").transition()
-		.duration(duration)
-		.attr("dx", function(d) { return hasChildren(d) ? -8 : 8 })
-		.attr("text-anchor", function(d) { return getTextAnchorType(d) });
-		
-	node.exit().transition()
-		.duration(duration)
-		.attr("transform", translateSrc)
-		.remove();
-}
-
-function classForNode(d) { 
-	// Use whether the node has open children or not to compute the class
-	var cssClass = "node " + d.type;
-	if (d.inspected) cssClass = cssClass + " inspected";
-	if(d.hasFilesLoaded){
-		if (d.hasFiles) {
-	    cssClass = cssClass + " sequenced";
-	  } else {
-		  cssClass = cssClass + " notsequenced";
-		}
-	}
-	return cssClass;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =  "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-function getChildren(d){
-	if(d.children != null){
-		return d.children;
-	}else if(d._children != null){
-		return d._children;
-	}else{
-		return [];
-	}
-}
-
-function hasChildren(d)
-{
-	return d.children != null || d._children != null;
-}
-
-function hasChildrenOpen(d){
-	return d.children != null;
-}
-
-function hasChildrenClosed(d){
-	return d._children != null;
-}
-
-function closeChildren(d){
-	  if(hasChildrenOpen(d)){
-	    d._children = d.children;
-	    d.children = null;
-	  }
-}
-
-function openChildren(d){
-	  if(hasChildrenClosed(d)){
-		    d.children = d._children;
-		    d._children = null;
-    
-		    var hasSampleChildren = d.children && d.children[0].type == 'SAMPLE';
-		    
-	      if(hasSampleChildren && !d.hasFilesLoaded && !d.hasFilesLoading){
-		    	  d.hasFilesLoading = true; 
-	    	  
-	    	    // Get datasets for each sequencing sample 
-		    	  var sampleDeferrer = 
-		    	    new openbisActionDeferrer(
-		    	        function() {
-		    	        	log("Loaded HAS_FILES for all samples");
-		    	        	d.hasFilesLoaded = true; 
-		    	        	d.hasFilesLoading = false;
-		    	        	updateDiagram(500);
-		    	        }, 
-		    	        d.children.map(function(samp) { return samp.bis.code; }));
-		    	        
-		    	  d.children.forEach(function(sample) {
-		    		   loadHasFilesForSample(sample, function(){
-		    			   sampleDeferrer.dependencyCompleted(sample.bis.code);
-		    		   });
-		    		});
-			  }
-    }
-}
-
-function loadHasFilesForSample(sample, callback){
-	 dsu.retrieveDataSetsForSequencingSample(sample, function(data) {
-		      var datasets = data.result;
-		      
-	        log("Got " + (datasets ? datasets.length : 0) + " datasets for sample: " + sample.bis.code);
-
-	        if (!datasets || datasets.length == 0){
-	          sample.hasFiles = false;
-	          sample.hasFilesLoaded = true;
-	        	callback();
-	        }else{
-	            var listFiles = function(dataset){
-	                dsu.server.listFilesForDataSet(dataset.code, "/", true, function(data) {
-	                	  var files = data.result;
-	                	
-	                    log("Got " + (files ? files.length : 0) + " files for sample: " + sample.bis.code + " dataset: " + dataset.code);
-	                    
-	                    if (!files || files.length == 0) {
-	                      if(datasets.length > 0){
-	                    	  log("Sample: " + sample.bis.code + " no files found yet - will try in the next dataset");
-	                        listFiles(datasets.pop());
-	                      }else{
-	                    	  log("Sample: " + sample.bis.code + " HAS_NO_FILES");
-	                    	  sample.hasFiles = false;
-	                    	  sample.hasFilesLoaded = true;
-	                    	  callback();
-	                      }
-	                    }else{
-	                    	 log("Sample: " + sample.bis.code + " HAS_FILES");
-	                    	 sample.hasFiles = true;
-	                    	 sample.hasFilesLoaded = true;
-	                    	 callback();
-	                    }
-	                });
-	            };
-	            listFiles(datasets.pop());
-	        }
-	    });	
-}
-
-function loadFilesForSample(sample, callback){
-    dsu.retrieveDataSetsForSequencingSample(sample, function(data) {
-    	  var datasets = data.result;
-    	
-        log("Got " + (datasets ? datasets.length : 0) + " datasets for sample: " + sample.bis.code);
-        
-        if (!datasets || datasets.length == 0){
-        	sample.files = [];
-        	sample.filesLoaded = true;
-          callback();      
-        }else{
-            sample.datasets = data.result.map(function(bisds) { return {bis : bisds} });
-            sample.files = [];
-            sample.filesLoaded = false;
-                  
-            // Get all the files from the sequencing sample's datasets 
-            var datasetDeferrer = 
-              new openbisActionDeferrer(
-                function() {
-                   log("Loaded ALL datasets' files for sample: " + sample.bis.code);
-                   sortArray(sample.files, 'label', true);
-                   sample.filesLoaded = true; 
-                   callback();
-                }, 
-                sample.datasets.map(function(ds) { return ds.bis.code; }));
-              
-            sample.datasets.forEach(function(ds) { 
-              dsu.server.listFilesForDataSet(ds.bis.code, "/", true, function(data) {         
-                log("Got " + (data.result ? data.result.length : 0) + " files for sample: " + sample.bis.code + " dataset: " + ds.bis.code);
-                
-                if (!data.result || data.result.length == 0) {
-                  datasetDeferrer.dependencyCompleted(ds.bis.code);
-                  return;
-                }
-                data.result.forEach(function (file) {
-                  file.dataset = ds;
-                  file.label = file.pathInListing.split("/").pop();
-                });
-
-                data.result = data.result.filter(function(file) { 
-                  var regex= /gz/;
-                  return (regex.test(file.pathInListing) & !file.isDirectory); });
-                sample.files = sample.files.concat(data.result);
-                datasetDeferrer.dependencyCompleted(ds.bis.code);
-              })
-            });
-        }
-    });
-}
-	  
-function getTextAnchorType(d){
-	return d.type == 'SAMPLE' ? 'start' : 'end'; 	
-}
-
-// Toggle children on click.
-function toggle_open(d) {
-	if (!hasChildren(d)) {
-		d.svgNode = this;
-		return toggle_inspected.call(this, d);
-	}
-	
-  if (hasChildrenOpen(d)) {
-	  closeChildren(d);
-  } else {
-	  openChildren(d);
-  }
-  updateDiagram(500);
-}
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{	
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspected, function (d) { return d.code });
-	var box = inspector.enter().append("div")
-		.attr("class", "inspector")
-		.text(function(d) { return d.label });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", toggle_inspected)
-		.text("x");
-		
-	var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs(d.bis.properties) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.style("opacity", "1");
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-			
-	// Add a caption, but make sure there is just one (this does not work with select())
-	downloadTable.selectAll("caption")
-			.data(downloadTableCaption)
-		.enter()
-			.append("caption").text(function(d) { return d; });
-			
-	// We just want to see non-directories here
-	var downloadTableRow = downloadTable.selectAll("tr").data(filesForSequencingSample, function(d) { return d.pathInDataSet });
-	downloadTableRow
-		.enter()
-			.append("tr")
-				.append("td")
-				.style("text-align", "left")
-				.on("click", downloadTableFile)
-				.text(function(d) { return d.label; });
-	downloadTableRow
-		.exit()
-			.transition()
-				.duration(duration)
-				.style("opacity", "0")
-				.remove();
-	
-	inspector.exit().transition()
-		.duration(duration)
-		.style("opacity", "0")
-		.remove();
-}
-
-// Toggle children on click.
-function toggle_inspected(d) {
-	var count = inspected.length;
-	
-	if (d.inspected) {
-		var index = inspected.indexOf(d) 
-		if (index > -1)	inspected.splice(index, 1);
-		d.inspected = false;
-		d3.select(d.svgNode).attr("class", classForNode(d))
-	} else {
-		d.inspected = true;
-		inspected.push(d);
-		d3.select(d.svgNode).attr("class", classForNode(d))
-		if(!d.filesLoaded){
-			loadFilesForSample(d, function(){
-				updateInspectors(500);
-			});
-		}
-	}
-
-	if(inspected.length > 0){
-		$("#inspectorsContainer").show();	
-	}else{
-		$("#inspectorsContainer").hide(); 
-	}
-
-	if(count == 0 && inspected.length > 0 || count > 0 && inspected.length == 0){
-		updateDiagram(500);
-		setTimeout(function(){
-			updateInspectors(500);
-		}, 500);
-	}else{
-		updateInspectors(500);
-	}
-}
-
-function sortArray(array, sortingFieldName, ascending){
-	 array.sort(function(item1, item2){
-		 var value1 = item1[sortingFieldName];
-		 var value2 = item2[sortingFieldName];
-		 
-		 if(value1){
-			  value1 = new String(value1).toLowerCase(); 
-		 }
-		 if(value2){
-		    value2 = new String(value2).toLowerCase();
-		 }
-		 
-		 if(ascending){
-			 return (value1 >= value2) ? 1: -1;			 
-		 }else{
-			 return (value1 <= value2) ? 1: -1;
-		 }
-	});
-}
-	 
-/**
- * Convert properties to pairs
- */
-function props_to_pairs(d)
-{
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	pairs.sort(function(a, b) { 
-		if (a[0] == b[0]) return 0;
-		// Sort in reverse lexicographical
-		return (a[0] < b[0]) ? -1 : 1;
-	});
-	return pairs;
-}
-
-
-function downloadTableCaption(d)
-{	
-	if(d.filesLoaded){
-		if(d.files && d.files.length > 0){
-			return ["Files"]
-		}else{
-			return ["Not Yet Sequenced"];
-		}
-	}
-}
-
-function downloadTableFile(d)
-{
-	// If there is no dataset, this is just a marker for loading
-	if (!d.dataset) return;
-	
-	var action = function(data) { 
-		try {
-			document.location.href = data.result
-		} catch (err) {
-			// just ignore errors		
-		} 
-	};
-	dsu.server.getDownloadUrlForFileForDataSet(d.dataset.bis.code, d.pathInDataSet, action);
-}
-
-function filesForSequencingSample(d)
-{
-	return d.filesLoaded ? d.files : [{ label : "Loading..." }];
-}
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#loginname").focus();
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	initTree();
-	
-	$('#openbis-logo').height(30);
-        $('#openbis-logo').hide();
-        
-}
-
-
-$(document).ready(function() {
-	if ( $.browser.msie ) {
-          alert("Currently no Internet Explorer is supported!");
-        }
-        $('#main').hide()
-	
-	$('#logout-button').click(function() { 
-           dsu.server.logout(function(data) {$(location).attr('href',logouturl)});
-         });
-	
-	$('#login-form').submit(function() {
-		 dsu.server.login( $.trim($('#loginname').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	dsu.server.ifRestoredSessionActive(function(data) { enterApp(data) });
-});
-
-// set the focus 
-function onPageLoad(){
-          if(loginname.value.length==0) {
-            $("#loginname").focus();
-          }
-          else {
-            $("#login-button").focus();
-          }
-}
-
-function log(msg){
-	/*
-	if(console){
-		console.log(msg);
-	}
-	*/
-}
-
-
- </script>
-</head>
-<body onload="onPageLoad()">
-<img id="openbis-logo" src="images/openBIS_Logo.svg" alt="openBIS" style="position: absolute; left: 330px; top: 230px; height: 70px;"/>
-<link rel="shortcut icon" href="../images/favicon.ico" /> 
-<link rel="icon" type="image/png" href="../images/favicon.png" /> 
-
-<div id="login-form-div">
-  <h1>BSSE - Quantitative Genomics Facility</h1>
-  <form id="login-form" action="javascript:">
-    <div class="box greytext loginname">
-      <input value="Login Name" type="text" required="required" maxlength="40" size="40" onfocus="this.value=(this.value=='Login Name') ? '' : this.value;" onblur="this.value=(this.value=='') ? 'Login Name' : this.value;" id="loginname"> </input>
-    </div>
-    <div class="box greytext password">
-      <input value="Password" id="password" type="password" required="required" size="40" onfocus="this.value=(this.value=='Password') ? '' : this.value;" onblur="this.value=(this.value=='') ? 'Password' : this.value;" id="password"> </input>
-    </div>
-    <div class="loginbutton">
-      <button id="login-button" type="submit">Login</button>
-    </div>
-    <br>
-    <a href="https://crowd-bsse.ethz.ch/crowd/console/forgottenlogindetails!default.action" id="resetpassword" class="greytext">Reset password</a>
-  </form>
-</div>
-
-<div id="main">
-  <div id="button-group">
-    <button id="logout-button">Logout</button>
-    <button id="close-all-button" onclick="closeAll();">Close All</button>
-  </div>
-</div>
-</body>
-</html>
diff --git a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/openbis-dsu.js b/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/openbis-dsu.js
deleted file mode 100644
index 52e7336254a..00000000000
--- a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/openbis-dsu.js
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * openbis-dsu.js
- * OpenBIS-DSU API
- *
- * A DSU-specific API for accessing openBIS. Depends on openbis.js.
- * @author Chandrasekhar Ramakrishnan
- */
-
-/**
- * The openbis_dsu object provides a dsu-specific interface to openbis. 
- * 
- * It creates objects for projects, experiments, samples, and datasets. These objects
- * are designed to be passed on to GUI libraries (like d3). The openbis version of each
- * object is stored in the bis variable.
- * @constructor
- */
-function openbis_dsu(url, dssUrl) {
-	this.server = new openbis(url, dssUrl);
-}
-
-/**
- * Request the sequencing samples for a project
- */
-openbis_dsu.prototype.retrieveSequencingSamples = function(action)
-{	
-	var sampleCriteria = 
-	{
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				attribute : "TYPE",
-				fieldType : "ATTRIBUTE",
-				desiredValue : "ILLUMINA_SEQUENCING" 
-			} ],
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	this.server.searchForSamples(sampleCriteria, action);
-}
-
-/**
- * Get the flow lanes for a sequencing sample.
- */
-openbis_dsu.prototype.retrieveFlowLanesForSequencingSample = function(sample, action)
-{
-	var projectCode = null;
-	
-	if(sample.bis.experimentIdentifierOrNull){
-		var experimentIdentifierRegexp = /\/(.*)\/(.*)\/(.*)/g;
-		var experimentIdentifierMatch = experimentIdentifierRegexp.exec(sample.bis.experimentIdentifierOrNull);
-		projectCode = experimentIdentifierMatch[2];
-	}else{
-		action(null);
-		return;
-	}
-	
-	var experimentCriteria = 
-	{
-		targetEntityKind : "EXPERIMENT",
-		criteria : { 
-			matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				"attribute":"PROJECT",
-				"fieldType":"ATTRIBUTE",
-				"desiredValue": projectCode
-			} ]
-		}
-	};
-	
-	var parentCriteria = 
-	{
-		targetEntityKind : "SAMPLE_PARENT",
-		criteria : { 
-			matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				"attribute":"CODE",
-				"fieldType":"ATTRIBUTE",
-				"desiredValue": sample.bis.code 
-			} ]
-		}
-	};
-	
-	var sampleCriteria = 
-	{
-		subCriterias : [ experimentCriteria, parentCriteria ],
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				attribute : "TYPE",
-				fieldType : "ATTRIBUTE",
-				desiredValue : "ILLUMINA_FLOW_LANE" 
-			} ],
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	this.server.searchForSamples(sampleCriteria, action)
-}
-
-/**
- * Get all data sets connected to a sequencing sample
- */
-openbis_dsu.prototype.retrieveDataSetsForSequencingSample = function(sequencing, action)
-{
-	this.server.listDataSetsForSample(sequencing.bis, false, action);
-}
diff --git a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/tree.css b/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/tree.css
deleted file mode 100644
index 8617fd5fb4d..00000000000
--- a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/html/tree.css
+++ /dev/null
@@ -1,138 +0,0 @@
-.node circle {
-	 fill: #fff;
-	 stroke: #444444; 
-	 stroke-width: 1.5px;
-}
-
-.node {
-	font: 14px "Verdana", sans-serif;
-	z-index: 1;
-	cursor: pointer;
-	left: -15px;
-}
-
-.node:hover circle{
-    fill: #444444;
-}
-
-.node:hover{
-  font-weight: bold;  
-}
-
-.link {
-	 fill: none;
-	 stroke: #ccc;
-	 stroke-width: 1.5px;
-	 z-index: -1;
-}
-
-.SAMPLE.inspected {
-  font-weight: bold
-}
-
-.SAMPLE.sequenced circle {
-	stroke: DarkGreen;
-}
-
-.SAMPLE.sequenced:hover circle {
-  fill: DarkGreen;
-}
-
-.SAMPLE.notsequenced circle {
-	stroke: DarkRed;
-}
-
-.SAMPLE.notsequenced:hover circle {
-  fill: DarkRed;
-}
-
-/* Inspector */
-
-div.inspector {
-	font: 14px "Verdana", sans-serif;
-	padding: 10px;
-	border: 1px solid gray;
-	margin: 10px 2px;
-	font-weight: bold;
-}
-
-.property {
-  font-size: 10px;
-}
-
-.properties {
-	width: 100%;	
-}
-
-.properties tr:nth-child(odd) {
-  background-color:#eee;
-}
-
-.properties tr:nth-child(even) {
-  background-color:#fff;
-}
-
-.close {
-	float: right;
-}
-
-.close:hover {
-	opacity: 0.5;
-	color: #AAA;
-	cursor: pointer;
-}
-
-.downloads {
-	color: black;
-	background-color: #E3E3E3;
-}
-
-table.downloads {
-  font-family: "Trebuchet MS", sans-serif;
-	font-size: 14px;
-	table-layout: fixed;
-	border-collapse: collapse;
-	margin: 0px;
-	padding: 0px;
-}
-
-/*
-.downloads caption {
-	text-align: left;
-}
-*/
-
-.downloads tr {
-	padding: 0px;
-}
-
-.downloads td {
-	border: 2px solid #FFFFFF;	
-	padding: 2px;
-}
-
-.downloads td:hover {
-	cursor: pointer;
-	text-decoration: underline
-}
-
-input:focus{
-background-color: white;
-}
-
-/* Legend */
-
-.legend .sequenced circle {
-   font: 14px "Verdana", sans-serif;
-   stroke-width: 1.5px;
-   fill: white;
-   stroke: DarkGreen;
-}
-
-.legend .notsequenced circle {
-   font: 14px "Verdana", sans-serif;
-   stroke-width: 1.5px;
-   fill: white;
-   stroke: DarkRed;
-}
-
diff --git a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/plugin.properties b/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/plugin.properties
deleted file mode 100644
index cb40f34f644..00000000000
--- a/deep_sequencing_unit/source/core-plugins/downloader/1/as/webapps/downloader/plugin.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-# The properties file for an example webapps plugin
-# This file has no properties defined because none need to be defined.
-webapp-folder = html
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/as/initialize-master-data.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/as/initialize-master-data.py
deleted file mode 100644
index 5321fedca37..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/as/initialize-master-data.py
+++ /dev/null
@@ -1,3385 +0,0 @@
-# -*- coding: utf-8 -*-
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-
-tr = service.transaction()
-
-
-file_type_FASTQ_PHRED_64 = tr.getOrCreateNewFileFormatType('FASTQ_PHRED_64')
-file_type_FASTQ_PHRED_64.setDescription('FastQ Format with PHRED+64 quality values (as deliverd by Illumina GA Pipeline >= 1.3)')
-   
-vocabulary_AGILENT_KIT = tr.getOrCreateNewVocabulary('AGILENT_KIT')
-vocabulary_AGILENT_KIT.setDescription(None)
-vocabulary_AGILENT_KIT.setUrlTemplate(None)
-vocabulary_AGILENT_KIT.setManagedInternally(False)
-vocabulary_AGILENT_KIT.setInternalNamespace(False)
-vocabulary_AGILENT_KIT.setChosenFromList(True)
-
-vocabulary_term_AGILENT_KIT_AGILENT_DNA_KIT_1000 = tr.createNewVocabularyTerm('AGILENT_DNA_KIT_1000')
-vocabulary_term_AGILENT_KIT_AGILENT_DNA_KIT_1000.setDescription(None)
-vocabulary_term_AGILENT_KIT_AGILENT_DNA_KIT_1000.setLabel(None)
-vocabulary_term_AGILENT_KIT_AGILENT_DNA_KIT_1000.setOrdinal(1)
-vocabulary_AGILENT_KIT.addTerm(vocabulary_term_AGILENT_KIT_AGILENT_DNA_KIT_1000)
-
-vocabulary_term_AGILENT_KIT_AGILENT_HIGH_SENSITIVITY_DNA_KIT = tr.createNewVocabularyTerm('AGILENT_HIGH_SENSITIVITY_DNA_KIT')
-vocabulary_term_AGILENT_KIT_AGILENT_HIGH_SENSITIVITY_DNA_KIT.setDescription(None)
-vocabulary_term_AGILENT_KIT_AGILENT_HIGH_SENSITIVITY_DNA_KIT.setLabel(None)
-vocabulary_term_AGILENT_KIT_AGILENT_HIGH_SENSITIVITY_DNA_KIT.setOrdinal(2)
-vocabulary_AGILENT_KIT.addTerm(vocabulary_term_AGILENT_KIT_AGILENT_HIGH_SENSITIVITY_DNA_KIT)
-
-vocabulary_ALIGNMENT_SOFTWARE = tr.getOrCreateNewVocabulary('ALIGNMENT_SOFTWARE')
-vocabulary_ALIGNMENT_SOFTWARE.setDescription('If an alignment is requested, which software package should be use?')
-vocabulary_ALIGNMENT_SOFTWARE.setUrlTemplate(None)
-vocabulary_ALIGNMENT_SOFTWARE.setManagedInternally(False)
-vocabulary_ALIGNMENT_SOFTWARE.setInternalNamespace(False)
-vocabulary_ALIGNMENT_SOFTWARE.setChosenFromList(True)
-
-vocabulary_term_ALIGNMENT_SOFTWARE_NOT_NEEDED = tr.createNewVocabularyTerm('NOT_NEEDED')
-vocabulary_term_ALIGNMENT_SOFTWARE_NOT_NEEDED.setDescription(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_NOT_NEEDED.setLabel(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_NOT_NEEDED.setOrdinal(1)
-vocabulary_ALIGNMENT_SOFTWARE.addTerm(vocabulary_term_ALIGNMENT_SOFTWARE_NOT_NEEDED)
-
-vocabulary_term_ALIGNMENT_SOFTWARE_ELAND = tr.createNewVocabularyTerm('ELAND')
-vocabulary_term_ALIGNMENT_SOFTWARE_ELAND.setDescription(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_ELAND.setLabel(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_ELAND.setOrdinal(2)
-vocabulary_ALIGNMENT_SOFTWARE.addTerm(vocabulary_term_ALIGNMENT_SOFTWARE_ELAND)
-
-vocabulary_term_ALIGNMENT_SOFTWARE_MAQ = tr.createNewVocabularyTerm('MAQ')
-vocabulary_term_ALIGNMENT_SOFTWARE_MAQ.setDescription(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_MAQ.setLabel(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_MAQ.setOrdinal(3)
-vocabulary_ALIGNMENT_SOFTWARE.addTerm(vocabulary_term_ALIGNMENT_SOFTWARE_MAQ)
-
-vocabulary_term_ALIGNMENT_SOFTWARE_BWA = tr.createNewVocabularyTerm('BWA')
-vocabulary_term_ALIGNMENT_SOFTWARE_BWA.setDescription(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_BWA.setLabel(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_BWA.setOrdinal(4)
-vocabulary_ALIGNMENT_SOFTWARE.addTerm(vocabulary_term_ALIGNMENT_SOFTWARE_BWA)
-
-vocabulary_term_ALIGNMENT_SOFTWARE_NOVOALIGN = tr.createNewVocabularyTerm('NOVOALIGN')
-vocabulary_term_ALIGNMENT_SOFTWARE_NOVOALIGN.setDescription(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_NOVOALIGN.setLabel(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_NOVOALIGN.setOrdinal(6)
-vocabulary_ALIGNMENT_SOFTWARE.addTerm(vocabulary_term_ALIGNMENT_SOFTWARE_NOVOALIGN)
-
-vocabulary_term_ALIGNMENT_SOFTWARE_BOWTIE = tr.createNewVocabularyTerm('BOWTIE')
-vocabulary_term_ALIGNMENT_SOFTWARE_BOWTIE.setDescription(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_BOWTIE.setLabel(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_BOWTIE.setOrdinal(7)
-vocabulary_ALIGNMENT_SOFTWARE.addTerm(vocabulary_term_ALIGNMENT_SOFTWARE_BOWTIE)
-
-vocabulary_CASAVA_VERSION = tr.getOrCreateNewVocabulary('CASAVA_VERSION')
-vocabulary_CASAVA_VERSION.setDescription('Post analyzing software')
-vocabulary_CASAVA_VERSION.setUrlTemplate(None)
-vocabulary_CASAVA_VERSION.setManagedInternally(False)
-vocabulary_CASAVA_VERSION.setInternalNamespace(False)
-vocabulary_CASAVA_VERSION.setChosenFromList(True)
-
-vocabulary_term_CASAVA_VERSION_18 = tr.createNewVocabularyTerm('1.8')
-vocabulary_term_CASAVA_VERSION_18.setDescription(None)
-vocabulary_term_CASAVA_VERSION_18.setLabel(None)
-vocabulary_term_CASAVA_VERSION_18.setOrdinal(1)
-vocabulary_CASAVA_VERSION.addTerm(vocabulary_term_CASAVA_VERSION_18)
-
-vocabulary_term_CASAVA_VERSION_17 = tr.createNewVocabularyTerm('1.7')
-vocabulary_term_CASAVA_VERSION_17.setDescription(None)
-vocabulary_term_CASAVA_VERSION_17.setLabel(None)
-vocabulary_term_CASAVA_VERSION_17.setOrdinal(2)
-vocabulary_CASAVA_VERSION.addTerm(vocabulary_term_CASAVA_VERSION_17)
-
-vocabulary_CLUSTER_GENERATION_KIT_VERSION = tr.getOrCreateNewVocabulary('CLUSTER_GENERATION_KIT_VERSION')
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.setDescription('Version of the Cluster Generation Kit')
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.setUrlTemplate(None)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.setManagedInternally(False)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.setInternalNamespace(False)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.setChosenFromList(True)
-
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V3 = tr.createNewVocabularyTerm('TRUSEQ_CBOT_HS_V3')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V3.setDescription(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V3.setLabel('TruSeq cBot-HS v3')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V3.setOrdinal(1)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.addTerm(vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V3)
-
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V25 = tr.createNewVocabularyTerm('TRUSEQ_CBOT_HS_V2.5')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V25.setDescription(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V25.setLabel('TruSeq cBot-HS v2.5')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V25.setOrdinal(2)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.addTerm(vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V25)
-
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_GA_V2 = tr.createNewVocabularyTerm('TRUSEQ_CBOT_GA_V2')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_GA_V2.setDescription(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_GA_V2.setLabel('TrueSeq cBot-GA v2')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_GA_V2.setOrdinal(3)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.addTerm(vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_GA_V2)
-
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CS_GA_V5 = tr.createNewVocabularyTerm('TRUSEQ_CS_GA_V5')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CS_GA_V5.setDescription(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CS_GA_V5.setLabel('TrueSeq CS-GA v5')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CS_GA_V5.setOrdinal(4)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.addTerm(vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CS_GA_V5)
-
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V5 = tr.createNewVocabularyTerm('V5')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V5.setDescription(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V5.setLabel(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V5.setOrdinal(5)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.addTerm(vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V5)
-
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V4 = tr.createNewVocabularyTerm('V4')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V4.setDescription(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V4.setLabel(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V4.setOrdinal(6)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.addTerm(vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V4)
-
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V2 = tr.createNewVocabularyTerm('V2')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V2.setDescription(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V2.setLabel(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V2.setOrdinal(7)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.addTerm(vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V2)
-
-vocabulary_CLUSTER_STATION = tr.getOrCreateNewVocabulary('CLUSTER_STATION')
-vocabulary_CLUSTER_STATION.setDescription('Cluster Station')
-vocabulary_CLUSTER_STATION.setUrlTemplate(None)
-vocabulary_CLUSTER_STATION.setManagedInternally(False)
-vocabulary_CLUSTER_STATION.setInternalNamespace(False)
-vocabulary_CLUSTER_STATION.setChosenFromList(True)
-
-vocabulary_term_CLUSTER_STATION_CBOT = tr.createNewVocabularyTerm('CBOT')
-vocabulary_term_CLUSTER_STATION_CBOT.setDescription(None)
-vocabulary_term_CLUSTER_STATION_CBOT.setLabel('cBot')
-vocabulary_term_CLUSTER_STATION_CBOT.setOrdinal(1)
-vocabulary_CLUSTER_STATION.addTerm(vocabulary_term_CLUSTER_STATION_CBOT)
-
-vocabulary_term_CLUSTER_STATION_CBOT2 = tr.createNewVocabularyTerm('CBOT2')
-vocabulary_term_CLUSTER_STATION_CBOT2.setDescription('Second cBot')
-vocabulary_term_CLUSTER_STATION_CBOT2.setLabel('cBot2')
-vocabulary_term_CLUSTER_STATION_CBOT2.setOrdinal(2)
-vocabulary_CLUSTER_STATION.addTerm(vocabulary_term_CLUSTER_STATION_CBOT2)
-
-vocabulary_CLUSTER_STATION_SOFTWARE_VERSION = tr.getOrCreateNewVocabulary('CLUSTER_STATION_SOFTWARE_VERSION')
-vocabulary_CLUSTER_STATION_SOFTWARE_VERSION.setDescription(None)
-vocabulary_CLUSTER_STATION_SOFTWARE_VERSION.setUrlTemplate(None)
-vocabulary_CLUSTER_STATION_SOFTWARE_VERSION.setManagedInternally(False)
-vocabulary_CLUSTER_STATION_SOFTWARE_VERSION.setInternalNamespace(False)
-vocabulary_CLUSTER_STATION_SOFTWARE_VERSION.setChosenFromList(True)
-
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_CBOT_14360 = tr.createNewVocabularyTerm('CBOT_1.4.36.0')
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_CBOT_14360.setDescription(None)
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_CBOT_14360.setLabel('cBot 1.4.36.0')
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_CBOT_14360.setOrdinal(1)
-vocabulary_CLUSTER_STATION_SOFTWARE_VERSION.addTerm(vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_CBOT_14360)
-
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_GALAXY_06 = tr.createNewVocabularyTerm('GALAXY_0.6')
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_GALAXY_06.setDescription('Old Cluster Station')
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_GALAXY_06.setLabel('Galaxy 0.6 Build 98')
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_GALAXY_06.setOrdinal(2)
-vocabulary_CLUSTER_STATION_SOFTWARE_VERSION.addTerm(vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_GALAXY_06)
-
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_NOT_KNOWN = tr.createNewVocabularyTerm('NOT_KNOWN')
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_NOT_KNOWN.setDescription(None)
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_NOT_KNOWN.setLabel(None)
-vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_NOT_KNOWN.setOrdinal(3)
-vocabulary_CLUSTER_STATION_SOFTWARE_VERSION.addTerm(vocabulary_term_CLUSTER_STATION_SOFTWARE_VERSION_NOT_KNOWN)
-
-vocabulary_CONTROL_LANE = tr.getOrCreateNewVocabulary('CONTROL_LANE')
-vocabulary_CONTROL_LANE.setDescription(None)
-vocabulary_CONTROL_LANE.setUrlTemplate(None)
-vocabulary_CONTROL_LANE.setManagedInternally(False)
-vocabulary_CONTROL_LANE.setInternalNamespace(False)
-vocabulary_CONTROL_LANE.setChosenFromList(True)
-
-vocabulary_term_CONTROL_LANE_1 = tr.createNewVocabularyTerm('1')
-vocabulary_term_CONTROL_LANE_1.setDescription(None)
-vocabulary_term_CONTROL_LANE_1.setLabel(None)
-vocabulary_term_CONTROL_LANE_1.setOrdinal(1)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_1)
-
-vocabulary_term_CONTROL_LANE_2 = tr.createNewVocabularyTerm('2')
-vocabulary_term_CONTROL_LANE_2.setDescription(None)
-vocabulary_term_CONTROL_LANE_2.setLabel(None)
-vocabulary_term_CONTROL_LANE_2.setOrdinal(2)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_2)
-
-vocabulary_term_CONTROL_LANE_3 = tr.createNewVocabularyTerm('3')
-vocabulary_term_CONTROL_LANE_3.setDescription(None)
-vocabulary_term_CONTROL_LANE_3.setLabel(None)
-vocabulary_term_CONTROL_LANE_3.setOrdinal(3)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_3)
-
-vocabulary_term_CONTROL_LANE_4 = tr.createNewVocabularyTerm('4')
-vocabulary_term_CONTROL_LANE_4.setDescription(None)
-vocabulary_term_CONTROL_LANE_4.setLabel(None)
-vocabulary_term_CONTROL_LANE_4.setOrdinal(4)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_4)
-
-vocabulary_term_CONTROL_LANE_5 = tr.createNewVocabularyTerm('5')
-vocabulary_term_CONTROL_LANE_5.setDescription(None)
-vocabulary_term_CONTROL_LANE_5.setLabel(None)
-vocabulary_term_CONTROL_LANE_5.setOrdinal(5)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_5)
-
-vocabulary_term_CONTROL_LANE_6 = tr.createNewVocabularyTerm('6')
-vocabulary_term_CONTROL_LANE_6.setDescription(None)
-vocabulary_term_CONTROL_LANE_6.setLabel(None)
-vocabulary_term_CONTROL_LANE_6.setOrdinal(6)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_6)
-
-vocabulary_term_CONTROL_LANE_7 = tr.createNewVocabularyTerm('7')
-vocabulary_term_CONTROL_LANE_7.setDescription(None)
-vocabulary_term_CONTROL_LANE_7.setLabel(None)
-vocabulary_term_CONTROL_LANE_7.setOrdinal(7)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_7)
-
-vocabulary_term_CONTROL_LANE_8 = tr.createNewVocabularyTerm('8')
-vocabulary_term_CONTROL_LANE_8.setDescription(None)
-vocabulary_term_CONTROL_LANE_8.setLabel(None)
-vocabulary_term_CONTROL_LANE_8.setOrdinal(8)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_8)
-
-vocabulary_term_CONTROL_LANE_NONE = tr.createNewVocabularyTerm('NONE')
-vocabulary_term_CONTROL_LANE_NONE.setDescription(None)
-vocabulary_term_CONTROL_LANE_NONE.setLabel(None)
-vocabulary_term_CONTROL_LANE_NONE.setOrdinal(9)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_NONE)
-
-vocabulary_term_CONTROL_LANE_0 = tr.createNewVocabularyTerm('0')
-vocabulary_term_CONTROL_LANE_0.setDescription(None)
-vocabulary_term_CONTROL_LANE_0.setLabel(None)
-vocabulary_term_CONTROL_LANE_0.setOrdinal(10)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_0)
-
-vocabulary_CYCLES = tr.getOrCreateNewVocabulary('CYCLES')
-vocabulary_CYCLES.setDescription('Number of cycles')
-vocabulary_CYCLES.setUrlTemplate(None)
-vocabulary_CYCLES.setManagedInternally(False)
-vocabulary_CYCLES.setInternalNamespace(False)
-vocabulary_CYCLES.setChosenFromList(True)
-
-vocabulary_term_CYCLES_36 = tr.createNewVocabularyTerm('36')
-vocabulary_term_CYCLES_36.setDescription(None)
-vocabulary_term_CYCLES_36.setLabel(None)
-vocabulary_term_CYCLES_36.setOrdinal(1)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_36)
-
-vocabulary_term_CYCLES_50 = tr.createNewVocabularyTerm('50')
-vocabulary_term_CYCLES_50.setDescription(None)
-vocabulary_term_CYCLES_50.setLabel(None)
-vocabulary_term_CYCLES_50.setOrdinal(2)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_50)
-
-vocabulary_term_CYCLES_76 = tr.createNewVocabularyTerm('76')
-vocabulary_term_CYCLES_76.setDescription(None)
-vocabulary_term_CYCLES_76.setLabel(None)
-vocabulary_term_CYCLES_76.setOrdinal(3)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_76)
-
-vocabulary_term_CYCLES_101 = tr.createNewVocabularyTerm('101')
-vocabulary_term_CYCLES_101.setDescription(None)
-vocabulary_term_CYCLES_101.setLabel(None)
-vocabulary_term_CYCLES_101.setOrdinal(4)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_101)
-
-vocabulary_term_CYCLES_51 = tr.createNewVocabularyTerm('51')
-vocabulary_term_CYCLES_51.setDescription(None)
-vocabulary_term_CYCLES_51.setLabel(None)
-vocabulary_term_CYCLES_51.setOrdinal(5)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_51)
-
-vocabulary_term_CYCLES_58 = tr.createNewVocabularyTerm('58')
-vocabulary_term_CYCLES_58.setDescription(None)
-vocabulary_term_CYCLES_58.setLabel(None)
-vocabulary_term_CYCLES_58.setOrdinal(6)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_58)
-
-vocabulary_term_CYCLES_125 = tr.createNewVocabularyTerm('125')
-vocabulary_term_CYCLES_125.setDescription(None)
-vocabulary_term_CYCLES_125.setLabel(None)
-vocabulary_term_CYCLES_125.setOrdinal(7)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_125)
-
-vocabulary_term_CYCLES_151 = tr.createNewVocabularyTerm('151')
-vocabulary_term_CYCLES_151.setDescription(None)
-vocabulary_term_CYCLES_151.setLabel(None)
-vocabulary_term_CYCLES_151.setOrdinal(8)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_151)
-
-vocabulary_term_CYCLES_100 = tr.createNewVocabularyTerm('100')
-vocabulary_term_CYCLES_100.setDescription(None)
-vocabulary_term_CYCLES_100.setLabel(None)
-vocabulary_term_CYCLES_100.setOrdinal(9)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_100)
-
-vocabulary_term_CYCLES_108 = tr.createNewVocabularyTerm('108')
-vocabulary_term_CYCLES_108.setDescription(None)
-vocabulary_term_CYCLES_108.setLabel(None)
-vocabulary_term_CYCLES_108.setOrdinal(10)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_108)
-
-vocabulary_term_CYCLES_150 = tr.createNewVocabularyTerm('150')
-vocabulary_term_CYCLES_150.setDescription(None)
-vocabulary_term_CYCLES_150.setLabel(None)
-vocabulary_term_CYCLES_150.setOrdinal(11)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_150)
-
-vocabulary_term_CYCLES_49 = tr.createNewVocabularyTerm('49')
-vocabulary_term_CYCLES_49.setDescription(None)
-vocabulary_term_CYCLES_49.setLabel(None)
-vocabulary_term_CYCLES_49.setOrdinal(12)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_49)
-
-vocabulary_term_CYCLES_55 = tr.createNewVocabularyTerm('55')
-vocabulary_term_CYCLES_55.setDescription(None)
-vocabulary_term_CYCLES_55.setLabel(None)
-vocabulary_term_CYCLES_55.setOrdinal(13)
-vocabulary_CYCLES.addTerm(vocabulary_term_CYCLES_55)
-
-vocabulary_END_TYPE = tr.getOrCreateNewVocabulary('END_TYPE')
-vocabulary_END_TYPE.setDescription('Sequencing method')
-vocabulary_END_TYPE.setUrlTemplate(None)
-vocabulary_END_TYPE.setManagedInternally(False)
-vocabulary_END_TYPE.setInternalNamespace(False)
-vocabulary_END_TYPE.setChosenFromList(True)
-
-vocabulary_term_END_TYPE_SINGLE_READ = tr.createNewVocabularyTerm('SINGLE_READ')
-vocabulary_term_END_TYPE_SINGLE_READ.setDescription(None)
-vocabulary_term_END_TYPE_SINGLE_READ.setLabel(None)
-vocabulary_term_END_TYPE_SINGLE_READ.setOrdinal(1)
-vocabulary_END_TYPE.addTerm(vocabulary_term_END_TYPE_SINGLE_READ)
-
-vocabulary_term_END_TYPE_PAIRED_END = tr.createNewVocabularyTerm('PAIRED_END')
-vocabulary_term_END_TYPE_PAIRED_END.setDescription(None)
-vocabulary_term_END_TYPE_PAIRED_END.setLabel(None)
-vocabulary_term_END_TYPE_PAIRED_END.setOrdinal(2)
-vocabulary_END_TYPE.addTerm(vocabulary_term_END_TYPE_PAIRED_END)
-
-vocabulary_EXPERIMENT_DESIGN = tr.getOrCreateNewVocabulary('EXPERIMENT_DESIGN')
-vocabulary_EXPERIMENT_DESIGN.setDescription('General Intent')
-vocabulary_EXPERIMENT_DESIGN.setUrlTemplate(None)
-vocabulary_EXPERIMENT_DESIGN.setManagedInternally(False)
-vocabulary_EXPERIMENT_DESIGN.setInternalNamespace(False)
-vocabulary_EXPERIMENT_DESIGN.setChosenFromList(True)
-
-vocabulary_term_EXPERIMENT_DESIGN_BINDING_SITE_IDENTIFICATION = tr.createNewVocabularyTerm('BINDING_SITE_IDENTIFICATION')
-vocabulary_term_EXPERIMENT_DESIGN_BINDING_SITE_IDENTIFICATION.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_BINDING_SITE_IDENTIFICATION.setLabel('Binding Site Identification')
-vocabulary_term_EXPERIMENT_DESIGN_BINDING_SITE_IDENTIFICATION.setOrdinal(1)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_BINDING_SITE_IDENTIFICATION)
-
-vocabulary_term_EXPERIMENT_DESIGN_CHROMATIN_MARKS = tr.createNewVocabularyTerm('CHROMATIN_MARKS')
-vocabulary_term_EXPERIMENT_DESIGN_CHROMATIN_MARKS.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_CHROMATIN_MARKS.setLabel('Chromatin Marks')
-vocabulary_term_EXPERIMENT_DESIGN_CHROMATIN_MARKS.setOrdinal(2)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_CHROMATIN_MARKS)
-
-vocabulary_term_EXPERIMENT_DESIGN_COMPARATIVE_GENOMIC_HYBRIDIZATION = tr.createNewVocabularyTerm('COMPARATIVE_GENOMIC_HYBRIDIZATION')
-vocabulary_term_EXPERIMENT_DESIGN_COMPARATIVE_GENOMIC_HYBRIDIZATION.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_COMPARATIVE_GENOMIC_HYBRIDIZATION.setLabel('Comparative Genomic Hybridization')
-vocabulary_term_EXPERIMENT_DESIGN_COMPARATIVE_GENOMIC_HYBRIDIZATION.setOrdinal(3)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_COMPARATIVE_GENOMIC_HYBRIDIZATION)
-
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_EXPRESSION = tr.createNewVocabularyTerm('DIFFERENTIAL_EXPRESSION')
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_EXPRESSION.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_EXPRESSION.setLabel('Differential Expression')
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_EXPRESSION.setOrdinal(4)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_EXPRESSION)
-
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_SPLICING = tr.createNewVocabularyTerm('DIFFERENTIAL_SPLICING')
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_SPLICING.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_SPLICING.setLabel('Differential Splicing')
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_SPLICING.setOrdinal(5)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_SPLICING)
-
-vocabulary_term_EXPERIMENT_DESIGN_EXPRESSION = tr.createNewVocabularyTerm('EXPRESSION')
-vocabulary_term_EXPERIMENT_DESIGN_EXPRESSION.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_EXPRESSION.setLabel('Expression')
-vocabulary_term_EXPERIMENT_DESIGN_EXPRESSION.setOrdinal(6)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_EXPRESSION)
-
-vocabulary_term_EXPERIMENT_DESIGN_SEQUENCE_ENRICHMENT = tr.createNewVocabularyTerm('SEQUENCE_ENRICHMENT')
-vocabulary_term_EXPERIMENT_DESIGN_SEQUENCE_ENRICHMENT.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_SEQUENCE_ENRICHMENT.setLabel('Sequence Enrichment')
-vocabulary_term_EXPERIMENT_DESIGN_SEQUENCE_ENRICHMENT.setOrdinal(7)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_SEQUENCE_ENRICHMENT)
-
-vocabulary_term_EXPERIMENT_DESIGN_TRANSCRIPT_IDENTIFICATION = tr.createNewVocabularyTerm('TRANSCRIPT_IDENTIFICATION')
-vocabulary_term_EXPERIMENT_DESIGN_TRANSCRIPT_IDENTIFICATION.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_TRANSCRIPT_IDENTIFICATION.setLabel('Transcript Identification')
-vocabulary_term_EXPERIMENT_DESIGN_TRANSCRIPT_IDENTIFICATION.setOrdinal(8)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_TRANSCRIPT_IDENTIFICATION)
-
-vocabulary_term_EXPERIMENT_DESIGN_OTHER = tr.createNewVocabularyTerm('OTHER')
-vocabulary_term_EXPERIMENT_DESIGN_OTHER.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_OTHER.setLabel('Other')
-vocabulary_term_EXPERIMENT_DESIGN_OTHER.setOrdinal(9)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_OTHER)
-
-vocabulary_INDEX1 = tr.getOrCreateNewVocabulary('INDEX1')
-vocabulary_INDEX1.setDescription('Index 1 for Illumina Indexing')
-vocabulary_INDEX1.setUrlTemplate(None)
-vocabulary_INDEX1.setManagedInternally(False)
-vocabulary_INDEX1.setInternalNamespace(False)
-vocabulary_INDEX1.setChosenFromList(True)
-
-vocabulary_term_INDEX1_ATCACGA = tr.createNewVocabularyTerm('ATCACGA')
-vocabulary_term_INDEX1_ATCACGA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_ATCACGA.setLabel('Index1 ATCACGA')
-vocabulary_term_INDEX1_ATCACGA.setOrdinal(1)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_ATCACGA)
-
-vocabulary_term_INDEX1_CGATGTA = tr.createNewVocabularyTerm('CGATGTA')
-vocabulary_term_INDEX1_CGATGTA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_CGATGTA.setLabel('Index2 CGATGTA')
-vocabulary_term_INDEX1_CGATGTA.setOrdinal(2)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CGATGTA)
-
-vocabulary_term_INDEX1_TTAGGCA = tr.createNewVocabularyTerm('TTAGGCA')
-vocabulary_term_INDEX1_TTAGGCA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_TTAGGCA.setLabel('Index3 TTAGGCA')
-vocabulary_term_INDEX1_TTAGGCA.setOrdinal(3)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TTAGGCA)
-
-vocabulary_term_INDEX1_TGACCAA = tr.createNewVocabularyTerm('TGACCAA')
-vocabulary_term_INDEX1_TGACCAA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_TGACCAA.setLabel('Index4 TGACCAA')
-vocabulary_term_INDEX1_TGACCAA.setOrdinal(4)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TGACCAA)
-
-vocabulary_term_INDEX1_ACAGTGA = tr.createNewVocabularyTerm('ACAGTGA')
-vocabulary_term_INDEX1_ACAGTGA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_ACAGTGA.setLabel('Index5 ACAGTGA')
-vocabulary_term_INDEX1_ACAGTGA.setOrdinal(5)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_ACAGTGA)
-
-vocabulary_term_INDEX1_GCCAATA = tr.createNewVocabularyTerm('GCCAATA')
-vocabulary_term_INDEX1_GCCAATA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_GCCAATA.setLabel('Index6 GCCAATA')
-vocabulary_term_INDEX1_GCCAATA.setOrdinal(6)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GCCAATA)
-
-vocabulary_term_INDEX1_CAGATCA = tr.createNewVocabularyTerm('CAGATCA')
-vocabulary_term_INDEX1_CAGATCA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_CAGATCA.setLabel('Index7 CAGATCA')
-vocabulary_term_INDEX1_CAGATCA.setOrdinal(7)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CAGATCA)
-
-vocabulary_term_INDEX1_ACTTGAA = tr.createNewVocabularyTerm('ACTTGAA')
-vocabulary_term_INDEX1_ACTTGAA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_ACTTGAA.setLabel('Index8 ACTTGAA')
-vocabulary_term_INDEX1_ACTTGAA.setOrdinal(8)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_ACTTGAA)
-
-vocabulary_term_INDEX1_GATCAGA = tr.createNewVocabularyTerm('GATCAGA')
-vocabulary_term_INDEX1_GATCAGA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_GATCAGA.setLabel('Index9 GATCAGA')
-vocabulary_term_INDEX1_GATCAGA.setOrdinal(9)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GATCAGA)
-
-vocabulary_term_INDEX1_TAGCTTA = tr.createNewVocabularyTerm('TAGCTTA')
-vocabulary_term_INDEX1_TAGCTTA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_TAGCTTA.setLabel('Index10 TAGCTTA')
-vocabulary_term_INDEX1_TAGCTTA.setOrdinal(10)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TAGCTTA)
-
-vocabulary_term_INDEX1_GGCTACA = tr.createNewVocabularyTerm('GGCTACA')
-vocabulary_term_INDEX1_GGCTACA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_GGCTACA.setLabel('Index11 GGCTACA')
-vocabulary_term_INDEX1_GGCTACA.setOrdinal(11)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GGCTACA)
-
-vocabulary_term_INDEX1_CTTGTAA = tr.createNewVocabularyTerm('CTTGTAA')
-vocabulary_term_INDEX1_CTTGTAA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_CTTGTAA.setLabel('Index12 CTTGTAA')
-vocabulary_term_INDEX1_CTTGTAA.setOrdinal(12)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CTTGTAA)
-
-vocabulary_term_INDEX1_AGATACA = tr.createNewVocabularyTerm('AGATACA')
-vocabulary_term_INDEX1_AGATACA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_AGATACA.setLabel('Index13 AGATAC')
-vocabulary_term_INDEX1_AGATACA.setOrdinal(13)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_AGATACA)
-
-vocabulary_term_INDEX1_AGTTCCG = tr.createNewVocabularyTerm('AGTTCCG')
-vocabulary_term_INDEX1_AGTTCCG.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_AGTTCCG.setLabel('Index14 AGTTCCG')
-vocabulary_term_INDEX1_AGTTCCG.setOrdinal(14)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_AGTTCCG)
-
-vocabulary_term_INDEX1_ATGTCAG = tr.createNewVocabularyTerm('ATGTCAG')
-vocabulary_term_INDEX1_ATGTCAG.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_ATGTCAG.setLabel('Index15 ATGTCAG')
-vocabulary_term_INDEX1_ATGTCAG.setOrdinal(15)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_ATGTCAG)
-
-vocabulary_term_INDEX1_CCGTCCC = tr.createNewVocabularyTerm('CCGTCCC')
-vocabulary_term_INDEX1_CCGTCCC.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_CCGTCCC.setLabel('Index16 CCGTCCC')
-vocabulary_term_INDEX1_CCGTCCC.setOrdinal(16)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CCGTCCC)
-
-vocabulary_term_INDEX1_GTCCGCA = tr.createNewVocabularyTerm('GTCCGCA')
-vocabulary_term_INDEX1_GTCCGCA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_GTCCGCA.setLabel('Index18 GTCCGCA')
-vocabulary_term_INDEX1_GTCCGCA.setOrdinal(17)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GTCCGCA)
-
-vocabulary_term_INDEX1_GTGAAAC = tr.createNewVocabularyTerm('GTGAAAC')
-vocabulary_term_INDEX1_GTGAAAC.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_GTGAAAC.setLabel('Index19 GTGAAAC')
-vocabulary_term_INDEX1_GTGAAAC.setOrdinal(18)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GTGAAAC)
-
-vocabulary_term_INDEX1_GTGGCCT = tr.createNewVocabularyTerm('GTGGCCT')
-vocabulary_term_INDEX1_GTGGCCT.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_GTGGCCT.setLabel('Index20 GTGGCCT')
-vocabulary_term_INDEX1_GTGGCCT.setOrdinal(19)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GTGGCCT)
-
-vocabulary_term_INDEX1_GTTTCGG = tr.createNewVocabularyTerm('GTTTCGG')
-vocabulary_term_INDEX1_GTTTCGG.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_GTTTCGG.setLabel('Index21 GTTTCGG')
-vocabulary_term_INDEX1_GTTTCGG.setOrdinal(20)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GTTTCGG)
-
-vocabulary_term_INDEX1_CGTACGT = tr.createNewVocabularyTerm('CGTACGT')
-vocabulary_term_INDEX1_CGTACGT.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_CGTACGT.setLabel('Index22 CGTACGT')
-vocabulary_term_INDEX1_CGTACGT.setOrdinal(21)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CGTACGT)
-
-vocabulary_term_INDEX1_GAGTGGA = tr.createNewVocabularyTerm('GAGTGGA')
-vocabulary_term_INDEX1_GAGTGGA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_GAGTGGA.setLabel('Index23 GAGTGGA')
-vocabulary_term_INDEX1_GAGTGGA.setOrdinal(22)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GAGTGGA)
-
-vocabulary_term_INDEX1_ACTGATA = tr.createNewVocabularyTerm('ACTGATA')
-vocabulary_term_INDEX1_ACTGATA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_ACTGATA.setLabel('Index25 ACTGATA')
-vocabulary_term_INDEX1_ACTGATA.setOrdinal(23)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_ACTGATA)
-
-vocabulary_term_INDEX1_ATTCCTT = tr.createNewVocabularyTerm('ATTCCTT')
-vocabulary_term_INDEX1_ATTCCTT.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_ATTCCTT.setLabel('Index27 ATTCCTT')
-vocabulary_term_INDEX1_ATTCCTT.setOrdinal(24)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_ATTCCTT)
-
-vocabulary_term_INDEX1_TAAGGCGA = tr.createNewVocabularyTerm('TAAGGCGA')
-vocabulary_term_INDEX1_TAAGGCGA.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_TAAGGCGA.setLabel('Index1 (i7) N701 TAAGGCGA')
-vocabulary_term_INDEX1_TAAGGCGA.setOrdinal(25)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TAAGGCGA)
-
-vocabulary_term_INDEX1_CGTACTAG = tr.createNewVocabularyTerm('CGTACTAG')
-vocabulary_term_INDEX1_CGTACTAG.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_CGTACTAG.setLabel('Index1 (i7) N702 CGTACTAG')
-vocabulary_term_INDEX1_CGTACTAG.setOrdinal(26)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CGTACTAG)
-
-vocabulary_term_INDEX1_AGGCAGAA = tr.createNewVocabularyTerm('AGGCAGAA')
-vocabulary_term_INDEX1_AGGCAGAA.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_AGGCAGAA.setLabel('Index1 (i7) N703 AGGCAGAA')
-vocabulary_term_INDEX1_AGGCAGAA.setOrdinal(27)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_AGGCAGAA)
-
-vocabulary_term_INDEX1_TCCTGAGC = tr.createNewVocabularyTerm('TCCTGAGC')
-vocabulary_term_INDEX1_TCCTGAGC.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_TCCTGAGC.setLabel('Index1 (i7) N704 TCCTGAGC')
-vocabulary_term_INDEX1_TCCTGAGC.setOrdinal(28)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TCCTGAGC)
-
-vocabulary_term_INDEX1_GGACTCCT = tr.createNewVocabularyTerm('GGACTCCT')
-vocabulary_term_INDEX1_GGACTCCT.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_GGACTCCT.setLabel('Index1 (i7) N705 GGACTCCT')
-vocabulary_term_INDEX1_GGACTCCT.setOrdinal(29)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GGACTCCT)
-
-vocabulary_term_INDEX1_TAGGCATG = tr.createNewVocabularyTerm('TAGGCATG')
-vocabulary_term_INDEX1_TAGGCATG.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_TAGGCATG.setLabel('Index1 (i7) N706 TAGGCATG')
-vocabulary_term_INDEX1_TAGGCATG.setOrdinal(30)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TAGGCATG)
-
-vocabulary_term_INDEX1_CTCTCTAC = tr.createNewVocabularyTerm('CTCTCTAC')
-vocabulary_term_INDEX1_CTCTCTAC.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_CTCTCTAC.setLabel('Index1 (i7) N707 CTCTCTAC')
-vocabulary_term_INDEX1_CTCTCTAC.setOrdinal(31)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CTCTCTAC)
-
-vocabulary_term_INDEX1_CAGAGAGG = tr.createNewVocabularyTerm('CAGAGAGG')
-vocabulary_term_INDEX1_CAGAGAGG.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_CAGAGAGG.setLabel('Index1 (i7) N708 CAGAGAGG')
-vocabulary_term_INDEX1_CAGAGAGG.setOrdinal(32)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CAGAGAGG)
-
-vocabulary_term_INDEX1_GCTACGCT = tr.createNewVocabularyTerm('GCTACGCT')
-vocabulary_term_INDEX1_GCTACGCT.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_GCTACGCT.setLabel('Index1 (i7) N709 GCTACGCT')
-vocabulary_term_INDEX1_GCTACGCT.setOrdinal(33)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GCTACGCT)
-
-vocabulary_term_INDEX1_CGAGGCTG = tr.createNewVocabularyTerm('CGAGGCTG')
-vocabulary_term_INDEX1_CGAGGCTG.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_CGAGGCTG.setLabel('Index1 (i7) N710 CGAGGCTG')
-vocabulary_term_INDEX1_CGAGGCTG.setOrdinal(34)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CGAGGCTG)
-
-vocabulary_term_INDEX1_AAGAGGCA = tr.createNewVocabularyTerm('AAGAGGCA')
-vocabulary_term_INDEX1_AAGAGGCA.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_AAGAGGCA.setLabel('Index1 (i7) N711 AAGAGGCA')
-vocabulary_term_INDEX1_AAGAGGCA.setOrdinal(35)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_AAGAGGCA)
-
-vocabulary_term_INDEX1_GTAGAGGA = tr.createNewVocabularyTerm('GTAGAGGA')
-vocabulary_term_INDEX1_GTAGAGGA.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_GTAGAGGA.setLabel('Index1 (i7) N712 GTAGAGGA')
-vocabulary_term_INDEX1_GTAGAGGA.setOrdinal(36)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GTAGAGGA)
-
-vocabulary_term_INDEX1_AAGACTA = tr.createNewVocabularyTerm('AAGACTA')
-vocabulary_term_INDEX1_AAGACTA.setDescription(None)
-vocabulary_term_INDEX1_AAGACTA.setLabel('02 AAGACT')
-vocabulary_term_INDEX1_AAGACTA.setOrdinal(37)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_AAGACTA)
-
-vocabulary_term_INDEX1_ACTTCAA = tr.createNewVocabularyTerm('ACTTCAA')
-vocabulary_term_INDEX1_ACTTCAA.setDescription(None)
-vocabulary_term_INDEX1_ACTTCAA.setLabel('10 ACTTCA')
-vocabulary_term_INDEX1_ACTTCAA.setOrdinal(38)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_ACTTCAA)
-
-vocabulary_term_INDEX1_AGGTTGA = tr.createNewVocabularyTerm('AGGTTGA')
-vocabulary_term_INDEX1_AGGTTGA.setDescription(None)
-vocabulary_term_INDEX1_AGGTTGA.setLabel('17 AGGTTG')
-vocabulary_term_INDEX1_AGGTTGA.setOrdinal(39)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_AGGTTGA)
-
-vocabulary_term_INDEX1_TTCGTCA = tr.createNewVocabularyTerm('TTCGTCA')
-vocabulary_term_INDEX1_TTCGTCA.setDescription(None)
-vocabulary_term_INDEX1_TTCGTCA.setLabel('17 TTCGTCA')
-vocabulary_term_INDEX1_TTCGTCA.setOrdinal(40)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TTCGTCA)
-
-vocabulary_term_INDEX1_AGCATAA = tr.createNewVocabularyTerm('AGCATAA')
-vocabulary_term_INDEX1_AGCATAA.setDescription(None)
-vocabulary_term_INDEX1_AGCATAA.setLabel('20 AGCATAA')
-vocabulary_term_INDEX1_AGCATAA.setOrdinal(41)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_AGCATAA)
-
-vocabulary_term_INDEX1_ATACGCA = tr.createNewVocabularyTerm('ATACGCA')
-vocabulary_term_INDEX1_ATACGCA.setDescription(None)
-vocabulary_term_INDEX1_ATACGCA.setLabel('20 ATACGC')
-vocabulary_term_INDEX1_ATACGCA.setOrdinal(42)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_ATACGCA)
-
-vocabulary_term_INDEX1_CAGATGA = tr.createNewVocabularyTerm('CAGATGA')
-vocabulary_term_INDEX1_CAGATGA.setDescription(None)
-vocabulary_term_INDEX1_CAGATGA.setLabel('28 CAGATG')
-vocabulary_term_INDEX1_CAGATGA.setOrdinal(43)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CAGATGA)
-
-vocabulary_term_INDEX1_CCGAATA = tr.createNewVocabularyTerm('CCGAATA')
-vocabulary_term_INDEX1_CCGAATA.setDescription(None)
-vocabulary_term_INDEX1_CCGAATA.setLabel('34 CCGAAT')
-vocabulary_term_INDEX1_CCGAATA.setOrdinal(44)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CCGAATA)
-
-vocabulary_term_INDEX1_CGCTCGA = tr.createNewVocabularyTerm('CGCTCGA')
-vocabulary_term_INDEX1_CGCTCGA.setDescription(None)
-vocabulary_term_INDEX1_CGCTCGA.setLabel('43 CGCTCG')
-vocabulary_term_INDEX1_CGCTCGA.setOrdinal(45)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CGCTCGA)
-
-vocabulary_term_INDEX1_CGTATTA = tr.createNewVocabularyTerm('CGTATTA')
-vocabulary_term_INDEX1_CGTATTA.setDescription(None)
-vocabulary_term_INDEX1_CGTATTA.setLabel('45 CGTATT')
-vocabulary_term_INDEX1_CGTATTA.setOrdinal(46)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CGTATTA)
-
-vocabulary_term_INDEX1_CCATGAA = tr.createNewVocabularyTerm('CCATGAA')
-vocabulary_term_INDEX1_CCATGAA.setDescription(None)
-vocabulary_term_INDEX1_CCATGAA.setLabel('50 CCATGAA')
-vocabulary_term_INDEX1_CCATGAA.setOrdinal(47)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CCATGAA)
-
-vocabulary_term_INDEX1_CTGACCA = tr.createNewVocabularyTerm('CTGACCA')
-vocabulary_term_INDEX1_CTGACCA.setDescription(None)
-vocabulary_term_INDEX1_CTGACCA.setLabel('50 CTGACC')
-vocabulary_term_INDEX1_CTGACCA.setOrdinal(48)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CTGACCA)
-
-vocabulary_term_INDEX1_GAAGCCA = tr.createNewVocabularyTerm('GAAGCCA')
-vocabulary_term_INDEX1_GAAGCCA.setDescription(None)
-vocabulary_term_INDEX1_GAAGCCA.setLabel('52 GAAGCC')
-vocabulary_term_INDEX1_GAAGCCA.setOrdinal(49)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GAAGCCA)
-
-vocabulary_term_INDEX1_GCTGAAA = tr.createNewVocabularyTerm('GCTGAAA')
-vocabulary_term_INDEX1_GCTGAAA.setDescription(None)
-vocabulary_term_INDEX1_GCTGAAA.setLabel('59 GCTGAA')
-vocabulary_term_INDEX1_GCTGAAA.setOrdinal(50)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GCTGAAA)
-
-vocabulary_term_INDEX1_GTCGCGA = tr.createNewVocabularyTerm('GTCGCGA')
-vocabulary_term_INDEX1_GTCGCGA.setDescription(None)
-vocabulary_term_INDEX1_GTCGCGA.setLabel('64 GTCGCG')
-vocabulary_term_INDEX1_GTCGCGA.setOrdinal(51)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GTCGCGA)
-
-vocabulary_term_INDEX1_TAAGATA = tr.createNewVocabularyTerm('TAAGATA')
-vocabulary_term_INDEX1_TAAGATA.setDescription(None)
-vocabulary_term_INDEX1_TAAGATA.setLabel('65 TAAGAT')
-vocabulary_term_INDEX1_TAAGATA.setOrdinal(52)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TAAGATA)
-
-vocabulary_term_INDEX1_GCGCTGA = tr.createNewVocabularyTerm('GCGCTGA')
-vocabulary_term_INDEX1_GCGCTGA.setDescription(None)
-vocabulary_term_INDEX1_GCGCTGA.setLabel('66 GCGCTGA')
-vocabulary_term_INDEX1_GCGCTGA.setOrdinal(53)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GCGCTGA)
-
-vocabulary_term_INDEX1_TATCGTA = tr.createNewVocabularyTerm('TATCGTA')
-vocabulary_term_INDEX1_TATCGTA.setDescription(None)
-vocabulary_term_INDEX1_TATCGTA.setLabel('66 TATCGT')
-vocabulary_term_INDEX1_TATCGTA.setOrdinal(54)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TATCGTA)
-
-vocabulary_term_INDEX1_TCCTACA = tr.createNewVocabularyTerm('TCCTACA')
-vocabulary_term_INDEX1_TCCTACA.setDescription(None)
-vocabulary_term_INDEX1_TCCTACA.setLabel('68 TCCTAC')
-vocabulary_term_INDEX1_TCCTACA.setOrdinal(55)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TCCTACA)
-
-vocabulary_term_INDEX1_TCTATAA = tr.createNewVocabularyTerm('TCTATAA')
-vocabulary_term_INDEX1_TCTATAA.setDescription(None)
-vocabulary_term_INDEX1_TCTATAA.setLabel('70 TCTATA')
-vocabulary_term_INDEX1_TCTATAA.setOrdinal(56)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TCTATAA)
-
-vocabulary_term_INDEX1_TTACTTA = tr.createNewVocabularyTerm('TTACTTA')
-vocabulary_term_INDEX1_TTACTTA.setDescription(None)
-vocabulary_term_INDEX1_TTACTTA.setLabel('74 TTACTT')
-vocabulary_term_INDEX1_TTACTTA.setOrdinal(57)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TTACTTA)
-
-vocabulary_term_INDEX1_TTCCGAA = tr.createNewVocabularyTerm('TTCCGAA')
-vocabulary_term_INDEX1_TTCCGAA.setDescription(None)
-vocabulary_term_INDEX1_TTCCGAA.setLabel('75 TTCCGA')
-vocabulary_term_INDEX1_TTCCGAA.setOrdinal(58)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TTCCGAA)
-
-vocabulary_term_INDEX1_ATGTCAA = tr.createNewVocabularyTerm('ATGTCAA')
-vocabulary_term_INDEX1_ATGTCAA.setDescription(None)
-vocabulary_term_INDEX1_ATGTCAA.setLabel('DNA Adapter 15')
-vocabulary_term_INDEX1_ATGTCAA.setOrdinal(59)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_ATGTCAA)
-
-vocabulary_term_INDEX1_CCGTCCA = tr.createNewVocabularyTerm('CCGTCCA')
-vocabulary_term_INDEX1_CCGTCCA.setDescription(None)
-vocabulary_term_INDEX1_CCGTCCA.setLabel('DNA Adapter 16')
-vocabulary_term_INDEX1_CCGTCCA.setOrdinal(60)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CCGTCCA)
-
-vocabulary_term_INDEX1_GTAGAGA = tr.createNewVocabularyTerm('GTAGAGA')
-vocabulary_term_INDEX1_GTAGAGA.setDescription(None)
-vocabulary_term_INDEX1_GTAGAGA.setLabel('DNA Adapter 17')
-vocabulary_term_INDEX1_GTAGAGA.setOrdinal(61)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GTAGAGA)
-
-vocabulary_term_INDEX1_GTGAAAA = tr.createNewVocabularyTerm('GTGAAAA')
-vocabulary_term_INDEX1_GTGAAAA.setDescription(None)
-vocabulary_term_INDEX1_GTGAAAA.setLabel('DNA Adapter 19')
-vocabulary_term_INDEX1_GTGAAAA.setOrdinal(62)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GTGAAAA)
-
-vocabulary_term_INDEX1_GTGGCCA = tr.createNewVocabularyTerm('GTGGCCA')
-vocabulary_term_INDEX1_GTGGCCA.setDescription(None)
-vocabulary_term_INDEX1_GTGGCCA.setLabel('DNA Adapter 20')
-vocabulary_term_INDEX1_GTGGCCA.setOrdinal(63)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GTGGCCA)
-
-vocabulary_term_INDEX1_GTTTCGA = tr.createNewVocabularyTerm('GTTTCGA')
-vocabulary_term_INDEX1_GTTTCGA.setDescription(None)
-vocabulary_term_INDEX1_GTTTCGA.setLabel('DNA Adapter 21')
-vocabulary_term_INDEX1_GTTTCGA.setOrdinal(64)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GTTTCGA)
-
-vocabulary_term_INDEX1_CGTACGA = tr.createNewVocabularyTerm('CGTACGA')
-vocabulary_term_INDEX1_CGTACGA.setDescription(None)
-vocabulary_term_INDEX1_CGTACGA.setLabel('DNA Adapter 22')
-vocabulary_term_INDEX1_CGTACGA.setOrdinal(65)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CGTACGA)
-
-vocabulary_term_INDEX1_GGTAGCA = tr.createNewVocabularyTerm('GGTAGCA')
-vocabulary_term_INDEX1_GGTAGCA.setDescription(None)
-vocabulary_term_INDEX1_GGTAGCA.setLabel('DNA Adapter 24')
-vocabulary_term_INDEX1_GGTAGCA.setOrdinal(66)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GGTAGCA)
-
-vocabulary_term_INDEX1_ATGAGCA = tr.createNewVocabularyTerm('ATGAGCA')
-vocabulary_term_INDEX1_ATGAGCA.setDescription(None)
-vocabulary_term_INDEX1_ATGAGCA.setLabel('DNA Adapter 26')
-vocabulary_term_INDEX1_ATGAGCA.setOrdinal(67)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_ATGAGCA)
-
-vocabulary_term_INDEX1_ATTCCTA = tr.createNewVocabularyTerm('ATTCCTA')
-vocabulary_term_INDEX1_ATTCCTA.setDescription(None)
-vocabulary_term_INDEX1_ATTCCTA.setLabel('DNA Adapter 27')
-vocabulary_term_INDEX1_ATTCCTA.setOrdinal(68)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_ATTCCTA)
-
-vocabulary_term_INDEX1_CAAAAGA = tr.createNewVocabularyTerm('CAAAAGA')
-vocabulary_term_INDEX1_CAAAAGA.setDescription(None)
-vocabulary_term_INDEX1_CAAAAGA.setLabel('DNA Adapter 28')
-vocabulary_term_INDEX1_CAAAAGA.setOrdinal(69)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CAAAAGA)
-
-vocabulary_term_INDEX1_CAACTAA = tr.createNewVocabularyTerm('CAACTAA')
-vocabulary_term_INDEX1_CAACTAA.setDescription(None)
-vocabulary_term_INDEX1_CAACTAA.setLabel('DNA Adapter 29')
-vocabulary_term_INDEX1_CAACTAA.setOrdinal(70)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CAACTAA)
-
-vocabulary_term_INDEX1_CACCGGA = tr.createNewVocabularyTerm('CACCGGA')
-vocabulary_term_INDEX1_CACCGGA.setDescription(None)
-vocabulary_term_INDEX1_CACCGGA.setLabel('DNA Adapter 30')
-vocabulary_term_INDEX1_CACCGGA.setOrdinal(71)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CACCGGA)
-
-vocabulary_term_INDEX1_CACGATA = tr.createNewVocabularyTerm('CACGATA')
-vocabulary_term_INDEX1_CACGATA.setDescription(None)
-vocabulary_term_INDEX1_CACGATA.setLabel('DNA Adapter 31')
-vocabulary_term_INDEX1_CACGATA.setOrdinal(72)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CACGATA)
-
-vocabulary_term_INDEX1_CACTCAA = tr.createNewVocabularyTerm('CACTCAA')
-vocabulary_term_INDEX1_CACTCAA.setDescription(None)
-vocabulary_term_INDEX1_CACTCAA.setLabel('DNA Adapter 32')
-vocabulary_term_INDEX1_CACTCAA.setOrdinal(73)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CACTCAA)
-
-vocabulary_term_INDEX1_CAGGCGA = tr.createNewVocabularyTerm('CAGGCGA')
-vocabulary_term_INDEX1_CAGGCGA.setDescription(None)
-vocabulary_term_INDEX1_CAGGCGA.setLabel('DNA Adapter 33')
-vocabulary_term_INDEX1_CAGGCGA.setOrdinal(74)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CAGGCGA)
-
-vocabulary_term_INDEX1_CATGGCA = tr.createNewVocabularyTerm('CATGGCA')
-vocabulary_term_INDEX1_CATGGCA.setDescription(None)
-vocabulary_term_INDEX1_CATGGCA.setLabel('DNA Adapter 34')
-vocabulary_term_INDEX1_CATGGCA.setOrdinal(75)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CATGGCA)
-
-vocabulary_term_INDEX1_CATTTTA = tr.createNewVocabularyTerm('CATTTTA')
-vocabulary_term_INDEX1_CATTTTA.setDescription(None)
-vocabulary_term_INDEX1_CATTTTA.setLabel('DNA Adapter 35')
-vocabulary_term_INDEX1_CATTTTA.setOrdinal(76)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CATTTTA)
-
-vocabulary_term_INDEX1_CCAACAA = tr.createNewVocabularyTerm('CCAACAA')
-vocabulary_term_INDEX1_CCAACAA.setDescription(None)
-vocabulary_term_INDEX1_CCAACAA.setLabel('DNA Adapter 36')
-vocabulary_term_INDEX1_CCAACAA.setOrdinal(77)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CCAACAA)
-
-vocabulary_term_INDEX1_CGGAATA = tr.createNewVocabularyTerm('CGGAATA')
-vocabulary_term_INDEX1_CGGAATA.setDescription(None)
-vocabulary_term_INDEX1_CGGAATA.setLabel('DNA Adapter 37')
-vocabulary_term_INDEX1_CGGAATA.setOrdinal(78)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CGGAATA)
-
-vocabulary_term_INDEX1_CTAGCTA = tr.createNewVocabularyTerm('CTAGCTA')
-vocabulary_term_INDEX1_CTAGCTA.setDescription(None)
-vocabulary_term_INDEX1_CTAGCTA.setLabel('DNA Adapter 38')
-vocabulary_term_INDEX1_CTAGCTA.setOrdinal(79)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CTAGCTA)
-
-vocabulary_term_INDEX1_CTATACA = tr.createNewVocabularyTerm('CTATACA')
-vocabulary_term_INDEX1_CTATACA.setDescription(None)
-vocabulary_term_INDEX1_CTATACA.setLabel('DNA Adapter 39')
-vocabulary_term_INDEX1_CTATACA.setOrdinal(80)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CTATACA)
-
-vocabulary_term_INDEX1_CTCAGAA = tr.createNewVocabularyTerm('CTCAGAA')
-vocabulary_term_INDEX1_CTCAGAA.setDescription(None)
-vocabulary_term_INDEX1_CTCAGAA.setLabel('DNA Adapter 40')
-vocabulary_term_INDEX1_CTCAGAA.setOrdinal(81)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CTCAGAA)
-
-vocabulary_term_INDEX1_GACGACA = tr.createNewVocabularyTerm('GACGACA')
-vocabulary_term_INDEX1_GACGACA.setDescription(None)
-vocabulary_term_INDEX1_GACGACA.setLabel('DNA Adapter 41')
-vocabulary_term_INDEX1_GACGACA.setOrdinal(82)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GACGACA)
-
-vocabulary_term_INDEX1_TAATCGA = tr.createNewVocabularyTerm('TAATCGA')
-vocabulary_term_INDEX1_TAATCGA.setDescription(None)
-vocabulary_term_INDEX1_TAATCGA.setLabel('DNA Adapter 42')
-vocabulary_term_INDEX1_TAATCGA.setOrdinal(83)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TAATCGA)
-
-vocabulary_term_INDEX1_TACAGCA = tr.createNewVocabularyTerm('TACAGCA')
-vocabulary_term_INDEX1_TACAGCA.setDescription(None)
-vocabulary_term_INDEX1_TACAGCA.setLabel('DNA Adapter 43')
-vocabulary_term_INDEX1_TACAGCA.setOrdinal(84)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TACAGCA)
-
-vocabulary_term_INDEX1_TATAATA = tr.createNewVocabularyTerm('TATAATA')
-vocabulary_term_INDEX1_TATAATA.setDescription(None)
-vocabulary_term_INDEX1_TATAATA.setLabel('DNA Adapter 44')
-vocabulary_term_INDEX1_TATAATA.setOrdinal(85)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TATAATA)
-
-vocabulary_term_INDEX1_TCATTCA = tr.createNewVocabularyTerm('TCATTCA')
-vocabulary_term_INDEX1_TCATTCA.setDescription(None)
-vocabulary_term_INDEX1_TCATTCA.setLabel('DNA Adapter 45')
-vocabulary_term_INDEX1_TCATTCA.setOrdinal(86)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TCATTCA)
-
-vocabulary_term_INDEX1_TCCCGAA = tr.createNewVocabularyTerm('TCCCGAA')
-vocabulary_term_INDEX1_TCCCGAA.setDescription(None)
-vocabulary_term_INDEX1_TCCCGAA.setLabel('DNA Adapter 46')
-vocabulary_term_INDEX1_TCCCGAA.setOrdinal(87)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TCCCGAA)
-
-vocabulary_term_INDEX1_TCGAAGA = tr.createNewVocabularyTerm('TCGAAGA')
-vocabulary_term_INDEX1_TCGAAGA.setDescription(None)
-vocabulary_term_INDEX1_TCGAAGA.setLabel('DNA Adapter 47')
-vocabulary_term_INDEX1_TCGAAGA.setOrdinal(88)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TCGAAGA)
-
-vocabulary_term_INDEX1_TCGGCAA = tr.createNewVocabularyTerm('TCGGCAA')
-vocabulary_term_INDEX1_TCGGCAA.setDescription(None)
-vocabulary_term_INDEX1_TCGGCAA.setLabel('DNA Adapter 48')
-vocabulary_term_INDEX1_TCGGCAA.setOrdinal(89)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TCGGCAA)
-
-vocabulary_term_INDEX1_AGTCAAC = tr.createNewVocabularyTerm('AGTCAAC')
-vocabulary_term_INDEX1_AGTCAAC.setDescription(None)
-vocabulary_term_INDEX1_AGTCAAC.setLabel('Index13 AGTCAAC')
-vocabulary_term_INDEX1_AGTCAAC.setOrdinal(90)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_AGTCAAC)
-
-vocabulary_term_INDEX1_AATGCGA = tr.createNewVocabularyTerm('AATGCGA')
-vocabulary_term_INDEX1_AATGCGA.setDescription(None)
-vocabulary_term_INDEX1_AATGCGA.setLabel('Lib AATGCGA')
-vocabulary_term_INDEX1_AATGCGA.setOrdinal(91)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_AATGCGA)
-
-vocabulary_INDEX2 = tr.getOrCreateNewVocabulary('INDEX2')
-vocabulary_INDEX2.setDescription('Index 2 for Illumina Dual Indexing')
-vocabulary_INDEX2.setUrlTemplate(None)
-vocabulary_INDEX2.setManagedInternally(False)
-vocabulary_INDEX2.setInternalNamespace(False)
-vocabulary_INDEX2.setChosenFromList(True)
-
-vocabulary_term_INDEX2_TAGATCGC = tr.createNewVocabularyTerm('TAGATCGC')
-vocabulary_term_INDEX2_TAGATCGC.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_TAGATCGC.setLabel('Index2 (i5) N501 TAGATCGC')
-vocabulary_term_INDEX2_TAGATCGC.setOrdinal(1)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_TAGATCGC)
-
-vocabulary_term_INDEX2_CTCTCTAT = tr.createNewVocabularyTerm('CTCTCTAT')
-vocabulary_term_INDEX2_CTCTCTAT.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_CTCTCTAT.setLabel('Index2 (i5) N502 CTCTCTAT')
-vocabulary_term_INDEX2_CTCTCTAT.setOrdinal(2)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_CTCTCTAT)
-
-vocabulary_term_INDEX2_TATCCTCT = tr.createNewVocabularyTerm('TATCCTCT')
-vocabulary_term_INDEX2_TATCCTCT.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_TATCCTCT.setLabel('Index2 (i5) N503 TATCCTCT')
-vocabulary_term_INDEX2_TATCCTCT.setOrdinal(3)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_TATCCTCT)
-
-vocabulary_term_INDEX2_AGAGTAGA = tr.createNewVocabularyTerm('AGAGTAGA')
-vocabulary_term_INDEX2_AGAGTAGA.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_AGAGTAGA.setLabel('Index2 (i5) N504 AGAGTAGA')
-vocabulary_term_INDEX2_AGAGTAGA.setOrdinal(4)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_AGAGTAGA)
-
-vocabulary_term_INDEX2_GTAAGGAG = tr.createNewVocabularyTerm('GTAAGGAG')
-vocabulary_term_INDEX2_GTAAGGAG.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_GTAAGGAG.setLabel('Index2 (i5) N505 GTAAGGAG')
-vocabulary_term_INDEX2_GTAAGGAG.setOrdinal(5)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_GTAAGGAG)
-
-vocabulary_term_INDEX2_ACTGCATA = tr.createNewVocabularyTerm('ACTGCATA')
-vocabulary_term_INDEX2_ACTGCATA.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_ACTGCATA.setLabel('Index2 (i5) N506 ACTGCATA')
-vocabulary_term_INDEX2_ACTGCATA.setOrdinal(6)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_ACTGCATA)
-
-vocabulary_term_INDEX2_AAGGAGTA = tr.createNewVocabularyTerm('AAGGAGTA')
-vocabulary_term_INDEX2_AAGGAGTA.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_AAGGAGTA.setLabel('Index2 (i5) N507 AAGGAGTA')
-vocabulary_term_INDEX2_AAGGAGTA.setOrdinal(7)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_AAGGAGTA)
-
-vocabulary_term_INDEX2_CTAAGCCT = tr.createNewVocabularyTerm('CTAAGCCT')
-vocabulary_term_INDEX2_CTAAGCCT.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_CTAAGCCT.setLabel('Index2 (i5) N508 CTAAGCCT')
-vocabulary_term_INDEX2_CTAAGCCT.setOrdinal(8)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_CTAAGCCT)
-
-vocabulary_KIT = tr.getOrCreateNewVocabulary('KIT')
-vocabulary_KIT.setDescription('Illumina Kit used for preparation')
-vocabulary_KIT.setUrlTemplate(None)
-vocabulary_KIT.setManagedInternally(False)
-vocabulary_KIT.setInternalNamespace(False)
-vocabulary_KIT.setChosenFromList(True)
-
-vocabulary_term_KIT_CHIP_SEQ_SAMPLE_PREP = tr.createNewVocabularyTerm('CHIP_SEQ_SAMPLE_PREP')
-vocabulary_term_KIT_CHIP_SEQ_SAMPLE_PREP.setDescription(None)
-vocabulary_term_KIT_CHIP_SEQ_SAMPLE_PREP.setLabel('ChIP-Seq Sample Preparation Kit')
-vocabulary_term_KIT_CHIP_SEQ_SAMPLE_PREP.setOrdinal(1)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_CHIP_SEQ_SAMPLE_PREP)
-
-vocabulary_term_KIT_NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1 = tr.createNewVocabularyTerm('NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1')
-vocabulary_term_KIT_NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1.setDescription(None)
-vocabulary_term_KIT_NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1.setLabel('NEB Genomic DNA Sample Preparation Kit')
-vocabulary_term_KIT_NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1.setOrdinal(2)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1)
-
-vocabulary_term_KIT_GENOMICDNA_SAMPLE_PREP = tr.createNewVocabularyTerm('GENOMICDNA_SAMPLE_PREP')
-vocabulary_term_KIT_GENOMICDNA_SAMPLE_PREP.setDescription(None)
-vocabulary_term_KIT_GENOMICDNA_SAMPLE_PREP.setLabel('Illumina Genomic DNA Sample Preparation Kit')
-vocabulary_term_KIT_GENOMICDNA_SAMPLE_PREP.setOrdinal(3)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_GENOMICDNA_SAMPLE_PREP)
-
-vocabulary_term_KIT_PAIRED_END_DNA_SAMPLE_PREP = tr.createNewVocabularyTerm('PAIRED_END_DNA_SAMPLE_PREP')
-vocabulary_term_KIT_PAIRED_END_DNA_SAMPLE_PREP.setDescription(None)
-vocabulary_term_KIT_PAIRED_END_DNA_SAMPLE_PREP.setLabel('Paired End DNA Sample Prep Oligo Kit')
-vocabulary_term_KIT_PAIRED_END_DNA_SAMPLE_PREP.setOrdinal(4)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_PAIRED_END_DNA_SAMPLE_PREP)
-
-vocabulary_term_KIT_MRNA_SEQ_SAMPLE_PREP = tr.createNewVocabularyTerm('MRNA_SEQ_SAMPLE_PREP')
-vocabulary_term_KIT_MRNA_SEQ_SAMPLE_PREP.setDescription(None)
-vocabulary_term_KIT_MRNA_SEQ_SAMPLE_PREP.setLabel('mRNA-Seq Sample Preparation Kit')
-vocabulary_term_KIT_MRNA_SEQ_SAMPLE_PREP.setOrdinal(5)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_MRNA_SEQ_SAMPLE_PREP)
-
-vocabulary_term_KIT_RIBOZERO_SCRIPTSEQ_MRNASEQ_KIT = tr.createNewVocabularyTerm('RIBOZERO_SCRIPTSEQ_MRNA-SEQ_KIT')
-vocabulary_term_KIT_RIBOZERO_SCRIPTSEQ_MRNASEQ_KIT.setDescription(None)
-vocabulary_term_KIT_RIBOZERO_SCRIPTSEQ_MRNASEQ_KIT.setLabel('RiboZero ScriptSeq mRNA-Seq_Epicentre-kit')
-vocabulary_term_KIT_RIBOZERO_SCRIPTSEQ_MRNASEQ_KIT.setOrdinal(6)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_RIBOZERO_SCRIPTSEQ_MRNASEQ_KIT)
-
-vocabulary_term_KIT_POLYA_SCRIPTSEQ_MRNASEQ_KIT = tr.createNewVocabularyTerm('POLYA_SCRIPTSEQ_MRNA-SEQ_KIT')
-vocabulary_term_KIT_POLYA_SCRIPTSEQ_MRNASEQ_KIT.setDescription(None)
-vocabulary_term_KIT_POLYA_SCRIPTSEQ_MRNASEQ_KIT.setLabel('PolyA(Beads) ScriptSeq mRNA-Seq_Epicentre-kit')
-vocabulary_term_KIT_POLYA_SCRIPTSEQ_MRNASEQ_KIT.setOrdinal(7)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_POLYA_SCRIPTSEQ_MRNASEQ_KIT)
-
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KITS = tr.createNewVocabularyTerm('NEXTERA_DNA_SAMPLE_PREP_KITS')
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KITS.setDescription(None)
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KITS.setLabel('Nextera Genomic DNA Sample Preparation Kit BufferLMW(Epicentre)')
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KITS.setOrdinal(8)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KITS)
-
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KIT_BUFFER_HMW = tr.createNewVocabularyTerm('NEXTERA_DNA_SAMPLE_PREP_KIT_BUFFER_HMW')
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KIT_BUFFER_HMW.setDescription(None)
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KIT_BUFFER_HMW.setLabel('Nextera Genomic DNA Sample Preparation Kit BufferHMW(Epicentre)')
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KIT_BUFFER_HMW.setOrdinal(9)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KIT_BUFFER_HMW)
-
-vocabulary_term_KIT_AGILENT_SURESELECT_ENRICHMENTSYSTEM = tr.createNewVocabularyTerm('AGILENT_SURESELECT_ENRICHMENTSYSTEM')
-vocabulary_term_KIT_AGILENT_SURESELECT_ENRICHMENTSYSTEM.setDescription(None)
-vocabulary_term_KIT_AGILENT_SURESELECT_ENRICHMENTSYSTEM.setLabel('Agilent_SureSelect_EnrichmentSystem')
-vocabulary_term_KIT_AGILENT_SURESELECT_ENRICHMENTSYSTEM.setOrdinal(10)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_AGILENT_SURESELECT_ENRICHMENTSYSTEM)
-
-vocabulary_term_KIT_TRUSEQRNA_SAMPLE_PREP_KIT = tr.createNewVocabularyTerm('TRUSEQRNA_SAMPLE_PREP_KIT')
-vocabulary_term_KIT_TRUSEQRNA_SAMPLE_PREP_KIT.setDescription(None)
-vocabulary_term_KIT_TRUSEQRNA_SAMPLE_PREP_KIT.setLabel('TruSeq_RNA_SamplePrepKit_Illumina')
-vocabulary_term_KIT_TRUSEQRNA_SAMPLE_PREP_KIT.setOrdinal(11)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_TRUSEQRNA_SAMPLE_PREP_KIT)
-
-vocabulary_term_KIT_TRUSEQ_DNA_SAMPLE_PREP_KIT = tr.createNewVocabularyTerm('TRUSEQ_DNA_SAMPLE_PREP_KIT')
-vocabulary_term_KIT_TRUSEQ_DNA_SAMPLE_PREP_KIT.setDescription(None)
-vocabulary_term_KIT_TRUSEQ_DNA_SAMPLE_PREP_KIT.setLabel('TruSeq_DNA_SamplePrepKit_Illumina')
-vocabulary_term_KIT_TRUSEQ_DNA_SAMPLE_PREP_KIT.setOrdinal(12)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_TRUSEQ_DNA_SAMPLE_PREP_KIT)
-
-vocabulary_term_KIT_NONE = tr.createNewVocabularyTerm('NONE')
-vocabulary_term_KIT_NONE.setDescription(None)
-vocabulary_term_KIT_NONE.setLabel('None (Already prepared)')
-vocabulary_term_KIT_NONE.setOrdinal(13)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_NONE)
-
-vocabulary_MACS_VERSION = tr.getOrCreateNewVocabulary('MACS_VERSION')
-vocabulary_MACS_VERSION.setDescription('Used MACS version for Peak Calling')
-vocabulary_MACS_VERSION.setUrlTemplate(None)
-vocabulary_MACS_VERSION.setManagedInternally(False)
-vocabulary_MACS_VERSION.setInternalNamespace(False)
-vocabulary_MACS_VERSION.setChosenFromList(True)
-
-vocabulary_term_MACS_VERSION_140RC2 = tr.createNewVocabularyTerm('1.4.0RC2')
-vocabulary_term_MACS_VERSION_140RC2.setDescription(None)
-vocabulary_term_MACS_VERSION_140RC2.setLabel('macs14 1.4.0rc2 20110214 (Valentine)')
-vocabulary_term_MACS_VERSION_140RC2.setOrdinal(1)
-vocabulary_MACS_VERSION.addTerm(vocabulary_term_MACS_VERSION_140RC2)
-
-vocabulary_term_MACS_VERSION_1371 = tr.createNewVocabularyTerm('1.3.7.1')
-vocabulary_term_MACS_VERSION_1371.setDescription(None)
-vocabulary_term_MACS_VERSION_1371.setLabel('macs 1.3.7.1 (Oktoberfest, bug fixed #1)')
-vocabulary_term_MACS_VERSION_1371.setOrdinal(2)
-vocabulary_MACS_VERSION.addTerm(vocabulary_term_MACS_VERSION_1371)
-
-vocabulary_MISMATCH_IN_INDEX = tr.getOrCreateNewVocabulary('MISMATCH_IN_INDEX')
-vocabulary_MISMATCH_IN_INDEX.setDescription('Mismatch in Index allowed')
-vocabulary_MISMATCH_IN_INDEX.setUrlTemplate(None)
-vocabulary_MISMATCH_IN_INDEX.setManagedInternally(False)
-vocabulary_MISMATCH_IN_INDEX.setInternalNamespace(False)
-vocabulary_MISMATCH_IN_INDEX.setChosenFromList(True)
-
-vocabulary_term_MISMATCH_IN_INDEX_NONE = tr.createNewVocabularyTerm('NONE')
-vocabulary_term_MISMATCH_IN_INDEX_NONE.setDescription(None)
-vocabulary_term_MISMATCH_IN_INDEX_NONE.setLabel(None)
-vocabulary_term_MISMATCH_IN_INDEX_NONE.setOrdinal(1)
-vocabulary_MISMATCH_IN_INDEX.addTerm(vocabulary_term_MISMATCH_IN_INDEX_NONE)
-
-vocabulary_term_MISMATCH_IN_INDEX_ONE = tr.createNewVocabularyTerm('ONE')
-vocabulary_term_MISMATCH_IN_INDEX_ONE.setDescription(None)
-vocabulary_term_MISMATCH_IN_INDEX_ONE.setLabel(None)
-vocabulary_term_MISMATCH_IN_INDEX_ONE.setOrdinal(2)
-vocabulary_MISMATCH_IN_INDEX.addTerm(vocabulary_term_MISMATCH_IN_INDEX_ONE)
-
-vocabulary_NANO_DROP = tr.getOrCreateNewVocabulary('NANO_DROP')
-vocabulary_NANO_DROP.setDescription('Device for measuring the total amount of genetic material contained in the probe')
-vocabulary_NANO_DROP.setUrlTemplate(None)
-vocabulary_NANO_DROP.setManagedInternally(False)
-vocabulary_NANO_DROP.setInternalNamespace(False)
-vocabulary_NANO_DROP.setChosenFromList(True)
-
-vocabulary_term_NANO_DROP_CONCND3300 = tr.createNewVocabularyTerm('CONCND3300')
-vocabulary_term_NANO_DROP_CONCND3300.setDescription(None)
-vocabulary_term_NANO_DROP_CONCND3300.setLabel('Conc Nano Drop 3300')
-vocabulary_term_NANO_DROP_CONCND3300.setOrdinal(1)
-vocabulary_NANO_DROP.addTerm(vocabulary_term_NANO_DROP_CONCND3300)
-
-vocabulary_term_NANO_DROP_CONCND1000 = tr.createNewVocabularyTerm('CONCND1000')
-vocabulary_term_NANO_DROP_CONCND1000.setDescription(None)
-vocabulary_term_NANO_DROP_CONCND1000.setLabel('Conc Nano Drop 1000')
-vocabulary_term_NANO_DROP_CONCND1000.setOrdinal(2)
-vocabulary_NANO_DROP.addTerm(vocabulary_term_NANO_DROP_CONCND1000)
-
-vocabulary_term_NANO_DROP_CONCND2000 = tr.createNewVocabularyTerm('CONCND2000')
-vocabulary_term_NANO_DROP_CONCND2000.setDescription(None)
-vocabulary_term_NANO_DROP_CONCND2000.setLabel('Conc Nano Drop 2000')
-vocabulary_term_NANO_DROP_CONCND2000.setOrdinal(3)
-vocabulary_NANO_DROP.addTerm(vocabulary_term_NANO_DROP_CONCND2000)
-
-vocabulary_NCBI_TAXONOMY = tr.getOrCreateNewVocabulary('NCBI_TAXONOMY')
-vocabulary_NCBI_TAXONOMY.setDescription(None)
-vocabulary_NCBI_TAXONOMY.setUrlTemplate('http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=$term$')
-vocabulary_NCBI_TAXONOMY.setManagedInternally(False)
-vocabulary_NCBI_TAXONOMY.setInternalNamespace(False)
-vocabulary_NCBI_TAXONOMY.setChosenFromList(True)
-
-vocabulary_term_NCBI_TAXONOMY_10090 = tr.createNewVocabularyTerm('10090')
-vocabulary_term_NCBI_TAXONOMY_10090.setDescription('Genbank common name: house mouse\ Inherited blast name: rodents')
-vocabulary_term_NCBI_TAXONOMY_10090.setLabel('Mus musculus')
-vocabulary_term_NCBI_TAXONOMY_10090.setOrdinal(1)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_10090)
-
-vocabulary_term_NCBI_TAXONOMY_9606 = tr.createNewVocabularyTerm('9606')
-vocabulary_term_NCBI_TAXONOMY_9606.setDescription('Genbank common name: human\ Inherited blast name: primates')
-vocabulary_term_NCBI_TAXONOMY_9606.setLabel('Homo sapiens')
-vocabulary_term_NCBI_TAXONOMY_9606.setOrdinal(2)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_9606)
-
-vocabulary_term_NCBI_TAXONOMY_7227 = tr.createNewVocabularyTerm('7227')
-vocabulary_term_NCBI_TAXONOMY_7227.setDescription('Genbank common name: fruit fly\ Inherited blast name: flies')
-vocabulary_term_NCBI_TAXONOMY_7227.setLabel('Drosophila melanogaster')
-vocabulary_term_NCBI_TAXONOMY_7227.setOrdinal(3)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_7227)
-
-vocabulary_term_NCBI_TAXONOMY_6239 = tr.createNewVocabularyTerm('6239')
-vocabulary_term_NCBI_TAXONOMY_6239.setDescription('Inherited blast name: nematodes')
-vocabulary_term_NCBI_TAXONOMY_6239.setLabel('Caenorhabditis elegans')
-vocabulary_term_NCBI_TAXONOMY_6239.setOrdinal(4)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_6239)
-
-vocabulary_term_NCBI_TAXONOMY_4932 = tr.createNewVocabularyTerm('4932')
-vocabulary_term_NCBI_TAXONOMY_4932.setDescription('Genbank common name: baker\'s yeast\ Inherited blast name: ascomycetes')
-vocabulary_term_NCBI_TAXONOMY_4932.setLabel('Saccharomyces cerevisiae')
-vocabulary_term_NCBI_TAXONOMY_4932.setOrdinal(5)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_4932)
-
-vocabulary_term_NCBI_TAXONOMY_10116 = tr.createNewVocabularyTerm('10116')
-vocabulary_term_NCBI_TAXONOMY_10116.setDescription('Genbank common name: Norway rat\ Inherited blast name: rodents')
-vocabulary_term_NCBI_TAXONOMY_10116.setLabel('Rattus norvegicus')
-vocabulary_term_NCBI_TAXONOMY_10116.setOrdinal(6)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_10116)
-
-vocabulary_term_NCBI_TAXONOMY_6669 = tr.createNewVocabularyTerm('6669')
-vocabulary_term_NCBI_TAXONOMY_6669.setDescription('Genbank common name: common water flea\ Inherited blast name: crustaceans')
-vocabulary_term_NCBI_TAXONOMY_6669.setLabel('Daphnia pulex')
-vocabulary_term_NCBI_TAXONOMY_6669.setOrdinal(7)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_6669)
-
-vocabulary_term_NCBI_TAXONOMY_562 = tr.createNewVocabularyTerm('562')
-vocabulary_term_NCBI_TAXONOMY_562.setDescription('Inherited blast name: enterobacteria')
-vocabulary_term_NCBI_TAXONOMY_562.setLabel('Escherichia coli')
-vocabulary_term_NCBI_TAXONOMY_562.setOrdinal(8)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_562)
-
-vocabulary_term_NCBI_TAXONOMY_623 = tr.createNewVocabularyTerm('623')
-vocabulary_term_NCBI_TAXONOMY_623.setDescription('Inherited blast name: enterobacteria')
-vocabulary_term_NCBI_TAXONOMY_623.setLabel('Shigella flexneri')
-vocabulary_term_NCBI_TAXONOMY_623.setOrdinal(9)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_623)
-
-vocabulary_term_NCBI_TAXONOMY_10847 = tr.createNewVocabularyTerm('10847')
-vocabulary_term_NCBI_TAXONOMY_10847.setDescription('Inherited blast name: viruses')
-vocabulary_term_NCBI_TAXONOMY_10847.setLabel('Enterobacteria phage phiX174')
-vocabulary_term_NCBI_TAXONOMY_10847.setOrdinal(10)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_10847)
-
-vocabulary_term_NCBI_TAXONOMY_190650 = tr.createNewVocabularyTerm('190650')
-vocabulary_term_NCBI_TAXONOMY_190650.setDescription('Inherited blast name: a-proteobacteria')
-vocabulary_term_NCBI_TAXONOMY_190650.setLabel('Caulobacter crescentus CB15')
-vocabulary_term_NCBI_TAXONOMY_190650.setOrdinal(11)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_190650)
-
-vocabulary_term_NCBI_TAXONOMY_8113 = tr.createNewVocabularyTerm('8113')
-vocabulary_term_NCBI_TAXONOMY_8113.setDescription('Genbank common name: cichlids\ Inherited blast name: bony fishes')
-vocabulary_term_NCBI_TAXONOMY_8113.setLabel('Cichlidae')
-vocabulary_term_NCBI_TAXONOMY_8113.setOrdinal(12)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_8113)
-
-vocabulary_term_NCBI_TAXONOMY_481459 = tr.createNewVocabularyTerm('481459')
-vocabulary_term_NCBI_TAXONOMY_481459.setDescription('Genbank common name: three-spined stickleback\ Inherited blast name: bony fishes')
-vocabulary_term_NCBI_TAXONOMY_481459.setLabel('Gasterosteus aculeatus aculeatus')
-vocabulary_term_NCBI_TAXONOMY_481459.setOrdinal(13)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_481459)
-
-vocabulary_term_NCBI_TAXONOMY_282301 = tr.createNewVocabularyTerm('282301')
-vocabulary_term_NCBI_TAXONOMY_282301.setDescription('Inherited blast name: flatworms')
-vocabulary_term_NCBI_TAXONOMY_282301.setLabel('Macrostomum lignano')
-vocabulary_term_NCBI_TAXONOMY_282301.setOrdinal(14)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_282301)
-
-vocabulary_term_NCBI_TAXONOMY_99287 = tr.createNewVocabularyTerm('99287')
-vocabulary_term_NCBI_TAXONOMY_99287.setDescription('Inherited blast name: enterobacteria')
-vocabulary_term_NCBI_TAXONOMY_99287.setLabel('Salmonella enterica subsp. enterica serovar Typhimurium str. LT2')
-vocabulary_term_NCBI_TAXONOMY_99287.setOrdinal(15)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_99287)
-
-vocabulary_term_NCBI_TAXONOMY_4896 = tr.createNewVocabularyTerm('4896')
-vocabulary_term_NCBI_TAXONOMY_4896.setDescription('Genbank common name: fission yeast\ Inherited blast name: ascomycetes')
-vocabulary_term_NCBI_TAXONOMY_4896.setLabel('Schizosaccharomyces pombe')
-vocabulary_term_NCBI_TAXONOMY_4896.setOrdinal(16)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_4896)
-
-vocabulary_term_NCBI_TAXONOMY_4897 = tr.createNewVocabularyTerm('4897')
-vocabulary_term_NCBI_TAXONOMY_4897.setDescription('Inherited blast name: ascomycetes')
-vocabulary_term_NCBI_TAXONOMY_4897.setLabel('Schizosaccharomyces japonicus')
-vocabulary_term_NCBI_TAXONOMY_4897.setOrdinal(17)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_4897)
-
-vocabulary_term_NCBI_TAXONOMY_7955 = tr.createNewVocabularyTerm('7955')
-vocabulary_term_NCBI_TAXONOMY_7955.setDescription('Genbank common name: zebrafish\ Inherited blast name: bony fishes')
-vocabulary_term_NCBI_TAXONOMY_7955.setLabel('Danio rerio')
-vocabulary_term_NCBI_TAXONOMY_7955.setOrdinal(18)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_7955)
-
-vocabulary_term_NCBI_TAXONOMY_3702 = tr.createNewVocabularyTerm('3702')
-vocabulary_term_NCBI_TAXONOMY_3702.setDescription('Genbank common name: thale cress\ Inherited blast name: eudicots')
-vocabulary_term_NCBI_TAXONOMY_3702.setLabel('Arabidopsis thaliana')
-vocabulary_term_NCBI_TAXONOMY_3702.setOrdinal(19)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_3702)
-
-vocabulary_term_NCBI_TAXONOMY_225322 = tr.createNewVocabularyTerm('225322')
-vocabulary_term_NCBI_TAXONOMY_225322.setDescription('Bacterium which infects Daphnia\ Pasteuria ramosa Metchnikoff 1888 (Approved Lists 1980) emend. Starr et al. 1986\ Ebert D, Rainey P, Embley TM, Scholz D. Development, life\ cycle, ultrastructure and phylogenetic position of Pasteuria ramosa Metchnikoff 1888: rediscovery of an obligate \ endoparasite of Daphnia magna Straus. Philos Trans R Soc \ Lond Ser B. 1996;351:1689.')
-vocabulary_term_NCBI_TAXONOMY_225322.setLabel('Pasteuria ramosa')
-vocabulary_term_NCBI_TAXONOMY_225322.setOrdinal(20)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_225322)
-
-vocabulary_term_NCBI_TAXONOMY_9913 = tr.createNewVocabularyTerm('9913')
-vocabulary_term_NCBI_TAXONOMY_9913.setDescription('Genbank common name: cattle\ Inherited blast name: even-toed ungulates')
-vocabulary_term_NCBI_TAXONOMY_9913.setLabel('Bos taurus')
-vocabulary_term_NCBI_TAXONOMY_9913.setOrdinal(21)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_9913)
-
-vocabulary_term_NCBI_TAXONOMY_9823 = tr.createNewVocabularyTerm('9823')
-vocabulary_term_NCBI_TAXONOMY_9823.setDescription('Genbank common name: pig\ Inherited blast name: even-toed ungulates')
-vocabulary_term_NCBI_TAXONOMY_9823.setLabel('Sus scrofa')
-vocabulary_term_NCBI_TAXONOMY_9823.setOrdinal(22)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_9823)
-
-vocabulary_term_NCBI_TAXONOMY_9940 = tr.createNewVocabularyTerm('9940')
-vocabulary_term_NCBI_TAXONOMY_9940.setDescription('Genbank common name: sheep\ Inherited blast name: even-toed ungulates')
-vocabulary_term_NCBI_TAXONOMY_9940.setLabel('Ovis aries')
-vocabulary_term_NCBI_TAXONOMY_9940.setOrdinal(23)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_9940)
-
-vocabulary_term_NCBI_TAXONOMY_9925 = tr.createNewVocabularyTerm('9925')
-vocabulary_term_NCBI_TAXONOMY_9925.setDescription('Genbank common name: goat\ Inherited blast name: even-toed ungulates')
-vocabulary_term_NCBI_TAXONOMY_9925.setLabel('Capra hircus')
-vocabulary_term_NCBI_TAXONOMY_9925.setOrdinal(24)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_9925)
-
-vocabulary_term_NCBI_TAXONOMY_8153 = tr.createNewVocabularyTerm('8153')
-vocabulary_term_NCBI_TAXONOMY_8153.setDescription('Common name: cichlid fish')
-vocabulary_term_NCBI_TAXONOMY_8153.setLabel('Haplochromis burtoni')
-vocabulary_term_NCBI_TAXONOMY_8153.setOrdinal(25)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_8153)
-
-vocabulary_term_NCBI_TAXONOMY_61818 = tr.createNewVocabularyTerm('61818')
-vocabulary_term_NCBI_TAXONOMY_61818.setDescription('Common name: bony fish')
-vocabulary_term_NCBI_TAXONOMY_61818.setLabel('Amphilophus (nicaraguan)')
-vocabulary_term_NCBI_TAXONOMY_61818.setOrdinal(26)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_61818)
-
-vocabulary_term_NCBI_TAXONOMY_35525 = tr.createNewVocabularyTerm('35525')
-vocabulary_term_NCBI_TAXONOMY_35525.setDescription('Common name: water flea')
-vocabulary_term_NCBI_TAXONOMY_35525.setLabel('Daphnia Magna')
-vocabulary_term_NCBI_TAXONOMY_35525.setOrdinal(27)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_35525)
-
-vocabulary_term_NCBI_TAXONOMY_4081 = tr.createNewVocabularyTerm('4081')
-vocabulary_term_NCBI_TAXONOMY_4081.setDescription('Common Name: tomato')
-vocabulary_term_NCBI_TAXONOMY_4081.setLabel('Solanum lycopersicum (tomato)')
-vocabulary_term_NCBI_TAXONOMY_4081.setOrdinal(28)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_4081)
-
-vocabulary_term_NCBI_TAXONOMY_13068 = tr.createNewVocabularyTerm('13068')
-vocabulary_term_NCBI_TAXONOMY_13068.setDescription('Common name: earwig')
-vocabulary_term_NCBI_TAXONOMY_13068.setLabel('Forficula auricularia (earwig)')
-vocabulary_term_NCBI_TAXONOMY_13068.setOrdinal(29)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_13068)
-
-vocabulary_term_NCBI_TAXONOMY_3569 = tr.createNewVocabularyTerm('3569')
-vocabulary_term_NCBI_TAXONOMY_3569.setDescription('Genbank common name: clove pink')
-vocabulary_term_NCBI_TAXONOMY_3569.setLabel('Dianthus')
-vocabulary_term_NCBI_TAXONOMY_3569.setOrdinal(30)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_3569)
-
-vocabulary_term_NCBI_TAXONOMY_3573 = tr.createNewVocabularyTerm('3573')
-vocabulary_term_NCBI_TAXONOMY_3573.setDescription('Genbank common name: campions\ Inherited blast name: eudicots')
-vocabulary_term_NCBI_TAXONOMY_3573.setLabel('Silene')
-vocabulary_term_NCBI_TAXONOMY_3573.setOrdinal(31)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_3573)
-
-vocabulary_term_NCBI_TAXONOMY_32644 = tr.createNewVocabularyTerm('32644')
-vocabulary_term_NCBI_TAXONOMY_32644.setDescription('Inherited blast name: unclassified')
-vocabulary_term_NCBI_TAXONOMY_32644.setLabel('unidentified')
-vocabulary_term_NCBI_TAXONOMY_32644.setOrdinal(32)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_32644)
-
-vocabulary_PIPELINE_VERSION = tr.getOrCreateNewVocabulary('PIPELINE_VERSION')
-vocabulary_PIPELINE_VERSION.setDescription('With which pipeline version has the data been analyzed?')
-vocabulary_PIPELINE_VERSION.setUrlTemplate(None)
-vocabulary_PIPELINE_VERSION.setManagedInternally(False)
-vocabulary_PIPELINE_VERSION.setInternalNamespace(False)
-vocabulary_PIPELINE_VERSION.setChosenFromList(True)
-
-vocabulary_term_PIPELINE_VERSION_11348 = tr.createNewVocabularyTerm('1.13.48')
-vocabulary_term_PIPELINE_VERSION_11348.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_11348.setLabel('RTA 1.13.48')
-vocabulary_term_PIPELINE_VERSION_11348.setOrdinal(1)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_11348)
-
-vocabulary_term_PIPELINE_VERSION_11242 = tr.createNewVocabularyTerm('1.12.4.2')
-vocabulary_term_PIPELINE_VERSION_11242.setDescription('Real Time Analysis in combination with HCS 1.4.8')
-vocabulary_term_PIPELINE_VERSION_11242.setLabel('RTA 1.12.4.2 (HiSeq 2000)')
-vocabulary_term_PIPELINE_VERSION_11242.setOrdinal(2)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_11242)
-
-vocabulary_term_PIPELINE_VERSION_112 = tr.createNewVocabularyTerm('1.12')
-vocabulary_term_PIPELINE_VERSION_112.setDescription('Real Time Analysis 1.12 HiSeq 2000')
-vocabulary_term_PIPELINE_VERSION_112.setLabel('RTA 1.12')
-vocabulary_term_PIPELINE_VERSION_112.setOrdinal(4)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_112)
-
-vocabulary_term_PIPELINE_VERSION_19 = tr.createNewVocabularyTerm('1.9')
-vocabulary_term_PIPELINE_VERSION_19.setDescription('Real Time Analysis 1.9')
-vocabulary_term_PIPELINE_VERSION_19.setLabel('RTA 1.9 (GA IIx)')
-vocabulary_term_PIPELINE_VERSION_19.setOrdinal(5)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_19)
-
-vocabulary_term_PIPELINE_VERSION_RTA_18 = tr.createNewVocabularyTerm('RTA_1.8')
-vocabulary_term_PIPELINE_VERSION_RTA_18.setDescription('Real Time Analysis 1.8')
-vocabulary_term_PIPELINE_VERSION_RTA_18.setLabel('RTA 1.8')
-vocabulary_term_PIPELINE_VERSION_RTA_18.setOrdinal(6)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_RTA_18)
-
-vocabulary_term_PIPELINE_VERSION_RTA_16 = tr.createNewVocabularyTerm('RTA_1.6')
-vocabulary_term_PIPELINE_VERSION_RTA_16.setDescription('Real Time Analysis 1.6')
-vocabulary_term_PIPELINE_VERSION_RTA_16.setLabel('RTA 1.6')
-vocabulary_term_PIPELINE_VERSION_RTA_16.setOrdinal(7)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_RTA_16)
-
-vocabulary_term_PIPELINE_VERSION_RTA_15 = tr.createNewVocabularyTerm('RTA_1.5')
-vocabulary_term_PIPELINE_VERSION_RTA_15.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_RTA_15.setLabel('RTA 1.5')
-vocabulary_term_PIPELINE_VERSION_RTA_15.setOrdinal(8)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_RTA_15)
-
-vocabulary_term_PIPELINE_VERSION_RTA_14150 = tr.createNewVocabularyTerm('RTA_1.4.15.0')
-vocabulary_term_PIPELINE_VERSION_RTA_14150.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_RTA_14150.setLabel('RTA 1.4.15.0')
-vocabulary_term_PIPELINE_VERSION_RTA_14150.setOrdinal(9)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_RTA_14150)
-
-vocabulary_term_PIPELINE_VERSION_15 = tr.createNewVocabularyTerm('1.5')
-vocabulary_term_PIPELINE_VERSION_15.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_15.setLabel(None)
-vocabulary_term_PIPELINE_VERSION_15.setOrdinal(10)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_15)
-
-vocabulary_term_PIPELINE_VERSION_14 = tr.createNewVocabularyTerm('1.4')
-vocabulary_term_PIPELINE_VERSION_14.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_14.setLabel(None)
-vocabulary_term_PIPELINE_VERSION_14.setOrdinal(11)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_14)
-
-vocabulary_term_PIPELINE_VERSION_132 = tr.createNewVocabularyTerm('1.3.2')
-vocabulary_term_PIPELINE_VERSION_132.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_132.setLabel(None)
-vocabulary_term_PIPELINE_VERSION_132.setOrdinal(12)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_132)
-
-vocabulary_term_PIPELINE_VERSION_10 = tr.createNewVocabularyTerm('1.0')
-vocabulary_term_PIPELINE_VERSION_10.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_10.setLabel(None)
-vocabulary_term_PIPELINE_VERSION_10.setOrdinal(13)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_10)
-
-vocabulary_term_PIPELINE_VERSION_PRE_10 = tr.createNewVocabularyTerm('PRE_1.0')
-vocabulary_term_PIPELINE_VERSION_PRE_10.setDescription('Before Pipeline Version 1.0')
-vocabulary_term_PIPELINE_VERSION_PRE_10.setLabel(None)
-vocabulary_term_PIPELINE_VERSION_PRE_10.setOrdinal(14)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_PRE_10)
-
-vocabulary_term_PIPELINE_VERSION_NONE = tr.createNewVocabularyTerm('NONE')
-vocabulary_term_PIPELINE_VERSION_NONE.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_NONE.setLabel(None)
-vocabulary_term_PIPELINE_VERSION_NONE.setOrdinal(15)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_NONE)
-
-vocabulary_REQUIRED_LANES = tr.getOrCreateNewVocabulary('REQUIRED_LANES')
-vocabulary_REQUIRED_LANES.setDescription('Amount of lanes needed for this probe')
-vocabulary_REQUIRED_LANES.setUrlTemplate(None)
-vocabulary_REQUIRED_LANES.setManagedInternally(False)
-vocabulary_REQUIRED_LANES.setInternalNamespace(False)
-vocabulary_REQUIRED_LANES.setChosenFromList(True)
-
-vocabulary_term_REQUIRED_LANES_1 = tr.createNewVocabularyTerm('1')
-vocabulary_term_REQUIRED_LANES_1.setDescription(None)
-vocabulary_term_REQUIRED_LANES_1.setLabel(None)
-vocabulary_term_REQUIRED_LANES_1.setOrdinal(1)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_1)
-
-vocabulary_term_REQUIRED_LANES_2 = tr.createNewVocabularyTerm('2')
-vocabulary_term_REQUIRED_LANES_2.setDescription(None)
-vocabulary_term_REQUIRED_LANES_2.setLabel(None)
-vocabulary_term_REQUIRED_LANES_2.setOrdinal(2)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_2)
-
-vocabulary_term_REQUIRED_LANES_3 = tr.createNewVocabularyTerm('3')
-vocabulary_term_REQUIRED_LANES_3.setDescription(None)
-vocabulary_term_REQUIRED_LANES_3.setLabel(None)
-vocabulary_term_REQUIRED_LANES_3.setOrdinal(3)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_3)
-
-vocabulary_term_REQUIRED_LANES_4 = tr.createNewVocabularyTerm('4')
-vocabulary_term_REQUIRED_LANES_4.setDescription(None)
-vocabulary_term_REQUIRED_LANES_4.setLabel(None)
-vocabulary_term_REQUIRED_LANES_4.setOrdinal(4)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_4)
-
-vocabulary_term_REQUIRED_LANES_5 = tr.createNewVocabularyTerm('5')
-vocabulary_term_REQUIRED_LANES_5.setDescription(None)
-vocabulary_term_REQUIRED_LANES_5.setLabel(None)
-vocabulary_term_REQUIRED_LANES_5.setOrdinal(5)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_5)
-
-vocabulary_term_REQUIRED_LANES_6 = tr.createNewVocabularyTerm('6')
-vocabulary_term_REQUIRED_LANES_6.setDescription(None)
-vocabulary_term_REQUIRED_LANES_6.setLabel(None)
-vocabulary_term_REQUIRED_LANES_6.setOrdinal(6)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_6)
-
-vocabulary_term_REQUIRED_LANES_7 = tr.createNewVocabularyTerm('7')
-vocabulary_term_REQUIRED_LANES_7.setDescription(None)
-vocabulary_term_REQUIRED_LANES_7.setLabel(None)
-vocabulary_term_REQUIRED_LANES_7.setOrdinal(7)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_7)
-
-vocabulary_term_REQUIRED_LANES_8 = tr.createNewVocabularyTerm('8')
-vocabulary_term_REQUIRED_LANES_8.setDescription(None)
-vocabulary_term_REQUIRED_LANES_8.setLabel(None)
-vocabulary_term_REQUIRED_LANES_8.setOrdinal(8)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_8)
-
-vocabulary_term_REQUIRED_LANES_9 = tr.createNewVocabularyTerm('9')
-vocabulary_term_REQUIRED_LANES_9.setDescription(None)
-vocabulary_term_REQUIRED_LANES_9.setLabel(None)
-vocabulary_term_REQUIRED_LANES_9.setOrdinal(9)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_9)
-
-vocabulary_term_REQUIRED_LANES_10 = tr.createNewVocabularyTerm('10')
-vocabulary_term_REQUIRED_LANES_10.setDescription(None)
-vocabulary_term_REQUIRED_LANES_10.setLabel(None)
-vocabulary_term_REQUIRED_LANES_10.setOrdinal(10)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_10)
-
-vocabulary_term_REQUIRED_LANES_11 = tr.createNewVocabularyTerm('11')
-vocabulary_term_REQUIRED_LANES_11.setDescription(None)
-vocabulary_term_REQUIRED_LANES_11.setLabel(None)
-vocabulary_term_REQUIRED_LANES_11.setOrdinal(11)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_11)
-
-vocabulary_term_REQUIRED_LANES_12 = tr.createNewVocabularyTerm('12')
-vocabulary_term_REQUIRED_LANES_12.setDescription(None)
-vocabulary_term_REQUIRED_LANES_12.setLabel(None)
-vocabulary_term_REQUIRED_LANES_12.setOrdinal(12)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_12)
-
-vocabulary_term_REQUIRED_LANES_13 = tr.createNewVocabularyTerm('13')
-vocabulary_term_REQUIRED_LANES_13.setDescription(None)
-vocabulary_term_REQUIRED_LANES_13.setLabel(None)
-vocabulary_term_REQUIRED_LANES_13.setOrdinal(13)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_13)
-
-vocabulary_term_REQUIRED_LANES_14 = tr.createNewVocabularyTerm('14')
-vocabulary_term_REQUIRED_LANES_14.setDescription(None)
-vocabulary_term_REQUIRED_LANES_14.setLabel(None)
-vocabulary_term_REQUIRED_LANES_14.setOrdinal(14)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_14)
-
-vocabulary_term_REQUIRED_LANES_15 = tr.createNewVocabularyTerm('15')
-vocabulary_term_REQUIRED_LANES_15.setDescription(None)
-vocabulary_term_REQUIRED_LANES_15.setLabel(None)
-vocabulary_term_REQUIRED_LANES_15.setOrdinal(15)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_15)
-
-vocabulary_term_REQUIRED_LANES_16 = tr.createNewVocabularyTerm('16')
-vocabulary_term_REQUIRED_LANES_16.setDescription(None)
-vocabulary_term_REQUIRED_LANES_16.setLabel(None)
-vocabulary_term_REQUIRED_LANES_16.setOrdinal(16)
-vocabulary_REQUIRED_LANES.addTerm(vocabulary_term_REQUIRED_LANES_16)
-
-vocabulary_SAMPLE_LIBRARY_SELECTION = tr.getOrCreateNewVocabulary('SAMPLE_LIBRARY_SELECTION')
-vocabulary_SAMPLE_LIBRARY_SELECTION.setDescription('Describes whether any method was used to select and/or enrich the material being sequenced.')
-vocabulary_SAMPLE_LIBRARY_SELECTION.setUrlTemplate(None)
-vocabulary_SAMPLE_LIBRARY_SELECTION.setManagedInternally(False)
-vocabulary_SAMPLE_LIBRARY_SELECTION.setInternalNamespace(False)
-vocabulary_SAMPLE_LIBRARY_SELECTION.setChosenFromList(True)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CHIP = tr.createNewVocabularyTerm('CHIP')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CHIP.setDescription('Chromatin immunoprecipitation')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CHIP.setLabel('ChIP')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CHIP.setOrdinal(1)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_CHIP)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MNASE = tr.createNewVocabularyTerm('MNASE')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MNASE.setDescription('Micrococcal Nuclease (MNase) digestion')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MNASE.setLabel('MNase')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MNASE.setOrdinal(2)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_MNASE)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RESTRICTION_DIGEST = tr.createNewVocabularyTerm('RESTRICTION_DIGEST')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RESTRICTION_DIGEST.setDescription('Restriction enzyme digestion')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RESTRICTION_DIGEST.setLabel('Restriction Digest')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RESTRICTION_DIGEST.setOrdinal(3)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_RESTRICTION_DIGEST)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_5METHYLCYTIDINE_ANTIBODY = tr.createNewVocabularyTerm('5-METHYLCYTIDINE_ANTIBODY')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_5METHYLCYTIDINE_ANTIBODY.setDescription('Methylated DNA immunoprecipitation')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_5METHYLCYTIDINE_ANTIBODY.setLabel('5-methylcytidine antibody')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_5METHYLCYTIDINE_ANTIBODY.setOrdinal(4)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_5METHYLCYTIDINE_ANTIBODY)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RANDOM = tr.createNewVocabularyTerm('RANDOM')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RANDOM.setDescription('Random shearing only')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RANDOM.setLabel('RANDOM')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RANDOM.setOrdinal(5)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_RANDOM)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MF = tr.createNewVocabularyTerm('MF')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MF.setDescription('Methyl Filtrated')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MF.setLabel('MF')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MF.setOrdinal(6)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_MF)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MSLL = tr.createNewVocabularyTerm('MSLL')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MSLL.setDescription('Methylation Spanning Linking Library')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MSLL.setLabel('MSLL')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_MSLL.setOrdinal(7)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_MSLL)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_HMPR = tr.createNewVocabularyTerm('HMPR')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_HMPR.setDescription('Hypo-methylated partial restriction digest')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_HMPR.setLabel('HMPR')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_HMPR.setOrdinal(8)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_HMPR)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CDNA = tr.createNewVocabularyTerm('CDNA')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CDNA.setDescription('complementary DNA')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CDNA.setLabel('cDNA')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CDNA.setOrdinal(9)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_CDNA)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_PCR = tr.createNewVocabularyTerm('PCR')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_PCR.setDescription('Source material was selected by designed primers')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_PCR.setLabel('PCR')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_PCR.setOrdinal(10)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_PCR)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RANDOM_PCR = tr.createNewVocabularyTerm('RANDOM_PCR')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RANDOM_PCR.setDescription('Source material was selected by randomly generated primers')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RANDOM_PCR.setLabel('RANDOM PCR')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RANDOM_PCR.setOrdinal(11)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_RANDOM_PCR)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RTPCR = tr.createNewVocabularyTerm('RT-PCR')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RTPCR.setDescription('Source material was selected by reverse transcription PCR')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RTPCR.setLabel('RT-PCR')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_RTPCR.setOrdinal(12)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_RTPCR)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFS = tr.createNewVocabularyTerm('CF-S')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFS.setDescription('Cot-filtered single/low-copy genomic DNA')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFS.setLabel('CF-S')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFS.setOrdinal(13)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFS)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFM = tr.createNewVocabularyTerm('CF-M')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFM.setDescription('Cot-filtered moderately repetitive genomic DNA')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFM.setLabel('CF-M')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFM.setOrdinal(14)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFM)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFH = tr.createNewVocabularyTerm('CF-H')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFH.setDescription('Cot-filtered highly repetitive genomic DNA')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFH.setLabel('CF-H')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFH.setOrdinal(15)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFH)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFT = tr.createNewVocabularyTerm('CF-T')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFT.setDescription('Cot-filtered theoretical single-copy genomic DNA')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFT.setLabel('CF-T')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFT.setOrdinal(16)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_CFT)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_OTHER = tr.createNewVocabularyTerm('OTHER')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_OTHER.setDescription(None)
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_OTHER.setLabel('other')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_OTHER.setOrdinal(17)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_OTHER)
-
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_UNSPECIFIED = tr.createNewVocabularyTerm('UNSPECIFIED')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_UNSPECIFIED.setDescription(None)
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_UNSPECIFIED.setLabel('unspecified')
-vocabulary_term_SAMPLE_LIBRARY_SELECTION_UNSPECIFIED.setOrdinal(18)
-vocabulary_SAMPLE_LIBRARY_SELECTION.addTerm(vocabulary_term_SAMPLE_LIBRARY_SELECTION_UNSPECIFIED)
-
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC = tr.getOrCreateNewVocabulary('SAMPLE_LIBRARY_SOURCE_VOC')
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC.setDescription(None)
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC.setUrlTemplate(None)
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC.setManagedInternally(False)
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC.setInternalNamespace(False)
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC.setChosenFromList(True)
-
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_GENOMIC = tr.createNewVocabularyTerm('GENOMIC')
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_GENOMIC.setDescription(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_GENOMIC.setLabel(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_GENOMIC.setOrdinal(1)
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC.addTerm(vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_GENOMIC)
-
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_NONGENOMIC = tr.createNewVocabularyTerm('NON-GENOMIC')
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_NONGENOMIC.setDescription(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_NONGENOMIC.setLabel(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_NONGENOMIC.setOrdinal(2)
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC.addTerm(vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_NONGENOMIC)
-
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_SYNTHETIC = tr.createNewVocabularyTerm('SYNTHETIC')
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_SYNTHETIC.setDescription(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_SYNTHETIC.setLabel(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_SYNTHETIC.setOrdinal(3)
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC.addTerm(vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_SYNTHETIC)
-
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_VIRAL = tr.createNewVocabularyTerm('VIRAL')
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_VIRAL.setDescription(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_VIRAL.setLabel(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_VIRAL.setOrdinal(4)
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC.addTerm(vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_VIRAL)
-
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_RNA = tr.createNewVocabularyTerm('RNA')
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_RNA.setDescription(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_RNA.setLabel(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_RNA.setOrdinal(5)
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC.addTerm(vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_RNA)
-
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_OTHER = tr.createNewVocabularyTerm('OTHER')
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_OTHER.setDescription(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_OTHER.setLabel(None)
-vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_OTHER.setOrdinal(6)
-vocabulary_SAMPLE_LIBRARY_SOURCE_VOC.addTerm(vocabulary_term_SAMPLE_LIBRARY_SOURCE_VOC_OTHER)
-
-vocabulary_SAMPLE_LIBRARY_STRATEGY = tr.getOrCreateNewVocabulary('SAMPLE_LIBRARY_STRATEGY')
-vocabulary_SAMPLE_LIBRARY_STRATEGY.setDescription('Sequencing technique for this library.')
-vocabulary_SAMPLE_LIBRARY_STRATEGY.setUrlTemplate(None)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.setManagedInternally(False)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.setInternalNamespace(False)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.setChosenFromList(True)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CHIPSEQ = tr.createNewVocabularyTerm('CHIP-SEQ')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CHIPSEQ.setDescription('Direct sequencing of chromatin immunoprecipitates')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CHIPSEQ.setLabel('ChIP-Seq')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CHIPSEQ.setOrdinal(1)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CHIPSEQ)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_RNASEQ = tr.createNewVocabularyTerm('RNA-SEQ')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_RNASEQ.setDescription('RNA sequencing')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_RNASEQ.setLabel('RNA-Seq')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_RNASEQ.setOrdinal(2)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_RNASEQ)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MEDIPSEQ = tr.createNewVocabularyTerm('MEDIP-SEQ')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MEDIPSEQ.setDescription('Methylated DNA immunoprecipitation sequencing')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MEDIPSEQ.setLabel('MeDIP-Seq')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MEDIPSEQ.setOrdinal(3)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MEDIPSEQ)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MNASESEQ = tr.createNewVocabularyTerm('MNASE-SEQ')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MNASESEQ.setDescription('Direct sequencing following MNase digestion')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MNASESEQ.setLabel('MNase-Seq')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MNASESEQ.setOrdinal(4)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MNASESEQ)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MRESEQ = tr.createNewVocabularyTerm('MRE-SEQ')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MRESEQ.setDescription('Methylation-sensitive restriction enzyme sequencing')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MRESEQ.setLabel('MRE-Seq')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MRESEQ.setOrdinal(5)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_MRESEQ)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_EST = tr.createNewVocabularyTerm('EST')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_EST.setDescription('Single pass sequencing of cDNA templates')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_EST.setLabel('EST')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_EST.setOrdinal(6)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_EST)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_FLCDNA = tr.createNewVocabularyTerm('FL-CDNA')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_FLCDNA.setDescription('Full-length sequencing of cDNA templates')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_FLCDNA.setLabel('FL-cDNA')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_FLCDNA.setOrdinal(7)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_FLCDNA)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CTS = tr.createNewVocabularyTerm('CTS')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CTS.setDescription('Concatenated Tag Sequencing')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CTS.setLabel('CTS')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CTS.setOrdinal(8)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CTS)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_BARCODE = tr.createNewVocabularyTerm('BARCODE')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_BARCODE.setDescription('Sequencing of products that have been tagged with a short identifying sequence (barcode)')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_BARCODE.setLabel('BARCODE')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_BARCODE.setOrdinal(9)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_BARCODE)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CLONEEND = tr.createNewVocabularyTerm('CLONEEND')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CLONEEND.setDescription('"Clone end (5\', 3\', or both) sequencing"')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CLONEEND.setLabel('CLONEEND')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CLONEEND.setOrdinal(10)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CLONEEND)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_WGS = tr.createNewVocabularyTerm('WGS')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_WGS.setDescription('Whole genome shotgun')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_WGS.setLabel('WGS')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_WGS.setOrdinal(11)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_WGS)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_WCS = tr.createNewVocabularyTerm('WCS')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_WCS.setDescription('Whole chromosome (or other replicon) shotgun')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_WCS.setLabel('WCS')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_WCS.setOrdinal(12)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_WCS)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CLONE = tr.createNewVocabularyTerm('CLONE')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CLONE.setDescription('Genomic clone based (hierarchical) sequencing')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CLONE.setLabel('CLONE')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CLONE.setOrdinal(13)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_CLONE)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_POOLCLONE = tr.createNewVocabularyTerm('POOLCLONE')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_POOLCLONE.setDescription('Shotgun of pooled clones (usually BACs and Fosmids)')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_POOLCLONE.setLabel('POOLCLONE')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_POOLCLONE.setOrdinal(14)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_POOLCLONE)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_AMPLICON = tr.createNewVocabularyTerm('AMPLICON')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_AMPLICON.setDescription('Sequencing of overlapping or distinct PCR or RT-PCR products')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_AMPLICON.setLabel('AMPLICON')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_AMPLICON.setOrdinal(15)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_AMPLICON)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_FINISHING = tr.createNewVocabularyTerm('FINISHING')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_FINISHING.setDescription('Sequencing intended to finish (close) gaps in existing coverage')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_FINISHING.setLabel('FINISHING')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_FINISHING.setOrdinal(16)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_FINISHING)
-
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_OTHER = tr.createNewVocabularyTerm('OTHER')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_OTHER.setDescription('Library strategy not listed')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_OTHER.setLabel('OTHER')
-vocabulary_term_SAMPLE_LIBRARY_STRATEGY_OTHER.setOrdinal(17)
-vocabulary_SAMPLE_LIBRARY_STRATEGY.addTerm(vocabulary_term_SAMPLE_LIBRARY_STRATEGY_OTHER)
-
-vocabulary_SAMPLE_MOLECULE = tr.getOrCreateNewVocabulary('SAMPLE_MOLECULE')
-vocabulary_SAMPLE_MOLECULE.setDescription(None)
-vocabulary_SAMPLE_MOLECULE.setUrlTemplate(None)
-vocabulary_SAMPLE_MOLECULE.setManagedInternally(False)
-vocabulary_SAMPLE_MOLECULE.setInternalNamespace(False)
-vocabulary_SAMPLE_MOLECULE.setChosenFromList(True)
-
-vocabulary_term_SAMPLE_MOLECULE_TOTAL_RNA = tr.createNewVocabularyTerm('TOTAL_RNA')
-vocabulary_term_SAMPLE_MOLECULE_TOTAL_RNA.setDescription(None)
-vocabulary_term_SAMPLE_MOLECULE_TOTAL_RNA.setLabel(None)
-vocabulary_term_SAMPLE_MOLECULE_TOTAL_RNA.setOrdinal(1)
-vocabulary_SAMPLE_MOLECULE.addTerm(vocabulary_term_SAMPLE_MOLECULE_TOTAL_RNA)
-
-vocabulary_term_SAMPLE_MOLECULE_POLYA_RNA = tr.createNewVocabularyTerm('POLYA_RNA')
-vocabulary_term_SAMPLE_MOLECULE_POLYA_RNA.setDescription(None)
-vocabulary_term_SAMPLE_MOLECULE_POLYA_RNA.setLabel(None)
-vocabulary_term_SAMPLE_MOLECULE_POLYA_RNA.setOrdinal(2)
-vocabulary_SAMPLE_MOLECULE.addTerm(vocabulary_term_SAMPLE_MOLECULE_POLYA_RNA)
-
-vocabulary_term_SAMPLE_MOLECULE_CYTOPLASMIC_RNA = tr.createNewVocabularyTerm('CYTOPLASMIC_RNA')
-vocabulary_term_SAMPLE_MOLECULE_CYTOPLASMIC_RNA.setDescription(None)
-vocabulary_term_SAMPLE_MOLECULE_CYTOPLASMIC_RNA.setLabel(None)
-vocabulary_term_SAMPLE_MOLECULE_CYTOPLASMIC_RNA.setOrdinal(3)
-vocabulary_SAMPLE_MOLECULE.addTerm(vocabulary_term_SAMPLE_MOLECULE_CYTOPLASMIC_RNA)
-
-vocabulary_term_SAMPLE_MOLECULE_NUCLEAR_RNA = tr.createNewVocabularyTerm('NUCLEAR_RNA')
-vocabulary_term_SAMPLE_MOLECULE_NUCLEAR_RNA.setDescription(None)
-vocabulary_term_SAMPLE_MOLECULE_NUCLEAR_RNA.setLabel(None)
-vocabulary_term_SAMPLE_MOLECULE_NUCLEAR_RNA.setOrdinal(4)
-vocabulary_SAMPLE_MOLECULE.addTerm(vocabulary_term_SAMPLE_MOLECULE_NUCLEAR_RNA)
-
-vocabulary_term_SAMPLE_MOLECULE_GENOMIC_DNA = tr.createNewVocabularyTerm('GENOMIC_DNA')
-vocabulary_term_SAMPLE_MOLECULE_GENOMIC_DNA.setDescription(None)
-vocabulary_term_SAMPLE_MOLECULE_GENOMIC_DNA.setLabel(None)
-vocabulary_term_SAMPLE_MOLECULE_GENOMIC_DNA.setOrdinal(5)
-vocabulary_SAMPLE_MOLECULE.addTerm(vocabulary_term_SAMPLE_MOLECULE_GENOMIC_DNA)
-
-vocabulary_term_SAMPLE_MOLECULE_PROTEIN = tr.createNewVocabularyTerm('PROTEIN')
-vocabulary_term_SAMPLE_MOLECULE_PROTEIN.setDescription(None)
-vocabulary_term_SAMPLE_MOLECULE_PROTEIN.setLabel(None)
-vocabulary_term_SAMPLE_MOLECULE_PROTEIN.setOrdinal(6)
-vocabulary_SAMPLE_MOLECULE.addTerm(vocabulary_term_SAMPLE_MOLECULE_PROTEIN)
-
-vocabulary_term_SAMPLE_MOLECULE_OTHER = tr.createNewVocabularyTerm('OTHER')
-vocabulary_term_SAMPLE_MOLECULE_OTHER.setDescription(None)
-vocabulary_term_SAMPLE_MOLECULE_OTHER.setLabel(None)
-vocabulary_term_SAMPLE_MOLECULE_OTHER.setOrdinal(7)
-vocabulary_SAMPLE_MOLECULE.addTerm(vocabulary_term_SAMPLE_MOLECULE_OTHER)
-
-vocabulary_SAMPLE_TYPE = tr.getOrCreateNewVocabulary('SAMPLE_TYPE')
-vocabulary_SAMPLE_TYPE.setDescription('Type of sample delivered by the customer')
-vocabulary_SAMPLE_TYPE.setUrlTemplate(None)
-vocabulary_SAMPLE_TYPE.setManagedInternally(False)
-vocabulary_SAMPLE_TYPE.setInternalNamespace(False)
-vocabulary_SAMPLE_TYPE.setChosenFromList(True)
-
-vocabulary_term_SAMPLE_TYPE_GENOMIC_DNA = tr.createNewVocabularyTerm('GENOMIC_DNA')
-vocabulary_term_SAMPLE_TYPE_GENOMIC_DNA.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_GENOMIC_DNA.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_GENOMIC_DNA.setOrdinal(1)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_GENOMIC_DNA)
-
-vocabulary_term_SAMPLE_TYPE_SMALL_RNA = tr.createNewVocabularyTerm('SMALL_RNA')
-vocabulary_term_SAMPLE_TYPE_SMALL_RNA.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_SMALL_RNA.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_SMALL_RNA.setOrdinal(2)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_SMALL_RNA)
-
-vocabulary_term_SAMPLE_TYPE_TOTAL_RNA = tr.createNewVocabularyTerm('TOTAL_RNA')
-vocabulary_term_SAMPLE_TYPE_TOTAL_RNA.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_TOTAL_RNA.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_TOTAL_RNA.setOrdinal(3)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_TOTAL_RNA)
-
-vocabulary_term_SAMPLE_TYPE_CHIP = tr.createNewVocabularyTerm('CHIP')
-vocabulary_term_SAMPLE_TYPE_CHIP.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_CHIP.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_CHIP.setOrdinal(4)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_CHIP)
-
-vocabulary_term_SAMPLE_TYPE_VIRAL = tr.createNewVocabularyTerm('VIRAL')
-vocabulary_term_SAMPLE_TYPE_VIRAL.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_VIRAL.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_VIRAL.setOrdinal(5)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_VIRAL)
-
-vocabulary_term_SAMPLE_TYPE_SYNTHETIC = tr.createNewVocabularyTerm('SYNTHETIC')
-vocabulary_term_SAMPLE_TYPE_SYNTHETIC.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_SYNTHETIC.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_SYNTHETIC.setOrdinal(6)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_SYNTHETIC)
-
-vocabulary_term_SAMPLE_TYPE_FRAGMENTED_GENOMIC_DNA = tr.createNewVocabularyTerm('FRAGMENTED_GENOMIC_DNA')
-vocabulary_term_SAMPLE_TYPE_FRAGMENTED_GENOMIC_DNA.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_FRAGMENTED_GENOMIC_DNA.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_FRAGMENTED_GENOMIC_DNA.setOrdinal(7)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_FRAGMENTED_GENOMIC_DNA)
-
-vocabulary_term_SAMPLE_TYPE_MRNA = tr.createNewVocabularyTerm('MRNA')
-vocabulary_term_SAMPLE_TYPE_MRNA.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_MRNA.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_MRNA.setOrdinal(8)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_MRNA)
-
-vocabulary_term_SAMPLE_TYPE_OTHER = tr.createNewVocabularyTerm('OTHER')
-vocabulary_term_SAMPLE_TYPE_OTHER.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_OTHER.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_OTHER.setOrdinal(9)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_OTHER)
-
-vocabulary_term_SAMPLE_TYPE_PROCESSED_DNA_LIBRARY = tr.createNewVocabularyTerm('PROCESSED_DNA_LIBRARY')
-vocabulary_term_SAMPLE_TYPE_PROCESSED_DNA_LIBRARY.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_PROCESSED_DNA_LIBRARY.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_PROCESSED_DNA_LIBRARY.setOrdinal(10)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_PROCESSED_DNA_LIBRARY)
-
-vocabulary_term_SAMPLE_TYPE_BISULFITE_CHIP = tr.createNewVocabularyTerm('BISULFITE_CHIP')
-vocabulary_term_SAMPLE_TYPE_BISULFITE_CHIP.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_BISULFITE_CHIP.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_BISULFITE_CHIP.setOrdinal(11)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_BISULFITE_CHIP)
-
-vocabulary_term_SAMPLE_TYPE_NONGENOMIC = tr.createNewVocabularyTerm('NON-GENOMIC')
-vocabulary_term_SAMPLE_TYPE_NONGENOMIC.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_NONGENOMIC.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_NONGENOMIC.setOrdinal(12)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_NONGENOMIC)
-
-vocabulary_SBS_SEQUENCING_KIT_VERSION = tr.getOrCreateNewVocabulary('SBS_SEQUENCING_KIT_VERSION')
-vocabulary_SBS_SEQUENCING_KIT_VERSION.setDescription('Version of the Sequencing by Synthesis (SBS) Kit')
-vocabulary_SBS_SEQUENCING_KIT_VERSION.setUrlTemplate(None)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.setManagedInternally(False)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.setInternalNamespace(False)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.setChosenFromList(True)
-
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_TRUSEQ_V5 = tr.createNewVocabularyTerm('TRUSEQ_V5')
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_TRUSEQ_V5.setDescription(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_TRUSEQ_V5.setLabel('TruSeq v5')
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_TRUSEQ_V5.setOrdinal(1)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.addTerm(vocabulary_term_SBS_SEQUENCING_KIT_VERSION_TRUSEQ_V5)
-
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V5 = tr.createNewVocabularyTerm('V5')
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V5.setDescription(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V5.setLabel(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V5.setOrdinal(2)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.addTerm(vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V5)
-
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V4 = tr.createNewVocabularyTerm('V4')
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V4.setDescription(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V4.setLabel(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V4.setOrdinal(3)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.addTerm(vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V4)
-
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V3 = tr.createNewVocabularyTerm('V3')
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V3.setDescription(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V3.setLabel(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V3.setOrdinal(4)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.addTerm(vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V3)
-
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_SBS_HS_V3 = tr.createNewVocabularyTerm('SBS_HS_V3')
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_SBS_HS_V3.setDescription(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_SBS_HS_V3.setLabel('TruSeq SBS HS v3')
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_SBS_HS_V3.setOrdinal(5)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.addTerm(vocabulary_term_SBS_SEQUENCING_KIT_VERSION_SBS_HS_V3)
-
-vocabulary_SCS_PROTOCOL_VERSION = tr.getOrCreateNewVocabulary('SCS_PROTOCOL_VERSION')
-vocabulary_SCS_PROTOCOL_VERSION.setDescription('THE Illumina protocol')
-vocabulary_SCS_PROTOCOL_VERSION.setUrlTemplate(None)
-vocabulary_SCS_PROTOCOL_VERSION.setManagedInternally(False)
-vocabulary_SCS_PROTOCOL_VERSION.setInternalNamespace(False)
-vocabulary_SCS_PROTOCOL_VERSION.setChosenFromList(True)
-
-vocabulary_term_SCS_PROTOCOL_VERSION_V8 = tr.createNewVocabularyTerm('V8')
-vocabulary_term_SCS_PROTOCOL_VERSION_V8.setDescription(None)
-vocabulary_term_SCS_PROTOCOL_VERSION_V8.setLabel(None)
-vocabulary_term_SCS_PROTOCOL_VERSION_V8.setOrdinal(1)
-vocabulary_SCS_PROTOCOL_VERSION.addTerm(vocabulary_term_SCS_PROTOCOL_VERSION_V8)
-
-vocabulary_term_SCS_PROTOCOL_VERSION_V6 = tr.createNewVocabularyTerm('V6')
-vocabulary_term_SCS_PROTOCOL_VERSION_V6.setDescription(None)
-vocabulary_term_SCS_PROTOCOL_VERSION_V6.setLabel(None)
-vocabulary_term_SCS_PROTOCOL_VERSION_V6.setOrdinal(2)
-vocabulary_SCS_PROTOCOL_VERSION.addTerm(vocabulary_term_SCS_PROTOCOL_VERSION_V6)
-
-vocabulary_term_SCS_PROTOCOL_VERSION_V7 = tr.createNewVocabularyTerm('V7')
-vocabulary_term_SCS_PROTOCOL_VERSION_V7.setDescription(None)
-vocabulary_term_SCS_PROTOCOL_VERSION_V7.setLabel(None)
-vocabulary_term_SCS_PROTOCOL_VERSION_V7.setOrdinal(3)
-vocabulary_SCS_PROTOCOL_VERSION.addTerm(vocabulary_term_SCS_PROTOCOL_VERSION_V7)
-
-vocabulary_SCS_SOFTWARE_VERSION = tr.getOrCreateNewVocabulary('SCS_SOFTWARE_VERSION')
-vocabulary_SCS_SOFTWARE_VERSION.setDescription('Software version of the Sequencing PC attached to the GA')
-vocabulary_SCS_SOFTWARE_VERSION.setUrlTemplate(None)
-vocabulary_SCS_SOFTWARE_VERSION.setManagedInternally(False)
-vocabulary_SCS_SOFTWARE_VERSION.setInternalNamespace(False)
-vocabulary_SCS_SOFTWARE_VERSION.setChosenFromList(True)
-
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_1515 = tr.createNewVocabularyTerm('HCS_1.5.15')
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_1515.setDescription(None)
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_1515.setLabel('HCS 1.5.15/1.13.48')
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_1515.setOrdinal(1)
-vocabulary_SCS_SOFTWARE_VERSION.addTerm(vocabulary_term_SCS_SOFTWARE_VERSION_HCS_1515)
-
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_145 = tr.createNewVocabularyTerm('HCS_1.4.5')
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_145.setDescription(None)
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_145.setLabel('HCS 1.4.5/RTA 1.12.4')
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_145.setOrdinal(2)
-vocabulary_SCS_SOFTWARE_VERSION.addTerm(vocabulary_term_SCS_SOFTWARE_VERSION_HCS_145)
-
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_14 = tr.createNewVocabularyTerm('HCS_1.4')
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_14.setDescription(None)
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_14.setLabel('HCS 1.4/RTA 1.12')
-vocabulary_term_SCS_SOFTWARE_VERSION_HCS_14.setOrdinal(3)
-vocabulary_SCS_SOFTWARE_VERSION.addTerm(vocabulary_term_SCS_SOFTWARE_VERSION_HCS_14)
-
-vocabulary_term_SCS_SOFTWARE_VERSION_210 = tr.createNewVocabularyTerm('2.10')
-vocabulary_term_SCS_SOFTWARE_VERSION_210.setDescription(None)
-vocabulary_term_SCS_SOFTWARE_VERSION_210.setLabel('2.10/RTA 1.13.48')
-vocabulary_term_SCS_SOFTWARE_VERSION_210.setOrdinal(4)
-vocabulary_SCS_SOFTWARE_VERSION.addTerm(vocabulary_term_SCS_SOFTWARE_VERSION_210)
-
-vocabulary_term_SCS_SOFTWARE_VERSION_29 = tr.createNewVocabularyTerm('2.9')
-vocabulary_term_SCS_SOFTWARE_VERSION_29.setDescription(None)
-vocabulary_term_SCS_SOFTWARE_VERSION_29.setLabel('2.9/RTA2.9')
-vocabulary_term_SCS_SOFTWARE_VERSION_29.setOrdinal(5)
-vocabulary_SCS_SOFTWARE_VERSION.addTerm(vocabulary_term_SCS_SOFTWARE_VERSION_29)
-
-vocabulary_term_SCS_SOFTWARE_VERSION_28 = tr.createNewVocabularyTerm('2.8')
-vocabulary_term_SCS_SOFTWARE_VERSION_28.setDescription(None)
-vocabulary_term_SCS_SOFTWARE_VERSION_28.setLabel('2.8/RTA 1.8')
-vocabulary_term_SCS_SOFTWARE_VERSION_28.setOrdinal(6)
-vocabulary_SCS_SOFTWARE_VERSION.addTerm(vocabulary_term_SCS_SOFTWARE_VERSION_28)
-
-vocabulary_term_SCS_SOFTWARE_VERSION_26 = tr.createNewVocabularyTerm('2.6')
-vocabulary_term_SCS_SOFTWARE_VERSION_26.setDescription(None)
-vocabulary_term_SCS_SOFTWARE_VERSION_26.setLabel('2.6/RTA 1.6 (no longer in use)')
-vocabulary_term_SCS_SOFTWARE_VERSION_26.setOrdinal(7)
-vocabulary_SCS_SOFTWARE_VERSION.addTerm(vocabulary_term_SCS_SOFTWARE_VERSION_26)
-
-vocabulary_term_SCS_SOFTWARE_VERSION_25 = tr.createNewVocabularyTerm('2.5')
-vocabulary_term_SCS_SOFTWARE_VERSION_25.setDescription(None)
-vocabulary_term_SCS_SOFTWARE_VERSION_25.setLabel('2.5 (no longer in use)')
-vocabulary_term_SCS_SOFTWARE_VERSION_25.setOrdinal(8)
-vocabulary_SCS_SOFTWARE_VERSION.addTerm(vocabulary_term_SCS_SOFTWARE_VERSION_25)
-
-vocabulary_term_SCS_SOFTWARE_VERSION_24 = tr.createNewVocabularyTerm('2.4')
-vocabulary_term_SCS_SOFTWARE_VERSION_24.setDescription(None)
-vocabulary_term_SCS_SOFTWARE_VERSION_24.setLabel('2.4 (no longer in use)')
-vocabulary_term_SCS_SOFTWARE_VERSION_24.setOrdinal(9)
-vocabulary_SCS_SOFTWARE_VERSION.addTerm(vocabulary_term_SCS_SOFTWARE_VERSION_24)
-
-vocabulary_SEQUENCER = tr.getOrCreateNewVocabulary('SEQUENCER')
-vocabulary_SEQUENCER.setDescription('Which Sequencer was used?')
-vocabulary_SEQUENCER.setUrlTemplate(None)
-vocabulary_SEQUENCER.setManagedInternally(False)
-vocabulary_SEQUENCER.setInternalNamespace(False)
-vocabulary_SEQUENCER.setChosenFromList(True)
-
-vocabulary_term_SEQUENCER_HISEQ2500 = tr.createNewVocabularyTerm('HISEQ2500')
-vocabulary_term_SEQUENCER_HISEQ2500.setDescription(None)
-vocabulary_term_SEQUENCER_HISEQ2500.setLabel(None)
-vocabulary_term_SEQUENCER_HISEQ2500.setOrdinal(3)
-vocabulary_SEQUENCER.addTerm(vocabulary_term_SEQUENCER_HISEQ2500)
-
-vocabulary_term_SEQUENCER_HISEQ2000 = tr.createNewVocabularyTerm('HISEQ2000')
-vocabulary_term_SEQUENCER_HISEQ2000.setDescription(None)
-vocabulary_term_SEQUENCER_HISEQ2000.setLabel(None)
-vocabulary_term_SEQUENCER_HISEQ2000.setOrdinal(4)
-vocabulary_SEQUENCER.addTerm(vocabulary_term_SEQUENCER_HISEQ2000)
-
-vocabulary_SEQUENCING_APPLICATION = tr.getOrCreateNewVocabulary('SEQUENCING_APPLICATION')
-vocabulary_SEQUENCING_APPLICATION.setDescription('Type of experiment of the High Throughput Sequencing applications')
-vocabulary_SEQUENCING_APPLICATION.setUrlTemplate(None)
-vocabulary_SEQUENCING_APPLICATION.setManagedInternally(False)
-vocabulary_SEQUENCING_APPLICATION.setInternalNamespace(False)
-vocabulary_SEQUENCING_APPLICATION.setChosenFromList(True)
-
-vocabulary_term_SEQUENCING_APPLICATION_SMALL_RNA_SEQ = tr.createNewVocabularyTerm('SMALL_RNA_SEQ')
-vocabulary_term_SEQUENCING_APPLICATION_SMALL_RNA_SEQ.setDescription(None)
-vocabulary_term_SEQUENCING_APPLICATION_SMALL_RNA_SEQ.setLabel(None)
-vocabulary_term_SEQUENCING_APPLICATION_SMALL_RNA_SEQ.setOrdinal(1)
-vocabulary_SEQUENCING_APPLICATION.addTerm(vocabulary_term_SEQUENCING_APPLICATION_SMALL_RNA_SEQ)
-
-vocabulary_term_SEQUENCING_APPLICATION_RNA_SEQ = tr.createNewVocabularyTerm('RNA_SEQ')
-vocabulary_term_SEQUENCING_APPLICATION_RNA_SEQ.setDescription(None)
-vocabulary_term_SEQUENCING_APPLICATION_RNA_SEQ.setLabel(None)
-vocabulary_term_SEQUENCING_APPLICATION_RNA_SEQ.setOrdinal(2)
-vocabulary_SEQUENCING_APPLICATION.addTerm(vocabulary_term_SEQUENCING_APPLICATION_RNA_SEQ)
-
-vocabulary_term_SEQUENCING_APPLICATION_GENOMIC_DNA_SEQ = tr.createNewVocabularyTerm('GENOMIC_DNA_SEQ')
-vocabulary_term_SEQUENCING_APPLICATION_GENOMIC_DNA_SEQ.setDescription(None)
-vocabulary_term_SEQUENCING_APPLICATION_GENOMIC_DNA_SEQ.setLabel(None)
-vocabulary_term_SEQUENCING_APPLICATION_GENOMIC_DNA_SEQ.setOrdinal(3)
-vocabulary_SEQUENCING_APPLICATION.addTerm(vocabulary_term_SEQUENCING_APPLICATION_GENOMIC_DNA_SEQ)
-
-vocabulary_term_SEQUENCING_APPLICATION_CHIP_SEQ = tr.createNewVocabularyTerm('CHIP_SEQ')
-vocabulary_term_SEQUENCING_APPLICATION_CHIP_SEQ.setDescription(None)
-vocabulary_term_SEQUENCING_APPLICATION_CHIP_SEQ.setLabel(None)
-vocabulary_term_SEQUENCING_APPLICATION_CHIP_SEQ.setOrdinal(4)
-vocabulary_SEQUENCING_APPLICATION.addTerm(vocabulary_term_SEQUENCING_APPLICATION_CHIP_SEQ)
-
-exp_type_HT_SEQUENCING = tr.getOrCreateNewExperimentType('HT_SEQUENCING')
-exp_type_HT_SEQUENCING.setDescription('High Throughput Sequencing (e.g. Illumina HiSeq, Illumina GA)')
-
-samp_type_ILLUMINA_FLOW_CELL = tr.getOrCreateNewSampleType('ILLUMINA_FLOW_CELL')
-samp_type_ILLUMINA_FLOW_CELL.setDescription('Container of ILLUMINA_FLOW_LANES')
-samp_type_ILLUMINA_FLOW_CELL.setListable(True)
-samp_type_ILLUMINA_FLOW_CELL.setShowContainer(False)
-samp_type_ILLUMINA_FLOW_CELL.setShowParents(False)
-samp_type_ILLUMINA_FLOW_CELL.setSubcodeUnique(False)
-samp_type_ILLUMINA_FLOW_CELL.setAutoGeneratedCode(False)
-samp_type_ILLUMINA_FLOW_CELL.setGeneratedCodePrefix('FLOWCELL-')
-
-samp_type_ILLUMINA_FLOW_LANE = tr.getOrCreateNewSampleType('ILLUMINA_FLOW_LANE')
-samp_type_ILLUMINA_FLOW_LANE.setDescription('Child of LIBRARY or POOL')
-samp_type_ILLUMINA_FLOW_LANE.setListable(True)
-samp_type_ILLUMINA_FLOW_LANE.setShowContainer(True)
-samp_type_ILLUMINA_FLOW_LANE.setShowParents(True)
-samp_type_ILLUMINA_FLOW_LANE.setSubcodeUnique(False)
-samp_type_ILLUMINA_FLOW_LANE.setAutoGeneratedCode(False)
-samp_type_ILLUMINA_FLOW_LANE.setGeneratedCodePrefix('FLOWLANE-')
-
-samp_type_LIBRARY = tr.getOrCreateNewSampleType('LIBRARY')
-samp_type_LIBRARY.setDescription('Child of RAW and potential parent of POOL')
-samp_type_LIBRARY.setListable(True)
-samp_type_LIBRARY.setShowContainer(False)
-samp_type_LIBRARY.setShowParents(True)
-samp_type_LIBRARY.setSubcodeUnique(False)
-samp_type_LIBRARY.setAutoGeneratedCode(True)
-samp_type_LIBRARY.setGeneratedCodePrefix('QGF-LIBRARY-')
-
-samp_type_MASTER = tr.getOrCreateNewSampleType('MASTER')
-samp_type_MASTER.setDescription('Sample Type holding Master Data and a parent to RAW')
-samp_type_MASTER.setListable(True)
-samp_type_MASTER.setShowContainer(False)
-samp_type_MASTER.setShowParents(False)
-samp_type_MASTER.setSubcodeUnique(False)
-samp_type_MASTER.setAutoGeneratedCode(True)
-samp_type_MASTER.setGeneratedCodePrefix('QGF-MASTER-')
-
-samp_type_POOL = tr.getOrCreateNewSampleType('POOL')
-samp_type_POOL.setDescription('Child of several LIBRARY samples, used for multiplexing')
-samp_type_POOL.setListable(True)
-samp_type_POOL.setShowContainer(False)
-samp_type_POOL.setShowParents(True)
-samp_type_POOL.setSubcodeUnique(False)
-samp_type_POOL.setAutoGeneratedCode(True)
-samp_type_POOL.setGeneratedCodePrefix('QGF-POOL-')
-
-samp_type_RAW = tr.getOrCreateNewSampleType('RAW')
-samp_type_RAW.setDescription('Child of MASTER')
-samp_type_RAW.setListable(True)
-samp_type_RAW.setShowContainer(False)
-samp_type_RAW.setShowParents(True)
-samp_type_RAW.setSubcodeUnique(False)
-samp_type_RAW.setAutoGeneratedCode(True)
-samp_type_RAW.setGeneratedCodePrefix('QGF-RAW-')
-
-data_set_type_ALIGNMENT = tr.getOrCreateNewDataSetType('ALIGNMENT')
-data_set_type_ALIGNMENT.setDescription('Aligner ouput, ideally bam/sam')
-
-data_set_type_BASECALL_STATS = tr.getOrCreateNewDataSetType('BASECALL_STATS')
-data_set_type_BASECALL_STATS.setDescription('Base Call Statistics from the Illumina Pipeline (configureBclToFastq.pl)')
-
-data_set_type_BIGWIGGLE = tr.getOrCreateNewDataSetType('BIGWIGGLE')
-data_set_type_BIGWIGGLE.setDescription('Visualization')
-
-data_set_type_ELAND_ALIGNMENT = tr.getOrCreateNewDataSetType('ELAND_ALIGNMENT')
-data_set_type_ELAND_ALIGNMENT.setDescription('Illumina Eland Alignment Output')
-
-data_set_type_FASTQ_GZ = tr.getOrCreateNewDataSetType('FASTQ_GZ')
-data_set_type_FASTQ_GZ.setDescription('Gzipped Fastq file produced by Casava 1.8+')
-
-data_set_type_ILLUMINA_GA_OUTPUT = tr.getOrCreateNewDataSetType('ILLUMINA_GA_OUTPUT')
-data_set_type_ILLUMINA_GA_OUTPUT.setDescription('The directory structure as produced by the Illumina GA Pipeline (whatever Illumina spits out)\ ')
-
-data_set_type_ILLUMINA_HISEQ_OUTPUT = tr.getOrCreateNewDataSetType('ILLUMINA_HISEQ_OUTPUT')
-data_set_type_ILLUMINA_HISEQ_OUTPUT.setDescription('HiSeq2000 Output')
-
-data_set_type_MACS_OUTPUT = tr.getOrCreateNewDataSetType('MACS_OUTPUT')
-data_set_type_MACS_OUTPUT.setDescription('MACS Peak Caller output')
-
-data_set_type_QUALITY_JPGS = tr.getOrCreateNewDataSetType('QUALITY_JPGS')
-data_set_type_QUALITY_JPGS.setDescription('R generated Quality plots')
-
-data_set_type_QUALITY_PDFS = tr.getOrCreateNewDataSetType('QUALITY_PDFS')
-data_set_type_QUALITY_PDFS.setDescription('R generated pdfs showing quality data')
-
-data_set_type_QUALITY_SVG = tr.getOrCreateNewDataSetType('QUALITY_SVG')
-data_set_type_QUALITY_SVG.setDescription('R generated Quality plots')
-
-data_set_type_RUNINFO = tr.getOrCreateNewDataSetType('RUNINFO')
-data_set_type_RUNINFO.setDescription('Run statstics: Status.html and Status_Files folder')
-
-data_set_type_THUMBNAILS = tr.getOrCreateNewDataSetType('THUMBNAILS')
-data_set_type_THUMBNAILS.setDescription('Thumbnails provided by the Illumina software')
-
-data_set_type_TSV = tr.getOrCreateNewDataSetType('TSV')
-data_set_type_TSV.setDescription('Tab separated files')
-
-prop_type_AGILENT_KIT = tr.getOrCreateNewPropertyType('AGILENT_KIT', DataType.CONTROLLEDVOCABULARY)
-prop_type_AGILENT_KIT.setLabel('Agilent Kit')
-prop_type_AGILENT_KIT.setManagedInternally(False)
-prop_type_AGILENT_KIT.setInternalNamespace(False)
-
-prop_type_AGILENT_KIT.setVocabulary(vocabulary_AGILENT_KIT)
-
-prop_type_ALIGNMENT_SOFTWARE = tr.getOrCreateNewPropertyType('ALIGNMENT_SOFTWARE', DataType.CONTROLLEDVOCABULARY)
-prop_type_ALIGNMENT_SOFTWARE.setLabel('Alignment software')
-prop_type_ALIGNMENT_SOFTWARE.setManagedInternally(False)
-prop_type_ALIGNMENT_SOFTWARE.setInternalNamespace(False)
-
-prop_type_ALIGNMENT_SOFTWARE.setVocabulary(vocabulary_ALIGNMENT_SOFTWARE)
-
-prop_type_ANALYSIS_FINISHED = tr.getOrCreateNewPropertyType('ANALYSIS_FINISHED', DataType.TIMESTAMP)
-prop_type_ANALYSIS_FINISHED.setLabel('Analysis finished')
-prop_type_ANALYSIS_FINISHED.setManagedInternally(False)
-prop_type_ANALYSIS_FINISHED.setInternalNamespace(False)
-
-
-prop_type_BARCODE = tr.getOrCreateNewPropertyType('BARCODE', DataType.CONTROLLEDVOCABULARY)
-prop_type_BARCODE.setLabel('Index 1')
-prop_type_BARCODE.setManagedInternally(False)
-prop_type_BARCODE.setInternalNamespace(False)
-
-prop_type_BARCODE.setVocabulary(vocabulary_INDEX1)
-
-prop_type_BARCODES = tr.getOrCreateNewPropertyType('BARCODES', DataType.MULTILINE_VARCHAR)
-prop_type_BARCODES.setLabel('Adaptor and Barcodes')
-prop_type_BARCODES.setManagedInternally(False)
-prop_type_BARCODES.setInternalNamespace(False)
-
-
-prop_type_BARCODE_COMPLEXITY_CHECKER = tr.getOrCreateNewPropertyType('BARCODE_COMPLEXITY_CHECKER', DataType.MULTILINE_VARCHAR)
-prop_type_BARCODE_COMPLEXITY_CHECKER.setLabel('Barcode_Complexity_Checker')
-prop_type_BARCODE_COMPLEXITY_CHECKER.setManagedInternally(False)
-prop_type_BARCODE_COMPLEXITY_CHECKER.setInternalNamespace(False)
-
-
-prop_type_BARCODE_LENGTH = tr.getOrCreateNewPropertyType('BARCODE_LENGTH', DataType.INTEGER)
-prop_type_BARCODE_LENGTH.setLabel('Barcode Length (+ recognition site)')
-prop_type_BARCODE_LENGTH.setManagedInternally(False)
-prop_type_BARCODE_LENGTH.setInternalNamespace(False)
-
-
-prop_type_BAREBACKED = tr.getOrCreateNewPropertyType('BAREBACKED', DataType.BOOLEAN)
-prop_type_BAREBACKED.setLabel('Barebacked?')
-prop_type_BAREBACKED.setManagedInternally(False)
-prop_type_BAREBACKED.setInternalNamespace(False)
-
-
-prop_type_BASESCOVERED = tr.getOrCreateNewPropertyType('BASESCOVERED', DataType.INTEGER)
-prop_type_BASESCOVERED.setLabel('bases Covered')
-prop_type_BASESCOVERED.setManagedInternally(False)
-prop_type_BASESCOVERED.setInternalNamespace(False)
-
-
-prop_type_BIOLOGICAL_SAMPLE_ARRIVED = tr.getOrCreateNewPropertyType('BIOLOGICAL_SAMPLE_ARRIVED', DataType.TIMESTAMP)
-prop_type_BIOLOGICAL_SAMPLE_ARRIVED.setLabel('Arrival Date of Biological Sample')
-prop_type_BIOLOGICAL_SAMPLE_ARRIVED.setManagedInternally(False)
-prop_type_BIOLOGICAL_SAMPLE_ARRIVED.setInternalNamespace(False)
-
-
-prop_type_CALCLUATED_EXAMPLE = tr.getOrCreateNewPropertyType('CALCLUATED_EXAMPLE', DataType.REAL)
-prop_type_CALCLUATED_EXAMPLE.setLabel('Calcluated_example')
-prop_type_CALCLUATED_EXAMPLE.setManagedInternally(False)
-prop_type_CALCLUATED_EXAMPLE.setInternalNamespace(False)
-
-
-prop_type_CASAVA_VERSION = tr.getOrCreateNewPropertyType('CASAVA_VERSION', DataType.CONTROLLEDVOCABULARY)
-prop_type_CASAVA_VERSION.setLabel('Casava Version')
-prop_type_CASAVA_VERSION.setManagedInternally(False)
-prop_type_CASAVA_VERSION.setInternalNamespace(False)
-
-prop_type_CASAVA_VERSION.setVocabulary(vocabulary_CASAVA_VERSION)
-
-prop_type_CELL_PLASTICITY_SYSTEMSX = tr.getOrCreateNewPropertyType('CELL_PLASTICITY_SYSTEMSX', DataType.BOOLEAN)
-prop_type_CELL_PLASTICITY_SYSTEMSX.setLabel('Cell Plasticity (SystemsX)')
-prop_type_CELL_PLASTICITY_SYSTEMSX.setManagedInternally(False)
-prop_type_CELL_PLASTICITY_SYSTEMSX.setInternalNamespace(False)
-
-
-prop_type_CHROMCOUNT = tr.getOrCreateNewPropertyType('CHROMCOUNT', DataType.INTEGER)
-prop_type_CHROMCOUNT.setLabel('chrom Count')
-prop_type_CHROMCOUNT.setManagedInternally(False)
-prop_type_CHROMCOUNT.setInternalNamespace(False)
-
-
-prop_type_CLUSTER_GENERATION_KIT_VERSION = tr.getOrCreateNewPropertyType('CLUSTER_GENERATION_KIT_VERSION', DataType.CONTROLLEDVOCABULARY)
-prop_type_CLUSTER_GENERATION_KIT_VERSION.setLabel('CS Generation Kit Version')
-prop_type_CLUSTER_GENERATION_KIT_VERSION.setManagedInternally(False)
-prop_type_CLUSTER_GENERATION_KIT_VERSION.setInternalNamespace(False)
-
-prop_type_CLUSTER_GENERATION_KIT_VERSION.setVocabulary(vocabulary_CLUSTER_GENERATION_KIT_VERSION)
-
-prop_type_CLUSTER_STATION = tr.getOrCreateNewPropertyType('CLUSTER_STATION', DataType.CONTROLLEDVOCABULARY)
-prop_type_CLUSTER_STATION.setLabel('Cluster Station')
-prop_type_CLUSTER_STATION.setManagedInternally(False)
-prop_type_CLUSTER_STATION.setInternalNamespace(False)
-
-prop_type_CLUSTER_STATION.setVocabulary(vocabulary_CLUSTER_STATION)
-
-prop_type_CLUSTER_STATION_SOFTWARE_VERSION = tr.getOrCreateNewPropertyType('CLUSTER_STATION_SOFTWARE_VERSION', DataType.CONTROLLEDVOCABULARY)
-prop_type_CLUSTER_STATION_SOFTWARE_VERSION.setLabel('CS Software version')
-prop_type_CLUSTER_STATION_SOFTWARE_VERSION.setManagedInternally(False)
-prop_type_CLUSTER_STATION_SOFTWARE_VERSION.setInternalNamespace(False)
-
-prop_type_CLUSTER_STATION_SOFTWARE_VERSION.setVocabulary(vocabulary_CLUSTER_STATION_SOFTWARE_VERSION)
-
-prop_type_CONCENTRATION_FLOWLANE = tr.getOrCreateNewPropertyType('CONCENTRATION_FLOWLANE', DataType.REAL)
-prop_type_CONCENTRATION_FLOWLANE.setLabel('Concentration in flow lane [pM]')
-prop_type_CONCENTRATION_FLOWLANE.setManagedInternally(False)
-prop_type_CONCENTRATION_FLOWLANE.setInternalNamespace(False)
-
-
-prop_type_CONCENTRATION_ORIGINAL_ILLUMINA = tr.getOrCreateNewPropertyType('CONCENTRATION_ORIGINAL_ILLUMINA', DataType.REAL)
-prop_type_CONCENTRATION_ORIGINAL_ILLUMINA.setLabel(u'Concentration (original) [ng/\u03bcl]')
-prop_type_CONCENTRATION_ORIGINAL_ILLUMINA.setManagedInternally(False)
-prop_type_CONCENTRATION_ORIGINAL_ILLUMINA.setInternalNamespace(False)
-
-
-prop_type_CONCENTRATION_PREPARED_ILLUMINA = tr.getOrCreateNewPropertyType('CONCENTRATION_PREPARED_ILLUMINA', DataType.REAL)
-prop_type_CONCENTRATION_PREPARED_ILLUMINA.setLabel(u'Concentration (prepared) [ng/\u03bcl]')
-prop_type_CONCENTRATION_PREPARED_ILLUMINA.setManagedInternally(False)
-prop_type_CONCENTRATION_PREPARED_ILLUMINA.setInternalNamespace(False)
-
-
-prop_type_CONCENTRATION_TOTAL = tr.getOrCreateNewPropertyType('CONCENTRATION_TOTAL', DataType.INTEGER)
-prop_type_CONCENTRATION_TOTAL.setLabel(u'DNA concentration of library (ng/\u03bcl)')
-prop_type_CONCENTRATION_TOTAL.setManagedInternally(False)
-prop_type_CONCENTRATION_TOTAL.setInternalNamespace(False)
-
-
-prop_type_CONC_IF_SAMPLE_PROCESSED_DNA_LIBRARY = tr.getOrCreateNewPropertyType('CONC_IF_SAMPLE_PROCESSED_DNA_LIBRARY', DataType.INTEGER)
-prop_type_CONC_IF_SAMPLE_PROCESSED_DNA_LIBRARY.setLabel('Conc. if sample="proc. DNA library" (nM)')
-prop_type_CONC_IF_SAMPLE_PROCESSED_DNA_LIBRARY.setManagedInternally(False)
-prop_type_CONC_IF_SAMPLE_PROCESSED_DNA_LIBRARY.setInternalNamespace(False)
-
-
-prop_type_CONTACT_PERSON_EMAIL = tr.getOrCreateNewPropertyType('CONTACT_PERSON_EMAIL', DataType.VARCHAR)
-prop_type_CONTACT_PERSON_EMAIL.setLabel('Email of Contact Person')
-prop_type_CONTACT_PERSON_EMAIL.setManagedInternally(False)
-prop_type_CONTACT_PERSON_EMAIL.setInternalNamespace(False)
-
-
-prop_type_CONTACT_PERSON_NAME = tr.getOrCreateNewPropertyType('CONTACT_PERSON_NAME', DataType.VARCHAR)
-prop_type_CONTACT_PERSON_NAME.setLabel('Name of Contact Person')
-prop_type_CONTACT_PERSON_NAME.setManagedInternally(False)
-prop_type_CONTACT_PERSON_NAME.setInternalNamespace(False)
-
-
-prop_type_CONTROL_LANE = tr.getOrCreateNewPropertyType('CONTROL_LANE', DataType.CONTROLLEDVOCABULARY)
-prop_type_CONTROL_LANE.setLabel('Control Lane')
-prop_type_CONTROL_LANE.setManagedInternally(False)
-prop_type_CONTROL_LANE.setInternalNamespace(False)
-
-prop_type_CONTROL_LANE.setVocabulary(vocabulary_CONTROL_LANE)
-
-prop_type_CREATED_ON_CS = tr.getOrCreateNewPropertyType('CREATED_ON_CS', DataType.TIMESTAMP)
-prop_type_CREATED_ON_CS.setLabel('Clustering date')
-prop_type_CREATED_ON_CS.setManagedInternally(False)
-prop_type_CREATED_ON_CS.setInternalNamespace(False)
-
-
-prop_type_CS_PROTOCOL_VERSION = tr.getOrCreateNewPropertyType('CS_PROTOCOL_VERSION', DataType.VARCHAR)
-prop_type_CS_PROTOCOL_VERSION.setLabel('CS Protocol Version')
-prop_type_CS_PROTOCOL_VERSION.setManagedInternally(False)
-prop_type_CS_PROTOCOL_VERSION.setInternalNamespace(False)
-
-
-prop_type_CYCLES = tr.getOrCreateNewPropertyType('CYCLES', DataType.INTEGER)
-prop_type_CYCLES.setLabel('Number of Cycles')
-prop_type_CYCLES.setManagedInternally(False)
-prop_type_CYCLES.setInternalNamespace(False)
-
-
-prop_type_CYCLES_REQUESTED_BY_CUSTOMER = tr.getOrCreateNewPropertyType('CYCLES_REQUESTED_BY_CUSTOMER', DataType.CONTROLLEDVOCABULARY)
-prop_type_CYCLES_REQUESTED_BY_CUSTOMER.setLabel('Cycles')
-prop_type_CYCLES_REQUESTED_BY_CUSTOMER.setManagedInternally(False)
-prop_type_CYCLES_REQUESTED_BY_CUSTOMER.setInternalNamespace(False)
-
-prop_type_CYCLES_REQUESTED_BY_CUSTOMER.setVocabulary(vocabulary_CYCLES)
-
-prop_type_DATA_TRANSFERRED = tr.getOrCreateNewPropertyType('DATA_TRANSFERRED', DataType.TIMESTAMP)
-prop_type_DATA_TRANSFERRED.setLabel('Data transferred')
-prop_type_DATA_TRANSFERRED.setManagedInternally(False)
-prop_type_DATA_TRANSFERRED.setInternalNamespace(False)
-
-
-prop_type_DESCRIPTION = tr.getOrCreateNewPropertyType('DESCRIPTION', DataType.VARCHAR)
-prop_type_DESCRIPTION.setLabel('Description')
-prop_type_DESCRIPTION.setManagedInternally(False)
-prop_type_DESCRIPTION.setInternalNamespace(False)
-
-
-prop_type_DNA_CONCENTRATION_OF_LIBRARY = tr.getOrCreateNewPropertyType('DNA_CONCENTRATION_OF_LIBRARY', DataType.INTEGER)
-prop_type_DNA_CONCENTRATION_OF_LIBRARY.setLabel('DNA concentration of library (nM)')
-prop_type_DNA_CONCENTRATION_OF_LIBRARY.setManagedInternally(False)
-prop_type_DNA_CONCENTRATION_OF_LIBRARY.setInternalNamespace(False)
-
-
-prop_type_END_TYPE = tr.getOrCreateNewPropertyType('END_TYPE', DataType.CONTROLLEDVOCABULARY)
-prop_type_END_TYPE.setLabel('Paired End / Single Read')
-prop_type_END_TYPE.setManagedInternally(False)
-prop_type_END_TYPE.setInternalNamespace(False)
-
-prop_type_END_TYPE.setVocabulary(vocabulary_END_TYPE)
-
-prop_type_EXPERIMENT_DESIGN = tr.getOrCreateNewPropertyType('EXPERIMENT_DESIGN', DataType.CONTROLLEDVOCABULARY)
-prop_type_EXPERIMENT_DESIGN.setLabel('Experiment Design')
-prop_type_EXPERIMENT_DESIGN.setManagedInternally(False)
-prop_type_EXPERIMENT_DESIGN.setInternalNamespace(False)
-
-prop_type_EXPERIMENT_DESIGN.setVocabulary(vocabulary_EXPERIMENT_DESIGN)
-
-prop_type_EXTERNAL_SAMPLE_NAME = tr.getOrCreateNewPropertyType('EXTERNAL_SAMPLE_NAME', DataType.VARCHAR)
-prop_type_EXTERNAL_SAMPLE_NAME.setLabel('External Sample Name')
-prop_type_EXTERNAL_SAMPLE_NAME.setManagedInternally(False)
-prop_type_EXTERNAL_SAMPLE_NAME.setInternalNamespace(False)
-
-
-prop_type_FLOWCELLTYPE = tr.getOrCreateNewPropertyType('FLOWCELLTYPE', DataType.VARCHAR)
-prop_type_FLOWCELLTYPE.setLabel('Flow Cell Type')
-prop_type_FLOWCELLTYPE.setManagedInternally(False)
-prop_type_FLOWCELLTYPE.setInternalNamespace(False)
-
-
-prop_type_FLOW_CELL_SEQUENCED_ON = tr.getOrCreateNewPropertyType('FLOW_CELL_SEQUENCED_ON', DataType.TIMESTAMP)
-prop_type_FLOW_CELL_SEQUENCED_ON.setLabel('Sequencing date')
-prop_type_FLOW_CELL_SEQUENCED_ON.setManagedInternally(False)
-prop_type_FLOW_CELL_SEQUENCED_ON.setInternalNamespace(False)
-
-
-prop_type_FRAGMENT_SIZE_PREPARED_ILLUMINA = tr.getOrCreateNewPropertyType('FRAGMENT_SIZE_PREPARED_ILLUMINA', DataType.INTEGER)
-prop_type_FRAGMENT_SIZE_PREPARED_ILLUMINA.setLabel('Fragment Size (prepared) [base (pairs)]')
-prop_type_FRAGMENT_SIZE_PREPARED_ILLUMINA.setManagedInternally(False)
-prop_type_FRAGMENT_SIZE_PREPARED_ILLUMINA.setInternalNamespace(False)
-
-
-prop_type_ILLUMINA_PIPELINE_VERSION = tr.getOrCreateNewPropertyType('ILLUMINA_PIPELINE_VERSION', DataType.CONTROLLEDVOCABULARY)
-prop_type_ILLUMINA_PIPELINE_VERSION.setLabel('Pipeline Version')
-prop_type_ILLUMINA_PIPELINE_VERSION.setManagedInternally(False)
-prop_type_ILLUMINA_PIPELINE_VERSION.setInternalNamespace(False)
-
-prop_type_ILLUMINA_PIPELINE_VERSION.setVocabulary(vocabulary_PIPELINE_VERSION)
-
-prop_type_INDEX2 = tr.getOrCreateNewPropertyType('INDEX2', DataType.CONTROLLEDVOCABULARY)
-prop_type_INDEX2.setLabel('Index 2')
-prop_type_INDEX2.setManagedInternally(False)
-prop_type_INDEX2.setInternalNamespace(False)
-
-prop_type_INDEX2.setVocabulary(vocabulary_INDEX2)
-
-prop_type_INDEXREAD = tr.getOrCreateNewPropertyType('INDEXREAD', DataType.INTEGER)
-prop_type_INDEXREAD.setLabel('Length of Index Read1')
-prop_type_INDEXREAD.setManagedInternally(False)
-prop_type_INDEXREAD.setInternalNamespace(False)
-
-
-prop_type_INDEXREAD2 = tr.getOrCreateNewPropertyType('INDEXREAD2', DataType.INTEGER)
-prop_type_INDEXREAD2.setLabel('Length of Index Read2')
-prop_type_INDEXREAD2.setManagedInternally(False)
-prop_type_INDEXREAD2.setInternalNamespace(False)
-
-
-prop_type_INVOICE = tr.getOrCreateNewPropertyType('INVOICE', DataType.BOOLEAN)
-prop_type_INVOICE.setLabel('Invoice sent?')
-prop_type_INVOICE.setManagedInternally(False)
-prop_type_INVOICE.setInternalNamespace(False)
-
-
-prop_type_ISCOMPRESSED = tr.getOrCreateNewPropertyType('ISCOMPRESSED', DataType.BOOLEAN)
-prop_type_ISCOMPRESSED.setLabel('Is Compressed')
-prop_type_ISCOMPRESSED.setManagedInternally(False)
-prop_type_ISCOMPRESSED.setInternalNamespace(False)
-
-
-prop_type_ISSUED_COMMAND = tr.getOrCreateNewPropertyType('ISSUED_COMMAND', DataType.MULTILINE_VARCHAR)
-prop_type_ISSUED_COMMAND.setLabel('Issued Command')
-prop_type_ISSUED_COMMAND.setManagedInternally(False)
-prop_type_ISSUED_COMMAND.setInternalNamespace(False)
-
-
-prop_type_ISSWAPPED = tr.getOrCreateNewPropertyType('ISSWAPPED', DataType.INTEGER)
-prop_type_ISSWAPPED.setLabel('Is byte swapped')
-prop_type_ISSWAPPED.setManagedInternally(False)
-prop_type_ISSWAPPED.setInternalNamespace(False)
-
-
-prop_type_KIT = tr.getOrCreateNewPropertyType('KIT', DataType.CONTROLLEDVOCABULARY)
-prop_type_KIT.setLabel('Library preparation kit')
-prop_type_KIT.setManagedInternally(False)
-prop_type_KIT.setInternalNamespace(False)
-
-prop_type_KIT.setVocabulary(vocabulary_KIT)
-
-prop_type_KIT_ARRIVED = tr.getOrCreateNewPropertyType('KIT_ARRIVED', DataType.TIMESTAMP)
-prop_type_KIT_ARRIVED.setLabel('Kit arrived')
-prop_type_KIT_ARRIVED.setManagedInternally(False)
-prop_type_KIT_ARRIVED.setInternalNamespace(False)
-
-
-prop_type_KIT_PREPARED = tr.getOrCreateNewPropertyType('KIT_PREPARED', DataType.TIMESTAMP)
-prop_type_KIT_PREPARED.setLabel('Sample processed')
-prop_type_KIT_PREPARED.setManagedInternally(False)
-prop_type_KIT_PREPARED.setInternalNamespace(False)
-
-
-prop_type_LANECOUNT = tr.getOrCreateNewPropertyType('LANECOUNT', DataType.INTEGER)
-prop_type_LANECOUNT.setLabel('Lane Count')
-prop_type_LANECOUNT.setManagedInternally(False)
-prop_type_LANECOUNT.setInternalNamespace(False)
-
-
-prop_type_LIBRARY_PROCESSING_FAILED = tr.getOrCreateNewPropertyType('LIBRARY_PROCESSING_FAILED', DataType.BOOLEAN)
-prop_type_LIBRARY_PROCESSING_FAILED.setLabel('Library processing failed')
-prop_type_LIBRARY_PROCESSING_FAILED.setManagedInternally(False)
-prop_type_LIBRARY_PROCESSING_FAILED.setInternalNamespace(False)
-
-
-prop_type_LIBRARY_PROCESSING_POSSIBLE = tr.getOrCreateNewPropertyType('LIBRARY_PROCESSING_POSSIBLE', DataType.BOOLEAN)
-prop_type_LIBRARY_PROCESSING_POSSIBLE.setLabel('Library Processing possible')
-prop_type_LIBRARY_PROCESSING_POSSIBLE.setManagedInternally(False)
-prop_type_LIBRARY_PROCESSING_POSSIBLE.setInternalNamespace(False)
-
-
-prop_type_LIBRARY_PROCESSING_SUCCESSFUL = tr.getOrCreateNewPropertyType('LIBRARY_PROCESSING_SUCCESSFUL', DataType.BOOLEAN)
-prop_type_LIBRARY_PROCESSING_SUCCESSFUL.setLabel('Library processing successful')
-prop_type_LIBRARY_PROCESSING_SUCCESSFUL.setManagedInternally(False)
-prop_type_LIBRARY_PROCESSING_SUCCESSFUL.setInternalNamespace(False)
-
-
-prop_type_LOT = tr.getOrCreateNewPropertyType('LOT', DataType.INTEGER)
-prop_type_LOT.setLabel('Kit Lot #')
-prop_type_LOT.setManagedInternally(False)
-prop_type_LOT.setInternalNamespace(False)
-
-
-prop_type_MACS_VERSION = tr.getOrCreateNewPropertyType('MACS_VERSION', DataType.CONTROLLEDVOCABULARY)
-prop_type_MACS_VERSION.setLabel('MACS VERSION')
-prop_type_MACS_VERSION.setManagedInternally(False)
-prop_type_MACS_VERSION.setInternalNamespace(False)
-
-prop_type_MACS_VERSION.setVocabulary(vocabulary_MACS_VERSION)
-
-prop_type_MAPPED_READS = tr.getOrCreateNewPropertyType('MAPPED_READS', DataType.INTEGER)
-prop_type_MAPPED_READS.setLabel('Mapped reads')
-prop_type_MAPPED_READS.setManagedInternally(False)
-prop_type_MAPPED_READS.setInternalNamespace(False)
-
-
-prop_type_MAX = tr.getOrCreateNewPropertyType('MAX', DataType.REAL)
-prop_type_MAX.setLabel('Maximum')
-prop_type_MAX.setManagedInternally(False)
-prop_type_MAX.setInternalNamespace(False)
-
-
-prop_type_MEAN = tr.getOrCreateNewPropertyType('MEAN', DataType.REAL)
-prop_type_MEAN.setLabel('Mean')
-prop_type_MEAN.setManagedInternally(False)
-prop_type_MEAN.setInternalNamespace(False)
-
-
-prop_type_MIN = tr.getOrCreateNewPropertyType('MIN', DataType.REAL)
-prop_type_MIN.setLabel('Minimum')
-prop_type_MIN.setManagedInternally(False)
-prop_type_MIN.setInternalNamespace(False)
-
-
-prop_type_MISMATCH_IN_INDEX = tr.getOrCreateNewPropertyType('MISMATCH_IN_INDEX', DataType.CONTROLLEDVOCABULARY)
-prop_type_MISMATCH_IN_INDEX.setLabel('Mismatch in Index')
-prop_type_MISMATCH_IN_INDEX.setManagedInternally(False)
-prop_type_MISMATCH_IN_INDEX.setInternalNamespace(False)
-
-prop_type_MISMATCH_IN_INDEX.setVocabulary(vocabulary_MISMATCH_IN_INDEX)
-
-prop_type_NANO_DROP = tr.getOrCreateNewPropertyType('NANO_DROP', DataType.CONTROLLEDVOCABULARY)
-prop_type_NANO_DROP.setLabel('Nano Drop')
-prop_type_NANO_DROP.setManagedInternally(False)
-prop_type_NANO_DROP.setInternalNamespace(False)
-
-prop_type_NANO_DROP.setVocabulary(vocabulary_NANO_DROP)
-
-prop_type_NCBI_ORGANISM_TAXONOMY = tr.getOrCreateNewPropertyType('NCBI_ORGANISM_TAXONOMY', DataType.CONTROLLEDVOCABULARY)
-prop_type_NCBI_ORGANISM_TAXONOMY.setLabel('Organism (NCBI Taxonomy)')
-prop_type_NCBI_ORGANISM_TAXONOMY.setManagedInternally(False)
-prop_type_NCBI_ORGANISM_TAXONOMY.setInternalNamespace(False)
-
-prop_type_NCBI_ORGANISM_TAXONOMY.setVocabulary(vocabulary_NCBI_TAXONOMY)
-
-prop_type_NM_DNA = tr.getOrCreateNewPropertyType('NM_DNA', DataType.REAL)
-prop_type_NM_DNA.setLabel('Calculated DNA concentration of library (nM)')
-prop_type_NM_DNA.setManagedInternally(False)
-prop_type_NM_DNA.setInternalNamespace(False)
-
-
-prop_type_NOTES = tr.getOrCreateNewPropertyType('NOTES', DataType.MULTILINE_VARCHAR)
-prop_type_NOTES.setLabel('Notes')
-prop_type_NOTES.setManagedInternally(False)
-prop_type_NOTES.setInternalNamespace(False)
-
-
-prop_type_NOTES_CUSTOMER = tr.getOrCreateNewPropertyType('NOTES_CUSTOMER', DataType.MULTILINE_VARCHAR)
-prop_type_NOTES_CUSTOMER.setLabel('Notes Customer')
-prop_type_NOTES_CUSTOMER.setManagedInternally(False)
-prop_type_NOTES_CUSTOMER.setInternalNamespace(False)
-
-
-prop_type_NUMBER_OF_ATTACHMENTS = tr.getOrCreateNewPropertyType('NUMBER_OF_ATTACHMENTS', DataType.INTEGER)
-prop_type_NUMBER_OF_ATTACHMENTS.setLabel('Number of Attachments')
-prop_type_NUMBER_OF_ATTACHMENTS.setManagedInternally(False)
-prop_type_NUMBER_OF_ATTACHMENTS.setInternalNamespace(False)
-
-
-prop_type_ORGANISM_FREE = tr.getOrCreateNewPropertyType('ORGANISM_FREE', DataType.VARCHAR)
-prop_type_ORGANISM_FREE.setLabel('Organism (if OTHER)')
-prop_type_ORGANISM_FREE.setManagedInternally(False)
-prop_type_ORGANISM_FREE.setInternalNamespace(False)
-
-
-prop_type_OTRS = tr.getOrCreateNewPropertyType('OTRS', DataType.INTEGER)
-prop_type_OTRS.setLabel('OTRS ID #')
-prop_type_OTRS.setManagedInternally(False)
-prop_type_OTRS.setInternalNamespace(False)
-
-
-prop_type_PAIRED_END_KIT = tr.getOrCreateNewPropertyType('PAIRED_END_KIT', DataType.VARCHAR)
-prop_type_PAIRED_END_KIT.setLabel('Paired End Kit')
-prop_type_PAIRED_END_KIT.setManagedInternally(False)
-prop_type_PAIRED_END_KIT.setInternalNamespace(False)
-
-
-prop_type_PERCENTAGE_ONE_MISMATCH_READS_INDEX = tr.getOrCreateNewPropertyType('PERCENTAGE_ONE_MISMATCH_READS_INDEX', DataType.REAL)
-prop_type_PERCENTAGE_ONE_MISMATCH_READS_INDEX.setLabel('% One Mismatch Reads (Index)')
-prop_type_PERCENTAGE_ONE_MISMATCH_READS_INDEX.setManagedInternally(False)
-prop_type_PERCENTAGE_ONE_MISMATCH_READS_INDEX.setInternalNamespace(False)
-
-
-prop_type_PERCENTAGE_PASSED_FILTERING = tr.getOrCreateNewPropertyType('PERCENTAGE_PASSED_FILTERING', DataType.REAL)
-prop_type_PERCENTAGE_PASSED_FILTERING.setLabel('% Passes Illumina Filtering (PF)')
-prop_type_PERCENTAGE_PASSED_FILTERING.setManagedInternally(False)
-prop_type_PERCENTAGE_PASSED_FILTERING.setInternalNamespace(False)
-
-
-prop_type_PERCENTAGE_PERFECT_INDEX_READS = tr.getOrCreateNewPropertyType('PERCENTAGE_PERFECT_INDEX_READS', DataType.REAL)
-prop_type_PERCENTAGE_PERFECT_INDEX_READS.setLabel('% Perfect Index Reads')
-prop_type_PERCENTAGE_PERFECT_INDEX_READS.setManagedInternally(False)
-prop_type_PERCENTAGE_PERFECT_INDEX_READS.setInternalNamespace(False)
-
-
-prop_type_PERCENTAGE_RAW_CLUSTERS_PER_LANE = tr.getOrCreateNewPropertyType('PERCENTAGE_RAW_CLUSTERS_PER_LANE', DataType.REAL)
-prop_type_PERCENTAGE_RAW_CLUSTERS_PER_LANE.setLabel('% of raw clusters per lane')
-prop_type_PERCENTAGE_RAW_CLUSTERS_PER_LANE.setManagedInternally(False)
-prop_type_PERCENTAGE_RAW_CLUSTERS_PER_LANE.setInternalNamespace(False)
-
-
-prop_type_PREPARED_BY = tr.getOrCreateNewPropertyType('PREPARED_BY', DataType.VARCHAR)
-prop_type_PREPARED_BY.setLabel('Prepared by')
-prop_type_PREPARED_BY.setManagedInternally(False)
-prop_type_PREPARED_BY.setInternalNamespace(False)
-
-
-prop_type_PRIMARYDATASIZE = tr.getOrCreateNewPropertyType('PRIMARYDATASIZE', DataType.INTEGER)
-prop_type_PRIMARYDATASIZE.setLabel('primary Data Size')
-prop_type_PRIMARYDATASIZE.setManagedInternally(False)
-prop_type_PRIMARYDATASIZE.setInternalNamespace(False)
-
-
-prop_type_PRIMARYINDEXSIZE = tr.getOrCreateNewPropertyType('PRIMARYINDEXSIZE', DataType.INTEGER)
-prop_type_PRIMARYINDEXSIZE.setLabel('primary Index Size')
-prop_type_PRIMARYINDEXSIZE.setManagedInternally(False)
-prop_type_PRIMARYINDEXSIZE.setInternalNamespace(False)
-
-
-prop_type_PRINCIPAL_INVESTIGATOR_EMAIL = tr.getOrCreateNewPropertyType('PRINCIPAL_INVESTIGATOR_EMAIL', DataType.VARCHAR)
-prop_type_PRINCIPAL_INVESTIGATOR_EMAIL.setLabel('Email of Principal Investigator')
-prop_type_PRINCIPAL_INVESTIGATOR_EMAIL.setManagedInternally(False)
-prop_type_PRINCIPAL_INVESTIGATOR_EMAIL.setInternalNamespace(False)
-
-
-prop_type_PRINCIPAL_INVESTIGATOR_NAME = tr.getOrCreateNewPropertyType('PRINCIPAL_INVESTIGATOR_NAME', DataType.VARCHAR)
-prop_type_PRINCIPAL_INVESTIGATOR_NAME.setLabel('Name of Principal Investigator')
-prop_type_PRINCIPAL_INVESTIGATOR_NAME.setManagedInternally(False)
-prop_type_PRINCIPAL_INVESTIGATOR_NAME.setInternalNamespace(False)
-
-
-prop_type_REQUIRED_LANES = tr.getOrCreateNewPropertyType('REQUIRED_LANES', DataType.CONTROLLEDVOCABULARY)
-prop_type_REQUIRED_LANES.setLabel('Number of Required Lanes')
-prop_type_REQUIRED_LANES.setManagedInternally(False)
-prop_type_REQUIRED_LANES.setInternalNamespace(False)
-
-prop_type_REQUIRED_LANES.setVocabulary(vocabulary_REQUIRED_LANES)
-
-prop_type_SAMPLE_CHARACTERISTICS = tr.getOrCreateNewPropertyType('SAMPLE_CHARACTERISTICS', DataType.MULTILINE_VARCHAR)
-prop_type_SAMPLE_CHARACTERISTICS.setLabel('Sample characteristics')
-prop_type_SAMPLE_CHARACTERISTICS.setManagedInternally(False)
-prop_type_SAMPLE_CHARACTERISTICS.setInternalNamespace(False)
-
-
-prop_type_SAMPLE_DATA_PROCESSING = tr.getOrCreateNewPropertyType('SAMPLE_DATA_PROCESSING', DataType.MULTILINE_VARCHAR)
-prop_type_SAMPLE_DATA_PROCESSING.setLabel('Sample Data Processing')
-prop_type_SAMPLE_DATA_PROCESSING.setManagedInternally(False)
-prop_type_SAMPLE_DATA_PROCESSING.setInternalNamespace(False)
-
-
-prop_type_SAMPLE_EXTRACT_PROTOCOL = tr.getOrCreateNewPropertyType('SAMPLE_EXTRACT_PROTOCOL', DataType.MULTILINE_VARCHAR)
-prop_type_SAMPLE_EXTRACT_PROTOCOL.setLabel('Sample Extract Protocol')
-prop_type_SAMPLE_EXTRACT_PROTOCOL.setManagedInternally(False)
-prop_type_SAMPLE_EXTRACT_PROTOCOL.setInternalNamespace(False)
-
-
-prop_type_SAMPLE_ID = tr.getOrCreateNewPropertyType('SAMPLE_ID', DataType.VARCHAR)
-prop_type_SAMPLE_ID.setLabel('Sample ID')
-prop_type_SAMPLE_ID.setManagedInternally(False)
-prop_type_SAMPLE_ID.setInternalNamespace(False)
-
-
-prop_type_SAMPLE_KIND = tr.getOrCreateNewPropertyType('SAMPLE_KIND', DataType.CONTROLLEDVOCABULARY)
-prop_type_SAMPLE_KIND.setLabel('Sample Kind')
-prop_type_SAMPLE_KIND.setManagedInternally(False)
-prop_type_SAMPLE_KIND.setInternalNamespace(False)
-
-prop_type_SAMPLE_KIND.setVocabulary(vocabulary_SAMPLE_TYPE)
-
-prop_type_SAMPLE_LIBRARY_SELECTION = tr.getOrCreateNewPropertyType('SAMPLE_LIBRARY_SELECTION', DataType.CONTROLLEDVOCABULARY)
-prop_type_SAMPLE_LIBRARY_SELECTION.setLabel('Sample Library Selection')
-prop_type_SAMPLE_LIBRARY_SELECTION.setManagedInternally(False)
-prop_type_SAMPLE_LIBRARY_SELECTION.setInternalNamespace(False)
-
-prop_type_SAMPLE_LIBRARY_SELECTION.setVocabulary(vocabulary_SAMPLE_LIBRARY_SELECTION)
-
-prop_type_SAMPLE_LIBRARY_SOURCE = tr.getOrCreateNewPropertyType('SAMPLE_LIBRARY_SOURCE', DataType.CONTROLLEDVOCABULARY)
-prop_type_SAMPLE_LIBRARY_SOURCE.setLabel('Sample Library Source')
-prop_type_SAMPLE_LIBRARY_SOURCE.setManagedInternally(False)
-prop_type_SAMPLE_LIBRARY_SOURCE.setInternalNamespace(False)
-
-prop_type_SAMPLE_LIBRARY_SOURCE.setVocabulary(vocabulary_SAMPLE_LIBRARY_SOURCE_VOC)
-
-prop_type_SAMPLE_LIBRARY_STRATEGY = tr.getOrCreateNewPropertyType('SAMPLE_LIBRARY_STRATEGY', DataType.CONTROLLEDVOCABULARY)
-prop_type_SAMPLE_LIBRARY_STRATEGY.setLabel('Sample Library Strategy')
-prop_type_SAMPLE_LIBRARY_STRATEGY.setManagedInternally(False)
-prop_type_SAMPLE_LIBRARY_STRATEGY.setInternalNamespace(False)
-
-prop_type_SAMPLE_LIBRARY_STRATEGY.setVocabulary(vocabulary_SAMPLE_LIBRARY_STRATEGY)
-
-prop_type_SAMPLE_MOLECULE = tr.getOrCreateNewPropertyType('SAMPLE_MOLECULE', DataType.CONTROLLEDVOCABULARY)
-prop_type_SAMPLE_MOLECULE.setLabel('Sample molecule')
-prop_type_SAMPLE_MOLECULE.setManagedInternally(False)
-prop_type_SAMPLE_MOLECULE.setInternalNamespace(False)
-
-prop_type_SAMPLE_MOLECULE.setVocabulary(vocabulary_SAMPLE_MOLECULE)
-
-prop_type_SAMPLE_SOURCE_NAME = tr.getOrCreateNewPropertyType('SAMPLE_SOURCE_NAME', DataType.VARCHAR)
-prop_type_SAMPLE_SOURCE_NAME.setLabel('Sample Source Name')
-prop_type_SAMPLE_SOURCE_NAME.setManagedInternally(False)
-prop_type_SAMPLE_SOURCE_NAME.setInternalNamespace(False)
-
-
-prop_type_SAMTOOLS_FLAGSTAT = tr.getOrCreateNewPropertyType('SAMTOOLS_FLAGSTAT', DataType.MULTILINE_VARCHAR)
-prop_type_SAMTOOLS_FLAGSTAT.setLabel('Samtools Flagstat Output')
-prop_type_SAMTOOLS_FLAGSTAT.setManagedInternally(False)
-prop_type_SAMTOOLS_FLAGSTAT.setInternalNamespace(False)
-
-
-prop_type_SBS_KIT = tr.getOrCreateNewPropertyType('SBS_KIT', DataType.VARCHAR)
-prop_type_SBS_KIT.setLabel('SBS Kit')
-prop_type_SBS_KIT.setManagedInternally(False)
-prop_type_SBS_KIT.setInternalNamespace(False)
-
-
-prop_type_SBS_SEQUENCING_KIT_VERSION = tr.getOrCreateNewPropertyType('SBS_SEQUENCING_KIT_VERSION', DataType.CONTROLLEDVOCABULARY)
-prop_type_SBS_SEQUENCING_KIT_VERSION.setLabel('SBS Sequencing Kit Version')
-prop_type_SBS_SEQUENCING_KIT_VERSION.setManagedInternally(False)
-prop_type_SBS_SEQUENCING_KIT_VERSION.setInternalNamespace(False)
-
-prop_type_SBS_SEQUENCING_KIT_VERSION.setVocabulary(vocabulary_SBS_SEQUENCING_KIT_VERSION)
-
-prop_type_SCRIPT_TYPE = tr.getOrCreateNewPropertyType('SCRIPT_TYPE', DataType.REAL)
-prop_type_SCRIPT_TYPE.setLabel('Script Type')
-prop_type_SCRIPT_TYPE.setManagedInternally(False)
-prop_type_SCRIPT_TYPE.setInternalNamespace(False)
-
-
-prop_type_SCS_PROTOCOL_VERSION = tr.getOrCreateNewPropertyType('SCS_PROTOCOL_VERSION', DataType.CONTROLLEDVOCABULARY)
-prop_type_SCS_PROTOCOL_VERSION.setLabel('SCS Protocol Version')
-prop_type_SCS_PROTOCOL_VERSION.setManagedInternally(False)
-prop_type_SCS_PROTOCOL_VERSION.setInternalNamespace(False)
-
-prop_type_SCS_PROTOCOL_VERSION.setVocabulary(vocabulary_SCS_PROTOCOL_VERSION)
-
-prop_type_SCS_SOFTWARE_VERSION = tr.getOrCreateNewPropertyType('SCS_SOFTWARE_VERSION', DataType.CONTROLLEDVOCABULARY)
-prop_type_SCS_SOFTWARE_VERSION.setLabel('SCS Software Version')
-prop_type_SCS_SOFTWARE_VERSION.setManagedInternally(False)
-prop_type_SCS_SOFTWARE_VERSION.setInternalNamespace(False)
-
-prop_type_SCS_SOFTWARE_VERSION.setVocabulary(vocabulary_SCS_SOFTWARE_VERSION)
-
-prop_type_SEQUENCER = tr.getOrCreateNewPropertyType('SEQUENCER', DataType.CONTROLLEDVOCABULARY)
-prop_type_SEQUENCER.setLabel('Sequencer')
-prop_type_SEQUENCER.setManagedInternally(False)
-prop_type_SEQUENCER.setInternalNamespace(False)
-
-prop_type_SEQUENCER.setVocabulary(vocabulary_SEQUENCER)
-
-prop_type_SEQUENCER_FINISHED = tr.getOrCreateNewPropertyType('SEQUENCER_FINISHED', DataType.TIMESTAMP)
-prop_type_SEQUENCER_FINISHED.setLabel('Sequencer finished')
-prop_type_SEQUENCER_FINISHED.setManagedInternally(False)
-prop_type_SEQUENCER_FINISHED.setInternalNamespace(False)
-
-
-prop_type_SEQUENCING_APPLICATION = tr.getOrCreateNewPropertyType('SEQUENCING_APPLICATION', DataType.CONTROLLEDVOCABULARY)
-prop_type_SEQUENCING_APPLICATION.setLabel('Sequencing Application')
-prop_type_SEQUENCING_APPLICATION.setManagedInternally(False)
-prop_type_SEQUENCING_APPLICATION.setInternalNamespace(False)
-
-prop_type_SEQUENCING_APPLICATION.setVocabulary(vocabulary_SEQUENCING_APPLICATION)
-
-prop_type_STARTING_AMOUNT_OF_SAMPLE_IN_NG = tr.getOrCreateNewPropertyType('STARTING_AMOUNT_OF_SAMPLE_IN_NG', DataType.REAL)
-prop_type_STARTING_AMOUNT_OF_SAMPLE_IN_NG.setLabel('Starting amount of sample (ng)')
-prop_type_STARTING_AMOUNT_OF_SAMPLE_IN_NG.setManagedInternally(False)
-prop_type_STARTING_AMOUNT_OF_SAMPLE_IN_NG.setInternalNamespace(False)
-
-
-prop_type_STD = tr.getOrCreateNewPropertyType('STD', DataType.REAL)
-prop_type_STD.setLabel('Standard deviation')
-prop_type_STD.setManagedInternally(False)
-prop_type_STD.setInternalNamespace(False)
-
-
-prop_type_SURFACECOUNT = tr.getOrCreateNewPropertyType('SURFACECOUNT', DataType.INTEGER)
-prop_type_SURFACECOUNT.setLabel('Surface Count')
-prop_type_SURFACECOUNT.setManagedInternally(False)
-prop_type_SURFACECOUNT.setInternalNamespace(False)
-
-
-prop_type_SWATHCOUNT = tr.getOrCreateNewPropertyType('SWATHCOUNT', DataType.INTEGER)
-prop_type_SWATHCOUNT.setLabel('Swath Count')
-prop_type_SWATHCOUNT.setManagedInternally(False)
-prop_type_SWATHCOUNT.setInternalNamespace(False)
-
-
-prop_type_TILECOUNT = tr.getOrCreateNewPropertyType('TILECOUNT', DataType.INTEGER)
-prop_type_TILECOUNT.setLabel('Tile Count')
-prop_type_TILECOUNT.setManagedInternally(False)
-prop_type_TILECOUNT.setInternalNamespace(False)
-
-
-prop_type_TOTAL_READS = tr.getOrCreateNewPropertyType('TOTAL_READS', DataType.INTEGER)
-prop_type_TOTAL_READS.setLabel('Total reads')
-prop_type_TOTAL_READS.setManagedInternally(False)
-prop_type_TOTAL_READS.setInternalNamespace(False)
-
-
-prop_type_UL_DNA = tr.getOrCreateNewPropertyType('UL_DNA', DataType.REAL)
-prop_type_UL_DNA.setLabel('Calculated ul DNA for 2nM stock')
-prop_type_UL_DNA.setManagedInternally(False)
-prop_type_UL_DNA.setInternalNamespace(False)
-
-
-prop_type_UL_EB = tr.getOrCreateNewPropertyType('UL_EB', DataType.REAL)
-prop_type_UL_EB.setLabel('Calculated ul EB for 2nM stock ')
-prop_type_UL_EB.setManagedInternally(False)
-prop_type_UL_EB.setInternalNamespace(False)
-
-
-prop_type_UL_STOCK = tr.getOrCreateNewPropertyType('UL_STOCK', DataType.INTEGER)
-prop_type_UL_STOCK.setLabel('ul of 2nM stock')
-prop_type_UL_STOCK.setManagedInternally(False)
-prop_type_UL_STOCK.setInternalNamespace(False)
-
-
-prop_type_UNIQUE_BARCODES = tr.getOrCreateNewPropertyType('UNIQUE_BARCODES', DataType.VARCHAR)
-prop_type_UNIQUE_BARCODES.setLabel('Unique Barcodes in Pool?')
-prop_type_UNIQUE_BARCODES.setManagedInternally(False)
-prop_type_UNIQUE_BARCODES.setInternalNamespace(False)
-
-
-prop_type_VERSION = tr.getOrCreateNewPropertyType('VERSION', DataType.VARCHAR)
-prop_type_VERSION.setLabel('Version')
-prop_type_VERSION.setManagedInternally(False)
-prop_type_VERSION.setInternalNamespace(False)
-
-
-prop_type_YIELD_MBASES = tr.getOrCreateNewPropertyType('YIELD_MBASES', DataType.INTEGER)
-prop_type_YIELD_MBASES.setLabel('Yield(Mbases)')
-prop_type_YIELD_MBASES.setManagedInternally(False)
-prop_type_YIELD_MBASES.setInternalNamespace(False)
-
-
-prop_type_ZOOMLEVELS = tr.getOrCreateNewPropertyType('ZOOMLEVELS', DataType.INTEGER)
-prop_type_ZOOMLEVELS.setLabel('zoom Levels')
-prop_type_ZOOMLEVELS.setManagedInternally(False)
-prop_type_ZOOMLEVELS.setInternalNamespace(False)
-
-
-assignment_DATA_SET_ALIGNMENT_ALIGNMENT_SOFTWARE = tr.assignPropertyType(data_set_type_ALIGNMENT, prop_type_ALIGNMENT_SOFTWARE)
-assignment_DATA_SET_ALIGNMENT_ALIGNMENT_SOFTWARE.setMandatory(False)
-assignment_DATA_SET_ALIGNMENT_ALIGNMENT_SOFTWARE.setSection(None)
-assignment_DATA_SET_ALIGNMENT_ALIGNMENT_SOFTWARE.setPositionInForms(3)
-
-assignment_DATA_SET_ALIGNMENT_VERSION = tr.assignPropertyType(data_set_type_ALIGNMENT, prop_type_VERSION)
-assignment_DATA_SET_ALIGNMENT_VERSION.setMandatory(False)
-assignment_DATA_SET_ALIGNMENT_VERSION.setSection(None)
-assignment_DATA_SET_ALIGNMENT_VERSION.setPositionInForms(4)
-
-assignment_DATA_SET_ALIGNMENT_NOTES = tr.assignPropertyType(data_set_type_ALIGNMENT, prop_type_NOTES)
-assignment_DATA_SET_ALIGNMENT_NOTES.setMandatory(False)
-assignment_DATA_SET_ALIGNMENT_NOTES.setSection(None)
-assignment_DATA_SET_ALIGNMENT_NOTES.setPositionInForms(5)
-
-assignment_DATA_SET_ALIGNMENT_SAMTOOLS_FLAGSTAT = tr.assignPropertyType(data_set_type_ALIGNMENT, prop_type_SAMTOOLS_FLAGSTAT)
-assignment_DATA_SET_ALIGNMENT_SAMTOOLS_FLAGSTAT.setMandatory(False)
-assignment_DATA_SET_ALIGNMENT_SAMTOOLS_FLAGSTAT.setSection(None)
-assignment_DATA_SET_ALIGNMENT_SAMTOOLS_FLAGSTAT.setPositionInForms(6)
-
-assignment_DATA_SET_ALIGNMENT_MAPPED_READS = tr.assignPropertyType(data_set_type_ALIGNMENT, prop_type_MAPPED_READS)
-assignment_DATA_SET_ALIGNMENT_MAPPED_READS.setMandatory(False)
-assignment_DATA_SET_ALIGNMENT_MAPPED_READS.setSection(None)
-assignment_DATA_SET_ALIGNMENT_MAPPED_READS.setPositionInForms(7)
-
-assignment_DATA_SET_ALIGNMENT_TOTAL_READS = tr.assignPropertyType(data_set_type_ALIGNMENT, prop_type_TOTAL_READS)
-assignment_DATA_SET_ALIGNMENT_TOTAL_READS.setMandatory(False)
-assignment_DATA_SET_ALIGNMENT_TOTAL_READS.setSection(None)
-assignment_DATA_SET_ALIGNMENT_TOTAL_READS.setPositionInForms(8)
-
-assignment_DATA_SET_ALIGNMENT_ISSUED_COMMAND = tr.assignPropertyType(data_set_type_ALIGNMENT, prop_type_ISSUED_COMMAND)
-assignment_DATA_SET_ALIGNMENT_ISSUED_COMMAND.setMandatory(False)
-assignment_DATA_SET_ALIGNMENT_ISSUED_COMMAND.setSection(None)
-assignment_DATA_SET_ALIGNMENT_ISSUED_COMMAND.setPositionInForms(9)
-
-assignment_DATA_SET_BASECALL_STATS_MISMATCH_IN_INDEX = tr.assignPropertyType(data_set_type_BASECALL_STATS, prop_type_MISMATCH_IN_INDEX)
-assignment_DATA_SET_BASECALL_STATS_MISMATCH_IN_INDEX.setMandatory(False)
-assignment_DATA_SET_BASECALL_STATS_MISMATCH_IN_INDEX.setSection(None)
-assignment_DATA_SET_BASECALL_STATS_MISMATCH_IN_INDEX.setPositionInForms(3)
-
-assignment_DATA_SET_BIGWIGGLE_NOTES = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_NOTES)
-assignment_DATA_SET_BIGWIGGLE_NOTES.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_NOTES.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_NOTES.setPositionInForms(3)
-
-assignment_DATA_SET_BIGWIGGLE_VERSION = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_VERSION)
-assignment_DATA_SET_BIGWIGGLE_VERSION.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_VERSION.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_VERSION.setPositionInForms(4)
-
-assignment_DATA_SET_BIGWIGGLE_ISCOMPRESSED = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_ISCOMPRESSED)
-assignment_DATA_SET_BIGWIGGLE_ISCOMPRESSED.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_ISCOMPRESSED.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_ISCOMPRESSED.setPositionInForms(5)
-
-assignment_DATA_SET_BIGWIGGLE_ISSWAPPED = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_ISSWAPPED)
-assignment_DATA_SET_BIGWIGGLE_ISSWAPPED.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_ISSWAPPED.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_ISSWAPPED.setPositionInForms(6)
-
-assignment_DATA_SET_BIGWIGGLE_PRIMARYDATASIZE = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_PRIMARYDATASIZE)
-assignment_DATA_SET_BIGWIGGLE_PRIMARYDATASIZE.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_PRIMARYDATASIZE.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_PRIMARYDATASIZE.setPositionInForms(7)
-
-assignment_DATA_SET_BIGWIGGLE_PRIMARYINDEXSIZE = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_PRIMARYINDEXSIZE)
-assignment_DATA_SET_BIGWIGGLE_PRIMARYINDEXSIZE.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_PRIMARYINDEXSIZE.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_PRIMARYINDEXSIZE.setPositionInForms(8)
-
-assignment_DATA_SET_BIGWIGGLE_ZOOMLEVELS = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_ZOOMLEVELS)
-assignment_DATA_SET_BIGWIGGLE_ZOOMLEVELS.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_ZOOMLEVELS.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_ZOOMLEVELS.setPositionInForms(9)
-
-assignment_DATA_SET_BIGWIGGLE_CHROMCOUNT = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_CHROMCOUNT)
-assignment_DATA_SET_BIGWIGGLE_CHROMCOUNT.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_CHROMCOUNT.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_CHROMCOUNT.setPositionInForms(10)
-
-assignment_DATA_SET_BIGWIGGLE_BASESCOVERED = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_BASESCOVERED)
-assignment_DATA_SET_BIGWIGGLE_BASESCOVERED.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_BASESCOVERED.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_BASESCOVERED.setPositionInForms(11)
-
-assignment_DATA_SET_BIGWIGGLE_MEAN = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_MEAN)
-assignment_DATA_SET_BIGWIGGLE_MEAN.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_MEAN.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_MEAN.setPositionInForms(12)
-
-assignment_DATA_SET_BIGWIGGLE_MIN = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_MIN)
-assignment_DATA_SET_BIGWIGGLE_MIN.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_MIN.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_MIN.setPositionInForms(13)
-
-assignment_DATA_SET_BIGWIGGLE_MAX = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_MAX)
-assignment_DATA_SET_BIGWIGGLE_MAX.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_MAX.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_MAX.setPositionInForms(14)
-
-assignment_DATA_SET_BIGWIGGLE_STD = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_STD)
-assignment_DATA_SET_BIGWIGGLE_STD.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_STD.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_STD.setPositionInForms(15)
-
-assignment_DATA_SET_FASTQ_GZ_NOTES = tr.assignPropertyType(data_set_type_FASTQ_GZ, prop_type_NOTES)
-assignment_DATA_SET_FASTQ_GZ_NOTES.setMandatory(False)
-assignment_DATA_SET_FASTQ_GZ_NOTES.setSection(None)
-assignment_DATA_SET_FASTQ_GZ_NOTES.setPositionInForms(3)
-
-assignment_DATA_SET_FASTQ_GZ_YIELD_MBASES = tr.assignPropertyType(data_set_type_FASTQ_GZ, prop_type_YIELD_MBASES)
-assignment_DATA_SET_FASTQ_GZ_YIELD_MBASES.setMandatory(False)
-assignment_DATA_SET_FASTQ_GZ_YIELD_MBASES.setSection(None)
-assignment_DATA_SET_FASTQ_GZ_YIELD_MBASES.setPositionInForms(4)
-
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PASSED_FILTERING = tr.assignPropertyType(data_set_type_FASTQ_GZ, prop_type_PERCENTAGE_PASSED_FILTERING)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PASSED_FILTERING.setMandatory(False)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PASSED_FILTERING.setSection(None)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PASSED_FILTERING.setPositionInForms(5)
-
-assignment_DATA_SET_FASTQ_GZ_BARCODE = tr.assignPropertyType(data_set_type_FASTQ_GZ, prop_type_BARCODE)
-assignment_DATA_SET_FASTQ_GZ_BARCODE.setMandatory(False)
-assignment_DATA_SET_FASTQ_GZ_BARCODE.setSection(None)
-assignment_DATA_SET_FASTQ_GZ_BARCODE.setPositionInForms(6)
-
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_RAW_CLUSTERS_PER_LANE = tr.assignPropertyType(data_set_type_FASTQ_GZ, prop_type_PERCENTAGE_RAW_CLUSTERS_PER_LANE)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_RAW_CLUSTERS_PER_LANE.setMandatory(False)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_RAW_CLUSTERS_PER_LANE.setSection(None)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_RAW_CLUSTERS_PER_LANE.setPositionInForms(7)
-
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PERFECT_INDEX_READS = tr.assignPropertyType(data_set_type_FASTQ_GZ, prop_type_PERCENTAGE_PERFECT_INDEX_READS)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PERFECT_INDEX_READS.setMandatory(False)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PERFECT_INDEX_READS.setSection(None)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PERFECT_INDEX_READS.setPositionInForms(8)
-
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_ONE_MISMATCH_READS_INDEX = tr.assignPropertyType(data_set_type_FASTQ_GZ, prop_type_PERCENTAGE_ONE_MISMATCH_READS_INDEX)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_ONE_MISMATCH_READS_INDEX.setMandatory(False)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_ONE_MISMATCH_READS_INDEX.setSection(None)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_ONE_MISMATCH_READS_INDEX.setPositionInForms(9)
-
-assignment_EXPERIMENT_HT_SEQUENCING_EXPERIMENT_DESIGN = tr.assignPropertyType(exp_type_HT_SEQUENCING, prop_type_EXPERIMENT_DESIGN)
-assignment_EXPERIMENT_HT_SEQUENCING_EXPERIMENT_DESIGN.setMandatory(False)
-assignment_EXPERIMENT_HT_SEQUENCING_EXPERIMENT_DESIGN.setSection(None)
-assignment_EXPERIMENT_HT_SEQUENCING_EXPERIMENT_DESIGN.setPositionInForms(3)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_SEQUENCER)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER.setPositionInForms(4)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_END_TYPE = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_END_TYPE)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_END_TYPE.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_END_TYPE.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_END_TYPE.setPositionInForms(6)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOW_CELL_SEQUENCED_ON = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_FLOW_CELL_SEQUENCED_ON)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOW_CELL_SEQUENCED_ON.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOW_CELL_SEQUENCED_ON.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOW_CELL_SEQUENCED_ON.setPositionInForms(7)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER_FINISHED = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_SEQUENCER_FINISHED)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER_FINISHED.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER_FINISHED.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER_FINISHED.setPositionInForms(8)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ILLUMINA_PIPELINE_VERSION = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_ILLUMINA_PIPELINE_VERSION)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ILLUMINA_PIPELINE_VERSION.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ILLUMINA_PIPELINE_VERSION.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ILLUMINA_PIPELINE_VERSION.setPositionInForms(9)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CYCLES_REQUESTED_BY_CUSTOMER = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_CYCLES_REQUESTED_BY_CUSTOMER)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CYCLES_REQUESTED_BY_CUSTOMER.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CYCLES_REQUESTED_BY_CUSTOMER.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CYCLES_REQUESTED_BY_CUSTOMER.setPositionInForms(10)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_INDEXREAD = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_INDEXREAD)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_INDEXREAD.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_INDEXREAD.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_INDEXREAD.setPositionInForms(11)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_INDEXREAD2 = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_INDEXREAD2)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_INDEXREAD2.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_INDEXREAD2.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_INDEXREAD2.setPositionInForms(12)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CONTROL_LANE = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_CONTROL_LANE)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CONTROL_LANE.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CONTROL_LANE.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CONTROL_LANE.setPositionInForms(13)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOWCELLTYPE = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_FLOWCELLTYPE)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOWCELLTYPE.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOWCELLTYPE.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOWCELLTYPE.setPositionInForms(14)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_LANECOUNT = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_LANECOUNT)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_LANECOUNT.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_LANECOUNT.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_LANECOUNT.setPositionInForms(15)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SURFACECOUNT = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_SURFACECOUNT)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SURFACECOUNT.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SURFACECOUNT.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SURFACECOUNT.setPositionInForms(16)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SWATHCOUNT = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_SWATHCOUNT)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SWATHCOUNT.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SWATHCOUNT.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SWATHCOUNT.setPositionInForms(17)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_TILECOUNT = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_TILECOUNT)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_TILECOUNT.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_TILECOUNT.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_TILECOUNT.setPositionInForms(18)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SBS_KIT = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_SBS_KIT)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SBS_KIT.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SBS_KIT.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SBS_KIT.setPositionInForms(19)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_PAIRED_END_KIT = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_PAIRED_END_KIT)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_PAIRED_END_KIT.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_PAIRED_END_KIT.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_PAIRED_END_KIT.setPositionInForms(20)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ANALYSIS_FINISHED = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_ANALYSIS_FINISHED)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ANALYSIS_FINISHED.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ANALYSIS_FINISHED.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ANALYSIS_FINISHED.setPositionInForms(22)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_NOTES = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_NOTES)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_NOTES.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_NOTES.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_NOTES.setPositionInForms(23)
-
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_DATA_TRANSFERRED = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_LANE, prop_type_DATA_TRANSFERRED)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_DATA_TRANSFERRED.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_DATA_TRANSFERRED.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_DATA_TRANSFERRED.setPositionInForms(3)
-
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CLUSTER_STATION = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_LANE, prop_type_CLUSTER_STATION)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CLUSTER_STATION.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CLUSTER_STATION.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CLUSTER_STATION.setPositionInForms(7)
-
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CREATED_ON_CS = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_LANE, prop_type_CREATED_ON_CS)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CREATED_ON_CS.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CREATED_ON_CS.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CREATED_ON_CS.setPositionInForms(8)
-
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CS_PROTOCOL_VERSION = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_LANE, prop_type_CS_PROTOCOL_VERSION)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CS_PROTOCOL_VERSION.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CS_PROTOCOL_VERSION.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CS_PROTOCOL_VERSION.setPositionInForms(9)
-
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CLUSTER_GENERATION_KIT_VERSION = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_LANE, prop_type_CLUSTER_GENERATION_KIT_VERSION)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CLUSTER_GENERATION_KIT_VERSION.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CLUSTER_GENERATION_KIT_VERSION.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CLUSTER_GENERATION_KIT_VERSION.setPositionInForms(10)
-
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CLUSTER_STATION_SOFTWARE_VERSION = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_LANE, prop_type_CLUSTER_STATION_SOFTWARE_VERSION)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CLUSTER_STATION_SOFTWARE_VERSION.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CLUSTER_STATION_SOFTWARE_VERSION.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CLUSTER_STATION_SOFTWARE_VERSION.setPositionInForms(11)
-
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CONCENTRATION_FLOWLANE = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_LANE, prop_type_CONCENTRATION_FLOWLANE)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CONCENTRATION_FLOWLANE.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CONCENTRATION_FLOWLANE.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CONCENTRATION_FLOWLANE.setPositionInForms(12)
-
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_SCS_PROTOCOL_VERSION = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_LANE, prop_type_SCS_PROTOCOL_VERSION)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_SCS_PROTOCOL_VERSION.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_SCS_PROTOCOL_VERSION.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_SCS_PROTOCOL_VERSION.setPositionInForms(13)
-
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_SBS_SEQUENCING_KIT_VERSION = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_LANE, prop_type_SBS_SEQUENCING_KIT_VERSION)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_SBS_SEQUENCING_KIT_VERSION.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_SBS_SEQUENCING_KIT_VERSION.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_SBS_SEQUENCING_KIT_VERSION.setPositionInForms(14)
-
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_NOTES = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_LANE, prop_type_NOTES)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_NOTES.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_NOTES.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_NOTES.setPositionInForms(15)
-
-assignment_DATA_SET_ILLUMINA_GA_OUTPUT_SAMPLE_KIND = tr.assignPropertyType(data_set_type_ILLUMINA_GA_OUTPUT, prop_type_SAMPLE_KIND)
-assignment_DATA_SET_ILLUMINA_GA_OUTPUT_SAMPLE_KIND.setMandatory(False)
-assignment_DATA_SET_ILLUMINA_GA_OUTPUT_SAMPLE_KIND.setSection(None)
-assignment_DATA_SET_ILLUMINA_GA_OUTPUT_SAMPLE_KIND.setPositionInForms(3)
-
-assignment_DATA_SET_ILLUMINA_HISEQ_OUTPUT_CASAVA_VERSION = tr.assignPropertyType(data_set_type_ILLUMINA_HISEQ_OUTPUT, prop_type_CASAVA_VERSION)
-assignment_DATA_SET_ILLUMINA_HISEQ_OUTPUT_CASAVA_VERSION.setMandatory(False)
-assignment_DATA_SET_ILLUMINA_HISEQ_OUTPUT_CASAVA_VERSION.setSection(None)
-assignment_DATA_SET_ILLUMINA_HISEQ_OUTPUT_CASAVA_VERSION.setPositionInForms(3)
-
-assignment_SAMPLE_LIBRARY_BARCODE = tr.assignPropertyType(samp_type_LIBRARY, prop_type_BARCODE)
-assignment_SAMPLE_LIBRARY_BARCODE.setMandatory(False)
-assignment_SAMPLE_LIBRARY_BARCODE.setSection(None)
-assignment_SAMPLE_LIBRARY_BARCODE.setPositionInForms(2)
-
-assignment_SAMPLE_LIBRARY_INDEX2 = tr.assignPropertyType(samp_type_LIBRARY, prop_type_INDEX2)
-assignment_SAMPLE_LIBRARY_INDEX2.setMandatory(False)
-assignment_SAMPLE_LIBRARY_INDEX2.setSection(None)
-assignment_SAMPLE_LIBRARY_INDEX2.setPositionInForms(3)
-
-assignment_SAMPLE_LIBRARY_CONCENTRATION_PREPARED_ILLUMINA = tr.assignPropertyType(samp_type_LIBRARY, prop_type_CONCENTRATION_PREPARED_ILLUMINA)
-assignment_SAMPLE_LIBRARY_CONCENTRATION_PREPARED_ILLUMINA.setMandatory(False)
-assignment_SAMPLE_LIBRARY_CONCENTRATION_PREPARED_ILLUMINA.setSection(None)
-assignment_SAMPLE_LIBRARY_CONCENTRATION_PREPARED_ILLUMINA.setPositionInForms(4)
-
-assignment_SAMPLE_LIBRARY_PREPARED_BY = tr.assignPropertyType(samp_type_LIBRARY, prop_type_PREPARED_BY)
-assignment_SAMPLE_LIBRARY_PREPARED_BY.setMandatory(False)
-assignment_SAMPLE_LIBRARY_PREPARED_BY.setSection(None)
-assignment_SAMPLE_LIBRARY_PREPARED_BY.setPositionInForms(5)
-
-assignment_SAMPLE_LIBRARY_KIT_PREPARED = tr.assignPropertyType(samp_type_LIBRARY, prop_type_KIT_PREPARED)
-assignment_SAMPLE_LIBRARY_KIT_PREPARED.setMandatory(False)
-assignment_SAMPLE_LIBRARY_KIT_PREPARED.setSection(None)
-assignment_SAMPLE_LIBRARY_KIT_PREPARED.setPositionInForms(6)
-
-assignment_SAMPLE_LIBRARY_KIT = tr.assignPropertyType(samp_type_LIBRARY, prop_type_KIT)
-assignment_SAMPLE_LIBRARY_KIT.setMandatory(False)
-assignment_SAMPLE_LIBRARY_KIT.setSection(None)
-assignment_SAMPLE_LIBRARY_KIT.setPositionInForms(7)
-
-assignment_SAMPLE_LIBRARY_LOT = tr.assignPropertyType(samp_type_LIBRARY, prop_type_LOT)
-assignment_SAMPLE_LIBRARY_LOT.setMandatory(False)
-assignment_SAMPLE_LIBRARY_LOT.setSection(None)
-assignment_SAMPLE_LIBRARY_LOT.setPositionInForms(8)
-
-assignment_SAMPLE_LIBRARY_STARTING_AMOUNT_OF_SAMPLE_IN_NG = tr.assignPropertyType(samp_type_LIBRARY, prop_type_STARTING_AMOUNT_OF_SAMPLE_IN_NG)
-assignment_SAMPLE_LIBRARY_STARTING_AMOUNT_OF_SAMPLE_IN_NG.setMandatory(False)
-assignment_SAMPLE_LIBRARY_STARTING_AMOUNT_OF_SAMPLE_IN_NG.setSection(None)
-assignment_SAMPLE_LIBRARY_STARTING_AMOUNT_OF_SAMPLE_IN_NG.setPositionInForms(9)
-
-assignment_SAMPLE_LIBRARY_DNA_CONCENTRATION_OF_LIBRARY = tr.assignPropertyType(samp_type_LIBRARY, prop_type_DNA_CONCENTRATION_OF_LIBRARY)
-assignment_SAMPLE_LIBRARY_DNA_CONCENTRATION_OF_LIBRARY.setMandatory(False)
-assignment_SAMPLE_LIBRARY_DNA_CONCENTRATION_OF_LIBRARY.setSection(None)
-assignment_SAMPLE_LIBRARY_DNA_CONCENTRATION_OF_LIBRARY.setPositionInForms(10)
-
-assignment_SAMPLE_LIBRARY_NANO_DROP = tr.assignPropertyType(samp_type_LIBRARY, prop_type_NANO_DROP)
-assignment_SAMPLE_LIBRARY_NANO_DROP.setMandatory(False)
-assignment_SAMPLE_LIBRARY_NANO_DROP.setSection(None)
-assignment_SAMPLE_LIBRARY_NANO_DROP.setPositionInForms(11)
-
-assignment_SAMPLE_LIBRARY_AGILENT_KIT = tr.assignPropertyType(samp_type_LIBRARY, prop_type_AGILENT_KIT)
-assignment_SAMPLE_LIBRARY_AGILENT_KIT.setMandatory(False)
-assignment_SAMPLE_LIBRARY_AGILENT_KIT.setSection(None)
-assignment_SAMPLE_LIBRARY_AGILENT_KIT.setPositionInForms(12)
-
-assignment_SAMPLE_LIBRARY_LIBRARY_PROCESSING_SUCCESSFUL = tr.assignPropertyType(samp_type_LIBRARY, prop_type_LIBRARY_PROCESSING_SUCCESSFUL)
-assignment_SAMPLE_LIBRARY_LIBRARY_PROCESSING_SUCCESSFUL.setMandatory(False)
-assignment_SAMPLE_LIBRARY_LIBRARY_PROCESSING_SUCCESSFUL.setSection(None)
-assignment_SAMPLE_LIBRARY_LIBRARY_PROCESSING_SUCCESSFUL.setPositionInForms(13)
-
-assignment_SAMPLE_LIBRARY_DATA_TRANSFERRED = tr.assignPropertyType(samp_type_LIBRARY, prop_type_DATA_TRANSFERRED)
-assignment_SAMPLE_LIBRARY_DATA_TRANSFERRED.setMandatory(False)
-assignment_SAMPLE_LIBRARY_DATA_TRANSFERRED.setSection(None)
-assignment_SAMPLE_LIBRARY_DATA_TRANSFERRED.setPositionInForms(14)
-
-assignment_SAMPLE_LIBRARY_INVOICE = tr.assignPropertyType(samp_type_LIBRARY, prop_type_INVOICE)
-assignment_SAMPLE_LIBRARY_INVOICE.setMandatory(False)
-assignment_SAMPLE_LIBRARY_INVOICE.setSection(None)
-assignment_SAMPLE_LIBRARY_INVOICE.setPositionInForms(15)
-
-assignment_SAMPLE_LIBRARY_NOTES = tr.assignPropertyType(samp_type_LIBRARY, prop_type_NOTES)
-assignment_SAMPLE_LIBRARY_NOTES.setMandatory(False)
-assignment_SAMPLE_LIBRARY_NOTES.setSection(None)
-assignment_SAMPLE_LIBRARY_NOTES.setPositionInForms(16)
-
-assignment_DATA_SET_MACS_OUTPUT_MACS_VERSION = tr.assignPropertyType(data_set_type_MACS_OUTPUT, prop_type_MACS_VERSION)
-assignment_DATA_SET_MACS_OUTPUT_MACS_VERSION.setMandatory(False)
-assignment_DATA_SET_MACS_OUTPUT_MACS_VERSION.setSection(None)
-assignment_DATA_SET_MACS_OUTPUT_MACS_VERSION.setPositionInForms(3)
-
-assignment_DATA_SET_MACS_OUTPUT_NOTES = tr.assignPropertyType(data_set_type_MACS_OUTPUT, prop_type_NOTES)
-assignment_DATA_SET_MACS_OUTPUT_NOTES.setMandatory(False)
-assignment_DATA_SET_MACS_OUTPUT_NOTES.setSection(None)
-assignment_DATA_SET_MACS_OUTPUT_NOTES.setPositionInForms(4)
-
-assignment_SAMPLE_MASTER_CONTACT_PERSON_NAME = tr.assignPropertyType(samp_type_MASTER, prop_type_CONTACT_PERSON_NAME)
-assignment_SAMPLE_MASTER_CONTACT_PERSON_NAME.setMandatory(False)
-assignment_SAMPLE_MASTER_CONTACT_PERSON_NAME.setSection(None)
-assignment_SAMPLE_MASTER_CONTACT_PERSON_NAME.setPositionInForms(2)
-
-assignment_SAMPLE_MASTER_CONTACT_PERSON_EMAIL = tr.assignPropertyType(samp_type_MASTER, prop_type_CONTACT_PERSON_EMAIL)
-assignment_SAMPLE_MASTER_CONTACT_PERSON_EMAIL.setMandatory(False)
-assignment_SAMPLE_MASTER_CONTACT_PERSON_EMAIL.setSection(None)
-assignment_SAMPLE_MASTER_CONTACT_PERSON_EMAIL.setPositionInForms(3)
-
-assignment_SAMPLE_MASTER_PRINCIPAL_INVESTIGATOR_NAME = tr.assignPropertyType(samp_type_MASTER, prop_type_PRINCIPAL_INVESTIGATOR_NAME)
-assignment_SAMPLE_MASTER_PRINCIPAL_INVESTIGATOR_NAME.setMandatory(False)
-assignment_SAMPLE_MASTER_PRINCIPAL_INVESTIGATOR_NAME.setSection(None)
-assignment_SAMPLE_MASTER_PRINCIPAL_INVESTIGATOR_NAME.setPositionInForms(4)
-
-assignment_SAMPLE_MASTER_PRINCIPAL_INVESTIGATOR_EMAIL = tr.assignPropertyType(samp_type_MASTER, prop_type_PRINCIPAL_INVESTIGATOR_EMAIL)
-assignment_SAMPLE_MASTER_PRINCIPAL_INVESTIGATOR_EMAIL.setMandatory(False)
-assignment_SAMPLE_MASTER_PRINCIPAL_INVESTIGATOR_EMAIL.setSection(None)
-assignment_SAMPLE_MASTER_PRINCIPAL_INVESTIGATOR_EMAIL.setPositionInForms(5)
-
-assignment_SAMPLE_MASTER_EXTERNAL_SAMPLE_NAME = tr.assignPropertyType(samp_type_MASTER, prop_type_EXTERNAL_SAMPLE_NAME)
-assignment_SAMPLE_MASTER_EXTERNAL_SAMPLE_NAME.setMandatory(False)
-assignment_SAMPLE_MASTER_EXTERNAL_SAMPLE_NAME.setSection(None)
-assignment_SAMPLE_MASTER_EXTERNAL_SAMPLE_NAME.setPositionInForms(6)
-
-assignment_SAMPLE_MASTER_BIOLOGICAL_SAMPLE_ARRIVED = tr.assignPropertyType(samp_type_MASTER, prop_type_BIOLOGICAL_SAMPLE_ARRIVED)
-assignment_SAMPLE_MASTER_BIOLOGICAL_SAMPLE_ARRIVED.setMandatory(False)
-assignment_SAMPLE_MASTER_BIOLOGICAL_SAMPLE_ARRIVED.setSection(None)
-assignment_SAMPLE_MASTER_BIOLOGICAL_SAMPLE_ARRIVED.setPositionInForms(7)
-
-assignment_SAMPLE_MASTER_SAMPLE_KIND = tr.assignPropertyType(samp_type_MASTER, prop_type_SAMPLE_KIND)
-assignment_SAMPLE_MASTER_SAMPLE_KIND.setMandatory(False)
-assignment_SAMPLE_MASTER_SAMPLE_KIND.setSection(None)
-assignment_SAMPLE_MASTER_SAMPLE_KIND.setPositionInForms(8)
-
-assignment_SAMPLE_MASTER_SEQUENCING_APPLICATION = tr.assignPropertyType(samp_type_MASTER, prop_type_SEQUENCING_APPLICATION)
-assignment_SAMPLE_MASTER_SEQUENCING_APPLICATION.setMandatory(False)
-assignment_SAMPLE_MASTER_SEQUENCING_APPLICATION.setSection(None)
-assignment_SAMPLE_MASTER_SEQUENCING_APPLICATION.setPositionInForms(9)
-
-assignment_SAMPLE_MASTER_NCBI_ORGANISM_TAXONOMY = tr.assignPropertyType(samp_type_MASTER, prop_type_NCBI_ORGANISM_TAXONOMY)
-assignment_SAMPLE_MASTER_NCBI_ORGANISM_TAXONOMY.setMandatory(False)
-assignment_SAMPLE_MASTER_NCBI_ORGANISM_TAXONOMY.setSection(None)
-assignment_SAMPLE_MASTER_NCBI_ORGANISM_TAXONOMY.setPositionInForms(10)
-
-assignment_SAMPLE_RAW_CONCENTRATION_ORIGINAL_ILLUMINA = tr.assignPropertyType(samp_type_RAW, prop_type_CONCENTRATION_ORIGINAL_ILLUMINA)
-assignment_SAMPLE_RAW_CONCENTRATION_ORIGINAL_ILLUMINA.setMandatory(False)
-assignment_SAMPLE_RAW_CONCENTRATION_ORIGINAL_ILLUMINA.setSection(None)
-assignment_SAMPLE_RAW_CONCENTRATION_ORIGINAL_ILLUMINA.setPositionInForms(2)
-
-assignment_SAMPLE_RAW_CYCLES_REQUESTED_BY_CUSTOMER = tr.assignPropertyType(samp_type_RAW, prop_type_CYCLES_REQUESTED_BY_CUSTOMER)
-assignment_SAMPLE_RAW_CYCLES_REQUESTED_BY_CUSTOMER.setMandatory(False)
-assignment_SAMPLE_RAW_CYCLES_REQUESTED_BY_CUSTOMER.setSection(None)
-assignment_SAMPLE_RAW_CYCLES_REQUESTED_BY_CUSTOMER.setPositionInForms(3)
-
-assignment_SAMPLE_RAW_LIBRARY_PROCESSING_POSSIBLE = tr.assignPropertyType(samp_type_RAW, prop_type_LIBRARY_PROCESSING_POSSIBLE)
-assignment_SAMPLE_RAW_LIBRARY_PROCESSING_POSSIBLE.setMandatory(False)
-assignment_SAMPLE_RAW_LIBRARY_PROCESSING_POSSIBLE.setSection(None)
-assignment_SAMPLE_RAW_LIBRARY_PROCESSING_POSSIBLE.setPositionInForms(4)
-
-assignment_SAMPLE_RAW_PREPARED_BY = tr.assignPropertyType(samp_type_RAW, prop_type_PREPARED_BY)
-assignment_SAMPLE_RAW_PREPARED_BY.setMandatory(False)
-assignment_SAMPLE_RAW_PREPARED_BY.setSection(None)
-assignment_SAMPLE_RAW_PREPARED_BY.setPositionInForms(5)
-
-assignment_SAMPLE_RAW_KIT_PREPARED = tr.assignPropertyType(samp_type_RAW, prop_type_KIT_PREPARED)
-assignment_SAMPLE_RAW_KIT_PREPARED.setMandatory(False)
-assignment_SAMPLE_RAW_KIT_PREPARED.setSection(None)
-assignment_SAMPLE_RAW_KIT_PREPARED.setPositionInForms(6)
-
-assignment_SAMPLE_RAW_INVOICE = tr.assignPropertyType(samp_type_RAW, prop_type_INVOICE)
-assignment_SAMPLE_RAW_INVOICE.setMandatory(False)
-assignment_SAMPLE_RAW_INVOICE.setSection(None)
-assignment_SAMPLE_RAW_INVOICE.setPositionInForms(7)
-
-assignment_SAMPLE_RAW_NOTES = tr.assignPropertyType(samp_type_RAW, prop_type_NOTES)
-assignment_SAMPLE_RAW_NOTES.setMandatory(False)
-assignment_SAMPLE_RAW_NOTES.setSection(None)
-assignment_SAMPLE_RAW_NOTES.setPositionInForms(8)
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/data-sources/.gitignore b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/data-sources/.gitignore
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-dropbox/create-flowcell-dropbox.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-dropbox/create-flowcell-dropbox.py
deleted file mode 100755
index 9b7f600f561..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-dropbox/create-flowcell-dropbox.py
+++ /dev/null
@@ -1,195 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Parses the two Illumina provided files 'runParameters.xml' and 'RunInfo.xml'
-and creates one Sample of type 'ILLUMINA_FLOW_CELL' and sets Sample properties 
-from those two XML files. Additionally the number of lanes are read out and
-are created as contained samples of type 'ILLUMINA_FLOW_LANE'.
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for HiSeq runs: 110715_SN792_0054_BC035RACXX
-expected incoming Name for GAII runs: 110812_6353WAAXX
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import shutil
-from time import *
-from datetime import *
-import xml.etree.ElementTree as etree
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-IS_HISEQ_RUN=False
-RUNPARAMETERS = 'runParameters.xml'
-RUNINFO = 'RunInfo.xml'
-FLOWCELL_SPACE='TEST'
-FLOWCELL_PROJECT='TEST-PROJECT'
-EXPERIMENT_TYPE_CODE='HT_SEQUENCING'
-
-FLOWCELL_PROJECT_ID = "/%(FLOWCELL_SPACE)s/%(FLOWCELL_PROJECT)s" % vars()
-
-# Mapping between XML file naming and used in here
-RUNPARAMETERS_XML = {'FLOWCELL':'Flowcell', 'RTAVERSION':'RTAVersion',
-  'CONTROLLANE':'ControlLane', 'SBS':'Sbs', 'INDEX':'Index',
-  'CYCLES_REQUESTED_BY_CUSTOMER':'Read1', 'PE':'Pe'}
-RUNINFO_XML = {'LANECOUNT':'LaneCount', 'SURFACECOUNT':'SurfaceCount',
-   'SWATHCOUNT':'SwathCount', 'TILECOUNT':'TileCount'}
-INSTRUMENT = {'SN792':'HISEQ2500'}
-
-class parseXmlFile: 
-    
-  def __init__(self, xmlFile):
-    self.xmlFile = xmlFile
-    self.tree = etree.parse(self.xmlFile)
-    self.root = self.tree.getroot()
-
-  def getXmlElement (self, elementName):
-    '''
-    Returns the text value of a given XML element
-    '''
-    for e in self.root.getchildren():
-      element = e.find(elementName)
-      if element is None:
-        return 'None'
-      else:
-        return element.text
-
-  def getAllchildren (self, elementName):
-    '''
-    finds all children of a given XML Element and returns them as list
-    '''
-    for e in self.root.getchildren():
-      # the '//' means look recursively for all children not only direct ones
-      childList  = self.tree.findall('//' + elementName)
-    return childList 
-
-# -----------------------------------------------------------------------------
-
-def create_openbis_timestamp (): 
-  ''' 
-  Create an openBIS conform timestamp
-  '''
-  tz=localtime()[3]-gmtime()[3]
-  d=datetime.now()
-  return d.strftime("%Y-%m-%d %H:%M:%S GMT"+"%+.2d" % tz+":00")
-
-# -----------------------------------------------------------------------------
-
-def registerFlowLane(transaction, a_lane, name, newFlowCell):
-  '''
-  Registers a new Flow lane 
-  '''
-  newFlowLane = transaction.createNewSample('/' + FLOWCELL_SPACE + '/' + name + ':' + str(a_lane), "ILLUMINA_FLOW_LANE")
-  newFlowLane.setContainer(newFlowCell)
-
-# -----------------------------------------------------------------------------
-
-def process(transaction):
-
-  incoming = transaction.getIncoming()
-  incomingPath = incoming.getAbsolutePath()
-
-  # Get the incoming name 
-  name = incoming.getName()
-
-  split=name.split("_")
-  if (len(split) == 4):
-    IS_HISEQ_RUN=True
-  if (len(split) == 2):
-    pass
-
-  # Search for the sample and check if there is already sample with this name
-  search_service = transaction.getSearchService()
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, name));
-  foundSamples = search_service.searchForSamples(sc)
-  if foundSamples.size() > 0:
-    raise NameError('Already found a Flow Cell with the following name: '+ name)  
-
-  # Parse the RunInfo.xml file
-  runInfo = parseXmlFile(incomingPath + '/' + RUNINFO) 
-
-  # Create a new Flow Cell and set the experiment
-  project = transaction.getProject(FLOWCELL_PROJECT_ID)
-  if project == None:
-    space = transaction.getSpace(FLOWCELL_SPACE)
-    if space == None:
-      space = transaction.createNewSpace(FLOWCELL_SPACE, None)
-      space.setDescription("A test space")
-    project = transaction.createNewProject(FLOWCELL_PROJECT_ID)
-    project.setDescription("A demo project")
-  expID = FLOWCELL_PROJECT_ID + '/' + datetime.now().strftime("%Y.%m")
-  exp = transaction.getExperiment(expID)
-  if exp == None:
-    exp = transaction.createNewExperiment(expID, EXPERIMENT_TYPE_CODE)
-  newFlowCell = transaction.createNewSample('/' + FLOWCELL_SPACE + '/' + name, "ILLUMINA_FLOW_CELL")
-  newFlowCell.setExperiment(exp)
- 
-  if IS_HISEQ_RUN:
-    run = runInfo.getAllchildren('Run')[0].attrib
-    if (run['Id'] != name):
-      raise NameError('Flowcell names do not match between directory name '+ name +
-            ' and ' + RUNINFO + 'property file: ' + run['Id'])
-
-    # The HiSeq is providing more infos, which we will parse here:
-    runParameters = parseXmlFile(incomingPath + '/' + RUNPARAMETERS)
-    
-    newFlowCell.setPropertyValue("ILLUMINA_PIPELINE_VERSION", runParameters.getXmlElement(RUNPARAMETERS_XML['RTAVERSION']))
-    newFlowCell.setPropertyValue("FLOWCELLTYPE", runParameters.getXmlElement(RUNPARAMETERS_XML['FLOWCELL']))
-    newFlowCell.setPropertyValue("CONTROL_LANE", runParameters.getXmlElement(RUNPARAMETERS_XML['CONTROLLANE']))
-    newFlowCell.setPropertyValue("SBS_KIT", runParameters.getXmlElement(RUNPARAMETERS_XML['SBS']))
-    
-    read1 = runParameters.getAllchildren('Read1')
-    newFlowCell.setPropertyValue("CYCLES_REQUESTED_BY_CUSTOMER", read1[0].text)
-    
-    read2 = runParameters.getAllchildren('Read2')
-    if (str(read2[0].text) == '0'):
-      newFlowCell.setPropertyValue("END_TYPE", "SINGLE_READ") 
-    else:
-      newFlowCell.setPropertyValue("END_TYPE", "PAIRED_END") 
-      newFlowCell.setPropertyValue("PAIRED_END_KIT", runParameters.getXmlElement(RUNPARAMETERS_XML['PE']))
-    
-    indexRead1 = runParameters.getAllchildren('IndexRead1')
-    newFlowCell.setPropertyValue("INDEXREAD", indexRead1[0].text) 
-    
-    indexRead2 = runParameters.getAllchildren('IndexRead2')
-    newFlowCell.setPropertyValue("INDEXREAD2", indexRead2[0].text) 
-  
-    def setFcProperty(searchId, dict):
-      children = runInfo.getAllchildren(searchId) 
-      for element in (dict):
-        if (element <> '') and (dict[element] <> ''):
-          newFlowCell.setPropertyValue(element, children[0].attrib[dict[element]])
-
-    setFcProperty('FlowcellLayout', RUNINFO_XML)
-
-  sequencer = runInfo.getAllchildren('Instrument')
-  newFlowCell.setPropertyValue("SEQUENCER", INSTRUMENT[sequencer[0].text])
-
-  newFlowCell.setPropertyValue("FLOW_CELL_SEQUENCED_ON", create_openbis_timestamp())
-  if IS_HISEQ_RUN:
-    maxLanes = runInfo.getAllchildren('FlowcellLayout')[0].attrib[RUNINFO_XML['LANECOUNT']]
-  else:
-    maxLanes = len(runInfo.getAllchildren('Tiles')[0])
-
-  [registerFlowLane(transaction, lane, name, newFlowCell) for lane in range(1,int(maxLanes)+1)]
-
-  shutil.rmtree(incomingPath)
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-dropbox/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-dropbox/plugin.properties
deleted file mode 100644
index 9480a66c84c..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-dropbox/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for creating a flow cell based on runParameters.xml and RunInfo.xml created by an 
-# Illumina HiSeq 
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/incoming-create-flowcell
-incoming-data-completeness-condition = auto-detection
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = create-flowcell-dropbox.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-hiseq/create-flowcell-hiseq.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-hiseq/create-flowcell-hiseq.py
deleted file mode 100644
index a63f60f88c0..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-hiseq/create-flowcell-hiseq.py
+++ /dev/null
@@ -1,194 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Parses the two Illumina provided files 'runParameters.xml' and 'RunInfo.xml'
-and creates one Sample of type 'ILLUMINA_FLOW_CELL' and sets Sample properties 
-from those two XML files. Additionally the number of lanes are read out and
-are created as contained samples of type 'ILLUMINA_FLOW_LANE'.
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for HiSeq runs: 110715_SN792_0054_BC035RACXX
-expected incoming Name for GAII runs: 110812_6353WAAXX
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import shutil
-from time import *
-from datetime import *
-import xml.etree.ElementTree as etree
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-IS_HISEQ_RUN=False
-RUNPARAMETERS = 'runParameters.xml'
-RUNINFO = 'RunInfo.xml'
-FLOWCELL_SPACE='BSSE_FLOWCELLS'
-FLOWCELL_PROJECT='FLOWCELLS'
-EXPERIMENT_TYPE_CODE='HT_SEQUENCING'
-
-FLOWCELL_PROJECT_ID = "/%(FLOWCELL_SPACE)s/%(FLOWCELL_PROJECT)s" % vars()
-
-# Mapping between XML file naming and used in here
-RUNPARAMETERS_XML = {'FLOWCELL':'Flowcell', 'RTAVERSION':'RTAVersion',
-  'CONTROLLANE':'ControlLane', 'SBS':'Sbs', 'INDEX':'Index',
-  'CYCLES_REQUESTED_BY_CUSTOMER':'Read1', 'PE':'Pe'}
-RUNINFO_XML = {'LANECOUNT':'LaneCount', 'SURFACECOUNT':'SurfaceCount',
-   'SWATHCOUNT':'SwathCount', 'TILECOUNT':'TileCount'}
-
-class parseXmlFile: 
-    
-  def __init__(self, xmlFile):
-    self.xmlFile = xmlFile
-    self.tree = etree.parse(self.xmlFile)
-    self.root = self.tree.getroot()
-
-  def getXmlElement (self, elementName):
-    '''
-    Returns the text value of a given XML element
-    '''
-    for e in self.root.getchildren():
-      element = e.find(elementName)
-      if element is None:
-        return 'None'
-      else:
-        return element.text
-
-  def getAllchildren (self, elementName):
-    '''
-    finds all children of a given XML Element and returns them as list
-    '''
-    for e in self.root.getchildren():
-      # the '//' means look recursively for all children not only direct ones
-      childList  = self.tree.findall('//' + elementName)
-    return childList 
-
-# -----------------------------------------------------------------------------
-
-def create_openbis_timestamp (): 
-  ''' 
-  Create an openBIS conform timestamp
-  '''
-  tz=localtime()[3]-gmtime()[3]
-  d=datetime.now()
-  return d.strftime("%Y-%m-%d %H:%M:%S GMT"+"%+.2d" % tz+":00")
-
-# -----------------------------------------------------------------------------
-
-def registerFlowLane(transaction, a_lane, name, newFlowCell):
-  '''
-  Registers a new Flow lane 
-  '''
-  newFlowLane = transaction.createNewSample('/' + FLOWCELL_SPACE + '/' + name + ':' + str(a_lane), "ILLUMINA_FLOW_LANE")
-  newFlowLane.setContainer(newFlowCell)
-
-# -----------------------------------------------------------------------------
-
-def process(transaction):
-
-  incoming = transaction.getIncoming()
-  incomingPath = incoming.getAbsolutePath()
-
-  # Get the incoming name 
-  name = incoming.getName()
-
-  split=name.split("_")
-  if (len(split) == 4):
-    IS_HISEQ_RUN=True
-  if (len(split) == 2):
-    pass
-
-  # Search for the sample and check if there is already sample with this name
-  search_service = transaction.getSearchService()
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, name));
-  foundSamples = search_service.searchForSamples(sc)
-  if foundSamples.size() > 0:
-    raise NameError('Already found a Flow Cell with the following name: '+ name)  
-
-  # Parse the RunInfo.xml file
-  runInfo = parseXmlFile(incomingPath + '/' + RUNINFO) 
-
-  # Create a new Flow Cell and set the experiment
-  project = transaction.getProject(FLOWCELL_PROJECT_ID)
-  if project == None:
-    space = transaction.getSpace(FLOWCELL_SPACE)
-    if space == None:
-      space = transaction.createNewSpace(FLOWCELL_SPACE, None)
-      space.setDescription("A test space")
-    project = transaction.createNewProject(FLOWCELL_PROJECT_ID)
-    project.setDescription("A demo project")
-  expID = FLOWCELL_PROJECT_ID + '/' + datetime.now().strftime("%Y.%m")
-  exp = transaction.getExperiment(expID)
-  if exp == None:
-    exp = transaction.createNewExperiment(expID, EXPERIMENT_TYPE_CODE)
-  newFlowCell = transaction.createNewSample('/' + FLOWCELL_SPACE + '/' + name, "ILLUMINA_FLOW_CELL")
-  newFlowCell.setExperiment(exp)
- 
-  if IS_HISEQ_RUN:
-    run = runInfo.getAllchildren('Run')[0].attrib
-    if (run['Id'] != name):
-      raise NameError('Flowcell names do not match between directory name '+ name +
-            ' and ' + RUNINFO + 'property file: ' + run['Id'])
-
-    # The HiSeq is providing more infos, which we will parse here:
-    runParameters = parseXmlFile(incomingPath + '/' + RUNPARAMETERS)
-    
-    newFlowCell.setPropertyValue("ILLUMINA_PIPELINE_VERSION", runParameters.getXmlElement(RUNPARAMETERS_XML['RTAVERSION']))
-    newFlowCell.setPropertyValue("FLOWCELLTYPE", runParameters.getXmlElement(RUNPARAMETERS_XML['FLOWCELL']))
-    newFlowCell.setPropertyValue("CONTROL_LANE", runParameters.getXmlElement(RUNPARAMETERS_XML['CONTROLLANE']))
-    newFlowCell.setPropertyValue("SBS_KIT", runParameters.getXmlElement(RUNPARAMETERS_XML['SBS']))
-    
-    read1 = runParameters.getAllchildren('Read1')
-    newFlowCell.setPropertyValue("CYCLES_REQUESTED_BY_CUSTOMER", read1[0].text)
-    
-    read2 = runParameters.getAllchildren('Read2')
-    if (str(read2[0].text) == '0'):
-      newFlowCell.setPropertyValue("END_TYPE", "SINGLE_READ") 
-    else:
-      newFlowCell.setPropertyValue("END_TYPE", "PAIRED_END") 
-      newFlowCell.setPropertyValue("PAIRED_END_KIT", runParameters.getXmlElement(RUNPARAMETERS_XML['PE']))
-    
-    indexRead1 = runParameters.getAllchildren('IndexRead1')
-    newFlowCell.setPropertyValue("INDEXREAD", indexRead1[0].text) 
-    
-    indexRead2 = runParameters.getAllchildren('IndexRead2')
-    newFlowCell.setPropertyValue("INDEXREAD2", indexRead2[0].text) 
-  
-    def setFcProperty(searchId, dict):
-      children = runInfo.getAllchildren(searchId) 
-      for element in (dict):
-        if (element <> '') and (dict[element] <> ''):
-          newFlowCell.setPropertyValue(element, children[0].attrib[dict[element]])
-
-    setFcProperty('FlowcellLayout', RUNINFO_XML)
-
-  sequencer = runInfo.getAllchildren('Instrument')
-  newFlowCell.setPropertyValue("SEQUENCER", sequencer[0].text)
-
-  newFlowCell.setPropertyValue("FLOW_CELL_SEQUENCED_ON", create_openbis_timestamp())
-  if IS_HISEQ_RUN:
-    maxLanes = runInfo.getAllchildren('FlowcellLayout')[0].attrib[RUNINFO_XML['LANECOUNT']]
-  else:
-    maxLanes = len(runInfo.getAllchildren('Tiles')[0])
-
-  [registerFlowLane(transaction, lane, name, newFlowCell) for lane in range(1,int(maxLanes)+1)]
-
-  shutil.rmtree(incomingPath)
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-hiseq/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-hiseq/plugin.properties
deleted file mode 100644
index 5c56666b206..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-hiseq/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for creating a flow cell based on runParameters.xml and RunInfo.xml created by an 
-# Illumina HiSeq 
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/create-flowcell-hiseq
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = create-flowcell-hiseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-miseq/create-flow-cell-miseq.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-miseq/create-flow-cell-miseq.py
deleted file mode 100755
index 6188431519d..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-miseq/create-flow-cell-miseq.py
+++ /dev/null
@@ -1,199 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Parses the two Illumina provided files 'RunParameters.xml' and 'RunInfo.xml'
-and creates one Sample of type 'ILLUMINA_FLOW_CELL' and sets Sample properties 
-from those two XML files. Additionally the number of lanes are read out and
-are created as contained samples of type 'ILLUMINA_FLOW_LANE'.
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for MiSeq runs: 120726_M00721_0011_A000000000-A1FVF
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import shutil
-from time import *
-from datetime import *
-import xml.etree.ElementTree as etree
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-RUNPARAMETERS = 'RunParameters.xml'
-#RUNPARAMETERS = 'runParameters.xml'
-RUNINFO = 'RunInfo.xml'
-FLOWCELL_SPACE='/BSSE_FLOWCELLS/'
-FLOWCELL_PROJECT='FLOWCELLS/'
-EXPERIMENT_TYPE_CODE='HT_SEQUENCING'
-
-# Mapping between XML file naming and openBIS properties
-
-RUNINFO_XML = {'LANECOUNT':'LaneCount', 'SURFACECOUNT':'SurfaceCount',
-   'SWATHCOUNT':'SwathCount', 'TILECOUNT':'TileCount'}
-
-#------------------------------------------------------------------------------
-
-class parseXmlFile: 
-    
-  def __init__(self, xmlFile):
-    self.xmlFile = xmlFile
-    self.tree = etree.parse(self.xmlFile)
-    self.root = self.tree.getroot()
-
-  def getXmlElement (self, elementName):
-    '''
-    Returns the text value of a given XML element
-    '''
-    for e in self.root.getchildren():
-      element = e.find(elementName)
-      if element is None:
-	return 'None'
-      else:
-	return element.text
-
-  def getAllchildren (self, elementName):
-    '''
-    finds all children of a given XML Element and returns them as list
-    '''
-    for e in self.root.getchildren():
-      # the '//' means look recursively for all children not only direct ones
-      childList  = self.tree.findall('//' + elementName)
-    return childList 
-
-# -----------------------------------------------------------------------------
-
-def create_openbis_timestamp (): 
-  ''' 
-  Create an openBIS conform timestamp
-  '''
-  tz=localtime()[3]-gmtime()[3]
-  d=datetime.now()
-  return d.strftime("%Y-%m-%d %H:%M:%S GMT"+"%+.2d" % tz+":00")
-
-# -----------------------------------------------------------------------------
-
-def registerFlowLane(a_lane, transaction, name, newFlowCell):
-  '''
-  Registers a new Flow lane 
-  '''
-  newFlowLane = transaction.createNewSample(FLOWCELL_SPACE + name + ':' + str(a_lane), "ILLUMINA_FLOW_LANE")
-  newFlowLane.setContainer(newFlowCell)
-  
-# -----------------------------------------------------------------------------
-def process(transaction):
-
-  incoming = transaction.getIncoming()
-  incomingPath = incoming.getAbsolutePath()
-
-  name = incoming.getName()
-  # ['120726', 'M00721', '0011', 'A000000000-A1FVF']
-  runDate, MiseqID, runningNumber, trayAndFcId = name.split("_")
-  tray = trayAndFcId[0]
-  fcId = trayAndFcId[1:]
-
-  # -----------------------------------------------------------------------------
-
-  # Search for the sample and check if there is already sample with this name
-  search_service = transaction.getSearchService()
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, name));
-  foundSamples = search_service.searchForSamples(sc)
-  if foundSamples.size() > 0:
-    raise NameError('Already found a Flow Cell with the following name: '+ name)  
-
-  # Parse the RunInfo.xml file
-  runInfo = parseXmlFile(incomingPath + '/' + RUNINFO) 
-
-  # Create a new Flow Cell and set the experiment
-  newFlowCell = transaction.createNewSample(FLOWCELL_SPACE + name, "ILLUMINA_FLOW_CELL")
-  exp = transaction.getExperiment(FLOWCELL_SPACE + FLOWCELL_PROJECT + datetime.now().strftime("%Y.%m"))
-  if exp == None:
-    exp = transaction.createNewExperiment(FLOWCELL_SPACE + FLOWCELL_PROJECT + datetime.now().strftime("%Y.%m"),
-	       EXPERIMENT_TYPE_CODE)
-  newFlowCell.setExperiment(exp)
-   
-  run = runInfo.getAllchildren('Run')[0].attrib
-  if (run['Id'] != name):
-    raise NameError('Flowcell names do not match between directory name '+ name +
-	  ' and ' + RUNINFO + 'property file: ' + run['Id'])
-
-  runParameters = parseXmlFile(incomingPath + '/' + RUNPARAMETERS)
-  RTAversion = (runParameters.getAllchildren('RTAVersion'))[0].text
-  print RTAversion
-  newFlowCell.setPropertyValue("ILLUMINA_PIPELINE_VERSION", RTAversion)
-    
-  def setFcProperty(searchId, dict):
-    children = runInfo.getAllchildren(searchId) 
-    for element in (dict):
-      if (element <> '') and (dict[element] <> ''):
-	newFlowCell.setPropertyValue(element, children[0].attrib[dict[element]])
-  
-  # Reading out <FlowcellLayout LaneCount="1" SurfaceCount="1" SwathCount="1" TileCount="12" />
-  setFcProperty('FlowcellLayout', RUNINFO_XML)
-
-  sequencer = runInfo.getAllchildren('Instrument')
-  newFlowCell.setPropertyValue("SEQUENCER", sequencer[0].text)
-
-  readMap = {}
-  reads = runInfo.getAllchildren('Reads')
-  read = reads[0].findall('Read')
-
-  for r in read:
-    cycles = r.get('NumCycles', 'str')
-    number = r.get('Number', 'str')
-    isIndexed = r.get('IsIndexedRead', 'str')
-    readMap[number] = [cycles, isIndexed]
-
-    # example of readMap: {'1': ['151', 'N'], '2': ['8', 'Y'], '3': ['8', 'Y'], '4': ['151', 'N']}
-   
-    newFlowCell.setPropertyValue("CYCLES_REQUESTED_BY_CUSTOMER", readMap['1'][0])
-   
-    indexCount = 0
-    readCount = 0
-
-    for e in readMap:
-      if readMap[e][1] == 'Y':
-	indexCount += 1
-      else:
-	readCount += 1
-
-    if indexCount == 2:
-      newFlowCell.setPropertyValue("END_TYPE", "PAIRED_END")
-    else:
-      newFlowCell.setPropertyValue("END_TYPE", "SINGLE_READ")
-
-    try:
-      newFlowCell.setPropertyValue("INDEXREAD", readMap['2'][0])
-    except:
-      newFlowCell.setPropertyValue("INDEXREAD", '0') 
-
-    try:
-      newFlowCell.setPropertyValue("INDEXREAD2", readMap['3'][0])
-    except:
-      newFlowCell.setPropertyValue("INDEXREAD2", '0')
-
-  newFlowCell.setPropertyValue("FLOW_CELL_SEQUENCED_ON", create_openbis_timestamp())
-
-  # get the number of lanes
-  maxLanes = runInfo.getAllchildren('FlowcellLayout')[0].attrib[RUNINFO_XML['LANECOUNT']]
-
-  [registerFlowLane(lane, transaction, name, newFlowCell) for lane in range(1,int(maxLanes)+1)]
-
-  shutil.rmtree(incomingPath)
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-miseq/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-miseq/plugin.properties
deleted file mode 100644
index 1c15a550f60..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/create-flowcell-miseq/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for creating  a flow cell 
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/dss/create-flowcell-miseq
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = create-flow-cell-miseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/read-demultiplex-stats/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/read-demultiplex-stats/plugin.properties
deleted file mode 100644
index 1337bde948b..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/read-demultiplex-stats/plugin.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-# 
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/read-demultiplex-stats
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = read-demultiplex-stats.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/read-demultiplex-stats/read-demultiplex-stats.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/read-demultiplex-stats/read-demultiplex-stats.py
deleted file mode 100755
index df7c525e37c..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/read-demultiplex-stats/read-demultiplex-stats.py
+++ /dev/null
@@ -1,538 +0,0 @@
-'''
-  @copyright: 2012 ETH Zuerich, CISD
-  
-  @license: 
-  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.
-
-
-@author: Manuel Kohler
-
-XML Structur which is processed:
-
-<?xml version="1.0"?>
-<Summary>
-  <Lane index="8">
-    <Sample index="lane8">
-      <Barcode index="Undetermined">
-        <Tile index="1101">
-          <Read index="1">
-            <Raw>
-              <Yield>1921250</Yield>
-              <YieldQ30>949680</YieldQ30>
-              <ClusterCount>38425</ClusterCount>
-              <ClusterCount0MismatchBarcode>0</ClusterCount0MismatchBarcode>
-              <ClusterCount1MismatchBarcode>0</ClusterCount1MismatchBarcode>
-              <QualityScoreSum>40995660</QualityScoreSum>
-            </Raw>
-            <Pf>
-              <Yield>945450</Yield>
-              <YieldQ30>854815</YieldQ30>
-              <ClusterCount>18909</ClusterCount>
-              <ClusterCount0MismatchBarcode>0</ClusterCount0MismatchBarcode>
-              <ClusterCount1MismatchBarcode>0</ClusterCount1MismatchBarcode>
-              <QualityScoreSum>33815505</QualityScoreSum>
-            </Pf>
-          </Read>
-        </Tile>
-        [...]
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-'''
-
-import time
-import os
-import fnmatch
-import xml.etree.ElementTree as etree
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-
-class parseXmlFile:
-
-  def __init__(self, xmlFile):
-    self.xmlFile = xmlFile
-    self.tree = etree.parse(self.xmlFile)
-    self.root = self.tree.getroot()
-
-# -----------------------------------------------------------------------------
-
-class qcValues(object):
-  def __init__(self, Yield = 0, YieldQ30 = 0, ClusterCount = 0,
-               ClusterCount0MismatchBarcode = 0, ClusterCount1MismatchBarcode = 0,
-               QualityScoreSum = 0, *args, **kwargs):
-    self.Yield = Yield
-    self.YieldQ30 = YieldQ30
-    self.ClusterCount = ClusterCount 
-    self.ClusterCount0MismatchBarcode = ClusterCount0MismatchBarcode
-    self.ClusterCount1MismatchBarcode = ClusterCount1MismatchBarcode
-    self.QualityScoreSum = QualityScoreSum
-    
-  def __str__(self):
-        return "Yield: %s, YieldQ30: %s, ClusterCount: %s, ClusterCount0MismatchBarcode: %s," \
-          " CusterCount1MismatchBarcode: %s, QualityScoreSum: %s" \
-          % (self.Yield, self.YieldQ30, self.ClusterCount, self.ClusterCount0MismatchBarcode,
-          self.ClusterCount1MismatchBarcode, self.QualityScoreSum)    
-
-class sample:
-  def __init__(self, Lane = 0, Sample = '', Barcode = '', Tile = '', Read = '', rawqc = qcValues([]),
-                pfqc = qcValues([]), *args, **kwargs):
-    self.Lane = Lane
-    self.Sample = Sample
-    self.Barcode = Barcode
-    self.Tile = Tile
-    self.Read = Read
-    self.rawqc = rawqc
-    self.pfqc = pfqc
-    
-  def __str__(self):
-    return "Lane: %s, Sample: %s, Barcode: %s, Tile: %s, Read: %s, rawqc: %s, pfqc: %s" \
-      % (self.Lane, self.Sample, self.Barcode, self.Tile, self.Read, self.rawqc, self.pfqc)
-
-# -----------------------------------------------------------------------------
-
-class Statistics:
-  def __init__(self, lane = 0, sampleName = "", index1 = "NoIndex", index2 = "NoIndex", pfYieldSum = 0,
-                 rawYieldSum = 0, pfPercentage = 0.0, rawReadsSum = 0, pfReadsSum = 0,
-                 pfYieldQ30Sum = 0, qualityScoreSum = 0, rawPercentageReadsPerLane = 0.0,
-                 pfYieldQ30Percentage = 0.0, pfsumQualityScore = 0, pfmeanQualityScore = 0.0):
-      self.lane = lane
-      self.sampleName = sampleName
-      self.index1 = index1
-      self.index2 = index2
-      self.pfYieldSum = pfYieldSum
-      self.rawYieldSum = rawYieldSum
-      self.pfPercentage = pfPercentage
-      self.rawReadsSum = rawReadsSum
-      self.pfReadsSum = pfReadsSum
-      self.pfYieldQ30Sum = pfYieldQ30Sum
-      self.qualityScoreSum = qualityScoreSum
-      self.rawPercentageReadsPerLane = rawPercentageReadsPerLane
-      self.pfYieldQ30Percentage = pfYieldQ30Percentage
-      self.pfsumQualityScore = pfsumQualityScore
-      self.pfmeanQualityScore = pfmeanQualityScore
-      
-  def __str__(self):
-    return "lane: %s, sampleName: %s, index1: %s, index2: %s, pfYieldSum: %s, pfPercentage: %s," \
-           " rawReadsSum: %s, pfReadsSum: %s," \
-           " rawPercentageReadsPerLane: %s, pfYieldQ30Percentage: %s," \
-           " pfmeanQualityScore: %s" \
-        % (self.lane, self.sampleName, self.index1, self.index2, self.pfYieldSum, self.pfPercentage,
-           self.rawReadsSum, self.pfReadsSum,
-           self.rawPercentageReadsPerLane, self.pfYieldQ30Percentage, self.pfmeanQualityScore)
-         
-  def calculatePercentagePF (self, rawYield = 0, pfYield = 1):
-    try:
-      return round(float(pfYield) / float(rawYield) * 100, 2)
-    except:
-      return 0.0
-  
-  def calulateMeanQualityScore (self, pfqualityScoreSum = 0, pfYield = 1):
-    try:
-      return round (float(pfqualityScoreSum) / float(pfYield), 2)
-    except:
-      return 0.0
-    
-  def calculateYieldQ30Percentage (self, pfYieldQ30 = 0, pfYield = 1):
-    try:
-      return round (float(pfYieldQ30) / float(pfYield) * 100, 2)
-    except:
-      return 0.0
-
-# -----------------------------------------------------------------------------
-
-def xml2Memory(DEMULTIPLEX_XML):
-  '''
-  Parse the XML file and put all values in a memory structure:
-  List of: 
-  lane, sample, barcode, tile, read, qcRawList, qcPfList
-  '''
-
-  RAW_TAG = "Raw"
-  PF_TAG = "Pf"
-
-  sampleList = []
-  
-  xml = parseXmlFile(DEMULTIPLEX_XML)
-  r = xml.tree.getroot()
-
-  for lane in r.getchildren():
-    for mysample in lane:  
-      for barcode in mysample:       
-        for tile in barcode:
-          for read in tile:
-            
-            qcRaw = qcValues()
-            qcPf = qcValues()  
-            qcRawList = []
-            qcPfList = []
-
-            # Read out the Raw fields
-            raw = read.find(RAW_TAG) 
-            for child in raw.getchildren():
-              # equivalent to a Java reflection
-              setattr(qcRaw, child.tag, int(child.text))
-              
-            # Read out the Pf fields
-            pf = read.find(PF_TAG)
-            for child in pf.getchildren():
-              # equivalent to a Java reflection
-              setattr(qcPf, child.tag, int(child.text))
-
-            qcRawList.append(qcRaw)
-            qcPfList.append(qcPf)
-            
-            singleElement = sample ()
-            
-            setattr(singleElement, lane.tag, lane.attrib)
-            setattr(singleElement, mysample.tag, mysample.attrib)
-            setattr(singleElement, barcode.tag, barcode.attrib)
-            setattr(singleElement, tile.tag, tile.attrib)
-            setattr(singleElement, read.tag, read.attrib)
-            singleElement.rawqc = qcRawList
-            singleElement.pfqc = qcPfList
-            
-            sampleList.append(singleElement)
-  return sampleList
-
-# -----------------------------------------------------------------------------
-
-def calculateStatistics(listofSamples):
-  '''
-  Structure of 'listofSamples'
-  Lane: {'index': '6'}, Sample: {'index': 'BSSE-QGF-3524_C0NKPACXX'}, Barcode: {'index': 'TGACCA'},
-  Tile: {'index': '2307'}, Read: {'index': '1'}, rawqc:<mem>, pfqc:<mem> 
-  '''
-
-  numberOfTiles = len(listofSamples)
-  
-  tile = sample()
-  raw = qcValues ()
-  pf = qcValues ()
-  stats = Statistics()
- 
-  for tile in listofSamples:
-    raw = tile.rawqc[0]
-    pf = tile.pfqc[0]
-    
-    stats.pfYieldSum += pf.Yield
-    stats.rawYieldSum += raw.Yield
-    stats.rawReadsSum += raw.ClusterCount 
-    stats.pfReadsSum += pf.ClusterCount
-    stats.pfYieldQ30Sum += pf.YieldQ30
-    stats.qualityScoreSum += pf.QualityScoreSum
-     
-  # Can not be set here, needs to be calculated later   
-  #stats.rawPercentageReadsPerLane = rawPercentageReadsPerLane
-  stats.pfPercentage = stats.calculatePercentagePF(stats.rawYieldSum, stats.pfYieldSum)
-  stats.pfYieldQ30Percentage = stats.calculateYieldQ30Percentage(stats.pfYieldQ30Sum, stats.pfYieldSum)
-  stats.pfmeanQualityScore = stats.calulateMeanQualityScore(stats.qualityScoreSum, stats.pfYieldSum)
-  stats.lane = listofSamples[0].Lane.values()[0]
-  stats.sampleName = listofSamples[0].Sample.values()[0]
-  index = listofSamples[0].Barcode.values()[0]
-  try:
-    stats.index1, stats.index2 = index.split("-")
-  except:
-    stats.index1 = index
-  return stats
-
-# -----------------------------------------------------------------------------
-
-
-def rawReadSumPerSamples(stat):
-  '''
-  Creates a dictionary with the lanes as keys
-  The values are a list where the elements are a dictionary again.
-  This dictionary has the sample names as key and the RawReadSum as value.  
-  
-  Example:
-  {4': [{'BSSE-QGF-3434_C0NKPACXX': 248999502}], '7': [{'lane7': 123921974}, 
-  {'BSSE-QGF-3527_C0NKPACXX': 38587703}, {'BSSE-QGF-3529_C0NKPACXX': 30130893},
-  {'BSSE-QGF-3528_C0NKPACXX': 34519296}, {'BSSE-QGF-3526_C0NKPACXX': 34980179}]}
-  '''
-  
-  laneDict = {}
-  for e in stat:
-    if e.lane not in laneDict:
-      laneDict[e.lane] = [{e.sampleName:e.rawReadsSum}]
-    else:
-      laneDict[e.lane].append({e.sampleName:e.rawReadsSum})
-  return laneDict
-
-# -----------------------------------------------------------------------------
-
-def createSumRawReadsPerLane(laneDict):
-  '''
-  Creates a dictionary with lane as key and sum of Raw Reads as value:
-  {'1': 183180877, '3': 244968562, '2': 191496395, '5': 193466239, '4': 248999502, 
-  '7': 262140045, '6': 257136830, '8': 209948449}
-  '''
-  sumRawReadsDict = {}
-  for lane in laneDict:
-    sumRawReads = 0
-    for sampleNameDict in laneDict[lane]:
-      sumRawReads += sampleNameDict.values()[0]
-    
-    sumRawReadsDict[lane] = sumRawReads 
-  return sumRawReadsDict
-
-# -----------------------------------------------------------------------------
-
-def createPercentagePerLane(laneDict, sumRawReadsDict):
-  '''
-  Creates a dictionary with the sample Name as key and the percentage of raw reads related to 
-  all reads in the same lane
-  {'lane7': 47.27, 'BSSE-QGF-3433_C0NKPACXX': 100.0, 'BSSE-QGF-3666_C0NKPACXX': 54.12}
-  '''
-  
-  relRawReadsDict = {}
-  for lane in laneDict:
-    for sampleName in laneDict[lane]:
-      relRawReadsDict[sampleName.keys()[0]] = round(float(sampleName.values()[0]) / 
-                                                    float(sumRawReadsDict[lane]) * 100, 2)
-  return relRawReadsDict
-
-# -----------------------------------------------------------------------------
-
-def locate(pattern, root):
-    '''Locate all files matching supplied filename pattern in and below
-    supplied root directory.'''
-    for path, dirs, files in os.walk(os.path.abspath(root)):
-        for filename in fnmatch.filter(files, pattern):
-            yield os.path.join(path, filename)
-
-# -----------------------------------------------------------------------------
-
-def getVocabulary(transaction, vocabularyCode):
- 
-  vocabularyTermList = [] 
-  vocabulary = transaction.getSearchService().searchForVocabulary(vocabularyCode)
-  if (vocabulary is None):
-    print 'VOCABULARY %s does not exist' % (vocabularyCode)
-  else:
-    print "Getting VOCABULARY: " + vocabulary.getCode() 
-    for term in vocabulary.getTerms():
-            vocabularyTermList.append(term.getCode())           
-  vocabularyTermList.sort()
-  return vocabularyTermList
-
-# -----------------------------------------------------------------------------
-
-def getFlowCellMetaData (transaction,flowCellId):
-
-  def sortedDictValues(adict):
-    keys = adict.keys()
-    keys.sort()
-    return map(adict.get, keys)
-
-  search = transaction.getSearchService()
-  sc = SearchCriteria()
-  print('Searching FlowCell: '+ str(flowCellId))
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCellId));
-  foundFlowCells = search.searchForSamples(sc)
-
-  try:
-    assert foundFlowCells.size() == 1
-  except AssertionError:
-    print (str(foundFlowCells.size()) + \
-          ' flow cells found which match the criterias: '+ flowCellId)
-
-  fcPropertiesDict = {}
-  fcPropertyTypes = []
-
-  fcProperties = foundFlowCells[0].getSample().getProperties()
-  for property in fcProperties:
-      code = property.getPropertyType().getSimpleCode()
-      fcPropertyTypes.append(code)
-      fcPropertiesDict[code] = property.getValue()
-
-  fcPropertyTypes.sort()
-  return fcPropertiesDict, fcPropertyTypes
-
-
-# -----------------------------------------------------------------------------
-
-def process(transaction):
-  '''
-  Main
-  '''
-
-  FASTQ_DATA_SET_TYPE='FASTQ_GZ'
-  DEMUX_FILE='Flowcell_demux_summary.xml'
-  NO_INDEX='NOINDEX'
-  UNDETERMINED='UNDETERMINED'
-
-  incomingPath = transaction.getIncoming().getPath()
-  name = transaction.getIncoming().getName()
-
-  print('\n'+time.ctime())
-
-  fcPropertiesDict, fcPropertyTypes = getFlowCellMetaData(transaction, name)
-  print fcPropertiesDict
-  print fcPropertyTypes
-
-  search_service = transaction.getSearchService()
-
-  FileGenerator= locate(DEMUX_FILE, incomingPath)
-  DEMULTIPLEX_XML = FileGenerator.next()
-
-  sampleList = xml2Memory(DEMULTIPLEX_XML)    
-
-  sa = sample()
-  sampleDict = {}
-
-  # key = sample name, value = sample()  
-  for element in range(0, len(sampleList)):
-    sa = sampleList[element]
-    # Check if new sample 
-    if (sa.Sample is not sampleList[element - 1].Sample):
-      sampleName = sa.Sample.values()[0]
-      sampleDict[sampleName] = [sa]
-    else:
-      sampleDict[sampleName].append(sa)
-      
-  stat = [calculateStatistics(sampleDict[mysample]) for mysample in sampleDict]
-
-  # calculate the relative amount of reads per index
-  laneDict = rawReadSumPerSamples(stat)
-  sumRawReadsDict = createSumRawReadsPerLane(laneDict)
-  relRawReadsDict = createPercentagePerLane(laneDict, sumRawReadsDict)
-
-  # set the values in the object
-  for mye in stat:
-    mye.rawPercentageReadsPerLane = relRawReadsDict[mye.sampleName]
-   
-  def sampleSearch(Code=''):
-    sc = SearchCriteria()
-    numberOfLanes = 0
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, Code));
-    search_service = transaction.getSearchService()
-    foundSample = search_service.searchForSamples(sc)
-    if foundSample.size() > 0:
-      # Search for contained samples
-      sampleSc = SearchCriteria()
-      sampleSc.addSubCriteria(SearchSubCriteria.createSampleContainerCriteria(sc))
-      foundContainedSamples = search_service.searchForSamples(sampleSc)
-      numberOfLanes = foundContainedSamples.size()
-    return foundSample, foundContainedSamples, numberOfLanes
-
-#--------------------------------------------------------------------------------------------------------------------------------------
-
-  def searchDataSetsofSample(sample, index1, index2, DATA_SET_TYPE):
-    sc = SearchCriteria()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sample));
-    search_service = transaction.getSearchService()
-    foundSample = search_service.searchForSamples(sc)
-
-    dataSetSc = SearchCriteria()
-    # set the Search Criteria to an OR condition, default is AND
-    #dataSetSc.setOperator(SearchCriteria.SearchOperator.MATCH_ANY_CLAUSES)
-    dataSetSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, DATA_SET_TYPE))
-    dataSetSc.addMatchClause(SearchCriteria.MatchClause.createPropertyMatch("BARCODE", index1 ))
-    dataSetSc.addMatchClause(SearchCriteria.MatchClause.createPropertyMatch("INDEX2", index2))
-    dataSetSc.addSubCriteria(SearchSubCriteria.createSampleCriteria(sc))
-    foundDataSets = search_service.searchForDataSets(dataSetSc)
-    print "foundDataSets.size() "+ str(foundDataSets.size())
-    for ds in foundDataSets:
-      print "Index1 for found Data Set" + ds.getDataSetCode() + " " + ds.getPropertyValue('BARCODE')
-      print "Index2 for found Data Set" + ds.getDataSetCode() + " " + ds.getPropertyValue('INDEX2')
-      
-    return foundDataSets
-
-#--------------------------------------------------------------------------------------------------------------------------------------
-
-  def getIndexesofDataSetsofSample(sample, DATA_SET_TYPE):
-
-    index1List = []
-    index2List = []
-    sc = SearchCriteria()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sample));
-    search_service = transaction.getSearchService()
-    foundSample = search_service.searchForSamples(sc)
-
-    dataSetSc = SearchCriteria()
-    dataSetSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, DATA_SET_TYPE))
-    dataSetSc.addSubCriteria(SearchSubCriteria.createSampleCriteria(sc))
-    foundDataSets = search_service.searchForDataSets(dataSetSc)
-    for ds in foundDataSets:
-      index1List.append(ds.getPropertyValue('BARCODE'))
-      index2List.append(ds.getPropertyValue('INDEX2'))
-    return index1List, index2List  
-
-
-  flowcell, lanes, numberOfLanes  = sampleSearch(name)
-
-  index1Length = fcPropertiesDict['INDEXREAD']
-  index2Length = fcPropertiesDict['INDEXREAD2']
-
-  for mystat in stat:
-    laneCode = flowcell[0].getCode() + ":" + mystat.lane
-    searchIndex1 = mystat.index1.upper()
-    searchIndex2 = mystat.index2.upper()
-    print '\n'
-    print mystat
-    
-    index1List, index2List = getIndexesofDataSetsofSample(laneCode, FASTQ_DATA_SET_TYPE)
-    print "Searching for "+ searchIndex1 + " in " + str(index1List)
-    print "Searching for "+ searchIndex2 + " in " + str(index2List)
-   
-    if searchIndex1 not in (NO_INDEX): 
-      if searchIndex1 not in (UNDETERMINED):
-        if index1Length > 7:
-          searchIndex1 = [ index1 for index1 in index1List if searchIndex1 in index1]
-        else:
-          searchIndex1 = [ index1 for index1 in index1List if searchIndex1 in index1[:-1]]
-        try:
-          searchIndex1 = searchIndex1[0]
-        except:
-          searchIndex1 = 'MISSING'
-      else:
-        searchIndex1 = NO_INDEX
-    if searchIndex2 not in (NO_INDEX):
-      if searchIndex2 not in (UNDETERMINED):
-        if index2Length > 7:
-          searchIndex2 = [ index2 for index2 in index2List if searchIndex2 in index2]
-        else:
-          searchIndex2 = [ index2 for index2 in index2List if searchIndex2 in index2[:-1]]
-        try:
-          searchIndex2 = searchIndex2[0]
-        except:
-          searchIndex1 = 'MISSING'
-      else:
-        searchIndex2 = NO_INDEX
-    
-    print "searchIndex1 " + str(searchIndex1)
-    print "searchIndex2 " + str(searchIndex2)
-
-    # Search for a data set with those two indices
-    DataSet = searchDataSetsofSample(laneCode, searchIndex1, searchIndex2, FASTQ_DATA_SET_TYPE)
-    try:
-      assert DataSet.size() == 1
-    except AssertionError:
-      print (str(DataSet.size()) + ' data sets found which match the criterias: '+ 
-	      str(laneCode), searchIndex1, searchIndex2)
-      continue
-
-    sa = transaction.getDataSetForUpdate(DataSet[0].getDataSetCode())
-    sa.setPropertyValue('YIELD_MBASES', str(mystat.pfYieldSum))
-    sa.setPropertyValue('RAW_YIELD_MBASES', str(mystat.rawYieldSum))
-    sa.setPropertyValue('PERCENTAGE_PASSED_FILTERING',str(mystat.pfPercentage))
-    sa.setPropertyValue('PF_READS_SUM',str(mystat.pfReadsSum))
-    sa.setPropertyValue('RAW_READS_SUM',str(mystat.rawReadsSum))
-    sa.setPropertyValue('PERCENTAGE_RAW_CLUSTERS_PER_LANE', str(mystat.rawPercentageReadsPerLane))
-    sa.setPropertyValue('PFYIELDQ30PERCENTAGE', str(mystat.pfYieldQ30Percentage))
-    sa.setPropertyValue('PFMEANQUALITYSCORE', str(mystat.pfmeanQualityScore))
-
-    print "Modified data sets properties of: " + DataSet[0].getDataSetCode()
-
-  print "DONE"
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/read-rta-timestamp/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/read-rta-timestamp/plugin.properties
deleted file mode 100644
index ef56111b768..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/read-rta-timestamp/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/read-rta-timestamp
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = read-rta-timestamp.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/read-rta-timestamp/read-rta-timestamp.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/read-rta-timestamp/read-rta-timestamp.py
deleted file mode 100644
index 1e68261b6de..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/read-rta-timestamp/read-rta-timestamp.py
+++ /dev/null
@@ -1,45 +0,0 @@
-import os
-import shutil
-from time import *
-from datetime import *
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-MarkerGAComplete = 'RTAComplete.txt'  
-MarkerHiSeqComplete = 'RTAComplete.txt'
-
-def createOpenbisTimeStamp(file):
-  '''
-  Creates a openBIS compatible time stamp of a file time stamp
-  '''
-  mtime = os.path.getmtime(file)
-  lt = localtime(mtime)
-  tz = localtime().tm_hour - gmtime().tm_hour
-  return (strftime("%Y-%m-%d %H:%M:%S GMT" + "%+.2d" % tz + ":00", lt))
-
-# -----------------------------------------------------------------------------
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getAbsolutePath()
-  # Get the incoming name 
-  name = transaction.getIncoming().getName()
-
-  split=name.split("_")
-  if (len(split) == 4):
-    IS_HISEQ_RUN=True
-    Markerfile = incomingPath + "/" + MarkerHiSeqComplete
-  if (len(split) == 2):
-    Markerfile = incomingPath + "/" + MarkerGAComplete 
-
-
-  # Search for the sample and check if there is already sample with this name
-  search_service = transaction.getSearchService()
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, name));
-  foundSamples = search_service.searchForSamples(sc)
-
-  if foundSamples.size() > 0:
-      sa = transaction.getSampleForUpdate(foundSamples[0].getSampleIdentifier())
-      sa.setPropertyValue("SEQUENCER_FINISHED", createOpenbisTimeStamp(Markerfile))
-
-  shutil.rmtree(incomingPath)
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-basecall-stats/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-basecall-stats/plugin.properties
deleted file mode 100644
index d6e67945db5..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-basecall-stats/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-basecall-stats
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-basecall-stats.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-basecall-stats/register-basecall-stats.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-basecall-stats/register-basecall-stats.py
deleted file mode 100644
index 6efcd1eb5df..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-basecall-stats/register-basecall-stats.py
+++ /dev/null
@@ -1,72 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Registers an incoming directory as a data set in openBIS. The name of the directory is used to
-search for the matching sample. 
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for HiSeq runs: 110715_SN792_0054_BC035RACXX
-expected incoming Name for GAII runs: 110812_6353WAAXX
-expected incoming Name for MiSeq runs: 121218_M00721_0017_000000000-A0T19
-
-@author:
-Manuel Kohler
-'''
-
-import os
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getPath()
-  incomingFolder = transaction.getIncoming().getName()
-  
-  folders=os.listdir(incomingPath)
-
-  # expected incoming Name, e.g.: 110715_SN792_0054_BC035RACXX
-
-  # Create a data set and set type
-  dataSet = transaction.createNewDataSet("BASECALL_STATS")
-  dataSet.setMeasuredData(False)
-
-  dataSet.setPropertyValue("MISMATCH_IN_INDEX", "NONE")
-    
-  # Get the search service
-  search_service = transaction.getSearchService()
-   
-  # Add the incoming file into the data set
-  transaction.moveFile(incomingPath, dataSet)
-    
-  # Search for the sample
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, incomingPath))
-  foundSamples = search_service.searchForSamples(sc)
-  
-
-  if foundSamples.size() > 0:
-    dataSet.setSample(foundSamples[0])
-
-    # Search for another data set of the same sample
-    #dataSetSc = SearchCriteria()
-    #dataSetSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, 'ILLUMINA_HISEQ_OUTPUT'))
-    #dataSetSc.addSubCriteria(SearchSubCriteria.createSampleCriteria(sc))
-    #foundDataSets = search_service.searchForDataSets(dataSetSc)
-    #if foundDataSets.size() > 0:
-    #  dataSet.setParentDatasets([ds.getDataSetCode() for ds in foundDataSets])
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-bigwig/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-bigwig/plugin.properties
deleted file mode 100644
index 26d6bb1da8d..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-bigwig/plugin.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-# 
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-bigwig/
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-bigwig.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-bigwig/register-bigwig.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-bigwig/register-bigwig.py
deleted file mode 100755
index 31a0863709f..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-bigwig/register-bigwig.py
+++ /dev/null
@@ -1,140 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for HiSeq runs: 110715_SN792_0054_BC035RACXX
-expected incoming Name for GAII runs: 110812_6353WAAXX
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import fnmatch
-import re
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-FOLDER='/links/shared/dsu/dss/register-bigwig/'
-BIGWIGINFO='/links/application/dsu/bigWig/bigWigInfo '
-BW_PATTERN='*.bw'
-
-matches = []
-
-# -----------------------------------------------------------------------------
-
-def listSearch (myList, searchString):
-  '''
-  Searches for a given String in a list.
-  Only lines matching  the start of a line a considerd as a match
-  '''
-  matches = []
-  for i in range (0, len(myList)):
-    if(re.match(searchString, myList[i])):
-      matches.append(myList[i])
-  return (matches)
-
-# -----------------------------------------------------------------------------
-
-def translateBoolean (value):
-  if (value.lower() == 'yes') | (value.lower() =='y'):
-    return True
-  else:
-    return False
-
-def sanitizeInt (intNumber):
-   return intNumber.replace(',','')
-
-# -----------------------------------------------------------------------------
-
-def convertListToDict(prop):
-  d={}
-  for i in range(0,len(prop)-1):
-    lineSplit = prop[i].split(':')
-    d[lineSplit[0].strip()] = lineSplit[1].strip()
-  return(d)
-
-# -----------------------------------------------------------------------------
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getPath()
-  name = transaction.getIncoming().getName()
-
-  # Create a data set and set type
-  dataSet = transaction.createNewDataSet("BIGWIGGLE")
-  dataSet.setMeasuredData(False)
-
-  # expected: 
-  # Project_110907_SN792_0059_AC012FACXX_3/BSSE-DSU-1662_CGATGTA_L003_R1_001_sorted.bw
-  split=name.split('_')
-  if (len(split) == 6):
-    incoming_sample=split[1]+ '_'+ split[2] + '_' + split[3] + '_' + split[4]+ ':' + split[-1]
-  if (len(split) ==4):
-    incoming_sample=split[1]+ '_'+ split[2] + ':' + split[-1]
-
-  # Looking for BWs:
-  for root, dirnames, filenames in os.walk(FOLDER + name):
-    for filename in fnmatch.filter(filenames, BW_PATTERN):
-	matches.append(os.path.join(root, filename))
-
-  # Extract values from a samtools view and set the results as DataSet properties 
-  # Command: samtools view -H ETHZ_BSSE_110429_63558AAXX_1_sorted.bam
-
-  arguments = BIGWIGINFO + matches[0]
-  #print('Arguments: '+ arguments)
-  cmdResult=os.popen(arguments).read()
-
-  properties=cmdResult.split("\n")
-  dictProp = convertListToDict(properties)
-  #print(dictProp)
-
-  dataSet.setPropertyValue("VERSION", dictProp['version'])
-  dataSet.setPropertyValue("ISCOMPRESSED", str(translateBoolean(dictProp['isCompressed'])))
-  dataSet.setPropertyValue("ISSWAPPED", dictProp['isSwapped'])
-  dataSet.setPropertyValue("PRIMARYDATASIZE", sanitizeInt(dictProp['primaryDataSize']))
-  dataSet.setPropertyValue("PRIMARYINDEXSIZE", sanitizeInt(dictProp['primaryIndexSize']))
-  dataSet.setPropertyValue("ZOOMLEVELS", dictProp['zoomLevels'])
-  dataSet.setPropertyValue("CHROMCOUNT", dictProp['chromCount'])
-  dataSet.setPropertyValue("BASESCOVERED", sanitizeInt(dictProp['basesCovered']))
-  dataSet.setPropertyValue("MEAN", dictProp['mean'])
-  dataSet.setPropertyValue("MIN", dictProp['min'])
-  dataSet.setPropertyValue("MAX", dictProp['max'])
-  dataSet.setPropertyValue("STD", dictProp['std'])
-
-  # Add the incoming file into the data set
-  transaction.moveFile(incomingPath, dataSet)
-
-  # Get the search service
-  search_service = transaction.getSearchService()
-
-  # Search for the sample
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, incoming_sample));
-  foundSamples = search_service.searchForSamples(sc)
-
-  if foundSamples.size() > 0:
-    dataSet.setSample(foundSamples[0])
-    
-    # Search for parent data set of the same sample
-    dataSetSc = SearchCriteria()
-    dataSetSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, 'FASTQ_GZ'))
-    dataSetSc.addSubCriteria(SearchSubCriteria.createSampleCriteria(sc))
-    foundDataSets = search_service.searchForDataSets(dataSetSc)
-    if foundDataSets.size() > 0:
-      dataSet.setParentDatasets([ds.getDataSetCode() for ds in foundDataSets])
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-bowtie/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-bowtie/plugin.properties
deleted file mode 100644
index f0fac2c142a..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-bowtie/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-bowtie
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-bowtie.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-bowtie/register-bowtie.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-bowtie/register-bowtie.py
deleted file mode 100644
index 11f72f74faf..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-bowtie/register-bowtie.py
+++ /dev/null
@@ -1,130 +0,0 @@
-'''
-This is handling bowtie-BAM files and extracts some properties from the BAM header and
-the samtools flagstat command. The results are formatted and attached  as a property
-to the openBIS DataSet.
-Prerequisites are the DataSetType: ALIGNMENT and
-the following properties assigned to the DataSetType mentioned above:
-ALIGNMENT_SOFTWARE, ISSUED_COMMAND, SAMTOOLS_FLAGSTAT,
-TOTAL_READS, MAPPED_READS
-
-Obviously you need a working samtools binary
-
-Uses 'flagstat' and 'view -H'
-'''
-
-import os
-import fnmatch
-import re
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-FOLDER='/links/shared/dsu/dss/register-bowtie/'
-SAMTOOLS='/links/application/dsu/samtools/samtools'
-BAM_PATTERN='*.bam'
-
-matches = []
-searchStrings = ['@PG']
-programList = []
-
-# -----------------------------------------------------------------------------
-
-def listSearch (myList, searchString):
-  '''
-  Searches for a given String in a list.
-  Only lines matching  the start of a line a considerd as a match
-  '''
-  matches = []
-  for i in range (0, len(myList)):
-    if(re.match(searchString, myList[i])):
-      matches.append(myList[i])
-  return (matches)
-
-# -----------------------------------------------------------------------------
-
-def programParameters (programList):
-  '''
-  Extracts the aligner datils from the bam header
-  '''
-  elements = {}
-  for program in range(0, len(programList)):
-    line = programList[program].split('\t')
- 
-  for element in range (1, len(line)):
-    key, value = line[element].split(":")
-    elements[key] = value
-    
-  return elements  
-
-# -----------------------------------------------------------------------------
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getName()
-
-  dataSet = transaction.createNewDataSet("ALIGNMENT")
-  dataSet.setMeasuredData(False)
-
-  # Get the incoming name 
-  # expected: 
-  # Project_110907_SN792_0059_AC012FACXX_3/Sample_BSSE-DSU-1662/BSSE-DSU-1662_CGATGTA_L003_R1_001_sorted.bam
-  split=incomingPath.split('_')
-  if (len(split) == 6):
-    incoming_sample=split[1]+ '_'+ split[2] + '_' + split[3] + '_' + split[4]+ ':' + split[-1]
-  if (len(split) ==4):
-    incoming_sample=split[1]+ '_'+ split[2] + ':' + split[-1]
-
-  # Looking for BAMS:
-  for root, dirnames, filenames in os.walk(FOLDER + incomingPath):
-    for filename in fnmatch.filter(filenames, BAM_PATTERN):
-        matches.append(os.path.join(root, filename))
-
-  # Extract values from a samtools view and set the results as DataSet properties 
-  # Command: samtools view -H ETHZ_BSSE_110429_63558AAXX_1_sorted.bam
-
-  arguments = SAMTOOLS + ' view -H ' + matches[0]
-  print('Arguments: '+ arguments)
-  cmdResult=os.popen(arguments).read()
-
-  properties=cmdResult.split("\n")
-  for s in range (0, len(searchStrings)):
-    programList = listSearch (properties, searchStrings[s])
-  print(programList)  
-
-  e = programParameters (programList)  
-
-  dataSet.setPropertyValue("ALIGNMENT_SOFTWARE", e['ID'])
-  dataSet.setPropertyValue("VERSION", e['VN'])
-  dataSet.setPropertyValue("ISSUED_COMMAND", e['CL'])
-
-
-  arguments = SAMTOOLS + ' flagstat ' + matches[0]
-
-  cmdResult=os.popen(arguments).read()
-  totalReads=cmdResult.split('\n')[0].split(' ')[0]
-  mappedReads=cmdResult.split('\n')[2].split(' ')[0]
-
-  dataSet.setPropertyValue("SAMTOOLS_FLAGSTAT", cmdResult)
-  dataSet.setPropertyValue("TOTAL_READS", totalReads)
-  dataSet.setPropertyValue("MAPPED_READS", mappedReads)
-   
-  # Add the incoming file into the data set
-  transaction.moveFile(incomingPath, dataSet)
-
-  # Get the search service
-  search_service = transaction.getSearchService()
-
-  # Search for the sample
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, incoming_sample));
-  foundSamples = search_service.searchForSamples(sc)
-
-  if foundSamples.size() > 0:
-    dataSet.setSample(foundSamples[0])
-    
-    # Search for parent data set of the same sample
-    dataSetSc = SearchCriteria()
-    dataSetSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, 'FASTQ_GZ'))
-    dataSetSc.addSubCriteria(SearchSubCriteria.createSampleCriteria(sc))
-    foundDataSets = search_service.searchForDataSets(dataSetSc)
-    if foundDataSets.size() > 0:
-      dataSet.setParentDatasets([ds.getDataSetCode() for ds in foundDataSets])
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-fastqc/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-fastqc/plugin.properties
deleted file mode 100644
index 353a2b7aa8a..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-fastqc/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-fastqc
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-fastqc.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-fastqc/register-fastqc.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-fastqc/register-fastqc.py
deleted file mode 100644
index 26c09f2d4af..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-fastqc/register-fastqc.py
+++ /dev/null
@@ -1,73 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@note
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-Expects as incoming folder: Project_120427_SN792_0110_AD0YCGACXX_1
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import shutil
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-def renameFiles(dir, flowcellName):
-  print dir 
-  print flowcellName
-  for root, dirs, files in os.walk(dir):
-    for file in files:
-      print root + file
-      os.rename(root + '/' + file, root + "/" + flowcellName + "_" + file)
-
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getPath()
-  incomingFolder = transaction.getIncoming().getName()
-
-  fcAndLane = incomingFolder.split("_",1)[-1]
-  flowCell, flowLane = fcAndLane.rsplit("_",1)
-  print flowLane
-
-  # Get the search service
-  search_service = transaction.getSearchService()
-
-  # Search for the sample
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCell))
-  foundSamples = search_service.searchForSamples(sc)
-
-  if foundSamples.size() > 0:
-
-    # Search for another data set of the same sample and make it a child of it 
-    sampleSc = SearchCriteria()
-    sampleSc.addSubCriteria(SearchSubCriteria.createSampleContainerCriteria(sc))
-    foundContainedSamples = search_service.searchForSamples(sampleSc)
-    if foundContainedSamples.size() > 0:
-      dataSet = transaction.createNewDataSet("FASTQC")
-      dataSet.setMeasuredData(False)
-      for indx in range(0, len(foundContainedSamples)):
-	lane = foundContainedSamples[indx].getCode().split(':')[-1]
-	print lane
-	if (flowLane == lane):
-	  dataSet.setSample(foundContainedSamples[indx])
-	  # Add the incoming file into the data set
-	  transaction.moveFile(incomingPath + "/fastqc/", dataSet)
-	  break
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-dropbox/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-dropbox/plugin.properties
deleted file mode 100644
index 9c4e3bbc2c1..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-dropbox/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/incoming-register-flowcell
-incoming-data-completeness-condition = auto-detection
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-flowcell-dropbox.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-dropbox/register-flowcell-dropbox.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-dropbox/register-flowcell-dropbox.py
deleted file mode 100644
index 48c1f20c76e..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-dropbox/register-flowcell-dropbox.py
+++ /dev/null
@@ -1,66 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Registers an incoming directory as a data set in openBIS. The name of the directory is used to
-search for the matching sample. 
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for HiSeq runs: 110715_SN792_0054_BC035RACXX
-expected incoming Name for GAII runs: 110812_6353WAAXX
-
-@author:
-Manuel Kohler
-'''
-
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-IS_HISEQ_RUN = False
-
-DATASET_TYPE_HISEQ = "ILLUMINA_HISEQ_OUTPUT"
-DATASET_TYPE_GA = "ILLUMINA_GA_OUTPUT"
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getAbsolutePath()
-
-  # Get the incoming name 
-  name = transaction.getIncoming().getName()
-
-  split = name.split("_")
-  if (len(split) == 4):
-    dataSet = transaction.createNewDataSet(DATASET_TYPE_HISEQ)
-    IS_HISEQ_RUN = True
-  if (len(split) == 2):
-    dataSet = transaction.createNewDataSet(DATASET_TYPE_GA)
-
-  # Create a data set and set type
-  dataSet.setMeasuredData(False)
-  
-  # Get the search service
-  search_service = transaction.getSearchService()
- 
-  # Search for the sample
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, name));
-  foundSamples = search_service.searchForSamples(sc)
-
-  if foundSamples.size() > 0:
-    # Add the incoming file into the data set
-    transaction.moveFile(incomingPath, dataSet)
-    dataSet.setSample(foundSamples[0])
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-hiseq/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-hiseq/plugin.properties
deleted file mode 100644
index 8730e628162..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-hiseq/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-flowcell-hiseq
-#incoming-dir = /links/sonas/cisd/store/incoming-flowCell
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-flowcell-hiseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-hiseq/register-flowcell-hiseq.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-hiseq/register-flowcell-hiseq.py
deleted file mode 100644
index 3048b4473d3..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-hiseq/register-flowcell-hiseq.py
+++ /dev/null
@@ -1,97 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Registers an incoming directory as a data set in openBIS. The name of the directory is used to
-search for the matching sample. 
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for HiSeq runs: 110715_SN792_0054_BC035RACXX
-expected incoming Name for GAII runs: 110812_6353WAAXX
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import shutil
-import glob
-import xml.etree.ElementTree as etree
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-IS_HISEQ_RUN=False
-
-RUNINFO_FOLDER='/links/shared/dsu/dss/register-runstatistics/'
-REGEX_RUNINFO_SAMPLE = '/Data/Status*'
-REGEX_RUNINFO_REPORTS = '/Data/reports'
-MARKER_STRING='.MARKER_is_finished_'
-
-def touch_markerfile(filename):
-  try:
-    # do a touch
-    open(filename, 'w').close()
-  except:
-    print('Could not touch ' + filename)
-
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getPath()
-  name = transaction.getIncoming().getName()
-
-  folders=[]
-  folders=os.listdir(incomingPath)
-
-  split=name.split("_")
-  if (len(split) == 4):
-    dataSet = transaction.createNewDataSet("ILLUMINA_HISEQ_OUTPUT")
-    IS_HISEQ_RUN=True
-  if (len(split) == 2):
-    dataSet = transaction.createNewDataSet("ILLUMINA_GA_OUTPUT")
-
-  #move RunInfo into a different drop box
-  runInfoSample=glob.glob(incomingPath + REGEX_RUNINFO_SAMPLE)
-  runInfoReport=glob.glob(incomingPath + REGEX_RUNINFO_REPORTS)
-  runInfoList = runInfoSample + runInfoReport
-  os.makedirs(RUNINFO_FOLDER + name + '/Data/')
-  for runInfo in runInfoList:
-    try:
-      if os.path.isdir(runInfo):
-	shutil.copytree(runInfo, RUNINFO_FOLDER + name + '/Data/' + os.path.basename(runInfo))
-      else:
-	shutil.copy2(runInfo, RUNINFO_FOLDER + name + '/Data/')
-    except (IOError, os.error), why:
-      print (runInfo, RUNINFO_FOLDER + name, str(why))
-
-  touch_markerfile(RUNINFO_FOLDER+MARKER_STRING+name)
-
-  # Create a data set and set type
-  dataSet.setMeasuredData(False)
-    
-  # Get the search service
-  search_service = transaction.getSearchService()
-   
-  # Search for the sample
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, name));
-  foundSamples = search_service.searchForSamples(sc)
-
-  if foundSamples.size() > 0:
-    # Add the incoming file into the data set
-    transaction.moveFile(incomingPath, dataSet)
-    dataSet.setSample(foundSamples[0])
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-miseq/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-miseq/plugin.properties
deleted file mode 100644
index 7f274a70db5..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-miseq/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-flowcell-miseq
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-flowcell-miseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-miseq/register-flowcell-miseq.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-miseq/register-flowcell-miseq.py
deleted file mode 100644
index c9321e6c87e..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-flowcell-miseq/register-flowcell-miseq.py
+++ /dev/null
@@ -1,60 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Registers an incoming directory as a data set in openBIS. The name of the directory is used to
-search for the matching sample. 
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for MiSeq runs: 120726_M00721_0011_A000000000-A1FVF
-
-@author:
-Manuel Kohler
-'''
-
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-DATASET_TYPE_MISEQ = "ILLUMINA_MISEQ_OUTPUT"
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getAbsolutePath()
-  flowCellId = transaction.getIncoming().getName()
-  dataSet = transaction.createNewDataSet(DATASET_TYPE_MISEQ)
-
-  # Create a data set and set type
-  dataSet.setMeasuredData(False)
-  
-  # Get the search service
-  search_service = transaction.getSearchService()
- 
-  # Search for the sample
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCellId));
-  foundFlowCells = search_service.searchForSamples(sc)
-
-  # Make sure there is only one Flow cell registered with this Flow Cell Name / ID
-  try:
-    assert foundFlowCells.size() == 1
-  except AssertionError:
-    print (str(foundFlowCells.size()) + ' flow cells found which match the criterias: '+ flowCellId)
-
-  print (foundFlowCells)
-  # Add the incoming file into the data set
-  transaction.moveFile(incomingPath, dataSet)
-  dataSet.setSample(foundFlowCells[0])
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-lane-hiseq/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-lane-hiseq/plugin.properties
deleted file mode 100644
index f7523f7cdec..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-lane-hiseq/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-lane-hiseq
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-lane-hiseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-lane-hiseq/register-lane-hiseq.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-lane-hiseq/register-lane-hiseq.py
deleted file mode 100755
index 8279053de36..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-lane-hiseq/register-lane-hiseq.py
+++ /dev/null
@@ -1,279 +0,0 @@
-'''
-Processes each flow lane of a Sequencing run
-
-Expects as incoming folder:
-Project_<Flow Cell>_<Lane>
-e.g.Project_110715_SN792_0054_BC035RACXX_1 or Project_110816_6354LAAXX_1
-
-Note: 
-print statements go to: ~openbis/sprint/datastore_server/log/startup_log.txt
-'''
-
-import os
-import fnmatch
-import time
-import shutil
-from time import *
-from datetime import *
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-FASTQ_GZ_PATTERN = "*.fastq.gz"
-METADATA_FILE_SUFFIX = "_metadata.tsv"
-AFFILIATION= {'FMI': '/links/shared/dsu/dss/customers/fmi/drop-box/','BIOCENTER_BASEL': '/links/shared/dsu/dss/customers/biozentrum/drop-box/'}
-AFFILIATION_PROPERTY_NAME='AFFILIATION'
-INDEX1='BARCODE'
-INDEX2='INDEX2'
-EXTERNAL_SAMPLE_NAME='EXTERNAL_SAMPLE_NAME'
-
-DEFAULT_INDEX='NoIndex'
-
-# -------------------------------------------------------------------------------
-
-def getFileNames(path):
-  '''
-  Gets all files matching a PATTERN in a path recursively
-  and returns the result as a list
-  '''
-  matches = []
-  for root, dirnames, filenames in os.walk(path):
-    for filename in fnmatch.filter(filenames, FASTQ_GZ_PATTERN):
-        matches.append(os.path.join(root, filename))
-  matches.sort()
-  return(matches)
-
-def writeMetadataFile (fileName, parentPropertyTypes, parentPropertiesMap, fcMetaDataDict, fcMetaDataList):
-  '''
-  Writes a file of meta date related to one sample
-  '''
-  try:
-    metaDataFile = open(fileName,'w')
-    for propertyType in parentPropertyTypes:
-      metaDataFile.write(propertyType.encode('utf-8') + "\t" +
-                         parentPropertiesMap[propertyType].tryGetAsString().encode('utf-8') + "\n")
-    
-    metaDataFile.write("\nFLOWCELL PROPERTIES\n".encode('utf-8'))
-
-    for fcMetaData in fcMetaDataList:
-      metaDataFile.write(fcMetaData.encode('utf-8') + "\t" +
-                         fcMetaDataDict[fcMetaData].tryGetAsString().encode('utf-8') + "\n")
-      pass
-  except IOError:
-    print ('File error, could not write '+ fileName)
-  finally:
-    metaDataFile.close()
-
-def create_openbis_timestamp ():
-  '''
-  Create an openBIS conform timestamp
-  '''
-  tz=localtime()[3]-gmtime()[3]
-  d=datetime.now()
-  return d.strftime("%Y-%m-%d %H:%M:%S GMT"+"%+.2d" % tz+":00")
-
-def extraCopy (affiliation_name, path):
-  '''
-  Handles the extra copies of the data for transfer with datamover via the
-  bc2 network to the FMI and BIOCENTER
-  For the BIOCENTER there is a folder created in which all data gets into
-  '''
-  if (affiliation_name in AFFILIATION):
-    if (affiliation_name == 'BIOCENTER_BASEL'):
-      dirname = AFFILIATION[affiliation_name] + datetime.now().strftime("%Y-%m-%d")
-      if not os.path.exists(dirname):
-        os.mkdir(dirname)
-      shutil.copy(path, dirname)
-    else:
-      shutil.copy(path, AFFILIATION[affiliation_name])
-# -------------------------------------------------------------------------------
-
-def getFlowCellMetaData (transaction, flowCellId):
-  
-  def sortedDictValues(adict):
-    keys = adict.keys()
-    keys.sort()
-    return map(adict.get, keys)
-  
-  search = transaction.getSearchService()
-  sc = SearchCriteria()
-  print('Searching FlowCell: '+ str(flowCellId))
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCellId));
-  foundFlowCells = search.searchForSamples(sc)
-
-  try:
-    assert foundFlowCells.size() == 1
-  except AssertionError:
-    print (str(foundFlowCells.size()) + ' flow cells found which match the criterias: '+ flowCellId)
-  
-  fcPropertiesDict = {}
-  fcPropertyTypes = []
-
-  fcProperties = foundFlowCells[0].getSample().getProperties()
-  for property in fcProperties:
-      code = property.getPropertyType().getSimpleCode()
-      fcPropertyTypes.append(code)
-      fcPropertiesDict[code] = property
-  
-  fcPropertyTypes.sort()
-  return fcPropertiesDict, fcPropertyTypes
-
-# -------------------------------------------------------------------------------
-
-def searchParents (search_service, parents):
-
-  # search for the parents
-  sc = SearchCriteria()
-  # set the Search Criteria to an OR condition, default is AND
-  sc.setOperator(SearchCriteria.SearchOperator.MATCH_ANY_CLAUSES)
-  # Get the codes for all parents
-  for parent in parents:
-    parentSubCode = parent.getSubCode()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, parentSubCode));
-  # all parents of the flow lane
-  foundParents = search_service.searchForSamples(sc)
-
-  return foundParents
-
-# -------------------------------------------------------------------------------
-
-
-def process(transaction):
-
-  # useful for debugging:
-  print(datetime.now())
-
-  incomingPath = transaction.getIncoming().getAbsolutePath()
-  name = transaction.getIncoming().getName()
-
-  folders=[]
-  folders=os.listdir(incomingPath)
-
-  # expected incoming Name, e.g.: Project_110715_SN792_0054_BC035RACXX_1
-  split=name.split("_")
-  if (len(split) == 6):
-    runningDate = split[1]
-    sequencerId = split[2]
-    sequentialNumber = split[3]
-    hiseqTray = split[4][0]
-    flowCellId = split[4][1:]
-    flowLane = split[-1]
-    incoming_sample=runningDate+ '_'+ sequencerId + '_' + sequentialNumber + '_' + hiseqTray + flowCellId + ':' + flowLane
-  # expected Project_120112_63537AAXX_1
-  if (len(split) ==4):
-    runningDate = split[1]
-    flowCellId = split[2]
-    flowLane = split[-1]
-    incoming_sample=runningDate+ '_'+ flowCellId + ':' + flowLane
-
-  # Get the search service
-  search_service = transaction.getSearchService()
-
-  # Search for the incoming_sample which is a Flow Lane
-  sc = SearchCriteria()
-  print('Processing sample: '+ str(incoming_sample))
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, incoming_sample));
-  foundSamples = search_service.searchForSamples(sc)
-
-  # there should be only one sample because it is unique within one Flow Cell 
-  if (len(foundSamples) > 1):
-    raise Exception("More than one sample found! No unique code: " + incoming_sample)
-  elif (len(foundSamples) == 0):
-    raise Exception("No matching sample found for: " + incoming_sample)
-  else :
-    sample = foundSamples[0].getSample()
-    parents = sample.getParents()
-
-  foundParents = searchParents(search_service, parents)
-
-  # -------------------------------------------------------------------------------
-
-  # loop over each Sample folder within a lane
-  for f in range(0,len(folders)):
-    # Create a data set and set type
-    dataSet = transaction.createNewDataSet("FASTQ_GZ")
-    dataSet.setMeasuredData(False)
-    dataSet.setPropertyValue(INDEX1, DEFAULT_INDEX)
-    dataSet.setPropertyValue(INDEX2, DEFAULT_INDEX)
-    dirName = transaction.createNewDirectory(dataSet,folders[f])
-
-    # if multiplexed samples then there is more than one folder
-    pathPerLane = incomingPath + '/' + folders[f]
-    print ("pathPerLane: " + pathPerLane)
-    
-    # get all properties of the parent samples
-    for foundParent in foundParents:
-      parent = foundParent.getSample()
-      # ArrayList 
-      parentProperties = parent.getProperties()
-      # just get the current code
-      parentCode = parent.getCode()
-      #print("Found parent code: "+ parentCode)
-
-      # reformat Java ArrayList and Sort
-      parentPropertyTypes = []
-      parentPropertiesMap = {}
-      for property in parentProperties:
-	code = property.getPropertyType().getSimpleCode()
-	parentPropertyTypes.append(code)
-	parentPropertiesMap[code] = property
-	try:
-	  barcode = parentPropertiesMap[INDEX1].tryGetAsString()
-	  if barcode == "NOINDEX":
-	    barcode = DEFAULT_INDEX
-	  else:
-	    barcode.split()[-1][:-1]
-	except:
-	  barcode = DEFAULT_INDEX
-	
-	try:
-	  index2 = parentPropertiesMap[INDEX2].tryGetAsString()
-	  if index2 == "NOINDEX":
-	    index2 = DEFAULT_INDEX
-	  else:
-	    index2.split()[-1][:-1]
-	except:
-	  index2 = DEFAULT_INDEX
-
-	# just use the first six nucleotides for the naming 
-	completeBarcode=barcode + "-" + index2
-
-      parentPropertyTypes.sort()
-      # BSSE-1754_C0364ACXX_CTTGTAA-AACC_L007_R1_001.fastq.gz
-      # BSSE_QGF_10002_121130_SN792_0189_AD1FBTACXX_1_NoIndex_L001_R1_001.fastq.gz
-      nameOfFile = parentCode.replace('-','_') + "_" + incoming_sample.replace(':', '_') + "_" + completeBarcode + "_L00" + flowLane +METADATA_FILE_SUFFIX
-
-      print folders[f]
-      folderSplit = '-'.join(folders[f].split('_')[1:4])
-      print "Folder split: " + folderSplit
-      print str(parentCode)
-   
-      if (parentCode == folderSplit):
-	dataSet.setPropertyValue(INDEX1, barcode)
-	dataSet.setPropertyValue(INDEX2, index2)
-        print parentPropertiesMap[EXTERNAL_SAMPLE_NAME].tryGetAsString()
-        dataSet.setPropertyValue(EXTERNAL_SAMPLE_NAME, parentPropertiesMap[EXTERNAL_SAMPLE_NAME].tryGetAsString())
-	print("Creating metadata file:" + nameOfFile)
-	# get a file from the IDataSetRegistrationTransaction so it is automatically part of the data set
-	pathToFile = transaction.createNewFile(dataSet, folders[f], nameOfFile)
-	
-	fcMetaDataDict, fcMetaDataList = getFlowCellMetaData(transaction, incoming_sample.split(":")[0])
-	writeMetadataFile(pathToFile, parentPropertyTypes, parentPropertiesMap, fcMetaDataDict, fcMetaDataList)
-   
-	affiliation_name = parentPropertiesMap[AFFILIATION_PROPERTY_NAME].tryGetAsString()
-	extraCopy (affiliation_name, pathToFile) 
-   
-    # get all fastqs in this dataSet
-    fastqFileList=getFileNames(pathPerLane)
-    
-    # put the files into the dataSet 
-    affiliation_name = parentPropertiesMap[AFFILIATION_PROPERTY_NAME].tryGetAsString()
-    for file in fastqFileList:
-      extraCopy (affiliation_name, file)
-      # finally add the files to the data set     
-      transaction.moveFile(file , dataSet, folders[f])
-   
-    if foundSamples.size() > 0:
-      sa = transaction.getSampleForUpdate(foundSamples[0].getSampleIdentifier())
-      sa.setPropertyValue("DATA_TRANSFERRED", create_openbis_timestamp())
-      dataSet.setSample(foundSamples[0])
-
-  shutil.rmtree(incomingPath)
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-lane-miseq/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-lane-miseq/plugin.properties
deleted file mode 100644
index 51c2eec3813..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-lane-miseq/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-lane-miseq
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-lane-miseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-lane-miseq/register-lane-miseq.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-lane-miseq/register-lane-miseq.py
deleted file mode 100755
index 5174af1295c..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-lane-miseq/register-lane-miseq.py
+++ /dev/null
@@ -1,203 +0,0 @@
-'''
-Processes each flow lane of a Sequencing run
-
-Note: 
-print statements go to: ~openbis/sprint/datastore_server/log/startup_log.txt
-'''
-
-import os
-import fnmatch
-import time
-import shutil
-from time import *
-from datetime import *
-from itertools import islice, chain
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-FASTQ_GZ_PATTERN = "*.fastq.gz"
-METADATA_FILE_SUFFIX = "_metadata.tsv"
-
-# -------------------------------------------------------------------------------
-
-def getFileNames(path):
-  '''
-  Gets all files matching a PATTERN in a path recursively
-  and returns the result as a list
-  '''
-  matches = []
-  for root, dirnames, filenames in os.walk(path):
-    for filename in fnmatch.filter(filenames, FASTQ_GZ_PATTERN):
-        matches.append(os.path.join(root, filename))
-  matches.sort()
-  return(matches)
-
-def writeMetadataFile (fileName, parentPropertyTypes, parentPropertiesMap, fcMetaDataDict, fcMetaDataList):
-  '''
-  Writes a file of meta date related to one sample
-  '''
-  try:
-    metaDataFile = open(fileName,'w')
-    for propertyType in parentPropertyTypes:
-      metaDataFile.write(propertyType.encode('utf-8') + "\t" +
-                         parentPropertiesMap[propertyType].tryGetAsString().encode('utf-8') + "\n")
-    
-    metaDataFile.write("\nFLOWCELL PROPERTIES\n".encode('utf-8'))
-
-    for fcMetaData in fcMetaDataList:
-      metaDataFile.write(fcMetaData.encode('utf-8') + "\t" +
-                         fcMetaDataDict[fcMetaData].tryGetAsString().encode('utf-8') + "\n")
-      pass
-  except IOError:
-    print ('File error, could not write '+ fileName)
-  finally:
-    metaDataFile.close()
-
-def create_openbis_timestamp ():
-  '''
-  Create an openBIS conform timestamp
-  '''
-  tz=localtime()[3]-gmtime()[3]
-  d=datetime.now()
-  return d.strftime("%Y-%m-%d %H:%M:%S GMT"+"%+.2d" % tz+":00")
-
-def extraCopy (affiliationName, path):
-  '''
-  Handles the extra copies of the data for transfer with datamover via the
-  bc2 network to the FMI and BIOCENTER
-  For the BIOCENTER there is a folder created in which all data gets into
-  '''
-  if (affiliation_name in AFFILIATION):
-    if (affiliation_name == 'BIOCENTER_BASEL'):
-      dirname = AFFILIATION[affiliation_name] + datetime.now().strftime("%Y-%m-%d")
-      if not os.path.exists(dirname):
-        os.mkdir(dirname)
-      shutil.copy(path, dirname)
-    else:
-      shutil.copy(path, AFFILIATION[affiliation_name])
-# -------------------------------------------------------------------------------
-
-def getFlowCellMetaData (flowCellId):
-  
-  def sortedDictValues(adict):
-    keys = adict.keys()
-    keys.sort()
-    return map(adict.get, keys)
-  
-  search = transaction.getSearchService()
-  sc = SearchCriteria()
-  print('Searching FlowCell: '+ str(flowCellId))
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCellId));
-  foundFlowCells = search.searchForSamples(sc)
-
-  try:
-    assert foundFlowCells.size() == 1
-  except AssertionError:
-    print (str(foundFlowCells.size()) + ' flow cells found which match the criterias: '+ flowCellId)
-  
-  fcPropertiesDict = {}
-  fcPropertyTypes = []
-
-  fcProperties = foundFlowCells[0].getSample().getProperties()
-  for property in fcProperties:
-      code = property.getPropertyType().getSimpleCode()
-      fcPropertyTypes.append(code)
-      fcPropertiesDict[code] = property
-  
-  fcPropertyTypes.sort()
-  return fcPropertiesDict, fcPropertyTypes
-
-
-# -------------------------------------------------------------------------------
-
-def searchForLane(lane, search_service):
-
-  sc = SearchCriteria()
-  print('Processing sample: '+ str(lane))
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, lane));
-  foundSamples = search_service.searchForSamples(sc)
-
-  # there should be only one sample because it is unique within one Flow Cell 
-  if (len(foundSamples) > 1):
-    raise Exception("More than one sample found! No unique code: " + lane)
-  elif (len(foundSamples) == 0):
-    raise Exception("No matching sample found for: " + lane)
-  else :
-    foundLane = foundSamples[0]
-
-  return foundLane
-
-
-# -------------------------------------------------------------------------------
-
-def searchForParents (parents, search_service):
-  # search for the parents
-  sc = SearchCriteria()
-  # set the Search Criteria to an OR condition, default is AND
-  sc.setOperator(SearchCriteria.SearchOperator.MATCH_ANY_CLAUSES)
-  # Get the codes for all parents
-  for parent in parents:
-    parentSubCode = parent.getSubCode()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, parentSubCode));
-  # all parents of the flow lane
-  foundParents = search_service.searchForSamples(sc)
-  return foundParents
-
-
-# -------------------------------------------------------------------------------
-'''
-def batch(iterable, size):
-    sourceiter = iter(iterable)
-    while True:
-        batchiter = islice(sourceiter, size)
-        yield chain([batchiter.next()], batchiter)
-'''
-# -------------------------------------------------------------------------------
-
-def process(transaction):
-
-  # useful for debugging:
-  print(datetime.now())
-
-  incomingPath = transaction.getIncoming().getAbsolutePath()
-
-  # Get the incoming name 
-  name = transaction.getIncoming().getName()
-  miSeqLane = name + ':1' 
-
-  # Get the search service
-  search_service = transaction.getSearchService()
-  
-  lane = searchForLane(miSeqLane, search_service)
-
-  # get all fastqs in this dataSet
-  fastqFileList=getFileNames(incomingPath)
-  fastqFileList.sort()
-
-  while fastqFileList:
-
-    # Create a data set and set type
-    dataSet = transaction.createNewDataSet("FASTQ_GZ")
-    dataSet.setMeasuredData(False)
-    if len(fastqFileList) == 1:
-      transaction.moveFile(fastqFileList.pop(0) , dataSet)
-    else:
-      try:  
-	 currentFullPath , currentFilename = os.path.split(fastqFileList[0])
-	 nextFullPath , nextFilename = os.path.split(fastqFileList[1])
-	 
-         newpath =  currentFullPath + "/fastq"
-         if not os.path.exists(newpath):
-           os.makedirs(newpath)
-
-	 if currentFilename.rsplit('_',2)[0] == nextFilename.rsplit('_',2)[0]:
-           shutil.move(fastqFileList.pop(0), newpath)
-           shutil.move(fastqFileList.pop(0), newpath)
-	   transaction.moveFile(newpath , dataSet)  
-	 else:
-	   transaction.moveFile(fastqFileList.pop(0) , dataSet)
-      except:
-	pass 
-    dataSet.setSample(lane)
-
-  sa = transaction.getSampleForUpdate(lane.getSampleIdentifier())
-  sa.setPropertyValue("DATA_TRANSFERRED", create_openbis_timestamp())
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-macs/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-macs/plugin.properties
deleted file mode 100644
index 9d5511bd58c..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-macs/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-macs
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-macs.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-macs/register-macs.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-macs/register-macs.py
deleted file mode 100755
index 17a9d5b074c..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-macs/register-macs.py
+++ /dev/null
@@ -1,22 +0,0 @@
-
-def process(transaction):
-  # Create a data set and set type
-  dataSet = transaction.createNewDataSet("MACS_OUTPUT")
-  dataSet.setPropertyValue("MACS_VERSION", "1.4.0RC2")
-  dataSet.setMeasuredData(False)
-
-  incomingPath = incoming.getAbsolutePath()
-   
-  # Add the incoming file into the data set
-  transaction.moveFile(incomingPath, dataSet)
-
-  # rsplit not in Python 2.2
-  #sampleName = ":".join(incomingPath.split("/")[-1].rsplit("_",1))
-  flowCell =  "_".join((incomingPath.split("/")[-1].split("_")[2:-1]))
-  lane = (incomingPath.split("/")[-1]).split("_")[-1]
-  sampleName = flowCell + ":" + lane
-   
-  # Set the owner of the data set -- the specified sample
-  sample = transaction.getSample("/BSSE_BEISEL/" + sampleName)
-
-  dataSet.setSample(sample)
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-runstatistics/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-runstatistics/plugin.properties
deleted file mode 100644
index 8572688f224..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-runstatistics/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-runstatistics
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-runstatistics.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-runstatistics/register-runstatistics.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-runstatistics/register-runstatistics.py
deleted file mode 100644
index d7b8b8400d3..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-runstatistics/register-runstatistics.py
+++ /dev/null
@@ -1,73 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Registers an incoming directory as a data set in openBIS. The name of the directory is used to
-search for the matching sample. 
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for HiSeq runs: 110715_SN792_0054_BC035RACXX
-expected incoming Name for GAII runs: 110812_6353WAAXX
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import shutil
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getPath()
-  incomingFolder = transaction.getIncoming().getName()
-
-  folders=[]
-  folders=os.listdir(incomingPath)
-
-  split=incomingFolder.split("_")
-  if (len(split) == 4):
-    IS_HISEQ_RUN=True
-  if (len(split) == 2):
-    IS_HISEQ_RUN=False
-
-  # Get the search service
-  search_service = transaction.getSearchService()
-   
-  # Search for the sample
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, incomingFolder));
-  foundSamples = search_service.searchForSamples(sc)
-
-  if foundSamples.size() > 0:
-   
-    # Search for another data set of the same sample and make it a child of it 
-    sampleSc = SearchCriteria()
-    sampleSc.addSubCriteria(SearchSubCriteria.createSampleContainerCriteria(sc))
-    foundContainedSamples = search_service.searchForSamples(sampleSc)
-    if foundContainedSamples.size() > 0:
-      for fcs in range(0,foundContainedSamples.size()):
-	dataSet = transaction.createNewDataSet("RUNINFO")
-	dataSet.setMeasuredData(False)
-	dataSet.setSample(foundContainedSamples[fcs])
-	# Add the incoming file into the data set
-	shutil.copytree(incomingPath, incomingPath + "_" + str(fcs+1))
-	transaction.moveFile(incomingPath + "_" + str(fcs+1), dataSet)
-    
-  shutil.rmtree(incomingPath)
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-thumbnails/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-thumbnails/plugin.properties
deleted file mode 100644
index 5b89e279f2f..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-thumbnails/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-thumbnails
-#incoming-dir = /links/sonas/cisd/store/incoming-flowCell
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-thumbnails.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-thumbnails/register-thumbnails.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-thumbnails/register-thumbnails.py
deleted file mode 100644
index 60937ed4520..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-thumbnails/register-thumbnails.py
+++ /dev/null
@@ -1,55 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Registers an incoming directory as a data set in openBIS. The name of the directory is used to
-search for the matching sample. 
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for HiSeq runs: 110715_SN792_0054_BC035RACXX
-expected incoming Name for GAII runs: 110812_6353WAAXX
-
-@author:
-Manuel Kohler
-'''
-
-import xml.etree.ElementTree as etree
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getPath()
-  name = transaction.getIncoming().getName()
-
-  dataSet = transaction.createNewDataSet("THUMBNAILS")
-
-  # Create a data set and set type
-  dataSet.setMeasuredData(False)
-    
-  # Get the search service
-  search_service = transaction.getSearchService()
-   
-  # Search for the sample
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, name));
-  foundSamples = search_service.searchForSamples(sc)
-
-  if foundSamples.size() > 0:
-    # Add the incoming file into the data set
-    transaction.moveFile(incomingPath, dataSet)
-    dataSet.setSample(foundSamples[0])
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-unaligned/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-unaligned/plugin.properties
deleted file mode 100644
index 9c8c317b60d..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-unaligned/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-unaligned
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-unaligned.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-unaligned/register-unaligned.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-unaligned/register-unaligned.py
deleted file mode 100755
index 8b820561056..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/drop-boxes/register-unaligned/register-unaligned.py
+++ /dev/null
@@ -1,179 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Expects as incoming folder: <FlowCell>/Unaligned_no_mismatch
-
-@note: 
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import glob
-import shutil
-import time
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-BASECALL_STATS_FOLDER = 'Basecall_Stats_'
-REGEX_FILES = '*.*'
-REGEX_MAKEFILE = 'Make*'
-REGEX_LANES='/P*'
-REGEX_UNDETERMINED = '/U*/Sample*'
-UNALIGNED_FOLDER='Unaligned_no_mismatch'
-LANE_FOLDER='/links/shared/dsu/dss/register-lane-hiseq/'
-MARKER_STRING='.MARKER_is_finished_'
-
-def touch_markerfile(filename):
-  try:  
-    # do a touch
-    open(filename, 'w').close()
-  except:
-    print('Could not touch ' + filename)  
-
-def searchForLaneParents(transaction, sampleCode):
-
-  search_service = transaction.getSearchService()
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleCode))
-  foundSamples = search_service.searchForSamples(sc)
-  # there should be only one sample because it is unique within one Flow Cell 
-  if (len(foundSamples) > 1):
-    raise Exception("More than one sample found! No unique code: " + sampleCode)
-  elif (len(foundSamples) == 0):
-    raise Exception("No matching sample found for: " + sampleCode)
-  else :
-    sample = foundSamples[0].getSample()
-    parents = sample.getParents()
-
-  # search for the parents
-  sc = SearchCriteria()
-  # set the Search Criteria to an OR condition, default is AND
-  sc.setOperator(SearchCriteria.SearchOperator.MATCH_ANY_CLAUSES)
-  # Get the codes for all parents
-  for parent in parents:
-    parentSubCode = parent.getSubCode()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, parentSubCode));
-  # all parents of the flow lane
-  foundParents = search_service.searchForSamples(sc)
-  
-  parentCodeList = []
-
-  for foundParent in foundParents:
-    parent = foundParent.getSample()
-    # ArrayList 
-    parentProperties = parent.getProperties()
-    # just get the current code
-    parentCode = parent.getCode()
-    parentCodeList.append(parentCode)
-    #print("Found parent code: "+ parentCode)
-
-  return parentCodeList
-
-
-def renameFiles(transaction, dir, flowcellName):
-  # Limit of Samples when the Sample Code is still used in the renaming. If Number of Samples is
-  # bigger than this number, we just write the number in the file name.
-
-  MAX_SAMPLES = 20
-  FACILITY_CODE = "BSSE_QGF_"
-
-  for root, dirs, files in os.walk(dir):
-    for file in files:
-      lane = file.split("_")[0][-1]      
-      if lane.isdigit():
-        sampleCode = flowcellName + ":" + lane 
-        print sampleCode
-        parentCodeList = searchForLaneParents(transaction, sampleCode)
-        print parentCodeList
-        length = len(parentCodeList)
-        if length > MAX_SAMPLES:
-          # BSSE_QGF_96_samples_C1A8YACXX_Undetermined_L008_R1_001.fastq.gz
-          os.rename(root + '/' + file, root + "/" + FACILITY_CODE + str(length) + "_samples_" + flowcellName + "_" + file)
-        else:
-          # BSSE_QGF_10001_10002_10003_10004_C1A8YACXX_Undetermined_L008_R1_001.fastq.gz
-          SampleCodeString = "_".join([(e.split("-")[-1]) for e in parentCodeList])
-          os.rename(root + '/' + file, root + "/" + FACILITY_CODE + SampleCodeString + "_" + flowcellName + "_" + file)
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getPath()
-  name = transaction.getIncoming().getName()
-
-  split=name.split("_")
-  if (len(split) == 4):
-    DSTYPE='ILLUMINA_HISEQ_OUTPUT'
-    flowcell=name.split("_")[-1][1:]
-  if (len(split) ==2):
-    DSTYPE='ILLUMINA_GA_OUTPUT'
-    flowcell=name.split("_")[-1]
-
-  #move Lanes into a different drop box
-  laneList=glob.glob(incomingPath + '/'+ UNALIGNED_FOLDER + REGEX_LANES)
-  laneList.sort()
-
-  undeterminedList=glob.glob(incomingPath + '/'+ UNALIGNED_FOLDER + REGEX_UNDETERMINED)
-  undeterminedList.sort()
-
-  # add the Flow Cell Name to the Undetermined FASTQ files
-  [renameFiles(transaction, dir, name) for dir in undeterminedList]
-
-  # Multiplexing:
-  # First move the Undetermined reads to the other ones 
-  [shutil.move(undeterminedLane, laneList[int(undeterminedLane.split('/')[-1][-1])-1] +'/' + undeterminedLane.split('/')[-1]) for undeterminedLane in undeterminedList]
-
-  [shutil.move(lane, LANE_FOLDER+lane.split('/')[-1]) for lane in laneList]
-  markerFileList = [touch_markerfile(LANE_FOLDER+MARKER_STRING+lane.split('/')[-1]) for lane in laneList]
-
-  # Create a data set and set type
-  dataSet = transaction.createNewDataSet("BASECALL_STATS")
-  dataSet.setMeasuredData(False)
-    
-  # Build up a list of file which are part of the data set
-  fileList=glob.glob(incomingPath + '/'+ UNALIGNED_FOLDER + '/' + REGEX_FILES)
-  [fileList.append(i) for i in glob.glob(incomingPath + '/' + UNALIGNED_FOLDER +'/' +REGEX_MAKEFILE)]
-
-  # Add the incoming file into the data set
-  transaction.createNewDirectory(dataSet, UNALIGNED_FOLDER) 
-  # move all files is data set
-  [transaction.moveFile(file, dataSet, UNALIGNED_FOLDER)  for file in fileList]
-  # move base call stat dir into data set
-  print("flowcell: "+flowcell)
-  transaction.moveFile(incomingPath + '/' + UNALIGNED_FOLDER + '/' +  BASECALL_STATS_FOLDER + flowcell, dataSet, UNALIGNED_FOLDER + '/')
-    
-  # Get the search service
-  search_service = transaction.getSearchService()
-
-  # Search for the sample
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, name))
-  foundSamples = search_service.searchForSamples(sc)
-
-  if foundSamples.size() > 0:
-    dataSet.setSample(foundSamples[0])
-
-    # Search for another data set of the same sample and make it a child of it 
-    dataSetSc = SearchCriteria()
-    dataSetSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, DSTYPE))
-    dataSetSc.addSubCriteria(SearchSubCriteria.createSampleCriteria(sc))
-    foundDataSets = search_service.searchForDataSets(dataSetSc)
-    if foundDataSets.size() > 0:
-      dataSet.setParentDatasets([ds.getDataSetCode() for ds in foundDataSets])
-
-  shutil.rmtree(incomingPath)
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/maintenance-tasks/.gitignore b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/maintenance-tasks/.gitignore
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/reporting-plugins/.gitignore b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/reporting-plugins/.gitignore
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/services/.gitignore b/deep_sequencing_unit/source/core-plugins/illumina-ngs/1/dss/services/.gitignore
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/as/initialize-master-data.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/as/initialize-master-data.py
deleted file mode 100644
index 9ce62f58469..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/as/initialize-master-data.py
+++ /dev/null
@@ -1,2792 +0,0 @@
-# -*- coding: utf-8 -*-
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-
-print ("Importing Master Data...")
-
-tr = service.transaction()
-
-
-file_type_FASTQ_PHRED_64 = tr.getOrCreateNewFileFormatType('FASTQ_PHRED_64')
-file_type_FASTQ_PHRED_64.setDescription('FastQ Format with PHRED+64 quality values (as deliverd by Illumina GA Pipeline >= 1.3)')
-   
-print "Imported 7 File Formats"     
-vocabulary_AGILENT_KIT = tr.getOrCreateNewVocabulary('AGILENT_KIT')
-vocabulary_AGILENT_KIT.setDescription(None)
-vocabulary_AGILENT_KIT.setUrlTemplate(None)
-vocabulary_AGILENT_KIT.setManagedInternally(False)
-vocabulary_AGILENT_KIT.setChosenFromList(True)
-          
-vocabulary_term_AGILENT_KIT_AGILENT_DNA_KIT_1000 = tr.createNewVocabularyTerm('AGILENT_DNA_KIT_1000')
-vocabulary_term_AGILENT_KIT_AGILENT_DNA_KIT_1000.setDescription(None)
-vocabulary_term_AGILENT_KIT_AGILENT_DNA_KIT_1000.setLabel(None)
-vocabulary_term_AGILENT_KIT_AGILENT_DNA_KIT_1000.setOrdinal(1)
-vocabulary_AGILENT_KIT.addTerm(vocabulary_term_AGILENT_KIT_AGILENT_DNA_KIT_1000)
-          
-vocabulary_term_AGILENT_KIT_AGILENT_HIGH_SENSITIVITY_DNA_KIT = tr.createNewVocabularyTerm('AGILENT_HIGH_SENSITIVITY_DNA_KIT')
-vocabulary_term_AGILENT_KIT_AGILENT_HIGH_SENSITIVITY_DNA_KIT.setDescription(None)
-vocabulary_term_AGILENT_KIT_AGILENT_HIGH_SENSITIVITY_DNA_KIT.setLabel(None)
-vocabulary_term_AGILENT_KIT_AGILENT_HIGH_SENSITIVITY_DNA_KIT.setOrdinal(2)
-vocabulary_AGILENT_KIT.addTerm(vocabulary_term_AGILENT_KIT_AGILENT_HIGH_SENSITIVITY_DNA_KIT)
-    
-vocabulary_ALIGNMENT_SOFTWARE = tr.getOrCreateNewVocabulary('ALIGNMENT_SOFTWARE')
-vocabulary_ALIGNMENT_SOFTWARE.setDescription('If an alignment is requested, which software package should be use?')
-vocabulary_ALIGNMENT_SOFTWARE.setUrlTemplate(None)
-vocabulary_ALIGNMENT_SOFTWARE.setManagedInternally(False)
-vocabulary_ALIGNMENT_SOFTWARE.setChosenFromList(True)
-          
-vocabulary_term_ALIGNMENT_SOFTWARE_NOT_NEEDED = tr.createNewVocabularyTerm('NOT_NEEDED')
-vocabulary_term_ALIGNMENT_SOFTWARE_NOT_NEEDED.setDescription(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_NOT_NEEDED.setLabel(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_NOT_NEEDED.setOrdinal(1)
-vocabulary_ALIGNMENT_SOFTWARE.addTerm(vocabulary_term_ALIGNMENT_SOFTWARE_NOT_NEEDED)
-          
-vocabulary_term_ALIGNMENT_SOFTWARE_ELAND = tr.createNewVocabularyTerm('ELAND')
-vocabulary_term_ALIGNMENT_SOFTWARE_ELAND.setDescription(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_ELAND.setLabel(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_ELAND.setOrdinal(2)
-vocabulary_ALIGNMENT_SOFTWARE.addTerm(vocabulary_term_ALIGNMENT_SOFTWARE_ELAND)
-          
-vocabulary_term_ALIGNMENT_SOFTWARE_MAQ = tr.createNewVocabularyTerm('MAQ')
-vocabulary_term_ALIGNMENT_SOFTWARE_MAQ.setDescription(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_MAQ.setLabel(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_MAQ.setOrdinal(3)
-vocabulary_ALIGNMENT_SOFTWARE.addTerm(vocabulary_term_ALIGNMENT_SOFTWARE_MAQ)
-          
-vocabulary_term_ALIGNMENT_SOFTWARE_BWA = tr.createNewVocabularyTerm('BWA')
-vocabulary_term_ALIGNMENT_SOFTWARE_BWA.setDescription(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_BWA.setLabel(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_BWA.setOrdinal(4)
-vocabulary_ALIGNMENT_SOFTWARE.addTerm(vocabulary_term_ALIGNMENT_SOFTWARE_BWA)
-          
-vocabulary_term_ALIGNMENT_SOFTWARE_NOVOALIGN = tr.createNewVocabularyTerm('NOVOALIGN')
-vocabulary_term_ALIGNMENT_SOFTWARE_NOVOALIGN.setDescription(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_NOVOALIGN.setLabel(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_NOVOALIGN.setOrdinal(6)
-vocabulary_ALIGNMENT_SOFTWARE.addTerm(vocabulary_term_ALIGNMENT_SOFTWARE_NOVOALIGN)
-          
-vocabulary_term_ALIGNMENT_SOFTWARE_BOWTIE = tr.createNewVocabularyTerm('BOWTIE')
-vocabulary_term_ALIGNMENT_SOFTWARE_BOWTIE.setDescription(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_BOWTIE.setLabel(None)
-vocabulary_term_ALIGNMENT_SOFTWARE_BOWTIE.setOrdinal(7)
-vocabulary_ALIGNMENT_SOFTWARE.addTerm(vocabulary_term_ALIGNMENT_SOFTWARE_BOWTIE)
-    
-vocabulary_CASAVA_VERSION = tr.getOrCreateNewVocabulary('CASAVA_VERSION')
-vocabulary_CASAVA_VERSION.setDescription('Post analyzing software')
-vocabulary_CASAVA_VERSION.setUrlTemplate(None)
-vocabulary_CASAVA_VERSION.setManagedInternally(False)
-vocabulary_CASAVA_VERSION.setChosenFromList(True)
-          
-vocabulary_term_CASAVA_VERSION_18 = tr.createNewVocabularyTerm('1.8')
-vocabulary_term_CASAVA_VERSION_18.setDescription(None)
-vocabulary_term_CASAVA_VERSION_18.setLabel(None)
-vocabulary_term_CASAVA_VERSION_18.setOrdinal(1)
-vocabulary_CASAVA_VERSION.addTerm(vocabulary_term_CASAVA_VERSION_18)
-          
-vocabulary_term_CASAVA_VERSION_17 = tr.createNewVocabularyTerm('1.7')
-vocabulary_term_CASAVA_VERSION_17.setDescription(None)
-vocabulary_term_CASAVA_VERSION_17.setLabel(None)
-vocabulary_term_CASAVA_VERSION_17.setOrdinal(2)
-vocabulary_CASAVA_VERSION.addTerm(vocabulary_term_CASAVA_VERSION_17)
-    
-vocabulary_CLUSTER_GENERATION_KIT_VERSION = tr.getOrCreateNewVocabulary('CLUSTER_GENERATION_KIT_VERSION')
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.setDescription('Version of the Cluster Generation Kit')
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.setUrlTemplate(None)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.setManagedInternally(False)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.setChosenFromList(True)
-          
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V3 = tr.createNewVocabularyTerm('TRUSEQ_CBOT_HS_V3')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V3.setDescription(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V3.setLabel('TruSeq cBot-HS v3')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V3.setOrdinal(1)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.addTerm(vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V3)
-          
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V25 = tr.createNewVocabularyTerm('TRUSEQ_CBOT_HS_V2.5')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V25.setDescription(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V25.setLabel('TruSeq cBot-HS v2.5')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V25.setOrdinal(2)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.addTerm(vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_HS_V25)
-          
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_GA_V2 = tr.createNewVocabularyTerm('TRUSEQ_CBOT_GA_V2')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_GA_V2.setDescription(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_GA_V2.setLabel('TrueSeq cBot-GA v2')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_GA_V2.setOrdinal(3)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.addTerm(vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CBOT_GA_V2)
-          
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CS_GA_V5 = tr.createNewVocabularyTerm('TRUSEQ_CS_GA_V5')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CS_GA_V5.setDescription(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CS_GA_V5.setLabel('TrueSeq CS-GA v5')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CS_GA_V5.setOrdinal(4)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.addTerm(vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_TRUSEQ_CS_GA_V5)
-          
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V5 = tr.createNewVocabularyTerm('V5')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V5.setDescription(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V5.setLabel(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V5.setOrdinal(5)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.addTerm(vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V5)
-          
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V4 = tr.createNewVocabularyTerm('V4')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V4.setDescription(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V4.setLabel(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V4.setOrdinal(6)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.addTerm(vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V4)
-          
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V2 = tr.createNewVocabularyTerm('V2')
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V2.setDescription(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V2.setLabel(None)
-vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V2.setOrdinal(7)
-vocabulary_CLUSTER_GENERATION_KIT_VERSION.addTerm(vocabulary_term_CLUSTER_GENERATION_KIT_VERSION_V2)
-    
-vocabulary_CLUSTER_STATION = tr.getOrCreateNewVocabulary('CLUSTER_STATION')
-vocabulary_CLUSTER_STATION.setDescription('Cluster Station')
-vocabulary_CLUSTER_STATION.setUrlTemplate(None)
-vocabulary_CLUSTER_STATION.setManagedInternally(False)
-vocabulary_CLUSTER_STATION.setChosenFromList(True)
-          
-vocabulary_term_CLUSTER_STATION_CBOT = tr.createNewVocabularyTerm('CBOT')
-vocabulary_term_CLUSTER_STATION_CBOT.setDescription(None)
-vocabulary_term_CLUSTER_STATION_CBOT.setLabel('cBot')
-vocabulary_term_CLUSTER_STATION_CBOT.setOrdinal(1)
-vocabulary_CLUSTER_STATION.addTerm(vocabulary_term_CLUSTER_STATION_CBOT)
-          
-vocabulary_term_CLUSTER_STATION_CBOT2 = tr.createNewVocabularyTerm('CBOT2')
-vocabulary_term_CLUSTER_STATION_CBOT2.setDescription('Second cBot')
-vocabulary_term_CLUSTER_STATION_CBOT2.setLabel('cBot2')
-vocabulary_term_CLUSTER_STATION_CBOT2.setOrdinal(2)
-vocabulary_CLUSTER_STATION.addTerm(vocabulary_term_CLUSTER_STATION_CBOT2)
-    
-vocabulary_CONTROL_LANE = tr.getOrCreateNewVocabulary('CONTROL_LANE')
-vocabulary_CONTROL_LANE.setDescription(None)
-vocabulary_CONTROL_LANE.setUrlTemplate(None)
-vocabulary_CONTROL_LANE.setManagedInternally(False)
-vocabulary_CONTROL_LANE.setChosenFromList(True)
-          
-vocabulary_term_CONTROL_LANE_1 = tr.createNewVocabularyTerm('1')
-vocabulary_term_CONTROL_LANE_1.setDescription(None)
-vocabulary_term_CONTROL_LANE_1.setLabel(None)
-vocabulary_term_CONTROL_LANE_1.setOrdinal(1)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_1)
-          
-vocabulary_term_CONTROL_LANE_2 = tr.createNewVocabularyTerm('2')
-vocabulary_term_CONTROL_LANE_2.setDescription(None)
-vocabulary_term_CONTROL_LANE_2.setLabel(None)
-vocabulary_term_CONTROL_LANE_2.setOrdinal(2)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_2)
-          
-vocabulary_term_CONTROL_LANE_3 = tr.createNewVocabularyTerm('3')
-vocabulary_term_CONTROL_LANE_3.setDescription(None)
-vocabulary_term_CONTROL_LANE_3.setLabel(None)
-vocabulary_term_CONTROL_LANE_3.setOrdinal(3)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_3)
-          
-vocabulary_term_CONTROL_LANE_4 = tr.createNewVocabularyTerm('4')
-vocabulary_term_CONTROL_LANE_4.setDescription(None)
-vocabulary_term_CONTROL_LANE_4.setLabel(None)
-vocabulary_term_CONTROL_LANE_4.setOrdinal(4)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_4)
-          
-vocabulary_term_CONTROL_LANE_5 = tr.createNewVocabularyTerm('5')
-vocabulary_term_CONTROL_LANE_5.setDescription(None)
-vocabulary_term_CONTROL_LANE_5.setLabel(None)
-vocabulary_term_CONTROL_LANE_5.setOrdinal(5)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_5)
-          
-vocabulary_term_CONTROL_LANE_6 = tr.createNewVocabularyTerm('6')
-vocabulary_term_CONTROL_LANE_6.setDescription(None)
-vocabulary_term_CONTROL_LANE_6.setLabel(None)
-vocabulary_term_CONTROL_LANE_6.setOrdinal(6)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_6)
-          
-vocabulary_term_CONTROL_LANE_7 = tr.createNewVocabularyTerm('7')
-vocabulary_term_CONTROL_LANE_7.setDescription(None)
-vocabulary_term_CONTROL_LANE_7.setLabel(None)
-vocabulary_term_CONTROL_LANE_7.setOrdinal(7)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_7)
-          
-vocabulary_term_CONTROL_LANE_8 = tr.createNewVocabularyTerm('8')
-vocabulary_term_CONTROL_LANE_8.setDescription(None)
-vocabulary_term_CONTROL_LANE_8.setLabel(None)
-vocabulary_term_CONTROL_LANE_8.setOrdinal(8)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_8)
-          
-vocabulary_term_CONTROL_LANE_NONE = tr.createNewVocabularyTerm('NONE')
-vocabulary_term_CONTROL_LANE_NONE.setDescription(None)
-vocabulary_term_CONTROL_LANE_NONE.setLabel(None)
-vocabulary_term_CONTROL_LANE_NONE.setOrdinal(9)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_NONE)
-          
-vocabulary_term_CONTROL_LANE_0 = tr.createNewVocabularyTerm('0')
-vocabulary_term_CONTROL_LANE_0.setDescription(None)
-vocabulary_term_CONTROL_LANE_0.setLabel(None)
-vocabulary_term_CONTROL_LANE_0.setOrdinal(10)
-vocabulary_CONTROL_LANE.addTerm(vocabulary_term_CONTROL_LANE_0)
-    
-vocabulary_END_TYPE = tr.getOrCreateNewVocabulary('END_TYPE')
-vocabulary_END_TYPE.setDescription('Sequencing method')
-vocabulary_END_TYPE.setUrlTemplate(None)
-vocabulary_END_TYPE.setManagedInternally(False)
-vocabulary_END_TYPE.setChosenFromList(True)
-          
-vocabulary_term_END_TYPE_SINGLE_READ = tr.createNewVocabularyTerm('SINGLE_READ')
-vocabulary_term_END_TYPE_SINGLE_READ.setDescription(None)
-vocabulary_term_END_TYPE_SINGLE_READ.setLabel(None)
-vocabulary_term_END_TYPE_SINGLE_READ.setOrdinal(1)
-vocabulary_END_TYPE.addTerm(vocabulary_term_END_TYPE_SINGLE_READ)
-          
-vocabulary_term_END_TYPE_PAIRED_END = tr.createNewVocabularyTerm('PAIRED_END')
-vocabulary_term_END_TYPE_PAIRED_END.setDescription(None)
-vocabulary_term_END_TYPE_PAIRED_END.setLabel(None)
-vocabulary_term_END_TYPE_PAIRED_END.setOrdinal(2)
-vocabulary_END_TYPE.addTerm(vocabulary_term_END_TYPE_PAIRED_END)
-    
-vocabulary_EXPERIMENT_DESIGN = tr.getOrCreateNewVocabulary('EXPERIMENT_DESIGN')
-vocabulary_EXPERIMENT_DESIGN.setDescription('General Intent')
-vocabulary_EXPERIMENT_DESIGN.setUrlTemplate(None)
-vocabulary_EXPERIMENT_DESIGN.setManagedInternally(False)
-vocabulary_EXPERIMENT_DESIGN.setChosenFromList(True)
-          
-vocabulary_term_EXPERIMENT_DESIGN_BINDING_SITE_IDENTIFICATION = tr.createNewVocabularyTerm('BINDING_SITE_IDENTIFICATION')
-vocabulary_term_EXPERIMENT_DESIGN_BINDING_SITE_IDENTIFICATION.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_BINDING_SITE_IDENTIFICATION.setLabel('Binding Site Identification')
-vocabulary_term_EXPERIMENT_DESIGN_BINDING_SITE_IDENTIFICATION.setOrdinal(1)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_BINDING_SITE_IDENTIFICATION)
-          
-vocabulary_term_EXPERIMENT_DESIGN_CHROMATIN_MARKS = tr.createNewVocabularyTerm('CHROMATIN_MARKS')
-vocabulary_term_EXPERIMENT_DESIGN_CHROMATIN_MARKS.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_CHROMATIN_MARKS.setLabel('Chromatin Marks')
-vocabulary_term_EXPERIMENT_DESIGN_CHROMATIN_MARKS.setOrdinal(2)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_CHROMATIN_MARKS)
-          
-vocabulary_term_EXPERIMENT_DESIGN_COMPARATIVE_GENOMIC_HYBRIDIZATION = tr.createNewVocabularyTerm('COMPARATIVE_GENOMIC_HYBRIDIZATION')
-vocabulary_term_EXPERIMENT_DESIGN_COMPARATIVE_GENOMIC_HYBRIDIZATION.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_COMPARATIVE_GENOMIC_HYBRIDIZATION.setLabel('Comparative Genomic Hybridization')
-vocabulary_term_EXPERIMENT_DESIGN_COMPARATIVE_GENOMIC_HYBRIDIZATION.setOrdinal(3)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_COMPARATIVE_GENOMIC_HYBRIDIZATION)
-          
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_EXPRESSION = tr.createNewVocabularyTerm('DIFFERENTIAL_EXPRESSION')
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_EXPRESSION.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_EXPRESSION.setLabel('Differential Expression')
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_EXPRESSION.setOrdinal(4)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_EXPRESSION)
-          
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_SPLICING = tr.createNewVocabularyTerm('DIFFERENTIAL_SPLICING')
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_SPLICING.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_SPLICING.setLabel('Differential Splicing')
-vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_SPLICING.setOrdinal(5)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_DIFFERENTIAL_SPLICING)
-          
-vocabulary_term_EXPERIMENT_DESIGN_EXPRESSION = tr.createNewVocabularyTerm('EXPRESSION')
-vocabulary_term_EXPERIMENT_DESIGN_EXPRESSION.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_EXPRESSION.setLabel('Expression')
-vocabulary_term_EXPERIMENT_DESIGN_EXPRESSION.setOrdinal(6)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_EXPRESSION)
-          
-vocabulary_term_EXPERIMENT_DESIGN_SEQUENCE_ENRICHMENT = tr.createNewVocabularyTerm('SEQUENCE_ENRICHMENT')
-vocabulary_term_EXPERIMENT_DESIGN_SEQUENCE_ENRICHMENT.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_SEQUENCE_ENRICHMENT.setLabel('Sequence Enrichment')
-vocabulary_term_EXPERIMENT_DESIGN_SEQUENCE_ENRICHMENT.setOrdinal(7)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_SEQUENCE_ENRICHMENT)
-          
-vocabulary_term_EXPERIMENT_DESIGN_TRANSCRIPT_IDENTIFICATION = tr.createNewVocabularyTerm('TRANSCRIPT_IDENTIFICATION')
-vocabulary_term_EXPERIMENT_DESIGN_TRANSCRIPT_IDENTIFICATION.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_TRANSCRIPT_IDENTIFICATION.setLabel('Transcript Identification')
-vocabulary_term_EXPERIMENT_DESIGN_TRANSCRIPT_IDENTIFICATION.setOrdinal(8)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_TRANSCRIPT_IDENTIFICATION)
-          
-vocabulary_term_EXPERIMENT_DESIGN_OTHER = tr.createNewVocabularyTerm('OTHER')
-vocabulary_term_EXPERIMENT_DESIGN_OTHER.setDescription(None)
-vocabulary_term_EXPERIMENT_DESIGN_OTHER.setLabel('Other')
-vocabulary_term_EXPERIMENT_DESIGN_OTHER.setOrdinal(9)
-vocabulary_EXPERIMENT_DESIGN.addTerm(vocabulary_term_EXPERIMENT_DESIGN_OTHER)
-    
-vocabulary_INDEX1 = tr.getOrCreateNewVocabulary('INDEX1')
-vocabulary_INDEX1.setDescription('Index 1 for Illumina Indexing')
-vocabulary_INDEX1.setUrlTemplate(None)
-vocabulary_INDEX1.setManagedInternally(False)
-vocabulary_INDEX1.setChosenFromList(True)
-          
-vocabulary_term_INDEX1_NONE = tr.createNewVocabularyTerm('NONE')
-vocabulary_term_INDEX1_NONE.setDescription('No Index')
-vocabulary_term_INDEX1_NONE.setLabel(' None')
-vocabulary_term_INDEX1_NONE.setOrdinal(1)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_NONE)
-          
-vocabulary_term_INDEX1_ATCACGA = tr.createNewVocabularyTerm('ATCACGA')
-vocabulary_term_INDEX1_ATCACGA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_ATCACGA.setLabel('Index1 ATCACGA')
-vocabulary_term_INDEX1_ATCACGA.setOrdinal(2)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_ATCACGA)
-          
-vocabulary_term_INDEX1_CGATGTA = tr.createNewVocabularyTerm('CGATGTA')
-vocabulary_term_INDEX1_CGATGTA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_CGATGTA.setLabel('Index2 CGATGTA')
-vocabulary_term_INDEX1_CGATGTA.setOrdinal(3)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CGATGTA)
-          
-vocabulary_term_INDEX1_TTAGGCA = tr.createNewVocabularyTerm('TTAGGCA')
-vocabulary_term_INDEX1_TTAGGCA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_TTAGGCA.setLabel('Index3 TTAGGCA')
-vocabulary_term_INDEX1_TTAGGCA.setOrdinal(4)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TTAGGCA)
-          
-vocabulary_term_INDEX1_TGACCAA = tr.createNewVocabularyTerm('TGACCAA')
-vocabulary_term_INDEX1_TGACCAA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_TGACCAA.setLabel('Index4 TGACCAA')
-vocabulary_term_INDEX1_TGACCAA.setOrdinal(5)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TGACCAA)
-          
-vocabulary_term_INDEX1_ACAGTGA = tr.createNewVocabularyTerm('ACAGTGA')
-vocabulary_term_INDEX1_ACAGTGA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_ACAGTGA.setLabel('Index5 ACAGTGA')
-vocabulary_term_INDEX1_ACAGTGA.setOrdinal(6)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_ACAGTGA)
-          
-vocabulary_term_INDEX1_GCCAATA = tr.createNewVocabularyTerm('GCCAATA')
-vocabulary_term_INDEX1_GCCAATA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_GCCAATA.setLabel('Index6 GCCAATA')
-vocabulary_term_INDEX1_GCCAATA.setOrdinal(7)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GCCAATA)
-          
-vocabulary_term_INDEX1_CAGATCA = tr.createNewVocabularyTerm('CAGATCA')
-vocabulary_term_INDEX1_CAGATCA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_CAGATCA.setLabel('Index7 CAGATCA')
-vocabulary_term_INDEX1_CAGATCA.setOrdinal(8)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CAGATCA)
-          
-vocabulary_term_INDEX1_ACTTGAA = tr.createNewVocabularyTerm('ACTTGAA')
-vocabulary_term_INDEX1_ACTTGAA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_ACTTGAA.setLabel('Index8 ACTTGAA')
-vocabulary_term_INDEX1_ACTTGAA.setOrdinal(9)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_ACTTGAA)
-          
-vocabulary_term_INDEX1_GATCAGA = tr.createNewVocabularyTerm('GATCAGA')
-vocabulary_term_INDEX1_GATCAGA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_GATCAGA.setLabel('Index9 GATCAGA')
-vocabulary_term_INDEX1_GATCAGA.setOrdinal(10)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GATCAGA)
-          
-vocabulary_term_INDEX1_TAGCTTA = tr.createNewVocabularyTerm('TAGCTTA')
-vocabulary_term_INDEX1_TAGCTTA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_TAGCTTA.setLabel('Index10 TAGCTTA')
-vocabulary_term_INDEX1_TAGCTTA.setOrdinal(11)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TAGCTTA)
-          
-vocabulary_term_INDEX1_GGCTACA = tr.createNewVocabularyTerm('GGCTACA')
-vocabulary_term_INDEX1_GGCTACA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_GGCTACA.setLabel('Index11 GGCTACA')
-vocabulary_term_INDEX1_GGCTACA.setOrdinal(12)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GGCTACA)
-          
-vocabulary_term_INDEX1_CTTGTAA = tr.createNewVocabularyTerm('CTTGTAA')
-vocabulary_term_INDEX1_CTTGTAA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_CTTGTAA.setLabel('Index12 CTTGTAA')
-vocabulary_term_INDEX1_CTTGTAA.setOrdinal(13)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CTTGTAA)
-          
-vocabulary_term_INDEX1_AGATACA = tr.createNewVocabularyTerm('AGATACA')
-vocabulary_term_INDEX1_AGATACA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_AGATACA.setLabel('Index13 AGATAC')
-vocabulary_term_INDEX1_AGATACA.setOrdinal(14)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_AGATACA)
-          
-vocabulary_term_INDEX1_AGTTCCG = tr.createNewVocabularyTerm('AGTTCCG')
-vocabulary_term_INDEX1_AGTTCCG.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_AGTTCCG.setLabel('Index14 AGTTCCG')
-vocabulary_term_INDEX1_AGTTCCG.setOrdinal(15)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_AGTTCCG)
-          
-vocabulary_term_INDEX1_ATGTCAG = tr.createNewVocabularyTerm('ATGTCAG')
-vocabulary_term_INDEX1_ATGTCAG.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_ATGTCAG.setLabel('Index15 ATGTCAG')
-vocabulary_term_INDEX1_ATGTCAG.setOrdinal(16)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_ATGTCAG)
-          
-vocabulary_term_INDEX1_CCGTCCC = tr.createNewVocabularyTerm('CCGTCCC')
-vocabulary_term_INDEX1_CCGTCCC.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_CCGTCCC.setLabel('Index16 CCGTCCC')
-vocabulary_term_INDEX1_CCGTCCC.setOrdinal(17)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CCGTCCC)
-          
-vocabulary_term_INDEX1_GTCCGCA = tr.createNewVocabularyTerm('GTCCGCA')
-vocabulary_term_INDEX1_GTCCGCA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_GTCCGCA.setLabel('Index18 GTCCGCA')
-vocabulary_term_INDEX1_GTCCGCA.setOrdinal(18)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GTCCGCA)
-          
-vocabulary_term_INDEX1_GTGAAAC = tr.createNewVocabularyTerm('GTGAAAC')
-vocabulary_term_INDEX1_GTGAAAC.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_GTGAAAC.setLabel('Index19 GTGAAAC')
-vocabulary_term_INDEX1_GTGAAAC.setOrdinal(19)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GTGAAAC)
-          
-vocabulary_term_INDEX1_GTGGCCT = tr.createNewVocabularyTerm('GTGGCCT')
-vocabulary_term_INDEX1_GTGGCCT.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_GTGGCCT.setLabel('Index20 GTGGCCT')
-vocabulary_term_INDEX1_GTGGCCT.setOrdinal(20)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GTGGCCT)
-          
-vocabulary_term_INDEX1_GTTTCGG = tr.createNewVocabularyTerm('GTTTCGG')
-vocabulary_term_INDEX1_GTTTCGG.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_GTTTCGG.setLabel('Index21 GTTTCGG')
-vocabulary_term_INDEX1_GTTTCGG.setOrdinal(21)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GTTTCGG)
-          
-vocabulary_term_INDEX1_CGTACGT = tr.createNewVocabularyTerm('CGTACGT')
-vocabulary_term_INDEX1_CGTACGT.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_CGTACGT.setLabel('Index22 CGTACGT')
-vocabulary_term_INDEX1_CGTACGT.setOrdinal(22)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CGTACGT)
-          
-vocabulary_term_INDEX1_GAGTGGA = tr.createNewVocabularyTerm('GAGTGGA')
-vocabulary_term_INDEX1_GAGTGGA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_GAGTGGA.setLabel('Index23 GAGTGGA')
-vocabulary_term_INDEX1_GAGTGGA.setOrdinal(23)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GAGTGGA)
-          
-vocabulary_term_INDEX1_ACTGATA = tr.createNewVocabularyTerm('ACTGATA')
-vocabulary_term_INDEX1_ACTGATA.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_ACTGATA.setLabel('Index25 ACTGATA')
-vocabulary_term_INDEX1_ACTGATA.setOrdinal(24)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_ACTGATA)
-          
-vocabulary_term_INDEX1_ATTCCTT = tr.createNewVocabularyTerm('ATTCCTT')
-vocabulary_term_INDEX1_ATTCCTT.setDescription('Illumina, Nextera or Scriptseq')
-vocabulary_term_INDEX1_ATTCCTT.setLabel('Index27 ATTCCTT')
-vocabulary_term_INDEX1_ATTCCTT.setOrdinal(25)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_ATTCCTT)
-          
-vocabulary_term_INDEX1_TAAGGCGA = tr.createNewVocabularyTerm('TAAGGCGA')
-vocabulary_term_INDEX1_TAAGGCGA.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_TAAGGCGA.setLabel('Index1 (i7) N701 TAAGGCGA')
-vocabulary_term_INDEX1_TAAGGCGA.setOrdinal(26)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TAAGGCGA)
-          
-vocabulary_term_INDEX1_CGTACTAG = tr.createNewVocabularyTerm('CGTACTAG')
-vocabulary_term_INDEX1_CGTACTAG.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_CGTACTAG.setLabel('Index1 (i7) N702 CGTACTAG')
-vocabulary_term_INDEX1_CGTACTAG.setOrdinal(27)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CGTACTAG)
-          
-vocabulary_term_INDEX1_AGGCAGAA = tr.createNewVocabularyTerm('AGGCAGAA')
-vocabulary_term_INDEX1_AGGCAGAA.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_AGGCAGAA.setLabel('Index1 (i7) N703 AGGCAGAA')
-vocabulary_term_INDEX1_AGGCAGAA.setOrdinal(28)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_AGGCAGAA)
-          
-vocabulary_term_INDEX1_TCCTGAGC = tr.createNewVocabularyTerm('TCCTGAGC')
-vocabulary_term_INDEX1_TCCTGAGC.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_TCCTGAGC.setLabel('Index1 (i7) N704 TCCTGAGC')
-vocabulary_term_INDEX1_TCCTGAGC.setOrdinal(29)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TCCTGAGC)
-          
-vocabulary_term_INDEX1_GGACTCCT = tr.createNewVocabularyTerm('GGACTCCT')
-vocabulary_term_INDEX1_GGACTCCT.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_GGACTCCT.setLabel('Index1 (i7) N705 GGACTCCT')
-vocabulary_term_INDEX1_GGACTCCT.setOrdinal(30)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GGACTCCT)
-          
-vocabulary_term_INDEX1_TAGGCATG = tr.createNewVocabularyTerm('TAGGCATG')
-vocabulary_term_INDEX1_TAGGCATG.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_TAGGCATG.setLabel('Index1 (i7) N706 TAGGCATG')
-vocabulary_term_INDEX1_TAGGCATG.setOrdinal(31)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TAGGCATG)
-          
-vocabulary_term_INDEX1_CTCTCTAC = tr.createNewVocabularyTerm('CTCTCTAC')
-vocabulary_term_INDEX1_CTCTCTAC.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_CTCTCTAC.setLabel('Index1 (i7) N707 CTCTCTAC')
-vocabulary_term_INDEX1_CTCTCTAC.setOrdinal(32)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CTCTCTAC)
-          
-vocabulary_term_INDEX1_CAGAGAGG = tr.createNewVocabularyTerm('CAGAGAGG')
-vocabulary_term_INDEX1_CAGAGAGG.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_CAGAGAGG.setLabel('Index1 (i7) N708 CAGAGAGG')
-vocabulary_term_INDEX1_CAGAGAGG.setOrdinal(33)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CAGAGAGG)
-          
-vocabulary_term_INDEX1_GCTACGCT = tr.createNewVocabularyTerm('GCTACGCT')
-vocabulary_term_INDEX1_GCTACGCT.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_GCTACGCT.setLabel('Index1 (i7) N709 GCTACGCT')
-vocabulary_term_INDEX1_GCTACGCT.setOrdinal(34)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GCTACGCT)
-          
-vocabulary_term_INDEX1_CGAGGCTG = tr.createNewVocabularyTerm('CGAGGCTG')
-vocabulary_term_INDEX1_CGAGGCTG.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_CGAGGCTG.setLabel('Index1 (i7) N710 CGAGGCTG')
-vocabulary_term_INDEX1_CGAGGCTG.setOrdinal(35)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CGAGGCTG)
-          
-vocabulary_term_INDEX1_AAGAGGCA = tr.createNewVocabularyTerm('AAGAGGCA')
-vocabulary_term_INDEX1_AAGAGGCA.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_AAGAGGCA.setLabel('Index1 (i7) N711 AAGAGGCA')
-vocabulary_term_INDEX1_AAGAGGCA.setOrdinal(36)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_AAGAGGCA)
-          
-vocabulary_term_INDEX1_GTAGAGGA = tr.createNewVocabularyTerm('GTAGAGGA')
-vocabulary_term_INDEX1_GTAGAGGA.setDescription('Nextera DNA')
-vocabulary_term_INDEX1_GTAGAGGA.setLabel('Index1 (i7) N712 GTAGAGGA')
-vocabulary_term_INDEX1_GTAGAGGA.setOrdinal(37)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GTAGAGGA)
-          
-vocabulary_term_INDEX1_AAGACTA = tr.createNewVocabularyTerm('AAGACTA')
-vocabulary_term_INDEX1_AAGACTA.setDescription(None)
-vocabulary_term_INDEX1_AAGACTA.setLabel('02 AAGACT')
-vocabulary_term_INDEX1_AAGACTA.setOrdinal(38)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_AAGACTA)
-          
-vocabulary_term_INDEX1_ACTTCAA = tr.createNewVocabularyTerm('ACTTCAA')
-vocabulary_term_INDEX1_ACTTCAA.setDescription(None)
-vocabulary_term_INDEX1_ACTTCAA.setLabel('10 ACTTCA')
-vocabulary_term_INDEX1_ACTTCAA.setOrdinal(39)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_ACTTCAA)
-          
-vocabulary_term_INDEX1_AGGTTGA = tr.createNewVocabularyTerm('AGGTTGA')
-vocabulary_term_INDEX1_AGGTTGA.setDescription(None)
-vocabulary_term_INDEX1_AGGTTGA.setLabel('17 AGGTTG')
-vocabulary_term_INDEX1_AGGTTGA.setOrdinal(40)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_AGGTTGA)
-          
-vocabulary_term_INDEX1_TTCGTCA = tr.createNewVocabularyTerm('TTCGTCA')
-vocabulary_term_INDEX1_TTCGTCA.setDescription(None)
-vocabulary_term_INDEX1_TTCGTCA.setLabel('17 TTCGTCA')
-vocabulary_term_INDEX1_TTCGTCA.setOrdinal(41)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TTCGTCA)
-          
-vocabulary_term_INDEX1_AGCATAA = tr.createNewVocabularyTerm('AGCATAA')
-vocabulary_term_INDEX1_AGCATAA.setDescription(None)
-vocabulary_term_INDEX1_AGCATAA.setLabel('20 AGCATAA')
-vocabulary_term_INDEX1_AGCATAA.setOrdinal(42)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_AGCATAA)
-          
-vocabulary_term_INDEX1_ATACGCA = tr.createNewVocabularyTerm('ATACGCA')
-vocabulary_term_INDEX1_ATACGCA.setDescription(None)
-vocabulary_term_INDEX1_ATACGCA.setLabel('20 ATACGC')
-vocabulary_term_INDEX1_ATACGCA.setOrdinal(43)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_ATACGCA)
-          
-vocabulary_term_INDEX1_CAGATGA = tr.createNewVocabularyTerm('CAGATGA')
-vocabulary_term_INDEX1_CAGATGA.setDescription(None)
-vocabulary_term_INDEX1_CAGATGA.setLabel('28 CAGATG')
-vocabulary_term_INDEX1_CAGATGA.setOrdinal(44)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CAGATGA)
-          
-vocabulary_term_INDEX1_CCGAATA = tr.createNewVocabularyTerm('CCGAATA')
-vocabulary_term_INDEX1_CCGAATA.setDescription(None)
-vocabulary_term_INDEX1_CCGAATA.setLabel('34 CCGAAT')
-vocabulary_term_INDEX1_CCGAATA.setOrdinal(45)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CCGAATA)
-          
-vocabulary_term_INDEX1_CGCTCGA = tr.createNewVocabularyTerm('CGCTCGA')
-vocabulary_term_INDEX1_CGCTCGA.setDescription(None)
-vocabulary_term_INDEX1_CGCTCGA.setLabel('43 CGCTCG')
-vocabulary_term_INDEX1_CGCTCGA.setOrdinal(46)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CGCTCGA)
-          
-vocabulary_term_INDEX1_CGTATTA = tr.createNewVocabularyTerm('CGTATTA')
-vocabulary_term_INDEX1_CGTATTA.setDescription(None)
-vocabulary_term_INDEX1_CGTATTA.setLabel('45 CGTATT')
-vocabulary_term_INDEX1_CGTATTA.setOrdinal(47)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CGTATTA)
-          
-vocabulary_term_INDEX1_CCATGAA = tr.createNewVocabularyTerm('CCATGAA')
-vocabulary_term_INDEX1_CCATGAA.setDescription(None)
-vocabulary_term_INDEX1_CCATGAA.setLabel('50 CCATGAA')
-vocabulary_term_INDEX1_CCATGAA.setOrdinal(48)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CCATGAA)
-          
-vocabulary_term_INDEX1_CTGACCA = tr.createNewVocabularyTerm('CTGACCA')
-vocabulary_term_INDEX1_CTGACCA.setDescription(None)
-vocabulary_term_INDEX1_CTGACCA.setLabel('50 CTGACC')
-vocabulary_term_INDEX1_CTGACCA.setOrdinal(49)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CTGACCA)
-          
-vocabulary_term_INDEX1_GAAGCCA = tr.createNewVocabularyTerm('GAAGCCA')
-vocabulary_term_INDEX1_GAAGCCA.setDescription(None)
-vocabulary_term_INDEX1_GAAGCCA.setLabel('52 GAAGCC')
-vocabulary_term_INDEX1_GAAGCCA.setOrdinal(50)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GAAGCCA)
-          
-vocabulary_term_INDEX1_NOINDEX = tr.createNewVocabularyTerm('NOINDEX')
-vocabulary_term_INDEX1_NOINDEX.setDescription(None)
-vocabulary_term_INDEX1_NOINDEX.setLabel(None)
-vocabulary_term_INDEX1_NOINDEX.setOrdinal(51)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_NOINDEX)
-          
-vocabulary_term_INDEX1_GCTGAAA = tr.createNewVocabularyTerm('GCTGAAA')
-vocabulary_term_INDEX1_GCTGAAA.setDescription(None)
-vocabulary_term_INDEX1_GCTGAAA.setLabel('59 GCTGAA')
-vocabulary_term_INDEX1_GCTGAAA.setOrdinal(52)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GCTGAAA)
-          
-vocabulary_term_INDEX1_GTCGCGA = tr.createNewVocabularyTerm('GTCGCGA')
-vocabulary_term_INDEX1_GTCGCGA.setDescription(None)
-vocabulary_term_INDEX1_GTCGCGA.setLabel('64 GTCGCG')
-vocabulary_term_INDEX1_GTCGCGA.setOrdinal(53)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GTCGCGA)
-          
-vocabulary_term_INDEX1_TAAGATA = tr.createNewVocabularyTerm('TAAGATA')
-vocabulary_term_INDEX1_TAAGATA.setDescription(None)
-vocabulary_term_INDEX1_TAAGATA.setLabel('65 TAAGAT')
-vocabulary_term_INDEX1_TAAGATA.setOrdinal(54)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TAAGATA)
-          
-vocabulary_term_INDEX1_GCGCTGA = tr.createNewVocabularyTerm('GCGCTGA')
-vocabulary_term_INDEX1_GCGCTGA.setDescription(None)
-vocabulary_term_INDEX1_GCGCTGA.setLabel('66 GCGCTGA')
-vocabulary_term_INDEX1_GCGCTGA.setOrdinal(55)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GCGCTGA)
-          
-vocabulary_term_INDEX1_TATCGTA = tr.createNewVocabularyTerm('TATCGTA')
-vocabulary_term_INDEX1_TATCGTA.setDescription(None)
-vocabulary_term_INDEX1_TATCGTA.setLabel('66 TATCGT')
-vocabulary_term_INDEX1_TATCGTA.setOrdinal(56)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TATCGTA)
-          
-vocabulary_term_INDEX1_TCCTACA = tr.createNewVocabularyTerm('TCCTACA')
-vocabulary_term_INDEX1_TCCTACA.setDescription(None)
-vocabulary_term_INDEX1_TCCTACA.setLabel('68 TCCTAC')
-vocabulary_term_INDEX1_TCCTACA.setOrdinal(57)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TCCTACA)
-          
-vocabulary_term_INDEX1_TCTATAA = tr.createNewVocabularyTerm('TCTATAA')
-vocabulary_term_INDEX1_TCTATAA.setDescription(None)
-vocabulary_term_INDEX1_TCTATAA.setLabel('70 TCTATA')
-vocabulary_term_INDEX1_TCTATAA.setOrdinal(58)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TCTATAA)
-          
-vocabulary_term_INDEX1_TTACTTA = tr.createNewVocabularyTerm('TTACTTA')
-vocabulary_term_INDEX1_TTACTTA.setDescription(None)
-vocabulary_term_INDEX1_TTACTTA.setLabel('74 TTACTT')
-vocabulary_term_INDEX1_TTACTTA.setOrdinal(59)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TTACTTA)
-          
-vocabulary_term_INDEX1_TTCCGAA = tr.createNewVocabularyTerm('TTCCGAA')
-vocabulary_term_INDEX1_TTCCGAA.setDescription(None)
-vocabulary_term_INDEX1_TTCCGAA.setLabel('75 TTCCGA')
-vocabulary_term_INDEX1_TTCCGAA.setOrdinal(60)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TTCCGAA)
-          
-vocabulary_term_INDEX1_ATGTCAA = tr.createNewVocabularyTerm('ATGTCAA')
-vocabulary_term_INDEX1_ATGTCAA.setDescription(None)
-vocabulary_term_INDEX1_ATGTCAA.setLabel('DNA Adapter 15')
-vocabulary_term_INDEX1_ATGTCAA.setOrdinal(61)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_ATGTCAA)
-          
-vocabulary_term_INDEX1_CCGTCCA = tr.createNewVocabularyTerm('CCGTCCA')
-vocabulary_term_INDEX1_CCGTCCA.setDescription(None)
-vocabulary_term_INDEX1_CCGTCCA.setLabel('DNA Adapter 16')
-vocabulary_term_INDEX1_CCGTCCA.setOrdinal(62)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CCGTCCA)
-          
-vocabulary_term_INDEX1_GTAGAGA = tr.createNewVocabularyTerm('GTAGAGA')
-vocabulary_term_INDEX1_GTAGAGA.setDescription(None)
-vocabulary_term_INDEX1_GTAGAGA.setLabel('DNA Adapter 17')
-vocabulary_term_INDEX1_GTAGAGA.setOrdinal(63)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GTAGAGA)
-          
-vocabulary_term_INDEX1_GTGAAAA = tr.createNewVocabularyTerm('GTGAAAA')
-vocabulary_term_INDEX1_GTGAAAA.setDescription(None)
-vocabulary_term_INDEX1_GTGAAAA.setLabel('DNA Adapter 19')
-vocabulary_term_INDEX1_GTGAAAA.setOrdinal(64)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GTGAAAA)
-          
-vocabulary_term_INDEX1_GTGGCCA = tr.createNewVocabularyTerm('GTGGCCA')
-vocabulary_term_INDEX1_GTGGCCA.setDescription(None)
-vocabulary_term_INDEX1_GTGGCCA.setLabel('DNA Adapter 20')
-vocabulary_term_INDEX1_GTGGCCA.setOrdinal(65)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GTGGCCA)
-          
-vocabulary_term_INDEX1_GTTTCGA = tr.createNewVocabularyTerm('GTTTCGA')
-vocabulary_term_INDEX1_GTTTCGA.setDescription(None)
-vocabulary_term_INDEX1_GTTTCGA.setLabel('DNA Adapter 21')
-vocabulary_term_INDEX1_GTTTCGA.setOrdinal(66)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GTTTCGA)
-          
-vocabulary_term_INDEX1_CGTACGA = tr.createNewVocabularyTerm('CGTACGA')
-vocabulary_term_INDEX1_CGTACGA.setDescription(None)
-vocabulary_term_INDEX1_CGTACGA.setLabel('DNA Adapter 22')
-vocabulary_term_INDEX1_CGTACGA.setOrdinal(67)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CGTACGA)
-          
-vocabulary_term_INDEX1_GGTAGCA = tr.createNewVocabularyTerm('GGTAGCA')
-vocabulary_term_INDEX1_GGTAGCA.setDescription(None)
-vocabulary_term_INDEX1_GGTAGCA.setLabel('DNA Adapter 24')
-vocabulary_term_INDEX1_GGTAGCA.setOrdinal(68)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GGTAGCA)
-          
-vocabulary_term_INDEX1_ATGAGCA = tr.createNewVocabularyTerm('ATGAGCA')
-vocabulary_term_INDEX1_ATGAGCA.setDescription(None)
-vocabulary_term_INDEX1_ATGAGCA.setLabel('DNA Adapter 26')
-vocabulary_term_INDEX1_ATGAGCA.setOrdinal(69)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_ATGAGCA)
-          
-vocabulary_term_INDEX1_ATTCCTA = tr.createNewVocabularyTerm('ATTCCTA')
-vocabulary_term_INDEX1_ATTCCTA.setDescription(None)
-vocabulary_term_INDEX1_ATTCCTA.setLabel('DNA Adapter 27')
-vocabulary_term_INDEX1_ATTCCTA.setOrdinal(70)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_ATTCCTA)
-          
-vocabulary_term_INDEX1_CAAAAGA = tr.createNewVocabularyTerm('CAAAAGA')
-vocabulary_term_INDEX1_CAAAAGA.setDescription(None)
-vocabulary_term_INDEX1_CAAAAGA.setLabel('DNA Adapter 28')
-vocabulary_term_INDEX1_CAAAAGA.setOrdinal(71)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CAAAAGA)
-          
-vocabulary_term_INDEX1_CAACTAA = tr.createNewVocabularyTerm('CAACTAA')
-vocabulary_term_INDEX1_CAACTAA.setDescription(None)
-vocabulary_term_INDEX1_CAACTAA.setLabel('DNA Adapter 29')
-vocabulary_term_INDEX1_CAACTAA.setOrdinal(72)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CAACTAA)
-          
-vocabulary_term_INDEX1_CACCGGA = tr.createNewVocabularyTerm('CACCGGA')
-vocabulary_term_INDEX1_CACCGGA.setDescription(None)
-vocabulary_term_INDEX1_CACCGGA.setLabel('DNA Adapter 30')
-vocabulary_term_INDEX1_CACCGGA.setOrdinal(73)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CACCGGA)
-          
-vocabulary_term_INDEX1_CACGATA = tr.createNewVocabularyTerm('CACGATA')
-vocabulary_term_INDEX1_CACGATA.setDescription(None)
-vocabulary_term_INDEX1_CACGATA.setLabel('DNA Adapter 31')
-vocabulary_term_INDEX1_CACGATA.setOrdinal(74)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CACGATA)
-          
-vocabulary_term_INDEX1_CACTCAA = tr.createNewVocabularyTerm('CACTCAA')
-vocabulary_term_INDEX1_CACTCAA.setDescription(None)
-vocabulary_term_INDEX1_CACTCAA.setLabel('DNA Adapter 32')
-vocabulary_term_INDEX1_CACTCAA.setOrdinal(75)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CACTCAA)
-          
-vocabulary_term_INDEX1_CAGGCGA = tr.createNewVocabularyTerm('CAGGCGA')
-vocabulary_term_INDEX1_CAGGCGA.setDescription(None)
-vocabulary_term_INDEX1_CAGGCGA.setLabel('DNA Adapter 33')
-vocabulary_term_INDEX1_CAGGCGA.setOrdinal(76)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CAGGCGA)
-          
-vocabulary_term_INDEX1_CATGGCA = tr.createNewVocabularyTerm('CATGGCA')
-vocabulary_term_INDEX1_CATGGCA.setDescription(None)
-vocabulary_term_INDEX1_CATGGCA.setLabel('DNA Adapter 34')
-vocabulary_term_INDEX1_CATGGCA.setOrdinal(77)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CATGGCA)
-          
-vocabulary_term_INDEX1_CATTTTA = tr.createNewVocabularyTerm('CATTTTA')
-vocabulary_term_INDEX1_CATTTTA.setDescription(None)
-vocabulary_term_INDEX1_CATTTTA.setLabel('DNA Adapter 35')
-vocabulary_term_INDEX1_CATTTTA.setOrdinal(78)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CATTTTA)
-          
-vocabulary_term_INDEX1_CCAACAA = tr.createNewVocabularyTerm('CCAACAA')
-vocabulary_term_INDEX1_CCAACAA.setDescription(None)
-vocabulary_term_INDEX1_CCAACAA.setLabel('DNA Adapter 36')
-vocabulary_term_INDEX1_CCAACAA.setOrdinal(79)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CCAACAA)
-          
-vocabulary_term_INDEX1_CGGAATA = tr.createNewVocabularyTerm('CGGAATA')
-vocabulary_term_INDEX1_CGGAATA.setDescription(None)
-vocabulary_term_INDEX1_CGGAATA.setLabel('DNA Adapter 37')
-vocabulary_term_INDEX1_CGGAATA.setOrdinal(80)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CGGAATA)
-          
-vocabulary_term_INDEX1_CTAGCTA = tr.createNewVocabularyTerm('CTAGCTA')
-vocabulary_term_INDEX1_CTAGCTA.setDescription(None)
-vocabulary_term_INDEX1_CTAGCTA.setLabel('DNA Adapter 38')
-vocabulary_term_INDEX1_CTAGCTA.setOrdinal(81)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CTAGCTA)
-          
-vocabulary_term_INDEX1_CTATACA = tr.createNewVocabularyTerm('CTATACA')
-vocabulary_term_INDEX1_CTATACA.setDescription(None)
-vocabulary_term_INDEX1_CTATACA.setLabel('DNA Adapter 39')
-vocabulary_term_INDEX1_CTATACA.setOrdinal(82)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CTATACA)
-          
-vocabulary_term_INDEX1_CTCAGAA = tr.createNewVocabularyTerm('CTCAGAA')
-vocabulary_term_INDEX1_CTCAGAA.setDescription(None)
-vocabulary_term_INDEX1_CTCAGAA.setLabel('DNA Adapter 40')
-vocabulary_term_INDEX1_CTCAGAA.setOrdinal(83)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_CTCAGAA)
-          
-vocabulary_term_INDEX1_GACGACA = tr.createNewVocabularyTerm('GACGACA')
-vocabulary_term_INDEX1_GACGACA.setDescription(None)
-vocabulary_term_INDEX1_GACGACA.setLabel('DNA Adapter 41')
-vocabulary_term_INDEX1_GACGACA.setOrdinal(84)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_GACGACA)
-          
-vocabulary_term_INDEX1_TAATCGA = tr.createNewVocabularyTerm('TAATCGA')
-vocabulary_term_INDEX1_TAATCGA.setDescription(None)
-vocabulary_term_INDEX1_TAATCGA.setLabel('DNA Adapter 42')
-vocabulary_term_INDEX1_TAATCGA.setOrdinal(85)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TAATCGA)
-          
-vocabulary_term_INDEX1_TACAGCA = tr.createNewVocabularyTerm('TACAGCA')
-vocabulary_term_INDEX1_TACAGCA.setDescription(None)
-vocabulary_term_INDEX1_TACAGCA.setLabel('DNA Adapter 43')
-vocabulary_term_INDEX1_TACAGCA.setOrdinal(86)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TACAGCA)
-          
-vocabulary_term_INDEX1_TATAATA = tr.createNewVocabularyTerm('TATAATA')
-vocabulary_term_INDEX1_TATAATA.setDescription(None)
-vocabulary_term_INDEX1_TATAATA.setLabel('DNA Adapter 44')
-vocabulary_term_INDEX1_TATAATA.setOrdinal(87)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TATAATA)
-          
-vocabulary_term_INDEX1_TCATTCA = tr.createNewVocabularyTerm('TCATTCA')
-vocabulary_term_INDEX1_TCATTCA.setDescription(None)
-vocabulary_term_INDEX1_TCATTCA.setLabel('DNA Adapter 45')
-vocabulary_term_INDEX1_TCATTCA.setOrdinal(88)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TCATTCA)
-          
-vocabulary_term_INDEX1_TCCCGAA = tr.createNewVocabularyTerm('TCCCGAA')
-vocabulary_term_INDEX1_TCCCGAA.setDescription(None)
-vocabulary_term_INDEX1_TCCCGAA.setLabel('DNA Adapter 46')
-vocabulary_term_INDEX1_TCCCGAA.setOrdinal(89)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TCCCGAA)
-          
-vocabulary_term_INDEX1_TCGAAGA = tr.createNewVocabularyTerm('TCGAAGA')
-vocabulary_term_INDEX1_TCGAAGA.setDescription(None)
-vocabulary_term_INDEX1_TCGAAGA.setLabel('DNA Adapter 47')
-vocabulary_term_INDEX1_TCGAAGA.setOrdinal(90)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TCGAAGA)
-          
-vocabulary_term_INDEX1_TCGGCAA = tr.createNewVocabularyTerm('TCGGCAA')
-vocabulary_term_INDEX1_TCGGCAA.setDescription(None)
-vocabulary_term_INDEX1_TCGGCAA.setLabel('DNA Adapter 48')
-vocabulary_term_INDEX1_TCGGCAA.setOrdinal(91)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_TCGGCAA)
-          
-vocabulary_term_INDEX1_AGTCAAC = tr.createNewVocabularyTerm('AGTCAAC')
-vocabulary_term_INDEX1_AGTCAAC.setDescription(None)
-vocabulary_term_INDEX1_AGTCAAC.setLabel('Index13 AGTCAAC')
-vocabulary_term_INDEX1_AGTCAAC.setOrdinal(92)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_AGTCAAC)
-          
-vocabulary_term_INDEX1_AATGCGA = tr.createNewVocabularyTerm('AATGCGA')
-vocabulary_term_INDEX1_AATGCGA.setDescription(None)
-vocabulary_term_INDEX1_AATGCGA.setLabel('Lib AATGCGA')
-vocabulary_term_INDEX1_AATGCGA.setOrdinal(93)
-vocabulary_INDEX1.addTerm(vocabulary_term_INDEX1_AATGCGA)
-    
-vocabulary_INDEX2 = tr.getOrCreateNewVocabulary('INDEX2')
-vocabulary_INDEX2.setDescription('Index 2 for Illumina Dual Indexing')
-vocabulary_INDEX2.setUrlTemplate(None)
-vocabulary_INDEX2.setManagedInternally(False)
-vocabulary_INDEX2.setChosenFromList(True)
-          
-vocabulary_term_INDEX2_NONE = tr.createNewVocabularyTerm('NONE')
-vocabulary_term_INDEX2_NONE.setDescription('No Index')
-vocabulary_term_INDEX2_NONE.setLabel('None')
-vocabulary_term_INDEX2_NONE.setOrdinal(1)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_NONE)
-          
-vocabulary_term_INDEX2_TAGATCGC = tr.createNewVocabularyTerm('TAGATCGC')
-vocabulary_term_INDEX2_TAGATCGC.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_TAGATCGC.setLabel('Index2 (i5) N501 TAGATCGC')
-vocabulary_term_INDEX2_TAGATCGC.setOrdinal(2)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_TAGATCGC)
-          
-vocabulary_term_INDEX2_CTCTCTAT = tr.createNewVocabularyTerm('CTCTCTAT')
-vocabulary_term_INDEX2_CTCTCTAT.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_CTCTCTAT.setLabel('Index2 (i5) N502 CTCTCTAT')
-vocabulary_term_INDEX2_CTCTCTAT.setOrdinal(3)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_CTCTCTAT)
-          
-vocabulary_term_INDEX2_TATCCTCT = tr.createNewVocabularyTerm('TATCCTCT')
-vocabulary_term_INDEX2_TATCCTCT.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_TATCCTCT.setLabel('Index2 (i5) N503 TATCCTCT')
-vocabulary_term_INDEX2_TATCCTCT.setOrdinal(4)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_TATCCTCT)
-          
-vocabulary_term_INDEX2_AGAGTAGA = tr.createNewVocabularyTerm('AGAGTAGA')
-vocabulary_term_INDEX2_AGAGTAGA.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_AGAGTAGA.setLabel('Index2 (i5) N504 AGAGTAGA')
-vocabulary_term_INDEX2_AGAGTAGA.setOrdinal(5)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_AGAGTAGA)
-          
-vocabulary_term_INDEX2_GTAAGGAG = tr.createNewVocabularyTerm('GTAAGGAG')
-vocabulary_term_INDEX2_GTAAGGAG.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_GTAAGGAG.setLabel('Index2 (i5) N505 GTAAGGAG')
-vocabulary_term_INDEX2_GTAAGGAG.setOrdinal(6)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_GTAAGGAG)
-          
-vocabulary_term_INDEX2_ACTGCATA = tr.createNewVocabularyTerm('ACTGCATA')
-vocabulary_term_INDEX2_ACTGCATA.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_ACTGCATA.setLabel('Index2 (i5) N506 ACTGCATA')
-vocabulary_term_INDEX2_ACTGCATA.setOrdinal(7)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_ACTGCATA)
-          
-vocabulary_term_INDEX2_AAGGAGTA = tr.createNewVocabularyTerm('AAGGAGTA')
-vocabulary_term_INDEX2_AAGGAGTA.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_AAGGAGTA.setLabel('Index2 (i5) N507 AAGGAGTA')
-vocabulary_term_INDEX2_AAGGAGTA.setOrdinal(8)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_AAGGAGTA)
-          
-vocabulary_term_INDEX2_CTAAGCCT = tr.createNewVocabularyTerm('CTAAGCCT')
-vocabulary_term_INDEX2_CTAAGCCT.setDescription('Nextera DNA')
-vocabulary_term_INDEX2_CTAAGCCT.setLabel('Index2 (i5) N508 CTAAGCCT')
-vocabulary_term_INDEX2_CTAAGCCT.setOrdinal(9)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_CTAAGCCT)
-          
-vocabulary_term_INDEX2_NOINDEX = tr.createNewVocabularyTerm('NOINDEX')
-vocabulary_term_INDEX2_NOINDEX.setDescription(None)
-vocabulary_term_INDEX2_NOINDEX.setLabel(None)
-vocabulary_term_INDEX2_NOINDEX.setOrdinal(10)
-vocabulary_INDEX2.addTerm(vocabulary_term_INDEX2_NOINDEX)
-    
-vocabulary_KIT = tr.getOrCreateNewVocabulary('KIT')
-vocabulary_KIT.setDescription('Illumina Kit used for preparation')
-vocabulary_KIT.setUrlTemplate(None)
-vocabulary_KIT.setManagedInternally(False)
-vocabulary_KIT.setChosenFromList(True)
-          
-vocabulary_term_KIT_CHIP_SEQ_SAMPLE_PREP = tr.createNewVocabularyTerm('CHIP_SEQ_SAMPLE_PREP')
-vocabulary_term_KIT_CHIP_SEQ_SAMPLE_PREP.setDescription(None)
-vocabulary_term_KIT_CHIP_SEQ_SAMPLE_PREP.setLabel('ChIP-Seq Sample Preparation Kit')
-vocabulary_term_KIT_CHIP_SEQ_SAMPLE_PREP.setOrdinal(1)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_CHIP_SEQ_SAMPLE_PREP)
-          
-vocabulary_term_KIT_NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1 = tr.createNewVocabularyTerm('NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1')
-vocabulary_term_KIT_NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1.setDescription(None)
-vocabulary_term_KIT_NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1.setLabel('NEB Genomic DNA Sample Preparation Kit')
-vocabulary_term_KIT_NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1.setOrdinal(2)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_NEBNEXT_DNA_SAMPLE_PREP_MASTER_MIX_SET1)
-          
-vocabulary_term_KIT_NEB_CHIP_SEQ_SAMPLE_PREPARATION_KIT = tr.createNewVocabularyTerm('NEB_CHIP_SEQ_SAMPLE_PREPARATION_KIT')
-vocabulary_term_KIT_NEB_CHIP_SEQ_SAMPLE_PREPARATION_KIT.setDescription(None)
-vocabulary_term_KIT_NEB_CHIP_SEQ_SAMPLE_PREPARATION_KIT.setLabel('NEB_ChIP_Seq_Sample_Preparation_Kit')
-vocabulary_term_KIT_NEB_CHIP_SEQ_SAMPLE_PREPARATION_KIT.setOrdinal(3)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_NEB_CHIP_SEQ_SAMPLE_PREPARATION_KIT)
-          
-vocabulary_term_KIT_GENOMICDNA_SAMPLE_PREP = tr.createNewVocabularyTerm('GENOMICDNA_SAMPLE_PREP')
-vocabulary_term_KIT_GENOMICDNA_SAMPLE_PREP.setDescription(None)
-vocabulary_term_KIT_GENOMICDNA_SAMPLE_PREP.setLabel('Illumina Genomic DNA Sample Preparation Kit')
-vocabulary_term_KIT_GENOMICDNA_SAMPLE_PREP.setOrdinal(4)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_GENOMICDNA_SAMPLE_PREP)
-          
-vocabulary_term_KIT_PAIRED_END_DNA_SAMPLE_PREP = tr.createNewVocabularyTerm('PAIRED_END_DNA_SAMPLE_PREP')
-vocabulary_term_KIT_PAIRED_END_DNA_SAMPLE_PREP.setDescription(None)
-vocabulary_term_KIT_PAIRED_END_DNA_SAMPLE_PREP.setLabel('Paired End DNA Sample Prep Oligo Kit')
-vocabulary_term_KIT_PAIRED_END_DNA_SAMPLE_PREP.setOrdinal(5)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_PAIRED_END_DNA_SAMPLE_PREP)
-          
-vocabulary_term_KIT_MRNA_SEQ_SAMPLE_PREP = tr.createNewVocabularyTerm('MRNA_SEQ_SAMPLE_PREP')
-vocabulary_term_KIT_MRNA_SEQ_SAMPLE_PREP.setDescription(None)
-vocabulary_term_KIT_MRNA_SEQ_SAMPLE_PREP.setLabel('mRNA-Seq Sample Preparation Kit')
-vocabulary_term_KIT_MRNA_SEQ_SAMPLE_PREP.setOrdinal(6)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_MRNA_SEQ_SAMPLE_PREP)
-          
-vocabulary_term_KIT_RIBOZERO_SCRIPTSEQ_MRNASEQ_KIT = tr.createNewVocabularyTerm('RIBOZERO_SCRIPTSEQ_MRNA-SEQ_KIT')
-vocabulary_term_KIT_RIBOZERO_SCRIPTSEQ_MRNASEQ_KIT.setDescription(None)
-vocabulary_term_KIT_RIBOZERO_SCRIPTSEQ_MRNASEQ_KIT.setLabel('RiboZero ScriptSeq mRNA-Seq_Epicentre-kit')
-vocabulary_term_KIT_RIBOZERO_SCRIPTSEQ_MRNASEQ_KIT.setOrdinal(7)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_RIBOZERO_SCRIPTSEQ_MRNASEQ_KIT)
-          
-vocabulary_term_KIT_POLYA_SCRIPTSEQ_MRNASEQ_KIT = tr.createNewVocabularyTerm('POLYA_SCRIPTSEQ_MRNA-SEQ_KIT')
-vocabulary_term_KIT_POLYA_SCRIPTSEQ_MRNASEQ_KIT.setDescription(None)
-vocabulary_term_KIT_POLYA_SCRIPTSEQ_MRNASEQ_KIT.setLabel('PolyA(Beads) ScriptSeq mRNA-Seq_Epicentre-kit')
-vocabulary_term_KIT_POLYA_SCRIPTSEQ_MRNASEQ_KIT.setOrdinal(8)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_POLYA_SCRIPTSEQ_MRNASEQ_KIT)
-          
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KITS = tr.createNewVocabularyTerm('NEXTERA_DNA_SAMPLE_PREP_KITS')
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KITS.setDescription(None)
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KITS.setLabel('Nextera Genomic DNA Sample Preparation Kit BufferLMW(Epicentre)')
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KITS.setOrdinal(9)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KITS)
-          
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KIT_BUFFER_HMW = tr.createNewVocabularyTerm('NEXTERA_DNA_SAMPLE_PREP_KIT_BUFFER_HMW')
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KIT_BUFFER_HMW.setDescription(None)
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KIT_BUFFER_HMW.setLabel('Nextera Genomic DNA Sample Preparation Kit BufferHMW(Epicentre)')
-vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KIT_BUFFER_HMW.setOrdinal(10)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_NEXTERA_DNA_SAMPLE_PREP_KIT_BUFFER_HMW)
-          
-vocabulary_term_KIT_AGILENT_SURESELECT_ENRICHMENTSYSTEM = tr.createNewVocabularyTerm('AGILENT_SURESELECT_ENRICHMENTSYSTEM')
-vocabulary_term_KIT_AGILENT_SURESELECT_ENRICHMENTSYSTEM.setDescription(None)
-vocabulary_term_KIT_AGILENT_SURESELECT_ENRICHMENTSYSTEM.setLabel('Agilent_SureSelect_EnrichmentSystem')
-vocabulary_term_KIT_AGILENT_SURESELECT_ENRICHMENTSYSTEM.setOrdinal(11)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_AGILENT_SURESELECT_ENRICHMENTSYSTEM)
-          
-vocabulary_term_KIT_TRUSEQRNA_SAMPLE_PREP_KIT = tr.createNewVocabularyTerm('TRUSEQRNA_SAMPLE_PREP_KIT')
-vocabulary_term_KIT_TRUSEQRNA_SAMPLE_PREP_KIT.setDescription(None)
-vocabulary_term_KIT_TRUSEQRNA_SAMPLE_PREP_KIT.setLabel('TruSeq_RNA_SamplePrepKit_Illumina')
-vocabulary_term_KIT_TRUSEQRNA_SAMPLE_PREP_KIT.setOrdinal(12)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_TRUSEQRNA_SAMPLE_PREP_KIT)
-          
-vocabulary_term_KIT_TRUESEQ_CHIP_SAMPLE_PREP_KIT = tr.createNewVocabularyTerm('TRUESEQ_CHIP_SAMPLE_PREP_KIT')
-vocabulary_term_KIT_TRUESEQ_CHIP_SAMPLE_PREP_KIT.setDescription(None)
-vocabulary_term_KIT_TRUESEQ_CHIP_SAMPLE_PREP_KIT.setLabel(None)
-vocabulary_term_KIT_TRUESEQ_CHIP_SAMPLE_PREP_KIT.setOrdinal(13)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_TRUESEQ_CHIP_SAMPLE_PREP_KIT)
-          
-vocabulary_term_KIT_TRUSEQ_DNA_SAMPLE_PREP_KIT = tr.createNewVocabularyTerm('TRUSEQ_DNA_SAMPLE_PREP_KIT')
-vocabulary_term_KIT_TRUSEQ_DNA_SAMPLE_PREP_KIT.setDescription(None)
-vocabulary_term_KIT_TRUSEQ_DNA_SAMPLE_PREP_KIT.setLabel('TruSeq_DNA_SamplePrepKit_Illumina')
-vocabulary_term_KIT_TRUSEQ_DNA_SAMPLE_PREP_KIT.setOrdinal(14)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_TRUSEQ_DNA_SAMPLE_PREP_KIT)
-          
-vocabulary_term_KIT_NONE = tr.createNewVocabularyTerm('NONE')
-vocabulary_term_KIT_NONE.setDescription(None)
-vocabulary_term_KIT_NONE.setLabel('None (Already prepared)')
-vocabulary_term_KIT_NONE.setOrdinal(15)
-vocabulary_KIT.addTerm(vocabulary_term_KIT_NONE)
-    
-vocabulary_MACS_VERSION = tr.getOrCreateNewVocabulary('MACS_VERSION')
-vocabulary_MACS_VERSION.setDescription('Used MACS version for Peak Calling')
-vocabulary_MACS_VERSION.setUrlTemplate(None)
-vocabulary_MACS_VERSION.setManagedInternally(False)
-vocabulary_MACS_VERSION.setChosenFromList(True)
-          
-vocabulary_term_MACS_VERSION_140RC2 = tr.createNewVocabularyTerm('1.4.0RC2')
-vocabulary_term_MACS_VERSION_140RC2.setDescription(None)
-vocabulary_term_MACS_VERSION_140RC2.setLabel('macs14 1.4.0rc2 20110214 (Valentine)')
-vocabulary_term_MACS_VERSION_140RC2.setOrdinal(1)
-vocabulary_MACS_VERSION.addTerm(vocabulary_term_MACS_VERSION_140RC2)
-          
-vocabulary_term_MACS_VERSION_1371 = tr.createNewVocabularyTerm('1.3.7.1')
-vocabulary_term_MACS_VERSION_1371.setDescription(None)
-vocabulary_term_MACS_VERSION_1371.setLabel('macs 1.3.7.1 (Oktoberfest, bug fixed #1)')
-vocabulary_term_MACS_VERSION_1371.setOrdinal(2)
-vocabulary_MACS_VERSION.addTerm(vocabulary_term_MACS_VERSION_1371)
-    
-vocabulary_MISMATCH_IN_INDEX = tr.getOrCreateNewVocabulary('MISMATCH_IN_INDEX')
-vocabulary_MISMATCH_IN_INDEX.setDescription('Mismatch in Index allowed')
-vocabulary_MISMATCH_IN_INDEX.setUrlTemplate(None)
-vocabulary_MISMATCH_IN_INDEX.setManagedInternally(False)
-vocabulary_MISMATCH_IN_INDEX.setChosenFromList(True)
-          
-vocabulary_term_MISMATCH_IN_INDEX_NONE = tr.createNewVocabularyTerm('NONE')
-vocabulary_term_MISMATCH_IN_INDEX_NONE.setDescription(None)
-vocabulary_term_MISMATCH_IN_INDEX_NONE.setLabel(None)
-vocabulary_term_MISMATCH_IN_INDEX_NONE.setOrdinal(1)
-vocabulary_MISMATCH_IN_INDEX.addTerm(vocabulary_term_MISMATCH_IN_INDEX_NONE)
-          
-vocabulary_term_MISMATCH_IN_INDEX_ONE = tr.createNewVocabularyTerm('ONE')
-vocabulary_term_MISMATCH_IN_INDEX_ONE.setDescription(None)
-vocabulary_term_MISMATCH_IN_INDEX_ONE.setLabel(None)
-vocabulary_term_MISMATCH_IN_INDEX_ONE.setOrdinal(2)
-vocabulary_MISMATCH_IN_INDEX.addTerm(vocabulary_term_MISMATCH_IN_INDEX_ONE)
-    
-vocabulary_NANO_DROP = tr.getOrCreateNewVocabulary('NANO_DROP')
-vocabulary_NANO_DROP.setDescription('Device for measuring the total amount of genetic material contained in the probe')
-vocabulary_NANO_DROP.setUrlTemplate(None)
-vocabulary_NANO_DROP.setManagedInternally(False)
-vocabulary_NANO_DROP.setChosenFromList(True)
-          
-vocabulary_term_NANO_DROP_CONCND3300 = tr.createNewVocabularyTerm('CONCND3300')
-vocabulary_term_NANO_DROP_CONCND3300.setDescription(None)
-vocabulary_term_NANO_DROP_CONCND3300.setLabel('Conc Nano Drop 3300')
-vocabulary_term_NANO_DROP_CONCND3300.setOrdinal(1)
-vocabulary_NANO_DROP.addTerm(vocabulary_term_NANO_DROP_CONCND3300)
-          
-vocabulary_term_NANO_DROP_CONCND1000 = tr.createNewVocabularyTerm('CONCND1000')
-vocabulary_term_NANO_DROP_CONCND1000.setDescription(None)
-vocabulary_term_NANO_DROP_CONCND1000.setLabel('Conc Nano Drop 1000')
-vocabulary_term_NANO_DROP_CONCND1000.setOrdinal(2)
-vocabulary_NANO_DROP.addTerm(vocabulary_term_NANO_DROP_CONCND1000)
-          
-vocabulary_term_NANO_DROP_CONCND2000 = tr.createNewVocabularyTerm('CONCND2000')
-vocabulary_term_NANO_DROP_CONCND2000.setDescription(None)
-vocabulary_term_NANO_DROP_CONCND2000.setLabel('Conc Nano Drop 2000')
-vocabulary_term_NANO_DROP_CONCND2000.setOrdinal(3)
-vocabulary_NANO_DROP.addTerm(vocabulary_term_NANO_DROP_CONCND2000)
-    
-vocabulary_NCBI_TAXONOMY = tr.getOrCreateNewVocabulary('NCBI_TAXONOMY')
-vocabulary_NCBI_TAXONOMY.setDescription(None)
-vocabulary_NCBI_TAXONOMY.setUrlTemplate('http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=$term$')
-vocabulary_NCBI_TAXONOMY.setManagedInternally(False)
-vocabulary_NCBI_TAXONOMY.setChosenFromList(True)
-          
-vocabulary_term_NCBI_TAXONOMY_10090 = tr.createNewVocabularyTerm('10090')
-vocabulary_term_NCBI_TAXONOMY_10090.setDescription('Genbank common name: house mouse\ Inherited blast name: rodents')
-vocabulary_term_NCBI_TAXONOMY_10090.setLabel('Mus musculus')
-vocabulary_term_NCBI_TAXONOMY_10090.setOrdinal(1)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_10090)
-          
-vocabulary_term_NCBI_TAXONOMY_9606 = tr.createNewVocabularyTerm('9606')
-vocabulary_term_NCBI_TAXONOMY_9606.setDescription('Genbank common name: human\ Inherited blast name: primates')
-vocabulary_term_NCBI_TAXONOMY_9606.setLabel('Homo sapiens')
-vocabulary_term_NCBI_TAXONOMY_9606.setOrdinal(2)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_9606)
-          
-vocabulary_term_NCBI_TAXONOMY_7227 = tr.createNewVocabularyTerm('7227')
-vocabulary_term_NCBI_TAXONOMY_7227.setDescription('Genbank common name: fruit fly\ Inherited blast name: flies')
-vocabulary_term_NCBI_TAXONOMY_7227.setLabel('Drosophila melanogaster')
-vocabulary_term_NCBI_TAXONOMY_7227.setOrdinal(3)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_7227)
-          
-vocabulary_term_NCBI_TAXONOMY_6239 = tr.createNewVocabularyTerm('6239')
-vocabulary_term_NCBI_TAXONOMY_6239.setDescription('Inherited blast name: nematodes')
-vocabulary_term_NCBI_TAXONOMY_6239.setLabel('Caenorhabditis elegans')
-vocabulary_term_NCBI_TAXONOMY_6239.setOrdinal(4)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_6239)
-          
-vocabulary_term_NCBI_TAXONOMY_4932 = tr.createNewVocabularyTerm('4932')
-vocabulary_term_NCBI_TAXONOMY_4932.setDescription('Genbank common name: baker\'s yeast\ Inherited blast name: ascomycetes')
-vocabulary_term_NCBI_TAXONOMY_4932.setLabel('Saccharomyces cerevisiae')
-vocabulary_term_NCBI_TAXONOMY_4932.setOrdinal(5)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_4932)
-          
-vocabulary_term_NCBI_TAXONOMY_10116 = tr.createNewVocabularyTerm('10116')
-vocabulary_term_NCBI_TAXONOMY_10116.setDescription('Genbank common name: Norway rat\ Inherited blast name: rodents')
-vocabulary_term_NCBI_TAXONOMY_10116.setLabel('Rattus norvegicus')
-vocabulary_term_NCBI_TAXONOMY_10116.setOrdinal(6)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_10116)
-          
-vocabulary_term_NCBI_TAXONOMY_6669 = tr.createNewVocabularyTerm('6669')
-vocabulary_term_NCBI_TAXONOMY_6669.setDescription('Genbank common name: common water flea\ Inherited blast name: crustaceans')
-vocabulary_term_NCBI_TAXONOMY_6669.setLabel('Daphnia pulex')
-vocabulary_term_NCBI_TAXONOMY_6669.setOrdinal(7)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_6669)
-          
-vocabulary_term_NCBI_TAXONOMY_562 = tr.createNewVocabularyTerm('562')
-vocabulary_term_NCBI_TAXONOMY_562.setDescription('Inherited blast name: enterobacteria')
-vocabulary_term_NCBI_TAXONOMY_562.setLabel('Escherichia coli')
-vocabulary_term_NCBI_TAXONOMY_562.setOrdinal(8)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_562)
-          
-vocabulary_term_NCBI_TAXONOMY_623 = tr.createNewVocabularyTerm('623')
-vocabulary_term_NCBI_TAXONOMY_623.setDescription('Inherited blast name: enterobacteria')
-vocabulary_term_NCBI_TAXONOMY_623.setLabel('Shigella flexneri')
-vocabulary_term_NCBI_TAXONOMY_623.setOrdinal(9)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_623)
-          
-vocabulary_term_NCBI_TAXONOMY_10847 = tr.createNewVocabularyTerm('10847')
-vocabulary_term_NCBI_TAXONOMY_10847.setDescription('Inherited blast name: viruses')
-vocabulary_term_NCBI_TAXONOMY_10847.setLabel('Enterobacteria phage phiX174')
-vocabulary_term_NCBI_TAXONOMY_10847.setOrdinal(10)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_10847)
-          
-vocabulary_term_NCBI_TAXONOMY_190650 = tr.createNewVocabularyTerm('190650')
-vocabulary_term_NCBI_TAXONOMY_190650.setDescription('Inherited blast name: a-proteobacteria')
-vocabulary_term_NCBI_TAXONOMY_190650.setLabel('Caulobacter crescentus CB15')
-vocabulary_term_NCBI_TAXONOMY_190650.setOrdinal(11)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_190650)
-          
-vocabulary_term_NCBI_TAXONOMY_8113 = tr.createNewVocabularyTerm('8113')
-vocabulary_term_NCBI_TAXONOMY_8113.setDescription('Genbank common name: cichlids\ Inherited blast name: bony fishes')
-vocabulary_term_NCBI_TAXONOMY_8113.setLabel('Cichlidae')
-vocabulary_term_NCBI_TAXONOMY_8113.setOrdinal(12)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_8113)
-          
-vocabulary_term_NCBI_TAXONOMY_481459 = tr.createNewVocabularyTerm('481459')
-vocabulary_term_NCBI_TAXONOMY_481459.setDescription('Genbank common name: three-spined stickleback\ Inherited blast name: bony fishes')
-vocabulary_term_NCBI_TAXONOMY_481459.setLabel('Gasterosteus aculeatus aculeatus')
-vocabulary_term_NCBI_TAXONOMY_481459.setOrdinal(13)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_481459)
-          
-vocabulary_term_NCBI_TAXONOMY_282301 = tr.createNewVocabularyTerm('282301')
-vocabulary_term_NCBI_TAXONOMY_282301.setDescription('Inherited blast name: flatworms')
-vocabulary_term_NCBI_TAXONOMY_282301.setLabel('Macrostomum lignano')
-vocabulary_term_NCBI_TAXONOMY_282301.setOrdinal(14)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_282301)
-          
-vocabulary_term_NCBI_TAXONOMY_99287 = tr.createNewVocabularyTerm('99287')
-vocabulary_term_NCBI_TAXONOMY_99287.setDescription('Inherited blast name: enterobacteria')
-vocabulary_term_NCBI_TAXONOMY_99287.setLabel('Salmonella enterica subsp. enterica serovar Typhimurium str. LT2')
-vocabulary_term_NCBI_TAXONOMY_99287.setOrdinal(15)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_99287)
-          
-vocabulary_term_NCBI_TAXONOMY_4896 = tr.createNewVocabularyTerm('4896')
-vocabulary_term_NCBI_TAXONOMY_4896.setDescription('Genbank common name: fission yeast\ Inherited blast name: ascomycetes')
-vocabulary_term_NCBI_TAXONOMY_4896.setLabel('Schizosaccharomyces pombe')
-vocabulary_term_NCBI_TAXONOMY_4896.setOrdinal(16)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_4896)
-          
-vocabulary_term_NCBI_TAXONOMY_4897 = tr.createNewVocabularyTerm('4897')
-vocabulary_term_NCBI_TAXONOMY_4897.setDescription('Inherited blast name: ascomycetes')
-vocabulary_term_NCBI_TAXONOMY_4897.setLabel('Schizosaccharomyces japonicus')
-vocabulary_term_NCBI_TAXONOMY_4897.setOrdinal(17)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_4897)
-          
-vocabulary_term_NCBI_TAXONOMY_7955 = tr.createNewVocabularyTerm('7955')
-vocabulary_term_NCBI_TAXONOMY_7955.setDescription('Genbank common name: zebrafish\ Inherited blast name: bony fishes')
-vocabulary_term_NCBI_TAXONOMY_7955.setLabel('Danio rerio')
-vocabulary_term_NCBI_TAXONOMY_7955.setOrdinal(18)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_7955)
-          
-vocabulary_term_NCBI_TAXONOMY_3702 = tr.createNewVocabularyTerm('3702')
-vocabulary_term_NCBI_TAXONOMY_3702.setDescription('Genbank common name: thale cress\ Inherited blast name: eudicots')
-vocabulary_term_NCBI_TAXONOMY_3702.setLabel('Arabidopsis thaliana')
-vocabulary_term_NCBI_TAXONOMY_3702.setOrdinal(19)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_3702)
-          
-vocabulary_term_NCBI_TAXONOMY_225322 = tr.createNewVocabularyTerm('225322')
-vocabulary_term_NCBI_TAXONOMY_225322.setDescription('Bacterium which infects Daphnia\ Pasteuria ramosa Metchnikoff 1888 (Approved Lists 1980) emend. Starr et al. 1986\ Ebert D, Rainey P, Embley TM, Scholz D. Development, life\ cycle, ultrastructure and phylogenetic position of Pasteuria ramosa Metchnikoff 1888: rediscovery of an obligate \ endoparasite of Daphnia magna Straus. Philos Trans R Soc \ Lond Ser B. 1996;351:1689.')
-vocabulary_term_NCBI_TAXONOMY_225322.setLabel('Pasteuria ramosa')
-vocabulary_term_NCBI_TAXONOMY_225322.setOrdinal(20)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_225322)
-          
-vocabulary_term_NCBI_TAXONOMY_9913 = tr.createNewVocabularyTerm('9913')
-vocabulary_term_NCBI_TAXONOMY_9913.setDescription('Genbank common name: cattle\ Inherited blast name: even-toed ungulates')
-vocabulary_term_NCBI_TAXONOMY_9913.setLabel('Bos taurus')
-vocabulary_term_NCBI_TAXONOMY_9913.setOrdinal(21)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_9913)
-          
-vocabulary_term_NCBI_TAXONOMY_9823 = tr.createNewVocabularyTerm('9823')
-vocabulary_term_NCBI_TAXONOMY_9823.setDescription('Genbank common name: pig\ Inherited blast name: even-toed ungulates')
-vocabulary_term_NCBI_TAXONOMY_9823.setLabel('Sus scrofa')
-vocabulary_term_NCBI_TAXONOMY_9823.setOrdinal(22)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_9823)
-          
-vocabulary_term_NCBI_TAXONOMY_9940 = tr.createNewVocabularyTerm('9940')
-vocabulary_term_NCBI_TAXONOMY_9940.setDescription('Genbank common name: sheep\ Inherited blast name: even-toed ungulates')
-vocabulary_term_NCBI_TAXONOMY_9940.setLabel('Ovis aries')
-vocabulary_term_NCBI_TAXONOMY_9940.setOrdinal(23)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_9940)
-          
-vocabulary_term_NCBI_TAXONOMY_9925 = tr.createNewVocabularyTerm('9925')
-vocabulary_term_NCBI_TAXONOMY_9925.setDescription('Genbank common name: goat\ Inherited blast name: even-toed ungulates')
-vocabulary_term_NCBI_TAXONOMY_9925.setLabel('Capra hircus')
-vocabulary_term_NCBI_TAXONOMY_9925.setOrdinal(24)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_9925)
-          
-vocabulary_term_NCBI_TAXONOMY_8153 = tr.createNewVocabularyTerm('8153')
-vocabulary_term_NCBI_TAXONOMY_8153.setDescription('Common name: cichlid fish')
-vocabulary_term_NCBI_TAXONOMY_8153.setLabel('Haplochromis burtoni')
-vocabulary_term_NCBI_TAXONOMY_8153.setOrdinal(25)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_8153)
-          
-vocabulary_term_NCBI_TAXONOMY_61818 = tr.createNewVocabularyTerm('61818')
-vocabulary_term_NCBI_TAXONOMY_61818.setDescription('Common name: bony fish')
-vocabulary_term_NCBI_TAXONOMY_61818.setLabel('Amphilophus (nicaraguan)')
-vocabulary_term_NCBI_TAXONOMY_61818.setOrdinal(26)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_61818)
-          
-vocabulary_term_NCBI_TAXONOMY_35525 = tr.createNewVocabularyTerm('35525')
-vocabulary_term_NCBI_TAXONOMY_35525.setDescription('Common name: water flea')
-vocabulary_term_NCBI_TAXONOMY_35525.setLabel('Daphnia Magna')
-vocabulary_term_NCBI_TAXONOMY_35525.setOrdinal(27)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_35525)
-          
-vocabulary_term_NCBI_TAXONOMY_4081 = tr.createNewVocabularyTerm('4081')
-vocabulary_term_NCBI_TAXONOMY_4081.setDescription('Common Name: tomato')
-vocabulary_term_NCBI_TAXONOMY_4081.setLabel('Solanum lycopersicum (tomato)')
-vocabulary_term_NCBI_TAXONOMY_4081.setOrdinal(28)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_4081)
-          
-vocabulary_term_NCBI_TAXONOMY_13068 = tr.createNewVocabularyTerm('13068')
-vocabulary_term_NCBI_TAXONOMY_13068.setDescription('Common name: earwig')
-vocabulary_term_NCBI_TAXONOMY_13068.setLabel('Forficula auricularia (earwig)')
-vocabulary_term_NCBI_TAXONOMY_13068.setOrdinal(29)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_13068)
-          
-vocabulary_term_NCBI_TAXONOMY_3569 = tr.createNewVocabularyTerm('3569')
-vocabulary_term_NCBI_TAXONOMY_3569.setDescription('Genbank common name: clove pink')
-vocabulary_term_NCBI_TAXONOMY_3569.setLabel('Dianthus')
-vocabulary_term_NCBI_TAXONOMY_3569.setOrdinal(30)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_3569)
-          
-vocabulary_term_NCBI_TAXONOMY_3573 = tr.createNewVocabularyTerm('3573')
-vocabulary_term_NCBI_TAXONOMY_3573.setDescription('Genbank common name: campions\ Inherited blast name: eudicots')
-vocabulary_term_NCBI_TAXONOMY_3573.setLabel('Silene')
-vocabulary_term_NCBI_TAXONOMY_3573.setOrdinal(31)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_3573)
-          
-vocabulary_term_NCBI_TAXONOMY_32644 = tr.createNewVocabularyTerm('32644')
-vocabulary_term_NCBI_TAXONOMY_32644.setDescription('Inherited blast name: unclassified')
-vocabulary_term_NCBI_TAXONOMY_32644.setLabel('unidentified')
-vocabulary_term_NCBI_TAXONOMY_32644.setOrdinal(32)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_32644)
-          
-vocabulary_term_NCBI_TAXONOMY_0000 = tr.createNewVocabularyTerm('0000')
-vocabulary_term_NCBI_TAXONOMY_0000.setDescription(None)
-vocabulary_term_NCBI_TAXONOMY_0000.setLabel('OTHER')
-vocabulary_term_NCBI_TAXONOMY_0000.setOrdinal(33)
-vocabulary_NCBI_TAXONOMY.addTerm(vocabulary_term_NCBI_TAXONOMY_0000)
-    
-vocabulary_PIPELINE_VERSION = tr.getOrCreateNewVocabulary('PIPELINE_VERSION')
-vocabulary_PIPELINE_VERSION.setDescription('With which pipeline version has the data been analyzed?')
-vocabulary_PIPELINE_VERSION.setUrlTemplate(None)
-vocabulary_PIPELINE_VERSION.setManagedInternally(False)
-vocabulary_PIPELINE_VERSION.setChosenFromList(True)
-          
-vocabulary_term_PIPELINE_VERSION_11348 = tr.createNewVocabularyTerm('1.13.48')
-vocabulary_term_PIPELINE_VERSION_11348.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_11348.setLabel('RTA 1.13.48')
-vocabulary_term_PIPELINE_VERSION_11348.setOrdinal(1)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_11348)
-          
-vocabulary_term_PIPELINE_VERSION_11242 = tr.createNewVocabularyTerm('1.12.4.2')
-vocabulary_term_PIPELINE_VERSION_11242.setDescription('Real Time Analysis in combination with HCS 1.4.8')
-vocabulary_term_PIPELINE_VERSION_11242.setLabel('RTA 1.12.4.2 (HiSeq 2000)')
-vocabulary_term_PIPELINE_VERSION_11242.setOrdinal(2)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_11242)
-          
-vocabulary_term_PIPELINE_VERSION_112 = tr.createNewVocabularyTerm('1.12')
-vocabulary_term_PIPELINE_VERSION_112.setDescription('Real Time Analysis 1.12 HiSeq 2000')
-vocabulary_term_PIPELINE_VERSION_112.setLabel('RTA 1.12')
-vocabulary_term_PIPELINE_VERSION_112.setOrdinal(3)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_112)
-          
-vocabulary_term_PIPELINE_VERSION_19 = tr.createNewVocabularyTerm('1.9')
-vocabulary_term_PIPELINE_VERSION_19.setDescription('Real Time Analysis 1.9')
-vocabulary_term_PIPELINE_VERSION_19.setLabel('RTA 1.9 (GA IIx)')
-vocabulary_term_PIPELINE_VERSION_19.setOrdinal(4)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_19)
-          
-vocabulary_term_PIPELINE_VERSION_RTA_18 = tr.createNewVocabularyTerm('RTA_1.8')
-vocabulary_term_PIPELINE_VERSION_RTA_18.setDescription('Real Time Analysis 1.8')
-vocabulary_term_PIPELINE_VERSION_RTA_18.setLabel('RTA 1.8')
-vocabulary_term_PIPELINE_VERSION_RTA_18.setOrdinal(5)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_RTA_18)
-          
-vocabulary_term_PIPELINE_VERSION_RTA_16 = tr.createNewVocabularyTerm('RTA_1.6')
-vocabulary_term_PIPELINE_VERSION_RTA_16.setDescription('Real Time Analysis 1.6')
-vocabulary_term_PIPELINE_VERSION_RTA_16.setLabel('RTA 1.6')
-vocabulary_term_PIPELINE_VERSION_RTA_16.setOrdinal(6)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_RTA_16)
-          
-vocabulary_term_PIPELINE_VERSION_RTA_15 = tr.createNewVocabularyTerm('RTA_1.5')
-vocabulary_term_PIPELINE_VERSION_RTA_15.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_RTA_15.setLabel('RTA 1.5')
-vocabulary_term_PIPELINE_VERSION_RTA_15.setOrdinal(7)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_RTA_15)
-          
-vocabulary_term_PIPELINE_VERSION_RTA_14150 = tr.createNewVocabularyTerm('RTA_1.4.15.0')
-vocabulary_term_PIPELINE_VERSION_RTA_14150.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_RTA_14150.setLabel('RTA 1.4.15.0')
-vocabulary_term_PIPELINE_VERSION_RTA_14150.setOrdinal(8)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_RTA_14150)
-          
-vocabulary_term_PIPELINE_VERSION_15 = tr.createNewVocabularyTerm('1.5')
-vocabulary_term_PIPELINE_VERSION_15.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_15.setLabel(None)
-vocabulary_term_PIPELINE_VERSION_15.setOrdinal(9)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_15)
-          
-vocabulary_term_PIPELINE_VERSION_14 = tr.createNewVocabularyTerm('1.4')
-vocabulary_term_PIPELINE_VERSION_14.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_14.setLabel(None)
-vocabulary_term_PIPELINE_VERSION_14.setOrdinal(10)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_14)
-          
-vocabulary_term_PIPELINE_VERSION_132 = tr.createNewVocabularyTerm('1.3.2')
-vocabulary_term_PIPELINE_VERSION_132.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_132.setLabel(None)
-vocabulary_term_PIPELINE_VERSION_132.setOrdinal(11)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_132)
-          
-vocabulary_term_PIPELINE_VERSION_10 = tr.createNewVocabularyTerm('1.0')
-vocabulary_term_PIPELINE_VERSION_10.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_10.setLabel(None)
-vocabulary_term_PIPELINE_VERSION_10.setOrdinal(12)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_10)
-          
-vocabulary_term_PIPELINE_VERSION_PRE_10 = tr.createNewVocabularyTerm('PRE_1.0')
-vocabulary_term_PIPELINE_VERSION_PRE_10.setDescription('Before Pipeline Version 1.0')
-vocabulary_term_PIPELINE_VERSION_PRE_10.setLabel(None)
-vocabulary_term_PIPELINE_VERSION_PRE_10.setOrdinal(13)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_PRE_10)
-          
-vocabulary_term_PIPELINE_VERSION_NONE = tr.createNewVocabularyTerm('NONE')
-vocabulary_term_PIPELINE_VERSION_NONE.setDescription(None)
-vocabulary_term_PIPELINE_VERSION_NONE.setLabel(None)
-vocabulary_term_PIPELINE_VERSION_NONE.setOrdinal(14)
-vocabulary_PIPELINE_VERSION.addTerm(vocabulary_term_PIPELINE_VERSION_NONE)
-    
-vocabulary_SAMPLE_TYPE = tr.getOrCreateNewVocabulary('SAMPLE_TYPE')
-vocabulary_SAMPLE_TYPE.setDescription('Type of sample delivered by the customer')
-vocabulary_SAMPLE_TYPE.setUrlTemplate(None)
-vocabulary_SAMPLE_TYPE.setManagedInternally(False)
-vocabulary_SAMPLE_TYPE.setChosenFromList(True)
-          
-vocabulary_term_SAMPLE_TYPE_PROCESSED_DNA_LIBRARY = tr.createNewVocabularyTerm('PROCESSED_DNA_LIBRARY')
-vocabulary_term_SAMPLE_TYPE_PROCESSED_DNA_LIBRARY.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_PROCESSED_DNA_LIBRARY.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_PROCESSED_DNA_LIBRARY.setOrdinal(1)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_PROCESSED_DNA_LIBRARY)
-          
-vocabulary_term_SAMPLE_TYPE_POOLED_SAMPLE = tr.createNewVocabularyTerm('POOLED_SAMPLE')
-vocabulary_term_SAMPLE_TYPE_POOLED_SAMPLE.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_POOLED_SAMPLE.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_POOLED_SAMPLE.setOrdinal(2)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_POOLED_SAMPLE)
-          
-vocabulary_term_SAMPLE_TYPE_GENOMIC_DNA = tr.createNewVocabularyTerm('GENOMIC_DNA')
-vocabulary_term_SAMPLE_TYPE_GENOMIC_DNA.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_GENOMIC_DNA.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_GENOMIC_DNA.setOrdinal(3)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_GENOMIC_DNA)
-          
-vocabulary_term_SAMPLE_TYPE_SMALL_RNA = tr.createNewVocabularyTerm('SMALL_RNA')
-vocabulary_term_SAMPLE_TYPE_SMALL_RNA.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_SMALL_RNA.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_SMALL_RNA.setOrdinal(4)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_SMALL_RNA)
-          
-vocabulary_term_SAMPLE_TYPE_TOTAL_RNA = tr.createNewVocabularyTerm('TOTAL_RNA')
-vocabulary_term_SAMPLE_TYPE_TOTAL_RNA.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_TOTAL_RNA.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_TOTAL_RNA.setOrdinal(5)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_TOTAL_RNA)
-          
-vocabulary_term_SAMPLE_TYPE_CHIP = tr.createNewVocabularyTerm('CHIP')
-vocabulary_term_SAMPLE_TYPE_CHIP.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_CHIP.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_CHIP.setOrdinal(6)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_CHIP)
-          
-vocabulary_term_SAMPLE_TYPE_VIRAL = tr.createNewVocabularyTerm('VIRAL')
-vocabulary_term_SAMPLE_TYPE_VIRAL.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_VIRAL.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_VIRAL.setOrdinal(7)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_VIRAL)
-          
-vocabulary_term_SAMPLE_TYPE_SYNTHETIC = tr.createNewVocabularyTerm('SYNTHETIC')
-vocabulary_term_SAMPLE_TYPE_SYNTHETIC.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_SYNTHETIC.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_SYNTHETIC.setOrdinal(8)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_SYNTHETIC)
-          
-vocabulary_term_SAMPLE_TYPE_FRAGMENTED_GENOMIC_DNA = tr.createNewVocabularyTerm('FRAGMENTED_GENOMIC_DNA')
-vocabulary_term_SAMPLE_TYPE_FRAGMENTED_GENOMIC_DNA.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_FRAGMENTED_GENOMIC_DNA.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_FRAGMENTED_GENOMIC_DNA.setOrdinal(9)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_FRAGMENTED_GENOMIC_DNA)
-          
-vocabulary_term_SAMPLE_TYPE_MRNA = tr.createNewVocabularyTerm('MRNA')
-vocabulary_term_SAMPLE_TYPE_MRNA.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_MRNA.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_MRNA.setOrdinal(10)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_MRNA)
-          
-vocabulary_term_SAMPLE_TYPE_OTHER = tr.createNewVocabularyTerm('OTHER')
-vocabulary_term_SAMPLE_TYPE_OTHER.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_OTHER.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_OTHER.setOrdinal(11)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_OTHER)
-          
-vocabulary_term_SAMPLE_TYPE_BISULFITE_CHIP = tr.createNewVocabularyTerm('BISULFITE_CHIP')
-vocabulary_term_SAMPLE_TYPE_BISULFITE_CHIP.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_BISULFITE_CHIP.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_BISULFITE_CHIP.setOrdinal(13)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_BISULFITE_CHIP)
-          
-vocabulary_term_SAMPLE_TYPE_NONGENOMIC = tr.createNewVocabularyTerm('NON-GENOMIC')
-vocabulary_term_SAMPLE_TYPE_NONGENOMIC.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_NONGENOMIC.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_NONGENOMIC.setOrdinal(14)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_NONGENOMIC)
-          
-vocabulary_term_SAMPLE_TYPE_BISULFITE_TREATED = tr.createNewVocabularyTerm('BISULFITE_TREATED')
-vocabulary_term_SAMPLE_TYPE_BISULFITE_TREATED.setDescription(None)
-vocabulary_term_SAMPLE_TYPE_BISULFITE_TREATED.setLabel(None)
-vocabulary_term_SAMPLE_TYPE_BISULFITE_TREATED.setOrdinal(15)
-vocabulary_SAMPLE_TYPE.addTerm(vocabulary_term_SAMPLE_TYPE_BISULFITE_TREATED)
-    
-vocabulary_SBS_SEQUENCING_KIT_VERSION = tr.getOrCreateNewVocabulary('SBS_SEQUENCING_KIT_VERSION')
-vocabulary_SBS_SEQUENCING_KIT_VERSION.setDescription('Version of the Sequencing by Synthesis (SBS) Kit')
-vocabulary_SBS_SEQUENCING_KIT_VERSION.setUrlTemplate(None)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.setManagedInternally(False)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.setChosenFromList(True)
-          
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_TRUSEQ_V5 = tr.createNewVocabularyTerm('TRUSEQ_V5')
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_TRUSEQ_V5.setDescription(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_TRUSEQ_V5.setLabel('TruSeq v5')
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_TRUSEQ_V5.setOrdinal(1)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.addTerm(vocabulary_term_SBS_SEQUENCING_KIT_VERSION_TRUSEQ_V5)
-          
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V5 = tr.createNewVocabularyTerm('V5')
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V5.setDescription(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V5.setLabel(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V5.setOrdinal(2)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.addTerm(vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V5)
-          
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V4 = tr.createNewVocabularyTerm('V4')
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V4.setDescription(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V4.setLabel(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V4.setOrdinal(3)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.addTerm(vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V4)
-          
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V3 = tr.createNewVocabularyTerm('V3')
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V3.setDescription(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V3.setLabel(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V3.setOrdinal(4)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.addTerm(vocabulary_term_SBS_SEQUENCING_KIT_VERSION_V3)
-          
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_SBS_HS_V3 = tr.createNewVocabularyTerm('SBS_HS_V3')
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_SBS_HS_V3.setDescription(None)
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_SBS_HS_V3.setLabel('TruSeq SBS HS v3')
-vocabulary_term_SBS_SEQUENCING_KIT_VERSION_SBS_HS_V3.setOrdinal(5)
-vocabulary_SBS_SEQUENCING_KIT_VERSION.addTerm(vocabulary_term_SBS_SEQUENCING_KIT_VERSION_SBS_HS_V3)
-    
-vocabulary_SEQUENCER = tr.getOrCreateNewVocabulary('SEQUENCER')
-vocabulary_SEQUENCER.setDescription('Which Sequencer was used?')
-vocabulary_SEQUENCER.setUrlTemplate(None)
-vocabulary_SEQUENCER.setManagedInternally(False)
-vocabulary_SEQUENCER.setChosenFromList(True)
-          
-vocabulary_term_SEQUENCER_M00721 = tr.createNewVocabularyTerm('M00721')
-vocabulary_term_SEQUENCER_M00721.setDescription(None)
-vocabulary_term_SEQUENCER_M00721.setLabel('MiSeq')
-vocabulary_term_SEQUENCER_M00721.setOrdinal(6)
-vocabulary_SEQUENCER.addTerm(vocabulary_term_SEQUENCER_M00721)
-          
-vocabulary_term_SEQUENCER_SN792 = tr.createNewVocabularyTerm('SN792')
-vocabulary_term_SEQUENCER_SN792.setDescription(None)
-vocabulary_term_SEQUENCER_SN792.setLabel('HiSeq 2000')
-vocabulary_term_SEQUENCER_SN792.setOrdinal(7)
-vocabulary_SEQUENCER.addTerm(vocabulary_term_SEQUENCER_SN792)
-    
-vocabulary_SEQUENCING_APPLICATION = tr.getOrCreateNewVocabulary('SEQUENCING_APPLICATION')
-vocabulary_SEQUENCING_APPLICATION.setDescription('Type of experiment of the High Throughput Sequencing applications')
-vocabulary_SEQUENCING_APPLICATION.setUrlTemplate(None)
-vocabulary_SEQUENCING_APPLICATION.setManagedInternally(False)
-vocabulary_SEQUENCING_APPLICATION.setChosenFromList(True)
-          
-vocabulary_term_SEQUENCING_APPLICATION_SMALL_RNA_SEQ = tr.createNewVocabularyTerm('SMALL_RNA_SEQ')
-vocabulary_term_SEQUENCING_APPLICATION_SMALL_RNA_SEQ.setDescription(None)
-vocabulary_term_SEQUENCING_APPLICATION_SMALL_RNA_SEQ.setLabel(None)
-vocabulary_term_SEQUENCING_APPLICATION_SMALL_RNA_SEQ.setOrdinal(1)
-vocabulary_SEQUENCING_APPLICATION.addTerm(vocabulary_term_SEQUENCING_APPLICATION_SMALL_RNA_SEQ)
-          
-vocabulary_term_SEQUENCING_APPLICATION_RNA_SEQ = tr.createNewVocabularyTerm('RNA_SEQ')
-vocabulary_term_SEQUENCING_APPLICATION_RNA_SEQ.setDescription(None)
-vocabulary_term_SEQUENCING_APPLICATION_RNA_SEQ.setLabel(None)
-vocabulary_term_SEQUENCING_APPLICATION_RNA_SEQ.setOrdinal(2)
-vocabulary_SEQUENCING_APPLICATION.addTerm(vocabulary_term_SEQUENCING_APPLICATION_RNA_SEQ)
-          
-vocabulary_term_SEQUENCING_APPLICATION_GENOMIC_DNA_SEQ = tr.createNewVocabularyTerm('GENOMIC_DNA_SEQ')
-vocabulary_term_SEQUENCING_APPLICATION_GENOMIC_DNA_SEQ.setDescription(None)
-vocabulary_term_SEQUENCING_APPLICATION_GENOMIC_DNA_SEQ.setLabel(None)
-vocabulary_term_SEQUENCING_APPLICATION_GENOMIC_DNA_SEQ.setOrdinal(3)
-vocabulary_SEQUENCING_APPLICATION.addTerm(vocabulary_term_SEQUENCING_APPLICATION_GENOMIC_DNA_SEQ)
-          
-vocabulary_term_SEQUENCING_APPLICATION_CHIP_SEQ = tr.createNewVocabularyTerm('CHIP_SEQ')
-vocabulary_term_SEQUENCING_APPLICATION_CHIP_SEQ.setDescription(None)
-vocabulary_term_SEQUENCING_APPLICATION_CHIP_SEQ.setLabel(None)
-vocabulary_term_SEQUENCING_APPLICATION_CHIP_SEQ.setOrdinal(4)
-vocabulary_SEQUENCING_APPLICATION.addTerm(vocabulary_term_SEQUENCING_APPLICATION_CHIP_SEQ)
-    
-vocabulary_YES_NO = tr.getOrCreateNewVocabulary('YES_NO')
-vocabulary_YES_NO.setDescription('Just offers YES or NO')
-vocabulary_YES_NO.setUrlTemplate(None)
-vocabulary_YES_NO.setManagedInternally(False)
-vocabulary_YES_NO.setChosenFromList(True)
-          
-vocabulary_term_YES_NO_YES = tr.createNewVocabularyTerm('YES')
-vocabulary_term_YES_NO_YES.setDescription(None)
-vocabulary_term_YES_NO_YES.setLabel(None)
-vocabulary_term_YES_NO_YES.setOrdinal(1)
-vocabulary_YES_NO.addTerm(vocabulary_term_YES_NO_YES)
-          
-vocabulary_term_YES_NO_NO = tr.createNewVocabularyTerm('NO')
-vocabulary_term_YES_NO_NO.setDescription(None)
-vocabulary_term_YES_NO_NO.setLabel(None)
-vocabulary_term_YES_NO_NO.setOrdinal(2)
-vocabulary_YES_NO.addTerm(vocabulary_term_YES_NO_NO)
-
-print "Imported 22 Vocabularies" 
-script_Diff_time = tr.getOrCreateNewScript('Diff_time')
-script_Diff_time.setName('Diff_time')
-script_Diff_time.setDescription('Calculates the difference of two given dates')
-script_Diff_time.setScript('''from datetime import datetime
-
-def dateTimeSplitter(openbisDate):
-  dateAndTime, tz = openbisDate.rsplit(" ", 1)
-  pythonDateTime = datetime.strptime(dateAndTime, "%Y-%m-%d %H:%M:%S")  
-  return pythonDateTime
-
-def calculate():
-  
-  try:
-    start = dateTimeSplitter(entity.propertyValue('FLOW_CELL_SEQUENCED_ON'))
-    end = dateTimeSplitter(entity.propertyValue('SEQUENCER_FINISHED'))
-    diffTime = end-start
-    return str(diffTime)
-  except:
-    return "N/A"
-''')
-script_Diff_time.setEntityForScript('SAMPLE')
-script_Diff_time.setScriptType('DYNAMIC_PROPERTY')
-
-script_Has_Parents = tr.getOrCreateNewScript('Has_Parents')
-script_Has_Parents.setName('Has_Parents')
-script_Has_Parents.setDescription('Check if the Entity has a parent')
-script_Has_Parents.setScript('''def validate(entity, isNew):
-  parents = entity.entityPE().parents
-  if parents:
-    return None
-  else:
-    return "No Parents have been selected!"
-''')
-script_Has_Parents.setEntityForScript('SAMPLE')
-script_Has_Parents.setScriptType('ENTITY_VALIDATION')
-
-print "Imported 2 Scripts" 
-exp_type_HT_SEQUENCING = tr.getOrCreateNewExperimentType('HT_SEQUENCING')
-exp_type_HT_SEQUENCING.setDescription('High Throughput Sequencing (e.g. Illumina HiSeq, Illumina GA)')
-
-
-print "Imported 1 Experiment Types" 
-samp_type_ILLUMINA_FLOW_CELL = tr.getOrCreateNewSampleType('ILLUMINA_FLOW_CELL')
-samp_type_ILLUMINA_FLOW_CELL.setDescription('Container of ILLUMINA_FLOW_LANES\ Can be created automatically by a drop box and the properties can be filled from the RunInfo.xml and runParameters.xml files')
-samp_type_ILLUMINA_FLOW_CELL.setListable(True)
-samp_type_ILLUMINA_FLOW_CELL.setShowContainer(False)
-samp_type_ILLUMINA_FLOW_CELL.setShowParents(False)
-samp_type_ILLUMINA_FLOW_CELL.setSubcodeUnique(False)
-samp_type_ILLUMINA_FLOW_CELL.setAutoGeneratedCode(False)
-samp_type_ILLUMINA_FLOW_CELL.setShowParentMetadata(False)
-samp_type_ILLUMINA_FLOW_CELL.setGeneratedCodePrefix('FLOWCELL-')
-
-
-samp_type_ILLUMINA_FLOW_LANE = tr.getOrCreateNewSampleType('ILLUMINA_FLOW_LANE')
-samp_type_ILLUMINA_FLOW_LANE.setDescription('Child of LIBRARY or POOL')
-samp_type_ILLUMINA_FLOW_LANE.setListable(True)
-samp_type_ILLUMINA_FLOW_LANE.setShowContainer(True)
-samp_type_ILLUMINA_FLOW_LANE.setShowParents(True)
-samp_type_ILLUMINA_FLOW_LANE.setSubcodeUnique(False)
-samp_type_ILLUMINA_FLOW_LANE.setAutoGeneratedCode(False)
-samp_type_ILLUMINA_FLOW_LANE.setShowParentMetadata(True)
-samp_type_ILLUMINA_FLOW_LANE.setGeneratedCodePrefix('FLOWLANE-')
-
-
-samp_type_LIBRARY = tr.getOrCreateNewSampleType('LIBRARY')
-samp_type_LIBRARY.setDescription('Child of RAW and potential parent of POOL')
-samp_type_LIBRARY.setListable(True)
-samp_type_LIBRARY.setShowContainer(False)
-samp_type_LIBRARY.setShowParents(True)
-samp_type_LIBRARY.setSubcodeUnique(False)
-samp_type_LIBRARY.setAutoGeneratedCode(True)
-samp_type_LIBRARY.setShowParentMetadata(True)
-samp_type_LIBRARY.setGeneratedCodePrefix('BSSE-QGF-LIBRARY-')
-samp_type_LIBRARY.setValidationScript(script_Has_Parents)
-
-samp_type_LIBRARY_POOL = tr.getOrCreateNewSampleType('LIBRARY_POOL')
-samp_type_LIBRARY_POOL.setDescription('Child of several LIBRARY samples, used for multiplexing')
-samp_type_LIBRARY_POOL.setListable(True)
-samp_type_LIBRARY_POOL.setShowContainer(False)
-samp_type_LIBRARY_POOL.setShowParents(True)
-samp_type_LIBRARY_POOL.setSubcodeUnique(False)
-samp_type_LIBRARY_POOL.setAutoGeneratedCode(True)
-samp_type_LIBRARY_POOL.setShowParentMetadata(True)
-samp_type_LIBRARY_POOL.setGeneratedCodePrefix('BSSE-QGF-POOL-')
-samp_type_LIBRARY_POOL.setValidationScript(script_Has_Parents)
-
-samp_type_MASTER_SAMPLE = tr.getOrCreateNewSampleType('MASTER_SAMPLE')
-samp_type_MASTER_SAMPLE.setDescription('Sample Type holding Master Data and a parent to RAW')
-samp_type_MASTER_SAMPLE.setListable(True)
-samp_type_MASTER_SAMPLE.setShowContainer(False)
-samp_type_MASTER_SAMPLE.setShowParents(False)
-samp_type_MASTER_SAMPLE.setSubcodeUnique(False)
-samp_type_MASTER_SAMPLE.setAutoGeneratedCode(True)
-samp_type_MASTER_SAMPLE.setShowParentMetadata(False)
-samp_type_MASTER_SAMPLE.setGeneratedCodePrefix('BSSE-QGF-MASTER-')
-
-
-samp_type_RAW_SAMPLE = tr.getOrCreateNewSampleType('RAW_SAMPLE')
-samp_type_RAW_SAMPLE.setDescription('Child of MASTER')
-samp_type_RAW_SAMPLE.setListable(True)
-samp_type_RAW_SAMPLE.setShowContainer(False)
-samp_type_RAW_SAMPLE.setShowParents(True)
-samp_type_RAW_SAMPLE.setSubcodeUnique(False)
-samp_type_RAW_SAMPLE.setAutoGeneratedCode(True)
-samp_type_RAW_SAMPLE.setShowParentMetadata(True)
-samp_type_RAW_SAMPLE.setGeneratedCodePrefix('BSSE-QGF-RAW-')
-samp_type_RAW_SAMPLE.setValidationScript(script_Has_Parents)
-
-print "Imported 6 Sample Types" 
-data_set_type_ALIGNMENT = tr.getOrCreateNewDataSetType('ALIGNMENT')
-data_set_type_ALIGNMENT.setDescription('Aligner ouput, ideally bam/sam')
-data_set_type_ALIGNMENT.setMainDataSetPattern(None)
-data_set_type_ALIGNMENT.setMainDataSetPath(None)
-data_set_type_ALIGNMENT.setDeletionDisallowed(False)
-
-
-data_set_type_BASECALL_STATS = tr.getOrCreateNewDataSetType('BASECALL_STATS')
-data_set_type_BASECALL_STATS.setDescription('Base Call Statistics from the Illumina Pipeline (configureBclToFastq.pl)')
-data_set_type_BASECALL_STATS.setMainDataSetPattern('original/.*/.*/Demultiplex_Stats.htm')
-data_set_type_BASECALL_STATS.setMainDataSetPath(None)
-data_set_type_BASECALL_STATS.setDeletionDisallowed(False)
-
-
-data_set_type_BIGWIGGLE = tr.getOrCreateNewDataSetType('BIGWIGGLE')
-data_set_type_BIGWIGGLE.setDescription('Visualization')
-data_set_type_BIGWIGGLE.setMainDataSetPattern(None)
-data_set_type_BIGWIGGLE.setMainDataSetPath(None)
-data_set_type_BIGWIGGLE.setDeletionDisallowed(False)
-
-
-data_set_type_ELAND_ALIGNMENT = tr.getOrCreateNewDataSetType('ELAND_ALIGNMENT')
-data_set_type_ELAND_ALIGNMENT.setDescription('Illumina Eland Alignment Output')
-data_set_type_ELAND_ALIGNMENT.setMainDataSetPattern(None)
-data_set_type_ELAND_ALIGNMENT.setMainDataSetPath(None)
-data_set_type_ELAND_ALIGNMENT.setDeletionDisallowed(False)
-
-
-data_set_type_FASTQ_GZ = tr.getOrCreateNewDataSetType('FASTQ_GZ')
-data_set_type_FASTQ_GZ.setDescription('Gzipped Fastq file produced by Casava 1.8+')
-data_set_type_FASTQ_GZ.setMainDataSetPattern(None)
-data_set_type_FASTQ_GZ.setMainDataSetPath(None)
-data_set_type_FASTQ_GZ.setDeletionDisallowed(False)
-
-
-data_set_type_ILLUMINA_HISEQ_OUTPUT = tr.getOrCreateNewDataSetType('ILLUMINA_HISEQ_OUTPUT')
-data_set_type_ILLUMINA_HISEQ_OUTPUT.setDescription('HiSeq2000 Output')
-data_set_type_ILLUMINA_HISEQ_OUTPUT.setMainDataSetPattern('original/.*/Data/Status.htm')
-data_set_type_ILLUMINA_HISEQ_OUTPUT.setMainDataSetPath(None)
-data_set_type_ILLUMINA_HISEQ_OUTPUT.setDeletionDisallowed(False)
-
-
-data_set_type_ILLUMINA_MISEQ_OUTPUT = tr.getOrCreateNewDataSetType('ILLUMINA_MISEQ_OUTPUT')
-data_set_type_ILLUMINA_MISEQ_OUTPUT.setDescription('MiSeq Output')
-data_set_type_ILLUMINA_MISEQ_OUTPUT.setMainDataSetPattern(None)
-data_set_type_ILLUMINA_MISEQ_OUTPUT.setMainDataSetPath(None)
-data_set_type_ILLUMINA_MISEQ_OUTPUT.setDeletionDisallowed(False)
-
-
-data_set_type_MACS_OUTPUT = tr.getOrCreateNewDataSetType('MACS_OUTPUT')
-data_set_type_MACS_OUTPUT.setDescription('MACS Peak Caller output')
-data_set_type_MACS_OUTPUT.setMainDataSetPattern(None)
-data_set_type_MACS_OUTPUT.setMainDataSetPath(None)
-data_set_type_MACS_OUTPUT.setDeletionDisallowed(False)
-
-
-data_set_type_QUALITY_JPGS = tr.getOrCreateNewDataSetType('QUALITY_JPGS')
-data_set_type_QUALITY_JPGS.setDescription('R generated Quality plots')
-data_set_type_QUALITY_JPGS.setMainDataSetPattern(None)
-data_set_type_QUALITY_JPGS.setMainDataSetPath(None)
-data_set_type_QUALITY_JPGS.setDeletionDisallowed(False)
-
-
-data_set_type_QUALITY_PDFS = tr.getOrCreateNewDataSetType('QUALITY_PDFS')
-data_set_type_QUALITY_PDFS.setDescription('R generated pdfs showing quality data')
-data_set_type_QUALITY_PDFS.setMainDataSetPattern(None)
-data_set_type_QUALITY_PDFS.setMainDataSetPath(None)
-data_set_type_QUALITY_PDFS.setDeletionDisallowed(False)
-
-
-data_set_type_QUALITY_SVG = tr.getOrCreateNewDataSetType('QUALITY_SVG')
-data_set_type_QUALITY_SVG.setDescription('R generated Quality plots')
-data_set_type_QUALITY_SVG.setMainDataSetPattern(None)
-data_set_type_QUALITY_SVG.setMainDataSetPath(None)
-data_set_type_QUALITY_SVG.setDeletionDisallowed(False)
-
-
-data_set_type_RUNINFO = tr.getOrCreateNewDataSetType('RUNINFO')
-data_set_type_RUNINFO.setDescription('Run statstics: Status.html and Status_Files folder')
-data_set_type_RUNINFO.setMainDataSetPattern('original/.*/Data/Status.htm')
-data_set_type_RUNINFO.setMainDataSetPath(None)
-data_set_type_RUNINFO.setDeletionDisallowed(False)
-
-
-data_set_type_THUMBNAILS = tr.getOrCreateNewDataSetType('THUMBNAILS')
-data_set_type_THUMBNAILS.setDescription('Thumbnails provided by the Illumina software')
-data_set_type_THUMBNAILS.setMainDataSetPattern(None)
-data_set_type_THUMBNAILS.setMainDataSetPath(None)
-data_set_type_THUMBNAILS.setDeletionDisallowed(False)
-
-
-data_set_type_TSV = tr.getOrCreateNewDataSetType('TSV')
-data_set_type_TSV.setDescription('Tab separated files')
-data_set_type_TSV.setMainDataSetPattern(None)
-data_set_type_TSV.setMainDataSetPath(None)
-data_set_type_TSV.setDeletionDisallowed(False)
-
-
-print "Imported 15 Data Set Types" 
-print "Imported 0 Material Types" 
-prop_type_AGILENT_KIT = tr.getOrCreateNewPropertyType('AGILENT_KIT', DataType.CONTROLLEDVOCABULARY)
-prop_type_AGILENT_KIT.setLabel('Agilent Kit')
-prop_type_AGILENT_KIT.setManagedInternally(False)
-
-prop_type_AGILENT_KIT.setVocabulary(vocabulary_AGILENT_KIT)
-
-prop_type_ALIGNMENT_SOFTWARE = tr.getOrCreateNewPropertyType('ALIGNMENT_SOFTWARE', DataType.CONTROLLEDVOCABULARY)
-prop_type_ALIGNMENT_SOFTWARE.setLabel('Alignment software')
-prop_type_ALIGNMENT_SOFTWARE.setManagedInternally(False)
-
-prop_type_ALIGNMENT_SOFTWARE.setVocabulary(vocabulary_ALIGNMENT_SOFTWARE)
-
-prop_type_ANALYSIS_FINISHED = tr.getOrCreateNewPropertyType('ANALYSIS_FINISHED', DataType.TIMESTAMP)
-prop_type_ANALYSIS_FINISHED.setLabel('Analysis finished')
-prop_type_ANALYSIS_FINISHED.setManagedInternally(False)
-
-
-prop_type_BARCODE_COMPLEXITY_CHECKER = tr.getOrCreateNewPropertyType('BARCODE_COMPLEXITY_CHECKER', DataType.MULTILINE_VARCHAR)
-prop_type_BARCODE_COMPLEXITY_CHECKER.setLabel('Barcode_Complexity_Checker')
-prop_type_BARCODE_COMPLEXITY_CHECKER.setManagedInternally(False)
-
-
-prop_type_BASESCOVERED = tr.getOrCreateNewPropertyType('BASESCOVERED', DataType.INTEGER)
-prop_type_BASESCOVERED.setLabel('bases Covered')
-prop_type_BASESCOVERED.setManagedInternally(False)
-
-
-prop_type_BIOLOGICAL_SAMPLE_ARRIVED = tr.getOrCreateNewPropertyType('BIOLOGICAL_SAMPLE_ARRIVED', DataType.TIMESTAMP)
-prop_type_BIOLOGICAL_SAMPLE_ARRIVED.setLabel('Arrival Date of Biological Sample')
-prop_type_BIOLOGICAL_SAMPLE_ARRIVED.setManagedInternally(False)
-
-
-prop_type_CASAVA_VERSION = tr.getOrCreateNewPropertyType('CASAVA_VERSION', DataType.CONTROLLEDVOCABULARY)
-prop_type_CASAVA_VERSION.setLabel('Casava Version')
-prop_type_CASAVA_VERSION.setManagedInternally(False)
-
-prop_type_CASAVA_VERSION.setVocabulary(vocabulary_CASAVA_VERSION)
-
-prop_type_CELL_PLASTICITY_SYSTEMSX = tr.getOrCreateNewPropertyType('CELL_PLASTICITY_SYSTEMSX', DataType.BOOLEAN)
-prop_type_CELL_PLASTICITY_SYSTEMSX.setLabel('Cell Plasticity (SystemsX)')
-prop_type_CELL_PLASTICITY_SYSTEMSX.setManagedInternally(False)
-
-
-prop_type_CHROMCOUNT = tr.getOrCreateNewPropertyType('CHROMCOUNT', DataType.INTEGER)
-prop_type_CHROMCOUNT.setLabel('chrom Count')
-prop_type_CHROMCOUNT.setManagedInternally(False)
-
-
-prop_type_CLUSTER_GENERATION_KIT_VERSION = tr.getOrCreateNewPropertyType('CLUSTER_GENERATION_KIT_VERSION', DataType.CONTROLLEDVOCABULARY)
-prop_type_CLUSTER_GENERATION_KIT_VERSION.setLabel('CS Generation Kit Version')
-prop_type_CLUSTER_GENERATION_KIT_VERSION.setManagedInternally(False)
-
-prop_type_CLUSTER_GENERATION_KIT_VERSION.setVocabulary(vocabulary_CLUSTER_GENERATION_KIT_VERSION)
-
-prop_type_CLUSTER_STATION = tr.getOrCreateNewPropertyType('CLUSTER_STATION', DataType.CONTROLLEDVOCABULARY)
-prop_type_CLUSTER_STATION.setLabel('Cluster Station')
-prop_type_CLUSTER_STATION.setManagedInternally(False)
-
-prop_type_CLUSTER_STATION.setVocabulary(vocabulary_CLUSTER_STATION)
-
-prop_type_CONCENTRATION = tr.getOrCreateNewPropertyType('CONCENTRATION', DataType.REAL)
-prop_type_CONCENTRATION.setLabel(u'Conc. [ng/\u03bcl]')
-prop_type_CONCENTRATION.setManagedInternally(False)
-
-
-prop_type_CONCENTRATION_FLOWLANE = tr.getOrCreateNewPropertyType('CONCENTRATION_FLOWLANE', DataType.REAL)
-prop_type_CONCENTRATION_FLOWLANE.setLabel('Concentration in flow lane [pM]')
-prop_type_CONCENTRATION_FLOWLANE.setManagedInternally(False)
-
-
-prop_type_CONCENTRATION_ORIGINAL_ILLUMINA = tr.getOrCreateNewPropertyType('CONCENTRATION_ORIGINAL_ILLUMINA', DataType.REAL)
-prop_type_CONCENTRATION_ORIGINAL_ILLUMINA.setLabel(u'Concentration (original) [ng/\u03bcl]')
-prop_type_CONCENTRATION_ORIGINAL_ILLUMINA.setManagedInternally(False)
-
-
-prop_type_CONCENTRATION_PREPARED_ILLUMINA = tr.getOrCreateNewPropertyType('CONCENTRATION_PREPARED_ILLUMINA', DataType.REAL)
-prop_type_CONCENTRATION_PREPARED_ILLUMINA.setLabel(u'Concentration (prepared) [ng/\u03bcl]')
-prop_type_CONCENTRATION_PREPARED_ILLUMINA.setManagedInternally(False)
-
-
-prop_type_CONTACT_PERSON_EMAIL = tr.getOrCreateNewPropertyType('CONTACT_PERSON_EMAIL', DataType.VARCHAR)
-prop_type_CONTACT_PERSON_EMAIL.setLabel('Email of Contact Person')
-prop_type_CONTACT_PERSON_EMAIL.setManagedInternally(False)
-
-
-prop_type_CONTACT_PERSON_NAME = tr.getOrCreateNewPropertyType('CONTACT_PERSON_NAME', DataType.VARCHAR)
-prop_type_CONTACT_PERSON_NAME.setLabel('Name of Contact Person')
-prop_type_CONTACT_PERSON_NAME.setManagedInternally(False)
-
-
-prop_type_CONTROL_LANE = tr.getOrCreateNewPropertyType('CONTROL_LANE', DataType.CONTROLLEDVOCABULARY)
-prop_type_CONTROL_LANE.setLabel('Control Lane')
-prop_type_CONTROL_LANE.setManagedInternally(False)
-
-prop_type_CONTROL_LANE.setVocabulary(vocabulary_CONTROL_LANE)
-
-prop_type_CREATED_ON_CS = tr.getOrCreateNewPropertyType('CREATED_ON_CS', DataType.TIMESTAMP)
-prop_type_CREATED_ON_CS.setLabel('Clustering date')
-prop_type_CREATED_ON_CS.setManagedInternally(False)
-
-
-prop_type_CS_PROTOCOL_VERSION = tr.getOrCreateNewPropertyType('CS_PROTOCOL_VERSION', DataType.VARCHAR)
-prop_type_CS_PROTOCOL_VERSION.setLabel('CS Protocol Version')
-prop_type_CS_PROTOCOL_VERSION.setManagedInternally(False)
-
-
-prop_type_CYCLES = tr.getOrCreateNewPropertyType('CYCLES', DataType.INTEGER)
-prop_type_CYCLES.setLabel('Cycles')
-prop_type_CYCLES.setManagedInternally(False)
-
-
-prop_type_DATA_TRANSFERRED = tr.getOrCreateNewPropertyType('DATA_TRANSFERRED', DataType.TIMESTAMP)
-prop_type_DATA_TRANSFERRED.setLabel('Data transferred')
-prop_type_DATA_TRANSFERRED.setManagedInternally(False)
-
-
-prop_type_DNA_CONCENTRATION_OF_LIBRARY = tr.getOrCreateNewPropertyType('DNA_CONCENTRATION_OF_LIBRARY', DataType.INTEGER)
-prop_type_DNA_CONCENTRATION_OF_LIBRARY.setLabel('DNA concentration of library (nM)')
-prop_type_DNA_CONCENTRATION_OF_LIBRARY.setManagedInternally(False)
-
-
-prop_type_DNA_CONCENTRATION_POOL = tr.getOrCreateNewPropertyType('DNA_CONCENTRATION_POOL', DataType.REAL)
-prop_type_DNA_CONCENTRATION_POOL.setLabel('DNA conc. [nM] - customer value')
-prop_type_DNA_CONCENTRATION_POOL.setManagedInternally(False)
-
-
-prop_type_DNA_CONCENTRATION_QGF = tr.getOrCreateNewPropertyType('DNA_CONCENTRATION_QGF', DataType.REAL)
-prop_type_DNA_CONCENTRATION_QGF.setLabel('DNA concentration of Pool [nM]')
-prop_type_DNA_CONCENTRATION_QGF.setManagedInternally(False)
-
-
-prop_type_END_TYPE = tr.getOrCreateNewPropertyType('END_TYPE', DataType.CONTROLLEDVOCABULARY)
-prop_type_END_TYPE.setLabel('Paired End / Single Read')
-prop_type_END_TYPE.setManagedInternally(False)
-
-prop_type_END_TYPE.setVocabulary(vocabulary_END_TYPE)
-
-prop_type_EXPERIMENT_DESIGN = tr.getOrCreateNewPropertyType('EXPERIMENT_DESIGN', DataType.CONTROLLEDVOCABULARY)
-prop_type_EXPERIMENT_DESIGN.setLabel('Experiment Design')
-prop_type_EXPERIMENT_DESIGN.setManagedInternally(False)
-
-prop_type_EXPERIMENT_DESIGN.setVocabulary(vocabulary_EXPERIMENT_DESIGN)
-
-prop_type_EXTERNAL_SAMPLE_NAME = tr.getOrCreateNewPropertyType('EXTERNAL_SAMPLE_NAME', DataType.VARCHAR)
-prop_type_EXTERNAL_SAMPLE_NAME.setLabel('External Sample Name')
-prop_type_EXTERNAL_SAMPLE_NAME.setManagedInternally(False)
-
-
-prop_type_FLOWCELLTYPE = tr.getOrCreateNewPropertyType('FLOWCELLTYPE', DataType.VARCHAR)
-prop_type_FLOWCELLTYPE.setLabel('Flow Cell Type')
-prop_type_FLOWCELLTYPE.setManagedInternally(False)
-
-
-prop_type_FLOW_CELL_SEQUENCED_ON = tr.getOrCreateNewPropertyType('FLOW_CELL_SEQUENCED_ON', DataType.TIMESTAMP)
-prop_type_FLOW_CELL_SEQUENCED_ON.setLabel('Sequencing started')
-prop_type_FLOW_CELL_SEQUENCED_ON.setManagedInternally(False)
-
-
-prop_type_FRAGMENT_SIZE_BASE_PAIRS = tr.getOrCreateNewPropertyType('FRAGMENT_SIZE_BASE_PAIRS', DataType.INTEGER)
-prop_type_FRAGMENT_SIZE_BASE_PAIRS.setLabel('Fragment Size [base pairs]')
-prop_type_FRAGMENT_SIZE_BASE_PAIRS.setManagedInternally(False)
-
-
-prop_type_FRAGMENT_SIZE_PREPARED_ILLUMINA = tr.getOrCreateNewPropertyType('FRAGMENT_SIZE_PREPARED_ILLUMINA', DataType.INTEGER)
-prop_type_FRAGMENT_SIZE_PREPARED_ILLUMINA.setLabel('Fragment Size (prepared) [base (pairs)]')
-prop_type_FRAGMENT_SIZE_PREPARED_ILLUMINA.setManagedInternally(False)
-
-
-prop_type_ILLUMINA_PIPELINE_VERSION = tr.getOrCreateNewPropertyType('ILLUMINA_PIPELINE_VERSION', DataType.CONTROLLEDVOCABULARY)
-prop_type_ILLUMINA_PIPELINE_VERSION.setLabel('Pipeline Version')
-prop_type_ILLUMINA_PIPELINE_VERSION.setManagedInternally(False)
-
-prop_type_ILLUMINA_PIPELINE_VERSION.setVocabulary(vocabulary_PIPELINE_VERSION)
-
-prop_type_INDEX1 = tr.getOrCreateNewPropertyType('INDEX1', DataType.CONTROLLEDVOCABULARY)
-prop_type_INDEX1.setLabel('Index 1')
-prop_type_INDEX1.setManagedInternally(False)
-
-prop_type_INDEX1.setVocabulary(vocabulary_INDEX1)
-
-prop_type_INDEX2 = tr.getOrCreateNewPropertyType('INDEX2', DataType.CONTROLLEDVOCABULARY)
-prop_type_INDEX2.setLabel('Index 2')
-prop_type_INDEX2.setManagedInternally(False)
-
-prop_type_INDEX2.setVocabulary(vocabulary_INDEX2)
-
-prop_type_INDEXREAD = tr.getOrCreateNewPropertyType('INDEXREAD', DataType.INTEGER)
-prop_type_INDEXREAD.setLabel('Length of Index Read1')
-prop_type_INDEXREAD.setManagedInternally(False)
-
-
-prop_type_INDEXREAD2 = tr.getOrCreateNewPropertyType('INDEXREAD2', DataType.INTEGER)
-prop_type_INDEXREAD2.setLabel('Length of Index Read2')
-prop_type_INDEXREAD2.setManagedInternally(False)
-
-
-prop_type_INVOICE = tr.getOrCreateNewPropertyType('INVOICE', DataType.BOOLEAN)
-prop_type_INVOICE.setLabel('Invoice sent?')
-prop_type_INVOICE.setManagedInternally(False)
-
-
-prop_type_ISCOMPRESSED = tr.getOrCreateNewPropertyType('ISCOMPRESSED', DataType.BOOLEAN)
-prop_type_ISCOMPRESSED.setLabel('Is Compressed')
-prop_type_ISCOMPRESSED.setManagedInternally(False)
-
-
-prop_type_ISSUED_COMMAND = tr.getOrCreateNewPropertyType('ISSUED_COMMAND', DataType.MULTILINE_VARCHAR)
-prop_type_ISSUED_COMMAND.setLabel('Issued Command')
-prop_type_ISSUED_COMMAND.setManagedInternally(False)
-
-
-prop_type_ISSWAPPED = tr.getOrCreateNewPropertyType('ISSWAPPED', DataType.INTEGER)
-prop_type_ISSWAPPED.setLabel('Is byte swapped')
-prop_type_ISSWAPPED.setManagedInternally(False)
-
-
-prop_type_KIT = tr.getOrCreateNewPropertyType('KIT', DataType.CONTROLLEDVOCABULARY)
-prop_type_KIT.setLabel('Library preparation kit')
-prop_type_KIT.setManagedInternally(False)
-
-prop_type_KIT.setVocabulary(vocabulary_KIT)
-
-prop_type_KIT_PREPARED = tr.getOrCreateNewPropertyType('KIT_PREPARED', DataType.TIMESTAMP)
-prop_type_KIT_PREPARED.setLabel('Sample processed')
-prop_type_KIT_PREPARED.setManagedInternally(False)
-
-
-prop_type_LANECOUNT = tr.getOrCreateNewPropertyType('LANECOUNT', DataType.INTEGER)
-prop_type_LANECOUNT.setLabel('Lane Count')
-prop_type_LANECOUNT.setManagedInternally(False)
-
-
-prop_type_LIBRARY_PROCESSING_FAILED = tr.getOrCreateNewPropertyType('LIBRARY_PROCESSING_FAILED', DataType.BOOLEAN)
-prop_type_LIBRARY_PROCESSING_FAILED.setLabel('Library processing failed')
-prop_type_LIBRARY_PROCESSING_FAILED.setManagedInternally(False)
-
-
-prop_type_LIBRARY_PROCESSING_POSSIBLE_YES_NO = tr.getOrCreateNewPropertyType('LIBRARY_PROCESSING_POSSIBLE_YES_NO', DataType.CONTROLLEDVOCABULARY)
-prop_type_LIBRARY_PROCESSING_POSSIBLE_YES_NO.setLabel('Library processing possible')
-prop_type_LIBRARY_PROCESSING_POSSIBLE_YES_NO.setManagedInternally(False)
-
-prop_type_LIBRARY_PROCESSING_POSSIBLE_YES_NO.setVocabulary(vocabulary_YES_NO)
-
-prop_type_LIBRARY_PROCESSING_SUCCESSFUL = tr.getOrCreateNewPropertyType('LIBRARY_PROCESSING_SUCCESSFUL', DataType.BOOLEAN)
-prop_type_LIBRARY_PROCESSING_SUCCESSFUL.setLabel('Library processing successful')
-prop_type_LIBRARY_PROCESSING_SUCCESSFUL.setManagedInternally(False)
-
-
-prop_type_LOT = tr.getOrCreateNewPropertyType('LOT', DataType.INTEGER)
-prop_type_LOT.setLabel('Kit Lot #')
-prop_type_LOT.setManagedInternally(False)
-
-
-prop_type_MACS_VERSION = tr.getOrCreateNewPropertyType('MACS_VERSION', DataType.CONTROLLEDVOCABULARY)
-prop_type_MACS_VERSION.setLabel('MACS VERSION')
-prop_type_MACS_VERSION.setManagedInternally(False)
-
-prop_type_MACS_VERSION.setVocabulary(vocabulary_MACS_VERSION)
-
-prop_type_MAPPED_READS = tr.getOrCreateNewPropertyType('MAPPED_READS', DataType.INTEGER)
-prop_type_MAPPED_READS.setLabel('Mapped reads')
-prop_type_MAPPED_READS.setManagedInternally(False)
-
-
-prop_type_MAX = tr.getOrCreateNewPropertyType('MAX', DataType.REAL)
-prop_type_MAX.setLabel('Maximum')
-prop_type_MAX.setManagedInternally(False)
-
-
-prop_type_MEAN = tr.getOrCreateNewPropertyType('MEAN', DataType.REAL)
-prop_type_MEAN.setLabel('Mean')
-prop_type_MEAN.setManagedInternally(False)
-
-
-prop_type_MIN = tr.getOrCreateNewPropertyType('MIN', DataType.REAL)
-prop_type_MIN.setLabel('Minimum')
-prop_type_MIN.setManagedInternally(False)
-
-
-prop_type_MISMATCH_IN_INDEX = tr.getOrCreateNewPropertyType('MISMATCH_IN_INDEX', DataType.CONTROLLEDVOCABULARY)
-prop_type_MISMATCH_IN_INDEX.setLabel('Mismatch in Index')
-prop_type_MISMATCH_IN_INDEX.setManagedInternally(False)
-
-prop_type_MISMATCH_IN_INDEX.setVocabulary(vocabulary_MISMATCH_IN_INDEX)
-
-prop_type_NANO_DROP = tr.getOrCreateNewPropertyType('NANO_DROP', DataType.CONTROLLEDVOCABULARY)
-prop_type_NANO_DROP.setLabel('Nano Drop')
-prop_type_NANO_DROP.setManagedInternally(False)
-
-prop_type_NANO_DROP.setVocabulary(vocabulary_NANO_DROP)
-
-prop_type_NCBI_ORGANISM_TAXONOMY = tr.getOrCreateNewPropertyType('NCBI_ORGANISM_TAXONOMY', DataType.CONTROLLEDVOCABULARY)
-prop_type_NCBI_ORGANISM_TAXONOMY.setLabel('Organism (NCBI Taxonomy)')
-prop_type_NCBI_ORGANISM_TAXONOMY.setManagedInternally(False)
-
-prop_type_NCBI_ORGANISM_TAXONOMY.setVocabulary(vocabulary_NCBI_TAXONOMY)
-
-prop_type_NM_DNA = tr.getOrCreateNewPropertyType('NM_DNA', DataType.REAL)
-prop_type_NM_DNA.setLabel('Calculated DNA concentration of library (nM)')
-prop_type_NM_DNA.setManagedInternally(False)
-
-
-prop_type_NOTES = tr.getOrCreateNewPropertyType('NOTES', DataType.MULTILINE_VARCHAR)
-prop_type_NOTES.setLabel('Notes')
-prop_type_NOTES.setManagedInternally(False)
-
-
-prop_type_NUMBER_OF_ATTACHMENTS = tr.getOrCreateNewPropertyType('NUMBER_OF_ATTACHMENTS', DataType.INTEGER)
-prop_type_NUMBER_OF_ATTACHMENTS.setLabel('Number of Attachments')
-prop_type_NUMBER_OF_ATTACHMENTS.setManagedInternally(False)
-
-
-prop_type_PAIRED_END_KIT = tr.getOrCreateNewPropertyType('PAIRED_END_KIT', DataType.VARCHAR)
-prop_type_PAIRED_END_KIT.setLabel('Paired End Kit')
-prop_type_PAIRED_END_KIT.setManagedInternally(False)
-
-
-prop_type_PERCENTAGE_ONE_MISMATCH_READS_INDEX = tr.getOrCreateNewPropertyType('PERCENTAGE_ONE_MISMATCH_READS_INDEX', DataType.REAL)
-prop_type_PERCENTAGE_ONE_MISMATCH_READS_INDEX.setLabel('% One Mismatch Reads (Index)')
-prop_type_PERCENTAGE_ONE_MISMATCH_READS_INDEX.setManagedInternally(False)
-
-
-prop_type_PERCENTAGE_PASSED_FILTERING = tr.getOrCreateNewPropertyType('PERCENTAGE_PASSED_FILTERING', DataType.REAL)
-prop_type_PERCENTAGE_PASSED_FILTERING.setLabel('% Passes Illumina Filtering (PF)')
-prop_type_PERCENTAGE_PASSED_FILTERING.setManagedInternally(False)
-
-
-prop_type_PERCENTAGE_PERFECT_INDEX_READS = tr.getOrCreateNewPropertyType('PERCENTAGE_PERFECT_INDEX_READS', DataType.REAL)
-prop_type_PERCENTAGE_PERFECT_INDEX_READS.setLabel('% Perfect Index Reads')
-prop_type_PERCENTAGE_PERFECT_INDEX_READS.setManagedInternally(False)
-
-
-prop_type_PERCENTAGE_RAW_CLUSTERS_PER_LANE = tr.getOrCreateNewPropertyType('PERCENTAGE_RAW_CLUSTERS_PER_LANE', DataType.REAL)
-prop_type_PERCENTAGE_RAW_CLUSTERS_PER_LANE.setLabel('% of raw clusters per lane')
-prop_type_PERCENTAGE_RAW_CLUSTERS_PER_LANE.setManagedInternally(False)
-
-
-prop_type_PREPARED_BY = tr.getOrCreateNewPropertyType('PREPARED_BY', DataType.VARCHAR)
-prop_type_PREPARED_BY.setLabel('Prepared by')
-prop_type_PREPARED_BY.setManagedInternally(False)
-
-
-prop_type_PRIMARYDATASIZE = tr.getOrCreateNewPropertyType('PRIMARYDATASIZE', DataType.INTEGER)
-prop_type_PRIMARYDATASIZE.setLabel('primary Data Size')
-prop_type_PRIMARYDATASIZE.setManagedInternally(False)
-
-
-prop_type_PRIMARYINDEXSIZE = tr.getOrCreateNewPropertyType('PRIMARYINDEXSIZE', DataType.INTEGER)
-prop_type_PRIMARYINDEXSIZE.setLabel('primary Index Size')
-prop_type_PRIMARYINDEXSIZE.setManagedInternally(False)
-
-
-prop_type_PRINCIPAL_INVESTIGATOR_EMAIL = tr.getOrCreateNewPropertyType('PRINCIPAL_INVESTIGATOR_EMAIL', DataType.VARCHAR)
-prop_type_PRINCIPAL_INVESTIGATOR_EMAIL.setLabel('Email of Principal Investigator')
-prop_type_PRINCIPAL_INVESTIGATOR_EMAIL.setManagedInternally(False)
-
-
-prop_type_PRINCIPAL_INVESTIGATOR_NAME = tr.getOrCreateNewPropertyType('PRINCIPAL_INVESTIGATOR_NAME', DataType.VARCHAR)
-prop_type_PRINCIPAL_INVESTIGATOR_NAME.setLabel('Name of Principal Investigator')
-prop_type_PRINCIPAL_INVESTIGATOR_NAME.setManagedInternally(False)
-
-
-prop_type_QC_AT_DBSSE = tr.getOrCreateNewPropertyType('QC_AT_DBSSE', DataType.CONTROLLEDVOCABULARY)
-prop_type_QC_AT_DBSSE.setLabel('QC at D-BSSE')
-prop_type_QC_AT_DBSSE.setManagedInternally(False)
-
-prop_type_QC_AT_DBSSE.setVocabulary(vocabulary_YES_NO)
-
-prop_type_QC_REQUIRED = tr.getOrCreateNewPropertyType('QC_REQUIRED', DataType.CONTROLLEDVOCABULARY)
-prop_type_QC_REQUIRED.setLabel('QC required')
-prop_type_QC_REQUIRED.setManagedInternally(False)
-
-prop_type_QC_REQUIRED.setVocabulary(vocabulary_YES_NO)
-
-prop_type_RUNNINGTIME = tr.getOrCreateNewPropertyType('RUNNINGTIME', DataType.VARCHAR)
-prop_type_RUNNINGTIME.setLabel('Running Time')
-prop_type_RUNNINGTIME.setManagedInternally(False)
-
-
-prop_type_RUN_FOLDER_NAME = tr.getOrCreateNewPropertyType('RUN_FOLDER_NAME', DataType.VARCHAR)
-prop_type_RUN_FOLDER_NAME.setLabel('Run Folder Name')
-prop_type_RUN_FOLDER_NAME.setManagedInternally(False)
-
-
-prop_type_SAMPLE_KIND = tr.getOrCreateNewPropertyType('SAMPLE_KIND', DataType.CONTROLLEDVOCABULARY)
-prop_type_SAMPLE_KIND.setLabel('Sample Kind')
-prop_type_SAMPLE_KIND.setManagedInternally(False)
-
-prop_type_SAMPLE_KIND.setVocabulary(vocabulary_SAMPLE_TYPE)
-
-prop_type_SAMTOOLS_FLAGSTAT = tr.getOrCreateNewPropertyType('SAMTOOLS_FLAGSTAT', DataType.MULTILINE_VARCHAR)
-prop_type_SAMTOOLS_FLAGSTAT.setLabel('Samtools Flagstat Output')
-prop_type_SAMTOOLS_FLAGSTAT.setManagedInternally(False)
-
-
-prop_type_SBS_KIT = tr.getOrCreateNewPropertyType('SBS_KIT', DataType.VARCHAR)
-prop_type_SBS_KIT.setLabel('SBS Kit')
-prop_type_SBS_KIT.setManagedInternally(False)
-
-
-prop_type_SBS_SEQUENCING_KIT_VERSION = tr.getOrCreateNewPropertyType('SBS_SEQUENCING_KIT_VERSION', DataType.CONTROLLEDVOCABULARY)
-prop_type_SBS_SEQUENCING_KIT_VERSION.setLabel('SBS Sequencing Kit Version')
-prop_type_SBS_SEQUENCING_KIT_VERSION.setManagedInternally(False)
-
-prop_type_SBS_SEQUENCING_KIT_VERSION.setVocabulary(vocabulary_SBS_SEQUENCING_KIT_VERSION)
-
-prop_type_SEQUENCER = tr.getOrCreateNewPropertyType('SEQUENCER', DataType.CONTROLLEDVOCABULARY)
-prop_type_SEQUENCER.setLabel('Sequencer')
-prop_type_SEQUENCER.setManagedInternally(False)
-
-prop_type_SEQUENCER.setVocabulary(vocabulary_SEQUENCER)
-
-prop_type_SEQUENCER_FINISHED = tr.getOrCreateNewPropertyType('SEQUENCER_FINISHED', DataType.TIMESTAMP)
-prop_type_SEQUENCER_FINISHED.setLabel('Sequencer finished')
-prop_type_SEQUENCER_FINISHED.setManagedInternally(False)
-
-
-prop_type_STARTING_AMOUNT_OF_SAMPLE_IN_NG = tr.getOrCreateNewPropertyType('STARTING_AMOUNT_OF_SAMPLE_IN_NG', DataType.REAL)
-prop_type_STARTING_AMOUNT_OF_SAMPLE_IN_NG.setLabel('Starting amount of sample (ng)')
-prop_type_STARTING_AMOUNT_OF_SAMPLE_IN_NG.setManagedInternally(False)
-
-
-prop_type_STD = tr.getOrCreateNewPropertyType('STD', DataType.REAL)
-prop_type_STD.setLabel('Standard deviation')
-prop_type_STD.setManagedInternally(False)
-
-
-prop_type_SURFACECOUNT = tr.getOrCreateNewPropertyType('SURFACECOUNT', DataType.INTEGER)
-prop_type_SURFACECOUNT.setLabel('Surface Count')
-prop_type_SURFACECOUNT.setManagedInternally(False)
-
-
-prop_type_SWATHCOUNT = tr.getOrCreateNewPropertyType('SWATHCOUNT', DataType.INTEGER)
-prop_type_SWATHCOUNT.setLabel('Swath Count')
-prop_type_SWATHCOUNT.setManagedInternally(False)
-
-
-prop_type_TILECOUNT = tr.getOrCreateNewPropertyType('TILECOUNT', DataType.INTEGER)
-prop_type_TILECOUNT.setLabel('Tile Count')
-prop_type_TILECOUNT.setManagedInternally(False)
-
-
-prop_type_TOTAL_READS = tr.getOrCreateNewPropertyType('TOTAL_READS', DataType.INTEGER)
-prop_type_TOTAL_READS.setLabel('Total reads')
-prop_type_TOTAL_READS.setManagedInternally(False)
-
-
-prop_type_UL_DNA = tr.getOrCreateNewPropertyType('UL_DNA', DataType.REAL)
-prop_type_UL_DNA.setLabel('Calculated ul DNA for 2nM stock')
-prop_type_UL_DNA.setManagedInternally(False)
-
-
-prop_type_UL_EB = tr.getOrCreateNewPropertyType('UL_EB', DataType.REAL)
-prop_type_UL_EB.setLabel('Calculated ul EB for 2nM stock ')
-prop_type_UL_EB.setManagedInternally(False)
-
-
-prop_type_UL_STOCK = tr.getOrCreateNewPropertyType('UL_STOCK', DataType.INTEGER)
-prop_type_UL_STOCK.setLabel('ul of 2nM stock')
-prop_type_UL_STOCK.setManagedInternally(False)
-
-
-prop_type_UNIQUE_BARCODES = tr.getOrCreateNewPropertyType('UNIQUE_BARCODES', DataType.VARCHAR)
-prop_type_UNIQUE_BARCODES.setLabel('Unique Barcodes in Pool?')
-prop_type_UNIQUE_BARCODES.setManagedInternally(False)
-
-
-prop_type_VERSION = tr.getOrCreateNewPropertyType('VERSION', DataType.VARCHAR)
-prop_type_VERSION.setLabel('Version')
-prop_type_VERSION.setManagedInternally(False)
-
-
-prop_type_YIELD_MBASES = tr.getOrCreateNewPropertyType('YIELD_MBASES', DataType.INTEGER)
-prop_type_YIELD_MBASES.setLabel('Yield(Mbases)')
-prop_type_YIELD_MBASES.setManagedInternally(False)
-
-
-prop_type_ZOOMLEVELS = tr.getOrCreateNewPropertyType('ZOOMLEVELS', DataType.INTEGER)
-prop_type_ZOOMLEVELS.setLabel('zoom Levels')
-prop_type_ZOOMLEVELS.setManagedInternally(False)
-
-
-print "Imported 92 Property Types" 
-assignment_DATA_SET_ALIGNMENT_ALIGNMENT_SOFTWARE = tr.assignPropertyType(data_set_type_ALIGNMENT, prop_type_ALIGNMENT_SOFTWARE)
-assignment_DATA_SET_ALIGNMENT_ALIGNMENT_SOFTWARE.setMandatory(False)
-assignment_DATA_SET_ALIGNMENT_ALIGNMENT_SOFTWARE.setSection(None)
-assignment_DATA_SET_ALIGNMENT_ALIGNMENT_SOFTWARE.setPositionInForms(3)
-
-assignment_DATA_SET_ALIGNMENT_VERSION = tr.assignPropertyType(data_set_type_ALIGNMENT, prop_type_VERSION)
-assignment_DATA_SET_ALIGNMENT_VERSION.setMandatory(False)
-assignment_DATA_SET_ALIGNMENT_VERSION.setSection(None)
-assignment_DATA_SET_ALIGNMENT_VERSION.setPositionInForms(4)
-
-assignment_DATA_SET_ALIGNMENT_NOTES = tr.assignPropertyType(data_set_type_ALIGNMENT, prop_type_NOTES)
-assignment_DATA_SET_ALIGNMENT_NOTES.setMandatory(False)
-assignment_DATA_SET_ALIGNMENT_NOTES.setSection(None)
-assignment_DATA_SET_ALIGNMENT_NOTES.setPositionInForms(5)
-
-assignment_DATA_SET_ALIGNMENT_SAMTOOLS_FLAGSTAT = tr.assignPropertyType(data_set_type_ALIGNMENT, prop_type_SAMTOOLS_FLAGSTAT)
-assignment_DATA_SET_ALIGNMENT_SAMTOOLS_FLAGSTAT.setMandatory(False)
-assignment_DATA_SET_ALIGNMENT_SAMTOOLS_FLAGSTAT.setSection(None)
-assignment_DATA_SET_ALIGNMENT_SAMTOOLS_FLAGSTAT.setPositionInForms(6)
-
-assignment_DATA_SET_ALIGNMENT_MAPPED_READS = tr.assignPropertyType(data_set_type_ALIGNMENT, prop_type_MAPPED_READS)
-assignment_DATA_SET_ALIGNMENT_MAPPED_READS.setMandatory(False)
-assignment_DATA_SET_ALIGNMENT_MAPPED_READS.setSection(None)
-assignment_DATA_SET_ALIGNMENT_MAPPED_READS.setPositionInForms(7)
-
-assignment_DATA_SET_ALIGNMENT_TOTAL_READS = tr.assignPropertyType(data_set_type_ALIGNMENT, prop_type_TOTAL_READS)
-assignment_DATA_SET_ALIGNMENT_TOTAL_READS.setMandatory(False)
-assignment_DATA_SET_ALIGNMENT_TOTAL_READS.setSection(None)
-assignment_DATA_SET_ALIGNMENT_TOTAL_READS.setPositionInForms(8)
-
-assignment_DATA_SET_ALIGNMENT_ISSUED_COMMAND = tr.assignPropertyType(data_set_type_ALIGNMENT, prop_type_ISSUED_COMMAND)
-assignment_DATA_SET_ALIGNMENT_ISSUED_COMMAND.setMandatory(False)
-assignment_DATA_SET_ALIGNMENT_ISSUED_COMMAND.setSection(None)
-assignment_DATA_SET_ALIGNMENT_ISSUED_COMMAND.setPositionInForms(9)
-
-assignment_DATA_SET_BASECALL_STATS_MISMATCH_IN_INDEX = tr.assignPropertyType(data_set_type_BASECALL_STATS, prop_type_MISMATCH_IN_INDEX)
-assignment_DATA_SET_BASECALL_STATS_MISMATCH_IN_INDEX.setMandatory(False)
-assignment_DATA_SET_BASECALL_STATS_MISMATCH_IN_INDEX.setSection(None)
-assignment_DATA_SET_BASECALL_STATS_MISMATCH_IN_INDEX.setPositionInForms(3)
-
-assignment_DATA_SET_BIGWIGGLE_NOTES = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_NOTES)
-assignment_DATA_SET_BIGWIGGLE_NOTES.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_NOTES.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_NOTES.setPositionInForms(3)
-
-assignment_DATA_SET_BIGWIGGLE_VERSION = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_VERSION)
-assignment_DATA_SET_BIGWIGGLE_VERSION.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_VERSION.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_VERSION.setPositionInForms(4)
-
-assignment_DATA_SET_BIGWIGGLE_ISCOMPRESSED = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_ISCOMPRESSED)
-assignment_DATA_SET_BIGWIGGLE_ISCOMPRESSED.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_ISCOMPRESSED.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_ISCOMPRESSED.setPositionInForms(5)
-
-assignment_DATA_SET_BIGWIGGLE_ISSWAPPED = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_ISSWAPPED)
-assignment_DATA_SET_BIGWIGGLE_ISSWAPPED.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_ISSWAPPED.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_ISSWAPPED.setPositionInForms(6)
-
-assignment_DATA_SET_BIGWIGGLE_PRIMARYDATASIZE = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_PRIMARYDATASIZE)
-assignment_DATA_SET_BIGWIGGLE_PRIMARYDATASIZE.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_PRIMARYDATASIZE.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_PRIMARYDATASIZE.setPositionInForms(7)
-
-assignment_DATA_SET_BIGWIGGLE_PRIMARYINDEXSIZE = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_PRIMARYINDEXSIZE)
-assignment_DATA_SET_BIGWIGGLE_PRIMARYINDEXSIZE.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_PRIMARYINDEXSIZE.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_PRIMARYINDEXSIZE.setPositionInForms(8)
-
-assignment_DATA_SET_BIGWIGGLE_ZOOMLEVELS = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_ZOOMLEVELS)
-assignment_DATA_SET_BIGWIGGLE_ZOOMLEVELS.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_ZOOMLEVELS.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_ZOOMLEVELS.setPositionInForms(9)
-
-assignment_DATA_SET_BIGWIGGLE_CHROMCOUNT = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_CHROMCOUNT)
-assignment_DATA_SET_BIGWIGGLE_CHROMCOUNT.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_CHROMCOUNT.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_CHROMCOUNT.setPositionInForms(10)
-
-assignment_DATA_SET_BIGWIGGLE_BASESCOVERED = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_BASESCOVERED)
-assignment_DATA_SET_BIGWIGGLE_BASESCOVERED.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_BASESCOVERED.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_BASESCOVERED.setPositionInForms(11)
-
-assignment_DATA_SET_BIGWIGGLE_MEAN = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_MEAN)
-assignment_DATA_SET_BIGWIGGLE_MEAN.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_MEAN.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_MEAN.setPositionInForms(12)
-
-assignment_DATA_SET_BIGWIGGLE_MIN = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_MIN)
-assignment_DATA_SET_BIGWIGGLE_MIN.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_MIN.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_MIN.setPositionInForms(13)
-
-assignment_DATA_SET_BIGWIGGLE_MAX = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_MAX)
-assignment_DATA_SET_BIGWIGGLE_MAX.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_MAX.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_MAX.setPositionInForms(14)
-
-assignment_DATA_SET_BIGWIGGLE_STD = tr.assignPropertyType(data_set_type_BIGWIGGLE, prop_type_STD)
-assignment_DATA_SET_BIGWIGGLE_STD.setMandatory(False)
-assignment_DATA_SET_BIGWIGGLE_STD.setSection(None)
-assignment_DATA_SET_BIGWIGGLE_STD.setPositionInForms(15)
-
-assignment_DATA_SET_FASTQ_GZ_NOTES = tr.assignPropertyType(data_set_type_FASTQ_GZ, prop_type_NOTES)
-assignment_DATA_SET_FASTQ_GZ_NOTES.setMandatory(False)
-assignment_DATA_SET_FASTQ_GZ_NOTES.setSection(None)
-assignment_DATA_SET_FASTQ_GZ_NOTES.setPositionInForms(3)
-
-assignment_DATA_SET_FASTQ_GZ_YIELD_MBASES = tr.assignPropertyType(data_set_type_FASTQ_GZ, prop_type_YIELD_MBASES)
-assignment_DATA_SET_FASTQ_GZ_YIELD_MBASES.setMandatory(False)
-assignment_DATA_SET_FASTQ_GZ_YIELD_MBASES.setSection(None)
-assignment_DATA_SET_FASTQ_GZ_YIELD_MBASES.setPositionInForms(4)
-
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PASSED_FILTERING = tr.assignPropertyType(data_set_type_FASTQ_GZ, prop_type_PERCENTAGE_PASSED_FILTERING)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PASSED_FILTERING.setMandatory(False)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PASSED_FILTERING.setSection(None)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PASSED_FILTERING.setPositionInForms(5)
-
-assignment_DATA_SET_FASTQ_GZ_INDEX1 = tr.assignPropertyType(data_set_type_FASTQ_GZ, prop_type_INDEX1)
-assignment_DATA_SET_FASTQ_GZ_INDEX1.setMandatory(False)
-assignment_DATA_SET_FASTQ_GZ_INDEX1.setSection(None)
-assignment_DATA_SET_FASTQ_GZ_INDEX1.setPositionInForms(6)
-
-assignment_DATA_SET_FASTQ_GZ_INDEX2 = tr.assignPropertyType(data_set_type_FASTQ_GZ, prop_type_INDEX2)
-assignment_DATA_SET_FASTQ_GZ_INDEX2.setMandatory(False)
-assignment_DATA_SET_FASTQ_GZ_INDEX2.setSection(None)
-assignment_DATA_SET_FASTQ_GZ_INDEX2.setPositionInForms(7)
-
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_RAW_CLUSTERS_PER_LANE = tr.assignPropertyType(data_set_type_FASTQ_GZ, prop_type_PERCENTAGE_RAW_CLUSTERS_PER_LANE)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_RAW_CLUSTERS_PER_LANE.setMandatory(False)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_RAW_CLUSTERS_PER_LANE.setSection(None)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_RAW_CLUSTERS_PER_LANE.setPositionInForms(8)
-
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PERFECT_INDEX_READS = tr.assignPropertyType(data_set_type_FASTQ_GZ, prop_type_PERCENTAGE_PERFECT_INDEX_READS)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PERFECT_INDEX_READS.setMandatory(False)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PERFECT_INDEX_READS.setSection(None)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_PERFECT_INDEX_READS.setPositionInForms(9)
-
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_ONE_MISMATCH_READS_INDEX = tr.assignPropertyType(data_set_type_FASTQ_GZ, prop_type_PERCENTAGE_ONE_MISMATCH_READS_INDEX)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_ONE_MISMATCH_READS_INDEX.setMandatory(False)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_ONE_MISMATCH_READS_INDEX.setSection(None)
-assignment_DATA_SET_FASTQ_GZ_PERCENTAGE_ONE_MISMATCH_READS_INDEX.setPositionInForms(10)
-
-assignment_EXPERIMENT_HT_SEQUENCING_EXPERIMENT_DESIGN = tr.assignPropertyType(exp_type_HT_SEQUENCING, prop_type_EXPERIMENT_DESIGN)
-assignment_EXPERIMENT_HT_SEQUENCING_EXPERIMENT_DESIGN.setMandatory(False)
-assignment_EXPERIMENT_HT_SEQUENCING_EXPERIMENT_DESIGN.setSection(None)
-assignment_EXPERIMENT_HT_SEQUENCING_EXPERIMENT_DESIGN.setPositionInForms(3)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_RUN_FOLDER_NAME = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_RUN_FOLDER_NAME)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_RUN_FOLDER_NAME.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_RUN_FOLDER_NAME.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_RUN_FOLDER_NAME.setPositionInForms(1)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_SEQUENCER)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER.setPositionInForms(5)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_END_TYPE = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_END_TYPE)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_END_TYPE.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_END_TYPE.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_END_TYPE.setPositionInForms(7)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOW_CELL_SEQUENCED_ON = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_FLOW_CELL_SEQUENCED_ON)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOW_CELL_SEQUENCED_ON.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOW_CELL_SEQUENCED_ON.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOW_CELL_SEQUENCED_ON.setPositionInForms(8)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER_FINISHED = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_SEQUENCER_FINISHED)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER_FINISHED.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER_FINISHED.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SEQUENCER_FINISHED.setPositionInForms(9)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_RUNNINGTIME = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_RUNNINGTIME)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_RUNNINGTIME.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_RUNNINGTIME.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_RUNNINGTIME.setPositionInForms(10)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_RUNNINGTIME.setScriptName('Diff_time')
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_RUNNINGTIME.setDynamic(True)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_RUNNINGTIME.setManaged(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_RUNNINGTIME.setShownEdit(False)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ILLUMINA_PIPELINE_VERSION = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_ILLUMINA_PIPELINE_VERSION)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ILLUMINA_PIPELINE_VERSION.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ILLUMINA_PIPELINE_VERSION.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ILLUMINA_PIPELINE_VERSION.setPositionInForms(11)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CYCLES = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_CYCLES)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CYCLES.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CYCLES.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CYCLES.setPositionInForms(14)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_INDEXREAD = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_INDEXREAD)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_INDEXREAD.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_INDEXREAD.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_INDEXREAD.setPositionInForms(17)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_INDEXREAD2 = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_INDEXREAD2)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_INDEXREAD2.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_INDEXREAD2.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_INDEXREAD2.setPositionInForms(18)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CONTROL_LANE = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_CONTROL_LANE)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CONTROL_LANE.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CONTROL_LANE.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CONTROL_LANE.setPositionInForms(19)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOWCELLTYPE = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_FLOWCELLTYPE)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOWCELLTYPE.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOWCELLTYPE.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_FLOWCELLTYPE.setPositionInForms(20)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_LANECOUNT = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_LANECOUNT)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_LANECOUNT.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_LANECOUNT.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_LANECOUNT.setPositionInForms(21)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SURFACECOUNT = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_SURFACECOUNT)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SURFACECOUNT.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SURFACECOUNT.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SURFACECOUNT.setPositionInForms(22)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SWATHCOUNT = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_SWATHCOUNT)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SWATHCOUNT.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SWATHCOUNT.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SWATHCOUNT.setPositionInForms(23)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_TILECOUNT = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_TILECOUNT)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_TILECOUNT.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_TILECOUNT.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_TILECOUNT.setPositionInForms(24)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SBS_KIT = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_SBS_KIT)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SBS_KIT.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SBS_KIT.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SBS_KIT.setPositionInForms(25)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_PAIRED_END_KIT = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_PAIRED_END_KIT)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_PAIRED_END_KIT.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_PAIRED_END_KIT.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_PAIRED_END_KIT.setPositionInForms(26)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CLUSTER_STATION = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_CLUSTER_STATION)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CLUSTER_STATION.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CLUSTER_STATION.setSection('Clustering')
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CLUSTER_STATION.setPositionInForms(27)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CREATED_ON_CS = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_CREATED_ON_CS)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CREATED_ON_CS.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CREATED_ON_CS.setSection('Clustering')
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CREATED_ON_CS.setPositionInForms(28)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CS_PROTOCOL_VERSION = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_CS_PROTOCOL_VERSION)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CS_PROTOCOL_VERSION.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CS_PROTOCOL_VERSION.setSection('Clustering')
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CS_PROTOCOL_VERSION.setPositionInForms(29)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CLUSTER_GENERATION_KIT_VERSION = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_CLUSTER_GENERATION_KIT_VERSION)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CLUSTER_GENERATION_KIT_VERSION.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CLUSTER_GENERATION_KIT_VERSION.setSection('Clustering')
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_CLUSTER_GENERATION_KIT_VERSION.setPositionInForms(30)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SBS_SEQUENCING_KIT_VERSION = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_SBS_SEQUENCING_KIT_VERSION)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SBS_SEQUENCING_KIT_VERSION.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SBS_SEQUENCING_KIT_VERSION.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_SBS_SEQUENCING_KIT_VERSION.setPositionInForms(32)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ANALYSIS_FINISHED = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_ANALYSIS_FINISHED)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ANALYSIS_FINISHED.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ANALYSIS_FINISHED.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_ANALYSIS_FINISHED.setPositionInForms(34)
-
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_NOTES = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_CELL, prop_type_NOTES)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_NOTES.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_NOTES.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_CELL_NOTES.setPositionInForms(35)
-
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CONCENTRATION_FLOWLANE = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_LANE, prop_type_CONCENTRATION_FLOWLANE)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CONCENTRATION_FLOWLANE.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CONCENTRATION_FLOWLANE.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_CONCENTRATION_FLOWLANE.setPositionInForms(20)
-
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_NOTES = tr.assignPropertyType(samp_type_ILLUMINA_FLOW_LANE, prop_type_NOTES)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_NOTES.setMandatory(False)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_NOTES.setSection(None)
-assignment_SAMPLE_ILLUMINA_FLOW_LANE_NOTES.setPositionInForms(23)
-
-assignment_DATA_SET_ILLUMINA_HISEQ_OUTPUT_CASAVA_VERSION = tr.assignPropertyType(data_set_type_ILLUMINA_HISEQ_OUTPUT, prop_type_CASAVA_VERSION)
-assignment_DATA_SET_ILLUMINA_HISEQ_OUTPUT_CASAVA_VERSION.setMandatory(False)
-assignment_DATA_SET_ILLUMINA_HISEQ_OUTPUT_CASAVA_VERSION.setSection(None)
-assignment_DATA_SET_ILLUMINA_HISEQ_OUTPUT_CASAVA_VERSION.setPositionInForms(3)
-
-assignment_SAMPLE_LIBRARY_EXTERNAL_SAMPLE_NAME = tr.assignPropertyType(samp_type_LIBRARY, prop_type_EXTERNAL_SAMPLE_NAME)
-assignment_SAMPLE_LIBRARY_EXTERNAL_SAMPLE_NAME.setMandatory(False)
-assignment_SAMPLE_LIBRARY_EXTERNAL_SAMPLE_NAME.setSection(None)
-assignment_SAMPLE_LIBRARY_EXTERNAL_SAMPLE_NAME.setPositionInForms(1)
-
-assignment_SAMPLE_LIBRARY_KIT = tr.assignPropertyType(samp_type_LIBRARY, prop_type_KIT)
-assignment_SAMPLE_LIBRARY_KIT.setMandatory(False)
-assignment_SAMPLE_LIBRARY_KIT.setSection(None)
-assignment_SAMPLE_LIBRARY_KIT.setPositionInForms(2)
-
-assignment_SAMPLE_LIBRARY_PREPARED_BY = tr.assignPropertyType(samp_type_LIBRARY, prop_type_PREPARED_BY)
-assignment_SAMPLE_LIBRARY_PREPARED_BY.setMandatory(False)
-assignment_SAMPLE_LIBRARY_PREPARED_BY.setSection(None)
-assignment_SAMPLE_LIBRARY_PREPARED_BY.setPositionInForms(3)
-
-assignment_SAMPLE_LIBRARY_STARTING_AMOUNT_OF_SAMPLE_IN_NG = tr.assignPropertyType(samp_type_LIBRARY, prop_type_STARTING_AMOUNT_OF_SAMPLE_IN_NG)
-assignment_SAMPLE_LIBRARY_STARTING_AMOUNT_OF_SAMPLE_IN_NG.setMandatory(False)
-assignment_SAMPLE_LIBRARY_STARTING_AMOUNT_OF_SAMPLE_IN_NG.setSection(None)
-assignment_SAMPLE_LIBRARY_STARTING_AMOUNT_OF_SAMPLE_IN_NG.setPositionInForms(4)
-
-assignment_SAMPLE_LIBRARY_INDEX1 = tr.assignPropertyType(samp_type_LIBRARY, prop_type_INDEX1)
-assignment_SAMPLE_LIBRARY_INDEX1.setMandatory(False)
-assignment_SAMPLE_LIBRARY_INDEX1.setSection(None)
-assignment_SAMPLE_LIBRARY_INDEX1.setPositionInForms(7)
-
-assignment_SAMPLE_LIBRARY_INDEX2 = tr.assignPropertyType(samp_type_LIBRARY, prop_type_INDEX2)
-assignment_SAMPLE_LIBRARY_INDEX2.setMandatory(False)
-assignment_SAMPLE_LIBRARY_INDEX2.setSection(None)
-assignment_SAMPLE_LIBRARY_INDEX2.setPositionInForms(8)
-
-assignment_SAMPLE_LIBRARY_LOT = tr.assignPropertyType(samp_type_LIBRARY, prop_type_LOT)
-assignment_SAMPLE_LIBRARY_LOT.setMandatory(False)
-assignment_SAMPLE_LIBRARY_LOT.setSection(None)
-assignment_SAMPLE_LIBRARY_LOT.setPositionInForms(9)
-
-assignment_SAMPLE_LIBRARY_AGILENT_KIT = tr.assignPropertyType(samp_type_LIBRARY, prop_type_AGILENT_KIT)
-assignment_SAMPLE_LIBRARY_AGILENT_KIT.setMandatory(False)
-assignment_SAMPLE_LIBRARY_AGILENT_KIT.setSection('QC Data')
-assignment_SAMPLE_LIBRARY_AGILENT_KIT.setPositionInForms(10)
-
-assignment_SAMPLE_LIBRARY_FRAGMENT_SIZE_PREPARED_ILLUMINA = tr.assignPropertyType(samp_type_LIBRARY, prop_type_FRAGMENT_SIZE_PREPARED_ILLUMINA)
-assignment_SAMPLE_LIBRARY_FRAGMENT_SIZE_PREPARED_ILLUMINA.setMandatory(False)
-assignment_SAMPLE_LIBRARY_FRAGMENT_SIZE_PREPARED_ILLUMINA.setSection('QC Data')
-assignment_SAMPLE_LIBRARY_FRAGMENT_SIZE_PREPARED_ILLUMINA.setPositionInForms(11)
-
-assignment_SAMPLE_LIBRARY_NANO_DROP = tr.assignPropertyType(samp_type_LIBRARY, prop_type_NANO_DROP)
-assignment_SAMPLE_LIBRARY_NANO_DROP.setMandatory(False)
-assignment_SAMPLE_LIBRARY_NANO_DROP.setSection('QC Data')
-assignment_SAMPLE_LIBRARY_NANO_DROP.setPositionInForms(12)
-
-assignment_SAMPLE_LIBRARY_CONCENTRATION_PREPARED_ILLUMINA = tr.assignPropertyType(samp_type_LIBRARY, prop_type_CONCENTRATION_PREPARED_ILLUMINA)
-assignment_SAMPLE_LIBRARY_CONCENTRATION_PREPARED_ILLUMINA.setMandatory(False)
-assignment_SAMPLE_LIBRARY_CONCENTRATION_PREPARED_ILLUMINA.setSection('QC Data')
-assignment_SAMPLE_LIBRARY_CONCENTRATION_PREPARED_ILLUMINA.setPositionInForms(13)
-
-assignment_SAMPLE_LIBRARY_DNA_CONCENTRATION_OF_LIBRARY = tr.assignPropertyType(samp_type_LIBRARY, prop_type_DNA_CONCENTRATION_OF_LIBRARY)
-assignment_SAMPLE_LIBRARY_DNA_CONCENTRATION_OF_LIBRARY.setMandatory(False)
-assignment_SAMPLE_LIBRARY_DNA_CONCENTRATION_OF_LIBRARY.setSection('QC Data')
-assignment_SAMPLE_LIBRARY_DNA_CONCENTRATION_OF_LIBRARY.setPositionInForms(14)
-
-assignment_SAMPLE_LIBRARY_LIBRARY_PROCESSING_SUCCESSFUL = tr.assignPropertyType(samp_type_LIBRARY, prop_type_LIBRARY_PROCESSING_SUCCESSFUL)
-assignment_SAMPLE_LIBRARY_LIBRARY_PROCESSING_SUCCESSFUL.setMandatory(False)
-assignment_SAMPLE_LIBRARY_LIBRARY_PROCESSING_SUCCESSFUL.setSection('QC Data')
-assignment_SAMPLE_LIBRARY_LIBRARY_PROCESSING_SUCCESSFUL.setPositionInForms(15)
-
-assignment_SAMPLE_LIBRARY_LIBRARY_PROCESSING_FAILED = tr.assignPropertyType(samp_type_LIBRARY, prop_type_LIBRARY_PROCESSING_FAILED)
-assignment_SAMPLE_LIBRARY_LIBRARY_PROCESSING_FAILED.setMandatory(False)
-assignment_SAMPLE_LIBRARY_LIBRARY_PROCESSING_FAILED.setSection('QC Data')
-assignment_SAMPLE_LIBRARY_LIBRARY_PROCESSING_FAILED.setPositionInForms(16)
-
-assignment_SAMPLE_LIBRARY_QC_AT_DBSSE = tr.assignPropertyType(samp_type_LIBRARY, prop_type_QC_AT_DBSSE)
-assignment_SAMPLE_LIBRARY_QC_AT_DBSSE.setMandatory(False)
-assignment_SAMPLE_LIBRARY_QC_AT_DBSSE.setSection('QC Data')
-assignment_SAMPLE_LIBRARY_QC_AT_DBSSE.setPositionInForms(17)
-
-assignment_SAMPLE_LIBRARY_KIT_PREPARED = tr.assignPropertyType(samp_type_LIBRARY, prop_type_KIT_PREPARED)
-assignment_SAMPLE_LIBRARY_KIT_PREPARED.setMandatory(False)
-assignment_SAMPLE_LIBRARY_KIT_PREPARED.setSection(None)
-assignment_SAMPLE_LIBRARY_KIT_PREPARED.setPositionInForms(18)
-
-assignment_SAMPLE_LIBRARY_DATA_TRANSFERRED = tr.assignPropertyType(samp_type_LIBRARY, prop_type_DATA_TRANSFERRED)
-assignment_SAMPLE_LIBRARY_DATA_TRANSFERRED.setMandatory(False)
-assignment_SAMPLE_LIBRARY_DATA_TRANSFERRED.setSection(None)
-assignment_SAMPLE_LIBRARY_DATA_TRANSFERRED.setPositionInForms(19)
-
-assignment_SAMPLE_LIBRARY_INVOICE = tr.assignPropertyType(samp_type_LIBRARY, prop_type_INVOICE)
-assignment_SAMPLE_LIBRARY_INVOICE.setMandatory(False)
-assignment_SAMPLE_LIBRARY_INVOICE.setSection(None)
-assignment_SAMPLE_LIBRARY_INVOICE.setPositionInForms(20)
-
-assignment_SAMPLE_LIBRARY_NOTES = tr.assignPropertyType(samp_type_LIBRARY, prop_type_NOTES)
-assignment_SAMPLE_LIBRARY_NOTES.setMandatory(False)
-assignment_SAMPLE_LIBRARY_NOTES.setSection(None)
-assignment_SAMPLE_LIBRARY_NOTES.setPositionInForms(33)
-
-assignment_SAMPLE_LIBRARY_POOL_EXTERNAL_SAMPLE_NAME = tr.assignPropertyType(samp_type_LIBRARY_POOL, prop_type_EXTERNAL_SAMPLE_NAME)
-assignment_SAMPLE_LIBRARY_POOL_EXTERNAL_SAMPLE_NAME.setMandatory(False)
-assignment_SAMPLE_LIBRARY_POOL_EXTERNAL_SAMPLE_NAME.setSection(None)
-assignment_SAMPLE_LIBRARY_POOL_EXTERNAL_SAMPLE_NAME.setPositionInForms(1)
-
-assignment_SAMPLE_LIBRARY_POOL_PREPARED_BY = tr.assignPropertyType(samp_type_LIBRARY_POOL, prop_type_PREPARED_BY)
-assignment_SAMPLE_LIBRARY_POOL_PREPARED_BY.setMandatory(False)
-assignment_SAMPLE_LIBRARY_POOL_PREPARED_BY.setSection(None)
-assignment_SAMPLE_LIBRARY_POOL_PREPARED_BY.setPositionInForms(2)
-
-assignment_SAMPLE_LIBRARY_POOL_DNA_CONCENTRATION_POOL = tr.assignPropertyType(samp_type_LIBRARY_POOL, prop_type_DNA_CONCENTRATION_POOL)
-assignment_SAMPLE_LIBRARY_POOL_DNA_CONCENTRATION_POOL.setMandatory(False)
-assignment_SAMPLE_LIBRARY_POOL_DNA_CONCENTRATION_POOL.setSection(None)
-assignment_SAMPLE_LIBRARY_POOL_DNA_CONCENTRATION_POOL.setPositionInForms(3)
-
-assignment_SAMPLE_LIBRARY_POOL_QC_REQUIRED = tr.assignPropertyType(samp_type_LIBRARY_POOL, prop_type_QC_REQUIRED)
-assignment_SAMPLE_LIBRARY_POOL_QC_REQUIRED.setMandatory(False)
-assignment_SAMPLE_LIBRARY_POOL_QC_REQUIRED.setSection(None)
-assignment_SAMPLE_LIBRARY_POOL_QC_REQUIRED.setPositionInForms(4)
-
-assignment_SAMPLE_LIBRARY_POOL_AGILENT_KIT = tr.assignPropertyType(samp_type_LIBRARY_POOL, prop_type_AGILENT_KIT)
-assignment_SAMPLE_LIBRARY_POOL_AGILENT_KIT.setMandatory(False)
-assignment_SAMPLE_LIBRARY_POOL_AGILENT_KIT.setSection('QC Data')
-assignment_SAMPLE_LIBRARY_POOL_AGILENT_KIT.setPositionInForms(5)
-
-assignment_SAMPLE_LIBRARY_POOL_FRAGMENT_SIZE_BASE_PAIRS = tr.assignPropertyType(samp_type_LIBRARY_POOL, prop_type_FRAGMENT_SIZE_BASE_PAIRS)
-assignment_SAMPLE_LIBRARY_POOL_FRAGMENT_SIZE_BASE_PAIRS.setMandatory(False)
-assignment_SAMPLE_LIBRARY_POOL_FRAGMENT_SIZE_BASE_PAIRS.setSection('QC Data')
-assignment_SAMPLE_LIBRARY_POOL_FRAGMENT_SIZE_BASE_PAIRS.setPositionInForms(6)
-
-assignment_SAMPLE_LIBRARY_POOL_NANO_DROP = tr.assignPropertyType(samp_type_LIBRARY_POOL, prop_type_NANO_DROP)
-assignment_SAMPLE_LIBRARY_POOL_NANO_DROP.setMandatory(False)
-assignment_SAMPLE_LIBRARY_POOL_NANO_DROP.setSection('QC Data')
-assignment_SAMPLE_LIBRARY_POOL_NANO_DROP.setPositionInForms(7)
-
-assignment_SAMPLE_LIBRARY_POOL_CONCENTRATION = tr.assignPropertyType(samp_type_LIBRARY_POOL, prop_type_CONCENTRATION)
-assignment_SAMPLE_LIBRARY_POOL_CONCENTRATION.setMandatory(False)
-assignment_SAMPLE_LIBRARY_POOL_CONCENTRATION.setSection('QC Data')
-assignment_SAMPLE_LIBRARY_POOL_CONCENTRATION.setPositionInForms(8)
-
-assignment_SAMPLE_LIBRARY_POOL_DNA_CONCENTRATION_QGF = tr.assignPropertyType(samp_type_LIBRARY_POOL, prop_type_DNA_CONCENTRATION_QGF)
-assignment_SAMPLE_LIBRARY_POOL_DNA_CONCENTRATION_QGF.setMandatory(False)
-assignment_SAMPLE_LIBRARY_POOL_DNA_CONCENTRATION_QGF.setSection('QC Data')
-assignment_SAMPLE_LIBRARY_POOL_DNA_CONCENTRATION_QGF.setPositionInForms(9)
-
-assignment_SAMPLE_LIBRARY_POOL_INVOICE = tr.assignPropertyType(samp_type_LIBRARY_POOL, prop_type_INVOICE)
-assignment_SAMPLE_LIBRARY_POOL_INVOICE.setMandatory(False)
-assignment_SAMPLE_LIBRARY_POOL_INVOICE.setSection(None)
-assignment_SAMPLE_LIBRARY_POOL_INVOICE.setPositionInForms(10)
-
-assignment_SAMPLE_LIBRARY_POOL_NOTES = tr.assignPropertyType(samp_type_LIBRARY_POOL, prop_type_NOTES)
-assignment_SAMPLE_LIBRARY_POOL_NOTES.setMandatory(False)
-assignment_SAMPLE_LIBRARY_POOL_NOTES.setSection(None)
-assignment_SAMPLE_LIBRARY_POOL_NOTES.setPositionInForms(11)
-
-assignment_DATA_SET_MACS_OUTPUT_MACS_VERSION = tr.assignPropertyType(data_set_type_MACS_OUTPUT, prop_type_MACS_VERSION)
-assignment_DATA_SET_MACS_OUTPUT_MACS_VERSION.setMandatory(False)
-assignment_DATA_SET_MACS_OUTPUT_MACS_VERSION.setSection(None)
-assignment_DATA_SET_MACS_OUTPUT_MACS_VERSION.setPositionInForms(3)
-
-assignment_DATA_SET_MACS_OUTPUT_NOTES = tr.assignPropertyType(data_set_type_MACS_OUTPUT, prop_type_NOTES)
-assignment_DATA_SET_MACS_OUTPUT_NOTES.setMandatory(False)
-assignment_DATA_SET_MACS_OUTPUT_NOTES.setSection(None)
-assignment_DATA_SET_MACS_OUTPUT_NOTES.setPositionInForms(4)
-
-assignment_SAMPLE_MASTER_SAMPLE_BIOLOGICAL_SAMPLE_ARRIVED = tr.assignPropertyType(samp_type_MASTER_SAMPLE, prop_type_BIOLOGICAL_SAMPLE_ARRIVED)
-assignment_SAMPLE_MASTER_SAMPLE_BIOLOGICAL_SAMPLE_ARRIVED.setMandatory(True)
-assignment_SAMPLE_MASTER_SAMPLE_BIOLOGICAL_SAMPLE_ARRIVED.setSection(None)
-assignment_SAMPLE_MASTER_SAMPLE_BIOLOGICAL_SAMPLE_ARRIVED.setPositionInForms(1)
-
-assignment_SAMPLE_MASTER_SAMPLE_CONTACT_PERSON_EMAIL = tr.assignPropertyType(samp_type_MASTER_SAMPLE, prop_type_CONTACT_PERSON_EMAIL)
-assignment_SAMPLE_MASTER_SAMPLE_CONTACT_PERSON_EMAIL.setMandatory(True)
-assignment_SAMPLE_MASTER_SAMPLE_CONTACT_PERSON_EMAIL.setSection(None)
-assignment_SAMPLE_MASTER_SAMPLE_CONTACT_PERSON_EMAIL.setPositionInForms(2)
-
-assignment_SAMPLE_MASTER_SAMPLE_CONTACT_PERSON_NAME = tr.assignPropertyType(samp_type_MASTER_SAMPLE, prop_type_CONTACT_PERSON_NAME)
-assignment_SAMPLE_MASTER_SAMPLE_CONTACT_PERSON_NAME.setMandatory(True)
-assignment_SAMPLE_MASTER_SAMPLE_CONTACT_PERSON_NAME.setSection(None)
-assignment_SAMPLE_MASTER_SAMPLE_CONTACT_PERSON_NAME.setPositionInForms(3)
-
-assignment_SAMPLE_MASTER_SAMPLE_PRINCIPAL_INVESTIGATOR_EMAIL = tr.assignPropertyType(samp_type_MASTER_SAMPLE, prop_type_PRINCIPAL_INVESTIGATOR_EMAIL)
-assignment_SAMPLE_MASTER_SAMPLE_PRINCIPAL_INVESTIGATOR_EMAIL.setMandatory(True)
-assignment_SAMPLE_MASTER_SAMPLE_PRINCIPAL_INVESTIGATOR_EMAIL.setSection(None)
-assignment_SAMPLE_MASTER_SAMPLE_PRINCIPAL_INVESTIGATOR_EMAIL.setPositionInForms(4)
-
-assignment_SAMPLE_MASTER_SAMPLE_PRINCIPAL_INVESTIGATOR_NAME = tr.assignPropertyType(samp_type_MASTER_SAMPLE, prop_type_PRINCIPAL_INVESTIGATOR_NAME)
-assignment_SAMPLE_MASTER_SAMPLE_PRINCIPAL_INVESTIGATOR_NAME.setMandatory(True)
-assignment_SAMPLE_MASTER_SAMPLE_PRINCIPAL_INVESTIGATOR_NAME.setSection(None)
-assignment_SAMPLE_MASTER_SAMPLE_PRINCIPAL_INVESTIGATOR_NAME.setPositionInForms(5)
-
-assignment_SAMPLE_MASTER_SAMPLE_NCBI_ORGANISM_TAXONOMY = tr.assignPropertyType(samp_type_MASTER_SAMPLE, prop_type_NCBI_ORGANISM_TAXONOMY)
-assignment_SAMPLE_MASTER_SAMPLE_NCBI_ORGANISM_TAXONOMY.setMandatory(True)
-assignment_SAMPLE_MASTER_SAMPLE_NCBI_ORGANISM_TAXONOMY.setSection(None)
-assignment_SAMPLE_MASTER_SAMPLE_NCBI_ORGANISM_TAXONOMY.setPositionInForms(7)
-
-assignment_SAMPLE_MASTER_SAMPLE_SAMPLE_KIND = tr.assignPropertyType(samp_type_MASTER_SAMPLE, prop_type_SAMPLE_KIND)
-assignment_SAMPLE_MASTER_SAMPLE_SAMPLE_KIND.setMandatory(True)
-assignment_SAMPLE_MASTER_SAMPLE_SAMPLE_KIND.setSection(None)
-assignment_SAMPLE_MASTER_SAMPLE_SAMPLE_KIND.setPositionInForms(21)
-
-assignment_SAMPLE_MASTER_SAMPLE_NOTES = tr.assignPropertyType(samp_type_MASTER_SAMPLE, prop_type_NOTES)
-assignment_SAMPLE_MASTER_SAMPLE_NOTES.setMandatory(False)
-assignment_SAMPLE_MASTER_SAMPLE_NOTES.setSection(None)
-assignment_SAMPLE_MASTER_SAMPLE_NOTES.setPositionInForms(22)
-
-assignment_SAMPLE_RAW_SAMPLE_EXTERNAL_SAMPLE_NAME = tr.assignPropertyType(samp_type_RAW_SAMPLE, prop_type_EXTERNAL_SAMPLE_NAME)
-assignment_SAMPLE_RAW_SAMPLE_EXTERNAL_SAMPLE_NAME.setMandatory(False)
-assignment_SAMPLE_RAW_SAMPLE_EXTERNAL_SAMPLE_NAME.setSection(None)
-assignment_SAMPLE_RAW_SAMPLE_EXTERNAL_SAMPLE_NAME.setPositionInForms(1)
-
-assignment_SAMPLE_RAW_SAMPLE_CONCENTRATION_ORIGINAL_ILLUMINA = tr.assignPropertyType(samp_type_RAW_SAMPLE, prop_type_CONCENTRATION_ORIGINAL_ILLUMINA)
-assignment_SAMPLE_RAW_SAMPLE_CONCENTRATION_ORIGINAL_ILLUMINA.setMandatory(False)
-assignment_SAMPLE_RAW_SAMPLE_CONCENTRATION_ORIGINAL_ILLUMINA.setSection(None)
-assignment_SAMPLE_RAW_SAMPLE_CONCENTRATION_ORIGINAL_ILLUMINA.setPositionInForms(4)
-
-assignment_SAMPLE_RAW_SAMPLE_PREPARED_BY = tr.assignPropertyType(samp_type_RAW_SAMPLE, prop_type_PREPARED_BY)
-assignment_SAMPLE_RAW_SAMPLE_PREPARED_BY.setMandatory(False)
-assignment_SAMPLE_RAW_SAMPLE_PREPARED_BY.setSection(None)
-assignment_SAMPLE_RAW_SAMPLE_PREPARED_BY.setPositionInForms(8)
-
-assignment_SAMPLE_RAW_SAMPLE_KIT_PREPARED = tr.assignPropertyType(samp_type_RAW_SAMPLE, prop_type_KIT_PREPARED)
-assignment_SAMPLE_RAW_SAMPLE_KIT_PREPARED.setMandatory(False)
-assignment_SAMPLE_RAW_SAMPLE_KIT_PREPARED.setSection(None)
-assignment_SAMPLE_RAW_SAMPLE_KIT_PREPARED.setPositionInForms(9)
-
-assignment_SAMPLE_RAW_SAMPLE_LIBRARY_PROCESSING_POSSIBLE_YES_NO = tr.assignPropertyType(samp_type_RAW_SAMPLE, prop_type_LIBRARY_PROCESSING_POSSIBLE_YES_NO)
-assignment_SAMPLE_RAW_SAMPLE_LIBRARY_PROCESSING_POSSIBLE_YES_NO.setMandatory(False)
-assignment_SAMPLE_RAW_SAMPLE_LIBRARY_PROCESSING_POSSIBLE_YES_NO.setSection(None)
-assignment_SAMPLE_RAW_SAMPLE_LIBRARY_PROCESSING_POSSIBLE_YES_NO.setPositionInForms(10)
-
-assignment_SAMPLE_RAW_SAMPLE_NOTES = tr.assignPropertyType(samp_type_RAW_SAMPLE, prop_type_NOTES)
-assignment_SAMPLE_RAW_SAMPLE_NOTES.setMandatory(False)
-assignment_SAMPLE_RAW_SAMPLE_NOTES.setSection(None)
-assignment_SAMPLE_RAW_SAMPLE_NOTES.setPositionInForms(13)
-
-print "Imported 104 Property Assignments" 
-print "Imported 0 External DMSs" 
-print ("Import of Master Data finished.") 
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/data-sources/.gitignore b/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/data-sources/.gitignore
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/create-flowcell-hiseq/create-flowcell-hiseq.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/create-flowcell-hiseq/create-flowcell-hiseq.py
deleted file mode 100644
index b306ec30deb..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/create-flowcell-hiseq/create-flowcell-hiseq.py
+++ /dev/null
@@ -1,221 +0,0 @@
-'''
-@copyright:
-2013 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Parses the two Illumina provided files 'runParameters.xml' and 'RunInfo.xml'
-and creates one Sample of type 'ILLUMINA_FLOW_CELL' and sets Sample properties 
-from those two XML files. Additionally the number of lanes are read out and
-are created as contained samples of type 'ILLUMINA_FLOW_LANE'.
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for HiSeq runs: 110715_SN792_0054_BC035RACXX
-
-structure:
-110715_SN792_0054_BC035RACXX/
-    runParameters.xml
-    RunInfo.xml
-
-The run folder created by the HiSeq sequencer is used to create a new 
-ILLUMINA_FLOW_CELL in openBIS. The properties are then set by parsing the
-two XML files in this folder.
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import shutil
-from time import *
-from datetime import *
-import xml.etree.ElementTree as etree
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-RUNPARAMETERS = 'runParameters.xml'
-RUNINFO = 'RunInfo.xml'
-FLOWCELL_SPACE='BSSE_FLOWCELLS'
-FLOWCELL_PROJECT='FLOWCELLS'
-EXPERIMENT_TYPE_CODE='HT_SEQUENCING'
-FLOW_CELL='ILLUMINA_FLOW_CELL'
-FLOW_LANE='ILLUMINA_FLOW_LANE'
-
-FLOWCELL_PROJECT_ID = "/%(FLOWCELL_SPACE)s/%(FLOWCELL_PROJECT)s" % vars()
-
-# Mapping between XML file naming and used in here
-RUNPARAMETERS_XML = {'FLOWCELL':'Flowcell', 'RTAVERSION':'RTAVersion',
-  'CONTROLLANE':'ControlLane', 'SBS':'Sbs', 'INDEX':'Index',
-  'CYCLES':'Read1', 'PE':'Pe'}
-RUNINFO_XML = {'LANECOUNT':'LaneCount', 'SURFACECOUNT':'SurfaceCount',
-   'SWATHCOUNT':'SwathCount', 'TILECOUNT':'TileCount'}
-
-class parseXmlFile: 
-    
-  def __init__(self, xmlFile):
-    self.xmlFile = xmlFile
-    self.tree = etree.parse(self.xmlFile)
-    self.root = self.tree.getroot()
-
-  def getXmlElement (self, elementName):
-    '''
-    Returns the text value of a given XML element
-    '''
-    for e in self.root.getchildren():
-      element = e.find(elementName)
-      if element is None:
-        return 'None'
-      else:
-        return element.text
-
-  def getAllchildren (self, elementName):
-    '''
-    finds all children of a given XML Element and returns them as list
-    '''
-    for e in self.root.getchildren():
-      # the '//' means look recursively for all children not only direct ones
-      childList  = self.tree.findall('//' + elementName)
-    return childList 
-
-# -----------------------------------------------------------------------------
-
-def create_openbis_timestamp (): 
-  ''' 
-  Create an openBIS conform timestamp
-  '''
-  tz=localtime()[3]-gmtime()[3]
-  d=datetime.now()
-  return d.strftime("%Y-%m-%d %H:%M:%S GMT"+"%+.2d" % tz+":00")
-
-# -----------------------------------------------------------------------------
-
-def registerFlowLane(transaction, a_lane, flowCellName, newFlowCell, exp, projectSamplesEnabled):
-  '''
-  Registers a new Flow lane 
-  '''
-  newFlowLane = createNewSample(transaction, flowCellName + ':' + str(a_lane), FLOW_LANE, projectSamplesEnabled)
-  newFlowLane.setContainer(newFlowCell)
-  newFlowLane.setExperiment(exp)
-
-# -----------------------------------------------------------------------------
-
-def createNewSample(transaction, sampleCode, sampleType, projectSamplesEnabled):
-  '''
-  Create a sample with specified code and type. Depending on the flag projectSamplesEnabled
-  the identifier is constructed differently.
-  '''
-  identifierPrefix = FLOWCELL_PROJECT_ID if projectSamplesEnabled else ('/' + FLOWCELL_SPACE)
-  return transaction.createNewSample(identifierPrefix + '/' + sampleCode, sampleType)
-  
-# -----------------------------------------------------------------------------
-
-def extractFlowCellName (runFolderName):
-  return runFolderName.split('_')[-1][1:]
-
-# -----------------------------------------------------------------------------
-
-def searchFlowCell (transaction, flowCellName):
-  '''
-  Search for the sample and check if there is already sample with this name
-  '''
-  search_service = transaction.getSearchService()
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch( \
-                    SearchCriteria.MatchClauseAttribute.CODE, flowCellName));
-  foundSamples = search_service.searchForSamples(sc)
-  if foundSamples.size() > 0:
-    raise NameError('Already found a flow cell with the following name: '+ flowCellName)
-  return foundSamples
-
-# -----------------------------------------------------------------------------
-
-def process(transaction):
-  projectSamplesEnabled = (transaction.serverInformation.get('project-samples-enabled') == 'true')
-  
-  incoming = transaction.getIncoming()
-  incomingPath = incoming.getAbsolutePath()
-
-  runFolderName = incoming.getName()
-  flowCellName = runFolderName.split('_')[-1][1:]
-
-  searchFlowCell (transaction, flowCellName)
-
-  # Parse the RunInfo.xml file
-  runInfo = parseXmlFile(incomingPath + '/' + RUNINFO) 
-
-  # Create a new Flow Cell and set the experiment
-  project = transaction.getProject(FLOWCELL_PROJECT_ID)
-  if project == None:
-    space = transaction.getSpace(FLOWCELL_SPACE)
-    if space == None:
-      space = transaction.createNewSpace(FLOWCELL_SPACE, None)
-    project = transaction.createNewProject(FLOWCELL_PROJECT_ID)
-  #expID = FLOWCELL_PROJECT_ID + '/' + datetime.now().strftime("%Y.%m")
-  expID = FLOWCELL_PROJECT_ID + '/' + "Test-Experiment"
-  exp = transaction.getExperiment(expID)
-  if exp == None:
-    exp = transaction.createNewExperiment(expID, EXPERIMENT_TYPE_CODE)
-  newFlowCell = createNewSample(transaction, flowCellName, FLOW_CELL, projectSamplesEnabled)
-  newFlowCell.setExperiment(exp)
- 
-  run = runInfo.getAllchildren('Run')[0].attrib
-  if (extractFlowCellName(run['Id']) != flowCellName):
-    raise NameError('Flowcell names do not match between directory name '+ flowCellName +
-          ' and ' + RUNINFO + 'property file: ' + extractFlowCellName(run['Id']))
-
-
-  # The HiSeq is providing more infos in the runParameters.xml, which we will parse here:
-  runParameters = parseXmlFile(incomingPath + '/' + RUNPARAMETERS)
-    
-  newFlowCell.setPropertyValue("RUN_FOLDER_NAME", runFolderName)
-  newFlowCell.setPropertyValue("ILLUMINA_PIPELINE_VERSION", runParameters.getXmlElement(RUNPARAMETERS_XML['RTAVERSION']))
-  newFlowCell.setPropertyValue("FLOWCELLTYPE", runParameters.getXmlElement(RUNPARAMETERS_XML['FLOWCELL']))
-  newFlowCell.setPropertyValue("CONTROL_LANE", runParameters.getXmlElement(RUNPARAMETERS_XML['CONTROLLANE']))
-  newFlowCell.setPropertyValue("SBS_KIT", runParameters.getXmlElement(RUNPARAMETERS_XML['SBS']))
-    
-  read1 = runParameters.getAllchildren('Read1')
-  newFlowCell.setPropertyValue("CYCLES", read1[0].text)
-   
-  read2 = runParameters.getAllchildren('Read2')
-  if (str(read2[0].text) == '0'):
-    newFlowCell.setPropertyValue("END_TYPE", "SINGLE_READ") 
-  else:
-    newFlowCell.setPropertyValue("END_TYPE", "PAIRED_END") 
-    newFlowCell.setPropertyValue("PAIRED_END_KIT", runParameters.getXmlElement(RUNPARAMETERS_XML['PE']))
-    
-  indexRead1 = runParameters.getAllchildren('IndexRead1')
-  newFlowCell.setPropertyValue("INDEXREAD", indexRead1[0].text) 
-    
-  indexRead2 = runParameters.getAllchildren('IndexRead2')
-  newFlowCell.setPropertyValue("INDEXREAD2", indexRead2[0].text) 
-  
-  def setFcProperty(searchId, dict):
-    children = runInfo.getAllchildren(searchId) 
-    for element in (dict):
-      if (element <> '') and (dict[element] <> ''):
-        newFlowCell.setPropertyValue(element, children[0].attrib[dict[element]])
-
-  setFcProperty('FlowcellLayout', RUNINFO_XML)
-
-  sequencer = runInfo.getAllchildren('Instrument')
-  newFlowCell.setPropertyValue("SEQUENCER", sequencer[0].text)
-
-  newFlowCell.setPropertyValue("FLOW_CELL_SEQUENCED_ON", create_openbis_timestamp())
-  try:
-    maxLanes = runInfo.getAllchildren('FlowcellLayout')[0].attrib[RUNINFO_XML['LANECOUNT']]
-  except:
-    maxLanes = len(runInfo.getAllchildren('Tiles')[0])
-
-  [registerFlowLane(transaction, lane, flowCellName, newFlowCell, exp, projectSamplesEnabled) for lane in range(1,int(maxLanes)+1)]
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/create-flowcell-hiseq/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/create-flowcell-hiseq/plugin.properties
deleted file mode 100644
index 5c56666b206..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/create-flowcell-hiseq/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for creating a flow cell based on runParameters.xml and RunInfo.xml created by an 
-# Illumina HiSeq 
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/create-flowcell-hiseq
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = create-flowcell-hiseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/read-rta-timestamp/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/read-rta-timestamp/plugin.properties
deleted file mode 100644
index ef56111b768..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/read-rta-timestamp/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/read-rta-timestamp
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = read-rta-timestamp.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/read-rta-timestamp/read-rta-timestamp.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/read-rta-timestamp/read-rta-timestamp.py
deleted file mode 100644
index 2b1687925ad..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/read-rta-timestamp/read-rta-timestamp.py
+++ /dev/null
@@ -1,76 +0,0 @@
-'''
-@copyright:
-2013 ETH Zuerich, CISD
-
-@license:
-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.
-
-@description:
-Reads out the time stamp of the file 'RTAComplete.txt' and sets the 
-property for a finished sequencer called 'SEQUENCER_FINISHED' to the
-time stamp of this file.
-
-@note:
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for HiSeq runs: 110715_SN792_0054_BC035RACXX
-
-structure:
-110715_SN792_0054_BC035RACXX/
-        RTAComplete.txt
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import shutil
-from time import *
-from datetime import *
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-MarkerHiSeqComplete = 'RTAComplete.txt'
-
-def createOpenbisTimeStamp(file):
-  '''
-  Creates a openBIS compatible time stamp of a file time stamp
-  '''
-  mtime = os.path.getmtime(file)
-  lt = localtime(mtime)
-  tz = localtime().tm_hour - gmtime().tm_hour
-  return (strftime("%Y-%m-%d %H:%M:%S GMT" + "%+.2d" % tz + ":00", lt))
-
-# -----------------------------------------------------------------------------
-
-def extractFlowCellName (runFolderName):
-  return runFolderName.split('_')[-1][1:]
-
-# -----------------------------------------------------------------------------
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getAbsolutePath()
-  # Get the incoming name 
-  runFolderName = transaction.getIncoming().getName()
-  flowCellName = extractFlowCellName(runFolderName)
-
-  Markerfile = incomingPath + "/" + MarkerHiSeqComplete
-
-  # Search for the sample and check if there is already sample with this name
-  search_service = transaction.getSearchService()
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCellName));
-  foundSamples = search_service.searchForSamples(sc)
-
-  if foundSamples.size() > 0:
-      sa = transaction.getSampleForUpdate(foundSamples[0].getSampleIdentifier())
-      sa.setPropertyValue("SEQUENCER_FINISHED", createOpenbisTimeStamp(Markerfile))
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-basecall-stats/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-basecall-stats/plugin.properties
deleted file mode 100644
index d6e67945db5..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-basecall-stats/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-basecall-stats
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-basecall-stats.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-basecall-stats/register-basecall-stats.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-basecall-stats/register-basecall-stats.py
deleted file mode 100644
index 4c47f6a072d..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-basecall-stats/register-basecall-stats.py
+++ /dev/null
@@ -1,62 +0,0 @@
-'''
-@copyright:
-2013 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Registers an incoming directory as a 'BASECALL_STATS' data set in openBIS.
-The name of the directory is used to search for the matching sample. 
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for HiSeq runs: C035RACXX_1
-expected incoming Name for MiSeq runs: A0T19_1
-
-@author:
-Manuel Kohler
-'''
-
-import os
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-# -----------------------------------------------------------------------------
-
-def extractFlowCellName (runFolderName):
-  flowCell, flowLane =  runFolderName.split('_')
-  return flowCell, flowLane
-
-# -----------------------------------------------------------------------------
-
-def process(transaction):
-
-  runFolderName = transaction.getIncoming().getName()
-  incomingPath = transaction.getIncoming().getPath()
-  flowCellName, flowLaneName = extractFlowCellName(runFolderName)
-  
-  # Create a data set and set type
-  dataSet = transaction.createNewDataSet("BASECALL_STATS")
-  dataSet.setMeasuredData(False)
-
-  dataSet.setPropertyValue("MISMATCH_IN_INDEX", "NONE")
-    
-  search_service = transaction.getSearchService()
-  transaction.moveFile(incomingPath, dataSet)
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCellName + ':' + flowLaneName))
-  foundSamples = search_service.searchForSamples(sc)
-
-  if foundSamples.size() > 0:
-    dataSet.setSample(foundSamples[0])
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-flowcell/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-flowcell/plugin.properties
deleted file mode 100644
index 697c1d5d3cb..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-flowcell/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-flowcell-hiseq
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-flowcell-hiseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-flowcell/register-flowcell-hiseq.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-flowcell/register-flowcell-hiseq.py
deleted file mode 100644
index 4b2251d72bc..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-flowcell/register-flowcell-hiseq.py
+++ /dev/null
@@ -1,138 +0,0 @@
-'''
-@copyright:
-2013 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Registers an incoming directory as a data set in openBIS. The name of the directory is used to
-search for the matching sample. 
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for HiSeq runs: 110715_SN792_0054_BC035RACXX
-expected incoming Name for GAII runs: 110812_6353WAAXX
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import shutil
-import glob
-import xml.etree.ElementTree as etree
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-REGEX_RUNINFO_SAMPLE = '/Data/Status*'
-REGEX_RUNINFO_REPORTS = '/Data/reports'
-MARKER_STRING = '.MARKER_is_finished_'
-RUNSTATISTICS_DROPBOX = 'register-runstatistics'
-
-# -----------------------------------------------------------------------------
-
-def extractRunData (runFolderName, transaction):
-  '''
-  Splits the incoming folder name and extracts infos out of it
-  HiSeq example:
-  ['130227', 'SN792', '0211', 'BC1RPGACXX']
-  MiSeq example:
-  ['130227', 'M00721', '0036', '000000000-A3BAV']
-  '''
-  runDataDict = {}
-  date, sequencerID, runningNumber, flowCellId = runFolderName.split('_')
-  runDataDict['date'] = date
-  runDataDict['sequencerID'] = sequencerID
-  runDataDict['runningNumber'] = runningNumber
-
-  if not sequencerID.startswith('M'):
-    runDataDict['compartment'] = flowCellId[0]
-    runDataDict['flowCellId'] =  flowCellId[1:]
-    dataSet = transaction.createNewDataSet("ILLUMINA_HISEQ_OUTPUT")
-  else:
-    runDataDict['flowCellId'] =  flowCellId
-    dataSet = transaction.createNewDataSet("ILLUMINA_MISEQ_OUTPUT")
-  return runDataDict, dataSet
-
-# -----------------------------------------------------------------------------
-
-def touch_markerfile(filename):
-  try:
-    # do a touch
-    open(filename, 'w').close()
-  except:
-    print('Could not touch ' + filename)
-
-# -----------------------------------------------------------------------------
-
-def moveFiles(incomingPath, runDataDict, runStatisticsFolder):
-  #move RunInfo into a different drop box
-  runInfoSample=glob.glob(incomingPath + REGEX_RUNINFO_SAMPLE)
-  runInfoReport=glob.glob(incomingPath + REGEX_RUNINFO_REPORTS)
-  runInfoList = runInfoSample + runInfoReport
-
-  newPath = runStatisticsFolder + '/' + runDataDict['flowCellId'] + '/Data/'
-
-  os.makedirs(newPath)
-  for runInfo in runInfoList:
-    try:
-      if os.path.isdir(runInfo):
-        shutil.copytree(runInfo, newPath + os.path.basename(runInfo))
-      else:
-        shutil.copy2(runInfo, newPath)
-    except (IOError, os.error), why:
-      print (runInfo, newPath, str(why))
-
-# -----------------------------------------------------------------------------
-
-def getThreadProperties(transaction):
-
-  threadPropertyDict = {}
-  threadProperties = transaction.getGlobalState().getThreadParameters().getThreadProperties()
-
-  for key in threadProperties:
-    try:
-      threadPropertyDict[key] = threadProperties.getProperty(key)
-    except:
-      pass
-  return threadPropertyDict 
-
-# -----------------------------------------------------------------------------
-
-def process(transaction):
-
-  threadPropertyDict = getThreadProperties(transaction)
-
-  incomingPath = transaction.getIncoming().getPath()
-  runFolderName = transaction.getIncoming().getName()
-  runDataDict, dataSet = extractRunData(runFolderName, transaction)
-
-  incomingRootDir = threadPropertyDict[u'incoming-root-dir']
-  runStatisticsFolder = incomingRootDir + '/' + RUNSTATISTICS_DROPBOX
-
-  moveFiles(incomingPath, runDataDict, runStatisticsFolder)
-
-  touch_markerfile( runStatisticsFolder + '/' + MARKER_STRING + runDataDict['flowCellId'])
-
-  dataSet.setMeasuredData(False)
-    
-  search_service = transaction.getSearchService()
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch( \
-  SearchCriteria.MatchClauseAttribute.CODE, runDataDict['flowCellId']));
-  foundSamples = search_service.searchForSamples(sc)
-
-  if foundSamples.size() > 0:
-    # Add the incoming file into the data set
-    transaction.moveFile(incomingPath, dataSet)
-    dataSet.setSample(foundSamples[0])
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-lane-hiseq/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-lane-hiseq/plugin.properties
deleted file mode 100644
index f7523f7cdec..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-lane-hiseq/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-lane-hiseq
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-lane-hiseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-lane-hiseq/register-lane-hiseq.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-lane-hiseq/register-lane-hiseq.py
deleted file mode 100755
index 848fd08ad3b..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-lane-hiseq/register-lane-hiseq.py
+++ /dev/null
@@ -1,223 +0,0 @@
-'''
-@copyright:
-2013 ETH Zuerich, CISD
-
-@license:
-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.
-
-@description:
-Processes each flow lane of a Sequencing run and attaches the fastq files to 
-the correct corresponding library samples
-
-@note:
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-Expects as incoming folder:
-Project_<Flow Cell>_<Lane>
-e.g.Project_110715_SN792_0054_BC035RACXX_1
-
-
-@author:
-Manuel Kohler
-
-Note: 
-print statements go to: ~openbis/sprint/datastore_server/log/startup_log.txt
-'''
-
-import os
-import fnmatch
-import time
-import shutil
-from time import *
-from datetime import *
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-FASTQ_GZ_PATTERN = "*.fastq.gz"
-METADATA_FILE_SUFFIX = "_metadata.tsv"
-INDEX1='INDEX1'
-INDEX2='INDEX2'
-EXTERNAL_SAMPLE_NAME='EXTERNAL_SAMPLE_NAME'
-
-DEFAULT_INDEX='NoIndex'
-
-# -------------------------------------------------------------------------------
-
-def getFileNames(path):
-  '''
-  Gets all files matching a PATTERN in a path recursively
-  and returns the result as a list
-  '''
-  matches = []
-  for root, dirnames, filenames in os.walk(path):
-    for filename in fnmatch.filter(filenames, FASTQ_GZ_PATTERN):
-        matches.append(os.path.join(root, filename))
-  matches.sort()
-  return(matches)
-
-# -------------------------------------------------------------------------------
-
-def writeMetadataFile (fileName, parentPropertyTypes, parentPropertiesMap, fcMetaDataDict, fcMetaDataList):
-  '''
-  Writes a file of meta date related to one sample
-  '''
-  try:
-    metaDataFile = open(fileName,'w')
-    for propertyType in parentPropertyTypes:
-      metaDataFile.write(propertyType.encode('utf-8') + "\t" +
-                         parentPropertiesMap[propertyType].tryGetAsString().encode('utf-8') + "\n")
-    
-    metaDataFile.write("\nFLOWCELL PROPERTIES\n".encode('utf-8'))
-
-    for fcMetaData in fcMetaDataList:
-      metaDataFile.write(fcMetaData.encode('utf-8') + "\t" +
-                         fcMetaDataDict[fcMetaData].tryGetAsString().encode('utf-8') + "\n")
-      pass
-  except IOError:
-    print ('File error, could not write '+ fileName)
-  finally:
-    metaDataFile.close()
-
-# -------------------------------------------------------------------------------
-
-def create_openbis_timestamp ():
-  '''
-  Create an openBIS conform timestamp
-  '''
-  tz=localtime()[3]-gmtime()[3]
-  d=datetime.now()
-  return d.strftime("%Y-%m-%d %H:%M:%S GMT"+"%+.2d" % tz+":00")
-
-# -------------------------------------------------------------------------------
-
-def getFlowCellMetaData (transaction, flowCellId):
-  
-  def sortedDictValues(adict):
-    keys = adict.keys()
-    keys.sort()
-    return map(adict.get, keys)
-  
-  search = transaction.getSearchService()
-  sc = SearchCriteria()
-  print('Searching FlowCell: '+ str(flowCellId))
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCellId));
-  foundFlowCells = search.searchForSamples(sc)
-
-  try:
-    assert foundFlowCells.size() == 1
-  except AssertionError:
-    print (str(foundFlowCells.size()) + ' flow cells found which match the criterias: '+ flowCellId)
-  
-  fcPropertiesDict = {}
-  fcPropertyTypes = []
-
-  fcProperties = foundFlowCells[0].getSample().getProperties()
-  for property in fcProperties:
-      code = property.getPropertyType().getSimpleCode()
-      fcPropertyTypes.append(code)
-      fcPropertiesDict[code] = property
-  
-  fcPropertyTypes.sort()
-  return fcPropertiesDict, fcPropertyTypes
-
-# -------------------------------------------------------------------------------
-
-def searchSample(search_service, sampleCode):
-
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleCode));
-  foundSamples = search_service.searchForSamples(sc)
-
-  # there should be only one sample because it is unique
-  if (len(foundSamples) > 1):
-    raise Exception("More than one sample found! No unique code: " + sampleCode)
-  elif (len(foundSamples) == 0):
-    raise Exception("No matching sample found for: " + sampleCode)
-  else :
-    sample = foundSamples[0]
-  return sample
-
-# -------------------------------------------------------------------------------
-def process(transaction):
-
-  # useful for debugging:
-  print ("\n")
-  print(datetime.now())
-
-  search_service = transaction.getSearchService()
-
-  incomingPath = transaction.getIncoming().getAbsolutePath()
-  name = transaction.getIncoming().getName()
-
-  folders=[]
-  folders=os.listdir(incomingPath)
-
-  # expected incoming Name, e.g.: Project_110715_SN792_0054_BC035RACXX_1
-  split=name.split("_")
-  if (len(split) == 6):
-    runningDate = split[1]
-    sequencerId = split[2]
-    sequentialNumber = split[3]
-    hiseqTray = split[4][0]
-    flowCellId = split[4][1:]
-    flowLane = split[-1]
-    incoming_sample = flowCellId + ':' + flowLane
-  # expected Project_120112_63537AAXX_1
-  if (len(split) == 4):
-    runningDate = split[1]
-    flowCellId = split[2]
-    flowLane = split[-1]
-    incoming_sample = flowCellId + ':' + flowLane
-
-  # Search for the incoming_sample which is a Flow Lane
-  sc = SearchCriteria()
-  print('Processing sample: '+ str(incoming_sample))
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, incoming_sample));
-  foundSamples = search_service.searchForSamples(sc)
-
-  # there should be only one sample because it is unique within one Flow Cell 
-  if (len(foundSamples) > 1):
-    raise Exception("More than one sample found! No unique code: " + incoming_sample)
-  elif (len(foundSamples) == 0):
-    raise Exception("No matching sample found for: " + incoming_sample)
-  else :
-    sample = foundSamples[0].getSample()
-    parents = sample.getParents()
-
-  # -------------------------------------------------------------------------------
-
-  # loop over each Sample folder within a lane
-  for f in range(0,len(folders)):
-    # Create a data set and set type
-    dataSet = transaction.createNewDataSet("FASTQ_GZ")
-    dataSet.setMeasuredData(False)
-    dataSet.setPropertyValue(INDEX1, DEFAULT_INDEX)
-    dataSet.setPropertyValue(INDEX2, DEFAULT_INDEX)
-    dirName = transaction.createNewDirectory(dataSet,folders[f])
-
-    # if multiplexed samples then there is more than one folder
-    pathPerLane = incomingPath + '/' + folders[f]
-    
-    # get all fastqs in this dataSet
-    fastqFileList=getFileNames(pathPerLane)
-    
-    # put the files into the dataSet 
-    for file in fastqFileList:
-      sampleCode = '-'.join(file.split('/')[-1].split('_')[:4])
-      print "Searching for " + sampleCode
-      sample = searchSample(search_service, sampleCode)
-
-      # finally add the files to the data set     
-      transaction.moveFile(file , dataSet, folders[f])
-   
-      #sa = transaction.getSampleForUpdate(sample.getSampleIdentifier())
-      #sa.setPropertyValue("DATA_TRANSFERRED", create_openbis_timestamp())
-      dataSet.setSample(sample)
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-runstatistics/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-runstatistics/plugin.properties
deleted file mode 100644
index 8572688f224..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-runstatistics/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-runstatistics
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-runstatistics.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-runstatistics/register-runstatistics.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-runstatistics/register-runstatistics.py
deleted file mode 100644
index c3fc98d03a4..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-runstatistics/register-runstatistics.py
+++ /dev/null
@@ -1,57 +0,0 @@
-'''
-@copyright:
-2013 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Registers an incoming directory as a data set in openBIS. The name of 
-the directory is used to search for the matching sample. 
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import shutil
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getPath()
-  incomingFolder = transaction.getIncoming().getName()
-
-  search_service = transaction.getSearchService()
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, incomingFolder));
-  foundSamples = search_service.searchForSamples(sc)
-
-  if foundSamples.size() > 0:
-   
-    # Search for another data set of the same sample and make it a child of it 
-    sampleSc = SearchCriteria()
-    sampleSc.addSubCriteria(SearchSubCriteria.createSampleContainerCriteria(sc))
-    foundContainedSamples = search_service.searchForSamples(sampleSc)
-    if foundContainedSamples.size() > 0:
-      for fcs in range(0,foundContainedSamples.size()):
-	dataSet = transaction.createNewDataSet("RUNINFO")
-	dataSet.setMeasuredData(False)
-	dataSet.setSample(foundContainedSamples[fcs])
-	# Add the incoming file into the data set
-	shutil.copytree(incomingPath, incomingPath + "_" + str(fcs+1))
-	transaction.moveFile(incomingPath + "_" + str(fcs+1), dataSet)
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-unaligned/plugin.properties b/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-unaligned/plugin.properties
deleted file mode 100644
index 9c8c317b60d..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-unaligned/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-unaligned
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-unaligned.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-unaligned/register-unaligned.py b/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-unaligned/register-unaligned.py
deleted file mode 100755
index d9e6b77c95f..00000000000
--- a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/drop-boxes/register-unaligned/register-unaligned.py
+++ /dev/null
@@ -1,185 +0,0 @@
-'''
-@copyright:
-2013 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Splits up this complex data set into two different data sets and
-moves the corresponding file into those drop boxes 
-
-@note: 
-Expects as incoming folder: <FlowCell>/Unaligned_no_mismatch
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import glob
-import shutil
-import time
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-BASECALL_STATS_FOLDER = 'Basecall_Stats_'
-REGEX_FILES = '*.*'
-REGEX_MAKEFILE = 'Make*'
-REGEX_LANES='/P*'
-REGEX_UNDETERMINED = '/U*/Sample*'
-UNALIGNED_FOLDER='Unaligned_'
-LANE_DROPBOX='register-lane-hiseq'
-BASECALL_DROPBOX='register-basecall-stats'
-MARKER_STRING='.MARKER_is_finished_'
-
-# -----------------------------------------------------------------------------
-
-def touch_markerfile(filename):
-  try:  
-    # do a touch
-    open(filename, 'w').close()
-  except:
-    print('Could not touch ' + filename)  
-
-# -----------------------------------------------------------------------------
-
-def searchForLaneParents(transaction, sampleCode):
-
-  search_service = transaction.getSearchService()
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleCode))
-  foundSamples = search_service.searchForSamples(sc)
-  # there should be only one sample because it is unique within one Flow Cell 
-  if (len(foundSamples) > 1):
-    raise Exception("More than one sample found! No unique code: " + sampleCode)
-  elif (len(foundSamples) == 0):
-    raise Exception("No matching sample found for: " + sampleCode)
-  else :
-    sample = foundSamples[0].getSample()
-    parents = sample.getParents()
-
-  # search for the parents
-  sc = SearchCriteria()
-  # set the Search Criteria to an OR condition, default is AND
-  sc.setOperator(SearchCriteria.SearchOperator.MATCH_ANY_CLAUSES)
-  # Get the codes for all parents
-  for parent in parents:
-    parentSubCode = parent.getSubCode()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, parentSubCode));
-  # all parents of the flow lane
-  foundParents = search_service.searchForSamples(sc)
-  
-  parentCodeList = []
-
-  for foundParent in foundParents:
-    parent = foundParent.getSample()
-    # ArrayList 
-    parentProperties = parent.getProperties()
-    # just get the current code
-    parentCode = parent.getCode()
-    parentCodeList.append(parentCode)
-    #print("Found parent code: "+ parentCode)
-
-  return parentCodeList
-
-# -----------------------------------------------------------------------------
-
-def renameFiles(transaction, dir, flowcellName):
-  # Limit of Samples when the Sample Code is still used in the renaming. If Number of Samples is
-  # bigger than this number, we just write the number in the file name.
-
-  MAX_SAMPLES = 20
-  FACILITY_CODE = "BSSE_QGF_"
-
-  for root, dirs, files in os.walk(dir):
-    for file in files:
-      lane = file.split("_")[0][-1]      
-      if lane.isdigit():
-        sampleCode = flowcellName + ":" + lane 
-        print sampleCode
-        parentCodeList = searchForLaneParents(transaction, sampleCode)
-        print parentCodeList
-        length = len(parentCodeList)
-        if length > MAX_SAMPLES:
-          # BSSE_QGF_96_samples_C1A8YACXX_Undetermined_L008_R1_001.fastq.gz
-          os.rename(root + '/' + file, root + "/" + FACILITY_CODE + str(length) + "_samples_" + flowcellName + "_" + file)
-        else:
-          # BSSE_QGF_10001_10002_10003_10004_C1A8YACXX_Undetermined_L008_R1_001.fastq.gz
-          SampleCodeString = "_".join([(e.split("-")[-1]) for e in parentCodeList])
-          os.rename(root + '/' + file, root + "/" + FACILITY_CODE + SampleCodeString + "_" + flowcellName + "_" + file)
-
-
-# -----------------------------------------------------------------------------
-
-def getThreadProperties(transaction):
-
-  threadPropertyDict = {}
-  threadProperties = transaction.getGlobalState().getThreadParameters().getThreadProperties()
-
-  for key in threadProperties:
-    try:
-      threadPropertyDict[key] = threadProperties.getProperty(key)
-    except:
-      pass
-  return threadPropertyDict
-
-# -----------------------------------------------------------------------------
-
-def extractFlowCellName (runFolderName):
-  return runFolderName.split('_')[-1][1:]
-
-# -----------------------------------------------------------------------------
-
-def process(transaction):
-
-  threadPropertyDict = getThreadProperties(transaction)
-  incomingRootDir = threadPropertyDict[u'incoming-root-dir']
-  laneFolder = incomingRootDir + '/' + LANE_DROPBOX + '/'
-  basecallStatsFolder = incomingRootDir + '/' + BASECALL_DROPBOX + '/'
-
-  incomingPath = transaction.getIncoming().getPath()
-  runFolderName = transaction.getIncoming().getName()
-  fcName = extractFlowCellName(runFolderName)
-  
-  # -----------------------------------------------------------------------------
-  # move Lanes into a different drop box
-  laneList=glob.glob(incomingPath + '/'+ UNALIGNED_FOLDER + '*' + REGEX_LANES)
-  laneList.sort()
-
-  undeterminedList=glob.glob(incomingPath + '/'+ UNALIGNED_FOLDER + '*' + REGEX_UNDETERMINED)
-  undeterminedList.sort()
-
-  # add the Flow Cell Name to the Undetermined FASTQ files
-  [renameFiles(transaction, dir, fcName) for dir in undeterminedList]
-
-  # Multiplexing:
-  # First move the Undetermined reads to the other ones 
-  [shutil.move(undeterminedLane, laneList[int(undeterminedLane.split('/')[-1][-1])-1] +'/' + undeterminedLane.split('/')[-1]) for undeterminedLane in undeterminedList]
-
-  [shutil.move(lane, laneFolder + lane.split('/')[-1]) for lane in laneList]
-  markerFileList = [touch_markerfile(laneFolder + MARKER_STRING+lane.split('/')[-1]) for lane in laneList]
-
-  # -----------------------------------------------------------------------------
-  # move Basecall Stats into a different drop box
-
-  # Build up a list of file which are part of the data set
-  for lane in xrange(1, len(laneList)+1):
-    path = incomingPath + '/'+ UNALIGNED_FOLDER + str(lane) + '/'
-    fileList=glob.glob(path + REGEX_FILES)
-    [fileList.append(i) for i in glob.glob(path + REGEX_MAKEFILE)]
-
-    dest = fcName + '_' + str(lane)
-    shutil.copytree(path + BASECALL_STATS_FOLDER + fcName , basecallStatsFolder + dest + '/' + BASECALL_STATS_FOLDER + fcName)
-    [shutil.move(file, basecallStatsFolder + dest) for file in fileList]
-    touch_markerfile(basecallStatsFolder + MARKER_STRING + dest)
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/maintenance-tasks/.gitignore b/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/maintenance-tasks/.gitignore
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/reporting-plugins/.gitignore b/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/reporting-plugins/.gitignore
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/services/.gitignore b/deep_sequencing_unit/source/core-plugins/illumina-ngs/2/dss/services/.gitignore
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/deep_sequencing_unit/source/core-plugins/illumina-ngs/package-to-dist b/deep_sequencing_unit/source/core-plugins/illumina-ngs/package-to-dist
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/cellStatistics/html/index.html b/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/cellStatistics/html/index.html
deleted file mode 100644
index 06d40af202c..00000000000
--- a/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/cellStatistics/html/index.html
+++ /dev/null
@@ -1,248 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>Flowcell Statistics</title>
-    <script type="text/javascript" src="/openbis/resources/js/d3.v3.min.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/d3.layout.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/openbis-dsu.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/openbis-action-deferrer.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/FileSaver.js"></script>
-    <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0-rc1/css/bootstrap.min.css">
-    <link rel="stylesheet" type="text/css" href="style.css" />
-  </head>
-  <body>
-  <script>
-
-  var formatThousands = d3.format(",");
-  dsu = new openbis_dsu('/openbis/openbis', '/datastore_server');
-  var webAppContext = new openbisWebAppContext();
-  dsu.server.useSession(webAppContext.getSessionId());
-
-  var prop;
-  var flowcellProperties = [];
-  var myArray = [];
-  var sumArray = [];
-  var sumsArray = [] 
-  
-  loadData()
-
-  /* ------- General functions -------------------------------------------*/
-
-  // used for sorting by lane of the final array of objects
-  function compare(a,b) {
-    if (a.lane < b.lane)
-       return -1;
-    if (a.lane > b.lane)
-      return 1;
-    return 0;
-  }
-
-  function isNumber(n) {
-    return !isNaN(parseFloat(n)) && isFinite(n);
-  }
-
-  function roundFloat(myFloat) {
-    return Number(myFloat).toFixed(2); 
-  }
-
-
-  /* -------------------------------------------------------------------*/
-
-function loadData () { 
-  var dataSetProperties;
-  var prop;
-
-  dsu.retrieveSample(webAppContext.getEntityIdentifier(), function(response) {
-
-    flowcellProperties = response.result[0].properties;
-    numberOfLanes = (flowcellProperties.LANECOUNT);
-
-    var sampleCodes = [];
-    for (i = 1; i <= numberOfLanes; i++) {
-      sampleCodes.push(webAppContext.entityIdentifier + ":" + i);
-    }
-
-    var deferrer = new openbisActionDeferrer(function(){
-      sumArray.sort(compare);
-      plotLaneTable (sumArray, true);
-      downloadButton ("tableStats");
-      $("#save_as" + "tableStats").click(function() { submit_download_form("html", "tableStats"); });
-    }, sampleCodes);
-
-    sampleCodes.forEach(function(sampleCode){
-      dsu.retrieveDataSetsForSample(sampleCode, function(response){
-        getProperties(response);
-        //console.log("got response " + sampleCode);
-        var sums = calculateSum(myArray, sampleCode, true);
-        //console.log(sums[0])
-        sumArray.push(sums[0]);
-        myArray = [];
-        deferrer.dependencyCompleted(sampleCode);  
-      });
-    });
-
-    function getProperties(dataSetProperties) {
-      for (var i = 0; i < dataSetProperties.result.length; i++) {
-        myArray.push({
-                            'externalSampleName' : dataSetProperties.result[i].properties.EXTERNAL_SAMPLE_NAME,
-                            'index1': dataSetProperties.result[i].properties.BARCODE,
-                            'index2': dataSetProperties.result[i].properties.INDEX2,
-                            'percFilteringPass' : parseFloat(dataSetProperties.result[i].properties.PERCENTAGE_PASSED_FILTERING),
-                            'rawReadsSum' : dataSetProperties.result[i].properties.RAW_READS_SUM,
-                            'pfReadsSum' : dataSetProperties.result[i].properties.PF_READS_SUM,
-                            'rawYieldMbases' : dataSetProperties.result[i].properties.RAW_YIELD_MBASES,
-                            'yieldMbases' : dataSetProperties.result[i].properties.YIELD_MBASES,
-                            'percRawClustersPerLane': parseFloat(dataSetProperties.result[i].properties.PERCENTAGE_RAW_CLUSTERS_PER_LANE),
-                            'pfMeanQualityScore' : parseFloat(dataSetProperties.result[i].properties.PFMEANQUALITYSCORE),
-                            'pfYieldq30Percentage' : parseFloat(dataSetProperties.result[i].properties.PFYIELDQ30PERCENTAGE)
-                            }); 
-      };
-    };
-  });
-};
- 
-function plotLaneTable (sumArray, withNOINDEX) {
-
-  var laneTableStats = d3.select("body")
-    .append("table")
-    .attr("id", "tableStats")
-    .attr("class", "tableStats")
-    ;
-  header = {"Lane":1, "# of Samples":1, "Average Passed Filtering (PF)":1, "Sum Raw Reads":1, "Sum PF Reads":1, "Sum Raw Bases":1,
-            "Sum PF Bases":1, "Average Raw Clusters in % per Index":1, "Average PF Phred Score":1, "Average > 30 Phred Score":1 }
-
-  // create the table header
-  var thead = laneTableStats.selectAll("th")
-              .data(d3.keys(header))
-              .enter().append("th")
-              .text(function(d){return d})
-              ;
-
-  // create rows
-  var tr = laneTableStats.selectAll("tr")
-           .data(sumArray).enter().append("tr")
-  // cells
-  var td = tr.selectAll("td")
-    .data(function(d){return d3.values(d)})
-    .enter().append("td")
-    .text(function(d) {if (isNumber(d)) {return formatThousands(d)}; return d;})
-    .style("text-align", function(d){if (isNumber(d)) {return "right"} return "left"})
-    ;
-}
-
-function placeholder() {
-
-var space = d3.select("body")
-              .append("svg")
-              .attr("id", "placeholder")
-              .attr("width", 1500)
-              .attr("height", 50)
-              ;
-}
-
-function calculateSum(statisticsArray, sampleCode, withNOINDEX) {
-
-  var sums = []
-  var averagePercFilteringPass = 0;
-  var sumRawReads = 0;
-  var sumPfReads = 0;
-  var sumRawYieldMbases = 0;
-  var sumYieldMbases = 0;
-  var averagePercRawClustersPerLane = 0;
-  var averagePfMeanQualityScore = 0;
-  var averagePfYieldq30Percentage = 0;
-  
-  for (var i = 0; i < statisticsArray.length; i++) {
-    // do not calculate with the NOINDEX reads
-    if ((typeof (statisticsArray[i].externalSampleName) == 'undefined') && withNOINDEX) {
-       continue;
-    }  else {
-
-      averagePercFilteringPass = averagePercFilteringPass + parseFloat(statisticsArray[i].percFilteringPass);
-      sumRawReads = sumRawReads + parseInt(statisticsArray[i].rawReadsSum);
-      sumPfReads = sumPfReads + parseInt(statisticsArray[i].pfReadsSum);
-      sumRawYieldMbases = sumRawYieldMbases + parseInt(statisticsArray[i].rawYieldMbases);
-      sumYieldMbases = sumYieldMbases + parseInt(statisticsArray[i].yieldMbases);
-      averagePercRawClustersPerLane = averagePercRawClustersPerLane + parseInt(statisticsArray[i].percRawClustersPerLane);
-      averagePfMeanQualityScore = averagePfMeanQualityScore + parseInt(statisticsArray[i].pfMeanQualityScore);
-      averagePfYieldq30Percentage = averagePfYieldq30Percentage + parseInt(statisticsArray[i].pfYieldq30Percentage);
-    }
-  }
-  if (withNOINDEX) {penalty = -1} else {penalty = 0} 
- 
-  // added the Math.max function to make sure that there is no division by zero,
-  // can happen when a single sample is on a lane (no multiplexing) 
-  averagePercFilteringPass = roundFloat(averagePercFilteringPass / Math.max((statisticsArray.length + penalty),1));
-  averagePercRawClustersPerLane = roundFloat(averagePercRawClustersPerLane / Math.max((statisticsArray.length + penalty),1));
-  averagePfMeanQualityScore = roundFloat(averagePfMeanQualityScore / Math.max((statisticsArray.length + penalty),1));
-  averagePfYieldq30Percentage = roundFloat(averagePfYieldq30Percentage / Math.max((statisticsArray.length + penalty),1));
-
-  sums.push({
-                            'lane' : sampleCode.split("/")[2].split(":")[1],
-                            'numberOfSamples' : statisticsArray.length,
-                            'averagePercFilteringPass' : averagePercFilteringPass,
-                            'rawReadsSum' : sumRawReads,
-                            'pfReadsSum' : sumPfReads,
-                            'rawYieldMbases' : sumRawYieldMbases,
-                            'yieldMbases' : sumYieldMbases,
-                            'percRawClustersPerLane': averagePercRawClustersPerLane,
-                            'pfMeanQualityScore' : averagePfMeanQualityScore,
-                            'pfYieldq30Percentage' : averagePfYieldq30Percentage
-                            });
-  return sums;
-}
-
-
-  function downloadButton (buttonName) {
-
-    var div = d3.select("body").append("button")
-      .attr("class", "btn-xs")
-      .attr("type", "submit")
-      .attr("id", "save_as" + buttonName)
-      .attr("value", "")
-      .text("Save")
-      ;
-  }
-
-  function submit_download_form(output_format, svgName)
-  {
-    var rawSampleName = webAppContext.entityIdentifier
-    var split = rawSampleName.split(":")
-    var fc = split[0].split("/")[2]
-    var lane = split[1]
-
-    // Get the d3js SVG element
-    var tmp = document.getElementById(svgName);
-
-    if (output_format == "svg") {
-
-      // Extract the data as SVG text string
-      var svg_xml = "<svg  xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">" + (new XMLSerializer).serializeToString(tmp) + "</svg>";
-
-      var blob = new Blob([svg_xml], {type: "image/svg+xml;charset=utf-8"});
-    }
-    if (output_format == "html") {
-      var html = "<html> <head> <title></title> <style type=\"text/css\">" + 
-        "table.tableStats { font-family: sans-serif; font-size: 14px; border-collapse:collapse; }" +
-        ".tableStats th { padding:6px 10px; color:#444; font-weight:bold; text-shadow:1px 1px 1px #fff; border-bottom:2px solid #444; }" +
-        ".tableStats tr:nth-child(even) { background: WhiteSmoke; }" +
-        ".tableStats td { padding:0px 10px 10px 10px; }" +
-        "</style> </head> <body>" +
-        (new XMLSerializer).serializeToString(tmp) +
-        "</body> </html>"
-      var blob = new Blob([html], {type: "image/html;charset=utf-8"});
-    }
-   if (output_format == "png") {
-       console.log("png")
-   }
-
-    saveAs(blob, fc + "_" + svgName + "." + output_format);
-
-  }
-
-  </script>
-  </body>
-</html>
-
diff --git a/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/cellStatistics/html/style.css b/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/cellStatistics/html/style.css
deleted file mode 100644
index 985d8ac6db0..00000000000
--- a/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/cellStatistics/html/style.css
+++ /dev/null
@@ -1,47 +0,0 @@
-        .axis path,
-        .axis line {
-          fill: none;
-          stroke: #000;
-          shape-rendering: crispEdges;
-        }
-
-        .axis text {
-          font-family: sans-serif;
-          font-size: 10px;
-        }
-
-        table.tableStats {
-          font-family: sans-serif;
-          font-size: 14px;
-          border-collapse:collapse;
-        }
-
-        .tableStats th {
-          padding:6px 10px;
-          color:#444;
-          font-weight:bold;
-          text-shadow:1px 1px 1px #fff;
-          border-bottom:2px solid #444;
-        }
-
-        .tableStats tr:nth-child(even) {
-          background: WhiteSmoke;
-        }
-        .tableStats td {
-
-          padding:0px 10px 10px 10px;
-
-       }
-
-        div.tooltip {
-          position: absolute;
-          text-align: center;
-          width: 100px;
-          height: 42px;
-          padding: 2px;
-          font: 12px sans-serif;
-          background: LightSalmon;
-          border: 0px;
-          border-radius: 8px;
-          pointer-events: none;
-        }
diff --git a/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/cellStatistics/plugin.properties b/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/cellStatistics/plugin.properties
deleted file mode 100644
index 19629033996..00000000000
--- a/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/cellStatistics/plugin.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-# The properties file for an example webapps plugin
-# This file has no properties defined because none need to be defined.
-webapp-folder = html
-openbisui-contexts = sample-details-view
-sample-entity-types = ILLUMINA_FLOW_CELL
-label = Flow Cell Statistics
diff --git a/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/d3.layout.js b/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/d3.layout.js
deleted file mode 100644
index 3bcbccefe6c..00000000000
--- a/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/d3.layout.js
+++ /dev/null
@@ -1 +0,0 @@
-d3.layout = {};
diff --git a/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/d3.v3.min.js b/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/d3.v3.min.js
deleted file mode 100644
index e61102b596e..00000000000
--- a/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/d3.v3.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-(function(){function t(t){return t.target}function n(t){return t.source}function e(t,n){try{for(var e in n)Object.defineProperty(t.prototype,e,{value:n[e],enumerable:!1})}catch(r){t.prototype=n}}function r(t){for(var n=-1,e=t.length,r=[];e>++n;)r.push(t[n]);return r}function u(t){return Array.prototype.slice.call(t)}function i(){}function a(t){return t}function o(){return!0}function c(t){return"function"==typeof t?t:function(){return t}}function l(t,n,e){return function(){var r=e.apply(n,arguments);return arguments.length?t:r}}function s(t){return null!=t&&!isNaN(t)}function f(t){return t.length}function h(t){return t.trim().replace(/\s+/g," ")}function d(t){for(var n=1;t*n%1;)n*=10;return n}function g(t){return 1===t.length?function(n,e){t(null==n?e:null)}:t}function p(t){return t.responseText}function m(t){return JSON.parse(t.responseText)}function v(t){var n=document.createRange();return n.selectNode(document.body),n.createContextualFragment(t.responseText)}function y(t){return t.responseXML}function M(){}function b(t){function n(){for(var n,r=e,u=-1,i=r.length;i>++u;)(n=r[u].on)&&n.apply(this,arguments);return t}var e=[],r=new i;return n.on=function(n,u){var i,a=r.get(n);return 2>arguments.length?a&&a.on:(a&&(a.on=null,e=e.slice(0,i=e.indexOf(a)).concat(e.slice(i+1)),r.remove(n)),u&&e.push(r.set(n,{on:u})),t)},n}function x(t,n){return n-(t?1+Math.floor(Math.log(t+Math.pow(10,1+Math.floor(Math.log(t)/Math.LN10)-n))/Math.LN10):1)}function _(t){return t+""}function w(t,n){var e=Math.pow(10,3*Math.abs(8-n));return{scale:n>8?function(t){return t/e}:function(t){return t*e},symbol:t}}function S(t){return function(n){return 0>=n?0:n>=1?1:t(n)}}function k(t){return function(n){return 1-t(1-n)}}function E(t){return function(n){return.5*(.5>n?t(2*n):2-t(2-2*n))}}function A(t){return t*t}function N(t){return t*t*t}function T(t){if(0>=t)return 0;if(t>=1)return 1;var n=t*t,e=n*t;return 4*(.5>t?e:3*(t-n)+e-.75)}function q(t){return function(n){return Math.pow(n,t)}}function C(t){return 1-Math.cos(t*Ri/2)}function z(t){return Math.pow(2,10*(t-1))}function D(t){return 1-Math.sqrt(1-t*t)}function L(t,n){var e;return 2>arguments.length&&(n=.45),arguments.length?e=n/(2*Ri)*Math.asin(1/t):(t=1,e=n/4),function(r){return 1+t*Math.pow(2,10*-r)*Math.sin(2*(r-e)*Ri/n)}}function F(t){return t||(t=1.70158),function(n){return n*n*((t+1)*n-t)}}function H(t){return 1/2.75>t?7.5625*t*t:2/2.75>t?7.5625*(t-=1.5/2.75)*t+.75:2.5/2.75>t?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}function R(){d3.event.stopPropagation(),d3.event.preventDefault()}function P(){for(var t,n=d3.event;t=n.sourceEvent;)n=t;return n}function j(t){for(var n=new M,e=0,r=arguments.length;r>++e;)n[arguments[e]]=b(n);return n.of=function(e,r){return function(u){try{var i=u.sourceEvent=d3.event;u.target=t,d3.event=u,n[u.type].apply(e,r)}finally{d3.event=i}}},n}function O(t){var n=[t.a,t.b],e=[t.c,t.d],r=U(n),u=Y(n,e),i=U(I(e,n,-u))||0;n[0]*e[1]<e[0]*n[1]&&(n[0]*=-1,n[1]*=-1,r*=-1,u*=-1),this.rotate=(r?Math.atan2(n[1],n[0]):Math.atan2(-e[0],e[1]))*Oi,this.translate=[t.e,t.f],this.scale=[r,i],this.skew=i?Math.atan2(u,i)*Oi:0}function Y(t,n){return t[0]*n[0]+t[1]*n[1]}function U(t){var n=Math.sqrt(Y(t,t));return n&&(t[0]/=n,t[1]/=n),n}function I(t,n,e){return t[0]+=e*n[0],t[1]+=e*n[1],t}function V(t){return"transform"==t?d3.interpolateTransform:d3.interpolate}function X(t,n){return n=n-(t=+t)?1/(n-t):0,function(e){return(e-t)*n}}function Z(t,n){return n=n-(t=+t)?1/(n-t):0,function(e){return Math.max(0,Math.min(1,(e-t)*n))}}function B(){}function $(t,n,e){return new J(t,n,e)}function J(t,n,e){this.r=t,this.g=n,this.b=e}function G(t){return 16>t?"0"+Math.max(0,t).toString(16):Math.min(255,t).toString(16)}function K(t,n,e){var r,u,i,a=0,o=0,c=0;if(r=/([a-z]+)\((.*)\)/i.exec(t))switch(u=r[2].split(","),r[1]){case"hsl":return e(parseFloat(u[0]),parseFloat(u[1])/100,parseFloat(u[2])/100);case"rgb":return n(nn(u[0]),nn(u[1]),nn(u[2]))}return(i=aa.get(t))?n(i.r,i.g,i.b):(null!=t&&"#"===t.charAt(0)&&(4===t.length?(a=t.charAt(1),a+=a,o=t.charAt(2),o+=o,c=t.charAt(3),c+=c):7===t.length&&(a=t.substring(1,3),o=t.substring(3,5),c=t.substring(5,7)),a=parseInt(a,16),o=parseInt(o,16),c=parseInt(c,16)),n(a,o,c))}function W(t,n,e){var r,u,i=Math.min(t/=255,n/=255,e/=255),a=Math.max(t,n,e),o=a-i,c=(a+i)/2;return o?(u=.5>c?o/(a+i):o/(2-a-i),r=t==a?(n-e)/o+(e>n?6:0):n==a?(e-t)/o+2:(t-n)/o+4,r*=60):u=r=0,en(r,u,c)}function Q(t,n,e){t=tn(t),n=tn(n),e=tn(e);var r=gn((.4124564*t+.3575761*n+.1804375*e)/sa),u=gn((.2126729*t+.7151522*n+.072175*e)/fa),i=gn((.0193339*t+.119192*n+.9503041*e)/ha);return ln(116*u-16,500*(r-u),200*(u-i))}function tn(t){return.04045>=(t/=255)?t/12.92:Math.pow((t+.055)/1.055,2.4)}function nn(t){var n=parseFloat(t);return"%"===t.charAt(t.length-1)?Math.round(2.55*n):n}function en(t,n,e){return new rn(t,n,e)}function rn(t,n,e){this.h=t,this.s=n,this.l=e}function un(t,n,e){function r(t){return t>360?t-=360:0>t&&(t+=360),60>t?i+(a-i)*t/60:180>t?a:240>t?i+(a-i)*(240-t)/60:i}function u(t){return Math.round(255*r(t))}var i,a;return t%=360,0>t&&(t+=360),n=0>n?0:n>1?1:n,e=0>e?0:e>1?1:e,a=.5>=e?e*(1+n):e+n-e*n,i=2*e-a,$(u(t+120),u(t),u(t-120))}function an(t,n,e){return new on(t,n,e)}function on(t,n,e){this.h=t,this.c=n,this.l=e}function cn(t,n,e){return ln(e,Math.cos(t*=ji)*n,Math.sin(t)*n)}function ln(t,n,e){return new sn(t,n,e)}function sn(t,n,e){this.l=t,this.a=n,this.b=e}function fn(t,n,e){var r=(t+16)/116,u=r+n/500,i=r-e/200;return u=dn(u)*sa,r=dn(r)*fa,i=dn(i)*ha,$(pn(3.2404542*u-1.5371385*r-.4985314*i),pn(-.969266*u+1.8760108*r+.041556*i),pn(.0556434*u-.2040259*r+1.0572252*i))}function hn(t,n,e){return an(180*(Math.atan2(e,n)/Ri),Math.sqrt(n*n+e*e),t)}function dn(t){return t>.206893034?t*t*t:(t-4/29)/7.787037}function gn(t){return t>.008856?Math.pow(t,1/3):7.787037*t+4/29}function pn(t){return Math.round(255*(.00304>=t?12.92*t:1.055*Math.pow(t,1/2.4)-.055))}function mn(t){return Ii(t,Ma),t}function vn(t){return function(){return ga(t,this)}}function yn(t){return function(){return pa(t,this)}}function Mn(t,n){function e(){this.removeAttribute(t)}function r(){this.removeAttributeNS(t.space,t.local)}function u(){this.setAttribute(t,n)}function i(){this.setAttributeNS(t.space,t.local,n)}function a(){var e=n.apply(this,arguments);null==e?this.removeAttribute(t):this.setAttribute(t,e)}function o(){var e=n.apply(this,arguments);null==e?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,e)}return t=d3.ns.qualify(t),null==n?t.local?r:e:"function"==typeof n?t.local?o:a:t.local?i:u}function bn(t){return RegExp("(?:^|\\s+)"+d3.requote(t)+"(?:\\s+|$)","g")}function xn(t,n){function e(){for(var e=-1;u>++e;)t[e](this,n)}function r(){for(var e=-1,r=n.apply(this,arguments);u>++e;)t[e](this,r)}t=t.trim().split(/\s+/).map(_n);var u=t.length;return"function"==typeof n?r:e}function _n(t){var n=bn(t);return function(e,r){if(u=e.classList)return r?u.add(t):u.remove(t);var u=e.className,i=null!=u.baseVal,a=i?u.baseVal:u;r?(n.lastIndex=0,n.test(a)||(a=h(a+" "+t),i?u.baseVal=a:e.className=a)):a&&(a=h(a.replace(n," ")),i?u.baseVal=a:e.className=a)}}function wn(t,n,e){function r(){this.style.removeProperty(t)}function u(){this.style.setProperty(t,n,e)}function i(){var r=n.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,e)}return null==n?r:"function"==typeof n?i:u}function Sn(t,n){function e(){delete this[t]}function r(){this[t]=n}function u(){var e=n.apply(this,arguments);null==e?delete this[t]:this[t]=e}return null==n?e:"function"==typeof n?u:r}function kn(t){return{__data__:t}}function En(t){return function(){return ya(this,t)}}function An(t){return arguments.length||(t=d3.ascending),function(n,e){return t(n&&n.__data__,e&&e.__data__)}}function Nn(t,n,e){function r(){var n=this[i];n&&(this.removeEventListener(t,n,n.$),delete this[i])}function u(){function u(t){var e=d3.event;d3.event=t,o[0]=a.__data__;try{n.apply(a,o)}finally{d3.event=e}}var a=this,o=Yi(arguments);r.call(this),this.addEventListener(t,this[i]=u,u.$=e),u._=n}var i="__on"+t,a=t.indexOf(".");return a>0&&(t=t.substring(0,a)),n?u:r}function Tn(t,n){for(var e=0,r=t.length;r>e;e++)for(var u,i=t[e],a=0,o=i.length;o>a;a++)(u=i[a])&&n(u,a,e);return t}function qn(t){return Ii(t,xa),t}function Cn(t,n){return Ii(t,wa),t.id=n,t}function zn(t,n,e,r){var u=t.__transition__||(t.__transition__={active:0,count:0}),a=u[e];if(!a){var o=r.time;return a=u[e]={tween:new i,event:d3.dispatch("start","end"),time:o,ease:r.ease,delay:r.delay,duration:r.duration},++u.count,d3.timer(function(r){function i(r){return u.active>e?l():(u.active=e,h.start.call(t,s,n),a.tween.forEach(function(e,r){(r=r.call(t,s,n))&&p.push(r)}),c(r)||d3.timer(c,0,o),1)}function c(r){if(u.active!==e)return l();for(var i=(r-d)/g,a=f(i),o=p.length;o>0;)p[--o].call(t,a);return i>=1?(l(),h.end.call(t,s,n),1):void 0}function l(){return--u.count?delete u[e]:delete t.__transition__,1}var s=t.__data__,f=a.ease,h=a.event,d=a.delay,g=a.duration,p=[];return r>=d?i(r):d3.timer(i,d,o),1},0,o),a}}function Dn(t){return null==t&&(t=""),function(){this.textContent=t}}function Ln(t,n,e,r){var u=t.id;return Tn(t,"function"==typeof e?function(t,i,a){t.__transition__[u].tween.set(n,r(e.call(t,t.__data__,i,a)))}:(e=r(e),function(t){t.__transition__[u].tween.set(n,e)}))}function Fn(){for(var t,n=Date.now(),e=qa;e;)t=n-e.then,t>=e.delay&&(e.flush=e.callback(t)),e=e.next;var r=Hn()-n;r>24?(isFinite(r)&&(clearTimeout(Aa),Aa=setTimeout(Fn,r)),Ea=0):(Ea=1,Ca(Fn))}function Hn(){for(var t=null,n=qa,e=1/0;n;)n.flush?(delete Ta[n.callback.id],n=t?t.next=n.next:qa=n.next):(e=Math.min(e,n.then+n.delay),n=(t=n).next);return e}function Rn(t,n){var e=t.ownerSVGElement||t;if(e.createSVGPoint){var r=e.createSVGPoint();if(0>za&&(window.scrollX||window.scrollY)){e=d3.select(document.body).append("svg").style("position","absolute").style("top",0).style("left",0);var u=e[0][0].getScreenCTM();za=!(u.f||u.e),e.remove()}return za?(r.x=n.pageX,r.y=n.pageY):(r.x=n.clientX,r.y=n.clientY),r=r.matrixTransform(t.getScreenCTM().inverse()),[r.x,r.y]}var i=t.getBoundingClientRect();return[n.clientX-i.left-t.clientLeft,n.clientY-i.top-t.clientTop]}function Pn(){}function jn(t){var n=t[0],e=t[t.length-1];return e>n?[n,e]:[e,n]}function On(t){return t.rangeExtent?t.rangeExtent():jn(t.range())}function Yn(t,n){var e,r=0,u=t.length-1,i=t[r],a=t[u];return i>a&&(e=r,r=u,u=e,e=i,i=a,a=e),(n=n(a-i))&&(t[r]=n.floor(i),t[u]=n.ceil(a)),t}function Un(){return Math}function In(t,n,e,r){function u(){var u=Math.min(t.length,n.length)>2?Gn:Jn,c=r?Z:X;return a=u(t,n,c,e),o=u(n,t,c,d3.interpolate),i}function i(t){return a(t)}var a,o;return i.invert=function(t){return o(t)},i.domain=function(n){return arguments.length?(t=n.map(Number),u()):t},i.range=function(t){return arguments.length?(n=t,u()):n},i.rangeRound=function(t){return i.range(t).interpolate(d3.interpolateRound)},i.clamp=function(t){return arguments.length?(r=t,u()):r},i.interpolate=function(t){return arguments.length?(e=t,u()):e},i.ticks=function(n){return Bn(t,n)},i.tickFormat=function(n){return $n(t,n)},i.nice=function(){return Yn(t,Xn),u()},i.copy=function(){return In(t,n,e,r)},u()}function Vn(t,n){return d3.rebind(t,n,"range","rangeRound","interpolate","clamp")}function Xn(t){return t=Math.pow(10,Math.round(Math.log(t)/Math.LN10)-1),t&&{floor:function(n){return Math.floor(n/t)*t},ceil:function(n){return Math.ceil(n/t)*t}}}function Zn(t,n){var e=jn(t),r=e[1]-e[0],u=Math.pow(10,Math.floor(Math.log(r/n)/Math.LN10)),i=n/r*u;return.15>=i?u*=10:.35>=i?u*=5:.75>=i&&(u*=2),e[0]=Math.ceil(e[0]/u)*u,e[1]=Math.floor(e[1]/u)*u+.5*u,e[2]=u,e}function Bn(t,n){return d3.range.apply(d3,Zn(t,n))}function $n(t,n){return d3.format(",."+Math.max(0,-Math.floor(Math.log(Zn(t,n)[2])/Math.LN10+.01))+"f")}function Jn(t,n,e,r){var u=e(t[0],t[1]),i=r(n[0],n[1]);return function(t){return i(u(t))}}function Gn(t,n,e,r){var u=[],i=[],a=0,o=Math.min(t.length,n.length)-1;for(t[o]<t[0]&&(t=t.slice().reverse(),n=n.slice().reverse());o>=++a;)u.push(e(t[a-1],t[a])),i.push(r(n[a-1],n[a]));return function(n){var e=d3.bisect(t,n,1,o)-1;return i[e](u[e](n))}}function Kn(t,n){function e(e){return t(n(e))}var r=n.pow;return e.invert=function(n){return r(t.invert(n))},e.domain=function(u){return arguments.length?(n=0>u[0]?Qn:Wn,r=n.pow,t.domain(u.map(n)),e):t.domain().map(r)},e.nice=function(){return t.domain(Yn(t.domain(),Un)),e},e.ticks=function(){var e=jn(t.domain()),u=[];if(e.every(isFinite)){var i=Math.floor(e[0]),a=Math.ceil(e[1]),o=r(e[0]),c=r(e[1]);if(n===Qn)for(u.push(r(i));a>i++;)for(var l=9;l>0;l--)u.push(r(i)*l);else{for(;a>i;i++)for(var l=1;10>l;l++)u.push(r(i)*l);u.push(r(i))}for(i=0;o>u[i];i++);for(a=u.length;u[a-1]>c;a--);u=u.slice(i,a)}return u},e.tickFormat=function(t,u){if(2>arguments.length&&(u=Da),!arguments.length)return u;var i,a=Math.max(.1,t/e.ticks().length),o=n===Qn?(i=-1e-12,Math.floor):(i=1e-12,Math.ceil);return function(t){return a>=t/r(o(n(t)+i))?u(t):""}},e.copy=function(){return Kn(t.copy(),n)},Vn(e,t)}function Wn(t){return Math.log(0>t?0:t)/Math.LN10}function Qn(t){return-Math.log(t>0?0:-t)/Math.LN10}function te(t,n){function e(n){return t(r(n))}var r=ne(n),u=ne(1/n);return e.invert=function(n){return u(t.invert(n))},e.domain=function(n){return arguments.length?(t.domain(n.map(r)),e):t.domain().map(u)},e.ticks=function(t){return Bn(e.domain(),t)},e.tickFormat=function(t){return $n(e.domain(),t)},e.nice=function(){return e.domain(Yn(e.domain(),Xn))},e.exponent=function(t){if(!arguments.length)return n;var i=e.domain();return r=ne(n=t),u=ne(1/n),e.domain(i)},e.copy=function(){return te(t.copy(),n)},Vn(e,t)}function ne(t){return function(n){return 0>n?-Math.pow(-n,t):Math.pow(n,t)}}function ee(t,n){function e(n){return a[((u.get(n)||u.set(n,t.push(n)))-1)%a.length]}function r(n,e){return d3.range(t.length).map(function(t){return n+e*t})}var u,a,o;return e.domain=function(r){if(!arguments.length)return t;t=[],u=new i;for(var a,o=-1,c=r.length;c>++o;)u.has(a=r[o])||u.set(a,t.push(a));return e[n.t].apply(e,n.a)},e.range=function(t){return arguments.length?(a=t,o=0,n={t:"range",a:arguments},e):a},e.rangePoints=function(u,i){2>arguments.length&&(i=0);var c=u[0],l=u[1],s=(l-c)/(Math.max(1,t.length-1)+i);return a=r(2>t.length?(c+l)/2:c+s*i/2,s),o=0,n={t:"rangePoints",a:arguments},e},e.rangeBands=function(u,i,c){2>arguments.length&&(i=0),3>arguments.length&&(c=i);var l=u[1]<u[0],s=u[l-0],f=u[1-l],h=(f-s)/(t.length-i+2*c);return a=r(s+h*c,h),l&&a.reverse(),o=h*(1-i),n={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(u,i,c){2>arguments.length&&(i=0),3>arguments.length&&(c=i);var l=u[1]<u[0],s=u[l-0],f=u[1-l],h=Math.floor((f-s)/(t.length-i+2*c)),d=f-s-(t.length-i)*h;return a=r(s+Math.round(d/2),h),l&&a.reverse(),o=Math.round(h*(1-i)),n={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return jn(n.a[0])},e.copy=function(){return ee(t,n)},e.domain(t)}function re(t,n){function e(){var e=0,i=n.length;for(u=[];i>++e;)u[e-1]=d3.quantile(t,e/i);return r}function r(t){return isNaN(t=+t)?0/0:n[d3.bisect(u,t)]}var u;return r.domain=function(n){return arguments.length?(t=n.filter(function(t){return!isNaN(t)}).sort(d3.ascending),e()):t},r.range=function(t){return arguments.length?(n=t,e()):n},r.quantiles=function(){return u},r.copy=function(){return re(t,n)},e()}function ue(t,n,e){function r(n){return e[Math.max(0,Math.min(a,Math.floor(i*(n-t))))]}function u(){return i=e.length/(n-t),a=e.length-1,r}var i,a;return r.domain=function(e){return arguments.length?(t=+e[0],n=+e[e.length-1],u()):[t,n]},r.range=function(t){return arguments.length?(e=t,u()):e},r.copy=function(){return ue(t,n,e)},u()}function ie(t,n){function e(e){return n[d3.bisect(t,e)]}return e.domain=function(n){return arguments.length?(t=n,e):t},e.range=function(t){return arguments.length?(n=t,e):n},e.copy=function(){return ie(t,n)},e}function ae(t){function n(t){return+t}return n.invert=n,n.domain=n.range=function(e){return arguments.length?(t=e.map(n),n):t},n.ticks=function(n){return Bn(t,n)},n.tickFormat=function(n){return $n(t,n)},n.copy=function(){return ae(t)},n}function oe(t){return t.innerRadius}function ce(t){return t.outerRadius}function le(t){return t.startAngle}function se(t){return t.endAngle}function fe(t){function n(n){function a(){s.push("M",i(t(f),l))}for(var o,s=[],f=[],h=-1,d=n.length,g=c(e),p=c(r);d>++h;)u.call(this,o=n[h],h)?f.push([+g.call(this,o,h),+p.call(this,o,h)]):f.length&&(a(),f=[]);return f.length&&a(),s.length?s.join(""):null}var e=he,r=de,u=o,i=ge,a=i.key,l=.7;return n.x=function(t){return arguments.length?(e=t,n):e},n.y=function(t){return arguments.length?(r=t,n):r},n.defined=function(t){return arguments.length?(u=t,n):u},n.interpolate=function(t){return arguments.length?(a="function"==typeof t?i=t:(i=Oa.get(t)||ge).key,n):a},n.tension=function(t){return arguments.length?(l=t,n):l},n}function he(t){return t[0]}function de(t){return t[1]}function ge(t){return t.join("L")}function pe(t){return ge(t)+"Z"}function me(t){for(var n=0,e=t.length,r=t[0],u=[r[0],",",r[1]];e>++n;)u.push("V",(r=t[n])[1],"H",r[0]);return u.join("")}function ve(t){for(var n=0,e=t.length,r=t[0],u=[r[0],",",r[1]];e>++n;)u.push("H",(r=t[n])[0],"V",r[1]);return u.join("")}function ye(t,n){return 4>t.length?ge(t):t[1]+xe(t.slice(1,t.length-1),_e(t,n))}function Me(t,n){return 3>t.length?ge(t):t[0]+xe((t.push(t[0]),t),_e([t[t.length-2]].concat(t,[t[1]]),n))}function be(t,n){return 3>t.length?ge(t):t[0]+xe(t,_e(t,n))}function xe(t,n){if(1>n.length||t.length!=n.length&&t.length!=n.length+2)return ge(t);var e=t.length!=n.length,r="",u=t[0],i=t[1],a=n[0],o=a,c=1;if(e&&(r+="Q"+(i[0]-2*a[0]/3)+","+(i[1]-2*a[1]/3)+","+i[0]+","+i[1],u=t[1],c=2),n.length>1){o=n[1],i=t[c],c++,r+="C"+(u[0]+a[0])+","+(u[1]+a[1])+","+(i[0]-o[0])+","+(i[1]-o[1])+","+i[0]+","+i[1];for(var l=2;n.length>l;l++,c++)i=t[c],o=n[l],r+="S"+(i[0]-o[0])+","+(i[1]-o[1])+","+i[0]+","+i[1]}if(e){var s=t[c];r+="Q"+(i[0]+2*o[0]/3)+","+(i[1]+2*o[1]/3)+","+s[0]+","+s[1]}return r}function _e(t,n){for(var e,r=[],u=(1-n)/2,i=t[0],a=t[1],o=1,c=t.length;c>++o;)e=i,i=a,a=t[o],r.push([u*(a[0]-e[0]),u*(a[1]-e[1])]);return r}function we(t){if(3>t.length)return ge(t);var n=1,e=t.length,r=t[0],u=r[0],i=r[1],a=[u,u,u,(r=t[1])[0]],o=[i,i,i,r[1]],c=[u,",",i];for(Ne(c,a,o);e>++n;)r=t[n],a.shift(),a.push(r[0]),o.shift(),o.push(r[1]),Ne(c,a,o);for(n=-1;2>++n;)a.shift(),a.push(r[0]),o.shift(),o.push(r[1]),Ne(c,a,o);return c.join("")}function Se(t){if(4>t.length)return ge(t);for(var n,e=[],r=-1,u=t.length,i=[0],a=[0];3>++r;)n=t[r],i.push(n[0]),a.push(n[1]);for(e.push(Ae(Ia,i)+","+Ae(Ia,a)),--r;u>++r;)n=t[r],i.shift(),i.push(n[0]),a.shift(),a.push(n[1]),Ne(e,i,a);return e.join("")}function ke(t){for(var n,e,r=-1,u=t.length,i=u+4,a=[],o=[];4>++r;)e=t[r%u],a.push(e[0]),o.push(e[1]);for(n=[Ae(Ia,a),",",Ae(Ia,o)],--r;i>++r;)e=t[r%u],a.shift(),a.push(e[0]),o.shift(),o.push(e[1]),Ne(n,a,o);return n.join("")}function Ee(t,n){var e=t.length-1;if(e)for(var r,u,i=t[0][0],a=t[0][1],o=t[e][0]-i,c=t[e][1]-a,l=-1;e>=++l;)r=t[l],u=l/e,r[0]=n*r[0]+(1-n)*(i+u*o),r[1]=n*r[1]+(1-n)*(a+u*c);return we(t)}function Ae(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]+t[3]*n[3]}function Ne(t,n,e){t.push("C",Ae(Ya,n),",",Ae(Ya,e),",",Ae(Ua,n),",",Ae(Ua,e),",",Ae(Ia,n),",",Ae(Ia,e))}function Te(t,n){return(n[1]-t[1])/(n[0]-t[0])}function qe(t){for(var n=0,e=t.length-1,r=[],u=t[0],i=t[1],a=r[0]=Te(u,i);e>++n;)r[n]=(a+(a=Te(u=i,i=t[n+1])))/2;return r[n]=a,r}function Ce(t){for(var n,e,r,u,i=[],a=qe(t),o=-1,c=t.length-1;c>++o;)n=Te(t[o],t[o+1]),1e-6>Math.abs(n)?a[o]=a[o+1]=0:(e=a[o]/n,r=a[o+1]/n,u=e*e+r*r,u>9&&(u=3*n/Math.sqrt(u),a[o]=u*e,a[o+1]=u*r));for(o=-1;c>=++o;)u=(t[Math.min(c,o+1)][0]-t[Math.max(0,o-1)][0])/(6*(1+a[o]*a[o])),i.push([u||0,a[o]*u||0]);return i}function ze(t){return 3>t.length?ge(t):t[0]+xe(t,Ce(t))}function De(t){for(var n,e,r,u=-1,i=t.length;i>++u;)n=t[u],e=n[0],r=n[1]+Pa,n[0]=e*Math.cos(r),n[1]=e*Math.sin(r);return t}function Le(t){function n(n){function o(){m.push("M",l(t(y),d),h,f(t(v.reverse()),d),"Z")}for(var s,g,p,m=[],v=[],y=[],M=-1,b=n.length,x=c(e),_=c(u),w=e===r?function(){return g}:c(r),S=u===i?function(){return p}:c(i);b>++M;)a.call(this,s=n[M],M)?(v.push([g=+x.call(this,s,M),p=+_.call(this,s,M)]),y.push([+w.call(this,s,M),+S.call(this,s,M)])):v.length&&(o(),v=[],y=[]);return v.length&&o(),m.length?m.join(""):null}var e=he,r=he,u=0,i=de,a=o,l=ge,s=l.key,f=l,h="L",d=.7;return n.x=function(t){return arguments.length?(e=r=t,n):r},n.x0=function(t){return arguments.length?(e=t,n):e},n.x1=function(t){return arguments.length?(r=t,n):r},n.y=function(t){return arguments.length?(u=i=t,n):i},n.y0=function(t){return arguments.length?(u=t,n):u},n.y1=function(t){return arguments.length?(i=t,n):i},n.defined=function(t){return arguments.length?(a=t,n):a},n.interpolate=function(t){return arguments.length?(s="function"==typeof t?l=t:(l=Oa.get(t)||ge).key,f=l.reverse||l,h=l.closed?"M":"L",n):s},n.tension=function(t){return arguments.length?(d=t,n):d},n}function Fe(t){return t.radius}function He(t){return[t.x,t.y]}function Re(t){return function(){var n=t.apply(this,arguments),e=n[0],r=n[1]+Pa;return[e*Math.cos(r),e*Math.sin(r)]}}function Pe(){return 64}function je(){return"circle"}function Oe(t){var n=Math.sqrt(t/Ri);return"M0,"+n+"A"+n+","+n+" 0 1,1 0,"+-n+"A"+n+","+n+" 0 1,1 0,"+n+"Z"}function Ye(t,n){t.attr("transform",function(t){return"translate("+n(t)+",0)"})}function Ue(t,n){t.attr("transform",function(t){return"translate(0,"+n(t)+")"})}function Ie(t,n,e){if(r=[],e&&n.length>1){for(var r,u,i,a=jn(t.domain()),o=-1,c=n.length,l=(n[1]-n[0])/++e;c>++o;)for(u=e;--u>0;)(i=+n[o]-u*l)>=a[0]&&r.push(i);for(--o,u=0;e>++u&&(i=+n[o]+u*l)<a[1];)r.push(i)}return r}function Ve(){Ja||(Ja=d3.select("body").append("div").style("visibility","hidden").style("top",0).style("height",0).style("width",0).style("overflow-y","scroll").append("div").style("height","2000px").node().parentNode);var t,n=d3.event;try{Ja.scrollTop=1e3,Ja.dispatchEvent(n),t=1e3-Ja.scrollTop}catch(e){t=n.wheelDelta||5*-n.detail}return t}function Xe(t){for(var n=t.source,e=t.target,r=Be(n,e),u=[n];n!==r;)n=n.parent,u.push(n);for(var i=u.length;e!==r;)u.splice(i,0,e),e=e.parent;return u}function Ze(t){for(var n=[],e=t.parent;null!=e;)n.push(t),t=e,e=e.parent;return n.push(t),n}function Be(t,n){if(t===n)return t;for(var e=Ze(t),r=Ze(n),u=e.pop(),i=r.pop(),a=null;u===i;)a=u,u=e.pop(),i=r.pop();return a}function $e(t){t.fixed|=2}function Je(t){t.fixed&=1}function Ge(t){t.fixed|=4,t.px=t.x,t.py=t.y}function Ke(t){t.fixed&=3}function We(t,n,e){var r=0,u=0;if(t.charge=0,!t.leaf)for(var i,a=t.nodes,o=a.length,c=-1;o>++c;)i=a[c],null!=i&&(We(i,n,e),t.charge+=i.charge,r+=i.charge*i.cx,u+=i.charge*i.cy);if(t.point){t.leaf||(t.point.x+=Math.random()-.5,t.point.y+=Math.random()-.5);var l=n*e[t.point.index];t.charge+=t.pointCharge=l,r+=l*t.point.x,u+=l*t.point.y}t.cx=r/t.charge,t.cy=u/t.charge}function Qe(){return 20}function tr(){return 1}function nr(t){return t.x}function er(t){return t.y}function rr(t,n,e){t.y0=n,t.y=e}function ur(t){return d3.range(t.length)}function ir(t){for(var n=-1,e=t[0].length,r=[];e>++n;)r[n]=0;return r}function ar(t){for(var n,e=1,r=0,u=t[0][1],i=t.length;i>e;++e)(n=t[e][1])>u&&(r=e,u=n);return r}function or(t){return t.reduce(cr,0)}function cr(t,n){return t+n[1]}function lr(t,n){return sr(t,Math.ceil(Math.log(n.length)/Math.LN2+1))}function sr(t,n){for(var e=-1,r=+t[0],u=(t[1]-r)/n,i=[];n>=++e;)i[e]=u*e+r;return i}function fr(t){return[d3.min(t),d3.max(t)]}function hr(t,n){return d3.rebind(t,n,"sort","children","value"),t.nodes=t,t.links=mr,t}function dr(t){return t.children}function gr(t){return t.value}function pr(t,n){return n.value-t.value}function mr(t){return d3.merge(t.map(function(t){return(t.children||[]).map(function(n){return{source:t,target:n}})}))}function vr(t,n){return t.value-n.value}function yr(t,n){var e=t._pack_next;t._pack_next=n,n._pack_prev=t,n._pack_next=e,e._pack_prev=n}function Mr(t,n){t._pack_next=n,n._pack_prev=t}function br(t,n){var e=n.x-t.x,r=n.y-t.y,u=t.r+n.r;return u*u-e*e-r*r>.001}function xr(t){function n(t){s=Math.min(t.x-t.r,s),f=Math.max(t.x+t.r,f),h=Math.min(t.y-t.r,h),d=Math.max(t.y+t.r,d)}if((e=t.children)&&(l=e.length)){var e,r,u,i,a,o,c,l,s=1/0,f=-1/0,h=1/0,d=-1/0;if(e.forEach(_r),r=e[0],r.x=-r.r,r.y=0,n(r),l>1&&(u=e[1],u.x=u.r,u.y=0,n(u),l>2))for(i=e[2],kr(r,u,i),n(i),yr(r,i),r._pack_prev=i,yr(i,u),u=r._pack_next,a=3;l>a;a++){kr(r,u,i=e[a]);var g=0,p=1,m=1;for(o=u._pack_next;o!==u;o=o._pack_next,p++)if(br(o,i)){g=1;break}if(1==g)for(c=r._pack_prev;c!==o._pack_prev&&!br(c,i);c=c._pack_prev,m++);g?(m>p||p==m&&u.r<r.r?Mr(r,u=o):Mr(r=c,u),a--):(yr(r,i),u=i,n(i))}var v=(s+f)/2,y=(h+d)/2,M=0;for(a=0;l>a;a++)i=e[a],i.x-=v,i.y-=y,M=Math.max(M,i.r+Math.sqrt(i.x*i.x+i.y*i.y));t.r=M,e.forEach(wr)}}function _r(t){t._pack_next=t._pack_prev=t}function wr(t){delete t._pack_next,delete t._pack_prev}function Sr(t,n,e,r){var u=t.children;if(t.x=n+=r*t.x,t.y=e+=r*t.y,t.r*=r,u)for(var i=-1,a=u.length;a>++i;)Sr(u[i],n,e,r)}function kr(t,n,e){var r=t.r+e.r,u=n.x-t.x,i=n.y-t.y;if(r&&(u||i)){var a=n.r+e.r,o=u*u+i*i;a*=a,r*=r;var c=.5+(r-a)/(2*o),l=Math.sqrt(Math.max(0,2*a*(r+o)-(r-=o)*r-a*a))/(2*o);e.x=t.x+c*u+l*i,e.y=t.y+c*i-l*u}else e.x=t.x+r,e.y=t.y}function Er(t){return 1+d3.max(t,function(t){return t.y})}function Ar(t){return t.reduce(function(t,n){return t+n.x},0)/t.length}function Nr(t){var n=t.children;return n&&n.length?Nr(n[0]):t}function Tr(t){var n,e=t.children;return e&&(n=e.length)?Tr(e[n-1]):t}function qr(t,n){return t.parent==n.parent?1:2}function Cr(t){var n=t.children;return n&&n.length?n[0]:t._tree.thread}function zr(t){var n,e=t.children;return e&&(n=e.length)?e[n-1]:t._tree.thread}function Dr(t,n){var e=t.children;if(e&&(u=e.length))for(var r,u,i=-1;u>++i;)n(r=Dr(e[i],n),t)>0&&(t=r);return t}function Lr(t,n){return t.x-n.x}function Fr(t,n){return n.x-t.x}function Hr(t,n){return t.depth-n.depth}function Rr(t,n){function e(t,r){var u=t.children;if(u&&(a=u.length))for(var i,a,o=null,c=-1;a>++c;)i=u[c],e(i,o),o=i;n(t,r)}e(t,null)}function Pr(t){for(var n,e=0,r=0,u=t.children,i=u.length;--i>=0;)n=u[i]._tree,n.prelim+=e,n.mod+=e,e+=n.shift+(r+=n.change)}function jr(t,n,e){t=t._tree,n=n._tree;var r=e/(n.number-t.number);t.change+=r,n.change-=r,n.shift+=e,n.prelim+=e,n.mod+=e}function Or(t,n,e){return t._tree.ancestor.parent==n.parent?t._tree.ancestor:e}function Yr(t){return{x:t.x,y:t.y,dx:t.dx,dy:t.dy}}function Ur(t,n){var e=t.x+n[3],r=t.y+n[0],u=t.dx-n[1]-n[3],i=t.dy-n[0]-n[2];return 0>u&&(e+=u/2,u=0),0>i&&(r+=i/2,i=0),{x:e,y:r,dx:u,dy:i}}function Ir(t,n){function e(t,e){return d3.xhr(t,n,e).response(r)}function r(t){return e.parse(t.responseText)}function u(n){return n.map(i).join(t)}function i(t){return a.test(t)?'"'+t.replace(/\"/g,'""')+'"':t}var a=RegExp('["'+t+"\n]"),o=t.charCodeAt(0);return e.parse=function(t){var n;return e.parseRows(t,function(t){return n?n(t):(n=Function("d","return {"+t.map(function(t,n){return JSON.stringify(t)+": d["+n+"]"}).join(",")+"}"),void 0)})},e.parseRows=function(t,n){function e(){if(s>=l)return a;if(u)return u=!1,i;var n=s;if(34===t.charCodeAt(n)){for(var e=n;l>e++;)if(34===t.charCodeAt(e)){if(34!==t.charCodeAt(e+1))break;++e}s=e+2;var r=t.charCodeAt(e+1);return 13===r?(u=!0,10===t.charCodeAt(e+2)&&++s):10===r&&(u=!0),t.substring(n+1,e).replace(/""/g,'"')}for(;l>s;){var r=t.charCodeAt(s++),c=1;if(10===r)u=!0;else if(13===r)u=!0,10===t.charCodeAt(s)&&(++s,++c);else if(r!==o)continue;return t.substring(n,s-c)}return t.substring(n)}for(var r,u,i={},a={},c=[],l=t.length,s=0,f=0;(r=e())!==a;){for(var h=[];r!==i&&r!==a;)h.push(r),r=e();(!n||(h=n(h,f++)))&&c.push(h)}return c},e.format=function(t){return t.map(u).join("\n")},e}function Vr(t,n){no.hasOwnProperty(t.type)&&no[t.type](t,n)}function Xr(t,n,e){var r,u=-1,i=t.length-e;for(n.lineStart();i>++u;)r=t[u],n.point(r[0],r[1]);n.lineEnd()}function Zr(t,n){var e=-1,r=t.length;for(n.polygonStart();r>++e;)Xr(t[e],n,1);n.polygonEnd()}function Br(t){return[Math.atan2(t[1],t[0]),Math.asin(Math.max(-1,Math.min(1,t[2])))]}function $r(t,n){return Pi>Math.abs(t[0]-n[0])&&Pi>Math.abs(t[1]-n[1])}function Jr(t){var n=t[0],e=t[1],r=Math.cos(e);return[r*Math.cos(n),r*Math.sin(n),Math.sin(e)]}function Gr(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]}function Kr(t,n){return[t[1]*n[2]-t[2]*n[1],t[2]*n[0]-t[0]*n[2],t[0]*n[1]-t[1]*n[0]]}function Wr(t,n){t[0]+=n[0],t[1]+=n[1],t[2]+=n[2]}function Qr(t,n){return[t[0]*n,t[1]*n,t[2]*n]}function tu(t){var n=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=n,t[1]/=n,t[2]/=n}function nu(t){function n(n){function r(e,r){e=t(e,r),n.point(e[0],e[1])}function i(){s=0/0,p.point=a,n.lineStart()}function a(r,i){var a=Jr([r,i]),o=t(r,i);e(s,f,l,h,d,g,s=o[0],f=o[1],l=r,h=a[0],d=a[1],g=a[2],u,n),n.point(s,f)}function o(){p.point=r,n.lineEnd()}function c(){var t,r,c,m,v,y,M;i(),p.point=function(n,e){a(t=n,r=e),c=s,m=f,v=h,y=d,M=g,p.point=a},p.lineEnd=function(){e(s,f,l,h,d,g,c,m,t,v,y,M,u,n),p.lineEnd=o,o()}}var l,s,f,h,d,g,p={point:r,lineStart:i,lineEnd:o,polygonStart:function(){n.polygonStart(),p.lineStart=c},polygonEnd:function(){n.polygonEnd(),p.lineStart=i}};return p}function e(n,u,i,a,o,c,l,s,f,h,d,g,p,m){var v=l-n,y=s-u,M=v*v+y*y;if(M>4*r&&p--){var b=a+h,x=o+d,_=c+g,w=Math.sqrt(b*b+x*x+_*_),S=Math.asin(_/=w),k=Pi>Math.abs(Math.abs(_)-1)?(i+f)/2:Math.atan2(x,b),E=t(k,S),A=E[0],N=E[1],T=A-n,q=N-u,C=y*T-v*q;(C*C/M>r||Math.abs((v*T+y*q)/M-.5)>.3)&&(e(n,u,i,a,o,c,A,N,k,b/=w,x/=w,_,p,m),m.point(A,N),e(A,N,k,b,x,_,l,s,f,h,d,g,p,m))}}var r=.5,u=16;return n.precision=function(t){return arguments.length?(u=(r=t*t)>0&&16,n):Math.sqrt(r)},n}function eu(t,n){function e(t,n){var e=Math.sqrt(i-2*u*Math.sin(n))/u;return[e*Math.sin(t*=u),a-e*Math.cos(t)]}var r=Math.sin(t),u=(r+Math.sin(n))/2,i=1+r*(2*u-r),a=Math.sqrt(i)/u;return e.invert=function(t,n){var e=a-n;return[Math.atan2(t,e)/u,Math.asin((i-(t*t+e*e)*u*u)/(2*u))]},e}function ru(t){function n(t,n){r>t&&(r=t),t>i&&(i=t),u>n&&(u=n),n>a&&(a=n)}function e(){o.point=o.lineEnd=Pn}var r,u,i,a,o={point:n,lineStart:Pn,lineEnd:Pn,polygonStart:function(){o.lineEnd=e},polygonEnd:function(){o.point=n}};return function(n){return a=i=-(r=u=1/0),d3.geo.stream(n,t(o)),[[r,u],[i,a]]}}function uu(t,n){if(!uo){++io,t*=ji;var e=Math.cos(n*=ji);ao+=(e*Math.cos(t)-ao)/io,oo+=(e*Math.sin(t)-oo)/io,co+=(Math.sin(n)-co)/io}}function iu(){var t,n;uo=1,au(),uo=2;var e=lo.point;lo.point=function(r,u){e(t=r,n=u)},lo.lineEnd=function(){lo.point(t,n),ou(),lo.lineEnd=ou}}function au(){function t(t,u){t*=ji;var i=Math.cos(u*=ji),a=i*Math.cos(t),o=i*Math.sin(t),c=Math.sin(u),l=Math.atan2(Math.sqrt((l=e*c-r*o)*l+(l=r*a-n*c)*l+(l=n*o-e*a)*l),n*a+e*o+r*c);io+=l,ao+=l*(n+(n=a)),oo+=l*(e+(e=o)),co+=l*(r+(r=c))}var n,e,r;uo>1||(1>uo&&(uo=1,io=ao=oo=co=0),lo.point=function(u,i){u*=ji;var a=Math.cos(i*=ji);n=a*Math.cos(u),e=a*Math.sin(u),r=Math.sin(i),lo.point=t})}function ou(){lo.point=uu}function cu(t,n){var e=Math.cos(t),r=Math.sin(t);return function(u,i,a,o){null!=u?(u=lu(e,u),i=lu(e,i),(a>0?i>u:u>i)&&(u+=2*a*Ri)):(u=t+2*a*Ri,i=t);for(var c,l=a*n,s=u;a>0?s>i:i>s;s-=l)o.point((c=Br([e,-r*Math.cos(s),-r*Math.sin(s)]))[0],c[1])}}function lu(t,n){var e=Jr(n);e[0]-=t,tu(e);var r=Math.acos(Math.max(-1,Math.min(1,-e[1])));return((0>-e[2]?-r:r)+2*Math.PI-Pi)%(2*Math.PI)}function su(t,n,e){return function(r){function u(n,e){t(n,e)&&r.point(n,e)}function i(t,n){m.point(t,n)}function a(){v.point=i,m.lineStart()}function o(){v.point=u,m.lineEnd()}function c(t,n){M.point(t,n),p.push([t,n])}function l(){M.lineStart(),p=[]}function s(){c(p[0][0],p[0][1]),M.lineEnd();var t,n=M.clean(),e=y.buffer(),u=e.length;if(!u)return g=!0,d+=mu(p,-1),p=null,void 0;if(p=null,1&n){t=e[0],h+=mu(t,1);var i,u=t.length-1,a=-1;for(r.lineStart();u>++a;)r.point((i=t[a])[0],i[1]);return r.lineEnd(),void 0}u>1&&2&n&&e.push(e.pop().concat(e.shift())),f.push(e.filter(gu))}var f,h,d,g,p,m=n(r),v={point:u,lineStart:a,lineEnd:o,polygonStart:function(){v.point=c,v.lineStart=l,v.lineEnd=s,g=!1,d=h=0,f=[],r.polygonStart()
-},polygonEnd:function(){v.point=u,v.lineStart=a,v.lineEnd=o,f=d3.merge(f),f.length?fu(f,e,r):(-Pi>h||g&&-Pi>d)&&(r.lineStart(),e(null,null,1,r),r.lineEnd()),r.polygonEnd(),f=null},sphere:function(){r.polygonStart(),r.lineStart(),e(null,null,1,r),r.lineEnd(),r.polygonEnd()}},y=pu(),M=n(y);return v}}function fu(t,n,e){var r=[],u=[];if(t.forEach(function(t){var n=t.length;if(!(1>=n)){var e=t[0],i=t[n-1],a={point:e,points:t,other:null,visited:!1,entry:!0,subject:!0},o={point:e,points:[e],other:a,visited:!1,entry:!1,subject:!1};a.other=o,r.push(a),u.push(o),a={point:i,points:[i],other:null,visited:!1,entry:!1,subject:!0},o={point:i,points:[i],other:a,visited:!1,entry:!0,subject:!1},a.other=o,r.push(a),u.push(o)}}),u.sort(du),hu(r),hu(u),r.length)for(var i,a,o,c=r[0];;){for(i=c;i.visited;)if((i=i.next)===c)return;a=i.points,e.lineStart();do{if(i.visited=i.other.visited=!0,i.entry){if(i.subject)for(var l=0;a.length>l;l++)e.point((o=a[l])[0],o[1]);else n(i.point,i.next.point,1,e);i=i.next}else{if(i.subject){a=i.prev.points;for(var l=a.length;--l>=0;)e.point((o=a[l])[0],o[1])}else n(i.point,i.prev.point,-1,e);i=i.prev}i=i.other,a=i.points}while(!i.visited);e.lineEnd()}}function hu(t){if(n=t.length){for(var n,e,r=0,u=t[0];n>++r;)u.next=e=t[r],e.prev=u,u=e;u.next=e=t[0],e.prev=u}}function du(t,n){return(0>(t=t.point)[0]?t[1]-Ri/2-Pi:Ri/2-t[1])-(0>(n=n.point)[0]?n[1]-Ri/2-Pi:Ri/2-n[1])}function gu(t){return t.length>1}function pu(){var t,n=[];return{lineStart:function(){n.push(t=[])},point:function(n,e){t.push([n,e])},lineEnd:Pn,buffer:function(){var e=n;return n=[],t=null,e}}}function mu(t,n){if(!(e=t.length))return 0;for(var e,r,u,i=0,a=0,o=t[0],c=o[0],l=o[1],s=Math.cos(l),f=Math.atan2(n*Math.sin(c)*s,Math.sin(l)),h=1-n*Math.cos(c)*s,d=f;e>++i;)o=t[i],s=Math.cos(l=o[1]),r=Math.atan2(n*Math.sin(c=o[0])*s,Math.sin(l)),u=1-n*Math.cos(c)*s,Pi>Math.abs(h-2)&&Pi>Math.abs(u-2)||(Pi>Math.abs(u)||Pi>Math.abs(h)||(Pi>Math.abs(Math.abs(r-f)-Ri)?u+h>2&&(a+=4*(r-f)):a+=Pi>Math.abs(h-2)?4*(r-d):((3*Ri+r-f)%(2*Ri)-Ri)*(h+u)),d=f,f=r,h=u);return a}function vu(t){var n,e=0/0,r=0/0,u=0/0;return{lineStart:function(){t.lineStart(),n=1},point:function(i,a){var o=i>0?Ri:-Ri,c=Math.abs(i-e);Pi>Math.abs(c-Ri)?(t.point(e,r=(r+a)/2>0?Ri/2:-Ri/2),t.point(u,r),t.lineEnd(),t.lineStart(),t.point(o,r),t.point(i,r),n=0):u!==o&&c>=Ri&&(Pi>Math.abs(e-u)&&(e-=u*Pi),Pi>Math.abs(i-o)&&(i-=o*Pi),r=yu(e,r,i,a),t.point(u,r),t.lineEnd(),t.lineStart(),t.point(o,r),n=0),t.point(e=i,r=a),u=o},lineEnd:function(){t.lineEnd(),e=r=0/0},clean:function(){return 2-n}}}function yu(t,n,e,r){var u,i,a=Math.sin(t-e);return Math.abs(a)>Pi?Math.atan((Math.sin(n)*(i=Math.cos(r))*Math.sin(e)-Math.sin(r)*(u=Math.cos(n))*Math.sin(t))/(u*i*a)):(n+r)/2}function Mu(t,n,e,r){var u;if(null==t)u=e*Ri/2,r.point(-Ri,u),r.point(0,u),r.point(Ri,u),r.point(Ri,0),r.point(Ri,-u),r.point(0,-u),r.point(-Ri,-u),r.point(-Ri,0),r.point(-Ri,u);else if(Math.abs(t[0]-n[0])>Pi){var i=(t[0]<n[0]?1:-1)*Ri;u=e*i/2,r.point(-i,u),r.point(0,u),r.point(i,u)}else r.point(n[0],n[1])}function bu(t){function n(t,n){return Math.cos(t)*Math.cos(n)>i}function e(t){var e,u,i,a;return{lineStart:function(){i=u=!1,a=1},point:function(o,c){var l,s=[o,c],f=n(o,c);!e&&(i=u=f)&&t.lineStart(),f!==u&&(l=r(e,s),($r(e,l)||$r(s,l))&&(s[0]+=Pi,s[1]+=Pi,f=n(s[0],s[1]))),f!==u&&(a=0,(u=f)?(t.lineStart(),l=r(s,e),t.point(l[0],l[1])):(l=r(e,s),t.point(l[0],l[1]),t.lineEnd()),e=l),!f||e&&$r(e,s)||t.point(s[0],s[1]),e=s},lineEnd:function(){u&&t.lineEnd(),e=null},clean:function(){return a|(i&&u)<<1}}}function r(t,n){var e=Jr(t,0),r=Jr(n,0),u=[1,0,0],a=Kr(e,r),o=Gr(a,a),c=a[0],l=o-c*c;if(!l)return t;var s=i*o/l,f=-i*c/l,h=Kr(u,a),d=Qr(u,s),g=Qr(a,f);Wr(d,g);var p=h,m=Gr(d,p),v=Gr(p,p),y=Math.sqrt(m*m-v*(Gr(d,d)-1)),M=Qr(p,(-m-y)/v);return Wr(M,d),Br(M)}var u=t*ji,i=Math.cos(u),a=cu(u,6*ji);return su(n,e,a)}function xu(t,n){function e(e,r){return e=t(e,r),n(e[0],e[1])}return t.invert&&n.invert&&(e.invert=function(e,r){return e=n.invert(e,r),t.invert(e[0],e[1])}),e}function _u(t,n){return[t,n]}function wu(t,n,e){var r=d3.range(t,n-Pi,e).concat(n);return function(t){return r.map(function(n){return[t,n]})}}function Su(t,n,e){var r=d3.range(t,n-Pi,e).concat(n);return function(t){return r.map(function(n){return[n,t]})}}function ku(t,n,e,r){function u(t){var n=Math.sin(t*=d)*g,e=Math.sin(d-t)*g,r=e*l+n*f,u=e*s+n*h,i=e*a+n*c;return[Math.atan2(u,r)/ji,Math.atan2(i,Math.sqrt(r*r+u*u))/ji]}var i=Math.cos(n),a=Math.sin(n),o=Math.cos(r),c=Math.sin(r),l=i*Math.cos(t),s=i*Math.sin(t),f=o*Math.cos(e),h=o*Math.sin(e),d=Math.acos(Math.max(-1,Math.min(1,a*c+i*o*Math.cos(e-t)))),g=1/Math.sin(d);return u.distance=d,u}function Eu(t,n){return[t/(2*Ri),Math.max(-.5,Math.min(.5,Math.log(Math.tan(Ri/4+n/2))/(2*Ri)))]}function Au(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}function Nu(t){var n=nu(function(n,e){return t([n*Oi,e*Oi])});return function(t){return t=n(t),{point:function(n,e){t.point(n*ji,e*ji)},sphere:function(){t.sphere()},lineStart:function(){t.lineStart()},lineEnd:function(){t.lineEnd()},polygonStart:function(){t.polygonStart()},polygonEnd:function(){t.polygonEnd()}}}}function Tu(){function t(t,n){a.push("M",t,",",n,i)}function n(t,n){a.push("M",t,",",n),o.point=e}function e(t,n){a.push("L",t,",",n)}function r(){o.point=t}function u(){a.push("Z")}var i=Au(4.5),a=[],o={point:t,lineStart:function(){o.point=n},lineEnd:r,polygonStart:function(){o.lineEnd=u},polygonEnd:function(){o.lineEnd=r,o.point=t},pointRadius:function(t){return i=Au(t),o},result:function(){if(a.length){var t=a.join("");return a=[],t}}};return o}function qu(t){function n(n,e){t.moveTo(n,e),t.arc(n,e,a,0,2*Ri)}function e(n,e){t.moveTo(n,e),o.point=r}function r(n,e){t.lineTo(n,e)}function u(){o.point=n}function i(){t.closePath()}var a=4.5,o={point:n,lineStart:function(){o.point=e},lineEnd:u,polygonStart:function(){o.lineEnd=i},polygonEnd:function(){o.lineEnd=u,o.point=n},pointRadius:function(t){return a=t,o},result:Pn};return o}function Cu(){function t(t,n){po+=u*t-r*n,r=t,u=n}var n,e,r,u;mo.point=function(i,a){mo.point=t,n=r=i,e=u=a},mo.lineEnd=function(){t(n,e)}}function zu(t,n){uo||(ao+=t,oo+=n,++co)}function Du(){function t(t,r){var u=t-n,i=r-e,a=Math.sqrt(u*u+i*i);ao+=a*(n+t)/2,oo+=a*(e+r)/2,co+=a,n=t,e=r}var n,e;if(1!==uo){if(!(1>uo))return;uo=1,ao=oo=co=0}vo.point=function(r,u){vo.point=t,n=r,e=u}}function Lu(){vo.point=zu}function Fu(){function t(t,n){var e=u*t-r*n;ao+=e*(r+t),oo+=e*(u+n),co+=3*e,r=t,u=n}var n,e,r,u;2>uo&&(uo=2,ao=oo=co=0),vo.point=function(i,a){vo.point=t,n=r=i,e=u=a},vo.lineEnd=function(){t(n,e)}}function Hu(){function t(t,n){if(t*=ji,n*=ji,!(Pi>Math.abs(Math.abs(i)-Ri/2)&&Pi>Math.abs(Math.abs(n)-Ri/2))){var e=Math.cos(n),c=Math.sin(n);if(Pi>Math.abs(i-Ri/2))Mo+=2*(t-r);else{var l=t-u,s=Math.cos(l),f=Math.atan2(Math.sqrt((f=e*Math.sin(l))*f+(f=a*c-o*e*s)*f),o*c+a*e*s),h=(f+Ri+i+n)/4;Mo+=(0>l&&l>-Ri||l>Ri?-4:4)*Math.atan(Math.sqrt(Math.abs(Math.tan(h)*Math.tan(h-f/2)*Math.tan(h-Ri/4-i/2)*Math.tan(h-Ri/4-n/2))))}r=u,u=t,i=n,a=e,o=c}}var n,e,r,u,i,a,o;bo.point=function(c,l){bo.point=t,r=u=(n=c)*ji,i=(e=l)*ji,a=Math.cos(i),o=Math.sin(i)},bo.lineEnd=function(){t(n,e)}}function Ru(t){return Pu(function(){return t})()}function Pu(t){function n(t){return t=a(t[0]*ji,t[1]*ji),[t[0]*s+o,c-t[1]*s]}function e(t){return t=a.invert((t[0]-o)/s,(c-t[1])/s),[t[0]*Oi,t[1]*Oi]}function r(){a=xu(i=Ou(p,m,v),u);var t=u(d,g);return o=f-t[0]*s,c=h+t[1]*s,n}var u,i,a,o,c,l=nu(function(t,n){return t=u(t,n),[t[0]*s+o,c-t[1]*s]}),s=150,f=480,h=250,d=0,g=0,p=0,m=0,v=0,y=so,M=null;return n.stream=function(t){return ju(i,y(l(t)))},n.clipAngle=function(t){return arguments.length?(y=null==t?(M=t,so):bu(M=+t),n):M},n.scale=function(t){return arguments.length?(s=+t,r()):s},n.translate=function(t){return arguments.length?(f=+t[0],h=+t[1],r()):[f,h]},n.center=function(t){return arguments.length?(d=t[0]%360*ji,g=t[1]%360*ji,r()):[d*Oi,g*Oi]},n.rotate=function(t){return arguments.length?(p=t[0]%360*ji,m=t[1]%360*ji,v=t.length>2?t[2]%360*ji:0,r()):[p*Oi,m*Oi,v*Oi]},d3.rebind(n,l,"precision"),function(){return u=t.apply(this,arguments),n.invert=u.invert&&e,r()}}function ju(t,n){return{point:function(e,r){r=t(e*ji,r*ji),e=r[0],n.point(e>Ri?e-2*Ri:-Ri>e?e+2*Ri:e,r[1])},sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function Ou(t,n,e){return t?n||e?xu(Uu(t),Iu(n,e)):Uu(t):n||e?Iu(n,e):_u}function Yu(t){return function(n,e){return n+=t,[n>Ri?n-2*Ri:-Ri>n?n+2*Ri:n,e]}}function Uu(t){var n=Yu(t);return n.invert=Yu(-t),n}function Iu(t,n){function e(t,n){var e=Math.cos(n),o=Math.cos(t)*e,c=Math.sin(t)*e,l=Math.sin(n),s=l*r+o*u;return[Math.atan2(c*i-s*a,o*r-l*u),Math.asin(Math.max(-1,Math.min(1,s*i+c*a)))]}var r=Math.cos(t),u=Math.sin(t),i=Math.cos(n),a=Math.sin(n);return e.invert=function(t,n){var e=Math.cos(n),o=Math.cos(t)*e,c=Math.sin(t)*e,l=Math.sin(n),s=l*i-c*a;return[Math.atan2(c*i+l*a,o*r+s*u),Math.asin(Math.max(-1,Math.min(1,s*r-o*u)))]},e}function Vu(t,n){function e(n,e){var r=Math.cos(n),u=Math.cos(e),i=t(r*u);return[i*u*Math.sin(n),i*Math.sin(e)]}return e.invert=function(t,e){var r=Math.sqrt(t*t+e*e),u=n(r),i=Math.sin(u),a=Math.cos(u);return[Math.atan2(t*i,r*a),Math.asin(r&&e*i/r)]},e}function Xu(t,n,e,r){var u,i,a,o,c,l,s;return u=r[t],i=u[0],a=u[1],u=r[n],o=u[0],c=u[1],u=r[e],l=u[0],s=u[1],(s-a)*(o-i)-(c-a)*(l-i)>0}function Zu(t,n,e){return(e[0]-n[0])*(t[1]-n[1])<(e[1]-n[1])*(t[0]-n[0])}function Bu(t,n,e,r){var u=t[0],i=e[0],a=n[0]-u,o=r[0]-i,c=t[1],l=e[1],s=n[1]-c,f=r[1]-l,h=(o*(c-l)-f*(u-i))/(f*a-o*s);return[u+h*a,c+h*s]}function $u(t,n){var e={list:t.map(function(t,n){return{index:n,x:t[0],y:t[1]}}).sort(function(t,n){return t.y<n.y?-1:t.y>n.y?1:t.x<n.x?-1:t.x>n.x?1:0}),bottomSite:null},r={list:[],leftEnd:null,rightEnd:null,init:function(){r.leftEnd=r.createHalfEdge(null,"l"),r.rightEnd=r.createHalfEdge(null,"l"),r.leftEnd.r=r.rightEnd,r.rightEnd.l=r.leftEnd,r.list.unshift(r.leftEnd,r.rightEnd)},createHalfEdge:function(t,n){return{edge:t,side:n,vertex:null,l:null,r:null}},insert:function(t,n){n.l=t,n.r=t.r,t.r.l=n,t.r=n},leftBound:function(t){var n=r.leftEnd;do n=n.r;while(n!=r.rightEnd&&u.rightOf(n,t));return n=n.l},del:function(t){t.l.r=t.r,t.r.l=t.l,t.edge=null},right:function(t){return t.r},left:function(t){return t.l},leftRegion:function(t){return null==t.edge?e.bottomSite:t.edge.region[t.side]},rightRegion:function(t){return null==t.edge?e.bottomSite:t.edge.region[_o[t.side]]}},u={bisect:function(t,n){var e={region:{l:t,r:n},ep:{l:null,r:null}},r=n.x-t.x,u=n.y-t.y,i=r>0?r:-r,a=u>0?u:-u;return e.c=t.x*r+t.y*u+.5*(r*r+u*u),i>a?(e.a=1,e.b=u/r,e.c/=r):(e.b=1,e.a=r/u,e.c/=u),e},intersect:function(t,n){var e=t.edge,r=n.edge;if(!e||!r||e.region.r==r.region.r)return null;var u=e.a*r.b-e.b*r.a;if(1e-10>Math.abs(u))return null;var i,a,o=(e.c*r.b-r.c*e.b)/u,c=(r.c*e.a-e.c*r.a)/u,l=e.region.r,s=r.region.r;l.y<s.y||l.y==s.y&&l.x<s.x?(i=t,a=e):(i=n,a=r);var f=o>=a.region.r.x;return f&&"l"===i.side||!f&&"r"===i.side?null:{x:o,y:c}},rightOf:function(t,n){var e=t.edge,r=e.region.r,u=n.x>r.x;if(u&&"l"===t.side)return 1;if(!u&&"r"===t.side)return 0;if(1===e.a){var i=n.y-r.y,a=n.x-r.x,o=0,c=0;if(!u&&0>e.b||u&&e.b>=0?c=o=i>=e.b*a:(c=n.x+n.y*e.b>e.c,0>e.b&&(c=!c),c||(o=1)),!o){var l=r.x-e.region.l.x;c=e.b*(a*a-i*i)<l*i*(1+2*a/l+e.b*e.b),0>e.b&&(c=!c)}}else{var s=e.c-e.a*n.x,f=n.y-s,h=n.x-r.x,d=s-r.y;c=f*f>h*h+d*d}return"l"===t.side?c:!c},endPoint:function(t,e,r){t.ep[e]=r,t.ep[_o[e]]&&n(t)},distance:function(t,n){var e=t.x-n.x,r=t.y-n.y;return Math.sqrt(e*e+r*r)}},i={list:[],insert:function(t,n,e){t.vertex=n,t.ystar=n.y+e;for(var r=0,u=i.list,a=u.length;a>r;r++){var o=u[r];if(!(t.ystar>o.ystar||t.ystar==o.ystar&&n.x>o.vertex.x))break}u.splice(r,0,t)},del:function(t){for(var n=0,e=i.list,r=e.length;r>n&&e[n]!=t;++n);e.splice(n,1)},empty:function(){return 0===i.list.length},nextEvent:function(t){for(var n=0,e=i.list,r=e.length;r>n;++n)if(e[n]==t)return e[n+1];return null},min:function(){var t=i.list[0];return{x:t.vertex.x,y:t.ystar}},extractMin:function(){return i.list.shift()}};r.init(),e.bottomSite=e.list.shift();for(var a,o,c,l,s,f,h,d,g,p,m,v,y,M=e.list.shift();;)if(i.empty()||(a=i.min()),M&&(i.empty()||M.y<a.y||M.y==a.y&&M.x<a.x))o=r.leftBound(M),c=r.right(o),h=r.rightRegion(o),v=u.bisect(h,M),f=r.createHalfEdge(v,"l"),r.insert(o,f),p=u.intersect(o,f),p&&(i.del(o),i.insert(o,p,u.distance(p,M))),o=f,f=r.createHalfEdge(v,"r"),r.insert(o,f),p=u.intersect(f,c),p&&i.insert(f,p,u.distance(p,M)),M=e.list.shift();else{if(i.empty())break;o=i.extractMin(),l=r.left(o),c=r.right(o),s=r.right(c),h=r.leftRegion(o),d=r.rightRegion(c),m=o.vertex,u.endPoint(o.edge,o.side,m),u.endPoint(c.edge,c.side,m),r.del(o),i.del(c),r.del(c),y="l",h.y>d.y&&(g=h,h=d,d=g,y="r"),v=u.bisect(h,d),f=r.createHalfEdge(v,y),r.insert(l,f),u.endPoint(v,_o[y],m),p=u.intersect(l,f),p&&(i.del(l),i.insert(l,p,u.distance(p,h))),p=u.intersect(f,s),p&&i.insert(f,p,u.distance(p,h))}for(o=r.right(r.leftEnd);o!=r.rightEnd;o=r.right(o))n(o.edge)}function Ju(){return{leaf:!0,nodes:[],point:null}}function Gu(t,n,e,r,u,i){if(!t(n,e,r,u,i)){var a=.5*(e+u),o=.5*(r+i),c=n.nodes;c[0]&&Gu(t,c[0],e,r,a,o),c[1]&&Gu(t,c[1],a,r,u,o),c[2]&&Gu(t,c[2],e,o,a,i),c[3]&&Gu(t,c[3],a,o,u,i)}}function Ku(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Wu(t,n,e,r){for(var u,i,a=0,o=n.length,c=e.length;o>a;){if(r>=c)return-1;if(u=n.charCodeAt(a++),37===u){if(i=Yo[n.charAt(a++)],!i||0>(r=i(t,e,r)))return-1}else if(u!=e.charCodeAt(r++))return-1}return r}function Qu(t){return RegExp("^(?:"+t.map(d3.requote).join("|")+")","i")}function ti(t){for(var n=new i,e=-1,r=t.length;r>++e;)n.set(t[e].toLowerCase(),e);return n}function ni(t,n,e){t+="";var r=t.length;return e>r?Array(e-r+1).join(n)+t:t}function ei(t,n,e){Lo.lastIndex=0;var r=Lo.exec(n.substring(e));return r?e+=r[0].length:-1}function ri(t,n,e){Do.lastIndex=0;var r=Do.exec(n.substring(e));return r?e+=r[0].length:-1}function ui(t,n,e){Ro.lastIndex=0;var r=Ro.exec(n.substring(e));return r?(t.m=Po.get(r[0].toLowerCase()),e+=r[0].length):-1}function ii(t,n,e){Fo.lastIndex=0;var r=Fo.exec(n.substring(e));return r?(t.m=Ho.get(r[0].toLowerCase()),e+=r[0].length):-1}function ai(t,n,e){return Wu(t,""+Oo.c,n,e)}function oi(t,n,e){return Wu(t,""+Oo.x,n,e)}function ci(t,n,e){return Wu(t,""+Oo.X,n,e)}function li(t,n,e){Uo.lastIndex=0;var r=Uo.exec(n.substring(e,e+4));return r?(t.y=+r[0],e+=r[0].length):-1}function si(t,n,e){Uo.lastIndex=0;var r=Uo.exec(n.substring(e,e+2));return r?(t.y=fi(+r[0]),e+=r[0].length):-1}function fi(t){return t+(t>68?1900:2e3)}function hi(t,n,e){Uo.lastIndex=0;var r=Uo.exec(n.substring(e,e+2));return r?(t.m=r[0]-1,e+=r[0].length):-1}function di(t,n,e){Uo.lastIndex=0;var r=Uo.exec(n.substring(e,e+2));return r?(t.d=+r[0],e+=r[0].length):-1}function gi(t,n,e){Uo.lastIndex=0;var r=Uo.exec(n.substring(e,e+2));return r?(t.H=+r[0],e+=r[0].length):-1}function pi(t,n,e){Uo.lastIndex=0;var r=Uo.exec(n.substring(e,e+2));return r?(t.M=+r[0],e+=r[0].length):-1}function mi(t,n,e){Uo.lastIndex=0;var r=Uo.exec(n.substring(e,e+2));return r?(t.S=+r[0],e+=r[0].length):-1}function vi(t,n,e){Uo.lastIndex=0;var r=Uo.exec(n.substring(e,e+3));return r?(t.L=+r[0],e+=r[0].length):-1}function yi(t,n,e){var r=Io.get(n.substring(e,e+=2).toLowerCase());return null==r?-1:(t.p=r,e)}function Mi(t){var n=t.getTimezoneOffset(),e=n>0?"-":"+",r=~~(Math.abs(n)/60),u=Math.abs(n)%60;return e+ni(r,"0",2)+ni(u,"0",2)}function bi(t){return t.toISOString()}function xi(t,n,e){function r(n){var e=t(n),r=i(e,1);return r-n>n-e?e:r}function u(e){return n(e=t(new wo(e-1)),1),e}function i(t,e){return n(t=new wo(+t),e),t}function a(t,r,i){var a=u(t),o=[];if(i>1)for(;r>a;)e(a)%i||o.push(new Date(+a)),n(a,1);else for(;r>a;)o.push(new Date(+a)),n(a,1);return o}function o(t,n,e){try{wo=Ku;var r=new Ku;return r._=t,a(r,n,e)}finally{wo=Date}}t.floor=t,t.round=r,t.ceil=u,t.offset=i,t.range=a;var c=t.utc=_i(t);return c.floor=c,c.round=_i(r),c.ceil=_i(u),c.offset=_i(i),c.range=o,t}function _i(t){return function(n,e){try{wo=Ku;var r=new Ku;return r._=n,t(r,e)._}finally{wo=Date}}}function wi(t,n,e){function r(n){return t(n)}return r.invert=function(n){return ki(t.invert(n))},r.domain=function(n){return arguments.length?(t.domain(n),r):t.domain().map(ki)},r.nice=function(t){return r.domain(Yn(r.domain(),function(){return t}))},r.ticks=function(e,u){var i=Si(r.domain());if("function"!=typeof e){var a=i[1]-i[0],o=a/e,c=d3.bisect(Xo,o);if(c==Xo.length)return n.year(i,e);if(!c)return t.ticks(e).map(ki);Math.log(o/Xo[c-1])<Math.log(Xo[c]/o)&&--c,e=n[c],u=e[1],e=e[0].range}return e(i[0],new Date(+i[1]+1),u)},r.tickFormat=function(){return e},r.copy=function(){return wi(t.copy(),n,e)},d3.rebind(r,t,"range","rangeRound","interpolate","clamp")}function Si(t){var n=t[0],e=t[t.length-1];return e>n?[n,e]:[e,n]}function ki(t){return new Date(t)}function Ei(t){return function(n){for(var e=t.length-1,r=t[e];!r[1](n);)r=t[--e];return r[0](n)}}function Ai(t){var n=new Date(t,0,1);return n.setFullYear(t),n}function Ni(t){var n=t.getFullYear(),e=Ai(n),r=Ai(n+1);return n+(t-e)/(r-e)}function Ti(t){var n=new Date(Date.UTC(t,0,1));return n.setUTCFullYear(t),n}function qi(t){var n=t.getUTCFullYear(),e=Ti(n),r=Ti(n+1);return n+(t-e)/(r-e)}var Ci=".",zi=",",Di=[3,3];Date.now||(Date.now=function(){return+new Date});try{document.createElement("div").style.setProperty("opacity",0,"")}catch(Li){var Fi=CSSStyleDeclaration.prototype,Hi=Fi.setProperty;Fi.setProperty=function(t,n,e){Hi.call(this,t,n+"",e)}}d3={version:"3.0.2"};var Ri=Math.PI,Pi=1e-6,ji=Ri/180,Oi=180/Ri,Yi=u;try{Yi(document.documentElement.childNodes)[0].nodeType}catch(Ui){Yi=r}var Ii=[].__proto__?function(t,n){t.__proto__=n}:function(t,n){for(var e in n)t[e]=n[e]};d3.map=function(t){var n=new i;for(var e in t)n.set(e,t[e]);return n},e(i,{has:function(t){return Vi+t in this},get:function(t){return this[Vi+t]},set:function(t,n){return this[Vi+t]=n},remove:function(t){return t=Vi+t,t in this&&delete this[t]},keys:function(){var t=[];return this.forEach(function(n){t.push(n)}),t},values:function(){var t=[];return this.forEach(function(n,e){t.push(e)}),t},entries:function(){var t=[];return this.forEach(function(n,e){t.push({key:n,value:e})}),t},forEach:function(t){for(var n in this)n.charCodeAt(0)===Xi&&t.call(this,n.substring(1),this[n])}});var Vi="\0",Xi=Vi.charCodeAt(0);d3.functor=c,d3.rebind=function(t,n){for(var e,r=1,u=arguments.length;u>++r;)t[e=arguments[r]]=l(t,n,n[e]);return t},d3.ascending=function(t,n){return n>t?-1:t>n?1:t>=n?0:0/0},d3.descending=function(t,n){return t>n?-1:n>t?1:n>=t?0:0/0},d3.mean=function(t,n){var e,r=t.length,u=0,i=-1,a=0;if(1===arguments.length)for(;r>++i;)s(e=t[i])&&(u+=(e-u)/++a);else for(;r>++i;)s(e=n.call(t,t[i],i))&&(u+=(e-u)/++a);return a?u:void 0},d3.median=function(t,n){return arguments.length>1&&(t=t.map(n)),t=t.filter(s),t.length?d3.quantile(t.sort(d3.ascending),.5):void 0},d3.min=function(t,n){var e,r,u=-1,i=t.length;if(1===arguments.length){for(;i>++u&&(null==(e=t[u])||e!=e);)e=void 0;for(;i>++u;)null!=(r=t[u])&&e>r&&(e=r)}else{for(;i>++u&&(null==(e=n.call(t,t[u],u))||e!=e);)e=void 0;for(;i>++u;)null!=(r=n.call(t,t[u],u))&&e>r&&(e=r)}return e},d3.max=function(t,n){var e,r,u=-1,i=t.length;if(1===arguments.length){for(;i>++u&&(null==(e=t[u])||e!=e);)e=void 0;for(;i>++u;)null!=(r=t[u])&&r>e&&(e=r)}else{for(;i>++u&&(null==(e=n.call(t,t[u],u))||e!=e);)e=void 0;for(;i>++u;)null!=(r=n.call(t,t[u],u))&&r>e&&(e=r)}return e},d3.extent=function(t,n){var e,r,u,i=-1,a=t.length;if(1===arguments.length){for(;a>++i&&(null==(e=u=t[i])||e!=e);)e=u=void 0;for(;a>++i;)null!=(r=t[i])&&(e>r&&(e=r),r>u&&(u=r))}else{for(;a>++i&&(null==(e=u=n.call(t,t[i],i))||e!=e);)e=void 0;for(;a>++i;)null!=(r=n.call(t,t[i],i))&&(e>r&&(e=r),r>u&&(u=r))}return[e,u]},d3.random={normal:function(t,n){var e=arguments.length;return 2>e&&(n=1),1>e&&(t=0),function(){var e,r,u;do e=2*Math.random()-1,r=2*Math.random()-1,u=e*e+r*r;while(!u||u>1);return t+n*e*Math.sqrt(-2*Math.log(u)/u)}},logNormal:function(t,n){var e=arguments.length;2>e&&(n=1),1>e&&(t=0);var r=d3.random.normal();return function(){return Math.exp(t+n*r())}},irwinHall:function(t){return function(){for(var n=0,e=0;t>e;e++)n+=Math.random();return n/t}}},d3.sum=function(t,n){var e,r=0,u=t.length,i=-1;if(1===arguments.length)for(;u>++i;)isNaN(e=+t[i])||(r+=e);else for(;u>++i;)isNaN(e=+n.call(t,t[i],i))||(r+=e);return r},d3.quantile=function(t,n){var e=(t.length-1)*n+1,r=Math.floor(e),u=+t[r-1],i=e-r;return i?u+i*(t[r]-u):u},d3.shuffle=function(t){for(var n,e,r=t.length;r;)e=0|Math.random()*r--,n=t[r],t[r]=t[e],t[e]=n;return t},d3.transpose=function(t){return d3.zip.apply(d3,t)},d3.zip=function(){if(!(r=arguments.length))return[];for(var t=-1,n=d3.min(arguments,f),e=Array(n);n>++t;)for(var r,u=-1,i=e[t]=Array(r);r>++u;)i[u]=arguments[u][t];return e},d3.bisector=function(t){return{left:function(n,e,r,u){for(3>arguments.length&&(r=0),4>arguments.length&&(u=n.length);u>r;){var i=r+u>>>1;e>t.call(n,n[i],i)?r=i+1:u=i}return r},right:function(n,e,r,u){for(3>arguments.length&&(r=0),4>arguments.length&&(u=n.length);u>r;){var i=r+u>>>1;t.call(n,n[i],i)>e?u=i:r=i+1}return r}}};var Zi=d3.bisector(function(t){return t});d3.bisectLeft=Zi.left,d3.bisect=d3.bisectRight=Zi.right,d3.nest=function(){function t(n,o){if(o>=a.length)return r?r.call(u,n):e?n.sort(e):n;for(var c,l,s,f=-1,h=n.length,d=a[o++],g=new i,p={};h>++f;)(s=g.get(c=d(l=n[f])))?s.push(l):g.set(c,[l]);return g.forEach(function(n,e){p[n]=t(e,o)}),p}function n(t,e){if(e>=a.length)return t;var r,u=[],i=o[e++];for(r in t)u.push({key:r,values:n(t[r],e)});return i&&u.sort(function(t,n){return i(t.key,n.key)}),u}var e,r,u={},a=[],o=[];return u.map=function(n){return t(n,0)},u.entries=function(e){return n(t(e,0),0)},u.key=function(t){return a.push(t),u},u.sortKeys=function(t){return o[a.length-1]=t,u},u.sortValues=function(t){return e=t,u},u.rollup=function(t){return r=t,u},u},d3.keys=function(t){var n=[];for(var e in t)n.push(e);return n},d3.values=function(t){var n=[];for(var e in t)n.push(t[e]);return n},d3.entries=function(t){var n=[];for(var e in t)n.push({key:e,value:t[e]});return n},d3.permute=function(t,n){for(var e=[],r=-1,u=n.length;u>++r;)e[r]=t[n[r]];return e},d3.merge=function(t){return Array.prototype.concat.apply([],t)},d3.range=function(t,n,e){if(3>arguments.length&&(e=1,2>arguments.length&&(n=t,t=0)),1/0===(n-t)/e)throw Error("infinite range");var r,u=[],i=d(Math.abs(e)),a=-1;if(t*=i,n*=i,e*=i,0>e)for(;(r=t+e*++a)>n;)u.push(r/i);else for(;n>(r=t+e*++a);)u.push(r/i);return u},d3.requote=function(t){return t.replace(Bi,"\\$&")};var Bi=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;d3.round=function(t,n){return n?Math.round(t*(n=Math.pow(10,n)))/n:Math.round(t)},d3.xhr=function(t,n,e){function r(){var t=l.status;!t&&l.responseText||t>=200&&300>t||304===t?i.load.call(u,c.call(u,l)):i.error.call(u,l)}var u={},i=d3.dispatch("progress","load","error"),o={},c=a,l=new(window.XDomainRequest&&/^(http(s)?:)?\/\//.test(t)?XDomainRequest:XMLHttpRequest);return"onload"in l?l.onload=l.onerror=r:l.onreadystatechange=function(){l.readyState>3&&r()},l.onprogress=function(t){var n=d3.event;d3.event=t;try{i.progress.call(u,l)}finally{d3.event=n}},u.header=function(t,n){return t=(t+"").toLowerCase(),2>arguments.length?o[t]:(null==n?delete o[t]:o[t]=n+"",u)},u.mimeType=function(t){return arguments.length?(n=null==t?null:t+"",u):n},u.response=function(t){return c=t,u},["get","post"].forEach(function(t){u[t]=function(){return u.send.apply(u,[t].concat(Yi(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,t,!0),null==n||"accept"in o||(o.accept=n+",*/*"),l.setRequestHeader)for(var a in o)l.setRequestHeader(a,o[a]);return null!=n&&l.overrideMimeType&&l.overrideMimeType(n),null!=i&&u.on("error",i).on("load",function(t){i(null,t)}),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},d3.rebind(u,i,"on"),2===arguments.length&&"function"==typeof n&&(e=n,n=null),null==e?u:u.get(g(e))},d3.text=function(){return d3.xhr.apply(d3,arguments).response(p)},d3.json=function(t,n){return d3.xhr(t,"application/json",n).response(m)},d3.html=function(t,n){return d3.xhr(t,"text/html",n).response(v)},d3.xml=function(){return d3.xhr.apply(d3,arguments).response(y)};var $i={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};d3.ns={prefix:$i,qualify:function(t){var n=t.indexOf(":"),e=t;return n>=0&&(e=t.substring(0,n),t=t.substring(n+1)),$i.hasOwnProperty(e)?{space:$i[e],local:t}:t}},d3.dispatch=function(){for(var t=new M,n=-1,e=arguments.length;e>++n;)t[arguments[n]]=b(t);return t},M.prototype.on=function(t,n){var e=t.indexOf("."),r="";return e>0&&(r=t.substring(e+1),t=t.substring(0,e)),2>arguments.length?this[t].on(r):this[t].on(r,n)},d3.format=function(t){var n=Ji.exec(t),e=n[1]||" ",r=n[2]||">",u=n[3]||"",i=n[4]||"",a=n[5],o=+n[6],c=n[7],l=n[8],s=n[9],f=1,h="",d=!1;switch(l&&(l=+l.substring(1)),(a||"0"===e&&"="===r)&&(a=e="0",r="=",c&&(o-=Math.floor((o-1)/4))),s){case"n":c=!0,s="g";break;case"%":f=100,h="%",s="f";break;case"p":f=100,h="%",s="r";break;case"b":case"o":case"x":case"X":i&&(i="0"+s.toLowerCase());case"c":case"d":d=!0,l=0;break;case"s":f=-1,s="r"}"#"===i&&(i=""),"r"!=s||l||(s="g"),s=Gi.get(s)||_;var g=a&&c;return function(t){if(d&&t%1)return"";var n=0>t||0===t&&0>1/t?(t=-t,"-"):u;if(0>f){var p=d3.formatPrefix(t,l);t=p.scale(t),h=p.symbol}else t*=f;t=s(t,l),!a&&c&&(t=Ki(t));var m=i.length+t.length+(g?0:n.length),v=o>m?Array(m=o-m+1).join(e):"";return g&&(t=Ki(v+t)),Ci&&t.replace(".",Ci),n+=i,("<"===r?n+t+v:">"===r?v+n+t:"^"===r?v.substring(0,m>>=1)+n+t+v.substring(m):n+(g?t:v+t))+h}};var Ji=/(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,Gi=d3.map({b:function(t){return t.toString(2)},c:function(t){return String.fromCharCode(t)},o:function(t){return t.toString(8)},x:function(t){return t.toString(16)},X:function(t){return t.toString(16).toUpperCase()},g:function(t,n){return t.toPrecision(n)},e:function(t,n){return t.toExponential(n)},f:function(t,n){return t.toFixed(n)},r:function(t,n){return d3.round(t,n=x(t,n)).toFixed(Math.max(0,Math.min(20,n)))}}),Ki=a;if(Di){var Wi=Di.length;Ki=function(t){for(var n=t.lastIndexOf("."),e=n>=0?"."+t.substring(n+1):(n=t.length,""),r=[],u=0,i=Di[0];n>0&&i>0;)r.push(t.substring(n-=i,n+i)),i=Di[u=(u+1)%Wi];return r.reverse().join(zi||"")+e}}var Qi=["y","z","a","f","p","n","μ","m","","k","M","G","T","P","E","Z","Y"].map(w);d3.formatPrefix=function(t,n){var e=0;return t&&(0>t&&(t*=-1),n&&(t=d3.round(t,x(t,n))),e=1+Math.floor(1e-12+Math.log(t)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((0>=e?e+1:e-1)/3)))),Qi[8+e/3]};var ta=function(){return a},na=d3.map({linear:ta,poly:q,quad:function(){return A},cubic:function(){return N},sin:function(){return C},exp:function(){return z},circle:function(){return D},elastic:L,back:F,bounce:function(){return H}}),ea=d3.map({"in":a,out:k,"in-out":E,"out-in":function(t){return E(k(t))}});d3.ease=function(t){var n=t.indexOf("-"),e=n>=0?t.substring(0,n):t,r=n>=0?t.substring(n+1):"in";return e=na.get(e)||ta,r=ea.get(r)||a,S(r(e.apply(null,Array.prototype.slice.call(arguments,1))))},d3.event=null,d3.transform=function(t){var n=document.createElementNS(d3.ns.prefix.svg,"g");return(d3.transform=function(t){n.setAttribute("transform",t);var e=n.transform.baseVal.consolidate();return new O(e?e.matrix:ra)})(t)},O.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var ra={a:1,b:0,c:0,d:1,e:0,f:0};d3.interpolate=function(t,n){for(var e,r=d3.interpolators.length;--r>=0&&!(e=d3.interpolators[r](t,n)););return e},d3.interpolateNumber=function(t,n){return n-=t,function(e){return t+n*e}},d3.interpolateRound=function(t,n){return n-=t,function(e){return Math.round(t+n*e)}},d3.interpolateString=function(t,n){var e,r,u,i,a,o=0,c=0,l=[],s=[];for(ua.lastIndex=0,r=0;e=ua.exec(n);++r)e.index&&l.push(n.substring(o,c=e.index)),s.push({i:l.length,x:e[0]}),l.push(null),o=ua.lastIndex;for(n.length>o&&l.push(n.substring(o)),r=0,i=s.length;(e=ua.exec(t))&&i>r;++r)if(a=s[r],a.x==e[0]){if(a.i)if(null==l[a.i+1])for(l[a.i-1]+=a.x,l.splice(a.i,1),u=r+1;i>u;++u)s[u].i--;else for(l[a.i-1]+=a.x+l[a.i+1],l.splice(a.i,2),u=r+1;i>u;++u)s[u].i-=2;else if(null==l[a.i+1])l[a.i]=a.x;else for(l[a.i]=a.x+l[a.i+1],l.splice(a.i+1,1),u=r+1;i>u;++u)s[u].i--;s.splice(r,1),i--,r--}else a.x=d3.interpolateNumber(parseFloat(e[0]),parseFloat(a.x));for(;i>r;)a=s.pop(),null==l[a.i+1]?l[a.i]=a.x:(l[a.i]=a.x+l[a.i+1],l.splice(a.i+1,1)),i--;return 1===l.length?null==l[0]?s[0].x:function(){return n}:function(t){for(r=0;i>r;++r)l[(a=s[r]).i]=a.x(t);return l.join("")}},d3.interpolateTransform=function(t,n){var e,r=[],u=[],i=d3.transform(t),a=d3.transform(n),o=i.translate,c=a.translate,l=i.rotate,s=a.rotate,f=i.skew,h=a.skew,d=i.scale,g=a.scale;return o[0]!=c[0]||o[1]!=c[1]?(r.push("translate(",null,",",null,")"),u.push({i:1,x:d3.interpolateNumber(o[0],c[0])},{i:3,x:d3.interpolateNumber(o[1],c[1])})):c[0]||c[1]?r.push("translate("+c+")"):r.push(""),l!=s?(l-s>180?s+=360:s-l>180&&(l+=360),u.push({i:r.push(r.pop()+"rotate(",null,")")-2,x:d3.interpolateNumber(l,s)})):s&&r.push(r.pop()+"rotate("+s+")"),f!=h?u.push({i:r.push(r.pop()+"skewX(",null,")")-2,x:d3.interpolateNumber(f,h)}):h&&r.push(r.pop()+"skewX("+h+")"),d[0]!=g[0]||d[1]!=g[1]?(e=r.push(r.pop()+"scale(",null,",",null,")"),u.push({i:e-4,x:d3.interpolateNumber(d[0],g[0])},{i:e-2,x:d3.interpolateNumber(d[1],g[1])})):(1!=g[0]||1!=g[1])&&r.push(r.pop()+"scale("+g+")"),e=u.length,function(t){for(var n,i=-1;e>++i;)r[(n=u[i]).i]=n.x(t);return r.join("")}},d3.interpolateRgb=function(t,n){t=d3.rgb(t),n=d3.rgb(n);var e=t.r,r=t.g,u=t.b,i=n.r-e,a=n.g-r,o=n.b-u;return function(t){return"#"+G(Math.round(e+i*t))+G(Math.round(r+a*t))+G(Math.round(u+o*t))}},d3.interpolateHsl=function(t,n){t=d3.hsl(t),n=d3.hsl(n);var e=t.h,r=t.s,u=t.l,i=n.h-e,a=n.s-r,o=n.l-u;return i>180?i-=360:-180>i&&(i+=360),function(t){return un(e+i*t,r+a*t,u+o*t)+""}},d3.interpolateLab=function(t,n){t=d3.lab(t),n=d3.lab(n);var e=t.l,r=t.a,u=t.b,i=n.l-e,a=n.a-r,o=n.b-u;return function(t){return fn(e+i*t,r+a*t,u+o*t)+""}},d3.interpolateHcl=function(t,n){t=d3.hcl(t),n=d3.hcl(n);var e=t.h,r=t.c,u=t.l,i=n.h-e,a=n.c-r,o=n.l-u;return i>180?i-=360:-180>i&&(i+=360),function(t){return cn(e+i*t,r+a*t,u+o*t)+""}},d3.interpolateArray=function(t,n){var e,r=[],u=[],i=t.length,a=n.length,o=Math.min(t.length,n.length);for(e=0;o>e;++e)r.push(d3.interpolate(t[e],n[e]));for(;i>e;++e)u[e]=t[e];for(;a>e;++e)u[e]=n[e];return function(t){for(e=0;o>e;++e)u[e]=r[e](t);return u}},d3.interpolateObject=function(t,n){var e,r={},u={};for(e in t)e in n?r[e]=V(e)(t[e],n[e]):u[e]=t[e];for(e in n)e in t||(u[e]=n[e]);return function(t){for(e in r)u[e]=r[e](t);return u}};var ua=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;d3.interpolators=[d3.interpolateObject,function(t,n){return n instanceof Array&&d3.interpolateArray(t,n)},function(t,n){return("string"==typeof t||"string"==typeof n)&&d3.interpolateString(t+"",n+"")},function(t,n){return("string"==typeof n?aa.has(n)||/^(#|rgb\(|hsl\()/.test(n):n instanceof B)&&d3.interpolateRgb(t,n)},function(t,n){return!isNaN(t=+t)&&!isNaN(n=+n)&&d3.interpolateNumber(t,n)}],B.prototype.toString=function(){return this.rgb()+""},d3.rgb=function(t,n,e){return 1===arguments.length?t instanceof J?$(t.r,t.g,t.b):K(""+t,$,un):$(~~t,~~n,~~e)};var ia=J.prototype=new B;ia.brighter=function(t){t=Math.pow(.7,arguments.length?t:1);var n=this.r,e=this.g,r=this.b,u=30;return n||e||r?(n&&u>n&&(n=u),e&&u>e&&(e=u),r&&u>r&&(r=u),$(Math.min(255,Math.floor(n/t)),Math.min(255,Math.floor(e/t)),Math.min(255,Math.floor(r/t)))):$(u,u,u)},ia.darker=function(t){return t=Math.pow(.7,arguments.length?t:1),$(Math.floor(t*this.r),Math.floor(t*this.g),Math.floor(t*this.b))
-},ia.hsl=function(){return W(this.r,this.g,this.b)},ia.toString=function(){return"#"+G(this.r)+G(this.g)+G(this.b)};var aa=d3.map({aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"});aa.forEach(function(t,n){aa.set(t,K(n,$,un))}),d3.hsl=function(t,n,e){return 1===arguments.length?t instanceof rn?en(t.h,t.s,t.l):K(""+t,W,en):en(+t,+n,+e)};var oa=rn.prototype=new B;oa.brighter=function(t){return t=Math.pow(.7,arguments.length?t:1),en(this.h,this.s,this.l/t)},oa.darker=function(t){return t=Math.pow(.7,arguments.length?t:1),en(this.h,this.s,t*this.l)},oa.rgb=function(){return un(this.h,this.s,this.l)},d3.hcl=function(t,n,e){return 1===arguments.length?t instanceof on?an(t.h,t.c,t.l):t instanceof sn?hn(t.l,t.a,t.b):hn((t=Q((t=d3.rgb(t)).r,t.g,t.b)).l,t.a,t.b):an(+t,+n,+e)};var ca=on.prototype=new B;ca.brighter=function(t){return an(this.h,this.c,Math.min(100,this.l+la*(arguments.length?t:1)))},ca.darker=function(t){return an(this.h,this.c,Math.max(0,this.l-la*(arguments.length?t:1)))},ca.rgb=function(){return cn(this.h,this.c,this.l).rgb()},d3.lab=function(t,n,e){return 1===arguments.length?t instanceof sn?ln(t.l,t.a,t.b):t instanceof on?cn(t.l,t.c,t.h):Q((t=d3.rgb(t)).r,t.g,t.b):ln(+t,+n,+e)};var la=18,sa=.95047,fa=1,ha=1.08883,da=sn.prototype=new B;da.brighter=function(t){return ln(Math.min(100,this.l+la*(arguments.length?t:1)),this.a,this.b)},da.darker=function(t){return ln(Math.max(0,this.l-la*(arguments.length?t:1)),this.a,this.b)},da.rgb=function(){return fn(this.l,this.a,this.b)};var ga=function(t,n){return n.querySelector(t)},pa=function(t,n){return n.querySelectorAll(t)},ma=document.documentElement,va=ma.matchesSelector||ma.webkitMatchesSelector||ma.mozMatchesSelector||ma.msMatchesSelector||ma.oMatchesSelector,ya=function(t,n){return va.call(t,n)};"function"==typeof Sizzle&&(ga=function(t,n){return Sizzle(t,n)[0]||null},pa=function(t,n){return Sizzle.uniqueSort(Sizzle(t,n))},ya=Sizzle.matchesSelector);var Ma=[];d3.selection=function(){return ba},d3.selection.prototype=Ma,Ma.select=function(t){var n,e,r,u,i=[];"function"!=typeof t&&(t=vn(t));for(var a=-1,o=this.length;o>++a;){i.push(n=[]),n.parentNode=(r=this[a]).parentNode;for(var c=-1,l=r.length;l>++c;)(u=r[c])?(n.push(e=t.call(u,u.__data__,c)),e&&"__data__"in u&&(e.__data__=u.__data__)):n.push(null)}return mn(i)},Ma.selectAll=function(t){var n,e,r=[];"function"!=typeof t&&(t=yn(t));for(var u=-1,i=this.length;i>++u;)for(var a=this[u],o=-1,c=a.length;c>++o;)(e=a[o])&&(r.push(n=Yi(t.call(e,e.__data__,o))),n.parentNode=e);return mn(r)},Ma.attr=function(t,n){if(2>arguments.length){if("string"==typeof t){var e=this.node();return t=d3.ns.qualify(t),t.local?e.getAttributeNS(t.space,t.local):e.getAttribute(t)}for(n in t)this.each(Mn(n,t[n]));return this}return this.each(Mn(t,n))},Ma.classed=function(t,n){if(2>arguments.length){if("string"==typeof t){var e=this.node(),r=(t=t.trim().split(/^|\s+/g)).length,u=-1;if(n=e.classList){for(;r>++u;)if(!n.contains(t[u]))return!1}else for(n=e.className,null!=n.baseVal&&(n=n.baseVal);r>++u;)if(!bn(t[u]).test(n))return!1;return!0}for(n in t)this.each(xn(n,t[n]));return this}return this.each(xn(t,n))},Ma.style=function(t,n,e){var r=arguments.length;if(3>r){if("string"!=typeof t){2>r&&(n="");for(e in t)this.each(wn(e,t[e],n));return this}if(2>r)return getComputedStyle(this.node(),null).getPropertyValue(t);e=""}return this.each(wn(t,n,e))},Ma.property=function(t,n){if(2>arguments.length){if("string"==typeof t)return this.node()[t];for(n in t)this.each(Sn(n,t[n]));return this}return this.each(Sn(t,n))},Ma.text=function(t){return arguments.length?this.each("function"==typeof t?function(){var n=t.apply(this,arguments);this.textContent=null==n?"":n}:null==t?function(){this.textContent=""}:function(){this.textContent=t}):this.node().textContent},Ma.html=function(t){return arguments.length?this.each("function"==typeof t?function(){var n=t.apply(this,arguments);this.innerHTML=null==n?"":n}:null==t?function(){this.innerHTML=""}:function(){this.innerHTML=t}):this.node().innerHTML},Ma.append=function(t){function n(){return this.appendChild(document.createElementNS(this.namespaceURI,t))}function e(){return this.appendChild(document.createElementNS(t.space,t.local))}return t=d3.ns.qualify(t),this.select(t.local?e:n)},Ma.insert=function(t,n){function e(){return this.insertBefore(document.createElementNS(this.namespaceURI,t),ga(n,this))}function r(){return this.insertBefore(document.createElementNS(t.space,t.local),ga(n,this))}return t=d3.ns.qualify(t),this.select(t.local?r:e)},Ma.remove=function(){return this.each(function(){var t=this.parentNode;t&&t.removeChild(this)})},Ma.data=function(t,n){function e(t,e){var r,u,a,o=t.length,f=e.length,h=Math.min(o,f),d=Math.max(o,f),g=[],p=[],m=[];if(n){var v,y=new i,M=[],b=e.length;for(r=-1;o>++r;)v=n.call(u=t[r],u.__data__,r),y.has(v)?m[b++]=u:y.set(v,u),M.push(v);for(r=-1;f>++r;)v=n.call(e,a=e[r],r),y.has(v)?(g[r]=u=y.get(v),u.__data__=a,p[r]=m[r]=null):(p[r]=kn(a),g[r]=m[r]=null),y.remove(v);for(r=-1;o>++r;)y.has(M[r])&&(m[r]=t[r])}else{for(r=-1;h>++r;)u=t[r],a=e[r],u?(u.__data__=a,g[r]=u,p[r]=m[r]=null):(p[r]=kn(a),g[r]=m[r]=null);for(;f>r;++r)p[r]=kn(e[r]),g[r]=m[r]=null;for(;d>r;++r)m[r]=t[r],p[r]=g[r]=null}p.update=g,p.parentNode=g.parentNode=m.parentNode=t.parentNode,c.push(p),l.push(g),s.push(m)}var r,u,a=-1,o=this.length;if(!arguments.length){for(t=Array(o=(r=this[0]).length);o>++a;)(u=r[a])&&(t[a]=u.__data__);return t}var c=qn([]),l=mn([]),s=mn([]);if("function"==typeof t)for(;o>++a;)e(r=this[a],t.call(r,r.parentNode.__data__,a));else for(;o>++a;)e(r=this[a],t);return l.enter=function(){return c},l.exit=function(){return s},l},Ma.datum=function(t){return arguments.length?this.property("__data__",t):this.property("__data__")},Ma.filter=function(t){var n,e,r,u=[];"function"!=typeof t&&(t=En(t));for(var i=0,a=this.length;a>i;i++){u.push(n=[]),n.parentNode=(e=this[i]).parentNode;for(var o=0,c=e.length;c>o;o++)(r=e[o])&&t.call(r,r.__data__,o)&&n.push(r)}return mn(u)},Ma.order=function(){for(var t=-1,n=this.length;n>++t;)for(var e,r=this[t],u=r.length-1,i=r[u];--u>=0;)(e=r[u])&&(i&&i!==e.nextSibling&&i.parentNode.insertBefore(e,i),i=e);return this},Ma.sort=function(t){t=An.apply(this,arguments);for(var n=-1,e=this.length;e>++n;)this[n].sort(t);return this.order()},Ma.on=function(t,n,e){var r=arguments.length;if(3>r){if("string"!=typeof t){2>r&&(n=!1);for(e in t)this.each(Nn(e,t[e],n));return this}if(2>r)return(r=this.node()["__on"+t])&&r._;e=!1}return this.each(Nn(t,n,e))},Ma.each=function(t){return Tn(this,function(n,e,r){t.call(n,n.__data__,e,r)})},Ma.call=function(t){var n=Yi(arguments);return t.apply(n[0]=this,n),this},Ma.empty=function(){return!this.node()},Ma.node=function(){for(var t=0,n=this.length;n>t;t++)for(var e=this[t],r=0,u=e.length;u>r;r++){var i=e[r];if(i)return i}return null},Ma.transition=function(){var t,n,e=_a||++Sa,r=[],u=Object.create(ka);u.time=Date.now();for(var i=-1,a=this.length;a>++i;){r.push(t=[]);for(var o=this[i],c=-1,l=o.length;l>++c;)(n=o[c])&&zn(n,c,e,u),t.push(n)}return Cn(r,e)};var ba=mn([[document]]);ba[0].parentNode=ma,d3.select=function(t){return"string"==typeof t?ba.select(t):mn([[t]])},d3.selectAll=function(t){return"string"==typeof t?ba.selectAll(t):mn([Yi(t)])};var xa=[];d3.selection.enter=qn,d3.selection.enter.prototype=xa,xa.append=Ma.append,xa.insert=Ma.insert,xa.empty=Ma.empty,xa.node=Ma.node,xa.select=function(t){for(var n,e,r,u,i,a=[],o=-1,c=this.length;c>++o;){r=(u=this[o]).update,a.push(n=[]),n.parentNode=u.parentNode;for(var l=-1,s=u.length;s>++l;)(i=u[l])?(n.push(r[l]=e=t.call(u.parentNode,i.__data__,l)),e.__data__=i.__data__):n.push(null)}return mn(a)};var _a,wa=[],Sa=0,ka={ease:T,delay:0,duration:250};wa.call=Ma.call,wa.empty=Ma.empty,wa.node=Ma.node,d3.transition=function(t){return arguments.length?_a?t.transition():t:ba.transition()},d3.transition.prototype=wa,wa.select=function(t){var n,e,r,u=this.id,i=[];"function"!=typeof t&&(t=vn(t));for(var a=-1,o=this.length;o>++a;){i.push(n=[]);for(var c=this[a],l=-1,s=c.length;s>++l;)(r=c[l])&&(e=t.call(r,r.__data__,l))?("__data__"in r&&(e.__data__=r.__data__),zn(e,l,u,r.__transition__[u]),n.push(e)):n.push(null)}return Cn(i,u)},wa.selectAll=function(t){var n,e,r,u,i,a=this.id,o=[];"function"!=typeof t&&(t=yn(t));for(var c=-1,l=this.length;l>++c;)for(var s=this[c],f=-1,h=s.length;h>++f;)if(r=s[f]){i=r.__transition__[a],e=t.call(r,r.__data__,f),o.push(n=[]);for(var d=-1,g=e.length;g>++d;)zn(u=e[d],d,a,i),n.push(u)}return Cn(o,a)},wa.filter=function(t){var n,e,r,u=[];"function"!=typeof t&&(t=En(t));for(var i=0,a=this.length;a>i;i++){u.push(n=[]);for(var e=this[i],o=0,c=e.length;c>o;o++)(r=e[o])&&t.call(r,r.__data__,o)&&n.push(r)}return Cn(u,this.id,this.time).ease(this.ease())},wa.attr=function(t,n){function e(){this.removeAttribute(i)}function r(){this.removeAttributeNS(i.space,i.local)}if(2>arguments.length){for(n in t)this.attr(n,t[n]);return this}var u=V(t),i=d3.ns.qualify(t);return Ln(this,"attr."+t,n,function(t){function n(){var n,e=this.getAttribute(i);return e!==t&&(n=u(e,t),function(t){this.setAttribute(i,n(t))})}function a(){var n,e=this.getAttributeNS(i.space,i.local);return e!==t&&(n=u(e,t),function(t){this.setAttributeNS(i.space,i.local,n(t))})}return null==t?i.local?r:e:(t+="",i.local?a:n)})},wa.attrTween=function(t,n){function e(t,e){var r=n.call(this,t,e,this.getAttribute(u));return r&&function(t){this.setAttribute(u,r(t))}}function r(t,e){var r=n.call(this,t,e,this.getAttributeNS(u.space,u.local));return r&&function(t){this.setAttributeNS(u.space,u.local,r(t))}}var u=d3.ns.qualify(t);return this.tween("attr."+t,u.local?r:e)},wa.style=function(t,n,e){function r(){this.style.removeProperty(t)}var u=arguments.length;if(3>u){if("string"!=typeof t){2>u&&(n="");for(e in t)this.style(e,t[e],n);return this}e=""}var i=V(t);return Ln(this,"style."+t,n,function(n){function u(){var r,u=getComputedStyle(this,null).getPropertyValue(t);return u!==n&&(r=i(u,n),function(n){this.style.setProperty(t,r(n),e)})}return null==n?r:(n+="",u)})},wa.styleTween=function(t,n,e){return 3>arguments.length&&(e=""),this.tween("style."+t,function(r,u){var i=n.call(this,r,u,getComputedStyle(this,null).getPropertyValue(t));return i&&function(n){this.style.setProperty(t,i(n),e)}})},wa.text=function(t){return Ln(this,"text",t,Dn)},wa.remove=function(){return this.each("end.transition",function(){var t;!this.__transition__&&(t=this.parentNode)&&t.removeChild(this)})},wa.ease=function(t){var n=this.id;return 1>arguments.length?this.node().__transition__[n].ease:("function"!=typeof t&&(t=d3.ease.apply(d3,arguments)),Tn(this,function(e){e.__transition__[n].ease=t}))},wa.delay=function(t){var n=this.id;return Tn(this,"function"==typeof t?function(e,r,u){e.__transition__[n].delay=0|t.call(e,e.__data__,r,u)}:(t|=0,function(e){e.__transition__[n].delay=t}))},wa.duration=function(t){var n=this.id;return Tn(this,"function"==typeof t?function(e,r,u){e.__transition__[n].duration=Math.max(1,0|t.call(e,e.__data__,r,u))}:(t=Math.max(1,0|t),function(e){e.__transition__[n].duration=t}))},wa.each=function(t,n){var e=this.id;if(2>arguments.length){var r=ka,u=_a;_a=e,Tn(this,function(n,r,u){ka=n.__transition__[e],t.call(n,n.__data__,r,u)}),ka=r,_a=u}else Tn(this,function(r){r.__transition__[e].event.on(t,n)});return this},wa.transition=function(){for(var t,n,e,r,u=this.id,i=++Sa,a=[],o=0,c=this.length;c>o;o++){a.push(t=[]);for(var n=this[o],l=0,s=n.length;s>l;l++)(e=n[l])&&(r=Object.create(e.__transition__[u]),r.delay+=r.duration,zn(e,l,i,r)),t.push(e)}return Cn(a,i)},wa.tween=function(t,n){var e=this.id;return 2>arguments.length?this.node().__transition__[e].tween.get(t):Tn(this,null==n?function(n){n.__transition__[e].tween.remove(t)}:function(r){r.__transition__[e].tween.set(t,n)})};var Ea,Aa,Na=0,Ta={},qa=null;d3.timer=function(t,n,e){if(3>arguments.length){if(2>arguments.length)n=0;else if(!isFinite(n))return;e=Date.now()}var r=Ta[t.id];r&&r.callback===t?(r.then=e,r.delay=n):Ta[t.id=++Na]=qa={callback:t,then:e,delay:n,next:qa},Ea||(Aa=clearTimeout(Aa),Ea=1,Ca(Fn))},d3.timer.flush=function(){for(var t,n=Date.now(),e=qa;e;)t=n-e.then,e.delay||(e.flush=e.callback(t)),e=e.next;Hn()};var Ca=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){setTimeout(t,17)};d3.mouse=function(t){return Rn(t,P())};var za=/WebKit/.test(navigator.userAgent)?-1:0;d3.touches=function(t,n){return 2>arguments.length&&(n=P().touches),n?Yi(n).map(function(n){var e=Rn(t,n);return e.identifier=n.identifier,e}):[]},d3.scale={},d3.scale.linear=function(){return In([0,1],[0,1],d3.interpolate,!1)},d3.scale.log=function(){return Kn(d3.scale.linear(),Wn)};var Da=d3.format(".0e");Wn.pow=function(t){return Math.pow(10,t)},Qn.pow=function(t){return-Math.pow(10,-t)},d3.scale.pow=function(){return te(d3.scale.linear(),1)},d3.scale.sqrt=function(){return d3.scale.pow().exponent(.5)},d3.scale.ordinal=function(){return ee([],{t:"range",a:[[]]})},d3.scale.category10=function(){return d3.scale.ordinal().range(La)},d3.scale.category20=function(){return d3.scale.ordinal().range(Fa)},d3.scale.category20b=function(){return d3.scale.ordinal().range(Ha)},d3.scale.category20c=function(){return d3.scale.ordinal().range(Ra)};var La=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],Fa=["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"],Ha=["#393b79","#5254a3","#6b6ecf","#9c9ede","#637939","#8ca252","#b5cf6b","#cedb9c","#8c6d31","#bd9e39","#e7ba52","#e7cb94","#843c39","#ad494a","#d6616b","#e7969c","#7b4173","#a55194","#ce6dbd","#de9ed6"],Ra=["#3182bd","#6baed6","#9ecae1","#c6dbef","#e6550d","#fd8d3c","#fdae6b","#fdd0a2","#31a354","#74c476","#a1d99b","#c7e9c0","#756bb1","#9e9ac8","#bcbddc","#dadaeb","#636363","#969696","#bdbdbd","#d9d9d9"];d3.scale.quantile=function(){return re([],[])},d3.scale.quantize=function(){return ue(0,1,[0,1])},d3.scale.threshold=function(){return ie([.5],[0,1])},d3.scale.identity=function(){return ae([0,1])},d3.svg={},d3.svg.arc=function(){function t(){var t=n.apply(this,arguments),i=e.apply(this,arguments),a=r.apply(this,arguments)+Pa,o=u.apply(this,arguments)+Pa,c=(a>o&&(c=a,a=o,o=c),o-a),l=Ri>c?"0":"1",s=Math.cos(a),f=Math.sin(a),h=Math.cos(o),d=Math.sin(o);return c>=ja?t?"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"M0,"+t+"A"+t+","+t+" 0 1,0 0,"+-t+"A"+t+","+t+" 0 1,0 0,"+t+"Z":"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"Z":t?"M"+i*s+","+i*f+"A"+i+","+i+" 0 "+l+",1 "+i*h+","+i*d+"L"+t*h+","+t*d+"A"+t+","+t+" 0 "+l+",0 "+t*s+","+t*f+"Z":"M"+i*s+","+i*f+"A"+i+","+i+" 0 "+l+",1 "+i*h+","+i*d+"L0,0"+"Z"}var n=oe,e=ce,r=le,u=se;return t.innerRadius=function(e){return arguments.length?(n=c(e),t):n},t.outerRadius=function(n){return arguments.length?(e=c(n),t):e},t.startAngle=function(n){return arguments.length?(r=c(n),t):r},t.endAngle=function(n){return arguments.length?(u=c(n),t):u},t.centroid=function(){var t=(n.apply(this,arguments)+e.apply(this,arguments))/2,i=(r.apply(this,arguments)+u.apply(this,arguments))/2+Pa;return[Math.cos(i)*t,Math.sin(i)*t]},t};var Pa=-Ri/2,ja=2*Ri-1e-6;d3.svg.line=function(){return fe(a)};var Oa=d3.map({linear:ge,"linear-closed":pe,"step-before":me,"step-after":ve,basis:we,"basis-open":Se,"basis-closed":ke,bundle:Ee,cardinal:be,"cardinal-open":ye,"cardinal-closed":Me,monotone:ze});Oa.forEach(function(t,n){n.key=t,n.closed=/-closed$/.test(t)});var Ya=[0,2/3,1/3,0],Ua=[0,1/3,2/3,0],Ia=[0,1/6,2/3,1/6];d3.svg.line.radial=function(){var t=fe(De);return t.radius=t.x,delete t.x,t.angle=t.y,delete t.y,t},me.reverse=ve,ve.reverse=me,d3.svg.area=function(){return Le(a)},d3.svg.area.radial=function(){var t=Le(De);return t.radius=t.x,delete t.x,t.innerRadius=t.x0,delete t.x0,t.outerRadius=t.x1,delete t.x1,t.angle=t.y,delete t.y,t.startAngle=t.y0,delete t.y0,t.endAngle=t.y1,delete t.y1,t},d3.svg.chord=function(){function e(t,n){var e=r(this,o,t,n),c=r(this,l,t,n);return"M"+e.p0+i(e.r,e.p1,e.a1-e.a0)+(u(e,c)?a(e.r,e.p1,e.r,e.p0):a(e.r,e.p1,c.r,c.p0)+i(c.r,c.p1,c.a1-c.a0)+a(c.r,c.p1,e.r,e.p0))+"Z"}function r(t,n,e,r){var u=n.call(t,e,r),i=s.call(t,u,r),a=f.call(t,u,r)+Pa,o=h.call(t,u,r)+Pa;return{r:i,a0:a,a1:o,p0:[i*Math.cos(a),i*Math.sin(a)],p1:[i*Math.cos(o),i*Math.sin(o)]}}function u(t,n){return t.a0==n.a0&&t.a1==n.a1}function i(t,n,e){return"A"+t+","+t+" 0 "+ +(e>Ri)+",1 "+n}function a(t,n,e,r){return"Q 0,0 "+r}var o=n,l=t,s=Fe,f=le,h=se;return e.radius=function(t){return arguments.length?(s=c(t),e):s},e.source=function(t){return arguments.length?(o=c(t),e):o},e.target=function(t){return arguments.length?(l=c(t),e):l},e.startAngle=function(t){return arguments.length?(f=c(t),e):f},e.endAngle=function(t){return arguments.length?(h=c(t),e):h},e},d3.svg.diagonal=function(){function e(t,n){var e=r.call(this,t,n),a=u.call(this,t,n),o=(e.y+a.y)/2,c=[e,{x:e.x,y:o},{x:a.x,y:o},a];return c=c.map(i),"M"+c[0]+"C"+c[1]+" "+c[2]+" "+c[3]}var r=n,u=t,i=He;return e.source=function(t){return arguments.length?(r=c(t),e):r},e.target=function(t){return arguments.length?(u=c(t),e):u},e.projection=function(t){return arguments.length?(i=t,e):i},e},d3.svg.diagonal.radial=function(){var t=d3.svg.diagonal(),n=He,e=t.projection;return t.projection=function(t){return arguments.length?e(Re(n=t)):n},t},d3.svg.symbol=function(){function t(t,r){return(Va.get(n.call(this,t,r))||Oe)(e.call(this,t,r))}var n=je,e=Pe;return t.type=function(e){return arguments.length?(n=c(e),t):n},t.size=function(n){return arguments.length?(e=c(n),t):e},t};var Va=d3.map({circle:Oe,cross:function(t){var n=Math.sqrt(t/5)/2;return"M"+-3*n+","+-n+"H"+-n+"V"+-3*n+"H"+n+"V"+-n+"H"+3*n+"V"+n+"H"+n+"V"+3*n+"H"+-n+"V"+n+"H"+-3*n+"Z"},diamond:function(t){var n=Math.sqrt(t/(2*Za)),e=n*Za;return"M0,"+-n+"L"+e+",0"+" 0,"+n+" "+-e+",0"+"Z"},square:function(t){var n=Math.sqrt(t)/2;return"M"+-n+","+-n+"L"+n+","+-n+" "+n+","+n+" "+-n+","+n+"Z"},"triangle-down":function(t){var n=Math.sqrt(t/Xa),e=n*Xa/2;return"M0,"+e+"L"+n+","+-e+" "+-n+","+-e+"Z"},"triangle-up":function(t){var n=Math.sqrt(t/Xa),e=n*Xa/2;return"M0,"+-e+"L"+n+","+e+" "+-n+","+e+"Z"}});d3.svg.symbolTypes=Va.keys();var Xa=Math.sqrt(3),Za=Math.tan(30*ji);d3.svg.axis=function(){function t(t){t.each(function(){var t,f=d3.select(this),h=null==l?e.ticks?e.ticks.apply(e,c):e.domain():l,d=null==n?e.tickFormat?e.tickFormat.apply(e,c):String:n,g=Ie(e,h,s),p=f.selectAll(".minor").data(g,String),m=p.enter().insert("line","g").attr("class","tick minor").style("opacity",1e-6),v=d3.transition(p.exit()).style("opacity",1e-6).remove(),y=d3.transition(p).style("opacity",1),M=f.selectAll("g").data(h,String),b=M.enter().insert("g","path").style("opacity",1e-6),x=d3.transition(M.exit()).style("opacity",1e-6).remove(),_=d3.transition(M).style("opacity",1),w=On(e),S=f.selectAll(".domain").data([0]),k=d3.transition(S),E=e.copy(),A=this.__chart__||E;this.__chart__=E,S.enter().append("path").attr("class","domain"),b.append("line").attr("class","tick"),b.append("text");var N=b.select("line"),T=_.select("line"),q=M.select("text").text(d),C=b.select("text"),z=_.select("text");switch(r){case"bottom":t=Ye,m.attr("y2",i),y.attr("x2",0).attr("y2",i),N.attr("y2",u),C.attr("y",Math.max(u,0)+o),T.attr("x2",0).attr("y2",u),z.attr("x",0).attr("y",Math.max(u,0)+o),q.attr("dy",".71em").style("text-anchor","middle"),k.attr("d","M"+w[0]+","+a+"V0H"+w[1]+"V"+a);break;case"top":t=Ye,m.attr("y2",-i),y.attr("x2",0).attr("y2",-i),N.attr("y2",-u),C.attr("y",-(Math.max(u,0)+o)),T.attr("x2",0).attr("y2",-u),z.attr("x",0).attr("y",-(Math.max(u,0)+o)),q.attr("dy","0em").style("text-anchor","middle"),k.attr("d","M"+w[0]+","+-a+"V0H"+w[1]+"V"+-a);break;case"left":t=Ue,m.attr("x2",-i),y.attr("x2",-i).attr("y2",0),N.attr("x2",-u),C.attr("x",-(Math.max(u,0)+o)),T.attr("x2",-u).attr("y2",0),z.attr("x",-(Math.max(u,0)+o)).attr("y",0),q.attr("dy",".32em").style("text-anchor","end"),k.attr("d","M"+-a+","+w[0]+"H0V"+w[1]+"H"+-a);break;case"right":t=Ue,m.attr("x2",i),y.attr("x2",i).attr("y2",0),N.attr("x2",u),C.attr("x",Math.max(u,0)+o),T.attr("x2",u).attr("y2",0),z.attr("x",Math.max(u,0)+o).attr("y",0),q.attr("dy",".32em").style("text-anchor","start"),k.attr("d","M"+a+","+w[0]+"H0V"+w[1]+"H"+a)}if(e.ticks)b.call(t,A),_.call(t,E),x.call(t,E),m.call(t,A),y.call(t,E),v.call(t,E);else{var D=E.rangeBand()/2,L=function(t){return E(t)+D};b.call(t,L),_.call(t,L)}})}var n,e=d3.scale.linear(),r="bottom",u=6,i=6,a=6,o=3,c=[10],l=null,s=0;return t.scale=function(n){return arguments.length?(e=n,t):e},t.orient=function(n){return arguments.length?(r=n,t):r},t.ticks=function(){return arguments.length?(c=arguments,t):c},t.tickValues=function(n){return arguments.length?(l=n,t):l},t.tickFormat=function(e){return arguments.length?(n=e,t):n},t.tickSize=function(n,e){if(!arguments.length)return u;var r=arguments.length-1;return u=+n,i=r>1?+e:u,a=r>0?+arguments[r]:u,t},t.tickPadding=function(n){return arguments.length?(o=+n,t):o},t.tickSubdivide=function(n){return arguments.length?(s=+n,t):s},t},d3.svg.brush=function(){function t(i){i.each(function(){var i,a=d3.select(this),s=a.selectAll(".background").data([0]),f=a.selectAll(".extent").data([0]),h=a.selectAll(".resize").data(l,String);a.style("pointer-events","all").on("mousedown.brush",u).on("touchstart.brush",u),s.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),f.enter().append("rect").attr("class","extent").style("cursor","move"),h.enter().append("g").attr("class",function(t){return"resize "+t}).style("cursor",function(t){return Ba[t]}).append("rect").attr("x",function(t){return/[ew]$/.test(t)?-3:null}).attr("y",function(t){return/^[ns]/.test(t)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),h.style("display",t.empty()?"none":null),h.exit().remove(),o&&(i=On(o),s.attr("x",i[0]).attr("width",i[1]-i[0]),e(a)),c&&(i=On(c),s.attr("y",i[0]).attr("height",i[1]-i[0]),r(a)),n(a)})}function n(t){t.selectAll(".resize").attr("transform",function(t){return"translate("+s[+/e$/.test(t)][0]+","+s[+/^s/.test(t)][1]+")"})}function e(t){t.select(".extent").attr("x",s[0][0]),t.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1][0]-s[0][0])}function r(t){t.select(".extent").attr("y",s[0][1]),t.selectAll(".extent,.e>rect,.w>rect").attr("height",s[1][1]-s[0][1])}function u(){function u(){var t=d3.event.changedTouches;return t?d3.touches(v,t)[0]:d3.mouse(v)}function l(){32==d3.event.keyCode&&(S||(p=null,k[0]-=s[1][0],k[1]-=s[1][1],S=2),R())}function f(){32==d3.event.keyCode&&2==S&&(k[0]+=s[1][0],k[1]+=s[1][1],S=0,R())}function h(){var t=u(),i=!1;m&&(t[0]+=m[0],t[1]+=m[1]),S||(d3.event.altKey?(p||(p=[(s[0][0]+s[1][0])/2,(s[0][1]+s[1][1])/2]),k[0]=s[+(t[0]<p[0])][0],k[1]=s[+(t[1]<p[1])][1]):p=null),_&&d(t,o,0)&&(e(b),i=!0),w&&d(t,c,1)&&(r(b),i=!0),i&&(n(b),M({type:"brush",mode:S?"move":"resize"}))}function d(t,n,e){var r,u,a=On(n),o=a[0],c=a[1],l=k[e],f=s[1][e]-s[0][e];return S&&(o-=l,c-=f+l),r=Math.max(o,Math.min(c,t[e])),S?u=(r+=l)+f:(p&&(l=Math.max(o,Math.min(c,2*p[e]-r))),r>l?(u=r,r=l):u=l),s[0][e]!==r||s[1][e]!==u?(i=null,s[0][e]=r,s[1][e]=u,!0):void 0}function g(){h(),b.style("pointer-events","all").selectAll(".resize").style("display",t.empty()?"none":null),d3.select("body").style("cursor",null),E.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),M({type:"brushend"}),R()}var p,m,v=this,y=d3.select(d3.event.target),M=a.of(v,arguments),b=d3.select(v),x=y.datum(),_=!/^(n|s)$/.test(x)&&o,w=!/^(e|w)$/.test(x)&&c,S=y.classed("extent"),k=u(),E=d3.select(window).on("mousemove.brush",h).on("mouseup.brush",g).on("touchmove.brush",h).on("touchend.brush",g).on("keydown.brush",l).on("keyup.brush",f);if(S)k[0]=s[0][0]-k[0],k[1]=s[0][1]-k[1];else if(x){var A=+/w$/.test(x),N=+/^n/.test(x);m=[s[1-A][0]-k[0],s[1-N][1]-k[1]],k[0]=s[A][0],k[1]=s[N][1]}else d3.event.altKey&&(p=k.slice());b.style("pointer-events","none").selectAll(".resize").style("display",null),d3.select("body").style("cursor",y.style("cursor")),M({type:"brushstart"}),h(),R()}var i,a=j(t,"brushstart","brush","brushend"),o=null,c=null,l=$a[0],s=[[0,0],[0,0]];return t.x=function(n){return arguments.length?(o=n,l=$a[!o<<1|!c],t):o},t.y=function(n){return arguments.length?(c=n,l=$a[!o<<1|!c],t):c},t.extent=function(n){var e,r,u,a,l;return arguments.length?(i=[[0,0],[0,0]],o&&(e=n[0],r=n[1],c&&(e=e[0],r=r[0]),i[0][0]=e,i[1][0]=r,o.invert&&(e=o(e),r=o(r)),e>r&&(l=e,e=r,r=l),s[0][0]=0|e,s[1][0]=0|r),c&&(u=n[0],a=n[1],o&&(u=u[1],a=a[1]),i[0][1]=u,i[1][1]=a,c.invert&&(u=c(u),a=c(a)),u>a&&(l=u,u=a,a=l),s[0][1]=0|u,s[1][1]=0|a),t):(n=i||s,o&&(e=n[0][0],r=n[1][0],i||(e=s[0][0],r=s[1][0],o.invert&&(e=o.invert(e),r=o.invert(r)),e>r&&(l=e,e=r,r=l))),c&&(u=n[0][1],a=n[1][1],i||(u=s[0][1],a=s[1][1],c.invert&&(u=c.invert(u),a=c.invert(a)),u>a&&(l=u,u=a,a=l))),o&&c?[[e,u],[r,a]]:o?[e,r]:c&&[u,a])},t.clear=function(){return i=null,s[0][0]=s[0][1]=s[1][0]=s[1][1]=0,t},t.empty=function(){return o&&s[0][0]===s[1][0]||c&&s[0][1]===s[1][1]},d3.rebind(t,a,"on")};var Ba={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},$a=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]];d3.behavior={},d3.behavior.drag=function(){function t(){this.on("mousedown.drag",n).on("touchstart.drag",n)}function n(){function t(){var t=o.parentNode;return null!=s?d3.touches(t).filter(function(t){return t.identifier===s})[0]:d3.mouse(t)}function n(){if(!o.parentNode)return u();var n=t(),e=n[0]-f[0],r=n[1]-f[1];h|=e|r,f=n,R(),c({type:"drag",x:n[0]+a[0],y:n[1]+a[1],dx:e,dy:r})}function u(){c({type:"dragend"}),h&&(R(),d3.event.target===l&&d.on("click.drag",i,!0)),d.on(null!=s?"touchmove.drag-"+s:"mousemove.drag",null).on(null!=s?"touchend.drag-"+s:"mouseup.drag",null)}function i(){R(),d.on("click.drag",null)}var a,o=this,c=e.of(o,arguments),l=d3.event.target,s=d3.event.touches?d3.event.changedTouches[0].identifier:null,f=t(),h=0,d=d3.select(window).on(null!=s?"touchmove.drag-"+s:"mousemove.drag",n).on(null!=s?"touchend.drag-"+s:"mouseup.drag",u,!0);r?(a=r.apply(o,arguments),a=[a.x-f[0],a.y-f[1]]):a=[0,0],null==s&&R(),c({type:"dragstart"})}var e=j(t,"drag","dragstart","dragend"),r=null;return t.origin=function(n){return arguments.length?(r=n,t):r},d3.rebind(t,e,"on")},d3.behavior.zoom=function(){function t(){this.on("mousedown.zoom",o).on("mousewheel.zoom",c).on("mousemove.zoom",l).on("DOMMouseScroll.zoom",c).on("dblclick.zoom",s).on("touchstart.zoom",f).on("touchmove.zoom",h).on("touchend.zoom",f)}function n(t){return[(t[0]-b[0])/x,(t[1]-b[1])/x]}function e(t){return[t[0]*x+b[0],t[1]*x+b[1]]}function r(t){x=Math.max(_[0],Math.min(_[1],t))}function u(t,n){n=e(n),b[0]+=t[0]-n[0],b[1]+=t[1]-n[1]}function i(){m&&m.domain(p.range().map(function(t){return(t-b[0])/x}).map(p.invert)),y&&y.domain(v.range().map(function(t){return(t-b[1])/x}).map(v.invert))}function a(t){i(),d3.event.preventDefault(),t({type:"zoom",scale:x,translate:b})}function o(){function t(){l=1,u(d3.mouse(i),f),a(o)}function e(){l&&R(),s.on("mousemove.zoom",null).on("mouseup.zoom",null),l&&d3.event.target===c&&s.on("click.zoom",r,!0)}function r(){R(),s.on("click.zoom",null)}var i=this,o=w.of(i,arguments),c=d3.event.target,l=0,s=d3.select(window).on("mousemove.zoom",t).on("mouseup.zoom",e),f=n(d3.mouse(i));window.focus(),R()}function c(){d||(d=n(d3.mouse(this))),r(Math.pow(2,.002*Ve())*x),u(d3.mouse(this),d),a(w.of(this,arguments))}function l(){d=null}function s(){var t=d3.mouse(this),e=n(t),i=Math.log(x)/Math.LN2;r(Math.pow(2,d3.event.shiftKey?Math.ceil(i)-1:Math.floor(i)+1)),u(t,e),a(w.of(this,arguments))}function f(){var t=d3.touches(this),e=Date.now();if(g=x,d={},t.forEach(function(t){d[t.identifier]=n(t)}),R(),1===t.length){if(500>e-M){var i=t[0],o=n(t[0]);r(2*x),u(i,o),a(w.of(this,arguments))}M=e}}function h(){var t=d3.touches(this),n=t[0],e=d[n.identifier];if(i=t[1]){var i,o=d[i.identifier];n=[(n[0]+i[0])/2,(n[1]+i[1])/2],e=[(e[0]+o[0])/2,(e[1]+o[1])/2],r(d3.event.scale*g)}u(n,e),M=null,a(w.of(this,arguments))}var d,g,p,m,v,y,M,b=[0,0],x=1,_=Ga,w=j(t,"zoom");return t.translate=function(n){return arguments.length?(b=n.map(Number),i(),t):b},t.scale=function(n){return arguments.length?(x=+n,i(),t):x},t.scaleExtent=function(n){return arguments.length?(_=null==n?Ga:n.map(Number),t):_},t.x=function(n){return arguments.length?(m=n,p=n.copy(),b=[0,0],x=1,t):m},t.y=function(n){return arguments.length?(y=n,v=n.copy(),b=[0,0],x=1,t):y},d3.rebind(t,w,"on")};var Ja,Ga=[0,1/0];d3.layout={},d3.layout.bundle=function(){return function(t){for(var n=[],e=-1,r=t.length;r>++e;)n.push(Xe(t[e]));return n}},d3.layout.chord=function(){function t(){var t,l,f,h,d,g={},p=[],m=d3.range(i),v=[];for(e=[],r=[],t=0,h=-1;i>++h;){for(l=0,d=-1;i>++d;)l+=u[h][d];p.push(l),v.push(d3.range(i)),t+=l}for(a&&m.sort(function(t,n){return a(p[t],p[n])
-}),o&&v.forEach(function(t,n){t.sort(function(t,e){return o(u[n][t],u[n][e])})}),t=(2*Ri-s*i)/t,l=0,h=-1;i>++h;){for(f=l,d=-1;i>++d;){var y=m[h],M=v[y][d],b=u[y][M],x=l,_=l+=b*t;g[y+"-"+M]={index:y,subindex:M,startAngle:x,endAngle:_,value:b}}r[y]={index:y,startAngle:f,endAngle:l,value:(l-f)/t},l+=s}for(h=-1;i>++h;)for(d=h-1;i>++d;){var w=g[h+"-"+d],S=g[d+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}c&&n()}function n(){e.sort(function(t,n){return c((t.source.value+t.target.value)/2,(n.source.value+n.target.value)/2)})}var e,r,u,i,a,o,c,l={},s=0;return l.matrix=function(t){return arguments.length?(i=(u=t)&&u.length,e=r=null,l):u},l.padding=function(t){return arguments.length?(s=t,e=r=null,l):s},l.sortGroups=function(t){return arguments.length?(a=t,e=r=null,l):a},l.sortSubgroups=function(t){return arguments.length?(o=t,e=null,l):o},l.sortChords=function(t){return arguments.length?(c=t,e&&n(),l):c},l.chords=function(){return e||t(),e},l.groups=function(){return r||t(),r},l},d3.layout.force=function(){function t(t){return function(n,e,r,u){if(n.point!==t){var i=n.cx-t.x,a=n.cy-t.y,o=1/Math.sqrt(i*i+a*a);if(v>(u-e)*o){var c=n.charge*o*o;return t.px-=i*c,t.py-=a*c,!0}if(n.point&&isFinite(o)){var c=n.pointCharge*o*o;t.px-=i*c,t.py-=a*c}}return!n.charge}}function n(t){t.px=d3.event.x,t.py=d3.event.y,l.resume()}var e,r,u,i,o,l={},s=d3.dispatch("start","tick","end"),f=[1,1],h=.9,d=Qe,g=tr,p=-30,m=.1,v=.8,y=[],M=[];return l.tick=function(){if(.005>(r*=.99))return s.end({type:"end",alpha:r=0}),!0;var n,e,a,c,l,d,g,v,b,x=y.length,_=M.length;for(e=0;_>e;++e)a=M[e],c=a.source,l=a.target,v=l.x-c.x,b=l.y-c.y,(d=v*v+b*b)&&(d=r*i[e]*((d=Math.sqrt(d))-u[e])/d,v*=d,b*=d,l.x-=v*(g=c.weight/(l.weight+c.weight)),l.y-=b*g,c.x+=v*(g=1-g),c.y+=b*g);if((g=r*m)&&(v=f[0]/2,b=f[1]/2,e=-1,g))for(;x>++e;)a=y[e],a.x+=(v-a.x)*g,a.y+=(b-a.y)*g;if(p)for(We(n=d3.geom.quadtree(y),r,o),e=-1;x>++e;)(a=y[e]).fixed||n.visit(t(a));for(e=-1;x>++e;)a=y[e],a.fixed?(a.x=a.px,a.y=a.py):(a.x-=(a.px-(a.px=a.x))*h,a.y-=(a.py-(a.py=a.y))*h);s.tick({type:"tick",alpha:r})},l.nodes=function(t){return arguments.length?(y=t,l):y},l.links=function(t){return arguments.length?(M=t,l):M},l.size=function(t){return arguments.length?(f=t,l):f},l.linkDistance=function(t){return arguments.length?(d=c(t),l):d},l.distance=l.linkDistance,l.linkStrength=function(t){return arguments.length?(g=c(t),l):g},l.friction=function(t){return arguments.length?(h=t,l):h},l.charge=function(t){return arguments.length?(p="function"==typeof t?t:+t,l):p},l.gravity=function(t){return arguments.length?(m=t,l):m},l.theta=function(t){return arguments.length?(v=t,l):v},l.alpha=function(t){return arguments.length?(r?r=t>0?t:0:t>0&&(s.start({type:"start",alpha:r=t}),d3.timer(l.tick)),l):r},l.start=function(){function t(t,r){for(var u,i=n(e),a=-1,o=i.length;o>++a;)if(!isNaN(u=i[a][t]))return u;return Math.random()*r}function n(){if(!a){for(a=[],r=0;s>r;++r)a[r]=[];for(r=0;h>r;++r){var t=M[r];a[t.source.index].push(t.target),a[t.target.index].push(t.source)}}return a[e]}var e,r,a,c,s=y.length,h=M.length,m=f[0],v=f[1];for(e=0;s>e;++e)(c=y[e]).index=e,c.weight=0;for(u=[],i=[],e=0;h>e;++e)c=M[e],"number"==typeof c.source&&(c.source=y[c.source]),"number"==typeof c.target&&(c.target=y[c.target]),u[e]=d.call(this,c,e),i[e]=g.call(this,c,e),++c.source.weight,++c.target.weight;for(e=0;s>e;++e)c=y[e],isNaN(c.x)&&(c.x=t("x",m)),isNaN(c.y)&&(c.y=t("y",v)),isNaN(c.px)&&(c.px=c.x),isNaN(c.py)&&(c.py=c.y);if(o=[],"function"==typeof p)for(e=0;s>e;++e)o[e]=+p.call(this,y[e],e);else for(e=0;s>e;++e)o[e]=p;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){e||(e=d3.behavior.drag().origin(a).on("dragstart",$e).on("drag",n).on("dragend",Je)),this.on("mouseover.force",Ge).on("mouseout.force",Ke).call(e)},d3.rebind(l,s,"on")},d3.layout.partition=function(){function t(n,e,r,u){var i=n.children;if(n.x=e,n.y=n.depth*u,n.dx=r,n.dy=u,i&&(a=i.length)){var a,o,c,l=-1;for(r=n.value?r/n.value:0;a>++l;)t(o=i[l],e,c=o.value*r,u),e+=c}}function n(t){var e=t.children,r=0;if(e&&(u=e.length))for(var u,i=-1;u>++i;)r=Math.max(r,n(e[i]));return 1+r}function e(e,i){var a=r.call(this,e,i);return t(a[0],0,u[0],u[1]/n(a[0])),a}var r=d3.layout.hierarchy(),u=[1,1];return e.size=function(t){return arguments.length?(u=t,e):u},hr(e,r)},d3.layout.pie=function(){function t(i){var a=i.map(function(e,r){return+n.call(t,e,r)}),o=+("function"==typeof r?r.apply(this,arguments):r),c=(("function"==typeof u?u.apply(this,arguments):u)-r)/d3.sum(a),l=d3.range(i.length);null!=e&&l.sort(e===Ka?function(t,n){return a[n]-a[t]}:function(t,n){return e(i[t],i[n])});var s=[];return l.forEach(function(t){var n;s[t]={data:i[t],value:n=a[t],startAngle:o,endAngle:o+=n*c}}),s}var n=Number,e=Ka,r=0,u=2*Ri;return t.value=function(e){return arguments.length?(n=e,t):n},t.sort=function(n){return arguments.length?(e=n,t):e},t.startAngle=function(n){return arguments.length?(r=n,t):r},t.endAngle=function(n){return arguments.length?(u=n,t):u},t};var Ka={};d3.layout.stack=function(){function t(a,c){var l=a.map(function(e,r){return n.call(t,e,r)}),s=l.map(function(n){return n.map(function(n,e){return[i.call(t,n,e),o.call(t,n,e)]})}),f=e.call(t,s,c);l=d3.permute(l,f),s=d3.permute(s,f);var h,d,g,p=r.call(t,s,c),m=l.length,v=l[0].length;for(d=0;v>d;++d)for(u.call(t,l[0][d],g=p[d],s[0][d][1]),h=1;m>h;++h)u.call(t,l[h][d],g+=s[h-1][d][1],s[h][d][1]);return a}var n=a,e=ur,r=ir,u=rr,i=nr,o=er;return t.values=function(e){return arguments.length?(n=e,t):n},t.order=function(n){return arguments.length?(e="function"==typeof n?n:Wa.get(n)||ur,t):e},t.offset=function(n){return arguments.length?(r="function"==typeof n?n:Qa.get(n)||ir,t):r},t.x=function(n){return arguments.length?(i=n,t):i},t.y=function(n){return arguments.length?(o=n,t):o},t.out=function(n){return arguments.length?(u=n,t):u},t};var Wa=d3.map({"inside-out":function(t){var n,e,r=t.length,u=t.map(ar),i=t.map(or),a=d3.range(r).sort(function(t,n){return u[t]-u[n]}),o=0,c=0,l=[],s=[];for(n=0;r>n;++n)e=a[n],c>o?(o+=i[e],l.push(e)):(c+=i[e],s.push(e));return s.reverse().concat(l)},reverse:function(t){return d3.range(t.length).reverse()},"default":ur}),Qa=d3.map({silhouette:function(t){var n,e,r,u=t.length,i=t[0].length,a=[],o=0,c=[];for(e=0;i>e;++e){for(n=0,r=0;u>n;n++)r+=t[n][e][1];r>o&&(o=r),a.push(r)}for(e=0;i>e;++e)c[e]=(o-a[e])/2;return c},wiggle:function(t){var n,e,r,u,i,a,o,c,l,s=t.length,f=t[0],h=f.length,d=[];for(d[0]=c=l=0,e=1;h>e;++e){for(n=0,u=0;s>n;++n)u+=t[n][e][1];for(n=0,i=0,o=f[e][0]-f[e-1][0];s>n;++n){for(r=0,a=(t[n][e][1]-t[n][e-1][1])/(2*o);n>r;++r)a+=(t[r][e][1]-t[r][e-1][1])/o;i+=a*t[n][e][1]}d[e]=c-=u?i/u*o:0,l>c&&(l=c)}for(e=0;h>e;++e)d[e]-=l;return d},expand:function(t){var n,e,r,u=t.length,i=t[0].length,a=1/u,o=[];for(e=0;i>e;++e){for(n=0,r=0;u>n;n++)r+=t[n][e][1];if(r)for(n=0;u>n;n++)t[n][e][1]/=r;else for(n=0;u>n;n++)t[n][e][1]=a}for(e=0;i>e;++e)o[e]=0;return o},zero:ir});d3.layout.histogram=function(){function t(t,i){for(var a,o,c=[],l=t.map(e,this),s=r.call(this,l,i),f=u.call(this,s,l,i),i=-1,h=l.length,d=f.length-1,g=n?1:1/h;d>++i;)a=c[i]=[],a.dx=f[i+1]-(a.x=f[i]),a.y=0;if(d>0)for(i=-1;h>++i;)o=l[i],o>=s[0]&&s[1]>=o&&(a=c[d3.bisect(f,o,1,d)-1],a.y+=g,a.push(t[i]));return c}var n=!0,e=Number,r=fr,u=lr;return t.value=function(n){return arguments.length?(e=n,t):e},t.range=function(n){return arguments.length?(r=c(n),t):r},t.bins=function(n){return arguments.length?(u="number"==typeof n?function(t){return sr(t,n)}:c(n),t):u},t.frequency=function(e){return arguments.length?(n=!!e,t):n},t},d3.layout.hierarchy=function(){function t(n,a,o){var c=u.call(e,n,a);if(n.depth=a,o.push(n),c&&(l=c.length)){for(var l,s,f=-1,h=n.children=[],d=0,g=a+1;l>++f;)s=t(c[f],g,o),s.parent=n,h.push(s),d+=s.value;r&&h.sort(r),i&&(n.value=d)}else i&&(n.value=+i.call(e,n,a)||0);return n}function n(t,r){var u=t.children,a=0;if(u&&(o=u.length))for(var o,c=-1,l=r+1;o>++c;)a+=n(u[c],l);else i&&(a=+i.call(e,t,r)||0);return i&&(t.value=a),a}function e(n){var e=[];return t(n,0,e),e}var r=pr,u=dr,i=gr;return e.sort=function(t){return arguments.length?(r=t,e):r},e.children=function(t){return arguments.length?(u=t,e):u},e.value=function(t){return arguments.length?(i=t,e):i},e.revalue=function(t){return n(t,0),t},e},d3.layout.pack=function(){function t(t,u){var i=n.call(this,t,u),a=i[0];a.x=0,a.y=0,Rr(a,function(t){t.r=Math.sqrt(t.value)}),Rr(a,xr);var o=r[0],c=r[1],l=Math.max(2*a.r/o,2*a.r/c);if(e>0){var s=e*l/2;Rr(a,function(t){t.r+=s}),Rr(a,xr),Rr(a,function(t){t.r-=s}),l=Math.max(2*a.r/o,2*a.r/c)}return Sr(a,o/2,c/2,1/l),i}var n=d3.layout.hierarchy().sort(vr),e=0,r=[1,1];return t.size=function(n){return arguments.length?(r=n,t):r},t.padding=function(n){return arguments.length?(e=+n,t):e},hr(t,n)},d3.layout.cluster=function(){function t(t,u){var i,a=n.call(this,t,u),o=a[0],c=0;Rr(o,function(t){var n=t.children;n&&n.length?(t.x=Ar(n),t.y=Er(n)):(t.x=i?c+=e(t,i):0,t.y=0,i=t)});var l=Nr(o),s=Tr(o),f=l.x-e(l,s)/2,h=s.x+e(s,l)/2;return Rr(o,function(t){t.x=(t.x-f)/(h-f)*r[0],t.y=(1-(o.y?t.y/o.y:1))*r[1]}),a}var n=d3.layout.hierarchy().sort(null).value(null),e=qr,r=[1,1];return t.separation=function(n){return arguments.length?(e=n,t):e},t.size=function(n){return arguments.length?(r=n,t):r},hr(t,n)},d3.layout.tree=function(){function t(t,u){function i(t,n){var r=t.children,u=t._tree;if(r&&(a=r.length)){for(var a,c,l,s=r[0],f=s,h=-1;a>++h;)l=r[h],i(l,c),f=o(l,c,f),c=l;Pr(t);var d=.5*(s._tree.prelim+l._tree.prelim);n?(u.prelim=n._tree.prelim+e(t,n),u.mod=u.prelim-d):u.prelim=d}else n&&(u.prelim=n._tree.prelim+e(t,n))}function a(t,n){t.x=t._tree.prelim+n;var e=t.children;if(e&&(r=e.length)){var r,u=-1;for(n+=t._tree.mod;r>++u;)a(e[u],n)}}function o(t,n,r){if(n){for(var u,i=t,a=t,o=n,c=t.parent.children[0],l=i._tree.mod,s=a._tree.mod,f=o._tree.mod,h=c._tree.mod;o=zr(o),i=Cr(i),o&&i;)c=Cr(c),a=zr(a),a._tree.ancestor=t,u=o._tree.prelim+f-i._tree.prelim-l+e(o,i),u>0&&(jr(Or(o,t,r),t,u),l+=u,s+=u),f+=o._tree.mod,l+=i._tree.mod,h+=c._tree.mod,s+=a._tree.mod;o&&!zr(a)&&(a._tree.thread=o,a._tree.mod+=f-s),i&&!Cr(c)&&(c._tree.thread=i,c._tree.mod+=l-h,r=t)}return r}var c=n.call(this,t,u),l=c[0];Rr(l,function(t,n){t._tree={ancestor:t,prelim:0,mod:0,change:0,shift:0,number:n?n._tree.number+1:0}}),i(l),a(l,-l._tree.prelim);var s=Dr(l,Fr),f=Dr(l,Lr),h=Dr(l,Hr),d=s.x-e(s,f)/2,g=f.x+e(f,s)/2,p=h.depth||1;return Rr(l,function(t){t.x=(t.x-d)/(g-d)*r[0],t.y=t.depth/p*r[1],delete t._tree}),c}var n=d3.layout.hierarchy().sort(null).value(null),e=qr,r=[1,1];return t.separation=function(n){return arguments.length?(e=n,t):e},t.size=function(n){return arguments.length?(r=n,t):r},hr(t,n)},d3.layout.treemap=function(){function t(t,n){for(var e,r,u=-1,i=t.length;i>++u;)r=(e=t[u]).value*(0>n?0:n),e.area=isNaN(r)||0>=r?0:r}function n(e){var i=e.children;if(i&&i.length){var a,o,c,l=f(e),s=[],h=i.slice(),g=1/0,p="slice"===d?l.dx:"dice"===d?l.dy:"slice-dice"===d?1&e.depth?l.dy:l.dx:Math.min(l.dx,l.dy);for(t(h,l.dx*l.dy/e.value),s.area=0;(c=h.length)>0;)s.push(a=h[c-1]),s.area+=a.area,"squarify"!==d||g>=(o=r(s,p))?(h.pop(),g=o):(s.area-=s.pop().area,u(s,p,l,!1),p=Math.min(l.dx,l.dy),s.length=s.area=0,g=1/0);s.length&&(u(s,p,l,!0),s.length=s.area=0),i.forEach(n)}}function e(n){var r=n.children;if(r&&r.length){var i,a=f(n),o=r.slice(),c=[];for(t(o,a.dx*a.dy/n.value),c.area=0;i=o.pop();)c.push(i),c.area+=i.area,null!=i.z&&(u(c,i.z?a.dx:a.dy,a,!o.length),c.length=c.area=0);r.forEach(e)}}function r(t,n){for(var e,r=t.area,u=0,i=1/0,a=-1,o=t.length;o>++a;)(e=t[a].area)&&(i>e&&(i=e),e>u&&(u=e));return r*=r,n*=n,r?Math.max(n*u*g/r,r/(n*i*g)):1/0}function u(t,n,e,r){var u,i=-1,a=t.length,o=e.x,l=e.y,s=n?c(t.area/n):0;if(n==e.dx){for((r||s>e.dy)&&(s=e.dy);a>++i;)u=t[i],u.x=o,u.y=l,u.dy=s,o+=u.dx=Math.min(e.x+e.dx-o,s?c(u.area/s):0);u.z=!0,u.dx+=e.x+e.dx-o,e.y+=s,e.dy-=s}else{for((r||s>e.dx)&&(s=e.dx);a>++i;)u=t[i],u.x=o,u.y=l,u.dx=s,l+=u.dy=Math.min(e.y+e.dy-l,s?c(u.area/s):0);u.z=!1,u.dy+=e.y+e.dy-l,e.x+=s,e.dx-=s}}function i(r){var u=a||o(r),i=u[0];return i.x=0,i.y=0,i.dx=l[0],i.dy=l[1],a&&o.revalue(i),t([i],i.dx*i.dy/i.value),(a?e:n)(i),h&&(a=u),u}var a,o=d3.layout.hierarchy(),c=Math.round,l=[1,1],s=null,f=Yr,h=!1,d="squarify",g=.5*(1+Math.sqrt(5));return i.size=function(t){return arguments.length?(l=t,i):l},i.padding=function(t){function n(n){var e=t.call(i,n,n.depth);return null==e?Yr(n):Ur(n,"number"==typeof e?[e,e,e,e]:e)}function e(n){return Ur(n,t)}if(!arguments.length)return s;var r;return f=null==(s=t)?Yr:"function"==(r=typeof t)?n:"number"===r?(t=[t,t,t,t],e):e,i},i.round=function(t){return arguments.length?(c=t?Math.round:Number,i):c!=Number},i.sticky=function(t){return arguments.length?(h=t,a=null,i):h},i.ratio=function(t){return arguments.length?(g=t,i):g},i.mode=function(t){return arguments.length?(d=t+"",i):d},hr(i,o)},d3.csv=Ir(",","text/csv"),d3.tsv=Ir("	","text/tab-separated-values"),d3.geo={},d3.geo.stream=function(t,n){to.hasOwnProperty(t.type)?to[t.type](t,n):Vr(t,n)};var to={Feature:function(t,n){Vr(t.geometry,n)},FeatureCollection:function(t,n){for(var e=t.features,r=-1,u=e.length;u>++r;)Vr(e[r].geometry,n)}},no={Sphere:function(t,n){n.sphere()},Point:function(t,n){var e=t.coordinates;n.point(e[0],e[1])},MultiPoint:function(t,n){for(var e,r=t.coordinates,u=-1,i=r.length;i>++u;)e=r[u],n.point(e[0],e[1])},LineString:function(t,n){Xr(t.coordinates,n,0)},MultiLineString:function(t,n){for(var e=t.coordinates,r=-1,u=e.length;u>++r;)Xr(e[r],n,0)},Polygon:function(t,n){Zr(t.coordinates,n)},MultiPolygon:function(t,n){for(var e=t.coordinates,r=-1,u=e.length;u>++r;)Zr(e[r],n)},GeometryCollection:function(t,n){for(var e=t.geometries,r=-1,u=e.length;u>++r;)Vr(e[r],n)}};d3.geo.albersUsa=function(){function t(t){return n(t)(t)}function n(t){var n=t[0],a=t[1];return a>50?r:-140>n?u:21>a?i:e}var e=d3.geo.albers(),r=d3.geo.albers().rotate([160,0]).center([0,60]).parallels([55,65]),u=d3.geo.albers().rotate([160,0]).center([0,20]).parallels([8,18]),i=d3.geo.albers().rotate([60,0]).center([0,10]).parallels([8,18]);return t.scale=function(n){return arguments.length?(e.scale(n),r.scale(.6*n),u.scale(n),i.scale(1.5*n),t.translate(e.translate())):e.scale()},t.translate=function(n){if(!arguments.length)return e.translate();var a=e.scale(),o=n[0],c=n[1];return e.translate(n),r.translate([o-.4*a,c+.17*a]),u.translate([o-.19*a,c+.2*a]),i.translate([o+.58*a,c+.43*a]),t},t.scale(e.scale())},(d3.geo.albers=function(){var t=29.5*ji,n=45.5*ji,e=Pu(eu),r=e(t,n);return r.parallels=function(r){return arguments.length?e(t=r[0]*ji,n=r[1]*ji):[t*Oi,n*Oi]},r.rotate([98,0]).center([0,38]).scale(1e3)}).raw=eu;var eo=Vu(function(t){return Math.sqrt(2/(1+t))},function(t){return 2*Math.asin(t/2)});(d3.geo.azimuthalEqualArea=function(){return Ru(eo)}).raw=eo;var ro=Vu(function(t){var n=Math.acos(t);return n&&n/Math.sin(n)},a);(d3.geo.azimuthalEquidistant=function(){return Ru(ro)}).raw=ro,d3.geo.bounds=ru(a),d3.geo.centroid=function(t){uo=io=ao=oo=co=0,d3.geo.stream(t,lo);var n;return io&&Math.abs(n=Math.sqrt(ao*ao+oo*oo+co*co))>Pi?[Math.atan2(oo,ao)*Oi,Math.asin(Math.max(-1,Math.min(1,co/n)))*Oi]:void 0};var uo,io,ao,oo,co,lo={sphere:function(){2>uo&&(uo=2,io=ao=oo=co=0)},point:uu,lineStart:au,lineEnd:ou,polygonStart:function(){2>uo&&(uo=2,io=ao=oo=co=0),lo.lineStart=iu},polygonEnd:function(){lo.lineStart=au}};d3.geo.circle=function(){function t(){var t="function"==typeof r?r.apply(this,arguments):r,n=Ou(-t[0]*ji,-t[1]*ji,0).invert,u=[];return e(null,null,1,{point:function(t,e){u.push(t=n(t,e)),t[0]*=Oi,t[1]*=Oi}}),{type:"Polygon",coordinates:[u]}}var n,e,r=[0,0],u=6;return t.origin=function(n){return arguments.length?(r=n,t):r},t.angle=function(r){return arguments.length?(e=cu((n=+r)*ji,u*ji),t):n},t.precision=function(r){return arguments.length?(e=cu(n*ji,(u=+r)*ji),t):u},t.angle(90)};var so=su(o,vu,Mu);(d3.geo.equirectangular=function(){return Ru(_u).scale(250/Ri)}).raw=_u.invert=_u;var fo=Vu(function(t){return 1/t},Math.atan);(d3.geo.gnomonic=function(){return Ru(fo)}).raw=fo,d3.geo.graticule=function(){function t(){return{type:"MultiLineString",coordinates:n()}}function n(){return d3.range(Math.ceil(r/c)*c,e,c).map(a).concat(d3.range(Math.ceil(i/l)*l,u,l).map(o))}var e,r,u,i,a,o,c=22.5,l=c,s=2.5;return t.lines=function(){return n().map(function(t){return{type:"LineString",coordinates:t}})},t.outline=function(){return{type:"Polygon",coordinates:[a(r).concat(o(u).slice(1),a(e).reverse().slice(1),o(i).reverse().slice(1))]}},t.extent=function(n){return arguments.length?(r=+n[0][0],e=+n[1][0],i=+n[0][1],u=+n[1][1],r>e&&(n=r,r=e,e=n),i>u&&(n=i,i=u,u=n),t.precision(s)):[[r,i],[e,u]]},t.step=function(n){return arguments.length?(c=+n[0],l=+n[1],t):[c,l]},t.precision=function(n){return arguments.length?(s=+n,a=wu(i,u,s),o=Su(r,e,s),t):s},t.extent([[-180+Pi,-90+Pi],[180-Pi,90-Pi]])},d3.geo.interpolate=function(t,n){return ku(t[0]*ji,t[1]*ji,n[0]*ji,n[1]*ji)},d3.geo.greatArc=function(){function e(){for(var t=r||a.apply(this,arguments),n=u||o.apply(this,arguments),e=i||d3.geo.interpolate(t,n),u=0,l=c/e.distance,s=[t];1>(u+=l);)s.push(e(u));return s.push(n),{type:"LineString",coordinates:s}}var r,u,i,a=n,o=t,c=6*ji;return e.distance=function(){return(i||d3.geo.interpolate(r||a.apply(this,arguments),u||o.apply(this,arguments))).distance},e.source=function(t){return arguments.length?(a=t,r="function"==typeof t?null:t,i=r&&u?d3.geo.interpolate(r,u):null,e):a},e.target=function(t){return arguments.length?(o=t,u="function"==typeof t?null:t,i=r&&u?d3.geo.interpolate(r,u):null,e):o},e.precision=function(t){return arguments.length?(c=t*ji,e):c/ji},e},Eu.invert=function(t,n){return[2*Ri*t,2*Math.atan(Math.exp(2*Ri*n))-Ri/2]},(d3.geo.mercator=function(){return Ru(Eu).scale(500)}).raw=Eu;var ho=Vu(function(){return 1},Math.asin);(d3.geo.orthographic=function(){return Ru(ho)}).raw=ho,d3.geo.path=function(){function t(t){return t&&d3.geo.stream(t,r(u.pointRadius("function"==typeof i?+i.apply(this,arguments):i))),u.result()}var n,e,r,u,i=4.5;return t.area=function(t){return go=0,d3.geo.stream(t,r(mo)),go},t.centroid=function(t){return uo=ao=oo=co=0,d3.geo.stream(t,r(vo)),co?[ao/co,oo/co]:void 0},t.bounds=function(t){return ru(r)(t)},t.projection=function(e){return arguments.length?(r=(n=e)?e.stream||Nu(e):a,t):n},t.context=function(n){return arguments.length?(u=null==(e=n)?new Tu:new qu(n),t):e},t.pointRadius=function(n){return arguments.length?(i="function"==typeof n?n:+n,t):i},t.projection(d3.geo.albersUsa()).context(null)};var go,po,mo={point:Pn,lineStart:Pn,lineEnd:Pn,polygonStart:function(){po=0,mo.lineStart=Cu},polygonEnd:function(){mo.lineStart=mo.lineEnd=mo.point=Pn,go+=Math.abs(po/2)}},vo={point:zu,lineStart:Du,lineEnd:Lu,polygonStart:function(){vo.lineStart=Fu},polygonEnd:function(){vo.point=zu,vo.lineStart=Du,vo.lineEnd=Lu}};d3.geo.area=function(t){return yo=0,d3.geo.stream(t,bo),yo};var yo,Mo,bo={sphere:function(){yo+=4*Ri},point:Pn,lineStart:Pn,lineEnd:Pn,polygonStart:function(){Mo=0,bo.lineStart=Hu},polygonEnd:function(){yo+=0>Mo?4*Ri+Mo:Mo,bo.lineStart=bo.lineEnd=bo.point=Pn}};d3.geo.projection=Ru,d3.geo.projectionMutator=Pu;var xo=Vu(function(t){return 1/(1+t)},function(t){return 2*Math.atan(t)});(d3.geo.stereographic=function(){return Ru(xo)}).raw=xo,d3.geom={},d3.geom.hull=function(t){if(3>t.length)return[];var n,e,r,u,i,a,o,c,l,s,f=t.length,h=f-1,d=[],g=[],p=0;for(n=1;f>n;++n)t[n][1]<t[p][1]?p=n:t[n][1]==t[p][1]&&(p=t[n][0]<t[p][0]?n:p);for(n=0;f>n;++n)n!==p&&(u=t[n][1]-t[p][1],r=t[n][0]-t[p][0],d.push({angle:Math.atan2(u,r),index:n}));for(d.sort(function(t,n){return t.angle-n.angle}),l=d[0].angle,c=d[0].index,o=0,n=1;h>n;++n)e=d[n].index,l==d[n].angle?(r=t[c][0]-t[p][0],u=t[c][1]-t[p][1],i=t[e][0]-t[p][0],a=t[e][1]-t[p][1],r*r+u*u>=i*i+a*a?d[n].index=-1:(d[o].index=-1,l=d[n].angle,o=n,c=e)):(l=d[n].angle,o=n,c=e);for(g.push(p),n=0,e=0;2>n;++e)-1!==d[e].index&&(g.push(d[e].index),n++);for(s=g.length;h>e;++e)if(-1!==d[e].index){for(;!Xu(g[s-2],g[s-1],d[e].index,t);)--s;g[s++]=d[e].index}var m=[];for(n=0;s>n;++n)m.push(t[g[n]]);return m},d3.geom.polygon=function(t){return t.area=function(){for(var n=0,e=t.length,r=t[e-1][1]*t[0][0]-t[e-1][0]*t[0][1];e>++n;)r+=t[n-1][1]*t[n][0]-t[n-1][0]*t[n][1];return.5*r},t.centroid=function(n){var e,r,u=-1,i=t.length,a=0,o=0,c=t[i-1];for(arguments.length||(n=-1/(6*t.area()));i>++u;)e=c,c=t[u],r=e[0]*c[1]-c[0]*e[1],a+=(e[0]+c[0])*r,o+=(e[1]+c[1])*r;return[a*n,o*n]},t.clip=function(n){for(var e,r,u,i,a,o,c=-1,l=t.length,s=t[l-1];l>++c;){for(e=n.slice(),n.length=0,i=t[c],a=e[(u=e.length)-1],r=-1;u>++r;)o=e[r],Zu(o,s,i)?(Zu(a,s,i)||n.push(Bu(a,o,s,i)),n.push(o)):Zu(a,s,i)&&n.push(Bu(a,o,s,i)),a=o;s=i}return n},t},d3.geom.voronoi=function(t){var n=t.map(function(){return[]}),e=1e6;return $u(t,function(t){var r,u,i,a,o,c;1===t.a&&t.b>=0?(r=t.ep.r,u=t.ep.l):(r=t.ep.l,u=t.ep.r),1===t.a?(o=r?r.y:-e,i=t.c-t.b*o,c=u?u.y:e,a=t.c-t.b*c):(i=r?r.x:-e,o=t.c-t.a*i,a=u?u.x:e,c=t.c-t.a*a);var l=[i,o],s=[a,c];n[t.region.l.index].push(l,s),n[t.region.r.index].push(l,s)}),n=n.map(function(n,e){var r=t[e][0],u=t[e][1],i=n.map(function(t){return Math.atan2(t[0]-r,t[1]-u)});return d3.range(n.length).sort(function(t,n){return i[t]-i[n]}).filter(function(t,n,e){return!n||i[t]-i[e[n-1]]>Pi}).map(function(t){return n[t]})}),n.forEach(function(n,r){var u=n.length;if(!u)return n.push([-e,-e],[-e,e],[e,e],[e,-e]);if(!(u>2)){var i=t[r],a=n[0],o=n[1],c=i[0],l=i[1],s=a[0],f=a[1],h=o[0],d=o[1],g=Math.abs(h-s),p=d-f;if(Pi>Math.abs(p)){var m=f>l?-e:e;n.push([-e,m],[e,m])}else if(Pi>g){var v=s>c?-e:e;n.push([v,-e],[v,e])}else{var m=(s-c)*(d-f)>(h-s)*(f-l)?e:-e,y=Math.abs(p)-g;Pi>Math.abs(y)?n.push([0>p?m:-m,m]):(y>0&&(m*=-1),n.push([-e,m],[e,m]))}}}),n};var _o={l:"r",r:"l"};d3.geom.delaunay=function(t){var n=t.map(function(){return[]}),e=[];return $u(t,function(e){n[e.region.l.index].push(t[e.region.r.index])}),n.forEach(function(n,r){var u=t[r],i=u[0],a=u[1];n.forEach(function(t){t.angle=Math.atan2(t[0]-i,t[1]-a)}),n.sort(function(t,n){return t.angle-n.angle});for(var o=0,c=n.length-1;c>o;o++)e.push([u,n[o],n[o+1]])}),e},d3.geom.quadtree=function(t,n,e,r,u){function i(t,n,e,r,u,i){if(!isNaN(n.x)&&!isNaN(n.y))if(t.leaf){var o=t.point;o?.01>Math.abs(o.x-n.x)+Math.abs(o.y-n.y)?a(t,n,e,r,u,i):(t.point=null,a(t,o,e,r,u,i),a(t,n,e,r,u,i)):t.point=n}else a(t,n,e,r,u,i)}function a(t,n,e,r,u,a){var o=.5*(e+u),c=.5*(r+a),l=n.x>=o,s=n.y>=c,f=(s<<1)+l;t.leaf=!1,t=t.nodes[f]||(t.nodes[f]=Ju()),l?e=o:u=o,s?r=c:a=c,i(t,n,e,r,u,a)}var o,c=-1,l=t.length;if(5>arguments.length)if(3===arguments.length)u=e,r=n,e=n=0;else for(n=e=1/0,r=u=-1/0;l>++c;)o=t[c],n>o.x&&(n=o.x),e>o.y&&(e=o.y),o.x>r&&(r=o.x),o.y>u&&(u=o.y);var s=r-n,f=u-e;s>f?u=e+s:r=n+f;var h=Ju();return h.add=function(t){i(h,t,n,e,r,u)},h.visit=function(t){Gu(t,h,n,e,r,u)},t.forEach(h.add),h},d3.time={};var wo=Date,So=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];Ku.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){ko.setUTCDate.apply(this._,arguments)},setDay:function(){ko.setUTCDay.apply(this._,arguments)},setFullYear:function(){ko.setUTCFullYear.apply(this._,arguments)},setHours:function(){ko.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){ko.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){ko.setUTCMinutes.apply(this._,arguments)},setMonth:function(){ko.setUTCMonth.apply(this._,arguments)},setSeconds:function(){ko.setUTCSeconds.apply(this._,arguments)},setTime:function(){ko.setTime.apply(this._,arguments)}};var ko=Date.prototype,Eo="%a %b %e %X %Y",Ao="%m/%d/%Y",No="%H:%M:%S",To=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],qo=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],Co=["January","February","March","April","May","June","July","August","September","October","November","December"],zo=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];d3.time.format=function(t){function n(n){for(var r,u,i,a=[],o=-1,c=0;e>++o;)37===t.charCodeAt(o)&&(a.push(t.substring(c,o)),null!=(u=jo[r=t.charAt(++o)])&&(r=t.charAt(++o)),(i=Oo[r])&&(r=i(n,null==u?"e"===r?" ":"0":u)),a.push(r),c=o+1);return a.push(t.substring(c,o)),a.join("")}var e=t.length;return n.parse=function(n){var e={y:1900,m:0,d:1,H:0,M:0,S:0,L:0},r=Wu(e,t,n,0);if(r!=n.length)return null;"p"in e&&(e.H=e.H%12+12*e.p);var u=new wo;return u.setFullYear(e.y,e.m,e.d),u.setHours(e.H,e.M,e.S,e.L),u},n.toString=function(){return t},n};var Do=Qu(To),Lo=Qu(qo),Fo=Qu(Co),Ho=ti(Co),Ro=Qu(zo),Po=ti(zo),jo={"-":"",_:" ",0:"0"},Oo={a:function(t){return qo[t.getDay()]},A:function(t){return To[t.getDay()]},b:function(t){return zo[t.getMonth()]},B:function(t){return Co[t.getMonth()]},c:d3.time.format(Eo),d:function(t,n){return ni(t.getDate(),n,2)},e:function(t,n){return ni(t.getDate(),n,2)},H:function(t,n){return ni(t.getHours(),n,2)},I:function(t,n){return ni(t.getHours()%12||12,n,2)},j:function(t,n){return ni(1+d3.time.dayOfYear(t),n,3)},L:function(t,n){return ni(t.getMilliseconds(),n,3)},m:function(t,n){return ni(t.getMonth()+1,n,2)},M:function(t,n){return ni(t.getMinutes(),n,2)},p:function(t){return t.getHours()>=12?"PM":"AM"},S:function(t,n){return ni(t.getSeconds(),n,2)},U:function(t,n){return ni(d3.time.sundayOfYear(t),n,2)},w:function(t){return t.getDay()},W:function(t,n){return ni(d3.time.mondayOfYear(t),n,2)},x:d3.time.format(Ao),X:d3.time.format(No),y:function(t,n){return ni(t.getFullYear()%100,n,2)},Y:function(t,n){return ni(t.getFullYear()%1e4,n,4)},Z:Mi,"%":function(){return"%"}},Yo={a:ei,A:ri,b:ui,B:ii,c:ai,d:di,e:di,H:gi,I:gi,L:vi,m:hi,M:pi,p:yi,S:mi,x:oi,X:ci,y:si,Y:li},Uo=/^\s*\d+/,Io=d3.map({am:0,pm:1});d3.time.format.utc=function(t){function n(t){try{wo=Ku;var n=new wo;return n._=t,e(n)}finally{wo=Date}}var e=d3.time.format(t);return n.parse=function(t){try{wo=Ku;var n=e.parse(t);return n&&n._}finally{wo=Date}},n.toString=e.toString,n};var Vo=d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ");d3.time.format.iso=Date.prototype.toISOString?bi:Vo,bi.parse=function(t){var n=new Date(t);return isNaN(n)?null:n},bi.toString=Vo.toString,d3.time.second=xi(function(t){return new wo(1e3*Math.floor(t/1e3))},function(t,n){t.setTime(t.getTime()+1e3*Math.floor(n))},function(t){return t.getSeconds()}),d3.time.seconds=d3.time.second.range,d3.time.seconds.utc=d3.time.second.utc.range,d3.time.minute=xi(function(t){return new wo(6e4*Math.floor(t/6e4))},function(t,n){t.setTime(t.getTime()+6e4*Math.floor(n))},function(t){return t.getMinutes()}),d3.time.minutes=d3.time.minute.range,d3.time.minutes.utc=d3.time.minute.utc.range,d3.time.hour=xi(function(t){var n=t.getTimezoneOffset()/60;return new wo(36e5*(Math.floor(t/36e5-n)+n))},function(t,n){t.setTime(t.getTime()+36e5*Math.floor(n))},function(t){return t.getHours()}),d3.time.hours=d3.time.hour.range,d3.time.hours.utc=d3.time.hour.utc.range,d3.time.day=xi(function(t){var n=new wo(1970,0);return n.setFullYear(t.getFullYear(),t.getMonth(),t.getDate()),n},function(t,n){t.setDate(t.getDate()+n)},function(t){return t.getDate()-1}),d3.time.days=d3.time.day.range,d3.time.days.utc=d3.time.day.utc.range,d3.time.dayOfYear=function(t){var n=d3.time.year(t);return Math.floor((t-n-6e4*(t.getTimezoneOffset()-n.getTimezoneOffset()))/864e5)},So.forEach(function(t,n){t=t.toLowerCase(),n=7-n;var e=d3.time[t]=xi(function(t){return(t=d3.time.day(t)).setDate(t.getDate()-(t.getDay()+n)%7),t},function(t,n){t.setDate(t.getDate()+7*Math.floor(n))},function(t){var e=d3.time.year(t).getDay();return Math.floor((d3.time.dayOfYear(t)+(e+n)%7)/7)-(e!==n)});d3.time[t+"s"]=e.range,d3.time[t+"s"].utc=e.utc.range,d3.time[t+"OfYear"]=function(t){var e=d3.time.year(t).getDay();return Math.floor((d3.time.dayOfYear(t)+(e+n)%7)/7)}}),d3.time.week=d3.time.sunday,d3.time.weeks=d3.time.sunday.range,d3.time.weeks.utc=d3.time.sunday.utc.range,d3.time.weekOfYear=d3.time.sundayOfYear,d3.time.month=xi(function(t){return t=d3.time.day(t),t.setDate(1),t},function(t,n){t.setMonth(t.getMonth()+n)},function(t){return t.getMonth()}),d3.time.months=d3.time.month.range,d3.time.months.utc=d3.time.month.utc.range,d3.time.year=xi(function(t){return t=d3.time.day(t),t.setMonth(0,1),t},function(t,n){t.setFullYear(t.getFullYear()+n)},function(t){return t.getFullYear()}),d3.time.years=d3.time.year.range,d3.time.years.utc=d3.time.year.utc.range;var Xo=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Zo=[[d3.time.second,1],[d3.time.second,5],[d3.time.second,15],[d3.time.second,30],[d3.time.minute,1],[d3.time.minute,5],[d3.time.minute,15],[d3.time.minute,30],[d3.time.hour,1],[d3.time.hour,3],[d3.time.hour,6],[d3.time.hour,12],[d3.time.day,1],[d3.time.day,2],[d3.time.week,1],[d3.time.month,1],[d3.time.month,3],[d3.time.year,1]],Bo=[[d3.time.format("%Y"),o],[d3.time.format("%B"),function(t){return t.getMonth()}],[d3.time.format("%b %d"),function(t){return 1!=t.getDate()}],[d3.time.format("%a %d"),function(t){return t.getDay()&&1!=t.getDate()}],[d3.time.format("%I %p"),function(t){return t.getHours()}],[d3.time.format("%I:%M"),function(t){return t.getMinutes()}],[d3.time.format(":%S"),function(t){return t.getSeconds()}],[d3.time.format(".%L"),function(t){return t.getMilliseconds()}]],$o=d3.scale.linear(),Jo=Ei(Bo);Zo.year=function(t,n){return $o.domain(t.map(Ni)).ticks(n).map(Ai)},d3.time.scale=function(){return wi(d3.scale.linear(),Zo,Jo)};var Go=Zo.map(function(t){return[t[0].utc,t[1]]}),Ko=[[d3.time.format.utc("%Y"),o],[d3.time.format.utc("%B"),function(t){return t.getUTCMonth()}],[d3.time.format.utc("%b %d"),function(t){return 1!=t.getUTCDate()}],[d3.time.format.utc("%a %d"),function(t){return t.getUTCDay()&&1!=t.getUTCDate()}],[d3.time.format.utc("%I %p"),function(t){return t.getUTCHours()}],[d3.time.format.utc("%I:%M"),function(t){return t.getUTCMinutes()}],[d3.time.format.utc(":%S"),function(t){return t.getUTCSeconds()}],[d3.time.format.utc(".%L"),function(t){return t.getUTCMilliseconds()}]],Wo=Ei(Ko);Go.year=function(t,n){return $o.domain(t.map(qi)).ticks(n).map(Ti)},d3.time.scale.utc=function(){return wi(d3.scale.linear(),Go,Wo)}})();
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/index.html b/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/index.html
deleted file mode 100644
index ff554adf7c8..00000000000
--- a/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/index.html
+++ /dev/null
@@ -1,641 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>Lane Statistics</title>
-    <script type="text/javascript" src="/openbis/resources/js/d3.v3.min.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/d3.layout.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/pie.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/openbis-dsu.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/FileSaver.js"></script>
-    <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0-rc1/css/bootstrap.min.css">
-    <link rel="stylesheet" type="text/css" href="style.css" />
-    <style type="text/css">
-  </head>
-  <body>
-  <script>
- 
-  dsu = new openbis_dsu('/openbis/openbis', '/datastore_server');
-  var webAppContext = new openbisWebAppContext();
-  dsu.server.useSession(webAppContext.getSessionId());
-
-  var div = d3.select("body").append("div")
-    .attr("class", "tooltip")
-    .style("opacity", 0);
-
-  loadData()
-
-function loadData () { 
-  statisticsArray = []
- 
-  var dataSetProperties;
-  dsu.retrieveDataSetsForSample(webAppContext.getEntityIdentifier(), getProperties);
-  //console.log (statisticsArray)
-
-  function getProperties(dataSetProperties) {
-    for (var i = 0; i < dataSetProperties.result.length; i++) {
-
-      statisticsArray.push({
-                            'externalSampleName' : dataSetProperties.result[i].properties.EXTERNAL_SAMPLE_NAME,
-                            'index1': dataSetProperties.result[i].properties.BARCODE,
-                            'index2': dataSetProperties.result[i].properties.INDEX2,
-                            'percFilteringPass' : parseFloat(dataSetProperties.result[i].properties.PERCENTAGE_PASSED_FILTERING),
-                            'rawReadsSum' : dataSetProperties.result[i].properties.RAW_READS_SUM,
-                            'pfReadsSum' : dataSetProperties.result[i].properties.PF_READS_SUM,
-                            'rawYieldMbases' : dataSetProperties.result[i].properties.RAW_YIELD_MBASES,
-                            'yieldMbases' : dataSetProperties.result[i].properties.YIELD_MBASES,
-                            'percRawClustersPerLane': parseFloat(dataSetProperties.result[i].properties.PERCENTAGE_RAW_CLUSTERS_PER_LANE),
-                            'pfMeanQualityScore' : parseFloat(dataSetProperties.result[i].properties.PFMEANQUALITYSCORE),
-                            'pfYieldq30Percentage' : parseFloat(dataSetProperties.result[i].properties.PFYIELDQ30PERCENTAGE)
-                            }); 
-    }
-
-    //console.log (statisticsArray.length)
-    var sums = calculateSum(statisticsArray, true)
-    var sumsWithNOINDEX = calculateSum(statisticsArray, false)
-
-    if (! isNaN(statisticsArray[0].percFilteringPass)) {
-      plotLaneTable(sumsWithNOINDEX, false)
-      placeholder();
-      plotLaneTable(sums, true)
-      placeholder();
-      plotTable (statisticsArray);
-      downloadButton ("tableStats");
-      placeholder();
-      plotPercFilteringPass (statisticsArray);
-      downloadButton ("filteredChart");
-      plotReadsSum (statisticsArray, sums);
-      downloadButton ("unfilteredReads");
-      plotPercRawClustersPerLane (statisticsArray);
-      downloadButton ("percRawClusters");
-
-      $("#save_as" + "tableStats").click(function() { submit_download_form("html", "tableStats"); });
-      $("#save_as" + "filteredChart").click(function() { submit_download_form("svg", "filteredChart"); });
-      $("#save_as" + "unfilteredReads").click(function() { submit_download_form("svg", "unfilteredReads"); });
-      $("#save_as" + "percRawClusters").click(function() { submit_download_form("svg", "percRawClusters"); });
-    }
-    else {
-      d3.select("body").append("text").text("No data available!") 
-    }
-  }
-}
- 
-colors = ["#FED976", "#FEB24C", "#FD8D3C", "#FC4E2A", "#E31A1C", "#800026", "#610B5E", "#4C0B5F",
-          "#0B0B61", "#0B4C5F", "#0B5F48","#0B5F1E", "#4C5F0B", "#5F480B", "#5F1E0B", "#5F0B22",
-           ]
-var formatThousands = d3.format(",");
-
-function isNumber(n) {
-  return !isNaN(parseFloat(n)) && isFinite(n);
-}
-
-function plotLaneTable (sums, withNOINDEX) {
-
-  d3.select("body").append("text")
-    .text("Lane Based Summary Table") 
-    .attr("class", "h4");
-  
-  d3.select("body").append("text")
-    .text(function (){if (withNOINDEX) {return " without NOINDEX";} return " with NOINDEX";}) 
-    .attr("class", "h6");
-
-
-  var laneTableStats = d3.select("body")
-    .append("table")
-    .attr("id", "tableLaneStats")
-    .attr("class", "tableStats")
-    ;
-
-  header = {"Average Passed Filtering (PF)":1, "Sum Raw Reads":1, "Sum PF Reads":1, "Sum Raw Bases":1, "Sum PF Bases":1, "Average Raw Clusters in % per Index":1, "Average PF Phred Score":1, "Average > 30 Phred Score":1 }
-
-  // create the table header
-  var thead = laneTableStats.selectAll("th")
-              .data(d3.keys(header))
-              .enter().append("th")
-              .text(function(d){return d})
-              ;
-
-  // fill the table
-  // create rows
-  var tr = laneTableStats.selectAll("tr")
-           .data(sums).enter().append("tr")
-
-  // cells
-  var td = tr.selectAll("td")
-    .data(function(d){return d3.values(d)})
-    .enter().append("td")
-    .text(function(d) {if (isNumber(d)) {return formatThousands(d)}; return d;})
-    .style("text-align", function(d){if (isNumber(d)) {return "right"} return "left"})
-    ;
-}
-
-function plotTable (statisticsArray) {
-  console.log(statisticsArray) 
-  /*
-  d3.select("body").append("text")
-    .text("Index Based Summary Table") 
-    .attr("class", "h4");
-  */
-
-  var tableStats = d3.select("body")
-    .append("table")
-    .attr("id", "tableStats")
-    .attr("class", "tableStats")
-    ;
-
-  var header={"External Sample Name": "Name given by the customer",
-               "Index1": "First Index",
-               "Index2": "Second Index", 
-               "Passed Filtering(PF) in %": "Reads which passed the Illumina Filter",
-               "Raw Reads": "Number of all Reads",
-               "PF Reads": "Number of Reads which passed the Illumina Filter",
-               "Raw Bases": "Number of all Bases",
-               "PF Bases": "Number of all Bases which passed the Illumina Filter",
-               "% in Lane": "Percentage of this Index within the Lane",
-               "Mean Phred Score": "Mean Phred Score (0-40)",
-               "> 30 Phred Score in %": "How many Bases are above the Phred Score 30(0.001)?"
-  }
-
-
-  // create the table header
-  var thead = tableStats.selectAll("th")
-              //.data(d3.keys(statisticsArray[0])) // got replaced with more readable names
-              .data(d3.keys(header))
-              .enter().append("th")
-              .text(function(d){return d})
-              .data(d3.values(header))
-              .on("mouseover", function(d) {
-                  div.transition()
-                    .duration(200)
-                    .style("opacity", .9);
-                 div.style("width", "120px")
-                 div.html(d)
-                .style("left", (d3.event.pageX) + "px")
-                .style("top", (d3.event.pageY - 42) + "px");
-              })
-             .on("mouseout", function(d) {
-                 div.transition()
-                    .duration(500)
-                    .style("opacity", 0);
-              })
-              ;
-
-  // fill the table
-  // create rows
-  var tr = tableStats.selectAll("tr")
-           .data(statisticsArray).enter().append("tr")
-
-  // cells
-  var td = tr.selectAll("td")
-    .data(function(d){return d3.values(d)})
-    .enter().append("td")
-    .text(function(d) {if (isNumber(d)) {return formatThousands(d)}; return d;})
-    //.on("mouseover", function(){d3.select(this).style("background-color", "aliceblue")})
-    //.on("mouseout", function(){d3.select(this).style("background-color", "white")})
-    .style("text-align", function(d){if (isNumber(d)) {return "right"} return "left"})
-    ;
-
-
-}
-
-function placeholder() {
-
-var space = d3.select("body")
-              .append("svg")
-              .attr("id", "placeholder")
-              .attr("width", 1500)
-              .attr("height", 50)
-              ;
-}
-
-
-function plotPercFilteringPass (statisticsArray) {
-
-  if (statisticsArray.length > 60) {var svgWidth = 7000;}
-  else if (statisticsArray.length > 10) {var svgWidth = 4000;}
-  else {var svgWidth = 3000;}
-
-  svgWidth = statisticsArray.length * 100
-  if (svgWidth < 200) {svgWidth = 300;}
-
-
-  var barPadding = 1;
-  var valuePadding = 0.01;
-  var agenda = [100,90,80,70,60,50,40,30,20,10,0]
-  var agendaWidth = 100
-  var AgendaWidthOffset = 30
-
-  var margin = {top: 20, right: 20, bottom: 40, left: 40},
-    svgWidth = svgWidth - margin.left - margin.right,
-    svgHeight = 250 - margin.top - margin.bottom;
-
-
-//d3.select("#ex1").append("svg")
-
-  var svgFilteredChartAgenda = d3.select("body")
-                           .append("svg")
-                           .attr("id", "chartAgenda")
-                           .attr("width", agendaWidth )
-                           .attr("height", svgHeight + margin.top + margin.bottom)
-                           ;  
-
- var filteredChartAgenda = svgFilteredChartAgenda.selectAll("percFilteringPassChartAgenda")
-                                      .data(agenda)
-                                      .enter()
-                                      .append("rect")
-                                      .attr("rx", 3)
-                                      .attr("y", function(d, i) { return i * (svgHeight / agenda.length) ;})
-                                      .attr("x", function(d) { return 0; })
-                                      .attr("width", function (d) { return agendaWidth - AgendaWidthOffset })
-                                      .attr("height", function (d) { return  svgHeight / agenda.length - barPadding;})
-                                      .attr("fill", function (d) { return "hsla("+ Math.round(d)*1.2 +", 40%, 30%, 1)"});
-  
-  svgFilteredChartAgenda.selectAll("agendaText")
-   		  .data(agenda)
-   		  .enter()
-   		  .append("text")
-   		  .text(function(d) { return d + " %"; })
-                  .attr("fill", function(d) { return "white";})
-   		  .attr("x", function(d) { return (agendaWidth - AgendaWidthOffset)/2 ; })
-   		  .attr("y", function(d, i) { return i *  (svgHeight / agenda.length) +  (svgHeight / agenda.length - barPadding) / 2 + 3;}) 
-   		  .attr("font-family", "sans-serif")
-	          .attr("font-size", "10px")
-	          .attr("text-anchor", "middle")
-	          ;
-  
-  var svgFilteredChart = d3.select("body")
-                           .append("svg")
-                           .attr("id", "filteredChart")
-			   .attr("width", svgWidth + margin.left + margin.right)
-    	    		   .attr("height", svgHeight + margin.top + margin.bottom)
-                           .append("g")
-                           .attr("transform", "translate(" + margin.left + "," + margin.top + ")")
-                           ;
-
-  svgFilteredChart.append('text')
-                  .text("% passes Illumina Filtering (PF)")
-                  .attr("transform", "translate(" + (svgWidth/2) + "," + (svgHeight - 200) + ")")
-                  .attr("font-family", "sans-serif")
-                  .attr("font-size", "14px")
-                  .attr("text-anchor", "middle")
-                  ;
-
-  var x = d3.scale.ordinal()
-    .rangeRoundBands([0, svgWidth], valuePadding);
-    //.rangeRoundBands([0, svgWidth], .001);
-
-  var y = d3.scale.linear()
-    .range([svgHeight, 0]);
- 
-  var xAxis = d3.svg.axis()
-    .scale(x)
-    .orient("bottom")
-    //.tickPadding(25);
-
-  var yAxis = d3.svg.axis()
-    .scale(y)
-    .orient("left");
-    //.tickFormat(formatPercent);
- 
-  //x.domain(statisticsArray.map(function(d) { return d.externalSampleName+":  "+d.index1;} ));
-  x.domain(statisticsArray.map(function(d) { if (d.externalSampleName == undefined ) {return d.index1}; return d.externalSampleName; }));
-  //y.domain([0, d3.max(statisticsArray, function(d) { return d.percFilteringPass; })]);
-  y.domain([0, 100]);
-
-  svgFilteredChart.append("g")
-      .attr("class", "axis")
-      .attr("transform", "translate(0," + svgHeight + ")")
-      .call(xAxis);
-
-  var filteredChart = svgFilteredChart.selectAll("percFilteringPassChart")
-                                      .data(statisticsArray)
-                                      .enter()
-                                      .append("rect")
-                                      .attr("rx", 3)
-                                      .attr ("x", function (d) {return x(d.externalSampleName+d.index1);})
-                                      .attr ("width", x.rangeBand())
-                                      .attr ("y", function (d,i) {return y(d.percFilteringPass);})
-                                      .attr("height", function (d,i) {return svgHeight - y(d.percFilteringPass);})
-                                      .attr("fill", function (d) { return "hsla("+ Math.round(d.percFilteringPass)*1.2 +", 40%, 30%, 1)"});
-
-  svgFilteredChart.selectAll(".axis text")  // select all the text elements for the xaxis
-    .data(statisticsArray)
-    .attr ("y", function(d, i) {if (i%2 == 0) {return 8} return 22}); // if index is even the put the text up, else further down
-
-  svgFilteredChart.append("g")
-      .attr("class", "y axis")
-      .call(yAxis)
-      .append("text")
-      .attr("transform", "rotate(0)")
-      .attr("x", 16)
-      .attr("dy", ".71em")
-      .style("text-anchor", "end")
-      .text("%");
-
-
-  svgFilteredChart.selectAll("svgFilteredChartText")
-     .data(statisticsArray)
-     .enter()
-     .append("text")
-     .text(function(d) { return d.percFilteringPass + " %"; })
-     .attr("x", function(d, i) { return i * 1/(1+valuePadding)*(svgWidth / statisticsArray.length) + ((svgWidth /statisticsArray.length ) /2)  -15; })
-     .attr("y", function(d) {
-                   if (d.percFilteringPass < 40) { return svgHeight - d.percFilteringPass - margin.top - margin.bottom; }
-                   return (svgHeight - d.percFilteringPass  - margin.bottom) ;
-                  })
-     .attr("font-family", "sans-serif")
-     .attr("font-size", "12px")
-     .attr("fill", function(d) { if (d.percFilteringPass < 60) { return "black";}
-                             return "white";})
-}
-
-
-function plotReadsSum (statisticsArray, sums){
-
-  svgWidth = statisticsArray.length * 100
-  if (svgWidth < 200) {svgWidth = 300;}
-
-  var formatThousands = d3.format(",");
-  var colorRange = d3.scale.ordinal()
-      .range(colors);
-
-
- 
-  var margin = {top: 40, right: 20, bottom: 30, left: 40},
-    svgWidth = svgWidth - margin.left - margin.right,
-    svgHeight = 250 - margin.top - margin.bottom;
-
-  var barPadding = 1;
-  var valuePadding = 0.01;
-
-  var svgReadsSum = d3.select("body")
-                           .append("svg")
-                           .attr("id", "unfilteredReads")
-                           .attr("width", svgWidth + margin.left + margin.right)
-                           .attr("height", svgHeight + margin.top + margin.bottom)
-                           .append("g")
-                           .attr("transform", "translate(" + margin.left + "," + margin.top + ")")
-                           ;
-
-  var rawReadsSum = 0;
-  rawReadsSum = sums[0].rawReadsSum
-
-  svgReadsSum.append('text')
-                  .text("Number of raw Reads: " +  formatThousands(rawReadsSum))
-                  .attr("transform", "translate(" + (svgWidth/2) + "," + (svgHeight - 200) + ")")
-                  .attr("font-family", "sans-serif")
-                  .attr("font-size", "14px")
-                  .attr("text-anchor", "middle")
-                  ;
-
-
-  var x = d3.scale.ordinal()
-    .rangeRoundBands([0, svgWidth], valuePadding);
-
-  var y = d3.scale.linear()
-    .range([svgHeight, 0]);
- 
-  var xAxis = d3.svg.axis()
-    .scale(x)
-    .orient("bottom");
-
-  var yAxis = d3.svg.axis()
-    .scale(y)
-    .orient("left");
- 
-  x.domain(statisticsArray.map(function(d) { if (d.externalSampleName == undefined ) {return d.index1}; return d.externalSampleName; }));
-  y.domain([0, d3.max(statisticsArray, function(d) { return d.rawReadsSum - 20; })]);
-
-  svgReadsSum.append("g")
-      .attr("class", "axis")
-      .attr("transform", "translate(0," + svgHeight + ")")
-      .call(xAxis);
-
-  // alternate between minimal padding and high padding of the tick names
-  svgReadsSum.selectAll(".axis text")  // select all the text elements for the xaxis
-    .data(statisticsArray)
-    .attr ("y", function(d, i) {if (i%2 == 0) {return 8} return 22}); // if index is even the put the text up, else further down
-
-
-  var ReadsSum = svgReadsSum.selectAll("ReadsSum")
-                                      .data(statisticsArray)
-                                      .enter()
-                                      .append("rect")
-                                      .attr("rx", 3)
-                                      .attr ("x", function (d) {return x(d.externalSampleName+d.index1);})
-                                      .attr ("width", x.rangeBand())
-                                      .attr ("y", function (d,i) {return y(d.rawReadsSum) ;})
-                                      .attr("height", function (d,i) {return svgHeight - y(d.rawReadsSum);})
-                                      //  .attr("fill", function (d) { return "hsla("+ Math.round(d.rawReadsSum)*1.2 +", 40%, 30%, 1)"});
-                                      .attr("fill", function(d) { return colorRange(d.rawReadsSum); })
-                                      ;
-
-  svgReadsSum.selectAll("svgReadsSumText")
-     .data(statisticsArray)
-     .enter()
-     .append("text")
-     .text(function(d) { return formatThousands(d.rawReadsSum); })
-     //.attr("x", function(d, i) { return i * 1/(1+valuePadding)*(svgWidth / statisticsArray.length) + ((svgWidth /statisticsArray.length ) /2) -10; })
-     .attr ("x", function (d) {return x(d.externalSampleName+d.index1) + 20;})
-     .attr("y", function(d) {
-                   return (svgHeight - margin.top - margin.bottom + 20) ;
-                  })
-     .attr("font-family", "sans-serif")
-     .attr("font-size", "10px")
-     .attr("fill", function(d) { if (d.rawReadsSum < 30000000) { return "black";}
-                             return "black";})
-
-     ;
-
-}
-
-function roundFloat(myFloat) {
-  return Number(myFloat).toFixed(2); 
-}
-
-
-function calculateSum(statisticsArray, withNOINDEX) {
-
-  var sums = []
-  var averagePercFilteringPass = 0;
-  var sumRawReads = 0;
-  var sumPfReads = 0;
-  var sumRawYieldMbases = 0;
-  var sumYieldMbases = 0;
-  var averagePercRawClustersPerLane = 0;
-  var averagePfMeanQualityScore = 0;
-  var averagePfYieldq30Percentage = 0;
-  
-  for (var i = 0; i < statisticsArray.length; i++) {
-    // do not calculate with the NOINDEX reads
-    if ((typeof (statisticsArray[i].externalSampleName) == 'undefined') && withNOINDEX) {
-       continue;
-    }  else {
-
-      averagePercFilteringPass = averagePercFilteringPass + parseFloat(statisticsArray[i].percFilteringPass);
-      sumRawReads = sumRawReads + parseInt(statisticsArray[i].rawReadsSum);
-      sumPfReads = sumPfReads + parseInt(statisticsArray[i].pfReadsSum);
-      sumRawYieldMbases = sumRawYieldMbases + parseInt(statisticsArray[i].rawYieldMbases);
-      sumYieldMbases = sumYieldMbases + parseInt(statisticsArray[i].yieldMbases);
-      averagePercRawClustersPerLane = averagePercRawClustersPerLane + parseInt(statisticsArray[i].percRawClustersPerLane);
-      averagePfMeanQualityScore = averagePfMeanQualityScore + parseInt(statisticsArray[i].pfMeanQualityScore);
-      averagePfYieldq30Percentage = averagePfYieldq30Percentage + parseInt(statisticsArray[i].pfYieldq30Percentage);
-    }
-  }
-  if (withNOINDEX) {penalty = -1} else {penalty = 0} 
- 
-  // added the Math.max function to make sure that there is no division by zero,
-  // can happen when a single sample is on a lane (no multiplexing) 
-  averagePercFilteringPass = roundFloat(averagePercFilteringPass / Math.max((statisticsArray.length + penalty),1));
-  averagePercRawClustersPerLane = roundFloat(averagePercRawClustersPerLane /Math.max((statisticsArray.length + penalty),1));
-  averagePfMeanQualityScore = roundFloat(averagePfMeanQualityScore / Math.max((statisticsArray.length + penalty),1));
-  averagePfYieldq30Percentage = roundFloat(averagePfYieldq30Percentage / Math.max((statisticsArray.length + penalty),1));
-
-  sums.push({
-                            'averagePercFilteringPass' : averagePercFilteringPass,
-                            'rawReadsSum' : sumRawReads,
-                            'pfReadsSum' : sumPfReads,
-                            'rawYieldMbases' : sumRawYieldMbases,
-                            'yieldMbases' : sumYieldMbases,
-                            'percRawClustersPerLane': averagePercRawClustersPerLane,
-                            'pfMeanQualityScore' : averagePfMeanQualityScore,
-                            'pfYieldq30Percentage' : averagePfYieldq30Percentage 
-                            });
-
-  //console.log(sums);
-  return sums;
-
-}
-
-
-function plotPercRawClustersPerLane (percRawClustersPerLaneArray) {
-
-  var colorRange = d3.scale.ordinal()
-      .range(colors)
-
-  var margin = {top: 60, right: 20, bottom: 40, left: 40},
-    width = 500 - margin.left - margin.right,
-    height = 500 - margin.top - margin.bottom;
-  
-  var  radius = Math.min(width, height) / 2;
-
-  var arc = d3.svg.arc()
-      .outerRadius(radius - 50)
-      .innerRadius(radius - 90);
-
-  var pie = d3.layout.pie()
-      .sort(null)
-      .value(function(d) { return d.percRawClustersPerLane; });
-
-  var svgPercRawClustersPerLaneChart = d3.select("body").append("svg")
-      .attr("id", "percRawClusters")
-      .attr("width", width)
-      .attr("height", height)
-      .append("g")
-      .attr("transform", "translate(" + width / 2 + "," + height / 2+ ")");
-
-  percRawClustersPerLaneArray.forEach(function(d) {
-      d.percRawClustersPerLane = +d.percRawClustersPerLane;
-    });
-
-  var g = svgPercRawClustersPerLaneChart.selectAll(".arc")
-      .data(pie(percRawClustersPerLaneArray))
-      .enter().append("g")
-      .attr("class", "arc");
-
-  g.append("path")
-      .attr("d", arc)
-      .style("fill", function(d) { return colorRange(d.data.index1); });
-
-  g.append("text")
-      .attr("transform", function(d) { return "translate(" + arc.centroid(d) + ")"; })
-      .attr("dy", ".35em")
-      .style("text-anchor", "middle")
-      .attr("font-family", "sans-serif")
-      .attr("font-size", "10px")
-      .attr("text-anchor", "middle")
-      .text(function (d) {
-       var perc = d.data.percRawClustersPerLane + " %";
-       if (d.data.externalSampleName == undefined || d.data.externalSampleName.length > 10) {return d.data.index1 + "  " + perc}
-               return d.data.externalSampleName + "  " + perc })
-      .on("mouseover", function(d) {      
-            div.transition()        
-                .duration(200)      
-                .style("opacity", .9);      
-            div.style("width", Math.max(d.data.externalSampleName.length, d.data.index1.length) * 8 + "px")
-            div.html(d.data.externalSampleName + "<br/>" + d.data.index1 + "<br/>" + d.data.percRawClustersPerLane + " %")  
-                .style("left", (d3.event.pageX) + "px")     
-                .style("top", (d3.event.pageY - 42) + "px");    
-            })                  
-        .on("mouseout", function(d) {       
-            div.transition()        
-                .duration(500)      
-                .style("opacity", 0);   
-        });
-
-
-  svgPercRawClustersPerLaneChart.append('text')
-                   .text("% in Lane")
-                   .attr("fill", "black")
-                   .attr("transform", "translate(" + "0" + "," + (height -220) + ")")
-                   .attr("font-family", "sans-serif")
-                   .attr("font-size", "14px")
-                   .attr("text-anchor", "middle")
-                   ;
-
-}
-
-
-function downloadButton (buttonName) {
-
-
-  var div = d3.select("body").append("button")
-    .attr("class", "btn-xs")
-    .attr("type", "submit")
-    .attr("id", "save_as" + buttonName)
-    .attr("value", "")
-    .text("Save")
-    ;
-}
-
-  function submit_download_form(output_format, svgName)
-  {
-    var rawSampleName = webAppContext.entityIdentifier
-    var split = rawSampleName.split(":")
-    var fc = split[0].split("/")[2]
-    var lane = split[1]
-
-    // Get the d3js SVG element
-    var tmp = document.getElementById(svgName);
-
-    if (output_format == "svg") {
-
-      // Extract the data as SVG text string
-      var svg_xml = "<svg  xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">" + (new XMLSerializer).serializeToString(tmp) + "</svg>";
-
-      var blob = new Blob([svg_xml], {type: "image/svg+xml;charset=utf-8"});
-    }
-    if (output_format == "html") {
-      var html = "<html> <head> <title></title> <style type=\"text/css\">" + 
-        "table.tableStats { font-family: sans-serif; font-size: 14px; border-collapse:collapse; }" +
-        ".tableStats th { padding:6px 10px; color:#444; font-weight:bold; text-shadow:1px 1px 1px #fff; border-bottom:2px solid #444; }" +
-        ".tableStats tr:nth-child(even) { background: WhiteSmoke; }" +
-        ".tableStats td { padding:0px 10px 10px 10px; }" +
-        "</style> </head> <body>" +
-        (new XMLSerializer).serializeToString(tmp) +
-        "</body> </html>"
-      var blob = new Blob([html], {type: "image/html;charset=utf-8"});
-    }
-   if (output_format == "png") {
-       console.log("png")
-   }
-
-    saveAs(blob, fc + "_Lane_" + lane + "_" + svgName + "." + output_format);
-
-  }
-
-  </script>
-  </body>
-</html>
-
diff --git a/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/openbis-dsu.js b/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/openbis-dsu.js
deleted file mode 100644
index 31b23f08346..00000000000
--- a/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/openbis-dsu.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- * openbis-dsu.js
- * OpenBIS-DSU API
- *
- * A DSU-specific API for accessing openBIS. Depends on openbis.js.
- * @author Chandrasekhar Ramakrishnan
- */
-
-/**
- * The openbis_dsu object provides a dsu-specific interface to openbis. 
- * 
- * It creates objects for projects, experiments, samples, and datasets. These objects
- * are designed to be passed on to GUI libraries (like d3). The openbis version of each
- * object is stored in the bis variable.
- * @constructor
- */
-function openbis_dsu(url, dssUrl) {
-	this.server = new openbis(url, dssUrl);
-}
-
-/**
- * Request the sequencing samples for a project
- */
-openbis_dsu.prototype.retrieveSequencingSamples = function(action)
-{	
-	var sampleCriteria = 
-	{
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				attribute : "TYPE",
-				fieldType : "ATTRIBUTE",
-				desiredValue : "ILLUMINA_SEQUENCING" 
-			} ],
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	this.server.searchForSamples(sampleCriteria, action);
-}
-
-/**
- * Get the data sets for a sample specified by sample identifier
- */
-openbis_dsu.prototype.retrieveDataSetsForSample = function(sampleIdentifier, action)
-{
-    var sampleIdentifierTokens = sampleIdentifier.split("/");
-    var sampleCriteria = 
-    {
-	targetEntityKind : "SAMPLE",
-	criteria : { 
-	    matchClauses : 
-	    [ {"@type":"AttributeMatchClause",
-	       "attribute":"CODE",
-	       "fieldType":"ATTRIBUTE",
-	       "desiredValue": sampleIdentifierTokens[2]
-		}]
-	}
-    };
-	
-    var dataSetCriteria = 
-    {
-	subCriterias : [ sampleCriteria ],
-	matchClauses : 
-	[ {"@type":"AttributeMatchClause",
-	   attribute : "TYPE",
-	   fieldType : "ATTRIBUTE",
-	   desiredValue : "FASTQ_GZ" 
-	    } ],
-	operator : "MATCH_ALL_CLAUSES"
-    };
-
-    this.server.searchForDataSets(dataSetCriteria, action)
-}
-
-/**
- * Get all data sets connected to a sequencing sample
- */
-openbis_dsu.prototype.retrieveDataSetsForSequencingSample = function(sequencing, action)
-{
-	this.server.listDataSetsForSample(sequencing.bis, false, action);
-}
-
diff --git a/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/pie.js b/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/pie.js
deleted file mode 100755
index 4d6788a48bf..00000000000
--- a/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/pie.js
+++ /dev/null
@@ -1,94 +0,0 @@
-d3.layout.pie = function() {
-  var value = Number,
-      sort = d3_layout_pieSortByValue,
-      startAngle = 0,
-      endAngle = 2 * Math.PI;
-
-  function pie(data) {
-
-    // Compute the numeric values for each data element.
-    var values = data.map(function(d, i) { return +value.call(pie, d, i); });
-
-    // Compute the start angle.
-    var a = +(typeof startAngle === "function"
-        ? startAngle.apply(this, arguments)
-        : startAngle);
-
-    // Compute the angular scale factor: from value to radians.
-    var k = ((typeof endAngle === "function"
-        ? endAngle.apply(this, arguments)
-        : endAngle) - startAngle)
-        / d3.sum(values);
-
-    // Optionally sort the data.
-    var index = d3.range(data.length);
-    if (sort != null) index.sort(sort === d3_layout_pieSortByValue
-        ? function(i, j) { return values[j] - values[i]; }
-        : function(i, j) { return sort(data[i], data[j]); });
-
-    // Compute the arcs!
-    // They are stored in the original data's order.
-    var arcs = [];
-    index.forEach(function(i) {
-      var d;
-      arcs[i] = {
-        data: data[i],
-        value: d = values[i],
-        startAngle: a,
-        endAngle: a += d * k
-      };
-    });
-    return arcs;
-  }
-
-  /**
-   * Specifies the value function *x*, which returns a nonnegative numeric value
-   * for each datum. The default value function is `Number`. The value function
-   * is passed two arguments: the current datum and the current index.
-   */
-  pie.value = function(x) {
-    if (!arguments.length) return value;
-    value = x;
-    return pie;
-  };
-
-  /**
-   * Specifies a sort comparison operator *x*. The comparator is passed two data
-   * elements from the data array, a and b; it returns a negative value if a is
-   * less than b, a positive value if a is greater than b, and zero if a equals
-   * b.
-   */
-  pie.sort = function(x) {
-    if (!arguments.length) return sort;
-    sort = x;
-    return pie;
-  };
-
-  /**
-   * Specifies the overall start angle of the pie chart. Defaults to 0. The
-   * start angle can be specified either as a constant or as a function; in the
-   * case of a function, it is evaluated once per array (as opposed to per
-   * element).
-   */
-  pie.startAngle = function(x) {
-    if (!arguments.length) return startAngle;
-    startAngle = x;
-    return pie;
-  };
-
-  /**
-   * Specifies the overall end angle of the pie chart. Defaults to 2Ï€. The
-   * end angle can be specified either as a constant or as a function; in the
-   * case of a function, it is evaluated once per array (as opposed to per
-   * element).
-   */
-  pie.endAngle = function(x) {
-    if (!arguments.length) return endAngle;
-    endAngle = x;
-    return pie;
-  };
-
-  return pie;
-};
-
-var d3_layout_pieSortByValue = {};
diff --git a/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/style.css b/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/style.css
deleted file mode 100644
index 985d8ac6db0..00000000000
--- a/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/html/style.css
+++ /dev/null
@@ -1,47 +0,0 @@
-        .axis path,
-        .axis line {
-          fill: none;
-          stroke: #000;
-          shape-rendering: crispEdges;
-        }
-
-        .axis text {
-          font-family: sans-serif;
-          font-size: 10px;
-        }
-
-        table.tableStats {
-          font-family: sans-serif;
-          font-size: 14px;
-          border-collapse:collapse;
-        }
-
-        .tableStats th {
-          padding:6px 10px;
-          color:#444;
-          font-weight:bold;
-          text-shadow:1px 1px 1px #fff;
-          border-bottom:2px solid #444;
-        }
-
-        .tableStats tr:nth-child(even) {
-          background: WhiteSmoke;
-        }
-        .tableStats td {
-
-          padding:0px 10px 10px 10px;
-
-       }
-
-        div.tooltip {
-          position: absolute;
-          text-align: center;
-          width: 100px;
-          height: 42px;
-          padding: 2px;
-          font: 12px sans-serif;
-          background: LightSalmon;
-          border: 0px;
-          border-radius: 8px;
-          pointer-events: none;
-        }
diff --git a/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/plugin.properties b/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/plugin.properties
deleted file mode 100644
index bbdf23ed3bf..00000000000
--- a/deep_sequencing_unit/source/core-plugins/laneStatistics/1/as/webapps/laneStatistics/plugin.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-# The properties file for an example webapps plugin
-# This file has no properties defined because none need to be defined.
-webapp-folder = html
-openbisui-contexts = sample-details-view
-sample-entity-types = ILLUMINA_FLOW_LANE
-label = Lane Statistics (BETA)
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/css/bootstrap-responsive.css b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/css/bootstrap-responsive.css
deleted file mode 100644
index 06e55c0b45b..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/css/bootstrap-responsive.css
+++ /dev/null
@@ -1,815 +0,0 @@
-/*!
- * Bootstrap Responsive v2.0.4
- *
- * 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.
- */
-
-.clearfix {
-  *zoom: 1;
-}
-
-.clearfix:before,
-.clearfix:after {
-  display: table;
-  content: "";
-}
-
-.clearfix:after {
-  clear: both;
-}
-
-.hide-text {
-  font: 0/0 a;
-  color: transparent;
-  text-shadow: none;
-  background-color: transparent;
-  border: 0;
-}
-
-.input-block-level {
-  display: block;
-  width: 100%;
-  min-height: 28px;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-      -ms-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-.hidden {
-  display: none;
-  visibility: hidden;
-}
-
-.visible-phone {
-  display: none !important;
-}
-
-.visible-tablet {
-  display: none !important;
-}
-
-.hidden-desktop {
-  display: none !important;
-}
-
-@media (max-width: 767px) {
-  .visible-phone {
-    display: inherit !important;
-  }
-  .hidden-phone {
-    display: none !important;
-  }
-  .hidden-desktop {
-    display: inherit !important;
-  }
-  .visible-desktop {
-    display: none !important;
-  }
-}
-
-@media (min-width: 768px) and (max-width: 979px) {
-  .visible-tablet {
-    display: inherit !important;
-  }
-  .hidden-tablet {
-    display: none !important;
-  }
-  .hidden-desktop {
-    display: inherit !important;
-  }
-  .visible-desktop {
-    display: none !important ;
-  }
-}
-
-@media (max-width: 480px) {
-  .nav-collapse {
-    -webkit-transform: translate3d(0, 0, 0);
-  }
-  .page-header h1 small {
-    display: block;
-    line-height: 18px;
-  }
-  input[type="checkbox"],
-  input[type="radio"] {
-    border: 1px solid #ccc;
-  }
-  .form-horizontal .control-group > label {
-    float: none;
-    width: auto;
-    padding-top: 0;
-    text-align: left;
-  }
-  .form-horizontal .controls {
-    margin-left: 0;
-  }
-  .form-horizontal .control-list {
-    padding-top: 0;
-  }
-  .form-horizontal .form-actions {
-    padding-right: 10px;
-    padding-left: 10px;
-  }
-  .modal {
-    position: absolute;
-    top: 10px;
-    right: 10px;
-    left: 10px;
-    width: auto;
-    margin: 0;
-  }
-  .modal.fade.in {
-    top: auto;
-  }
-  .modal-header .close {
-    padding: 10px;
-    margin: -10px;
-  }
-  .carousel-caption {
-    position: static;
-  }
-}
-
-@media (max-width: 767px) {
-  body {
-    padding-right: 20px;
-    padding-left: 20px;
-  }
-  .navbar-fixed-top,
-  .navbar-fixed-bottom {
-    margin-right: -20px;
-    margin-left: -20px;
-  }
-  .container-fluid {
-    padding: 0;
-  }
-  .dl-horizontal dt {
-    float: none;
-    width: auto;
-    clear: none;
-    text-align: left;
-  }
-  .dl-horizontal dd {
-    margin-left: 0;
-  }
-  .container {
-    width: auto;
-  }
-  .row-fluid {
-    width: 100%;
-  }
-  .row,
-  .thumbnails {
-    margin-left: 0;
-  }
-  [class*="span"],
-  .row-fluid [class*="span"] {
-    display: block;
-    float: none;
-    width: auto;
-    margin-left: 0;
-  }
-  .input-large,
-  .input-xlarge,
-  .input-xxlarge,
-  input[class*="span"],
-  select[class*="span"],
-  textarea[class*="span"],
-  .uneditable-input {
-    display: block;
-    width: 100%;
-    min-height: 28px;
-    -webkit-box-sizing: border-box;
-       -moz-box-sizing: border-box;
-        -ms-box-sizing: border-box;
-            box-sizing: border-box;
-  }
-  .input-prepend input,
-  .input-append input,
-  .input-prepend input[class*="span"],
-  .input-append input[class*="span"] {
-    display: inline-block;
-    width: auto;
-  }
-}
-
-@media (min-width: 768px) and (max-width: 979px) {
-  .row {
-    margin-left: -20px;
-    *zoom: 1;
-  }
-  .row:before,
-  .row:after {
-    display: table;
-    content: "";
-  }
-  .row:after {
-    clear: both;
-  }
-  [class*="span"] {
-    float: left;
-    margin-left: 20px;
-  }
-  .container,
-  .navbar-fixed-top .container,
-  .navbar-fixed-bottom .container {
-    width: 724px;
-  }
-  .span12 {
-    width: 724px;
-  }
-  .span11 {
-    width: 662px;
-  }
-  .span10 {
-    width: 600px;
-  }
-  .span9 {
-    width: 538px;
-  }
-  .span8 {
-    width: 476px;
-  }
-  .span7 {
-    width: 414px;
-  }
-  .span6 {
-    width: 352px;
-  }
-  .span5 {
-    width: 290px;
-  }
-  .span4 {
-    width: 228px;
-  }
-  .span3 {
-    width: 166px;
-  }
-  .span2 {
-    width: 104px;
-  }
-  .span1 {
-    width: 42px;
-  }
-  .offset12 {
-    margin-left: 764px;
-  }
-  .offset11 {
-    margin-left: 702px;
-  }
-  .offset10 {
-    margin-left: 640px;
-  }
-  .offset9 {
-    margin-left: 578px;
-  }
-  .offset8 {
-    margin-left: 516px;
-  }
-  .offset7 {
-    margin-left: 454px;
-  }
-  .offset6 {
-    margin-left: 392px;
-  }
-  .offset5 {
-    margin-left: 330px;
-  }
-  .offset4 {
-    margin-left: 268px;
-  }
-  .offset3 {
-    margin-left: 206px;
-  }
-  .offset2 {
-    margin-left: 144px;
-  }
-  .offset1 {
-    margin-left: 82px;
-  }
-  .row-fluid {
-    width: 100%;
-    *zoom: 1;
-  }
-  .row-fluid:before,
-  .row-fluid:after {
-    display: table;
-    content: "";
-  }
-  .row-fluid:after {
-    clear: both;
-  }
-  .row-fluid [class*="span"] {
-    display: block;
-    float: left;
-    width: 100%;
-    min-height: 28px;
-    margin-left: 2.762430939%;
-    *margin-left: 2.709239449638298%;
-    -webkit-box-sizing: border-box;
-       -moz-box-sizing: border-box;
-        -ms-box-sizing: border-box;
-            box-sizing: border-box;
-  }
-  .row-fluid [class*="span"]:first-child {
-    margin-left: 0;
-  }
-  .row-fluid .span12 {
-    width: 99.999999993%;
-    *width: 99.9468085036383%;
-  }
-  .row-fluid .span11 {
-    width: 91.436464082%;
-    *width: 91.38327259263829%;
-  }
-  .row-fluid .span10 {
-    width: 82.87292817100001%;
-    *width: 82.8197366816383%;
-  }
-  .row-fluid .span9 {
-    width: 74.30939226%;
-    *width: 74.25620077063829%;
-  }
-  .row-fluid .span8 {
-    width: 65.74585634900001%;
-    *width: 65.6926648596383%;
-  }
-  .row-fluid .span7 {
-    width: 57.182320438000005%;
-    *width: 57.129128948638304%;
-  }
-  .row-fluid .span6 {
-    width: 48.618784527%;
-    *width: 48.5655930376383%;
-  }
-  .row-fluid .span5 {
-    width: 40.055248616%;
-    *width: 40.0020571266383%;
-  }
-  .row-fluid .span4 {
-    width: 31.491712705%;
-    *width: 31.4385212156383%;
-  }
-  .row-fluid .span3 {
-    width: 22.928176794%;
-    *width: 22.874985304638297%;
-  }
-  .row-fluid .span2 {
-    width: 14.364640883%;
-    *width: 14.311449393638298%;
-  }
-  .row-fluid .span1 {
-    width: 5.801104972%;
-    *width: 5.747913482638298%;
-  }
-  input,
-  textarea,
-  .uneditable-input {
-    margin-left: 0;
-  }
-  input.span12,
-  textarea.span12,
-  .uneditable-input.span12 {
-    width: 714px;
-  }
-  input.span11,
-  textarea.span11,
-  .uneditable-input.span11 {
-    width: 652px;
-  }
-  input.span10,
-  textarea.span10,
-  .uneditable-input.span10 {
-    width: 590px;
-  }
-  input.span9,
-  textarea.span9,
-  .uneditable-input.span9 {
-    width: 528px;
-  }
-  input.span8,
-  textarea.span8,
-  .uneditable-input.span8 {
-    width: 466px;
-  }
-  input.span7,
-  textarea.span7,
-  .uneditable-input.span7 {
-    width: 404px;
-  }
-  input.span6,
-  textarea.span6,
-  .uneditable-input.span6 {
-    width: 342px;
-  }
-  input.span5,
-  textarea.span5,
-  .uneditable-input.span5 {
-    width: 280px;
-  }
-  input.span4,
-  textarea.span4,
-  .uneditable-input.span4 {
-    width: 218px;
-  }
-  input.span3,
-  textarea.span3,
-  .uneditable-input.span3 {
-    width: 156px;
-  }
-  input.span2,
-  textarea.span2,
-  .uneditable-input.span2 {
-    width: 94px;
-  }
-  input.span1,
-  textarea.span1,
-  .uneditable-input.span1 {
-    width: 32px;
-  }
-}
-
-@media (min-width: 1200px) {
-  .row {
-    margin-left: -30px;
-    *zoom: 1;
-  }
-  .row:before,
-  .row:after {
-    display: table;
-    content: "";
-  }
-  .row:after {
-    clear: both;
-  }
-  [class*="span"] {
-    float: left;
-    margin-left: 30px;
-  }
-  .container,
-  .navbar-fixed-top .container,
-  .navbar-fixed-bottom .container {
-    width: 1170px;
-  }
-  .span12 {
-    width: 1170px;
-  }
-  .span11 {
-    width: 1070px;
-  }
-  .span10 {
-    width: 970px;
-  }
-  .span9 {
-    width: 870px;
-  }
-  .span8 {
-    width: 770px;
-  }
-  .span7 {
-    width: 670px;
-  }
-  .span6 {
-    width: 570px;
-  }
-  .span5 {
-    width: 470px;
-  }
-  .span4 {
-    width: 370px;
-  }
-  .span3 {
-    width: 270px;
-  }
-  .span2 {
-    width: 170px;
-  }
-  .span1 {
-    width: 70px;
-  }
-  .offset12 {
-    margin-left: 1230px;
-  }
-  .offset11 {
-    margin-left: 1130px;
-  }
-  .offset10 {
-    margin-left: 1030px;
-  }
-  .offset9 {
-    margin-left: 930px;
-  }
-  .offset8 {
-    margin-left: 830px;
-  }
-  .offset7 {
-    margin-left: 730px;
-  }
-  .offset6 {
-    margin-left: 630px;
-  }
-  .offset5 {
-    margin-left: 530px;
-  }
-  .offset4 {
-    margin-left: 430px;
-  }
-  .offset3 {
-    margin-left: 330px;
-  }
-  .offset2 {
-    margin-left: 230px;
-  }
-  .offset1 {
-    margin-left: 130px;
-  }
-  .row-fluid {
-    width: 100%;
-    *zoom: 1;
-  }
-  .row-fluid:before,
-  .row-fluid:after {
-    display: table;
-    content: "";
-  }
-  .row-fluid:after {
-    clear: both;
-  }
-  .row-fluid [class*="span"] {
-    display: block;
-    float: left;
-    width: 100%;
-    min-height: 28px;
-    margin-left: 2.564102564%;
-    *margin-left: 2.510911074638298%;
-    -webkit-box-sizing: border-box;
-       -moz-box-sizing: border-box;
-        -ms-box-sizing: border-box;
-            box-sizing: border-box;
-  }
-  .row-fluid [class*="span"]:first-child {
-    margin-left: 0;
-  }
-  .row-fluid .span12 {
-    width: 100%;
-    *width: 99.94680851063829%;
-  }
-  .row-fluid .span11 {
-    width: 91.45299145300001%;
-    *width: 91.3997999636383%;
-  }
-  .row-fluid .span10 {
-    width: 82.905982906%;
-    *width: 82.8527914166383%;
-  }
-  .row-fluid .span9 {
-    width: 74.358974359%;
-    *width: 74.30578286963829%;
-  }
-  .row-fluid .span8 {
-    width: 65.81196581200001%;
-    *width: 65.7587743226383%;
-  }
-  .row-fluid .span7 {
-    width: 57.264957265%;
-    *width: 57.2117657756383%;
-  }
-  .row-fluid .span6 {
-    width: 48.717948718%;
-    *width: 48.6647572286383%;
-  }
-  .row-fluid .span5 {
-    width: 40.170940171000005%;
-    *width: 40.117748681638304%;
-  }
-  .row-fluid .span4 {
-    width: 31.623931624%;
-    *width: 31.5707401346383%;
-  }
-  .row-fluid .span3 {
-    width: 23.076923077%;
-    *width: 23.0237315876383%;
-  }
-  .row-fluid .span2 {
-    width: 14.529914530000001%;
-    *width: 14.4767230406383%;
-  }
-  .row-fluid .span1 {
-    width: 5.982905983%;
-    *width: 5.929714493638298%;
-  }
-  input,
-  textarea,
-  .uneditable-input {
-    margin-left: 0;
-  }
-  input.span12,
-  textarea.span12,
-  .uneditable-input.span12 {
-    width: 1160px;
-  }
-  input.span11,
-  textarea.span11,
-  .uneditable-input.span11 {
-    width: 1060px;
-  }
-  input.span10,
-  textarea.span10,
-  .uneditable-input.span10 {
-    width: 960px;
-  }
-  input.span9,
-  textarea.span9,
-  .uneditable-input.span9 {
-    width: 860px;
-  }
-  input.span8,
-  textarea.span8,
-  .uneditable-input.span8 {
-    width: 760px;
-  }
-  input.span7,
-  textarea.span7,
-  .uneditable-input.span7 {
-    width: 660px;
-  }
-  input.span6,
-  textarea.span6,
-  .uneditable-input.span6 {
-    width: 560px;
-  }
-  input.span5,
-  textarea.span5,
-  .uneditable-input.span5 {
-    width: 460px;
-  }
-  input.span4,
-  textarea.span4,
-  .uneditable-input.span4 {
-    width: 360px;
-  }
-  input.span3,
-  textarea.span3,
-  .uneditable-input.span3 {
-    width: 260px;
-  }
-  input.span2,
-  textarea.span2,
-  .uneditable-input.span2 {
-    width: 160px;
-  }
-  input.span1,
-  textarea.span1,
-  .uneditable-input.span1 {
-    width: 60px;
-  }
-  .thumbnails {
-    margin-left: -30px;
-  }
-  .thumbnails > li {
-    margin-left: 30px;
-  }
-  .row-fluid .thumbnails {
-    margin-left: 0;
-  }
-}
-
-@media (max-width: 979px) {
-  body {
-    padding-top: 0;
-  }
-  .navbar-fixed-top,
-  .navbar-fixed-bottom {
-    position: static;
-  }
-  .navbar-fixed-top {
-    margin-bottom: 18px;
-  }
-  .navbar-fixed-bottom {
-    margin-top: 18px;
-  }
-  .navbar-fixed-top .navbar-inner,
-  .navbar-fixed-bottom .navbar-inner {
-    padding: 5px;
-  }
-  .navbar .container {
-    width: auto;
-    padding: 0;
-  }
-  .navbar .brand {
-    padding-right: 10px;
-    padding-left: 10px;
-    margin: 0 0 0 -5px;
-  }
-  .nav-collapse {
-    clear: both;
-  }
-  .nav-collapse .nav {
-    float: none;
-    margin: 0 0 9px;
-  }
-  .nav-collapse .nav > li {
-    float: none;
-  }
-  .nav-collapse .nav > li > a {
-    margin-bottom: 2px;
-  }
-  .nav-collapse .nav > .divider-vertical {
-    display: none;
-  }
-  .nav-collapse .nav .nav-header {
-    color: #999999;
-    text-shadow: none;
-  }
-  .nav-collapse .nav > li > a,
-  .nav-collapse .dropdown-menu a {
-    padding: 6px 15px;
-    font-weight: bold;
-    color: #999999;
-    -webkit-border-radius: 3px;
-       -moz-border-radius: 3px;
-            border-radius: 3px;
-  }
-  .nav-collapse .btn {
-    padding: 4px 10px 4px;
-    font-weight: normal;
-    -webkit-border-radius: 4px;
-       -moz-border-radius: 4px;
-            border-radius: 4px;
-  }
-  .nav-collapse .dropdown-menu li + li a {
-    margin-bottom: 2px;
-  }
-  .nav-collapse .nav > li > a:hover,
-  .nav-collapse .dropdown-menu a:hover {
-    background-color: #222222;
-  }
-  .nav-collapse.in .btn-group {
-    padding: 0;
-    margin-top: 5px;
-  }
-  .nav-collapse .dropdown-menu {
-    position: static;
-    top: auto;
-    left: auto;
-    display: block;
-    float: none;
-    max-width: none;
-    padding: 0;
-    margin: 0 15px;
-    background-color: transparent;
-    border: none;
-    -webkit-border-radius: 0;
-       -moz-border-radius: 0;
-            border-radius: 0;
-    -webkit-box-shadow: none;
-       -moz-box-shadow: none;
-            box-shadow: none;
-  }
-  .nav-collapse .dropdown-menu:before,
-  .nav-collapse .dropdown-menu:after {
-    display: none;
-  }
-  .nav-collapse .dropdown-menu .divider {
-    display: none;
-  }
-  .nav-collapse .navbar-form,
-  .nav-collapse .navbar-search {
-    float: none;
-    padding: 9px 15px;
-    margin: 9px 0;
-    border-top: 1px solid #222222;
-    border-bottom: 1px solid #222222;
-    -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
-       -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
-            box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
-  }
-  .navbar .nav-collapse .nav.pull-right {
-    float: none;
-    margin-left: 0;
-  }
-  .nav-collapse,
-  .nav-collapse.collapse {
-    height: 0;
-    overflow: hidden;
-  }
-  .navbar .btn-navbar {
-    display: block;
-  }
-  .navbar-static .navbar-inner {
-    padding-right: 10px;
-    padding-left: 10px;
-  }
-}
-
-@media (min-width: 980px) {
-  .nav-collapse.collapse {
-    height: auto !important;
-    overflow: visible !important;
-  }
-}
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/css/bootstrap.css b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/css/bootstrap.css
deleted file mode 100644
index 8c6fea7a84e..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/css/bootstrap.css
+++ /dev/null
@@ -1,4984 +0,0 @@
-/*!
- * Bootstrap v2.0.4
- *
- * 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 #333;
-  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%;
-  vertical-align: middle;
-  border: 0;
-  -ms-interpolation-mode: bicubic;
-}
-
-#map_canvas img {
-  max-width: none;
-}
-
-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-box-sizing: content-box;
-     -moz-box-sizing: content-box;
-          box-sizing: content-box;
-  -webkit-appearance: textfield;
-}
-
-input[type="search"]::-webkit-search-decoration,
-input[type="search"]::-webkit-search-cancel-button {
-  -webkit-appearance: none;
-}
-
-textarea {
-  overflow: auto;
-  vertical-align: top;
-}
-
-.clearfix {
-  *zoom: 1;
-}
-
-.clearfix:before,
-.clearfix:after {
-  display: table;
-  content: "";
-}
-
-.clearfix:after {
-  clear: both;
-}
-
-.hide-text {
-  font: 0/0 a;
-  color: transparent;
-  text-shadow: none;
-  background-color: transparent;
-  border: 0;
-}
-
-.input-block-level {
-  display: block;
-  width: 100%;
-  min-height: 28px;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-      -ms-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-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;
-}
-
-.container,
-.navbar-fixed-top .container,
-.navbar-fixed-bottom .container {
-  width: 940px;
-}
-
-.span12 {
-  width: 940px;
-}
-
-.span11 {
-  width: 860px;
-}
-
-.span10 {
-  width: 780px;
-}
-
-.span9 {
-  width: 700px;
-}
-
-.span8 {
-  width: 620px;
-}
-
-.span7 {
-  width: 540px;
-}
-
-.span6 {
-  width: 460px;
-}
-
-.span5 {
-  width: 380px;
-}
-
-.span4 {
-  width: 300px;
-}
-
-.span3 {
-  width: 220px;
-}
-
-.span2 {
-  width: 140px;
-}
-
-.span1 {
-  width: 60px;
-}
-
-.offset12 {
-  margin-left: 980px;
-}
-
-.offset11 {
-  margin-left: 900px;
-}
-
-.offset10 {
-  margin-left: 820px;
-}
-
-.offset9 {
-  margin-left: 740px;
-}
-
-.offset8 {
-  margin-left: 660px;
-}
-
-.offset7 {
-  margin-left: 580px;
-}
-
-.offset6 {
-  margin-left: 500px;
-}
-
-.offset5 {
-  margin-left: 420px;
-}
-
-.offset4 {
-  margin-left: 340px;
-}
-
-.offset3 {
-  margin-left: 260px;
-}
-
-.offset2 {
-  margin-left: 180px;
-}
-
-.offset1 {
-  margin-left: 100px;
-}
-
-.row-fluid {
-  width: 100%;
-  *zoom: 1;
-}
-
-.row-fluid:before,
-.row-fluid:after {
-  display: table;
-  content: "";
-}
-
-.row-fluid:after {
-  clear: both;
-}
-
-.row-fluid [class*="span"] {
-  display: block;
-  float: left;
-  width: 100%;
-  min-height: 28px;
-  margin-left: 2.127659574%;
-  *margin-left: 2.0744680846382977%;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-      -ms-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-.row-fluid [class*="span"]:first-child {
-  margin-left: 0;
-}
-
-.row-fluid .span12 {
-  width: 99.99999998999999%;
-  *width: 99.94680850063828%;
-}
-
-.row-fluid .span11 {
-  width: 91.489361693%;
-  *width: 91.4361702036383%;
-}
-
-.row-fluid .span10 {
-  width: 82.97872339599999%;
-  *width: 82.92553190663828%;
-}
-
-.row-fluid .span9 {
-  width: 74.468085099%;
-  *width: 74.4148936096383%;
-}
-
-.row-fluid .span8 {
-  width: 65.95744680199999%;
-  *width: 65.90425531263828%;
-}
-
-.row-fluid .span7 {
-  width: 57.446808505%;
-  *width: 57.3936170156383%;
-}
-
-.row-fluid .span6 {
-  width: 48.93617020799999%;
-  *width: 48.88297871863829%;
-}
-
-.row-fluid .span5 {
-  width: 40.425531911%;
-  *width: 40.3723404216383%;
-}
-
-.row-fluid .span4 {
-  width: 31.914893614%;
-  *width: 31.8617021246383%;
-}
-
-.row-fluid .span3 {
-  width: 23.404255317%;
-  *width: 23.3510638276383%;
-}
-
-.row-fluid .span2 {
-  width: 14.89361702%;
-  *width: 14.8404255306383%;
-}
-
-.row-fluid .span1 {
-  width: 6.382978723%;
-  *width: 6.329787233638298%;
-}
-
-.container {
-  margin-right: auto;
-  margin-left: auto;
-  *zoom: 1;
-}
-
-.container:before,
-.container:after {
-  display: table;
-  content: "";
-}
-
-.container:after {
-  clear: both;
-}
-
-.container-fluid {
-  padding-right: 20px;
-  padding-left: 20px;
-  *zoom: 1;
-}
-
-.container-fluid:before,
-.container-fluid:after {
-  display: table;
-  content: "";
-}
-
-.container-fluid:after {
-  clear: both;
-}
-
-p {
-  margin: 0 0 9px;
-}
-
-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-family: inherit;
-  font-weight: bold;
-  color: inherit;
-  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 {
-  font-size: 18px;
-  line-height: 27px;
-}
-
-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,
-ol.unstyled {
-  margin-left: 0;
-  list-style: none;
-}
-
-dl {
-  margin-bottom: 18px;
-}
-
-dt,
-dd {
-  line-height: 18px;
-}
-
-dt {
-  font-weight: bold;
-  line-height: 17px;
-}
-
-dd {
-  margin-left: 9px;
-}
-
-.dl-horizontal dt {
-  float: left;
-  width: 120px;
-  overflow: hidden;
-  clear: left;
-  text-align: right;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-
-.dl-horizontal dd {
-  margin-left: 130px;
-}
-
-hr {
-  margin: 18px 0;
-  border: 0;
-  border-top: 1px solid #eeeeee;
-  border-bottom: 1px solid #ffffff;
-}
-
-strong {
-  font-weight: bold;
-}
-
-em {
-  font-style: italic;
-}
-
-.muted {
-  color: #999999;
-}
-
-abbr[title] {
-  cursor: help;
-  border-bottom: 1px dotted #999999;
-}
-
-abbr.initialism {
-  font-size: 90%;
-  text-transform: uppercase;
-}
-
-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-right: 15px;
-  padding-left: 0;
-  border-right: 5px solid #eeeeee;
-  border-left: 0;
-}
-
-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;
-  font-style: normal;
-  line-height: 18px;
-}
-
-small {
-  font-size: 100%;
-}
-
-cite {
-  font-style: normal;
-}
-
-code,
-pre {
-  padding: 0 3px 2px;
-  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
-  font-size: 12px;
-  color: #333333;
-  -webkit-border-radius: 3px;
-     -moz-border-radius: 3px;
-          border-radius: 3px;
-}
-
-code {
-  padding: 2px 4px;
-  color: #d14;
-  background-color: #f7f7f9;
-  border: 1px solid #e1e1e8;
-}
-
-pre {
-  display: block;
-  padding: 8.5px;
-  margin: 0 0 9px;
-  font-size: 12.025px;
-  line-height: 18px;
-  word-break: break-all;
-  word-wrap: break-word;
-  white-space: pre;
-  white-space: pre-wrap;
-  background-color: #f5f5f5;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, 0.15);
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-}
-
-pre.prettyprint {
-  margin-bottom: 18px;
-}
-
-pre code {
-  padding: 0;
-  color: inherit;
-  background-color: transparent;
-  border: 0;
-}
-
-.pre-scrollable {
-  max-height: 340px;
-  overflow-y: scroll;
-}
-
-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 #e5e5e5;
-}
-
-legend small {
-  font-size: 13.5px;
-  color: #999999;
-}
-
-label,
-input,
-button,
-select,
-textarea {
-  font-size: 13px;
-  font-weight: normal;
-  line-height: 18px;
-}
-
-input,
-button,
-select,
-textarea {
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-}
-
-label {
-  display: block;
-  margin-bottom: 5px;
-}
-
-select,
-textarea,
-input[type="text"],
-input[type="password"],
-input[type="datetime"],
-input[type="datetime-local"],
-input[type="date"],
-input[type="month"],
-input[type="time"],
-input[type="week"],
-input[type="number"],
-input[type="email"],
-input[type="url"],
-input[type="search"],
-input[type="tel"],
-input[type="color"],
-.uneditable-input {
-  display: inline-block;
-  height: 18px;
-  padding: 4px;
-  margin-bottom: 9px;
-  font-size: 13px;
-  line-height: 18px;
-  color: #555555;
-}
-
-input,
-textarea {
-  width: 210px;
-}
-
-textarea {
-  height: auto;
-}
-
-textarea,
-input[type="text"],
-input[type="password"],
-input[type="datetime"],
-input[type="datetime-local"],
-input[type="date"],
-input[type="month"],
-input[type="time"],
-input[type="week"],
-input[type="number"],
-input[type="email"],
-input[type="url"],
-input[type="search"],
-input[type="tel"],
-input[type="color"],
-.uneditable-input {
-  background-color: #ffffff;
-  border: 1px solid #cccccc;
-  -webkit-border-radius: 3px;
-     -moz-border-radius: 3px;
-          border-radius: 3px;
-  -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;
-}
-
-textarea:focus,
-input[type="text"]:focus,
-input[type="password"]:focus,
-input[type="datetime"]:focus,
-input[type="datetime-local"]:focus,
-input[type="date"]:focus,
-input[type="month"]:focus,
-input[type="time"]:focus,
-input[type="week"]:focus,
-input[type="number"]:focus,
-input[type="email"]:focus,
-input[type="url"]:focus,
-input[type="search"]:focus,
-input[type="tel"]:focus,
-input[type="color"]:focus,
-.uneditable-input:focus {
-  border-color: rgba(82, 168, 236, 0.8);
-  outline: 0;
-  outline: thin dotted \9;
-  /* IE6-9 */
-
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-}
-
-input[type="radio"],
-input[type="checkbox"] {
-  margin: 3px 0;
-  *margin-top: 0;
-  /* IE7 */
-
-  line-height: normal;
-  cursor: pointer;
-}
-
-input[type="submit"],
-input[type="reset"],
-input[type="button"],
-input[type="radio"],
-input[type="checkbox"] {
-  width: auto;
-}
-
-.uneditable-textarea {
-  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;
-  border: 1px solid #bbb;
-}
-
-select[multiple],
-select[size] {
-  height: auto;
-}
-
-select:focus,
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
-  outline: thin dotted #333;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-
-.radio,
-.checkbox {
-  min-height: 18px;
-  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;
-  padding-top: 5px;
-  margin-bottom: 0;
-  vertical-align: middle;
-}
-
-.radio.inline + .radio.inline,
-.checkbox.inline + .checkbox.inline {
-  margin-left: 10px;
-}
-
-.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[class*="span"],
-.row-fluid input[class*="span"],
-.row-fluid select[class*="span"],
-.row-fluid textarea[class*="span"],
-.row-fluid .uneditable-input[class*="span"] {
-  float: none;
-  margin-left: 0;
-}
-
-.input-append input[class*="span"],
-.input-append .uneditable-input[class*="span"],
-.input-prepend input[class*="span"],
-.input-prepend .uneditable-input[class*="span"],
-.row-fluid .input-prepend [class*="span"],
-.row-fluid .input-append [class*="span"] {
-  display: inline-block;
-}
-
-input,
-textarea,
-.uneditable-input {
-  margin-left: 0;
-}
-
-input.span12,
-textarea.span12,
-.uneditable-input.span12 {
-  width: 930px;
-}
-
-input.span11,
-textarea.span11,
-.uneditable-input.span11 {
-  width: 850px;
-}
-
-input.span10,
-textarea.span10,
-.uneditable-input.span10 {
-  width: 770px;
-}
-
-input.span9,
-textarea.span9,
-.uneditable-input.span9 {
-  width: 690px;
-}
-
-input.span8,
-textarea.span8,
-.uneditable-input.span8 {
-  width: 610px;
-}
-
-input.span7,
-textarea.span7,
-.uneditable-input.span7 {
-  width: 530px;
-}
-
-input.span6,
-textarea.span6,
-.uneditable-input.span6 {
-  width: 450px;
-}
-
-input.span5,
-textarea.span5,
-.uneditable-input.span5 {
-  width: 370px;
-}
-
-input.span4,
-textarea.span4,
-.uneditable-input.span4 {
-  width: 290px;
-}
-
-input.span3,
-textarea.span3,
-.uneditable-input.span3 {
-  width: 210px;
-}
-
-input.span2,
-textarea.span2,
-.uneditable-input.span2 {
-  width: 130px;
-}
-
-input.span1,
-textarea.span1,
-.uneditable-input.span1 {
-  width: 50px;
-}
-
-input[disabled],
-select[disabled],
-textarea[disabled],
-input[readonly],
-select[readonly],
-textarea[readonly] {
-  cursor: not-allowed;
-  background-color: #eeeeee;
-  border-color: #ddd;
-}
-
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-input[type="radio"][readonly],
-input[type="checkbox"][readonly] {
-  background-color: transparent;
-}
-
-.control-group.warning > label,
-.control-group.warning .help-block,
-.control-group.warning .help-inline {
-  color: #c09853;
-}
-
-.control-group.warning .checkbox,
-.control-group.warning .radio,
-.control-group.warning input,
-.control-group.warning select,
-.control-group.warning textarea {
-  color: #c09853;
-  border-color: #c09853;
-}
-
-.control-group.warning .checkbox:focus,
-.control-group.warning .radio:focus,
-.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 .checkbox,
-.control-group.error .radio,
-.control-group.error input,
-.control-group.error select,
-.control-group.error textarea {
-  color: #b94a48;
-  border-color: #b94a48;
-}
-
-.control-group.error .checkbox:focus,
-.control-group.error .radio:focus,
-.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 .checkbox,
-.control-group.success .radio,
-.control-group.success input,
-.control-group.success select,
-.control-group.success textarea {
-  color: #468847;
-  border-color: #468847;
-}
-
-.control-group.success .checkbox:focus,
-.control-group.success .radio:focus,
-.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 #e5e5e5;
-  *zoom: 1;
-}
-
-.form-actions:before,
-.form-actions:after {
-  display: table;
-  content: "";
-}
-
-.form-actions:after {
-  clear: both;
-}
-
-.uneditable-input {
-  overflow: hidden;
-  white-space: nowrap;
-  cursor: not-allowed;
-  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);
-}
-
-:-moz-placeholder {
-  color: #999999;
-}
-
-:-ms-input-placeholder {
-  color: #999999;
-}
-
-::-webkit-input-placeholder {
-  color: #999999;
-}
-
-.help-block,
-.help-inline {
-  color: #555555;
-}
-
-.help-block {
-  display: block;
-  margin-bottom: 9px;
-}
-
-.help-inline {
-  display: inline-block;
-  *display: inline;
-  padding-left: 5px;
-  vertical-align: middle;
-  *zoom: 1;
-}
-
-.input-prepend,
-.input-append {
-  margin-bottom: 5px;
-}
-
-.input-prepend input,
-.input-append input,
-.input-prepend select,
-.input-append select,
-.input-prepend .uneditable-input,
-.input-append .uneditable-input {
-  position: relative;
-  margin-bottom: 0;
-  *margin-left: 0;
-  vertical-align: middle;
-  -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 select:focus,
-.input-append select:focus,
-.input-prepend .uneditable-input:focus,
-.input-append .uneditable-input:focus {
-  z-index: 2;
-}
-
-.input-prepend .uneditable-input,
-.input-append .uneditable-input {
-  border-left-color: #ccc;
-}
-
-.input-prepend .add-on,
-.input-append .add-on {
-  display: inline-block;
-  width: auto;
-  height: 18px;
-  min-width: 16px;
-  padding: 4px 5px;
-  font-weight: normal;
-  line-height: 18px;
-  text-align: center;
-  text-shadow: 0 1px 0 #ffffff;
-  vertical-align: middle;
-  background-color: #eeeeee;
-  border: 1px solid #ccc;
-}
-
-.input-prepend .add-on,
-.input-append .add-on,
-.input-prepend .btn,
-.input-append .btn {
-  margin-left: -1px;
-  -webkit-border-radius: 0;
-     -moz-border-radius: 0;
-          border-radius: 0;
-}
-
-.input-prepend .active,
-.input-append .active {
-  background-color: #a9dba9;
-  border-color: #46a546;
-}
-
-.input-prepend .add-on,
-.input-prepend .btn {
-  margin-right: -1px;
-}
-
-.input-prepend .add-on:first-child,
-.input-prepend .btn:first-child {
-  -webkit-border-radius: 3px 0 0 3px;
-     -moz-border-radius: 3px 0 0 3px;
-          border-radius: 3px 0 0 3px;
-}
-
-.input-append input,
-.input-append select,
-.input-append .uneditable-input {
-  -webkit-border-radius: 3px 0 0 3px;
-     -moz-border-radius: 3px 0 0 3px;
-          border-radius: 3px 0 0 3px;
-}
-
-.input-append .uneditable-input {
-  border-right-color: #ccc;
-  border-left-color: #eee;
-}
-
-.input-append .add-on:last-child,
-.input-append .btn:last-child {
-  -webkit-border-radius: 0 3px 3px 0;
-     -moz-border-radius: 0 3px 3px 0;
-          border-radius: 0 3px 3px 0;
-}
-
-.input-prepend.input-append input,
-.input-prepend.input-append select,
-.input-prepend.input-append .uneditable-input {
-  -webkit-border-radius: 0;
-     -moz-border-radius: 0;
-          border-radius: 0;
-}
-
-.input-prepend.input-append .add-on:first-child,
-.input-prepend.input-append .btn:first-child {
-  margin-right: -1px;
-  -webkit-border-radius: 3px 0 0 3px;
-     -moz-border-radius: 3px 0 0 3px;
-          border-radius: 3px 0 0 3px;
-}
-
-.input-prepend.input-append .add-on:last-child,
-.input-prepend.input-append .btn:last-child {
-  margin-left: -1px;
-  -webkit-border-radius: 0 3px 3px 0;
-     -moz-border-radius: 0 3px 3px 0;
-          border-radius: 0 3px 3px 0;
-}
-
-.search-query {
-  padding-right: 14px;
-  padding-right: 4px \9;
-  padding-left: 14px;
-  padding-left: 4px \9;
-  /* IE7-8 doesn't have border-radius, so don't indent the padding */
-
-  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,
-.form-search .input-prepend,
-.form-inline .input-prepend,
-.form-horizontal .input-prepend,
-.form-search .input-append,
-.form-inline .input-append,
-.form-horizontal .input-append {
-  display: inline-block;
-  *display: inline;
-  margin-bottom: 0;
-  *zoom: 1;
-}
-
-.form-search .hide,
-.form-inline .hide,
-.form-horizontal .hide {
-  display: none;
-}
-
-.form-search label,
-.form-inline label {
-  display: inline-block;
-}
-
-.form-search .input-append,
-.form-inline .input-append,
-.form-search .input-prepend,
-.form-inline .input-prepend {
-  margin-bottom: 0;
-}
-
-.form-search .radio,
-.form-search .checkbox,
-.form-inline .radio,
-.form-inline .checkbox {
-  padding-left: 0;
-  margin-bottom: 0;
-  vertical-align: middle;
-}
-
-.form-search .radio input[type="radio"],
-.form-search .checkbox input[type="checkbox"],
-.form-inline .radio input[type="radio"],
-.form-inline .checkbox input[type="checkbox"] {
-  float: left;
-  margin-right: 3px;
-  margin-left: 0;
-}
-
-.control-group {
-  margin-bottom: 9px;
-}
-
-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-label {
-  float: left;
-  width: 140px;
-  padding-top: 5px;
-  text-align: right;
-}
-
-.form-horizontal .controls {
-  *display: inline-block;
-  *padding-left: 20px;
-  margin-left: 160px;
-  *margin-left: 0;
-}
-
-.form-horizontal .controls:first-child {
-  *padding-left: 160px;
-}
-
-.form-horizontal .help-block {
-  margin-top: 9px;
-  margin-bottom: 0;
-}
-
-.form-horizontal .form-actions {
-  padding-left: 160px;
-}
-
-table {
-  max-width: 100%;
-  background-color: transparent;
-  border-collapse: collapse;
-  border-spacing: 0;
-}
-
-.table {
-  width: 100%;
-  margin-bottom: 18px;
-}
-
-.table th,
-.table td {
-  padding: 8px;
-  line-height: 18px;
-  text-align: left;
-  vertical-align: top;
-  border-top: 1px solid #dddddd;
-}
-
-.table th {
-  font-weight: bold;
-}
-
-.table thead th {
-  vertical-align: bottom;
-}
-
-.table caption + thead tr:first-child th,
-.table caption + thead tr:first-child td,
-.table colgroup + thead tr:first-child th,
-.table colgroup + thead tr:first-child td,
-.table thead:first-child tr:first-child th,
-.table thead:first-child tr:first-child td {
-  border-top: 0;
-}
-
-.table tbody + tbody {
-  border-top: 2px solid #dddddd;
-}
-
-.table-condensed th,
-.table-condensed td {
-  padding: 4px 5px;
-}
-
-.table-bordered {
-  border: 1px solid #dddddd;
-  border-collapse: separate;
-  *border-collapse: collapsed;
-  border-left: 0;
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-}
-
-.table-bordered th,
-.table-bordered td {
-  border-left: 1px solid #dddddd;
-}
-
-.table-bordered caption + thead tr:first-child th,
-.table-bordered caption + tbody tr:first-child th,
-.table-bordered caption + tbody tr:first-child td,
-.table-bordered colgroup + thead tr:first-child th,
-.table-bordered colgroup + tbody tr:first-child th,
-.table-bordered colgroup + tbody tr:first-child td,
-.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-top-left-radius: 4px;
-          border-top-left-radius: 4px;
-  -moz-border-radius-topleft: 4px;
-}
-
-.table-bordered thead:first-child tr:first-child th:last-child,
-.table-bordered tbody:first-child tr:first-child td:last-child {
-  -webkit-border-top-right-radius: 4px;
-          border-top-right-radius: 4px;
-  -moz-border-radius-topright: 4px;
-}
-
-.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;
-  -webkit-border-bottom-left-radius: 4px;
-          border-bottom-left-radius: 4px;
-  -moz-border-radius-bottomleft: 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-bottom-right-radius: 4px;
-          border-bottom-right-radius: 4px;
-  -moz-border-radius-bottomright: 4px;
-}
-
-.table-striped tbody tr:nth-child(odd) td,
-.table-striped tbody tr:nth-child(odd) th {
-  background-color: #f9f9f9;
-}
-
-.table tbody tr:hover td,
-.table tbody tr:hover th {
-  background-color: #f5f5f5;
-}
-
-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;
-}
-
-table .span13 {
-  float: none;
-  width: 1004px;
-  margin-left: 0;
-}
-
-table .span14 {
-  float: none;
-  width: 1084px;
-  margin-left: 0;
-}
-
-table .span15 {
-  float: none;
-  width: 1164px;
-  margin-left: 0;
-}
-
-table .span16 {
-  float: none;
-  width: 1244px;
-  margin-left: 0;
-}
-
-table .span17 {
-  float: none;
-  width: 1324px;
-  margin-left: 0;
-}
-
-table .span18 {
-  float: none;
-  width: 1404px;
-  margin-left: 0;
-}
-
-table .span19 {
-  float: none;
-  width: 1484px;
-  margin-left: 0;
-}
-
-table .span20 {
-  float: none;
-  width: 1564px;
-  margin-left: 0;
-}
-
-table .span21 {
-  float: none;
-  width: 1644px;
-  margin-left: 0;
-}
-
-table .span22 {
-  float: none;
-  width: 1724px;
-  margin-left: 0;
-}
-
-table .span23 {
-  float: none;
-  width: 1804px;
-  margin-left: 0;
-}
-
-table .span24 {
-  float: none;
-  width: 1884px;
-  margin-left: 0;
-}
-
-[class^="icon-"],
-[class*=" icon-"] {
-  display: inline-block;
-  width: 14px;
-  height: 14px;
-  *margin-right: .3em;
-  line-height: 14px;
-  vertical-align: text-top;
-  background-image: url("../img/glyphicons-halflings.png");
-  background-position: 14px 14px;
-  background-repeat: no-repeat;
-}
-
-[class^="icon-"]:last-child,
-[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;
-}
-
-.icon-hdd {
-  background-position: 0 -144px;
-}
-
-.icon-bullhorn {
-  background-position: -24px -144px;
-}
-
-.icon-bell {
-  background-position: -48px -144px;
-}
-
-.icon-certificate {
-  background-position: -72px -144px;
-}
-
-.icon-thumbs-up {
-  background-position: -96px -144px;
-}
-
-.icon-thumbs-down {
-  background-position: -120px -144px;
-}
-
-.icon-hand-right {
-  background-position: -144px -144px;
-}
-
-.icon-hand-left {
-  background-position: -168px -144px;
-}
-
-.icon-hand-up {
-  background-position: -192px -144px;
-}
-
-.icon-hand-down {
-  background-position: -216px -144px;
-}
-
-.icon-circle-arrow-right {
-  background-position: -240px -144px;
-}
-
-.icon-circle-arrow-left {
-  background-position: -264px -144px;
-}
-
-.icon-circle-arrow-up {
-  background-position: -288px -144px;
-}
-
-.icon-circle-arrow-down {
-  background-position: -312px -144px;
-}
-
-.icon-globe {
-  background-position: -336px -144px;
-}
-
-.icon-wrench {
-  background-position: -360px -144px;
-}
-
-.icon-tasks {
-  background-position: -384px -144px;
-}
-
-.icon-filter {
-  background-position: -408px -144px;
-}
-
-.icon-briefcase {
-  background-position: -432px -144px;
-}
-
-.icon-fullscreen {
-  background-position: -456px -144px;
-}
-
-.dropup,
-.dropdown {
-  position: relative;
-}
-
-.dropdown-toggle {
-  *margin-bottom: -3px;
-}
-
-.dropdown-toggle:active,
-.open .dropdown-toggle {
-  outline: 0;
-}
-
-.caret {
-  display: inline-block;
-  width: 0;
-  height: 0;
-  vertical-align: top;
-  border-top: 4px solid #000000;
-  border-right: 4px solid transparent;
-  border-left: 4px solid transparent;
-  content: "";
-  opacity: 0.3;
-  filter: alpha(opacity=30);
-}
-
-.dropdown .caret {
-  margin-top: 8px;
-  margin-left: 2px;
-}
-
-.dropdown:hover .caret,
-.open .caret {
-  opacity: 1;
-  filter: alpha(opacity=100);
-}
-
-.dropdown-menu {
-  position: absolute;
-  top: 100%;
-  left: 0;
-  z-index: 1000;
-  display: none;
-  float: left;
-  min-width: 160px;
-  padding: 4px 0;
-  margin: 1px 0 0;
-  list-style: none;
-  background-color: #ffffff;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, 0.2);
-  *border-right-width: 2px;
-  *border-bottom-width: 2px;
-  -webkit-border-radius: 5px;
-     -moz-border-radius: 5px;
-          border-radius: 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;
-}
-
-.dropdown-menu.pull-right {
-  right: 0;
-  left: auto;
-}
-
-.dropdown-menu .divider {
-  *width: 100%;
-  height: 1px;
-  margin: 8px 1px;
-  *margin: -5px 0 5px;
-  overflow: hidden;
-  background-color: #e5e5e5;
-  border-bottom: 1px solid #ffffff;
-}
-
-.dropdown-menu a {
-  display: block;
-  padding: 3px 15px;
-  clear: both;
-  font-weight: normal;
-  line-height: 18px;
-  color: #333333;
-  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;
-}
-
-.open {
-  *z-index: 1000;
-}
-
-.open > .dropdown-menu {
-  display: block;
-}
-
-.pull-right > .dropdown-menu {
-  right: 0;
-  left: auto;
-}
-
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
-  border-top: 0;
-  border-bottom: 4px solid #000000;
-  content: "\2191";
-}
-
-.dropup .dropdown-menu,
-.navbar-fixed-bottom .dropdown .dropdown-menu {
-  top: auto;
-  bottom: 100%;
-  margin-bottom: 1px;
-}
-
-.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);
-}
-
-.well-large {
-  padding: 24px;
-  -webkit-border-radius: 6px;
-     -moz-border-radius: 6px;
-          border-radius: 6px;
-}
-
-.well-small {
-  padding: 9px;
-  -webkit-border-radius: 3px;
-     -moz-border-radius: 3px;
-          border-radius: 3px;
-}
-
-.fade {
-  opacity: 0;
-  -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;
-}
-
-.fade.in {
-  opacity: 1;
-}
-
-.collapse {
-  position: relative;
-  height: 0;
-  overflow: hidden;
-  -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;
-}
-
-.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;
-  cursor: pointer;
-  opacity: 0.4;
-  filter: alpha(opacity=40);
-}
-
-button.close {
-  padding: 0;
-  cursor: pointer;
-  background: transparent;
-  border: 0;
-  -webkit-appearance: none;
-}
-
-.btn {
-  display: inline-block;
-  *display: inline;
-  padding: 4px 10px 4px;
-  margin-bottom: 0;
-  *margin-left: .3em;
-  font-size: 13px;
-  line-height: 18px;
-  *line-height: 20px;
-  color: #333333;
-  text-align: center;
-  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
-  vertical-align: middle;
-  cursor: pointer;
-  background-color: #f5f5f5;
-  *background-color: #e6e6e6;
-  background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
-  background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
-  background-repeat: repeat-x;
-  border: 1px solid #cccccc;
-  *border: 0;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  border-color: #e6e6e6 #e6e6e6 #bfbfbf;
-  border-bottom-color: #b3b3b3;
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
-  filter: progid:dximagetransform.microsoft.gradient(enabled=false);
-  *zoom: 1;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-     -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-
-.btn:hover,
-.btn:active,
-.btn.active,
-.btn.disabled,
-.btn[disabled] {
-  background-color: #e6e6e6;
-  *background-color: #d9d9d9;
-}
-
-.btn:active,
-.btn.active {
-  background-color: #cccccc \9;
-}
-
-.btn:first-child {
-  *margin-left: 0;
-}
-
-.btn:hover {
-  color: #333333;
-  text-decoration: none;
-  background-color: #e6e6e6;
-  *background-color: #d9d9d9;
-  /* Buttons in IE7 don't get borders, so darken on hover */
-
-  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 #333;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-
-.btn.active,
-.btn:active {
-  background-color: #e6e6e6;
-  background-color: #d9d9d9 \9;
-  background-image: none;
-  outline: 0;
-  -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-     -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-          box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-
-.btn.disabled,
-.btn[disabled] {
-  cursor: default;
-  background-color: #e6e6e6;
-  background-image: none;
-  opacity: 0.65;
-  filter: alpha(opacity=65);
-  -webkit-box-shadow: none;
-     -moz-box-shadow: none;
-          box-shadow: none;
-}
-
-.btn-large {
-  padding: 9px 14px;
-  font-size: 15px;
-  line-height: normal;
-  -webkit-border-radius: 5px;
-     -moz-border-radius: 5px;
-          border-radius: 5px;
-}
-
-.btn-large [class^="icon-"] {
-  margin-top: 1px;
-}
-
-.btn-small {
-  padding: 5px 9px;
-  font-size: 11px;
-  line-height: 16px;
-}
-
-.btn-small [class^="icon-"] {
-  margin-top: -1px;
-}
-
-.btn-mini {
-  padding: 2px 6px;
-  font-size: 11px;
-  line-height: 14px;
-}
-
-.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,
-.btn-inverse,
-.btn-inverse:hover {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-}
-
-.btn-primary.active,
-.btn-warning.active,
-.btn-danger.active,
-.btn-success.active,
-.btn-info.active,
-.btn-inverse.active {
-  color: rgba(255, 255, 255, 0.75);
-}
-
-.btn {
-  border-color: #ccc;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-}
-
-.btn-primary {
-  background-color: #0074cc;
-  *background-color: #0055cc;
-  background-image: -ms-linear-gradient(top, #0088cc, #0055cc);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0055cc));
-  background-image: -webkit-linear-gradient(top, #0088cc, #0055cc);
-  background-image: -o-linear-gradient(top, #0088cc, #0055cc);
-  background-image: -moz-linear-gradient(top, #0088cc, #0055cc);
-  background-image: linear-gradient(top, #0088cc, #0055cc);
-  background-repeat: repeat-x;
-  border-color: #0055cc #0055cc #003580;
-  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(startColorstr='#0088cc', endColorstr='#0055cc', GradientType=0);
-  filter: progid:dximagetransform.microsoft.gradient(enabled=false);
-}
-
-.btn-primary:hover,
-.btn-primary:active,
-.btn-primary.active,
-.btn-primary.disabled,
-.btn-primary[disabled] {
-  background-color: #0055cc;
-  *background-color: #004ab3;
-}
-
-.btn-primary:active,
-.btn-primary.active {
-  background-color: #004099 \9;
-}
-
-.btn-warning {
-  background-color: #faa732;
-  *background-color: #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: -moz-linear-gradient(top, #fbb450, #f89406);
-  background-image: linear-gradient(top, #fbb450, #f89406);
-  background-repeat: repeat-x;
-  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(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);
-  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;
-  *background-color: #df8505;
-}
-
-.btn-warning:active,
-.btn-warning.active {
-  background-color: #c67605 \9;
-}
-
-.btn-danger {
-  background-color: #da4f49;
-  *background-color: #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: -moz-linear-gradient(top, #ee5f5b, #bd362f);
-  background-image: linear-gradient(top, #ee5f5b, #bd362f);
-  background-repeat: repeat-x;
-  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(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);
-  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;
-  *background-color: #a9302a;
-}
-
-.btn-danger:active,
-.btn-danger.active {
-  background-color: #942a25 \9;
-}
-
-.btn-success {
-  background-color: #5bb75b;
-  *background-color: #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: -moz-linear-gradient(top, #62c462, #51a351);
-  background-image: linear-gradient(top, #62c462, #51a351);
-  background-repeat: repeat-x;
-  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(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);
-  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;
-  *background-color: #499249;
-}
-
-.btn-success:active,
-.btn-success.active {
-  background-color: #408140 \9;
-}
-
-.btn-info {
-  background-color: #49afcd;
-  *background-color: #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: -moz-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: linear-gradient(top, #5bc0de, #2f96b4);
-  background-repeat: repeat-x;
-  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(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);
-  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;
-  *background-color: #2a85a0;
-}
-
-.btn-info:active,
-.btn-info.active {
-  background-color: #24748c \9;
-}
-
-.btn-inverse {
-  background-color: #414141;
-  *background-color: #222222;
-  background-image: -ms-linear-gradient(top, #555555, #222222);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));
-  background-image: -webkit-linear-gradient(top, #555555, #222222);
-  background-image: -o-linear-gradient(top, #555555, #222222);
-  background-image: -moz-linear-gradient(top, #555555, #222222);
-  background-image: linear-gradient(top, #555555, #222222);
-  background-repeat: repeat-x;
-  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(startColorstr='#555555', endColorstr='#222222', GradientType=0);
-  filter: progid:dximagetransform.microsoft.gradient(enabled=false);
-}
-
-.btn-inverse:hover,
-.btn-inverse:active,
-.btn-inverse.active,
-.btn-inverse.disabled,
-.btn-inverse[disabled] {
-  background-color: #222222;
-  *background-color: #151515;
-}
-
-.btn-inverse:active,
-.btn-inverse.active {
-  background-color: #080808 \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.btn-large,
-input[type="submit"].btn.btn-large {
-  *padding-top: 7px;
-  *padding-bottom: 7px;
-}
-
-button.btn.btn-small,
-input[type="submit"].btn.btn-small {
-  *padding-top: 3px;
-  *padding-bottom: 3px;
-}
-
-button.btn.btn-mini,
-input[type="submit"].btn.btn-mini {
-  *padding-top: 1px;
-  *padding-bottom: 1px;
-}
-
-.btn-group {
-  position: relative;
-  *margin-left: .3em;
-  *zoom: 1;
-}
-
-.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-bottom-left-radius: 4px;
-          border-bottom-left-radius: 4px;
-  -webkit-border-top-left-radius: 4px;
-          border-top-left-radius: 4px;
-  -moz-border-radius-bottomleft: 4px;
-  -moz-border-radius-topleft: 4px;
-}
-
-.btn-group > .btn:last-child,
-.btn-group > .dropdown-toggle {
-  -webkit-border-top-right-radius: 4px;
-          border-top-right-radius: 4px;
-  -webkit-border-bottom-right-radius: 4px;
-          border-bottom-right-radius: 4px;
-  -moz-border-radius-topright: 4px;
-  -moz-border-radius-bottomright: 4px;
-}
-
-.btn-group > .btn.large:first-child {
-  margin-left: 0;
-  -webkit-border-bottom-left-radius: 6px;
-          border-bottom-left-radius: 6px;
-  -webkit-border-top-left-radius: 6px;
-          border-top-left-radius: 6px;
-  -moz-border-radius-bottomleft: 6px;
-  -moz-border-radius-topleft: 6px;
-}
-
-.btn-group > .btn.large:last-child,
-.btn-group > .large.dropdown-toggle {
-  -webkit-border-top-right-radius: 6px;
-          border-top-right-radius: 6px;
-  -webkit-border-bottom-right-radius: 6px;
-          border-bottom-right-radius: 6px;
-  -moz-border-radius-topright: 6px;
-  -moz-border-radius-bottomright: 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-top: 4px;
-  padding-right: 8px;
-  *padding-bottom: 4px;
-  padding-left: 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);
-}
-
-.btn-group > .btn-mini.dropdown-toggle {
-  padding-right: 5px;
-  padding-left: 5px;
-}
-
-.btn-group > .btn-small.dropdown-toggle {
-  *padding-top: 4px;
-  *padding-bottom: 4px;
-}
-
-.btn-group > .btn-large.dropdown-toggle {
-  padding-right: 12px;
-  padding-left: 12px;
-}
-
-.btn-group.open .dropdown-toggle {
-  background-image: none;
-  -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-     -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-          box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-
-.btn-group.open .btn.dropdown-toggle {
-  background-color: #e6e6e6;
-}
-
-.btn-group.open .btn-primary.dropdown-toggle {
-  background-color: #0055cc;
-}
-
-.btn-group.open .btn-warning.dropdown-toggle {
-  background-color: #f89406;
-}
-
-.btn-group.open .btn-danger.dropdown-toggle {
-  background-color: #bd362f;
-}
-
-.btn-group.open .btn-success.dropdown-toggle {
-  background-color: #51a351;
-}
-
-.btn-group.open .btn-info.dropdown-toggle {
-  background-color: #2f96b4;
-}
-
-.btn-group.open .btn-inverse.dropdown-toggle {
-  background-color: #222222;
-}
-
-.btn .caret {
-  margin-top: 7px;
-  margin-left: 0;
-}
-
-.btn:hover .caret,
-.open.btn-group .caret {
-  opacity: 1;
-  filter: alpha(opacity=100);
-}
-
-.btn-mini .caret {
-  margin-top: 5px;
-}
-
-.btn-small .caret {
-  margin-top: 6px;
-}
-
-.btn-large .caret {
-  margin-top: 6px;
-  border-top-width: 5px;
-  border-right-width: 5px;
-  border-left-width: 5px;
-}
-
-.dropup .btn-large .caret {
-  border-top: 0;
-  border-bottom: 5px solid #000000;
-}
-
-.btn-primary .caret,
-.btn-warning .caret,
-.btn-danger .caret,
-.btn-info .caret,
-.btn-success .caret,
-.btn-inverse .caret {
-  border-top-color: #ffffff;
-  border-bottom-color: #ffffff;
-  opacity: 0.75;
-  filter: alpha(opacity=75);
-}
-
-.alert {
-  padding: 8px 35px 8px 14px;
-  margin-bottom: 18px;
-  color: #c09853;
-  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-heading {
-  color: inherit;
-}
-
-.alert .close {
-  position: relative;
-  top: -2px;
-  right: -21px;
-  line-height: 18px;
-}
-
-.alert-success {
-  color: #468847;
-  background-color: #dff0d8;
-  border-color: #d6e9c6;
-}
-
-.alert-danger,
-.alert-error {
-  color: #b94a48;
-  background-color: #f2dede;
-  border-color: #eed3d7;
-}
-
-.alert-info {
-  color: #3a87ad;
-  background-color: #d9edf7;
-  border-color: #bce8f1;
-}
-
-.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-bottom: 18px;
-  margin-left: 0;
-  list-style: none;
-}
-
-.nav > li > a {
-  display: block;
-}
-
-.nav > li > a:hover {
-  text-decoration: none;
-  background-color: #eeeeee;
-}
-
-.nav > .pull-right {
-  float: right;
-}
-
-.nav .nav-header {
-  display: block;
-  padding: 3px 15px;
-  font-size: 11px;
-  font-weight: bold;
-  line-height: 18px;
-  color: #999999;
-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
-  text-transform: uppercase;
-}
-
-.nav li + .nav-header {
-  margin-top: 9px;
-}
-
-.nav-list {
-  padding-right: 15px;
-  padding-left: 15px;
-  margin-bottom: 0;
-}
-
-.nav-list > li > a,
-.nav-list .nav-header {
-  margin-right: -15px;
-  margin-left: -15px;
-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
-}
-
-.nav-list > li > a {
-  padding: 3px 15px;
-}
-
-.nav-list > .active > a,
-.nav-list > .active > a:hover {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
-  background-color: #0088cc;
-}
-
-.nav-list [class^="icon-"] {
-  margin-right: 2px;
-}
-
-.nav-list .divider {
-  *width: 100%;
-  height: 1px;
-  margin: 8px 1px;
-  *margin: -5px 0 5px;
-  overflow: hidden;
-  background-color: #e5e5e5;
-  border-bottom: 1px solid #ffffff;
-}
-
-.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: 8px;
-  padding-bottom: 8px;
-  line-height: 18px;
-  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;
-  cursor: default;
-  background-color: #ffffff;
-  border: 1px solid #ddd;
-  border-bottom-color: transparent;
-}
-
-.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 {
-  z-index: 2;
-  border-color: #ddd;
-}
-
-.nav-pills.nav-stacked > li > a {
-  margin-bottom: 3px;
-}
-
-.nav-pills.nav-stacked > li:last-child > a {
-  margin-bottom: 1px;
-}
-
-.nav-tabs .dropdown-menu {
-  -webkit-border-radius: 0 0 5px 5px;
-     -moz-border-radius: 0 0 5px 5px;
-          border-radius: 0 0 5px 5px;
-}
-
-.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 {
-  margin-top: 6px;
-  border-top-color: #0088cc;
-  border-bottom-color: #0088cc;
-}
-
-.nav-tabs .dropdown-toggle:hover .caret,
-.nav-pills .dropdown-toggle:hover .caret {
-  border-top-color: #005580;
-  border-bottom-color: #005580;
-}
-
-.nav-tabs .active .dropdown-toggle .caret,
-.nav-pills .active .dropdown-toggle .caret {
-  border-top-color: #333333;
-  border-bottom-color: #333333;
-}
-
-.nav > .dropdown.active > a:hover {
-  color: #000000;
-  cursor: pointer;
-}
-
-.nav-tabs .open .dropdown-toggle,
-.nav-pills .open .dropdown-toggle,
-.nav > li.dropdown.open.active > a:hover {
-  color: #ffffff;
-  background-color: #999999;
-  border-color: #999999;
-}
-
-.nav li.dropdown.open .caret,
-.nav li.dropdown.open.active .caret,
-.nav li.dropdown.open a:hover .caret {
-  border-top-color: #ffffff;
-  border-bottom-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;
-}
-
-.tab-content {
-  overflow: auto;
-}
-
-.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-top-color: #ddd;
-  border-bottom-color: transparent;
-}
-
-.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 {
-  *position: relative;
-  *z-index: 2;
-  margin-bottom: 18px;
-  overflow: visible;
-}
-
-.navbar-inner {
-  min-height: 40px;
-  padding-right: 20px;
-  padding-left: 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;
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
-  -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);
-}
-
-.navbar .container {
-  width: auto;
-}
-
-.nav-collapse.collapse {
-  height: auto;
-}
-
-.navbar {
-  color: #999999;
-}
-
-.navbar .brand:hover {
-  text-decoration: none;
-}
-
-.navbar .brand {
-  display: block;
-  float: left;
-  padding: 8px 20px 12px;
-  margin-left: -20px;
-  font-size: 20px;
-  font-weight: bold;
-  line-height: 1;
-  color: #CACACA;
-}
-
-.navbar .navbar-text {
-  margin-bottom: 0;
-  line-height: 40px;
-}
-
-.navbar .navbar-link {
-  color: #999999;
-}
-
-.navbar .navbar-link:hover {
-  color: #ffffff;
-}
-
-.navbar .btn,
-.navbar .btn-group {
-  margin-top: 5px;
-}
-
-.navbar .btn-group .btn {
-  margin: 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,
-.navbar-form .radio,
-.navbar-form .checkbox {
-  margin-top: 5px;
-}
-
-.navbar-form input,
-.navbar-form select {
-  display: inline-block;
-  margin-bottom: 0;
-}
-
-.navbar-form input[type="image"],
-.navbar-form input[type="checkbox"],
-.navbar-form input[type="radio"] {
-  margin-top: 3px;
-}
-
-.navbar-form .input-append,
-.navbar-form .input-prepend {
-  margin-top: 6px;
-  white-space: nowrap;
-}
-
-.navbar-form .input-append input,
-.navbar-form .input-prepend input {
-  margin-top: 0;
-}
-
-.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;
-  background-color: #626262;
-  border: 1px solid #151515;
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
-     -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
-          box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 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: #cccccc;
-}
-
-.navbar-search .search-query:-ms-input-placeholder {
-  color: #cccccc;
-}
-
-.navbar-search .search-query::-webkit-input-placeholder {
-  color: #cccccc;
-}
-
-.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;
-  outline: 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);
-}
-
-.navbar-fixed-top,
-.navbar-fixed-bottom {
-  position: fixed;
-  right: 0;
-  left: 0;
-  z-index: 1030;
-  margin-bottom: 0;
-}
-
-.navbar-fixed-top .navbar-inner,
-.navbar-fixed-bottom .navbar-inner {
-  padding-right: 0;
-  padding-left: 0;
-  -webkit-border-radius: 0;
-     -moz-border-radius: 0;
-          border-radius: 0;
-}
-
-.navbar-fixed-top .container,
-.navbar-fixed-bottom .container {
-  width: 940px;
-}
-
-.navbar-fixed-top {
-  top: 0;
-}
-
-.navbar-fixed-bottom {
-  bottom: 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: 9px 10px 11px;
-  line-height: 19px;
-  color: #999999;
-  text-decoration: none;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-}
-
-.navbar .btn {
-  display: inline-block;
-  padding: 4px 10px 4px;
-  margin: 5px 5px 6px;
-  line-height: 18px;
-}
-
-.navbar .btn-group {
-  padding: 5px 5px 6px;
-  margin: 0;
-}
-
-.navbar .nav > li > a:hover {
-  color: #ffffff;
-  text-decoration: none;
-  background-color: transparent;
-}
-
-.navbar .nav .active > a,
-.navbar .nav .active > a:hover {
-  color: #ffffff;
-  text-decoration: none;
-  background-color: #222222;
-}
-
-.navbar .divider-vertical {
-  width: 1px;
-  height: 40px;
-  margin: 0 9px;
-  overflow: hidden;
-  background-color: #222222;
-  border-right: 1px solid #333333;
-}
-
-.navbar .nav.pull-right {
-  margin-right: 0;
-  margin-left: 10px;
-}
-
-.navbar .btn-navbar {
-  display: none;
-  float: right;
-  padding: 7px 10px;
-  margin-right: 5px;
-  margin-left: 5px;
-  background-color: #2c2c2c;
-  *background-color: #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-image: -moz-linear-gradient(top, #333333, #222222);
-  background-repeat: repeat-x;
-  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(startColorstr='#333333', endColorstr='#222222', GradientType=0);
-  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);
-}
-
-.navbar .btn-navbar:hover,
-.navbar .btn-navbar:active,
-.navbar .btn-navbar.active,
-.navbar .btn-navbar.disabled,
-.navbar .btn-navbar[disabled] {
-  background-color: #222222;
-  *background-color: #151515;
-}
-
-.navbar .btn-navbar:active,
-.navbar .btn-navbar.active {
-  background-color: #080808 \9;
-}
-
-.navbar .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;
-}
-
-.navbar .dropdown-menu:before {
-  position: absolute;
-  top: -7px;
-  left: 9px;
-  display: inline-block;
-  border-right: 7px solid transparent;
-  border-bottom: 7px solid #ccc;
-  border-left: 7px solid transparent;
-  border-bottom-color: rgba(0, 0, 0, 0.2);
-  content: '';
-}
-
-.navbar .dropdown-menu:after {
-  position: absolute;
-  top: -6px;
-  left: 10px;
-  display: inline-block;
-  border-right: 6px solid transparent;
-  border-bottom: 6px solid #ffffff;
-  border-left: 6px solid transparent;
-  content: '';
-}
-
-.navbar-fixed-bottom .dropdown-menu:before {
-  top: auto;
-  bottom: -7px;
-  border-top: 7px solid #ccc;
-  border-bottom: 0;
-  border-top-color: rgba(0, 0, 0, 0.2);
-}
-
-.navbar-fixed-bottom .dropdown-menu:after {
-  top: auto;
-  bottom: -6px;
-  border-top: 6px solid #ffffff;
-  border-bottom: 0;
-}
-
-.navbar .nav li.dropdown .dropdown-toggle .caret,
-.navbar .nav li.dropdown.open .caret {
-  border-top-color: #ffffff;
-  border-bottom-color: #ffffff;
-}
-
-.navbar .nav li.dropdown.active .caret {
-  opacity: 1;
-  filter: alpha(opacity=100);
-}
-
-.navbar .nav li.dropdown.open > .dropdown-toggle,
-.navbar .nav li.dropdown.active > .dropdown-toggle,
-.navbar .nav li.dropdown.open.active > .dropdown-toggle {
-  background-color: transparent;
-}
-
-.navbar .nav li.dropdown.active > .dropdown-toggle:hover {
-  color: #ffffff;
-}
-
-.navbar .pull-right .dropdown-menu,
-.navbar .dropdown-menu.pull-right {
-  right: 0;
-  left: auto;
-}
-
-.navbar .pull-right .dropdown-menu:before,
-.navbar .dropdown-menu.pull-right:before {
-  right: 12px;
-  left: auto;
-}
-
-.navbar .pull-right .dropdown-menu:after,
-.navbar .dropdown-menu.pull-right:after {
-  right: 13px;
-  left: auto;
-}
-
-.breadcrumb {
-  padding: 7px 14px;
-  margin: 0 0 18px;
-  list-style: none;
-  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;
-  border: 1px solid #ddd;
-  -webkit-border-radius: 3px;
-     -moz-border-radius: 3px;
-          border-radius: 3px;
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);
-  -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-block;
-  *display: inline;
-  text-shadow: 0 1px 0 #ffffff;
-  *zoom: 1;
-}
-
-.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;
-  margin-bottom: 0;
-  margin-left: 0;
-  -webkit-border-radius: 3px;
-     -moz-border-radius: 3px;
-          border-radius: 3px;
-  *zoom: 1;
-  -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 span,
-.pagination .disabled a,
-.pagination .disabled a:hover {
-  color: #999999;
-  cursor: default;
-  background-color: transparent;
-}
-
-.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-bottom: 18px;
-  margin-left: 0;
-  text-align: center;
-  list-style: none;
-  *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;
-}
-
-.pager .disabled a,
-.pager .disabled a:hover {
-  color: #999999;
-  cursor: default;
-  background-color: #fff;
-}
-
-.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;
-  width: 560px;
-  margin: -250px 0 0 -280px;
-  overflow: auto;
-  background-color: #ffffff;
-  border: 1px solid #999;
-  border: 1px solid rgba(0, 0, 0, 0.3);
-  *border: 1px solid #999;
-  -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 {
-  top: -25%;
-  -webkit-transition: opacity 0.3s linear, top 0.3s ease-out;
-     -moz-transition: opacity 0.3s linear, top 0.3s ease-out;
-      -ms-transition: opacity 0.3s linear, top 0.3s ease-out;
-       -o-transition: opacity 0.3s linear, top 0.3s ease-out;
-          transition: opacity 0.3s linear, top 0.3s ease-out;
-}
-
-.modal.fade.in {
-  top: 50%;
-}
-
-.modal-header {
-  padding: 9px 15px;
-  border-bottom: 1px solid #eee;
-}
-
-.modal-header .close {
-  margin-top: 2px;
-}
-
-.modal-body {
-  max-height: 400px;
-  padding: 15px;
-  overflow-y: auto;
-}
-
-.modal-form {
-  margin-bottom: 0;
-}
-
-.modal-footer {
-  padding: 14px 15px 15px;
-  margin-bottom: 0;
-  text-align: right;
-  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;
-  *zoom: 1;
-  -webkit-box-shadow: inset 0 1px 0 #ffffff;
-     -moz-box-shadow: inset 0 1px 0 #ffffff;
-          box-shadow: inset 0 1px 0 #ffffff;
-}
-
-.modal-footer:before,
-.modal-footer:after {
-  display: table;
-  content: "";
-}
-
-.modal-footer:after {
-  clear: both;
-}
-
-.modal-footer .btn + .btn {
-  margin-bottom: 0;
-  margin-left: 5px;
-}
-
-.modal-footer .btn-group .btn + .btn {
-  margin-left: -1px;
-}
-
-.tooltip {
-  position: absolute;
-  z-index: 1020;
-  display: block;
-  padding: 5px;
-  font-size: 11px;
-  opacity: 0;
-  filter: alpha(opacity=0);
-  visibility: visible;
-}
-
-.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-top: 5px solid #000000;
-  border-right: 5px solid transparent;
-  border-left: 5px solid transparent;
-}
-
-.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-right: 5px solid transparent;
-  border-bottom: 5px solid #000000;
-  border-left: 5px solid transparent;
-}
-
-.tooltip.right .tooltip-arrow {
-  top: 50%;
-  left: 0;
-  margin-top: -5px;
-  border-top: 5px solid transparent;
-  border-right: 5px solid #000000;
-  border-bottom: 5px solid transparent;
-}
-
-.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-top: 5px solid #000000;
-  border-right: 5px solid transparent;
-  border-left: 5px solid transparent;
-}
-
-.popover.right .arrow {
-  top: 50%;
-  left: 0;
-  margin-top: -5px;
-  border-top: 5px solid transparent;
-  border-right: 5px solid #000000;
-  border-bottom: 5px solid transparent;
-}
-
-.popover.bottom .arrow {
-  top: 0;
-  left: 50%;
-  margin-left: -5px;
-  border-right: 5px solid transparent;
-  border-bottom: 5px solid #000000;
-  border-left: 5px solid transparent;
-}
-
-.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 {
-  width: 280px;
-  padding: 3px;
-  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;
-}
-
-.row-fluid .thumbnails {
-  margin-left: 0;
-}
-
-.thumbnails > li {
-  float: left;
-  margin-bottom: 18px;
-  margin-left: 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-right: auto;
-  margin-left: auto;
-}
-
-.thumbnail .caption {
-  padding: 9px;
-}
-
-.label,
-.badge {
-  font-size: 10.998px;
-  font-weight: bold;
-  line-height: 14px;
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  white-space: nowrap;
-  vertical-align: baseline;
-  background-color: #999999;
-}
-
-.label {
-  padding: 1px 4px 2px;
-  -webkit-border-radius: 3px;
-     -moz-border-radius: 3px;
-          border-radius: 3px;
-}
-
-.badge {
-  padding: 1px 9px 2px;
-  -webkit-border-radius: 9px;
-     -moz-border-radius: 9px;
-          border-radius: 9px;
-}
-
-a.label:hover,
-a.badge:hover {
-  color: #ffffff;
-  text-decoration: none;
-  cursor: pointer;
-}
-
-.label-important,
-.badge-important {
-  background-color: #b94a48;
-}
-
-.label-important[href],
-.badge-important[href] {
-  background-color: #953b39;
-}
-
-.label-warning,
-.badge-warning {
-  background-color: #f89406;
-}
-
-.label-warning[href],
-.badge-warning[href] {
-  background-color: #c67605;
-}
-
-.label-success,
-.badge-success {
-  background-color: #468847;
-}
-
-.label-success[href],
-.badge-success[href] {
-  background-color: #356635;
-}
-
-.label-info,
-.badge-info {
-  background-color: #3a87ad;
-}
-
-.label-info[href],
-.badge-info[href] {
-  background-color: #2d6987;
-}
-
-.label-inverse,
-.badge-inverse {
-  background-color: #333333;
-}
-
-.label-inverse[href],
-.badge-inverse[href] {
-  background-color: #1a1a1a;
-}
-
-@-webkit-keyframes progress-bar-stripes {
-  from {
-    background-position: 40px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-
-@-moz-keyframes progress-bar-stripes {
-  from {
-    background-position: 40px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-
-@-ms-keyframes progress-bar-stripes {
-  from {
-    background-position: 40px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-
-@-o-keyframes progress-bar-stripes {
-  from {
-    background-position: 0 0;
-  }
-  to {
-    background-position: 40px 0;
-  }
-}
-
-@keyframes progress-bar-stripes {
-  from {
-    background-position: 40px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-
-.progress {
-  height: 18px;
-  margin-bottom: 18px;
-  overflow: hidden;
-  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;
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-  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);
-}
-
-.progress .bar {
-  width: 0;
-  height: 18px;
-  font-size: 12px;
-  color: #ffffff;
-  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: -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-image: -ms-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;
-      -ms-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: #149bdf;
-  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: -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: -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: 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;
-      -ms-animation: progress-bar-stripes 2s linear infinite;
-       -o-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);
-}
-
-.progress-warning .bar {
-  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);
-}
-
-.progress-warning.progress-striped .bar {
-  background-color: #fbb450;
-  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-toggle {
-  cursor: pointer;
-}
-
-.accordion-inner {
-  padding: 9px 15px;
-  border-top: 1px solid #e5e5e5;
-}
-
-.carousel {
-  position: relative;
-  margin-bottom: 18px;
-  line-height: 1;
-}
-
-.carousel-inner {
-  position: relative;
-  width: 100%;
-  overflow: hidden;
-}
-
-.carousel .item {
-  position: relative;
-  display: none;
-  -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 {
-  right: 15px;
-  left: auto;
-}
-
-.carousel-control:hover {
-  color: #ffffff;
-  text-decoration: none;
-  opacity: 0.9;
-  filter: alpha(opacity=90);
-}
-
-.carousel-caption {
-  position: absolute;
-  right: 0;
-  bottom: 0;
-  left: 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: #eeeeee;
-  -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;
-  color: inherit;
-}
-
-.hero-unit p {
-  font-size: 18px;
-  font-weight: 200;
-  line-height: 27px;
-  color: inherit;
-}
-
-.pull-right {
-  float: right;
-}
-
-.pull-left {
-  float: left;
-}
-
-.hide {
-  display: none;
-}
-
-.show {
-  display: block;
-}
-
-.invisible {
-  visibility: hidden;
-}
-
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/css/docs.css b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/css/docs.css
deleted file mode 100644
index 92a4ec8e67f..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/css/docs.css
+++ /dev/null
@@ -1,846 +0,0 @@
-/* Add additional stylesheets below
--------------------------------------------------- */
-/*
-  Bootstrap's documentation styles
-  Special styles for presenting Bootstrap's documentation and examples
-*/
-
-
-/* Body and structure
--------------------------------------------------- */
-body {
-  position: relative;
-  padding-top: 90px;
-  background-color: #fff;
-  background-image: url(../img/grid-18px-masked.png);
-  background-repeat: repeat-x;
-  background-position: 0 40px;
-}
-
-
-/* Tweak navbar brand link to be super sleek
--------------------------------------------------- */
-.navbar-fixed-top .brand {
-  padding-right: 0;
-  padding-left: 0;
-  margin-left: 20px;
-  float: right;
-  font-weight: bold;
-  color: #000;
-  text-shadow: 0 1px 0 rgba(255,255,255,.1), 0 0 30px rgba(255,255,255,.125);
-  -webkit-transition: all .2s linear;
-     -moz-transition: all .2s linear;
-          transition: all .2s linear;
-}
-.navbar-fixed-top .brand:hover {
-  text-decoration: none;
-}
-
-
-/* Space out sub-sections more
--------------------------------------------------- */
-section {
-  padding-top: 60px;
-}
-
-/* Faded out hr */
-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;
-}
-
-
-/* Jumbotrons
--------------------------------------------------- */
-.jumbotron {
-  position: relative;
-}
-.jumbotron h1 {
-  margin-bottom: 9px;
-  font-size: 81px;
-  font-weight: bold;
-  letter-spacing: -1px;
-  line-height: 1;
-}
-.jumbotron p {
-  margin-bottom: 18px;
-  font-weight: 300;
-}
-.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 .btn-large small {
-  font-size: 14px;
-}
-
-/* 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-left: 5%;
-  margin-right: 5%;
-  font-size: 30px;
-  line-height: 36px;
-}
-
-
-/* Specific jumbotrons
-------------------------- */
-/* supporting docs pages */
-.subhead {
-  padding-bottom: 0;
-  margin-bottom: 9px;
-}
-.subhead h1 {
-  font-size: 54px;
-}
-
-/* Subnav */
-.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;
-}
-
-/* Fixed subnav on scroll, but only for 980px and up (sorry IE!) */
-@media (min-width: 980px) {
-  .subnav-fixed {
-    position: fixed;
-    top: 40px;
-    left: 0;
-    right: 0;
-    z-index: 1020; /* 10 less than .navbar-fixed to prevent any overlap */
-    border-color: #d5d5d5;
-    border-width: 0 0 1px; /* drop the border on the fixed edges */
-    -webkit-border-radius: 0;
-       -moz-border-radius: 0;
-            border-radius: 0;
-    -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 5px rgba(0,0,0,.1);
-       -moz-box-shadow: inset 0 1px 0 #fff, 0 1px 5px rgba(0,0,0,.1);
-            box-shadow: inset 0 1px 0 #fff, 0 1px 5px rgba(0,0,0,.1);
-    filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); /* IE6-9 */
-  }
-  .subnav-fixed .nav {
-    width: 938px;
-    margin: 0 auto;
-    padding: 0 1px;
-  }
-  .subnav .nav > li:first-child > a,
-  .subnav .nav > li:first-child > a:hover {
-    -webkit-border-radius: 0;
-       -moz-border-radius: 0;
-            border-radius: 0;
-  }
-}
-
-
-/* Quick links
--------------------------------------------------- */
-.bs-links {
-  margin: 36px 0;
-}
-.quick-links {
-  min-height: 30px;
-  margin: 0;
-  padding: 5px 20px;
-  list-style: none;
-  text-align: center;
-  overflow: hidden;
-}
-.quick-links:first-child {
-  min-height: 0;
-}
-.quick-links li {
-  display: inline;
-  margin: 0 8px;
-  color: #999;
-}
-.quick-links .github-btn,
-.quick-links .tweet-btn,
-.quick-links .follow-btn {
-  position: relative;
-  top: 5px;
-}
-
-
-/* Marketing section of Overview
--------------------------------------------------- */
-.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
--------------------------------------------------- */
-.footer {
-  margin-top: 45px;
-  padding: 35px 0 36px;
-  border-top: 1px solid #e5e5e5;
-}
-.footer p {
-  margin-bottom: 0;
-  color: #555;
-}
-
-
-
-/* Special grid styles
--------------------------------------------------- */
-.show-grid {
-  margin-top: 10px;
-  margin-bottom: 20px;
-}
-.show-grid [class*="span"] {
-  background-color: #eee;
-  text-align: center;
-  -webkit-border-radius: 3px;
-     -moz-border-radius: 3px;
-          border-radius: 3px;
-  min-height: 30px;
-  line-height: 30px;
-}
-.show-grid:hover [class*="span"] {
-  background: #ddd;
-}
-.show-grid .show-grid {
-  margin-top: 0;
-  margin-bottom: 0;
-}
-.show-grid .show-grid [class*="span"] {
-  background-color: #ccc;
-}
-
-
-/* Render mini layout previews
--------------------------------------------------- */
-.mini-layout {
-  border: 1px solid #ddd;
-  -webkit-border-radius: 6px;
-     -moz-border-radius: 6px;
-          border-radius: 6px;
-  -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.075);
-     -moz-box-shadow: 0 1px 2px rgba(0,0,0,.075);
-          box-shadow: 0 1px 2px rgba(0,0,0,.075);
-}
-.mini-layout {
-  height: 240px;
-  margin-bottom: 20px;
-  padding: 9px;
-}
-.mini-layout div {
-  -webkit-border-radius: 3px;
-     -moz-border-radius: 3px;
-          border-radius: 3px;
-}
-.mini-layout .mini-layout-body {
-  background-color: #dceaf4;
-  margin: 0 auto;
-  width: 70%;
-  height: 240px;
-}
-.mini-layout.fluid .mini-layout-sidebar,
-.mini-layout.fluid .mini-layout-header,
-.mini-layout.fluid .mini-layout-body {
-  float: left;
-}
-.mini-layout.fluid .mini-layout-sidebar {
-  background-color: #bbd8e9;
-  width: 20%;
-  height: 240px;
-}
-.mini-layout.fluid .mini-layout-body {
-  width: 77.5%;
-  margin-left: 2.5%;
-}
-
-
-/* Popover docs
--------------------------------------------------- */
-.popover-well {
-  min-height: 160px;
-}
-.popover-well .popover {
-  display: block;
-}
-.popover-well .popover-wrapper {
-  width: 50%;
-  height: 160px;
-  float: left;
-  margin-left: 55px;
-  position: relative;
-}
-.popover-well .popover-menu-wrapper {
-  height: 80px;
-}
-.large-bird {
-  margin: 5px 0 0 310px;
-  opacity: .1;
-}
-
-
-/* Download page
--------------------------------------------------- */
-.download .page-header {
-  margin-top: 36px;
-}
-.page-header .toggle-all {
-  margin-top: 5px;
-}
-
-/* Space out h3s when following a section */
-.download h3 {
-  margin-bottom: 5px;
-}
-.download-builder input + h3,
-.download-builder .checkbox + h3 {
-  margin-top: 9px;
-}
-
-/* Fields for variables */
-.download-builder input[type=text] {
-  margin-bottom: 9px;
-  font-family: Menlo, Monaco, "Courier New", monospace;
-  font-size: 12px;
-  color: #d14;
-}
-.download-builder input[type=text]:focus {
-  background-color: #fff;
-}
-
-/* Custom, larger checkbox labels */
-.download .checkbox {
-  padding: 6px 10px 6px 25px;
-  color: #555;
-  background-color: #f9f9f9;
-  -webkit-border-radius: 3px;
-     -moz-border-radius: 3px;
-          border-radius: 3px;
-  cursor: pointer;
-}
-.download .checkbox:hover {
-  color: #333;
-  background-color: #f5f5f5;
-}
-.download .checkbox small {
-  font-size: 12px;
-  color: #777;
-}
-
-/* Variables section */
-#variables label {
-  margin-bottom: 0;
-}
-
-/* Giant download button */
-.download-btn {
-  margin: 36px 0 108px;
-}
-#download p,
-#download h4 {
-  max-width: 50%;
-  margin: 0 auto;
-  color: #999;
-  text-align: center;
-}
-#download h4 {
-  margin-bottom: 0;
-}
-#download p {
-  margin-bottom: 18px;
-}
-.download-btn .btn {
-  display: block;
-  width: auto;
-  padding: 19px 24px;
-  margin-bottom: 27px;
-  font-size: 30px;
-  line-height: 1;
-  text-align: center;
-  -webkit-border-radius: 6px;
-     -moz-border-radius: 6px;
-          border-radius: 6px;
-}
-
-
-
-/* Color swatches on LESS docs page
--------------------------------------------------- */
-/* Sets the width of the td */
-.swatch-col {
-  width: 30px;
-}
-/* Le swatch */
-.swatch {
-  display: inline-block;
-  width: 30px;
-  height: 20px;
-  margin: -6px 0;
-  -webkit-border-radius: 3px;
-     -moz-border-radius: 3px;
-          border-radius: 3px;
-}
-/* For white swatches, give a border */
-.swatch-bordered {
-  width: 28px;
-  height: 18px;
-  border: 1px solid #eee;
-}
-
-
-/* Misc
--------------------------------------------------- */
-
-/* Make tables spaced out a bit more */
-h2 + table,
-h3 + table,
-h4 + table,
-h2 + .row {
-  margin-top: 5px;
-}
-
-/* Example sites showcase */
-.example-sites img {
-  max-width: 100%;
-  margin: 0 auto;
-}
-.marketing-byline {
-  margin: -18px 0 27px;
-  font-size: 18px;
-  font-weight: 300;
-  line-height: 24px;
-  color: #999;
-  text-align: center;
-}
-
-.scrollspy-example {
-  height: 200px;
-  overflow: auto;
-  position: relative;
-}
-
-/* Remove bottom margin on example forms in wells */
-form.well {
-  padding: 14px;
-}
-
-/* Tighten up spacing */
-.well hr {
-  margin: 18px 0;
-}
-
-/* Fake the :focus state to demo it */
-.focused {
-  border-color: rgba(82,168,236,.8);
-  -webkit-box-shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6);
-     -moz-box-shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6);
-          box-shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6);
-  outline: 0;
-}
-
-/* For input sizes, make them display block */
-.docs-input-sizes select,
-.docs-input-sizes input[type=text] {
-  display: block;
-  margin-bottom: 9px;
-}
-
-/* Icons
-------------------------- */
-.the-icons {
-  margin-left: 0;
-  list-style: none;
-}
-.the-icons i:hover {
-  background-color: rgba(255,0,0,.25);
-}
-
-/* Eaxmples page
-------------------------- */
-.bootstrap-examples .thumbnail {
-  margin-bottom: 9px;
-  background-color: #fff;
-}
-
-/* Responsive table
-------------------------- */
-.responsive-utilities th small {
-  display: block;
-  font-weight: normal;
-  color: #999;
-}
-.responsive-utilities tbody th {
-  font-weight: normal;
-}
-.responsive-utilities td {
-  text-align: center;
-}
-.responsive-utilities td.is-visible {
-  color: #468847;
-  background-color: #dff0d8 !important;
-}
-.responsive-utilities td.is-hidden {
-  color: #ccc;
-  background-color: #f9f9f9 !important;
-}
-
-/* Responsive tests
-------------------------- */
-.responsive-utilities-test {
-  margin-top: 5px;
-  margin-left: 0;
-  list-style: none;
-  overflow: hidden; /* clear floats */
-}
-.responsive-utilities-test li {
-  position: relative;
-  float: left;
-  width: 25%;
-  height: 43px;
-  font-size: 14px;
-  font-weight: bold;
-  line-height: 43px;
-  color: #999;
-  text-align: center;
-  border: 1px solid #ddd;
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-}
-.responsive-utilities-test li + li {
-  margin-left: 10px;
-}
-.responsive-utilities-test span {
-  position: absolute;
-  top:    -1px;
-  left:   -1px;
-  right:  -1px;
-  bottom: -1px;
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-}
-.responsive-utilities-test span {
-  color: #468847;
-  background-color: #dff0d8;
-  border: 1px solid #d6e9c6;
-}
-
-
-/* Responsive Docs
--------------------------------------------------- */
-@media (max-width: 480px) {
-
-  /* Reduce padding above jumbotron */
-  body {
-    padding-top: 70px;
-  }
-
-  /* Change up some type stuff */
-  h2 {
-    margin-top: 27px;
-  }
-  h2 small {
-    display: block;
-    line-height: 18px;
-  }
-  h3 {
-    margin-top: 18px;
-  }
-
-  /* icons */
-  .marketing .bs-icon {
-    margin: 0;
-  }
-
-  /* Adjust the jumbotron */
-  .jumbotron h1,
-  .jumbotron p {
-    text-align: center;
-    margin-right: 0;
-  }
-  .jumbotron h1 {
-    font-size: 45px;
-    margin-right: 0;
-  }
-  .jumbotron p {
-    margin-right: 0;
-    margin-left: 0;
-    font-size: 18px;
-    line-height: 24px;
-  }
-  .jumbotron .btn {
-    display: block;
-    font-size: 18px;
-    padding: 10px 14px;
-    margin: 0 auto 10px;
-  }
-  /* Masthead (home page jumbotron) */
-  .masthead {
-    padding-top: 0;
-  }
-
-  /* Don't space out quick links so much */
-  .quick-links {
-    margin: 40px 0 0;
-  }
-  /* hide the bullets on mobile since our horizontal space is limited */
-  .quick-links .divider {
-    display: none;
-  }
-
-  /* center example sites */
-  .example-sites {
-    margin-left: 0;
-  }
-  .example-sites > li {
-    float: none;
-    display: block;
-    max-width: 280px;
-    margin: 0 auto 18px;
-    text-align: center;
-  }
-  .example-sites .thumbnail > img {
-    max-width: 270px;
-  }
-
-  table code {
-    white-space: normal;
-    word-wrap: break-word;
-    word-break: break-all;
-  }
-
-  /* Modal example */
-  .modal-example .modal {
-    position: relative;
-    top: auto;
-    right: auto;
-    bottom: auto;
-    left: auto;
-  }
-
-}
-
-
-@media (max-width: 768px) {
-
-  /* Remove any padding from the body */
-  body {
-    padding-top: 0;
-  }
-
-  /* Jumbotron buttons */
-  .jumbotron .btn {
-    margin-bottom: 10px;
-  }
-
-  /* Subnav */
-  .subnav {
-    position: static;
-    top: auto;
-    z-index: auto;
-    width: auto;
-    height: auto;
-    background: #fff; /* whole background property since we use a background-image for gradient */
-    -webkit-box-shadow: none;
-       -moz-box-shadow: none;
-            box-shadow: none;
-  }
-  .subnav .nav > li {
-    float: none;
-  }
-  .subnav .nav > li > a {
-    border: 0;
-  }
-  .subnav .nav > li + li > a {
-    border-top: 1px solid #e5e5e5;
-  }
-  .subnav .nav > li:first-child > a,
-  .subnav .nav > li:first-child > a:hover {
-      -webkit-border-radius: 4px 4px 0 0;
-         -moz-border-radius: 4px 4px 0 0;
-              border-radius: 4px 4px 0 0;
-  }
-
-  /* Popovers */
-  .large-bird {
-    display: none;
-  }
-  .popover-well .popover-wrapper {
-    margin-left: 0;
-  }
-
-  /* Space out the show-grid examples */
-  .show-grid [class*="span"] {
-    margin-bottom: 5px;
-  }
-
-  /* Unfloat the back to top link in footer */
-  .footer .pull-right {
-    float: none;
-  }
-  .footer p {
-    margin-bottom: 9px;
-  }
-
-}
-
-
-@media (min-width: 480px) and (max-width: 768px) {
-
-  /* Scale down the jumbotron content */
-  .jumbotron h1 {
-    font-size: 54px;
-  }
-  .jumbotron p {
-    margin-right: 0;
-    margin-left: 0;
-  }
-
-}
-
-
-@media (min-width: 768px) and (max-width: 980px) {
-
-  /* Remove any padding from the body */
-  body {
-    padding-top: 0;
-  }
-
-  /* Scale down the jumbotron content */
-  .jumbotron h1 {
-    font-size: 72px;
-  }
-
-}
-
-
-@media (max-width: 980px) {
-
-  /* Unfloat brand */
-  .navbar-fixed-top .brand {
-    float: left;
-    margin-left: 0;
-    padding-left: 10px;
-    padding-right: 10px;
-  }
-
-  /* Inline-block quick links for more spacing */
-  .quick-links li {
-    display: inline-block;
-    margin: 5px;
-  }
-
-}
-
-
-/* LARGE DESKTOP SCREENS */
-@media (min-width: 1210px) {
-
-  /* Update subnav container */
-  .subnav-fixed .nav {
-    width: 1168px; /* 2px less to account for left/right borders being removed when in fixed mode */
-  }
-
-}
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/css/openbis.css b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/css/openbis.css
deleted file mode 100644
index ede4129dde6..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/css/openbis.css
+++ /dev/null
@@ -1,16 +0,0 @@
-div#login {
-  position: relative;
-  top: 60px;
-}
-
-.nav li {
-	cursor: pointer;
-}
-
-.brand {
-	cursor: default;
-}
-
-@media print {
-	@page { size: landscape }
-}
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/ico/apple-touch-icon-114-precomposed.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/ico/apple-touch-icon-114-precomposed.png
deleted file mode 100644
index f1c93e6fd97d3ff7d5cf07c69719d0ef7903b428..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6043
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

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/ico/apple-touch-icon-144-precomposed.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/ico/apple-touch-icon-144-precomposed.png
deleted file mode 100644
index 3c80087b1e55553b08b721de22876c0469dcd0eb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8457
zcmbVxbySpH*ZvGG4bmYvGzbjcF$_aUID|+jJ<>2Rl!PE59U>xK%7c`&bhm_nNT*0B
z(%s+f!~4A7yMF6k-ygrT;LJXIU;Em1?wbWfAhlIV2pI@LAP|YVnzAnN8UN>-02|nc
zlPM#C4|;cmp}U^TQ+F>5HxvkF?P7^yRd=$mLFu9_te?5|p=3cIY+E~hLw7?hO=&9^
zCjpB;7y)l5G~f*a$trlGEvy_+?yQz58#`w?$aX^ugw@Vk4)RD$3#x^NqipTeeB4la
zKHB<LJ`Pq=)({1GR#|UpfWQgmZo%s9<mil%_LhVE%_|Maf7F5y*1sX{4swv2qztu?
ztZ)}M6swqk2)`9nNQhNjTtG-vOk7;(9;+}^NLUaGe2Mc5iAsx!OAAY|{%b*iXl~X|
zrFE56{uK*2$w6%0-O<v5f?i%;0$w5lE^ao0LQ+yve>jAN`2hq!=9#m*g*U%5hV35)
zWfaEB%?|Bu=i<!zhta~)#lu|=0%Uqqf)iRx>)*uAn13}2Xqlk51zJ!@04nI@^rx=B
z(HM7K)c>aOU(p!-XK0k5E(+t~;bsNQ<0;!e&Oq<}??8WmKsM43-0Xm%SU4)XSa~?1
zoZZ!x<sg7Xz}n7QS_LklA|xas3Y8Fsic1O!DZzw9;8G$IP)V4CI6?^a566G=m4qt8
zU~mahafF1BkPrYC6%~QQ#6*Q8gv8-66{UZC)txc!7S2|vf8yE!asTBj@_+hD!`)C8
z?k;ZnE-sG$+yJDli@OWP)&<Q9*Ao*EV%4&+vUC2U`7@xKdX-UbcAh9}6*m_r*1tO}
zZTDX?fQm^1_ve2rmxM}+s34T35K=H<n3$v}<X^tl|36(51d<W_b3Oj!y8NR8?%*Hs
z-<Kaa{QL1iIRnp(8}M-CCR8PWKv;uFO?|}Qj~IxChK81wR!~sz=J@~YfJsS72~bi|
zQ7I}a-dLef=zqenv9XDWhzJM>05HHtPfrgZsi~<I6cm(|m4TzItSlWJors7CKt)bY
zeiIQO0j3LJU@+K?64-Cwz76OBcfcejCI*-&C@26~US1v`7Zw(#q@)CR02v?zLI3~&
z4A26OzygvK7Z;b5lmx86y2$|!hXWYEDkCEUC~u+z8bAOR-~s@E{YI9SmIgQhn4Fv(
zkT#$PG6ZBG0RR9n0~(+r2?>cChW{i4iUq7d6u<;z2)F<V0A2tOAOK2$8K43da0Ezh
zc2QALpe_K0Kp=n}fB`%=UH}OY5kLY*KnBYEw*brw2o3ZK@B(N7D_{ar1u%eo<8lKA
z(f|NAncR>Avjc;{SXfxV;BatoaB*?*@bK{Q@qr26x^;_?kPw(AF)=X-2?;4FDH$0V
zFc)A7K<95dd_x690TKWLF)%PNGBPqTF)=eU-??*#g@pxpH{QK_7XpE>v9YnUvvY88
zaB^~TadB~TbMx@<@bdEV@$ucecaNW+UqC<rDCFiQ08IcU3v>gRJ1|6`!$9r8TN9WF
z&_JMRKp{YZH*EyU1f~Ww3MgMiMMYIrbuM3(2`KD?yRNq0pYp(1*f_X&|I`E&L_$hN
zPC*N#!Ube;?;h|b2BHCRfEYjs86X6}4g+ZKYiMaBb@Uz@7#csdwR3cIa(0i7ef8>f
z;+r=~Ny*8{DXD4c>6tlAEv;>xon2kMeV;$~_YVwx85tQF{rdIW_}tw5!ouRx()Z=%
zm6g@C-&<Q-+uPfF`}_L`het<8$ERl(z`6uhV}B7X@I$gtT^XkDJze7GRQz<pV|>5Z
ze_qCGb!aw4=4gO1t=@^UnU^6%i2@0Rg(|8e*vD|H5&DS`u@6ewSI}WI)@FT0eMC7C
zWv)^lWr9iMiB4pYnw5;__b=*p?9-j<uD_?ZC+`GwE~nIOPi-vq82e^nw$oivaocez
zz6<BgHl>y0(_ehXE05}C1F(H-eU|bvN<6<<R(9iUUk@D)$>C?wJ<`Ua!v`%xNs-Kf
zBTVoB>Sd@Uoe`){g_sVXA~3lHZxJsnCYazMF&p8X+P#aVezVg(pGvP<+_HI)p^Jbi
z-b8DWr$32f*}N(EYLewFIN&Q$&x<)?<N+3F87T((s{6I(VV77dzuAKZC@C7B5Q>GZ
zLSx>EY(g_#b>!tgcW5#)8~^P5+f*R{7c`M3CcvlVx5CD9c8=|5vOz)@XsjIgA&;h4
zConR|7}VK9&2c4&hU1dAz?(C-OSu*KBOiQ&bRePW@mHtUmu4LvgoZBTjOo(w$7Lkk
z>5X_7KNVaBKP`Kd;vQ5H41BY{7b<#hLaB>_s7q9Iv+Y2eRmp%A>l<io-oCZv;@kCY
zm`ngFhU7uU)S~Q1^QOb?%M;boCs7aH3w;PSnKkEsr4yg6tHJMf;DL<lum{ibl0X)D
z<2wuoiI`sAhgV1H>SWi3Exo^-wz=AH*cfC;JA8T_?@H7#vD?OSA~VBiQic`k`~kO`
z+%1__v6#cz%oM3^V7xy%K%d*M`2KCZS%*R~_x&1a9ir}v>B<M!qmRhMTZfj;gn1r&
z+cin;F0q{bsFonYp$>FQG;Z{^#{3l})GYK0ROo6<RIQ)<)?QvjPyw&@8w6R5D?kk@
z<gV7oWJ+GPeo^=|A7~tG=u%o-ej1f^F`32&qUR-GVBIKKv^M4#&wZz{8b{5qzh9k$
zl|5>FgpJn2Rn)V7Siq%y{aNsFy+Mtk8E4siAj{R5nGZI4|ND|l*h}MC<M7D!a#I|*
z=^_mb{4jNsx<{nhleQrOUDTxoTHMi%s-!XB7Ew5#T^%#QFWqZ*FiBUqyq)C@$5G^Z
zRW!8UN@B`;<{XuF*tl&!;7BoN$)C1_6}gy{gPX1|O$*Z3;P<$0xt=LqY}atuY5}L8
zHe?a{HjV|=5|v5eixN@^X)M@nzqJdS(ADYWsiAx!D^wByiZ|hJHOy`;tq8bo30V12
zO$~m0GN0u$2LpwyL)}G-xdUmHYk4V8gfpfSxK)J<X{rXz2bhS`#GE=icXc%$g1aqk
zu9m)Ro8nKjhWcKg#6YlHd$T9sa9q6wyX{YrepIB$4`rwB8?N9r{X*wC>s)sm#{2>z
zSQrQkv3_vX@TIhCZe#nLQNbtN9#0KnYN#PdOa97EC#nd%N5wXVRU28PSj-<i=o_er
zTbnb=`pA`@EwDNomt2_(z1M8!y&Kqid@;*d*OyW^yNoxML!0ZxT*C$`Jff*3rV6yD
zulcI5*K$m7(HZwdFq=_UF4&l$^{1#0<T;oUk3p$E@0gJ;n}$0<q5nSr&k}SEW2(&_
zV}8e?GKY@W_H{~Br<WXB?1<J7Nz|xl-H#I{#H$iY@h$w$TSYi^EuxFBsf-~`e}cgC
zMCY3&Nta2tE-bPT*H__Wqm%3EXAD+Zdoc}^5E~P=<0VL3SK{z<rb4)^H<d#*Dz4&$
zdz>5+6=HlM`25w$M8Na#P#!E&HraAo1Yv1`Wbsl-$07|K^(hs-Td_Rrua4;Fo&AO7
zFD*%4(?;V8U@pJ-o-X0fTk<Q5ajb$o)X1MEm1;j5HK{B^cu1vksvhOOj==svMK~6z
zE=+;FSPa#dIb1v04Zy=H=4R!6IoX4YPG(KEYPZ&=_`va4DUHhje|M1~&m`kHrB27s
z4+wPf4=61O*88j<aaT>!Aagp3XrsCZU4{jfs<WMU@@i0V&g-WAEOT)cs-iOlAFf2N
zkK!!CFJ48yC5Z2lo5;c9a3-UU5$V>ZVZy!S7-M~t(OS4Yrt(#}HZrX<Qg=q1jzWQe
z&Q;;MujiqC&f-WJd3+jf7hM7yUY%6X2-W14?0x(G92J<oE777fX(G-KQQR2UTn1$u
z{xg@0gRF?c$j?~N!oYjS%CNlq{Xw-NtTOSbEgA6*HUZg~F)11CqoVuXyrv@hJ_QKp
z;f{;FBs}O$)U4?MPTO`St176BCOZ}DOUH{>2-O5+N=PKTC`c(37wOMaF{;xzmcX3D
z6>Y@dDw0W%a+;8~FbGS*Y+-?7mqfKQf!~q(7R%edI_x(3mH96lf}}#jf8_08@ex{0
zOz4KqPGc)ylYD1>ek(|OJ7d230BX`2LyhRuNt_Ziz<v*1pJ>u&6VWCn>lWBi%AR&f
z^0JR(f6JaB=le;S(!i?6fh@}a!SNZ5B3b&%8B81Y!dXAQn-bAxS5`{A-40KfokP(I
z;y5^5jFV)N7*hv+7tUtDsl9cfyIiz`rPlRuQZcFegWn-D<JhIX!{Jh<o@e6Fvv-)?
zGsDhoNT3Mu-VepLSw0gsA$=<O{Vn21-tWun=f{)9wTRXr>arwb6)FV1l20%8k4EdG
zUIu>--rpPB^Q?-dJ-eOwC8=Jl2y9&kYIbDXY`Wj{dR1o^yNqKK3~XW6#2gGdt$pH;
z%;*tU#L1oyAOPN`P`6$Ue(GRG>$}g{aXCSLn@7Z0ezK4Kk$OFS<F0tAe3PmLcwF8Q
z&ZbN{+V3D$TVQ4Wv&|VX0{J_c4U@j1KUk`(#7k%%Es7TJQG)a9syp$14KuhJ@t>SI
zG2*be_?<_L8rDeXiBSxVm-X@N6(mVdVGo*Qf6uc#9N1*UQ5f6q85x5;$cVK4kU{Rv
zBZ^0tE(}NP&f8M9`Yzoymu++)Ly*$FNzX|t_g3vBNZF^fj&HNejHH@l4^GoZZq_Ui
z1y@xc*O*#pI;n8hj4^<MnK(@$OwrXZzz}W;Bb4&cd{jL6uzR~Yk*Fd%)$u(_knsZn
zS5{=SE5jn}kw0Y$0Za2yCf)nZ3}2OUnl<*%ILy>J*{OJ@lufmDC@(V|x;-ZQyS%g{
z^|fZ4S};@4H~5}$)9xyN<@yf<ugN&8AI!2N)}HjWb>olK@yE(-I_n1fdGoscN~Awy
z_hD|25t+u^jbq^Yv%RG~l_D0p;EjH4x|q+gbO!wWe1dhb)iSE$_c&}+tuHKz?(FT`
z$XqpmwNuCfO>)RepO{8ZE#Xf}UyjQlwi(>u!wx&Tq9ZzM5ypiDia8G`sEZK6+F^Ic
zA1Z`X-LgkL3b5(R-F#A%;Kvr8@)m96L?ag5C^>aFVGBbh*g8yQ`;)~YsC(bVsuC&9
zl)E@5C9H2zHXxdCDHeIDY3@+Yp0NMKjd(Hl=q@yHuR>Yj;)32qD`0fHaV-*yul8cR
zy}QLhwGA@aZ@d><Hj0a#)t&g2oOmcPD{8&U_-Y{twsu5aQaCu)G)$>e_+~ST2(QTn
zS|!(I*rALsr%2$2k>BLJ4GR}?x04Jp=I*iYgRc!a7feQ2#+d4a*MX76ewV8TdGk%9
znsB0ztKea0vHkD|sqa8-uL)k5>osB*yd^2rO8oLv6UBLP9x+&*7mpi7YP>Kim5W<1
zwbY%@%!$E^VSlg5MIk)lM#}tqcN`nS@Oiacw^tve^W+g`^?=(UjPZnOmf)51EBNa~
znscXWQ1tVo;+7I7D?zj6!8^teH=Y=2j(wjo5XX^_r*<P>hjlQD1W`R<%6g({-xA78
z`Dlbs!dZO%(t~&k!}&6mk%`a>C;Y)(41xc4*t^{KV}IJV7%f2`{km}EaIb!vY2F%H
zr}3(j$J$VoL9v=$c@Pc)-&dqy4u8h3G{c@G>yG9Pt9Whhr981lRNt2^vR26CilS>2
z${yCik(_JIr_8SG!M%s+omG_VFOd~xoTHD6**f|Cs}@%8-OeRUvmIA}K#_)WNVA0L
zXi8IY|A0!=jtp8v;bqJn&u*=bb6j%rM7o&L$1?sn_Reb5?-!#hBz2p<8~(uO12Ni=
zm}CkM&$Z8lPTz`#R^3jk@o0E;hh+XB=j)nkS6UF_!E#}%YCd;h9HX#Hkd#WNQkzJP
z37z}afbBEtVC=*?DG&y`tj?!BHemIbyC-so?vu|@lW{5+i;wVux$!xEG=UnpqaSb6
zqf271Y7<-wE`2QJs@F++L?-8TUw@=8^S2DsU(oQfSVUlPeo&KE??uuTeO60(rSw+z
z9MPV1jACjK^UoZ-IJZ3^44XB7*kTTED52AEnc?QKQhD?f$B{KGbi>uJ4OF$XK>gGc
zRI#I}a`j_4{Rs|)>m($&t#C=SR%#F&H5HD%!bpU-nZZ;r#`6vmReS$&1212PxvX>C
zX)jM1b)CxWv$8wkLHiMEPpeZ@(q>+h4`_X|9$v~>(DWvV7f*DP4fuR+Ai-LTYJR49
znoj&{DM)ILRYHC#q^q@g3CVaWa(^=j#?X^S0=bpC``2Z)Z+?szzpZ4VLx@4%fFr>W
zm*t*PvPsoR9#|ti)mWH7V747D(c*{h?*0{`Ix0h4{o*ZU7R8R?;AyQJR(gY`<1AZY
z1b^snX1~pO9q9O!^{1uS4o<a14lQgJ{3T9}CzAE_-i&e$Z){w8vcJ+67V<&oFb{Y+
zZ%YwGQ5G^G_jkL$P)6q_m>06w*u-y)6;Njo-!49UQ-_y-KNlJqhf6>auKwXJ#J)+y
zXG@$|cP`fBxSa<#i1QSBcS22IoyN#6GQLe`b`}R?xHH-P6`gjcu-ZVuw;WZDxZ+It
zY=IPHCO--76XY<5^pZ19t?k#m8B3Uu{%+!#i?5-m{IN~jkKd;BB3EfQy3+JT6lr%k
zmBiXk%*?ki{ho4D*$t<}6&jhy-59O=aG&1u5waRdzl4u&w`nzcWXNVc&znVJ{AxYM
z3<{fs)&r$Z>2Pl2YFNi6m1JnSHVnoe{+R!GJZv8(%tQIAnBnn@7{7Z@51#dQn2_S`
z)q{^_eIY*Mn@1-2hD?MTJ>jAwuf`N0*3LmI9|=W2$4iwN6HeLZkz*@OYctI|FN{N4
zY<d~8yT1v0DkoBaFLDP=-nBhd8GggA-co5k-1gj*p{ak+q)z@$^Ur>oIY}>p)4Vf=
zZ@Hy$wGnU3(qn~JsJL(O&>MWDQThv$|MM^9=l#dN7UY8trOvb-lbdo)Elv*HLtXU|
zFI4=hK$Ij%=t%BUUGgf9V881sAKH*^S{{0}_TMp&XxE5*@!c_)BeC%H_e-3TJkQJX
zkhc{u!|^fIf-eV-j~~mOn{+Nh1x>@LYZ%SUb!J>*Oa<vwlfFqlrA}=YA+|i&tCEdK
zdkhP-^LC!fcBGs9qHEmX#AdK^w!%R>S1uFL3SqqkB_rX#zr%*BMXM`b+=NeJw;75X
zJd{ot%KF#jWq47pk$Z57X+!;DZU%Og=GFjr_`7PUcPF?{{n@BP1f?PqVvA`4M;>H(
zO4!^%_jXG%^MSiz8p6xoHEJKkV4FA(#!0!l1i5WDltXfLs46FF@|dLk345lq#&snG
zjh<bW;O<_uYZpeAzZ9Mw*c#|ly&vh7luC`A!%Td?nW>_w+=19xTSY}{O(FVIQw3}0
zc9y8>#(2}i;OSqtI#nY(bg4eEpEB<d&VJsnfqwA%b(zN2Ib3Fhv^*Xf6NT70=)L&v
zj?KrCN6?GYt?uQrRuvqAF(jNyd7>#^<<qLK2&oorMDORkGTzb;7kXly2$G(Bp#$Zy
zhW@1~wuwsl-PQGE^;Q2Rj>p6Z7V%;i4e{O*Y3Xg#stY|nw6;70iG9)j=H#O>S?WLy
zyv@x5_+2&pVYZ16zwFzp8HO6Bb=YeNkx6;{MVIf$&FLp(H*xwqdYy&m+u^@P*YCw8
zXeD<blZcI(9r?w+B)g9~CCI~ebTk!zu+N+p#v2nqJ{m6Id6D!&EsAB#USY@%H5g%p
zkz^Z_lmE^^rqxhB$7|zjvlfbA+Kc7r`9h4}O1=`B7oV~J{HL`4vd%H{54I8`Hb!}I
z_dx8jigft0&ZOO`wcdI+ACT;WQ!@-n9`xrb4vV@N+4#o!W5ho2I<Mdu;@4N<GHWR}
zM@rcm7uVaGaDl5BSST#X$3pC)#@VbEyZfW?#5{yj59S|)NZ-Of$(?K5^l<xPvOMy=
z*qnVTZEvZVoZoFTx2gIuKUcLC-q&0<a~?Cdjt!U1$w9mfLQs?ew>sLHH|$|#mJ5Bc
zctf0?E6+yT=ch)a8)NrAy&aemb(SzcAGKc$l9ck6&z`VuO0-@HtZNN}sa(gca@qJ^
z^$oh9kc&vBUmIYD_v4#8UEc<E#TGY&X4d~w?*esOh4uA?VTRkn{S%GwkqO3)C1J%K
z!^O#9?~N6U{Cgkl8hou1(RU>j`B*+5timhl$*mZQLpp1AhYR%NgI9Zh6jU`GPJ2$$
zCy|C{R<Ea|IN&fDXMWBH$x~V8*8Ex$I@r6%^}R%C{MPfg2PCAkA0|HL5_javHCD!o
z7nJR<$|KdjuVH!%)$(E^bwy+P?|wCW5no`kO}GxNGEB;u{0^Reo!^rxGdr_8vGrln
z)=$k2$3&i;<$lOmSqOZlWa0ixF%c7SeA&{}!e<{x4whPT?Xg%?8W5idTMcq%L2urM
z<t-;f5mB=CnlKB>V{)A_F=Zb<UAz`k*j=(UYTzxFT^t+MD0=%cZ@I?sXn4l|&3<)Z
z$%sm;R8gvRaahKIA7!A^ymCd>cT>^zC;k~V!`D_MWm!~Yu`CPwON)#ndqxfpZhl<#
zZ;n4_V~Wc0*ocZ>y2Yrm>)%GmQ#IRu;rP{iJ2H^b?3oL(bW=@9Q_xWGNAt#KiD_h%
zUpwW)JbzWZWAt8;6IvhRDV^7dc8f^{d0436utX{z`Mn=&&`Ie?@|=>nmTr(?WVQRG
z;)EUcbhuQAUe(tvs+<q*o8LAc96vRc0e4EHkm`dol{kLkZeNCutR>(;hm9)OzA=`~
zkWCeccoZkT{w&5|vCVcmpS#=UJ^3l_CzmVdLi;0^ui3ZrA9*lkRLW;(jBMV=&99Y9
zUOxTl_mFKO^6n7Y_wJ08p1yzo_^`HvtudQ)PiyZNp7ZxVPIWV#ZJ8H-i7Od+J{W1L
zuSo(|iiwttWCnNyX7#Tb&LlEPIXd&pd~Oi4wOLbkRej^Ysq#q#-1Hn@_%O`(q)t92
zl`b4B1n2edCv@&uMV2y!r=S5%8m%Xx{v>h1rX%$C{azmX+gx#ev8y=D)Dq_{%2_bt
zldt>=y(~ZG3{v6EPK`@^&pFe@P!@r^!jL>ExQlbWt4e^jmuC#bYn37HFn>b)i!2jY
zBtLi{B>fE*G9i5vN6WXEIlYU20;z{=x64||e~$c}sP;_%xwybi`#p41`9l^0rIKem
zKYt{Gl?D|gTJ73%?PBcMh01$s=L43=uGN@MAk!j;K`U}SpVSV}$x!ufyYT~EB;%2Y
z)@%LcCcd91t92^rrQxBt1PVQIb2B>;ug!;y{u;oks3WF=xH*_;{gxUt-iR-^;obBT
zhrB`_TTH_*s1$Zs;>er58JgNWBX98&2@|1Qn~qGfkB9xuUi(A3mxa~!$!r$9l*rc2
zxURl=l|On|-iAcK>%x&rppeYP&nL|Ek?@tTVNdsbDxqiV7!!EsT%vKuCP3DVcI5GF
zX)e9~kmu+HeHR;+M;5qj?ae#dJbjk9(l$xBB1mDMV8ZL#y+*YDkmk6~)&JT)iEEHd
z1V2J6^XFQ_@B({IhFEH8j?uSElLdBxt8d$DvSUt11)2K$gmZYQzuYC-XRS(}8;f2g
zsW?LhC&<^flP|y1Dv*4X2w38ZGmYMlI%LzYjH+tu{4L)A$Fv+26`Wg*m@_|FW|6Ds
zKt8`H)vUQ={?#B=euyW=SMtre*t1*v*P;Quo?G+K+$PM?hFP;qK4q)dMX;~r0?DBI
zWuj4>StU;L+^*lQJNeh1p6{Y2Y@@eS$GwkiSfb26D(n@cSdw#%KHbXNs*UNEI_{nI
zO}+Xn2;JF(6<hjZ*<tp0iqH4aGqi{A$kp`ml3JjRY3fnCti3ehrvE35BR>0j4#Lye
z>db-BKjzx?`i?kj;J4GId4<_+-#anUw^CgsF>M!TdXHOAC-wH-#sq%!jQ9GU#+*Ob
z*my)%hw)zP-x$m~TUwA%cqKXKHS76aE2{HAet@FL*Y>HF;AC{zd*`O^M_bpU2+K;&
zz;7wvR^KV?TrD5xNd@J!MMy66?>l^=HIZaI(d_lC+&+8Le3W$uXDE(KqS2eac8BtW
zOW{=2nRLS`Z|Kz-x)E3UQ+FPI=9Kw1uV?9P!<cr4G?(+7IPGjTW<=A+SuH|Si5eMn
zdr|Z83wriWZ8PKLN7wuNpz+qHZzpA%+RiFS4J71`{JoB=eWnjV?#ijbLsXgXs$B>N
z9P>5fz1?GIpRZItoCR&nq8!XCeUB=}7p~?4PMH@j6CbMbJv=wW|6$^D@>XF#tsU2`
z5>tyohdMZd%rB>7GCB@57WVO*uh&b4hKn8*O#P)$F_&cSA3NUTKm^)-+kBC|Z8r0L
z=<QcHUqktPdca}qTi}oH=4<gRXR&1dUM+PIWlRMq`cKc?4j!$Y2xBTG_kAW_x9oII
z2!J;>shJw<yYU*%-$oohy*xWCBb_|Nc5GgW+sZJ?k~#ULD9p5^mt18xK(rFAI9QH0
z1>3CPd}%)G-d|o3lnXm~?Qu2ggKdAE)_#p&n@FXp9^fAH=ii^|2yNw$O6EcT1I9|R
AI{*Lx

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/ico/apple-touch-icon-57-precomposed.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/ico/apple-touch-icon-57-precomposed.png
deleted file mode 100644
index 34b8dd6bdaa38cb0a057c837ff8d36ace98ebed4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2260
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

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/ico/apple-touch-icon-72-precomposed.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/ico/apple-touch-icon-72-precomposed.png
deleted file mode 100644
index f77bd6c99cf13360dd9b0955c701274f9aba4fc8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3204
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

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/ico/favicon.ico b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/ico/favicon.ico
deleted file mode 100644
index e1c310e416b7b503c4ebd0855b36b58ae6e3a2fb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1150
zcma)+Ic@?$5Jelw5$muGYhXd*gqVoLk+Ccmfw%yPZ@~z-4-o+*ESWQIKxFwC?S5qy
z8ionn=yz5B`u}%JNMlUG{XEaO{n>mz8RHvcUK||dm_ObXW85sdcDvnMtJV5RrBW6o
zlgYcPe0WBWXS>~gwA=0Ps75o=>9k~p=iwZ@XyTxrxLG)tK9kABB0LM{px1LYo3#q~
z!C+wH)@HM@y<YF8RSz|n%L(X*!=c!(*Q*VJz%CXGi<fmc9K;{i(|ewG%NUJDqCFmu
zHlNSmAf(&Ss-FAkRY$M>%jIIn<FTB12a8Pg<DoAU3gRyoi_+tXTjaU_OEhTpPW+%$
zDhVc&iP*WTTrLZ@TrP#1&*v5|TD^}Rooc7ksc289ldV)Lg4Jpz996Zd*E3q*_w8&p
z6K&kaOf%8qrNULKRYAAgwd?iz0r0h2O*DEJUiIs&Ua#9I$cCe;PT$e#bbjEJM@Qdi
rG#&sS&cVCi@8A3V{+DLpYc`vAZ{VyPb29Lp&*#@55&a_k|BUw+Y!9}S

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/bird.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/bird.png
deleted file mode 100644
index 903e4c78ef5b1f79be7aaa5d3d7feb0abfae3a0b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3092
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
Xt@P!?g)a1ef1Qb;Ik-muN%VgJi!FB(

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/bootstrap-mdo-sfmoma-01.jpg b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/bootstrap-mdo-sfmoma-01.jpg
deleted file mode 100644
index 135c9babb0431578c5d0bda44a284e8bdd5e3824..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 130647
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

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/bootstrap-mdo-sfmoma-02.jpg b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/bootstrap-mdo-sfmoma-02.jpg
deleted file mode 100644
index 704e5dfe40596bc46f94c336f2d965294879e371..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 84505
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

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/bootstrap-mdo-sfmoma-03.jpg b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/bootstrap-mdo-sfmoma-03.jpg
deleted file mode 100644
index 430fde2cfb6957b0e010889e63355c541f23e4cd..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 50755
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

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/browsers.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/browsers.png
deleted file mode 100644
index 73b668d9140ee4371928d95f084ba6fc9b1149be..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19776
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

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/example-sites/fleetio.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/example-sites/fleetio.png
deleted file mode 100644
index 9207b0cb805e3cf9f0edceb912fee623a1f9212d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 39837
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
Z|9>`o7|aB%sKx*Q002ovPDHLkV1h4V#G3#B

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/example-sites/jshint.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/example-sites/jshint.png
deleted file mode 100644
index ac7086de1d41dda2e67698aa300963b332a0f52c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7258
zcmc(E_cI(0(EjO1lyiDNr$mj5-hvaSyC9;6=skMxqH{#=ArUn?NAwm!^nQ8?j*lKK
zBKYR})B6v+Gw%=2&i=4FJG(Qx&&;!N+DH{L5=IgL06?aus-z15;0XNl{{V6S*>sAd
z&j0{3yP6VQ&(G}eeLXP%0PGK{xO<T7MZb&Ko1Ofqk%=G6TeW{enUW0E|8)Cx0-b&M
zeu}&w0z~ZiR!w$ZJjhqKryY;)t2c`p{n6G0N^SB$&s~u2RmmJso>bXI<Kbj>H8+|b
zd4zSFUH;Y51e#4GFApY?s{2D!YiOh)n~_A}RTOT-=x)A<<UlflDKI(p3*QGHBsg}o
z&a9yM4oYjXXU=`7)a}WE)_aL{-Yp-ZhVx`Hj<Ym)o=ml@=d=MAECf8#1g{T0lb}Qg
z$82gHhHWfy2qn|Wqan-{%I|O9;C0&ZVdlu&C2dgjasy6A0&v%{&WaTCxwQ#`8~X+G
z4pYB@1I0Hng9b<K68qylagg`_%rSy&tX$H17?_%ZJ;*<dN)dg%C1XT=f7@bGtv|7G
zdu~~eIk}FuaBf-N@n|)xl`>xN_76$=Ig0iCz~y_O#k*zx>~us!4g@6`vrW?qQ|MSY
z(Bh_&L*!?uewnirGKB&b6*7F<pA{gDDoUo`rz-XkB=OG?M+TF}^iSDyR>w&cNh6Gu
z(jigX;<s={{^(cij9I93dQ!q46v-r%(|Sq)q!ek2KhNmhcOf;@8a%GZ)W3_)y9)+_
zZr0PWRUtg+?y!g77c>1|h!$11gXHXla{@X)XmXo}bTE?>B~=;<c;LweZXjj-%k}v3
z#!A;u3XzXD`B-q=&1xNTGi}_(YK0A$>q;HYlvZ5YvQMdmvNS{)(JnHD6AO-Ftsv7a
zXYmoatdaWM1#aSc!$fO@ENe2R->qd?t88Y+Bj<$P)O~Jp%9{l*ySuX+0YW>X8TSev
z$cHl3xxVgg<Pd99qVt3#wy9FU6?*YzliN~fEzE7}gwNv1z4!ZIsBx<pUN~nO<n?ov
zG28{(bzk5oa~|sK=*&4oh6pbrgl#NU{>!9y5GoRp&!7g7(PhJU1uuycC-@^R(+nPs
z&W4e6jn#rP_i&Y4wkqdjuQ=;ofhKt@B`+S7K8z&#<b@=*U_+iW;yP|Kzh^gj6x%O!
zHDV*-0wL-5CuA+sEis!hS<>Y#(PI2@H?6&1u7yIOoO#If2<f5_0Aj;QMB9!a<5}e0
zH`Nrx0JpBhs|ia{zugC{yxsV4&fy7c+Dbfc>LPb+*Ae|`;q_e`BTD(;atTJ7X`i?*
zzU#l{(W=P_Ha&gPOgsPf)t6VsJRq&Pz4BDfGX`7m9wUG_qqvffC2pyd##fppq<Q(s
zxca+MrVV^ceAQZ*Hy{F*%7jk(sbKOX>-7Q)DPeADPATzZgJ2iTL6U5_ncZ5kCPCa|
z^-Nn;=rZWVg7=`e-=jziAPKnLg2`}f!^^Mlgx&JLOX*-zFwWp)vTgSchsnd|#=$ki
z&`CQH8TWX*sH!1sv8SZ_m1U3)4>eE~gb(DF>oiOLl@##!Plmt<C_bAfK0*bS=bd&e
z%}j1o@}U^?pE~o8Sm*WYGXUWVCHufw<1vH6TL#v@(2h|fgqog$sQRshaG1pR`{ka_
z7@0&lSdQjb!8Js}fTeW7F9Fnm<<GNhrh*A9T>ec4)6V#lP_tBJ>z+bcPOb{KR9Pu$
z=~C69UwV89MjK%Uuyo->mO9s!GaSiZHVYnB&(L+wNX{^QqGGK5n)<PKA75?NUfigE
zHH)nL22N=?$&Hdf-nNyERgvG8u;NfG`2H-8RcpM0so4J$s9@hqI&Ul@0$<PH%39ti
zfnF_>o_H(MZ^$2yE&-vm#bPD`Cyg+QO0xyVZEQZ4$$3c;d+5{N=ib*<BFLJI$4<_p
zLc?*(E6)kXo!dNkeio4Y2?SZ8qolgcIaf&|j)}0@hH3-5fz;8y5l61eq06^pAq)qi
zq<9vRLJ>fad3(5_bU#3&#Rm@bxk_?i3oF}wiM(@KMZ|+>G|tK97xzQ!Px2cziqyni
zT(XULqiU1dFxSt@aIR_9dFg0=DLq-N_zZft+H?H5OLt?@Bq6dxY84P|{K1y^X9#>N
zzqjXkHSRToo*elqCBHs6b;g$By<Og5R8#y%ryQS7&9Ql|$E||DOKP)jMbO`$P4aPk
zN_uCu`C&&Mct=B^W1vVnM?hv9le0tV&2JR}iCiZs2&Ga4sR!2l78O@sZf5p1O&j_)
z2e`R<(39;e-RTODDXJ-;agl7NHxxMgjMlI$B}Tv3k6P(|=1ilr2;-}22ir3JVtO};
z2CL_xHtckP{^M}TR?V9mtDxQAqh}5w7<MZvfC7EkCfBh2L#Q@LV(Q~$wbAoT9zG@^
zKp}GmiCPqGRAKX<7Z3aLR>}fCN0WpAQ0zzh_6K8n{J<g@DS*VAILTD?J}ql@_R34n
zVyolCE%9%t_QK&z$X-l{spCslz_Aq{Mc5cC^UOa+gaDQf*D-_iatZ+ii3K7Dr~~O=
zey<8Vv)(qex5iWQ8YKv7L|FS%*Vd={rRLBR3#a*KGrS24ij>`M+-6_5_)FbG-qEAs
z>{RcJh~H7A<@y1Z&@s)kZd~-0!s?ZrxFAGrt0o2IhakrkL@3LG%9mL1?_#4lGO(;J
z2?>d)EWHv$>9-FxHFaInzFB1K(72c`-g;6*M1<KoM~TwsN0iX8*beE|fRYq@B|pP|
zDOE#fj;HcOM3f3$tw7@Xlxz($CY_vL-;lzOAa8^B!cSkd|MZ6ygdP1|ow?I7p&RcZ
zI@xM|#R}R5P)0U)&dnbum4s0WiKT|Va1lGrSM`0yZsJ7ALl;L&xG87-j?WUL#3qRo
z&mj8Iu<Tj&qOxMHs)FgU#5kB22ZBEcf{LWLLm{~3#Kcq5S31z4X+!3e2<G88=1wEH
zQUZ#x0-u0VzH7A^2MQoHsV_}PBc+B<M(Hr9a1qo^z#ozYglaP?71Qf|um53*k5Ac4
zNB52-g)G%#j}tcx3bs)E)yoxu>@oO^S$ot^I+zF$gDD1})YxNH!&bmhz<A+M-F7qR
zqpBG>4X(W+#+@1lNC?jEO#~QXNyBhq0z`qGQ<GnKTbnZFUg>CAjlk<V7-HfLa>%a(
z3#;<#0T^x({cFfVEZt&Yjj~8yoU*fF1usvQ#!JD#qR64cY%H0xWKe1RUd;IyvWfF(
z#b*nNaWIRj8%gH>uIkr04k#J*IyvKhf;T@!!P%l#n_3ML(xLC?(#@Io@7@d~@lio*
z8Oj~X@y$fgL(NYDvV;<6PrlrIW1yPrgD3~L=dkjh#fOI}Bz%jAi4L$c$U9nY77{5x
zY}lhT2Uz!NXRNS%A;cr;<$dq;w4gjdBW3@U?Ock*;mbn@@2`v>Op++<W1}k7@hQJa
zhHt`d5l7dp1B<JfiKLDz%j<zw6(6aQCR%kfJZ=EmeA!tqy+kp>Y)?wuy}55yQWA`l
z+QSDFO>i;&nt3Xbp3&HpI2FQxAD^%WTe;EL=pU|v+~I7;Tm(RsXXyN|y^~DlPVfrZ
zrD6`EE_ePo!6=L2nOhaUMqZviJKz1wba=(crM<u@%BADN(EF)y1vv<YzaV_9Fl?gw
z^~H4i<>%7PsLc=3g!7oeUKf~@oib4%ZnH`d8q~g-N>^e#`N)pcvBXLJzc?0Lfg53c
z{sJS%OMCkAi$v(>@~Wq#pJJ8yK9*Ie-#?MhMptg}Qj>pbGT)EN`1)VgwO-%s*@fcs
zNXPi(>&tINj1}JV=|Qd?DRQsR#iMq?tmTnh+e2zvR{af`)>TWM?J1<!gvo&zm_Tfq
zkAbbp?yjW<Wp7e3=;N^2HoFpVT$&#WoUcEj=8JM>iO$kD*6I%od}q^lqi?LMH&cXJ
zUDPB>$Bz#P4wl$ewxpG?qQIfdvNGYyarB`0wQ8#eK58jQ`BHZLhPN}V&8C?OWo^!-
zN{w{=hF4O@=~KZ#b^cAc4U;%zhx2CljvXmxQ<Kw#x<wyz=2g$4GWCj9Y%SG$w5;fU
zeOg#>e$}f!vZ@uOddVX|Wwm_zHx8v#?}>Eel*qFkYa$~Tb755W(K!rC53tS>h*qz6
zV>;!Xb>u=;4+U7pElOWCb>*F!Iul!bThOSV8=oy88n+*jFjzfqXnFkk?2=RI>AV<K
z|9EM1DVQ`RFLNOZE55}}mQaDf=uk`I#E?=D+R^@Z`k)<opz~+Bk&4ORU}o3Q+`&Tx
zRYi}jBLlo!dFXyiLJZFj<8B%SVit#AKJAVv?=YW^&n6IIYXC+-bO$ML3(R!b4QZ1n
z<KARGVok9iVkiezTS4`{zDfv}L4)8*<nsZg63~7l9a?TqC29*=N&w0l!7~EJE&pA~
z=$Ceo0)=o6S^e?^oXbr<)xcWRzZ7jGz{dfeot*P+3y|s^pHUCYJ3#Saqcr9ek!wen
zLk9Ray#>hSr~HbU9eId!aY)@y9wkHe`_+o)=+qO#HqfSV`rqCDvs-ABK%{EjYLMp$
z=1K;;jM#N{+4Mob;h*05HR8z@6yba~%W$=AvYbBN6Dp~ZQR{D(63EpYj44oO?_2K<
z`dmvbd2B0PnWC9mRr1S4*@u9DAd~Athr|0EYoEj&aI!mkv&f}|PoV*ahueg>Pn>qk
z)-MSAa`feE^P?cAr~fWJB#b7uIxu_Rev5N}s3~k!S6h3s6X@R9%Bn&cQb6vBz4{jv
z8++BEj;@uVgj&uz`VSS~Di?S@V3kU|Hf~7>y3QpD!&TJa;ku3iw&L-hJX!@-gM6ut
zFdTdt>ho>2UAIpgp(RZQuHm{H%pmx2j5v!4r^)IHn7RMTV_)t|Hz~>Hl&&_2&_cu=
z0Gx~heoTW1xJZ*|&ZOr&o8U;t^p(A=gGtE1WEoY+^4hw3;kL2j67Pr3y;>#Qjz3T%
zdd_?3-(+Q7gi%XAQs0?I80MH)l3fse>|!hSYR2HME=bw(8ov{}#_#TGlZDAb6qiPt
z-vii}b^Q|?jpknzMmA6+XGh>hh5~vezSF;~U5IO-hN>DLq)9xvzM9T5co=;$M-l<}
zE-w@KXYAp1eqNW~pS$4$1G{eK!d8D5hqr%L+Fb=E#(vBFX4QO=SQvbJd6P4oz}6`t
zakI0H{$jTlayfn!C*u0AzT`=u(P-c3?BGe))4&7e+x+&IEj8v{zZVxN<}-IEy04Wz
ztB?Ib(QZ3^w}tonWBOKiD>9+ZWiNt4_Rr7Duw|}={s-tQsU6l+v7i`Uo;|b3`1Ho4
z92{-_uVNuK>r^WLX&f9L4q=XwSjpxSVyLrtW)}9u^x^N!zRAL%P-ugfZ(A2k0@h(d
zue9-FU}k6SKUBAwq512!)6KkvC!tkM_vbk+UB5?KZx&6|@xYpE9m4XS2frS(iOy#}
zcpMj;pLF}&e$S}LGdJz@v-P%t^V(BI?$}x#t+a>!K8Q*_)<ll3b*;Uuczt^qBvbm@
z{c8T=$261|BSlROrG8&W-2em7<7M2x=CDdu(eXOnyDq?^ts{@{uvt%ge8uvoY_lG3
z;_n{aEk)t)wXVmvgue1VdtU*PgoKhe)BJGE?I=a49IOFbVsL+cIwS9QcxF`=a<wk>
zciSMaP%^XB2-C~)*ra+at;~#pdGYq|i;&A-LZNrF=MS=N55som_bon|Pv0}rFNbb#
zOr<?G`@8T`{<aoR<wer5409&`#QkqNp}!aMSFF;kgY{P7Ctw1C*FlEKs(E>1VTYK#
za&MD&4A6#o$CC7`Ji`3d+#g;L0%JSyrR?4|FTtU3Xs!ZLbtBA4gyZD8!Nz56q@;&5
z_RX|)W9yW>=xiK(l-AQH_bFs$U+_dq&AV-Il$P-5o!WT<@r7T}p6lUq?^_cDQ`n~K
zZa%XNa;9k#w=z-zm)Nk*7SH5uc%bFr9fZ?I6~bPRC@%-*>QBnwrOhJ`b3Xb|gIt!r
z4uC5!WFG}uCuh};Cw`}T5d3{~byRG$*xIygjCy=A;k}}xZ&9$8-Yu&{>fUu+yU<M}
zlV&&0VCleIW*O)e?CK?c-of@=M4owY1lOZOQz0@82>)M&0=YsYMDhO;Aa;o2{~aa=
zU!r5v+w)Cs2g|BURO{u6&~&kNJ1ZH|^3t*bC33VD3zz+{rui+X!h-kAqJZzu*z+{C
z?v++LtQzk#S?T<-Qr;53m9`1RB6Kra?C|&)jZJXl65J`P(hH|Pa7543VW^Z%_|EVl
zWtijX+`I-_hk(rwZovv!)0-VZ_hY@aMCge#=kq1Gkid&YqAVv=a|$rry|Al8>~3q&
z-?@NBkK@;VO5fr>TxR(z`r>lxVy1<=R<oHF?E+DRAV#rbwt`Czwr5M__fIFX+Jt3l
z1{3z$%B5On3qoXss%M+0c6iF`5X=j)jLGR&Q+a8%Zwpp1$7|hdmldy<_q#h^b}tJ}
zRoh;PiFZ84cTD&>k4T7ZurJoFeZtzc_QI^d`5{RA?cqN;NIo`g&m*1owF^@cNL9>o
z-opf8xb)&Sf#O<O;$*I!sPUaq>vea>Yu((r{Nni`8?>8NUOY&ZQf%vM>5d60rTj{M
zFk6KN<q>CDQ>cV)e05N!lXHL+NfQD^gr41j>9;k)QJIz%-*l_%dBm1>q4-Gkz!TI|
zyFuygL!p@;(yzn5utTJ)VP=7m?yrl>zZw3#pSsxFgq9?@YMU-IQS@t@EMw9@JYrW*
zv}(+dPFhb~UTq}E5#vZ4{Lk9-!?yEPirvR=rX=sVR2@WFuY-m967Ck)(B0x51v+Cx
z4OJ<EM)Un=hM6vlNk^+>{wbyH`^TwK7g#V)xWYrY0=r3@T3YH~Q$~znyGv?>+O(E2
zP>^_AXZ|2#{b1n_ug3gLroeKld4QpilX7m(2NtyD$ARjnk7`7T+`a8YJqc9STi1Q<
z$QjF@WQ_!0E(pz3%$mzRh-PSp+_ebhm?F(ym1ye~SL^c;M}!H}kVFktxLt&SIU#S}
zINhJ_qM}+Ca~WxHi32N@sAXcMn><?oTA0$9lMskc;r?!FP~rjNB6NCtDuW$1*H&ec
zc1kAy1W2bH-~PVtZw_zG`A0nRelRij+qACr;8UiSk&1GC)@Mcd#2{TBdSJ~B%hiA$
z-_2At)AMGWGOL^2%k=<Le!RQTYyW5K!RMD-eJgD89hXyMOu=jqn+fv4smQYXpxc?{
z!pjm}-o3g8rPzj#t4mT(<^HUk3$3uR)cg39rVT50!K9uN&dnWoy_mdEw(qQ1l$8-d
zMf&~!#){&NvkR+rbV9maU489bU9*0Y@YG)U`0AM4beN^T4yl!(CjBM*Pwf+BJo4cb
z7PdDr&R!>0c@KvC{9#N*BJ1klbnd@mV0QDgl;;cD({G6IxN_jLorBAualQUaJJB5c
zjcyb-yb{s4n7Hs$?qM2%(r@4LlD!*kEbf2q&8XE`gX0-&W%YBT^M1P*XS%@5)qe88
zp^>3-X8)2e{=dC|=@rXx;gKWP(`3Sa*y?KM!dh_m>eAVK?YdKa(?06^ksH0B8b}*b
zelz?<zGU{l4{MEv3arm^@rmD0I@LZ@m0gb}V1<;fi|hC9ndCz$g>R=yMxNP?r*PuL
zF_IF-SMK;HVWV<$8G*^Ad3m{ed-q+&)ymNVc&tfS7A{pV^Nta%hIJEXTqT@5K)V|E
z4gRuUKj(F~rVjYCwINqDRSg=l`ccr0d5dUjKv=+0$jdK@-?-2sU72VQ-X{5Iu#xm#
zIsbFY4<V}WAyT%S|7@Ig1io5ivRtKFpPFPkq@Mj@0Ns*&`B_Z&f}i@AzjG=yX*V6D
z^B=Rjo6(Q^ZDta`2MV?fAp4IvGEA*%M0t~p>EQX{CRF$nuCGoR_v0F~+c^ty{!>}r
z$D2}HlE@Cxcot^(d)$BsK>XD1c~!h_qbB)EUnr-Xw_aEPaVqtTEGy>xM;c(lUf%rJ
zt&FG4c*OwfA(-Y=UG4<-#d7k+Z^>-}MUBG+FoQNkxfF02-pZV&!p6>oMI}}d9@jpE
zigU03-7yK2SyqiFEUp)QdM5iKwn2bU*+Ef-jqO#w@5L$Xz*F$td4B$(6Wz%o;gUb1
z;n_$*OSiju*N-yDvhwGk9<`qC?OEFBY=0w2nVd|%sDIaWsqkj*gpHvgszscFeCw3Q
z#pSK^p$5k5$+E%S8tSshYLOLnyi7-Tb$wOTLNn;W$!vChD=wj!_i^%cqsNEy(7oL-
z^O=j$*_k`gyCU{^l9urPSM8yp-=^$YvYLZA&dgrC+lh*qRMtB^%62gsHki1x`o$bx
zLpZL}m$wTfP@-$R&D8K1!YOdV07%@;rn=@2IL^<;Uqxeb-|M979QoqKM9D~&)s&(A
zGkRjzV`mi*p>NkirbW(K{iay?7&ct9C#An$sbcOpBctNh>T1A0L!BT7U%JRIz(Y0-
zxk&gYXNBEVl{M=eLdnLw7c;x?4(Iek>|o#4M#6a`vaI0K>`WRJMJacS`13lMVWd2A
zoZTzI5d|R{#Fp+BJn?<wKHSNqMVdIe{YVxb|KQ2XS4WEZ>bDQwg;*ohwcsJhm}eQX
zVJseAnCP2@pJq7h*>&6}$zz&YPsYbSx+w%yNm6<c)O2;-k9{#P@ABZf0mX@6Km6&X
z5GsNV*$Q{sjoXMAeL?fHCiMO&n%UosfiY_Cd$o-@x_ruOZwq|?t?9CDNm@&mc8)1g
zn~}L}vs%y(cTBJvRw^z&H53w|*%LyV;Qk&-rktk#<)>dwabx4+N(9we%HhS&ZD#R3
zoxl-b?`%;C6O*R03mTWps7wD<0YUZf=N{pKPer5{RZj4!{QSJ*<h1C&D=~px3`!_L
zm!Qc6werZg(;Ac)E$a=9P2h|O9R#KRdn-bDado%aWda9w;XPYVDy^&!1*q5RC8;*_
zRk|bu<TJig3NJ4d^sMZ<!fYraBmE0NlyQ+9CMKodmCI|c4;Q6Tv`+G~^s0HUU-%r5
z5e7X%4nl^?BVzgdX}bP>BlfKx>fL$DhnsRop_je+kp%456Jp?GPd|o~R55C661{4h
zUS$!|6<mtqL|okddrNl6FOCh!S9A|h2#A@;;@(pC996LT)}1->SW_k0jAk2=?vp7#
z0(guCX~=cBsjJypcF&Udy&`0S5~&n@a(2Rp^JUCEZnA#}%x5W!rbS{;+&##-^xkOS
a;n@V~du&xQx&2c}0cr@OQjOx9i2n!s6rPy?

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/example-sites/kippt.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/example-sites/kippt.png
deleted file mode 100644
index 4afa772ccf73199892bd24c0b6ef0067aa69057f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 50695
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
O5O})!xvX<aXaWEk5)G^X

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/example-sites/soundready.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/example-sites/soundready.png
deleted file mode 100644
index 2675ff9117779db1ef5ad72091f2aa376270ecc6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 53979
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

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/examples/bootstrap-example-fluid.jpg b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/examples/bootstrap-example-fluid.jpg
deleted file mode 100644
index 151b987cb7d16cfef4e12b65cc9f2514889686bc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 25832
zcmdSBby%E96E8ZrySolBxVr>r1|J9x39f^?1cC&24;q{x0fK9SI|K+W!Gc5Z5bUt~
z?S6L7?!D*U=eg2<4E=WZue$o}s_yEletDdKTnCWKd)rz80AMgH02T1B^mquslk+gQ
z_W{5G5TA-Q0D#AJ1P&W_cV|&9E=M;`Qwt|EOHOkq7?-!HGZzmhHy1!$%G=r0+}_fi
z*38n{)=`4~q^*md*49FTUROYsTh&?C(#BTF*VR(XS54d8*WO&jf?i6JR@__E8|DnN
zbT_5-hB-L8iF!-W|4v-=DgRqB7d`FoP2BAz=%s(_l~zwxgI3nb)sj|#lbgewTabrV
zke`!>pId}qgq@a`n}?f=hnI_6h=Ye)R6t0Sn}_y~ME}&AtA&*)R8HZKzMh^W=>Hg$
zmzNi(7aymSt2Gyoh=>RmH!l}2FUM004mTf1cT;Z;M>mE)Dacv6nY-FLyW2WB(*8!#
z)Xd4lU4s6J(|-&B=KN2x|I2svZw*yd|Gp^<_S*~iovfQX)bd~a{x1o;Y5O=^azQQK
zoIG63EuWe*{04Rwm36f=b$4>rc5-s~^DS!FIJrBy**H1V%4!L4^3bZ9n%g@5R`NSS
zRaF%1=;m(fXl@CXlc0a1!D(x2Au7)!uOKWVBf`%wB*()e&m%0rFDN3w&nKWDD<C2)
zB>X2<&dJ;ZX6fkuC)VO$Sn0pS{w54C=ck_KEM09qEiDvWonW-T4_egruXz#rOL~7`
zE&iGp;lIRkJu$=e+tmKsRR3A@BtO4p|0%dn5C0T>OUEa9cYPA<$72BY@8Sxu`1GVe
zaF0uXPyqZt6T(vt0rBY<0TBuDw}ga@^m{@^MnOSEK|w}CLq|tL!~D+#hk$^9gouQO
zjEshbfrf#FgZ-3naDH#}#~;jpJpCu`pHGjU0C=cyh;aT0aCiWCJU9eAxW`^V_mh@C
zaRLVi_s<mo2^j$q4ju&+4gIO`KdS&wHAu)P@Tj<eCw|}&5D?LEP!ON+0Jx{o0Pv9T
zk?9Cfc<2eGwTMtPUEc8~6>Ko1lA3=0vM$rjXYLj<E%%&Qw-#E*$Uj5!It7g^(acrW
zq6mlw_e2lyG&lqlM1<cNfy0AGpyQE7MA9_HhbB!CAd~!Xd7b!0`(3Tp=XHACZekQO
z*8(D$VDraC04Bl{pLhs(04cy-XG|9X6aUK&WaY8C)U0_DLISrVlaP704w^CZ?Jg36
z1V_J`5~VOvLB+(FgfQNprcFr;NmnI#I#uY+5`C$Rh^xU&%n+e!2%~;R2Fy|~BWVk)
zX(F4r1vF)n3in_<;4*%O1QZ0(W<{Zjca9I4a{FK|AC>@3Vg?8LM*8~RM&c*ZZ4I%>
zOs-s{#aIGg=CMq>^aq<#v8|4eCc;JhuvCs=MA45ID6PDZw|ylssq~%pD&DWxt2qj=
zr*mnz!S3mDUTp8d*&ivAz6|48brlaMP8$*>^C+gXcoDJwL@V~~z?R?@)QW<AE<6tj
ztbBxIM{Iz<L5PzALPw`wqvj_R=bT!m*py1^KN>7>7#vof;4MY)gzY)VLSAb&p)k@v
z0?c-Xq=iKVzS6rl)fb7^?JwAtZ1ow&2~UkU(lz${nl0jBg?u6bqoV_gf`|_NDdSLF
zws^?A$EAlhLt@n4tRty5qkH2gNq=)h738PR&uPjtVsTpvH8S(X-_jt4pGiHS4J`|H
zNFkyy8LEp%#}d(NuVk4}PA42NO|1{(P@~`Kj5D_cu%yE0UJhX39ZuTG*bWVQ)6Hf$
zikS|q`N*@#K&BQQpJ{G11hI?P<M+Uh@xv-NQ$p$3G@&cDLfcs^7#|`L_ZSAfsrku2
zx`;TqL8)^{x=UCS!V{Vdzr(N7QGF^Xz)tR8$@XKRyVJM|SVW1WS<UxOJiM*P!I#MM
ze7zC=@!2WE?dlOiZ@l$NzW2MsNpYoz>$a!Dg=-sXMn8TWLaC19r^4UC)ME&JI46Gp
z4wn5-u*QFZfA2)`x(rxg&YOJ45<)s+)IU<mzxbvAp*Tw~ag~i2;35e@BRn!5-+(Ok
zik``6)EOAsA2)M`dFgnwAQas=z~*fPo`;Sy_uIy$haxtXLtrx?5H>%xY6?-YuJj>T
z$}EInKBfmZbFc%+CXAL}Kd~H<Emz6$6YHH)lXa7RMCMzCM$T4_$jq;pN(0-Js9Mg;
zdU~v?5r@Ro6AKk-KaMtbBcqwsTNEBZtqXhv{_+x!07cW-VTwi82-OA_4q}okwF<3=
zChz?Ro=fwGIgf(}f(v`FnFT-HkP0Ym8OTwYAQQ3qDcFvEsl<qfAfP^SCJXsCTzstg
zI5J~y^z(*d_|YTa+E419wRL(b>(c!)(R4P~{+-_q4tIU?R6jCos)!=whKr7nfJYQ`
z@EqR#FoiSD1DXFWd&a^QUo$9;@UUb>YsljTpM6-B!fb5|qG1?PjvvbG&+ZVkxabpa
zo6v9#3^CImNhJ9KBNhYO+<Fjr1NL`FB$~+kOu-mzQ#6K@%ZmBiqI{iOy-Ax+gBGy#
zER2AHjgWngelTZQdxw2z@%{;cG$?*=ty++02)k!bT|;9lGtR<TE6aASYpfM)xQE@R
z0U0mg<oJ|0Z^LhXQ98TNo~mqK)FCT->=sgVw8sjWrk5!ePkpC3tes9}kW!Rr?ut6y
z9gF~+q|wiA-xFaEmu=cS2bO_$2%3r;bN6MS_-_^<`1lC`Gys5wMa{R-cS<3LXO{|n
zU)<3xzr3GYAJGo0H9f0E+3c4QjE%ZG3CD&IKkh<#j$>yb=^D~ncNp;vnMQ|?RVN6J
z>Z@(@5kD!<L)GfXlWj{2USsrqiZjcwYLymJvVFri_F(N|;$v`rtI%YifuNxwhr3(Z
zQGEkY87Ax>0fqt~s`Uozv~X9#8Xk$0>IP`BXO<V%Wp(-;H)`v37^)|J^G$Y`cpWAk
zmg`~@;a{lp`~1M_0+o~(tONB%Leh<*L<bP!a1_PX#8H^2MwjfCBT5Z+e64hxy0nB1
z6HqDhOK!n1q^g{A-4z45f8$%z7C$+SE{@*XuG;-CWUs?A8l6YL|D#X;uXg@_Ww1{F
zJ1>c`@Pc7BjzP7Sq%c4su179y!3jfxMXk_75BaF~lpmi@RP4Z11g?dOW}oz#rcPQ7
zpTXu!fG9Z$02^UQny~ZruZh;uv>gS}sD>drD4}x;MrE-mobK3Zoi|Rc^ulV0?-wa5
z9_rmS&77#9&;rpP3-Cb{8$tMnO<qGvZwZLpCEzY|bUSyOG_g*W!t%D8zCV1bAn5p>
z<F#_0YO`FUP{DB{n}7N0@-2jL$`>@lUti7YV9GpyYo30^_FX8umT*s1;%xLd!|FI?
z0p??i>FC?`YgjymZZ-T8ZbqmN%>>&8{-JN_L)O`vznn224;p)qWilVEmOwn=;L_zX
zX3O>w5ZttV(^~%v8Fo}Mcb9Idka+KdkB`Rm2_wmdzXOOd;r~2f7(0Lg=l2Xsk?GAz
z)Q6U57co*2r_Zlhs1w6?I$1ln5vI8BuKRSC^L-U)a(}+RO~Fy>IbS1s;re=y^p)R6
z#j%FOA0#j<hvVtwIYi3AB%oU4wM+OAwz$Sgq&~!uPbMKG(eXQqPn(O&-R{%w!YP$Q
zeT2|Aa9;Sd^E5xWKkX|dG~@A4yVB;(m#00)C{R>l5#|5e5b4AwLwEee;Gm-h6y--i
zW>a$d!Xv-{drFG-diU%7o8Z?u<9$n$201*X#+CyKpD{y|l4{fn%i`cyA?QB)X(S4@
zaoMkI2dd5`FB=f&6V~e@B`;19BEQKa#=LrGx;+$4EDj#$)H<yFkiuV>n>J_=_rW)n
zOC~<?S-jc0U%mzlAvzL#h!@R6@rwef4OQfR<=Q;h3%g*}*U$c_{F_X$F2($HV_uVV
z%k9K|7kMy)`xZ^_QS3l!ObV+S9|^CKdo!A}A$yfAIv`knfLcKEAd2^U-OyK$FEk<r
zjW=(dzjXmyj~cBc@pQLFag1~8w<r=yxZA)cSSd<=Mqq~4QUg;_C$`Ahef!xuAB;Df
z#g0QIw$&m`zU>L8MuA&#Y)SPWi6cIot&HH!ZfB@%2f!p=*34gS^BOAK4Fu2Rp>BR>
z7)J8}&)~a{3bK-X^IOL1)9KkdCV2Z0*21fkI!E3n)nYG|`*RiZ74YY&yFFye<EjhG
zZeXskQtI<nDb6DxjQM`W=;Ai~vd(|A_1(S~!M@qy%BtJt?g7dVSj8j2lI?y)LUR4y
zAy4=?x70<lgmY|VhsGqXCJ=eC>k8VnGCh4vGdpx1xA!MjvV+R>0jnYKusE=-v~*dj
zDtU)$dghpUrf;FGJ-}DA=Z?be5wHMx1bC^dHwPLrkBgO-FRPbFfAsSHb>R{6Q}F8}
zpf2^{I5*Gvp;0~COI@ouPm9Fr`1FY>oWEph^We)Y&9^1phhg2@R^Nc0Ukj2hD-voO
z0V>8>Z4;&U&jZYwCiI1>H$ER{klG}i>d8v-p4P6~cJC!k>u9>{NE2(G>2iJVVs~t3
z^ZLj{)@pT7ey2rHkSs<|6`w4=(&>`({Z9X=j($m0^Gjr8m6_n^S?BVQC*M)UkuLIu
z`*Zlek)%JX5UYi1Phe7xA#T@sUtb9zdae&(_9KWyX!VP_X54U(tcyk=9DzEdg-9AJ
z7B4wZ(z}OX7atVNUTJAljMGpM{X9@h{YZ4(N0aT~8{7T4DxCCy{myObbIek#*;JT_
z1xXZVX24qm*4l@Yk0#MxdB<Y}1g%Rv<nAj!_Rrf}*G`L@nQA*$9L8gbwQ}>u#$JSA
zn3Q<ObT1DG%$559#YM)uaVL+fX_Jb6cB8+3#&jnic5r+mzSVc9)hg#Un>Y2d>CP)!
z=!e3skglqzz(c3ii!yAXU!`2TZyo_Fx)WvB_wAlLtrNxG58wUpRweU=*Y>l!3Md`{
z9_pGWx86q+?iU|umM6@_24+ww?zPe{WCM@O_n$0EC#sg?+|<q6%tJ-*UqPFJ?_D1v
zobJC$D0UrfHc3oRwFkOMM4ZrQP&!?zz4(Il2xu++qcdOK_+#r@s?B|b*oX3wUvyp9
z+LzRifTp<RYjw!!{pb}#d%!c7uCF42azYRLxrJ+2r%SnednQsXxxHTT|Hi)7jNikm
znA?g3+rTy7eBAl!y~(`+y}Po9)yLE8=%qw`f6amSY&BYhf+9z4l^`yWKp%U9ddZjP
z&zE0dHJ1|Ve`zZ=N%d55Rb(qZn@EOz%RC+-vwBGFAb0l_GqbPuq0!oEBfI)~RgvUb
z_8tkv;+<U!1U=}erlU+4qFn$lttk=Y!VixQM#NRL;iuHF*cPi$=P;-W5EN?qC>{5w
z457RXOGyn)N?fdPegu3EsX}?B^)}eYZbrV_!O0H02v>=|*E0(H_l56I2>felw%9|z
zCH1BJ<@=q>7qQZdid)q8<XttBP+n)31!S|2iHtxTH~N(JMv}2@;pAe~a&#e>a&wpE
zzL5x5ofT|rx}cSfvi(9fk0_I#{=t~sihs%nRM&;*Ddlh!<A23$?sB@hW!{H55YSN8
zoH5*yd=l@REAEXCcLYDRy?VZ8u@o>ZI6Aj^DI4v&a=J#M?;!t$F#hUZqLIDfx%1yG
z)Y3Q49|1}1huO$KE?>UQ?#-5z$X>o7v(5;ZHQeH1BW)<3TzpehOdgNxZ4x|jkbEFJ
zd33UW)77}6*4h?5a=e^8-)C0)vuR5RWNS~~Q++mz8?9eomV5n@pM>i50oBJ}RQnbC
zJA596Ty0*SXG>oSj#P6Zq_fh82hr)|>FmBG=p^VAI4Yr`i?c{D7w0xoIF+}3;G0?*
zsP&Rk{FU9$aTi0C*E)|SCdg_4o!PP`DA|Wd>m((*2Se3T^`z(&{G=|iR?Y(?l26MH
z>@f?RVgj?tF9dE($9#jG`sW%@4w|46c30s_lzWc=^#WMV=daY|jw;lW+F0R@WH=+r
ztZ_M<g9aysCSkY$XatfR;%R=(h0tuYl}D3MbEDqU&3Miwn=Nfy-rn(dOZG8YIxr;1
z7A$C>p_7m=qb<O=1nxkYx}cFfcGAoFSl@bC*NX6VX~E{E>Jfmbx|CIYdQZFu@;_5u
z#z8uW(>&pD&7;eYT<EO7Me)0Q1bF^x+vLd<zAdyxd%b+V9j`dzMKgSg#Z%mUT;zt+
zsYKNm5QToccsaSJ7U<{^?mHHiw&cfF=)=E$W|(HC=h0p{K;=@B*<Uvj<<i%ZPZ);y
z!@$W=5J$2va0|gY($C83b`Sf0FYfbdd~r_IOy#m1rA1Je_r{GsG+3-piLK6W^@2b;
zaDS&dT*a4T#;et-jeB88ORH&dqIYx?w>RT#G@%O%UCi{;{;CgnDwo`Q`TYzH<HoP5
z#QmlZiWQE>Y9vy%F1O*f<6I7vJ#oC}CS)RwGF#mIw5e~pKZ6b%P$nmQZw`I3O5HXZ
z1673PGz8U#d|a;6wXW{)n5htH%Q=;{nT|P9Y@rRtKrj**Oh}V`tIpQU{44m^=k3iM
zUiFUneG?`bS4p0;Gy1X~6xlG}spLv$lo9D$k1w7~3cDxZj6sln_U!oQ$Y>XNdrog;
zNK{Hi68MNIWUA~p6XpMerfQyLl+=y($|k*tD0A|DLldV#NNC`aiZCiOZ5FOACOKGM
z^F3ROKjLj4|LumSmILiXFmJEiXdhE6Xo#ng*<u(2r<Pk-Jd4c1J0;RVk>|DHVnRLZ
zuc$9YNGwU%)vHvE&4PTVlr5E6oW)G`6-$b|)hFFQz73JFSDAr6EU8O243{+m|KOCO
z`4Mo*dXM)Az_$_PHIBKpyVb_iM#mXiyGt90<n#5de3rfB)RUK+LvExSa8M=2MI4U%
zZW|pE!A}xsoTvLL^x_flb)?L%)XM#X<56r+R3LE#Su;<IdL8wUqU{*#46Ga-B=vIA
zKd|HKN(-eSK)!V#b<B~YVp_#>C^mT9>ApJG;t(;JUO8AsEDn(b_h&8W1d#>%DpC6A
zo^8OruspZUP)MY%wd-qc=Z>gfOmb3SS*ErEsfvR|-Tga=ubig^?tTs}5Fsk{(~svN
zn{v%-GdSKA897qt$q3K;KI|IcG@NB6Q|<2^RH0OK=$ffXm2@cYJxI|s2~C8%%GvM|
z#03v8>D#hFA<v1x8VEY+_!YKH!Pdn~NhC%czD?>cemUV=RHry#y*(D<XeXi?9Nh*A
zA*lcxTiyX7`p>6`24tlnXstGqbC+J1QHv&ZelH|iuU?UGgoHGmg%Gex8gWy(eC3WL
z|FXX9A?n_YLf|*)|K$;ou*`nc5xjd{$%K?pxg#$WDpbtw{1w@7tU0C1MDFJs+`L(G
zoN%lD<p8EVDTRACS_K3zr-1Dapd%T&PL7KgACxSJ_``8w(#G^7U|V|6Fzf4yXa6Ih
z|6$_6q;F{0k<4dSG`XEeg-$t{p0GdHvf*qBJ$*2y(TElvR(8X}Zt~HjZiW5w&87cB
z4&@#JfzS&rFN-?@7eR3&zx6xi1kK_Z4*8mu&o@PBL*!shI{M(xB=(r<53;QY4NbV#
zz~n_^_CEe!v$BzVrx~`f;nRN0#l5MFw}Sk{x%Kj1phrOBL!8+{^7{6+Xn-W658^3o
z;Pj?{s>{0dxi5~urNrgyy`2h0b>G-8Cbf!#u<GKY`w@|=tBJxbrQ~dvEAqHyD+JXF
zttdlLt?D5tVJc&SDoU!mtVHdPheDIu#9y%_JTwlD9FG739EnPF1`$bui6*@MXq&Xg
z#hc<rICOrRMhTILjq4Zco=o3A_rIbhk!U*oSc}KFiz7g^J64_|O2Mj@AB|9y_-Ys<
z_1~2Dw?hTcr6b<Y_ST&uul=Fov`kFtE@Z7x_lg{y`UUBgYMG4q7o=UNxC|AC8?;JA
z^fOq=@RcGM`95F!CvU&V+deb1w|kAuNj^l^F??zC$>7N9_lFtVaoWTr)?(qqwaE__
zgIfriD!MO+G_}-TXnv<COUPHMp_=6CiS3KIy|5e*bmxc_sI<TKvwgnO?7luk@-tm6
z3hJRQ)fi{FSSBd{_Zp1OxxFG5h?8i=6o^C*A&p~dO4rt#VyIgP$k^9lb8bcT`2HEq
z@y?OU4h=P{)aIDX9CciV2`ZPvDu;qMrW`p*g${x$sbkEuBN?;S9KXd*@M4-6F+1bv
zOGdj>6O?)c97uBjH5aTSSqx2q4RDSi)x+N$w3=Qt>Wzm+?hdY}KaD(X!@qx$LzRy>
zVG^sVIhyJLQ-0bkR|pnJc5y@wF}&$2ZVzYhRY&;tTI*P7(5Z)rmYsxac$?r{S?T%D
zlyZg$`Vi_D0T(Mj$yhRnoOd=~7QI(Nb4~>or@j4N4l;#t9z1JxFQ+qjtwcgd@qR^2
zh~RbRu09@vdF=!r9FI$))`*$hj+_;0TuNgsaJu()e81YSBxFLA<YS|h%8!L?Y8v01
zomL?eHOGV1wj?cBf1;%MI^2RJQ3_r2Asrl=Er{HGzUcjR{-vUj+GJK-EbuN{#CthA
z8C}!_rUqO<Js}=ZmZmMjQiMK3=<w5<l#RWd*2m3?dw79Q+qlLplQ5->g@}};_f8c{
zyde%{4G5-`Cd5w=>YqxLAdS%X)a2n5BIk#(+8t<+8$uuo!Dy&;!G0^B2f`4w#jll5
zTR>Ah)i1wU5si_dIj_@|V-pYeL~2#>60QRqqTwM?+DOCCU(Vb6xj*PgH)RfQ(qxbt
zOs7pozhlALx6g$V65{^Qd?rrdS^;=+F3)ggw<NWmY0M?WqyYKmh>UvE;V<}?qMR~x
z+~4m$WAu5}g_}U;m}hb3WQoxXUhv0MCvESE;cwcMSBF1vO<TEO%)$?I78mo@aL&H!
zc13=!ITxLXLLRCz+AC)@l@^?42-)JVrv>^Z$)~}GJ-GzKItvc1R?RRS+NASPE$R<2
zg&E!zfzTiTROEeZBsvhdRqWwB7I~yYcK$FG>DXHltjFq5HM4?b`#fcl5Gz`l66agR
zZOP|2b<Hbn{n*cL;=@H8%IF}-4eZTKD9GMJnj>_@Z1}6CzO)dCKEzh+#G1ph{us4y
zrm<9KEE_`xO3BCp1QhGoTF?d+7R^&=cv|}%Ddu-1Uo3mNRCYE$h@6kW>}?xYOoA(n
zfSe`Qwa6RGECRqw3X7hUQ6VoxkIsv5`aKJd$#gQ<fDt+i_*>9a1K}FDvBKnn>czg~
zaNHI@m-z6~+uPdAlzHd^Hg}F1kuXv)0A)vF2g9xdu|DT(aBPUl*6AAsDr~yqAyW*4
z;Mrg1dmQuZgv}K!crF8B$OTQ~GfrQCcRel&o&;o+x)Q7oZPeg8lKfa3gf|5>@Q$1|
z!ttGrDditNn+tZY#1pw0JMSy|rww6fK!chQI$S;#g~3bb&r&JQKX4ie9J7qJpmCI6
z8_&F{Z+SnA%>q~2c5=T%7*wFm0!(kc+SGVyu`*IOE5&j`k6B#YTkL2z1(klrQcDbc
z2Di;mjE~BQXC{m%-3R|)j+2o3_(6$Z0)eLa`PLt68!w1UA*OSSE?eBtv8d!qg0f)w
zPff|ONWzzj_;{6OrFm~%mW=a!7lYlCh#e|&LE_Ig{C@NI<Zl!YMUqQO`hEpn>2taU
zDVuIJSra;)KpS>7AAU%gt^5D&F#<~pDQXmgGYnH7iWt_TYeHpl7_>6*05XRy#{{FD
z!Hc2ghrga)>4+IqoREp-s0{VN9(FvbQcX9ONoXL<%F<WZLuCBHiUM&UHFaNub;oDK
zVr7<Di;>D?Af_f!fZ5=X=Q<|V?bcVQR*#VDTD|IBNh@Cg;r4KAIEU~EXF{7xOcLpM
zbLLi{0w_>Ie65wkhGq@(oT>X-KIHFfF_FSoKCmXT?=<=@IXFrI=<3uft~m@#kAQs^
z0qcuG3o($JE3&KQmPKmk?Q}{QIHltH=j-z~Tl&OZrih61Or}p3mAzSk`hXCgZFFWz
zPo196h#O_xe$l)71bn4g?K<Hkv^(lg3%w4@*uq=OLFLfAVL3HEI-VhApQ#>LX#H$`
z0@TnUD2cs7Z#mf&FXm#+o|!ls;}wslxjLB;1^z2{B^QuFv8~b+A;o$TV~A@K)-KP)
zp4DRdYd=5_^qV64n~a2|aT2o0^OIsQ<5jUMrFcN%Av)%%uX%&Hwc&ECT*{SOFOyN^
ziMX**IJC+}t4aM^nH@R*BjB_<gg-W<;Y{-@N!ks>M5a3<sY=Ns9mv7(<8@ten|m3q
zlO;S-8AIZfYRtGOr-XN@E-^e4>Id=Lu-QcZM$6DPXDFqzG)5DAbkPr{5J9O@3Q5dS
z_vSJm*Y&dDH~#8f#_3)yu+U=TIi+UehK^QD@6L=(mnq&dqjG4?`8PI_`0kZndPXm5
ze9G+)8HJV2@C|@mahNY!+La&@>DcFJLtcyi74*4g8lTJZJx(8;;%HmVr@29Cu)}n8
zz{H3zF;pFo6ad*aGAkr)P&x2-)0awbz_I7k{@6e}%bN6zukoA_{<1L;bbx0jG!i%I
zGsXgAO{;)cf5~Tjbfs9s!dB%TXfB){Wv-ew8bs>DWHuWHEG7H~lNV&2>J(zE2txeP
zfLI@w11mM#O6D36E}y~^10{PxTSfxXR$!dXZHU(zXGzj(S$cS;&*G;giu$o~+Oz#m
z%=8B->nL2V2|wW0rw|cEd!eh=->%h47Yry}`IBTOBa7eJpT1V{+8oldm)3S8oBjZX
zMptEV=?h7$Te{@;ccwTPD~BHHUV>%AxSw;pJR?l0-+->cYnBYL(!TG7|KRtsu75$#
zdp?|-u3X*RIG_bv(WP6`r?fXmHZ27)RTxe~39vZZfQ;hFw3=rAGh&Ld8k_bdez9bo
zKQ5hg!{VGS+^V<@1I=FCLPEXU@-W9Ny{|;Ygy(K>QHr-*{AasmcHu0)gXPI5e|=vY
zy?bLx9+4n~o`2Nx=hV6!@^epp`}%h&EbvLu6!HGvlTKrM{a*v|Vm_;!!ZuIOsD0@%
za}CnA!rXMk;Qi#Ma8vf0JU_i(57cDUgtmcOu6Bj<H6WXQ)K}A2yFyYv_qv-Jo{2Xo
zT?!u#`3V;?QGX!vFzDV4D6{X8oV-h?5xPQ7OC4A!=h?_QP)&T%&u~>Rl(y_%y->Q&
zcO&<X$8Xxvs*Yo$_B{GLC&r5ZGt6dYQdIk08AcGyRoLa5s@_<$RiCxm?iU09fKJwV
z;W*5>pPt5sC2a3K{QQaA@~p}~JTdgwerxH?thJJx`?0Ll)ShFV9}y|Np0DAy+NTzd
zt85J+B(n=pVOvm_EhP)v4R)quWttabh7Un#cMY`)m`Urs_P2x30c=L$t31?T5o?*}
zD@tAKfJVohkgRb??uAOP)ighMJP{DuE~9T-lBMlTp>ILkye7JhE;>X^{SaIpyL+`g
z(33K_idpUc^=Fu+MkYsd&o(-C+EhCGJH`Ym*3Dx2Il&qua|fe3<dalpX1vjoBW-IM
zk1pI4AWz9)@;YIa!3eA6w;@nnRYh1O3y4fI*3qHpGs8`*AgBn$784PXv~CJRjCis`
zHc~LqW>U(PC7Q@3j*zk(-RC$W#$KLfV)l>`*YX)<go2>N2UykY8LQY57lP!#2U{Ru
zzZrg(md^ab%1R19Lb&ok@A{@s3x7Zab0qG~dgC;97zsPd8)zh|xUS>KGP_9b+le9O
zUisy?o>5;Rs#qP9<8vcN3jDV|Y@!kLGDVDK3F=<Mu$NO|Q+K0Ehm6P2yN{rOwA<=o
zji^-A<z(U!rLUB{8ye`)U`io`2s*yZ`4<0G(}7}ZT)~?xRx_7K?V!zIWtAe{b>&Ef
zH)&s>&yK#%i@&2nDQVFog?&Mo*8ILDB%Z;`WRZh|B+S6IL*bm%<sS`j@NZ3$N0bp&
z&Q>GJ;1%NY0ay1W^uwU3e2D@B2!p0O{H;2e?ycy6v(lkYL790|6J+V;oU77lK!xt!
zfq}G?_Vi>{2Ghnha$=;gY82Qmoz+FW<UtH+R^Jxys7+O8Ph7iPDsL#tf_ph<()2h`
z9Ul^*-<ai+UuPjGxbDReGAO-lgT291W7=NM8la$@FiWY^!5rlC%w9u?VGU>vR?=2i
z^{Vw2eb6DiWDx9)L>l75&8)$2xv9-naxu`CnQQ>k?=v?Dvd-XFx)-wSlf|Yl4=@n1
z4?EFzxV9wUoUYiu1_F;n%}4+?82d^m*JT1)Q-`z6)TISm{c85msf|-r;d6&BfGga<
z-NB%e<54O#{q-%=dSZaY$_=K;!oc8g1Ki=OMLDzu0(#}~ft(G5Xf1%SY-l3}1Uht_
zyecjeg6Np+=t-I~k~KN#E6ZjjDgAZmd!P4fpTpt?!Cb$P)|!fv*%P+*RK%-=y<<O=
zgj9~BLBg3z_cB{qJCCmeTK$J-BCpXP`a&8tfV@xO)(Ed&_YF_+9ZNRO8HYGs)OK;^
z4eziBQv<L|L;LrxY!~2HjF57Lfgcfer6oQ>mIH=2!nHgb_V^ah-fV3kDrC!K_tQ2X
z#dxHoqtQ}X#L`i+&|0|L3m2T39$(6+yz^SKg;IEBt``n)F5?#zyb-YoE83N4YNp#=
zGPiDP<h$`Nvfh-y;22Q^86ErK&A&1n<y}lEW-O)#f;Q*zVOup?d3$jIUxKl$H{`?|
z#YpcAtLQFL2Q25PusgH%II+NWC>X){^~s;aJ``tyDZocfQZ7t>ah3*y<$IKK6dvpY
z9QrS9Xj_kRjH|isH+#bySoSraSGoE55mNrm(N+OWnyw$!Zya$(9&jLUC2Km9p0K#w
zjE)G88<urTQtmvil$ph3mRRzZUx(qmfbulXjDb<EcRZ@keaiZ*LY7L%b|_;>xU@EI
z0#*ep;kJL9f(5Ptkq{#Wi>KcTa2oj>H8%Cl>{Q{d549P4@Qih^Iuz@OzHk1=Lit*{
zE&dSz{qTk6lqtj<I6u+&p+TDHS^gPp=k2~Y`)+hYE$3h_=}|aS#OsS<I}C$m$eRKP
zM25rC;8%-1r45iIeRVZ=L8TP)%!Qy}K<7Zy5|R60Ox(CF5_$nj$DgNVT{$N2yFlVp
zu&x-=n!<zEXW`wf8_~N`hG@F7F1Q!%J0mi@4RXl$&Z@+E$;-o6>1qKRa-}e0Nd2)l
zV*Uj!S3v+hovvxNqE)-0L<IH>B+qz?cDxwEB<AZB58gg)5u`Ysuf&GBN1#T;qP}9l
z(?#pvpki$g6JFP{FbqqQug>p3_Nw5elPvSj#7QT$)GHQ&!!t^tw0RHq50{QBA+e}K
z*;f2`5~RMVJJVD=q-G$qD06jJh^HcJ+W6-A{EubF`|SjM4=2GOwN%9GYWYEz@L><i
zO<pTUi6Ju5`K0FZWW46<w_&066rd;1WtDMX(H@#xi!)Y`{OG8MZ753Z&&{MbtE#fH
z#CSPdPVOZYP;vW|k)EQ6y$55`yh7-jLIDfy()eXt#$95hhiaMNG^PX+no=E=TV^rZ
zoJVuX;`2{%2pSC0DI`X#hGp!In4x;O)E59{q{>h|mZV045os4yI(u~qh;zz3L9q}J
zZHlla%nvyG=5#+d#zE0K#ZH)qtkZz7$+8hjja?4eZd~HTUXk}a6of0rR@BQ*Pt2oJ
zPfPf$%?^E6zob^|C<_B2rp<<n_+Jw_qd(tLs<RQ`ZEGsO^}~W!Fs|nlbmwk9D#1`|
z*#k6bL?BV#mb1xdGzg;^PhcZ|;-Uyvhh_|KXMf`D&Gy$#<I%fj5R?lQ`UVeeLHd+W
z$pvn$WTzlL+ebgYiK|APriqOI&iyGOV<eC|t+>^A#*!-`Ow19Igqspd1r|Mqxf0y?
zcWF#+Dd~-J;{%z=OV3c_(hC)_>vrN>Q}!K8R#2ys`v-<OZ9q2?eP2fnEX&Mh&->l=
z=2J@0sqJiBq|>!GLOv;cODPBFfgrjG&KNp;QZr-}#o)Xq<LLUdgAI;NJUY#rcwoBG
zhC91{MNt_Q5`?9z14sK0YvLa+X8h*WfsXq7R;-EDz~?__sES@mpM0sf#X@3W#-NbM
zsNA~WH<=@z;0SY*RYNFNtwLu`({*_@GSlq(!eVq`s8rrvN5p40TvFWUKf*w-q#TdD
z`R21?2l~tzsJSh}7d1JVct2QRpB@vuq6&?^dTr}^qJPo|>$HMp-n}YwarEmH+c@Be
zXr)h7b^qn(pwIe#{g045^0CxCq)RTa_bpaTy1C?H=U2q%@F82(^}dTo$8k;q4w+&K
zj^DC-S<ZnYc3Li3ijhc4GBR1t6>Yt_)P0^tC_|aejVGH+NgPq5a!_mCeoFNW@uToi
zCrPCF>P}k%y^M&dvlsWFun&7BvU>_$OF9SBDvy8<PFAm~nBNOau0G5JP(A_<8DNh9
zRbCp1z{6thTkCs2KfX%|&6S7Ws{{YG_6f}V8`$-K38vne%+qhjG5V-Kib(a5&q=*U
zT1}2*i(c8W&RCiC1c;SV2C`i@cRA9P_)f!W_3h{3P{66XG5;3=!ne9PUvAvS=9_1g
zPZ#12nC7c9BP(^XBu+{WQat+p;n@>GjO(%c@A%)}IwmEx2>bOjsygU?zK^(;2rn#0
z)6=x=*B0B=qkZ=kd*Y*(>6mbdEuKJ>?RD>A$-HzPqGd#6W|XSCUx{GvVW#wkAk*sS
zt&9=#tc00<hKwO-E~`wI@g-5gEHp()w9Ok^@F}w3Lb>o~WMQkS?MJ&XuYxk0UX=a9
zQIo-@w&9;nRIKH|U#YJm9s!a36l9$J0Sy7~QJ-R^>rEd@)VqK6S!JTvlCp~+EXBWg
z*VW(Fr5>^*b<lP0J&^0=L=Z9h2q;+_`UW1p_zJadV`Ds(Jzw#}&`hMm62hIYpL*@U
z`tXyrcd4x?_tM?VvF)Coqme#s%ASW$2$mDb73<0Gd2E<t<v6Wh39T<>o?BNfySb^(
z4ObSvW-d<w+n`lI8(Jtig4QQB;K7hwhHxy<mG?xn+ZxDl&p<7f{9^ia_imf$Huu0l
zPL=ILmg31Bg@e^Es|}5<5J?_L=PO<#54qB$RBUKHi%}<ps3OS0$oM(YQtp!@S}7wp
zfU+&{a+>fFFk%v#cAQnzXSEOq6VH+qm0B7P9{S$s?J3ePk+4-kt^M;j6|Kk%>J#K8
z-K>-3pH`tKq`IFxy*pR@2%veh3b}iJ?r7LyUPy4)br#U|2#8Y&kJ+!jRjAlqWYv8H
ztVOX+1P(X*OAKH>0xljhJ@YnK)_PX!CVol1r>PZKkJtOJ=<&bbmHEq~l1eAXa-l{D
zfj`1zk$0%r@b{4NbUhGgHlCp<<P{=%9<t2<pI)Vkma$;(`5D^@DKon~Q!;_^^97y}
z$}&p9QDKJ)GU;Ylt(GU}wkg=8F}q`eJGemRHT~>2;UAmb{Q<Xqbq>3R<o0^A6>ZKZ
zD2y*Qj734<ui_7jBI$Pd3x9^u95){UGZhz#ci{Z_e_YSdkk??5blLy#K3?8;tYy00
zYaEC6Vf{y}w66nZ^pBp(+E=<fs6ZeX`P1UnH$S$rZx5~;{>(V9+bkmLKJsUo9r0DC
zzA1e5&9C|<FfwgzqgbH*DRT0Hy7Ce5sR?D;)gHEQO?7YRM|}S@c@09?m3I^O{=Od{
z0r1N-szasa*<P2hL&FQH{~J}SpQmtis*~LL7&1mKuCWBEwM2+;OULs>_9}kt>ba$@
zaW4QW;T<>~B%;2Yb_twP^I0}J>GsVo2}DGjt%z0>n!M?8{&w5A$>+&t%U5W)YM<jU
z{O@7Mf1hF&!oS=laJUG7pbSM4VA)B3;+O{)$W}JCJlp^TtSS7g27HNUUsC!xAZ_$w
zqn7968bQ;FdQ|6WJn)nXEg~bQVVW>w;Uw}WZA~-PGy-eyXxjcoC1UTE(g3JRH0K0&
zLmN<|4nRqdoq*HfJ0ay75L}2a6sWTQn5gTy;uYgVe{gnDRm=oxN?-ck_8fWe?@r18
zIh_9pu>M)~mrlxe+xML0q3vR(J9zZxq-?Uj3+$qamR#W|5Te8Rz^T&D>$AT8ZzV3{
z)a)uws5uyVqV}dg$}^|uMzHhwU6Sb#<pfe*(e_Q#;eA#vPh16o9?tyWBuc}vkt?lp
zW?d%2N!%-%o)dZ5tT8Zpe{@(-<)3^0e;k<k>&g1(=>BrnBpns7dD8L*A&v}c&1r@%
zJugcMv647mG4%&io^ZS;DBCHpohn{~cI=~~>vkL>F5c(%A<r*+!*627v|EY+XBSLs
z+ERu0aW`$hiD{?f%ikwT3;gjO|Fv7Afp~g@5-Y%9LBTE<a%o|p#ObShgfCsWKf7MN
z-d&sUf6?{q!fB_IYc1bb=zNXjWKx3S<|O)hmpb<8_T=paj>3cA#{Dmp|K9<Tmu)tL
zHNKXWMQ0h-g*2T=y}z^j*A>Ual(4A5ek&%^lDxRhp!%L+5QYl~TFEXyo>1uYl6=&V
zuROAq!RVc4{grtU?<y}_^frZHcs47Ru#+S93oz6X<)uVwW}~@E4_?4W{>V266zVVq
zkEX(PbN+LP%#u4o83+-?+QJ+`t9P{&ZjF8uz|Q}NNc`JUnDrl4;6Fv?f68#bI{)>d
zKmUl~4Chtsi+LNC8*y#_3Le9N>rK)RZu7pPNvUDP**0;%bWmAbp8fd!&H*1DfnG_T
zzxobth$QL=9swWW+udswx5G@C4NuOMZi^?&Aj2oKQh{f(ZV#$Gby5L^SrQSrR<9z&
z!*<4c`K;<3TFsILzBVnHHDZ&5AS(@7sHn&b99}IpeP#OeKdCuN+-2AMh2!*XQJGZ=
zIA%Bb)wZf-K{uSZ7@$Q?Ot$u3$Y(lr?x312cOoLzMFHoIGI1dr-)+#mu+nXz`S#9E
zU5mqFUBaoxOgN98cUzJII{B93?2XGsTJ@Pm1s0oz&{Qz-rSIxDH8+tav%|_bS*Dqc
zge$MGOuWIH@RIN2a7B^Q{%-<D7a*du_;FK|l&$EmRxfLo%ZHh;Hx}9QQU|}glB$@@
z^m|*)MoNv<d0sHKi457<qyUS~AzDSJ2G4&I5?2OR6H_o{8z%Y&q+_|&I5(MkIv~$Q
z<>ZYked;%5(Rv3BwvhKwHlz&-O72a<r!oKYsC#pdF}vo;ldu%CbCpsitT{uq7rMMu
zZ?0ZQ-F;NT$4jmt@r6T;RZmTV{8FeWVLNDD+LgLR*u&vQEbBpZOmUF+mx=>sQ>LkF
zeg)}wJxEjoeCe>BL$Qr*gUyRh4W}IzhHLezHwxfxwfS4k?}CMysb(JyOPS1@3mySy
zF;$~xwMh6H$BonL4=##ng;nq?Unec&53=42m<6ykH%i)=(#hwJ=1g|K3k46G{opx2
zshQ!SQxi-l^&Nty7PFB<s#f!VVHB^ZyOoVQDG_+~-0Jex@{XFGdtY10=Pm^N#B+sH
z8H{Ln2gVv!I->}2W|1)a$Kiz<Wsds&POGt4QD@kv!R6ZP++$&tRT>&n$Y2}Em*gkw
zCrKvPl=9P-JHB>>&DZV=YLW&C*R(RdelLaoQT6eykNTSlucO}-NknyjT6TK5QLPf-
zl+MVQPm&O(XRD9=3!2~Dao`iA;3d&ye%Kx-OGho|oh6}ZCFd$>dZXWabd|UvbAuW9
zR*&^*=A-xNK9A&=ehaX_=JWA*w(KYG=9=v0BTmd`yXntM9LeCt<@j0o<8oR_<THe~
z&>ZHdDaH2udYQ}ao(VgI+FyQYXr{~J65rCTpTWG#Gu!WC+sIPhsUs<)CF6bNa0rHn
zSGS8$3W)!6p~d;H6B_|nv>VF|<469_z61|+O(CX}9=r$WU@$ZgX-c{a9!Wif-#oKY
zhY2*)$b9u52G^~IFf1j8^LfmBz6DT}9VluG%xP~svV5Sy_;i_|p&6SNTfkiM5wNlF
z$7O=2n*>fFNnCp?|1h{N|6;phyX`j_4iSQ>uhftwGvfg7a#0u$pDU5hkz3T<joUz4
z;5d|6v_hkSR^R9H&v$BHRh<m=iZLONoa$jlpPyojFKe^%?@jsJA2XI=a15bjw>?m0
zi#ynG4=$KgYv`qqFWeeqI(dfhLTLpHMas28TKN%)Y)^wkUILVJ9#CSDZGJlG`ePeX
zycsyU|3Cl=&z&ayIhkKyESJp-uMDOvqBab+&z`8+p79R00a26|cYY8to(q~#8<*}0
z1ggSRV9k)=QE6UcRUaN#b5><Lqp#)m%3QSK`7*(W@1!qemv(Gw6RmMOKBI1J5hLJ2
zceSEVMKN>`nlxM(1A=kVLJ)J`Ie1%M46g|9?#G-bu0ht6Kpw?5P^Bx6YsI?i-In!d
z@iQFBY?KfBIU^WfPG!+kel2gGg_hh@9zZ@pJs3KAJrQ2@ynOm<qLJ;WeUqYs{Fj~#
zr8C_H!MjiBgh)Tb;87XEkZmY#tu5v_nhk^5MnXr<EEqJwnDTU7qVPdLR8|s=b!oQX
zWj)m~yoH~X(fUd%?dH{5LM)s>kUp9wfJOi1vUC31{2#j?eM!@3i$@&^@MCl!CVoWZ
z{)~N4CQF~AE{Ral&=oC_6J`U&aXSO=Cs(uuNBI7ign>r@=cZue=%D!qI63J;Tj|S+
z3^iVhdSx+Sp7aqQWWK^e&QUA~H{3W^Vg5m^m1@aQo^u0_0&TD99d|6kr}un#OCCya
zFSce4$iX+A+ZWM*!S4k5nW`T-GHRWhDGlo^y6stdJ>Q8CdnyuUs0;VRH5GGaAaSJX
z1<g-Y1EMek=$Gzk_n1&zr5D9=#nUWCo!DA-I-9FlMD@)up4DPSjPl~YdHYO;T%Ewf
zSh)q~x&5odop*)wtDC_u#aLwQY(40TB@MstqKgYZ-3xx*`y>C0g!<kO|9-J1sxgR2
zod1qT{Q<0Y)VMxBX`h`?ns(WFQ@TZ}jDnejS51ncm1pvM&n7F|ha!&JGR9P#m!M|^
z^Ee3oA%wYw4iVLjBW-bHhVNwzpJIsE^{EK%NP2oM%;EPog4t_g@})m&Q}ZIqDPl3j
zLM$6dh(Il@sJ5_B1ov_|EaQ+7Y5V+w6ObP(VO5imm-%8U0}kl01l_Neh}JyEG?o8i
z_2rWSVM!L1_t*m!ep8?Y(g~d#UKhuakdK(z)T(!B90OS~VTyT@>M;rXkf6F1|M2v{
z?y2?7qDj-#j}k`twE_ziQuf6;$HSTF57G@}N097v?bV>*DkeQ_JplerU~u!Kr8&m_
zQPWxTAwN||!}`{b=|w9<8w~^KhAJ5%1jdjOGUC=>DRy|yS=fsYpW5bYxPP9xBFw(3
zD1?D^mnnd*uoU|8BT2vfFdJx<iMOb+cwE!)b$a5s21rBKTO$DT;nyPG&c`S>=kAM?
zI7NDVV@URkNK_8nCmk|Sx<#bnKn6)jFW}Dn0v>0(d&v6?p5brqfn}@MWRje==a#95
z+X_3nLn2mW7NDmS+ZoF>F{tHnE$UVNb(1M^_M($DggG{?VFNEEKj-hxX<jiLwI2q|
z#RjkohU-uSAf||zg)zQ}c-|MWE}ccw)##}?q$<6PN9{_%H5fo1rDVmKaGuYCrKIrA
z1Dg;(gK8jT`IIUrXs{tAbfjN&o6mKPn~sf+l@`fM2dl3SaRvFm7iAnS90rauW-?Io
z#M1%ESzHHq)6R4@N}Y2jI2(h6xYf>|WWixVjg5e&k=dy=k0@Z1>blpRiQde<q}5%;
z;d<^{aQD&uSp0CU5M3KdT5v>mB<XfT5or7r8z}ox9YAoj{Da6`^8C%68?5;kpTTTb
zaP?8E6X}`!-1eR!L`BPq>)7~xh{d1Q!oM8j!KpJb{oTDEoMKO6+?Xs|=tvur$%a^t
zi-D8-S}QEN&bVzwSBVx$2;)2y;RRW-u4df}_8H@3*=bOVOx&cR;=u@8UMO)BnvXq1
z#;-LvSj^p)QEY6V1dPx;Sa;Q^IyC=EH{5nN>U+P1WGYhCwwPJ0wZ2+|QCxQwZCErx
z>YkvL$>FGJP2$=xY>sMZEQLbZ5$pjRNV%{KGxl-`qmm8#c>~T5a`Sc1Q0g6DHZ=T_
z^+qidM@HL2c<cGzsYBH_S*x8q&ms9skTgxG4O3Tkt1&&NHB(Oe<_8#&c}~J&p&<GT
z4HzE&bl<o%%QmeYwk<KSCL!Uh(45?q#jv$whY&NeOdXfom$4U-hPgb%&}>Z&?4%-n
zAXeFnW_8?oH=)U!pEK)kSQUU`?;Uhp@izUJ-r3OAlbFE1G73DrY}5%OOekg~=+%H6
z`*$gMI-04VWwC(s=qYe|Jt77JA~`t4DvRiRXK)i1Sb)zk*uwe?5IEOH-L2`;oTv~G
zGj3GI>Gj^0;uhdh7FDZQXLC|tr43Er&%}K$3ErN@`dZ7!z1DxIgl&F$D(x|gj=u=~
zMpw+poKb9qSQ<gDo+uZlC!rIv{iU-N2W!`f!4b?^@+!j78zto<uoQi9Dz!o%f?)~E
zvUT`DuH&ANZSLY;Xy4y&Nw!c|GiG@z<F_A;3u0GDA9W~@(Q|p0yK!5NKJ8{tL=h_E
zwI-)Pt;{RfQ(If$Z_93;7nP&N)suryZqo{(fORNIULfA^m)T*YIeLEj1c_~8gy~Jd
zB5Sc_8IomWzHw7)3>2~JE8UD45JHmp*BWQ@t7P|?73j>0h9g4)aEC8Pl_IOQMN1c1
z*rfGc><kuVE?pW^Qd3rhu$M|bE&`DfO$Y>DyOd=NsctczWx<65rKs5b58ys+266AA
zV<;qvN7dFSFuPqq?Du+x7yX;DS-?h38c9L7tz_a;=}~F$2G7{Q2KXt_<+SK%-p3cw
zuF`9MW9@7=+l>NNw1YJsFm62hQv<^?h@n9mvFayHA%5JU)g0U*(KD*W;uv?Elh({}
zd3NB}b1ENI<Vzrg6`E52;zv9NR}HhtiUfJTP_0{T2*+R!W^H{GIo$lwXZKL<idOuU
zY()6NBD_@%!l#c;h-F<j6;r<6Kn-N8R_CVb!!Q;fWTn5~D~&p^gFgj|Z5j=Em*y#O
z)GN3`q#<zbqA6YwLjGV9XFsJnFx>a~oW3s-y;~8^S7zG{Z|oV8vzX)<%TZk^U?mWl
z*^THC14GnfA|xO}Tr6X_&x-UOt%)GzSVgj{BaPx4(<jYSu<m8tHyri?D}1ah)&E*r
zlN2QLblb^2OH9nelKZF9#I`f1NKzKNVA^uhzH(go{0MsMaU-Dz29}Y3(WLHNN2^Nd
zj~l9ih7Pi3%akEc^1|`~v-jQhY~HvF9b0w|DK89C@V5C0z^haosU$oJYO5{-f_a6x
zziA$Sd#9GmADY)F;Km<~eHn%%kaPWow;Z~(^kHmRKA|!@&R3-3lv8X|%aVjpJEgs#
z2#}OE%Vj~$$k&p)>woy7Ab^MgU&yFAW=k*j+zDt)hgCk1<pIXR!PR(Dy&Q;=P;-9z
z@{MD{;b`0ZO%^*ihaLl`+f&@4vo|fB>gO(mkT^fIxJrpJh`p19JOZ=Li|0#roQb3u
z&1)6^MtcGd-jN7R)Hsb|rI>@T9!ndWYsGIx21C=*PJ3_m=Y29hYzk7M@cf_;J|86n
z)&qMJrh>pOkdCC>AAcyHNeIgC=X=ceN(S0to-DWlh0@eKv2m0;!ht{UhfxX*&qscC
zxxU_=y*qp0dio+%pi8_f`sq{ASf>fDjsJ}XA>!UPadqDe(h73KVV^v2Q0DXBJBjzU
z+iNm>Y@lA@DWz9>J8f&wjr-;k%hVf_)@;ZOautY{#cl?giiAVc`B8X_iI0kQ$h>Bh
zd$*s7PmSno-nnK<mx@Pg_&XzGu@EEU$}@ls6Y}*kr)h1Az{RYq^{~<R?TxuHHVXx)
z&r22s#`BIdNK(oIQ*VWgHlD*t$3BH}jC<JC)Se4wJbvShtkE~Z`iz(F*pwwkVvVo5
zlajRYNr4_XK6Dqworz=GDdM56r{9}VVUtr+i@h(=Qx;P;?O0J!ueaIg>WI<&n)qX|
znHf;bTId#_b0`wwhOW@EBf+T=bs#;R3oMJy$N(KpCr5mI8_ACIdX@F<%$zUpp-(0Q
zRYt{Zr=N=C2DBD*iu;bT0i?!mSEICE9<YdJbbPTq??a$TQFK=Kqo8a3bVAM`ZF30r
zHK<xIN(Ns>yC_G_D|x~7*-NTt%frbO$x|^&JTM7rTAyCw@FbEUY!1wyexbZn1_5EV
zjD)525}7=k#g@G_i$+3iuW8vj>`$B0x-TdjdoUm5(-yxGEGwzQxuW3Ew&agUue*9V
z>W!PzPbgZ9jF)5A%{085K`!(^7zYlazj3HGw?%sT_Z!gHGAX&2h_h^gJFa9Z*dnWM
zw`;%D$uTo01T^6<^VWlU|3^FL8P(L*?froCPAE#R0YV3njzVZDln}r|K!pHGCp1Mw
zX#u4Z0tr$Km=L0ZfRNBdM7oH;L7GTaDIy?(sE=Nb=RD&+cZ_r2G2Zv{`*H6*##(!=
zJ%4NMHRpfMxec}|&nwyGm3tPOqQZ~Ds>kk|xwOF4;j{4037Us>K#0cqf@<W3)&L^r
zXv=u1Wbr|#%$v6}FSH(YN8Lf)D*)q#zGoLxomi=cB;OA%fvfT&Z><#Mt0>1mwtp%c
z@SRF4S?zwv$NgyMm0pN>2Q;?wHFdq0OZn92P&GAG7kI9xrE7vxMBLal<4tS1!{CH;
z@$GBqFa*~5>J`P_Xegxhm7s3h=))9B+1`UyD|jIgYZST?CuoSU(7>kY?Fe&9Wn!P7
z81{A<tf}U9v!oanbJ$0=wf<x$kh8<8S_|}5^?m^a{Y11Hjbt_G@Mk*JuZ3nh+ZTch
zM_JCD69+?oC{fs#{NL@MQ%_o%yr|fm&dZK(FiaaoM4Vs{d8^k$WHOYc&d<GI@9R#d
zl=Ec1vJOxSVdt(#)v&RI0!D&k!leOZYM5qs8%FOKCeWe<GwhJ4S2)_p2I8Nw%^iI6
zo|SM&ORbXo0E%3W*&oJ86Kr!v`3lXrWr+EiTQ7_~S9BM=$yKZA__uoUqLs@j#Z>@)
zwyrBZ^O5}7{mo<N`tO3Ks^QOdNT)|K?K1v^r3nmz!Q*Ic?&a!SJy+(w@TXyRak~m#
zOToVYBs5&1CY;B^L6@QsaH$#lpkoq+f+ty@zkuAw%fZpB(tp50mO-y;))P|a5C}w&
zFrM2r&|}60X$dv&!sSjUJ=KVLm(Scjr)DPBF9;(wnat|X;0x^i_>C*e;5LxO8AC`@
z0~fqu_1zUU4LxSZ_Hn6__jX=B{?@tUw(O6(4F`u)G+|e5)a;TF4<wu9!^i7^5VS?R
zk)fo`vfZl9VLUY_Lhn=eAuUe@G}$A@L{pSgz%bLC4rl)g%b;I?J~Pr2>E6|oFk^;S
z)=|=;v~~Z4gaDY)c8cu~m$1odmFM6^>!~qW(=$T|e(LZkV<2nm#1pC5U^SCavwy%P
z`F9R1$F=|TY+E_M$quvOIyJ!86_tBXy!Z>yCS;=YwxVCvy|1|=F9c-6SqA+DD3kF^
zp?FJbw^sY*5}Kxkwz)$_nc~G-38M80(C}5~$absR?e)P>TZG)8zSPw@^n;LbaqXOI
zgtXRqwKAh8Y+H3MEL~!+Z6X)Z96KfW^(?<xORkU<#(ORDfHVw*;GfO!6x%j*<k*}K
zdzg{TZ)~*9RY<C`S-Ct)h4NgdPYkA`EbGtJb1`G%H(8SqtTnWTk|#75R@cW$E${dY
zg;H$dxgI+{q53{F4tB5n=0p~C#aM|bSor0o6>00&)kY?3Hw)=GMNIVGyDph~YttAH
zJ9}eLW$}G#wW#FgFThLg^rep)!L7$3yO;wfYP$_ZWte!o3Ffk>2?b07FPqZmT6Gse
z;=0Gb*u<;%7?@~P!ut{Gt{GSa*p5IyZ4N2a3cthqZq#YdvZQo*&tfMwu(z3|@kCHT
z8nE_s>m-}djs86~Z37-bspvVT@w!@e4|j?N$=CF7$uCv-gN+PYFMeo9z@Jiaqn^8{
zlI)~ty4E;=-LK6{&fpDUN(rz{%8M8CHx(;>8*r;|vnx&rRWrp!f9a8o-~BlGsZk9)
zDU7FbO0fIV?yRSF?xXk<$9j{RkWNb_Yu_{Oswz$Z&BE+R*rstR+*Rktr<8Xs(h4`e
zw8sFh6ks}$mRE1Isz))}ViZXCqaRCN(BiQSpdF1IRG$#tft*mr=klbxi2@WthG1(p
zX|>?4rSi^O-xgZ$VpkYTLm*~<;o!w8s^`RRityB2d-feJ&U5QQvDZ_s;<ubG&K7>J
zz0`lX27U~^S$Jmz$0#mu=U(Lh4pUc2=CZh^Q;n0UC-rBG&W_C7nb_AtjJmw2x7Y96
z**BZ}j^n(%zK);C9IJZTt9wsDA7q}p_^yMe|8(Ij+ymy65Nxqm!Cr0k(T#^Ebt5vi
zT=ynHB4sDX{Ka-@qSX<+#WziS*kPPtb-}0N$nf&bmjd+zDBXuduknfj6j2HySC3pp
zXE+b*p3o!%i2{UuvvG;JGw0EszO{x!Ddu6|Ua4sI4CW_P?x*YQB0c-_W#a0!z-#ZO
z@`U)LR{EWchrPN1hlK=~CLyWFMK`y`)UW?G<oJ$y9XYXMMq3|9r1Itmuc+{w=>6#S
zK$Ly7<`kQ7v`%{`5_VB+e6L+SvM&+rdN%s1<s?Kz_}vT(<<y^ceD#6j?)`bS%AO=e
z$hARLK|@bJ%tikm&%R!tl9lQl`>Q7u^k%Wj_>TBOs8SBUhnjBlFMzqqalF*&sThA8
z;n0rDt8FOCk%$3vpj(YndV(~IN^*H*&5-dpRWGqjOnCRvv5{p)kp@V!s);FDK?r~s
zV0ux{Z*!B|KPrEU;(iuuk#jwFl&pQk?}5mpI|Zzbv%K=jdyeb_iB|u(nmD~_jnru}
zXT`=<_|G_;_m1oGJW8M%x>h9_gTQB*hl2S7HS_K4yV17nD;9rTIgifZ4d%KJ7YX2R
zznJ@}T|onObpQS+*O6PH%?&MSvMLt1Xnx9&LuOv2=4aKmqUV&J?85ZT8kY$Quw#TU
zna($9k=DN5Y#w#+#x@`Chhs$Ol^}51<xFw10ev)s-pHo5%3MIBTraMtPk!%^Dmt!F
zRkIwCz3A7KDNY1r)1B6HKq1t5@dh?goRIMa$EK0XG@6XH1C;&?K#Wk5H-VMP>*8nV
zka0I59N3DDW-nyCYBb-7gbuI%+=@{Vet5-2r7QndvZUnfSu{PD;fb1!AElk3J5ea=
zYa8Nho+GgNy}jM8cNG7~nU#k%@;1w@+0i)tG4FP{lY)l*=is7L5o~mLtu!P@gxXry
z6m*4s9A}3;JlnXK)C9d~ei<EzU<k6|C~CAbBAvW5IQBd<ow(;c%RY_cCKBcyR!vv*
z;nUXFoB7ls(<@cgwGE*0gp9a(ZG&Vh8C4qkU^qCfrCPUDhQ-A!!@KmFCnCo@waoE*
z29%2v0%zTDqav@(z0J{A;T1fpkS{@hwV*rO*2$vidOMi?)J3Rt*NK>e%jT7roW3R1
zIN$sBz$BMuoge!`tl*p^9Bn=*4|EH`1Xa#$Aw!l7?OnW=u_)>ng~;+}L`j>kcBZ|z
zLaJ8%CThIoLC;wq2nE-C`P7x9AjMmiKk0p2#z}8F^I0CHJC&$Sl!g?tmW51=yG<7+
z<ooUejlDcs{rv~$E*)hde#>4CW83YmA9I@;-MCT&2j<f|?QkF`R(Ib5p*$*>ycqLz
zuHLij_|dA*dQG#T5^YiM?jSO5I8@>-3AB=E__#aO?uWA|-irJ&bJA>7d4oWIgSd+i
z`5NiHcn4*`)uGU!Kx?30^Tgs4eQLwHw_MzxIsZJhCdKzMLy-Qm(!2uLHRp|pE$qR=
zrQe0SysF$gc>rGw286udOGTSVU0U@2q#|6@Nev<~2Bu;zx<$Oa#U)UHEB8ilPHiYA
z>7R0BE+N3gKVVfoCuAC^w?3eQcp+cFfzhFKyH$0V(b7}<Tjbonjp6cTKVR9jad(W8
z`FPCsT0o;o#I0&W+IUs~9DV`*hTF006Sd3bBCB;^h}IyJDOq~=iQG${Gu&I5n)OUM
z*P6C8b1RQG?nwfa1VTyz**qz!x7BbH9nQto6B=6_q6Z)U1xRjkeGU(Es^Bt&qw2zb
zzTQE`&RAHir6bnj?r*j*#ptcJC}jT2fEl*5IL(42olov$A@&bOp3`2|IY1HhH7SUP
zpYQ3m2OGIOs^WQ)rXCtC&4C)IxPP^{`lucEHkAF^vs^bui<Ug?SScO6tYl2&@v?Sm
zsx=_OwJTo_x{QUIR@2pLvFTG%9a0CNfi<OO&3qEQb`j*=sdOJr#Zt5y+E~Zuk_c6a
zT?>Xw;UmsYrngAg{6lZ}vYkytzM(w`#1z6+RVg(7X7VZ)r1C@jKDWf1Q*SmQU5~TZ
zlqVywx|nX)2fT+#G&FIhTonC9pzCclj<pRKAj=JS)}p;#cZ&Ad<jwBH86gsmh^?uu
z^njq%4!(a5E+CY{UCgy>04&{Ly=z`A`C{+4yr6E;{hohRM4G?OeSbR|fhas=lKdBw
z(~C*nS;P)SOub(5nsjCvMt%tCfM+15tT({>l7BNfCB8rJ8NiVYv3FvA#`OzEdjytb
zr`(t4Lh}&;9;ZL|2Q0sBBIhPVvF6tEjNh|bH@jxuN0K)1Ohx*?w@-N%@mL-J(o$n_
zo&=ix{LUP-Qu<vaC)wiPO0M6(bvtD=4C4l31p21PAseiD^|cbbciqxj!}mC-cg{L!
z#gNcc{E(1%L*+G@<`Zrq*3GTeJ?CP*vtX89_<c&nWH8Xf6N0Cz9f{LPIP^e;*E(`!
z+tVzh+h8xlIJc2yDL<;PMSYJY@I4g9df!1UnRPcA^C^M6P?|FunKP&;hg9k9F#?gA
zO}NW?)3mEA3sVnj^eGQe=ivREb4lD|SgZV?;LZHZIaxcAxS^uFZb#q4I)e`E&={eZ
zevf7@?EH}o$1k#<u&Pi1hw#`>{QCo~d7~)O&W|fNZx>}o?C0Emu(oQU==*4OWvZo`
z*mj+P_`jaKl6jJRGwkIq1GZ5qfTEdxh6kkjK@ZC(!lw|I;3#PnkWdw1n>VRuk~fk?
z_+}Ci2a@3B23qSFnzTe+As}pU_-qYv_w=!Njk5~va`(_anwmd2^d+L~W|1C=Cln98
zM-ovjI0aa+)a+_q)7YEFEDroPnZ{Xc!6UuWvzfqIxBDJ~V9MtkA?jLzOT+HtFc*&L
zD&zc-Qqlp^??<MJTlEbw;xWy&PdC5K`UQYZ`%qjXtx6v5<&xGDdS~C&9h)>}$Y4Kw
z-4m8Iof|zf7#v^;0z(a<tb2POP6lBDc3r-x+kBkL^=1()oL})J-Eu{hMh9RkWdmv{
z;2@U}7#rBqW6c@BXl-mkG`$v(b{rYo*+v$K$S#A2v?hmoT=Cpi+(^5G?eCJ7a>-Us
zVLnlC5oF<8B*?Uu6qq*H-|#tIpsk<>C1HK(tq?%LqVUkAKlLIw6t9<?J9nu{WUg%0
zm`OI#)_88w%^XCZl!5diVtCGOJ{0pb*0C~t_s6Pou%U{IeYB2JPH6#Y6MO)izT(-e
zeSDaEWD?5lipjz?-hbb2m3;J-%w2rR97OhgpTF+b@*uFHg;D15J^;;oQeHj)&Xb<b
zdbNdh9FAAh*4(`mKodJEsP2SNm6WEt9*aP~sP>);3<%XohRIZiFMNgn{KAI%#{Sqd
z6m=$dh~6I(;d!+$>~yIl`%nLYGYeoi8{O+mfm*)RapJ1Lk>e-r9DnqLn)f3mdQUC^
zJK0l<G}Qvoflv*rMN4su<yGZb1Cfyz#RJhyWj`6zEIRM4K9GnZo+yYAPaQ?V&bjx>
zoHkmpGHW#TPM$ir^w_w6th7LZTL10B)(X3TniiCWA%sexBoUNT6el1ko<x4_Ln2dc
zF6OoD#A>22_c3{trRLisqofrWb{`#by>cXtgNo19>7L#d9dbHSK??tly;9<>=wO7!
zQ!Mf^C6(0jo&nJcmiCf)!FCpDO%W?<-s(&HFoC$%r#~E2D_{jYW)k8U{YqARTA6Jz
z4?vS5C3jt9g}ivOchx>&(1^E61cULoVeUyGIOp_fYcVEL2M?LlK>DeJR1cZtY9fDZ
z+zW%H1_|sPjeBv(q*FG@vBs4JbsjgQ26^2Fp92^-ymi?u<u(mg(<@CJ_520UY7^hg
zm%Tt?JN<`%>&;WfC+O^$-%z@Mk>fmHw++NMIBg7n3V(cJzEZE_r<*U98@q>anaWpi
z(i*HLFd)b>ZwLx+aIbmFYR(xF<Ca1I%@TZD00sTAwO+OMu{I5H`}R-7-3fJnBH1i;
zh@`T^uJ|F6_OrTDy)U5nT-1yc5k&!OC2^@t7)i!4>d0dktQoBtenCU;-4s)p!YY3v
zNpwn4YjE#wYpudRkUBp>UOem#)4g+{@9E_S7jS;T;?Z9AJE8gwgwhxk*Jv$JT&!GN
z@Ju&G@|n-P52j`PRoz2H1HX34Bf=;I$qhmA;{okehEIMcu3h>cDj%`-r_8;%sAoUD
zdmHnFW0TCZ*HLangU>>Y(cncfswut}6|AkM;S{xB`N(iA?Bi8DYHSz^i>G<HL@z5a
zMX5R{!s*nJf<To8d0E!v&>KUOMW-*;<#*kapF2@d$JzZg&23s5>G6;Xgg5f8sUmkI
z1y11^f(d!)yS%DW;Q8-cQ5FO0{NOAFi$r!RoxN@rjKaJ6*mCN|_&@6z@DJ9MazuDv
z?}mco1J##8{CwBBpG2uIoJtNtMsm{PglS7JaY=sqikkNg5|*ZC&cbYasIy=&NPaJ6
z-!{K1>HA;O2tl(TpQvrx+4weIo|xl(@oBf>2eqi5C5=F5_%#EAW8`Paym$D%mKN1+
zIfH)~vS(s4th1UIienq-+N`1lAd69eOJi@$+E|F)!aX@!{E76+*(}Dr+9lh1BHDWO
z+=>j02Wf;<=C{nh|IB?uQ%Zl&$eA{jchaAwNT1q70~t4%TjSuaI1R^L!ny~Ml4Uwh
zok87JD2P+_f#(RyZc0#lGno$lg%_aXdw4QcjP=RYQU#kCc+?EE_Uu-196wV@T^7i5
z(bgj)!;i-!(c?C%Fq-bQA_lxS?Ht1P$L~G$j1k9?&`Z~k%?e5NaXo*@H+W|N?g=o)
zG4d}7kvS+2MazzgiV;oY#?BOn(DvG3;D9gvuz2F($Lv;Uq{GiwR6_%}jZ{{loC)Na
zyN?Z3Ty6>1pLO$<=+R#ia+QZhG1A;bAAoJ}q1vL3y}2XU9|g77*)lJX&+SGrQJ=RO
zECxYZ^xWLC?t6ue^5k>u>L_UaErlT&V(oT4shF2zOn>PSX*NrTZfiZauC994IS^7K
z;$1l*D&4g@@hs%)=Y@+!4!1JYv*eBU7!yDwSIed-0Z%wUm3^qcio9_7w}SVd4|4o@
zBn5|CjaXj4S78B;cLasqel{M)grt8+e|WxPKy_TaZYDW0n5dQdkU0uunnhJjDRz#8
zIShSCoRw92Rw5#m@!YtrMN+jZwHVt0KVb}SXi8|mW=DoYuHPpooOXSb0hjR16auoi
z6+yKaXF-fzYI$@%HNbtK@krH7f~ag(!f+UdSKNpd3nhWz5)~62yCLwcN@FV&q>n+a
zxEdQ~72n;V%mgodjS$-eDJGr%Em<<QNSh|_cnzAxKzkRZrjJjhY_Vq&&7dp=hN48Y
zI%Kn<x;DW~bFpAL&x$ko#g~jx(yJyBMvp{<w29yIcf^^CK%_)V-=8U1J~|QF#wq&s
z?J@f2Q5T-7DC81H-$vd+;fE`wlnGSc(ROvDMxD`UwITn%nn~-5`b|tG_?d?II^8bN
zz)zXZM->pjC<7scYBpNi$pPC<*`l05Uy7b^$<y0QC55Huc`vA1#(eyFru_j_vW>Vw
zZW;M415c7t(uEL(0~f`|D&|Iu4P=#@|8+S_dyBT9(yc?Uptm`v`c`YUQfvPx+zF<!
z59eRZyLj2i&;MHICZ|Zhv5JvgrpFHba=xhUOjcnYy~_=?c%-B&?;$Yvu6mWc!0)L?
zf7SU6xbILn7(&_)s3kOL*B?e#V5iB^a`K|G8HZDUlRZlcXH0qF&~L5l@p|rd<U(e6
z5`}sxl}r^5)B2z@S;XoZF(-$U&-p2ISnTYtb%9UrcLkQ?e~sfW2^kMREL`CwTv-2j
z1Zt{<_4$T#oz=Y`t;s)+^*$xv)SmwZNY&fAEH~J6Y9aHwB<Iei;8%<sM-trp^0p*G
zxCp^l@eOTRdvx*g->oLepl|Xtf&+VM-Rj}lcflXYO9xjtf9T~TTmJNV`U}8^nIAbt
z48Qs8*jEDy%mUWM%X)iWf9%EgUSOHx4`U?!uRwh=%9AT{G{qrvmcWRX*F4|*7{`(G
zcjt-!>+5l=y}H*OplR!;sb5TBBzpJWCcpfjL%&-$vrK+=D2y|`o48YDGP+;t+<D-}
zuM<1|L$JW||6l&U&W6>LLZ?$BP7stI#<;Ba^S5Re9*bS<&z<2VFeK5pGT%N4rz)qY
z{B-x|O71(h7UQ+SXa2Y~*eb^DvzXs!o!o?D??0IO5D`>sJRq3TJV^~_GniWs3brBU
zUcp={?zQB6K8)p8;4%!JX{-B$=!d_YSJRZcdRafa(N<qYzqIJC>)Cfw`6n-cxI_3J
z!B02P;ZE%!%dL<0*Tc!vvtFp8+mXkx-?6SmeLm9z#>A3X8p(RioV+OXj9f5d$*qj5
z3gUJKit};o_WSJvYf)RU9y+O>0(XgjuGQi2yeBAWGDKZ~D*64s>Gd`qc=E`He`i?y
zAF@OK`_bP*;zN5}qfi6D9uRyDyRxU;H)QzI<!Ii3aZt}J43SmETA-XEWHoOkD)WEW
ZyeQ8<(*2*Yguh7m$2)&-GMvAr{tFNk6Q%$F

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/examples/bootstrap-example-hero.jpg b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/examples/bootstrap-example-hero.jpg
deleted file mode 100644
index cd4a321078634534b389799f8ebad03583a86f2c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22280
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
C+R2Xq

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/examples/bootstrap-example-starter.jpg b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/examples/bootstrap-example-starter.jpg
deleted file mode 100644
index 09c8a066d8f295e5331527967a8c0b01e6f975fd..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7182
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
X_*MUBHvZ|xuO0YR|2`W$8}I%HgV7`9

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/github-16px.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/github-16px.png
deleted file mode 100644
index c99ab237a7e77fd149fba63e15e3463b387c0689..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 398
zcmV;90df9`P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU
z000XU0RWnu7ytkPKuJVFR5%fhlQByJK@dibR;dKRDj);|!PZK!^#|CAAOx&Z+1mOi
zY^{VqK(MtH1VIP{(%C5K1QAk*qUd|aj@;_4_`%EV&U~|bvzu$pm9;`@Ii(+YK9sF_
zW{>FzKH)jx*qFJZ+GK_>gF{$@&?*CC=Je?OrE?-zumcwSlr3$89=(}-wJ9vZDfr47
zZ(*FC#*RVHJ!I{S2poVq1I<mCQ+lnb)ZzCP?8{Ssho<6)ttYQFoq2w`;1#_XfCczV
zOC<GL({+Km?wGvQ0}W#fGu2x#u@9v-PEw`qRxPA?b<#a18eG6dk0AOUFy4YtkAb)I
zEw99@@ro|t0&XA{xMmz`yhf82dH3$V3I17Pf!NKQ9=(<7hqz1R2_~=s9}u$VKA7{v
s(p!{g;Eu6-JdK&l)XHZ0<X@lj7XtENzMcd$=>Px#07*qoM6N<$g5G<stN;K2

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons-halflings-white.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons-halflings-white.png
deleted file mode 100644
index 3bf6484a29d8da269f9bc874b25493a45fae3bae..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8777
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
B7G?kd

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons-halflings.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons-halflings.png
deleted file mode 100644
index 79bc568c21395d5a5ceab62fadb04457094b2ac7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 13826
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

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_009_magic.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_009_magic.png
deleted file mode 100644
index f1cfb3785f3b1a76a3bdb87d9a34345d27705950..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 316
zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wtpJ}8*Z=?j1DV8tXThFbKy|z&
zL4Lsu{O9G@&(Dwd@2}tgJ~Y315l~`_r;B4qMVxD&E!QCjf!6d+`-@qeN@kitk*wQ<
zbcz`i#RYWsG#oK=|G?2CzVR!=O_c=0@{dnh&DTqm{hX0MPhqLSY$oMTHM92|jQPUS
z$u~dJn(3@V(AF6n&BD&aZr$6t(eyxM`xH;HX7}(3Tv~f}I*T&ohV*WqZrk|r5F5+!
za~p3nTw8Uwq~`b1CWjt=h0;&Im@8vc8tzux=W4__mY%Tpb6P#iTAhK#?1`sB@u{%Z
amOl)_8=TB`9G_bS3II=6KbLh*2~7ZAGiXKt

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_042_group.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_042_group.png
deleted file mode 100644
index be5c6f94b560661d614e9f1f30b89bdca347bb40..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 305
zcmeAS@N?(olHy`uVBq!ia0vp^%0Mi}!VDyLI9QYbDXjpX5ZC|z{{xxCfM>y;T|jlb
zB|(0{4EOEp`QOK%pP#S4UtXzq`X`{oN>3NZkczmur);?nIf%4ge9o`T)pW#9qGRgX
zro4npH?*5v5A@!+xr@bdd%}C67D?CS;_r`C{dqJ)J~T(4nW?^>?L?AhC~JXcaPt(=
z3!4(}vrT5M@)BLJI7M*Ek1t+#!ma-A$zsyxE5BJNb%1f+_kY4y-5t!A&vKREp3PvP
zwq&(6<MxFf^MzD3Z=6}%D8QYXsPk!BTl~B)1tPk$w9am?*zW1MMxge;w}0S;-QPCs
RcpU-qwWq6}%Q~loCIGmYXmJ1l

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_079_podium.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_079_podium.png
deleted file mode 100644
index 20b7c99b9d44a8c1e61ad0e26e263ff61dd4c1e8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 213
zcmeAS@N?(olHy`uVBq!ia0vp^GC(ZK!VDyr>rBoEaRPioT>t<74`iYN+qO4_Kq0o0
zAirP+--f~fgI8yr&H_a;JzX3_D&j)V9u#a);BmPqlcVt1fiZ${ngi>W3Eh9EKTz`u
z`~K}&x<gWQ_S*?}7<M-Y{-3zV;Od?~MGavGMFS7o+DUh--*_yU?&9mFQp+`Km-x(A
t&egM7l{dMin65pk#9=c}A^gd4O>>_Pr%5Y0&gX($=IQF^vd$@?2>{H6My&t<

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_082_roundabout.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_082_roundabout.png
deleted file mode 100644
index e3a6487a01f6a41b1edf9687b2db5e0c960add4a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 345
zcmeAS@N?(olHy`uVBq!ia0vp^(jd&i3?z4Pv7`ej;{cx!*Z=?j1DPa&j}1ONKn(&V
zL4Lsu_wDEFzu(`V@6Ug}UVeRicYcF5Q0}Owi(^PdT<L|Ec}Em@S}(qC)%C8v|38y^
z#YQ2c;(sm|+jW>3T(A4w=rp~P+RWAbVsGG&fOokQ7R3sd>E8PD_u&3nWv&lOVm`J^
ze|vM&<06Br89xIa>}=R#>9o;9W|PyWohr{$_$KwWpGstQi*A!@Rk7Rl>Q~;wEGID?
zF3lG?HR4WEyWBSI6VJWA@W}ze{1=*Trsp(%i)mhK?u|Gp8R)L%a3s-9ysWK3C{USI
w)Nk1m4KeGJU%0ooO+O>DJ>sHY&F7VW80%Phop;D~2!KMz)78&qol`;+0A00u82|tP

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_155_show_thumbnails.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_155_show_thumbnails.png
deleted file mode 100644
index 751e3b7184e58edcd7c05beee1d0f227104f10bc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 117
zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@O3?%<m{i^^{YymzYuK)l42QotsU9JOCj3q&S
z!3+-1ZlnP@vYsxEAr*0RPcGzTVBk5t;cxxsgC2>2%B(*F{8!s6?>E)7Fp?1kDrE3<
L^>bP0l+XkK;3Oe&

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_163_iphone.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_163_iphone.png
deleted file mode 100644
index 926df7e5506172b27b22895137b5a1058005ffc4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 172
zcmeAS@N?(olHy`uVBq!ia0vp^d_XM0!VDxWUS3QAaRPioT!Azi`2YVuP-NMpve`h2
zy(Gvl*!R8tdH#Hc;xpTx0EKKkT^vIy;*K8Q$jhL}bM%6}^Q<dAh1_@eavbCppL`8;
zI>@o3a+B1|lcxoiuinJo<ZShSeazzKJ$6?V4w$V|Q!kbd-1`w^r>Co*%Q~loCIB&*
BG}r(D

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_214_resize_small.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_214_resize_small.png
deleted file mode 100644
index 707d9e03e3148636d89aa67a346dd9963be91766..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 301
zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wg8-ip*Z=?j1DV7F{ksdQfvWjS
zg8YIR=JV^nmp^acU+=$v{r&hYB7FToskxpmjv*Csu^0AoG6f2-Jg7aTsPwOab<V`5
ziHAxHSnrf7+&Iw58_~datSv3AZCXMG=d=e0KTGyWpSdTj{#!z<ZR(7}Eg4fEZBVn?
zxrF1$0sY2VFPw~(WRev3&UgCN)tb2C1h00hey8lAw<+AuqBov7x9!!Y^&b=`F&&sa
z!RMpV7E%7@;27SQ_v2)e4fW=^v_@^>HN4uq<mc(wSv8D@Z+RH3l77np^0B9@pUXO@
GgeCwxyk)}x

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_266_book_open.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/glyphicons/glyphicons_266_book_open.png
deleted file mode 100644
index ab04b4a1b3f47fc15d890af14d510fbd6f876395..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 292
zcmeAS@N?(olHy`uVBq!ia0vp^5<o1@!3-qT{@2R`DdPa25ZC|z{{xvMfsYM7JU|Ts
zB|(0{3=R9==lk39>#vW$FF(Kk{Dqnc|A2B6JY5_^D&p4m-{v}GAi{FJxM=T|yZ`@3
z`Ok_n<p?d1J2b&S=b#_g$&_o8Zr+UP$-8YT&aiUU$_)FjS7t4kBE)z^sV0!Mv)R-0
z4x7L0_18?ne@?UQyM18G$My9w_FFDAczUY8>8K9=V9Zkb(T?T)b+2osKNh)^&2-N{
uQLwuuVq!yD>nc%Rk1&p+Bh5j6y+8R*nee(jv{(@d@~Ee)pUXO@geCx`LSohc

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/grid-18px-masked.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/grid-18px-masked.png
deleted file mode 100644
index 1bc82b03ab97f8173d664744abf93e831fe92a07..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 405
zcmeAS@N?(olHy`uVBq!ia0vp^Q49=>Ml8%gR!7*aO+ZRFz$e5NNaF|p|Nn<8;5jP$
z6v*K(3GxeOVCQ9IW@TdIX5nGr;^b(LY)J%Kz~SlQ7*Y}U_J)1lAp?nHiSmkf8osei
ztYYL}Q9SM4G%dsG2Mj&3whAiS`a+k>H1<wa-cZDSX8zmB4~jVi)c2QHwYyK79zHGS
zo*SoOa<S(^joND&Cbu(JTzv6;$_6%*S>^1#Y1ZdKVvdV%@=2YIXOud-d-8TSFsJN7
z#<s^x|Ai_{{kAr9y+-rZ7yoDMm-khwdExtv`RY^+|7%kh@wlv?{N<UpVrROytjozz
z_La`Rt8ORex}FS;Ub)uoefV-6wd=)UY150!+Dkr4y*0V@HK4k+ENJ(hFF8V=E%(k{
zoc&&H>6NK2T)lcr^-Qhqth{*IqWe9+uab|=?QKi5d)G;4n(WG3#vf$gY2)X%O9&Kp
Mp00i_>zopr02z0cQvd(}

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/icon-css3.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/icon-css3.png
deleted file mode 100644
index 58e107235a8e805f20c87f28d58d9d0614c0b79f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 370
zcmeAS@N?(olHy`uVBq!ia0vp^LO?9S!3-p~d(N!@Qq=)IA+AaT2l`4Lu>+l<Q4-`A
z%rGaj>&&hX=eK-LJ~_dF|KTfLm4u&cu^Y`i+Cxg8Gas(DnRdHTo##pRmrM(wo;pt#
z$B>G+sb{bA9aa!vy?As7%k~>D_fG%$U!TWula7M^&VKh>kw15`<j+-o8l0y2HB;Qh
z=mz_hgF35b2Zz`n|7zvon;>^Vq-vt*8urY@jUpEpu<vqub<QyBbL-kujysDR9tFrV
zdgx3Qeca{!n(M4?c|pC+@%!sHRlRomcZ=Qpk@&}Y{gr({moRv``njxgN@xNAE<tpx

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/icon-github.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/icon-github.png
deleted file mode 100644
index 1a5fb781e46f35a545f636f6e1039cca61690a2f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 312
zcmeAS@N?(olHy`uVBq!ia0vp^LO?9S!3-p~d(N!@Qf2`@A+A9B|Ns9$k|gl-bJBL8
z2EmdbzhDN2_YDaS1?L6sE3Dr?-yooWqQR*-K*<H3E{-7;ajEA|_Axthuv|0|xpJ-h
z@&Ed3^BikGS+`B`c=6S_-mR=*p0n%r#M`yf*H)S6eAVY&f9d^-+TGT^Qfa4WJ};DM
z)8DM9{#4|iSIpfdCzDU^y1^y4#O#o^=yc_C88#M=UCxx3$(8$Dk$i2X6>)ii_Qwrd
z)h?)5t~A_vr*GF<Zt0+e@T#S!JF0}@8J1uFp{>>`S+ynCpnUa*UmqC*gSfW~{=eV}
O^0}w0pUXO@geCx--fSEI

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/icon-html5.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/icon-html5.png
deleted file mode 100644
index 1e8788313acfded4f571e27bfdf1a09973323af9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 452
zcmeAS@N?(olHy`uVBq!ia0vp^LO?9S!3-p~d(N!@QgZ@)LR^&wF<9rn${FZR<B}l1
zV1}8-(=rdwueRZT+nB%3sjhw3$$Q`S`i1-qS3G0crLHT=d7$^$mfK4Mwf;PeGD|a1
zdCsHzZJ#nw`w~wV$B>G+*mFnoSPU5s1Z<bQCmXfQ$oR+q|7+VlCR)9JwEE=S6Pa@}
zIQ>}Cc3F6f-J1N8_2k^NoUIC#m(sOlSNhr%u5^!>Srh!4KW46b@4W-(WKXWve&E|(
zF`;m6|AD~t`P)~q>R0jGWE@{$bs>{mWY_b6zU0b;^^6iFen(=`4WHGrhR$Ct`C;8E
zU*X-XR{vKr*qz!s@%5+fjw<14r#Jj$eZa4MUG3`{$pwKx_cD08`njxgN@xNAiqVg)

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/icon-twitter.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/icon-twitter.png
deleted file mode 100644
index a4716545fa6ff394c3b56e52236870268cfb5bc1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 264
zcmeAS@N?(olHy`uVBq!ia0vp^LO?9S!3-p~d(N!@Qf2`@A+G=b{|7Qj1@8Kb*8%ki
zmIV0)GcfFbFOaa_;JkuE!~FXJ{RNxvG-v=N3p`yMLn`9dp7Z2mR^)NHxaFXOaoOGf
zn?4FeM!Nr$K5~0UoPD|L&nfHH2keiPy7WV!IU>VhmY+Cd_H&k8i<`?2MwM!ZZq(Q)
zxNo-EqU{aK#J36^adHnYYzi-NiFM)9yIJ;B^0*x1{Zf0Cxw;8oj^Fzk$^N;i+UOq0
NGoG$~F6*2UngAZ3Q2GD>

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/less-logo-large.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/less-logo-large.png
deleted file mode 100644
index cb56637cbf644ede9beee81798343b7116a3480c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 13078
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

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/less-small.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/less-small.png
deleted file mode 100644
index 93ea597cb707b6c3f0d9c331459388fa8bdd0848..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1181
zcmX9+3pCqj6#ol0a}sY7Z|Nw<YoZ=yB2!7dQw!P1@m#Hk)gy$3CDnL^YR?hvtT^-9
z%xR4g@0bnkPB}uAm4h`4vW5{9#g^vO?vC%A|NY<Z_uc!u_xs)NRwOkDqiv>*AP6QT
zm`sDe1AI6wb+Dt1D+dUI(u)j_rktLhqS0tNogN$<3{FZ)%G%nRQmF*IsHn)x%L_p8
zmzS62ayj^LG&D2>$jQkGSRRiD_H1o!ZGi)LNl6J<p->3+@bEAxDG6{RBctx_Zk0*}
zBxku$NFWgC>gw+8?LqDt|MBs$R4Rokkhrq40>QJhvo$p};OOY+OifKea7#-I27|G-
zwvLI3F)%OyPB;n+3&Y`X5C*ki3n0V*`N6?~v9U2^VX;_qb8|gCJs?*o6ecDnkgKn+
z&*5;O7PKc8i><7z3=Iu|M<$a&lk@ZQ1OlPHzFs1cSXx>_^}xVDXtl4e&&S6H8m3Sv
z0|Nv0_V(f7;R_23PEJl^V`H_owd3RCBO@cRv9WwUAG!q@MIw=%on2vJA&bQ#5{Wb#
z&EMbO+1WWDARsC#s<E+gV`GC#rJ9<Wl1L;_J1Z*-E)H`^PELlad3$?zc6OSXnWd$r
zxx2fAlKJ`h>FMdIsi~lIL_`FG!I+tu@$>U@bab?}wS~F3y1Lrf*mQJs;PLp3j0}*=
z!@~n+>gnl8CX=~bE=-)wW@lz*g1p(;*%cKP@$vE7>zpHaBA0V%)F_0bu3?}l`9`Rr
zjuQ8->oz%HGkg7+9bM(qC+c$VKV@$V4DwD4vBoccxh&-D6KbUQ?@9Ed2Q@Xy4xf6v
zU1P6sSkWeer3do}qIMiY4v5ZA=zm7fvLG1o*V5)Qe*d}-*5AEEw0PR+n*9IW>1V|H
z&aZkobsO@@11GWXBMrt{PK2!e`i~a<3#z|zMD1_w4;Nh$BBKsn{^|L4_0`=USPhwC
zbfo$NoLP)0w0ovp{{)rT$9~Cumhi@nHEc;Ov%QJpKOWEV*qJv@Z`dhqQ)%O(`+J@<
z-){^5@)BiNQ`y-~M+egsZEcb-=-leW#mM+Y?Ecj0BcDnBuc+D23x4CR2YN`q=Y?)!
zu!`zeagRG9M*iTM3{pN2u&-<T<~iNkEpNu`p5OLm26kO3@a^Wd*f=xzybcmF{5pH}
zhCJs&kF@BCT9^fLcc<N|CnxuanvB_G#BY4s^lz_@ECLx@nuv5lF39HIz2Ts>?VVnF
z|Mk8=h2)S7U0g<qyCgy-VbI^8S)ihX4rXjLy(p@<s1s+G-CW{!z7kKmn&(!`y@Pt_
zrC4!ca+){UXq@n8$w#f7B4*e42+0v&M_|2oFR@KH*cTLKU-eycL*v9dh_Y2TE`SrN
zRvV~@O{;p7R9QMnG{KX19G}q7wJC2Ooips`?w3sl4;$?UJ)hM|zEeIeN7Ky0oma;K
zKJ+73e`5NOCz7JdtCrU0u1?G)_@o!-uD7mU%u`OcRz7VQWqw?%byH2pO;K5S@RA2_
O3JIZ5$v<66D*g`$g+KrR

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/responsive-illustrations.png b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/img/responsive-illustrations.png
deleted file mode 100644
index 6ca0f07888b8d7ee1a1691d2daa9030d5dae63c0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1077
zcmeAS@N?(olHy`uVBq!ia0y~yVAKJ!Cvq?YNxz2D2q5)5z$e7@|Ns9p2RC@|;K9$I
zKNl@p1a#`DQ>X6TySHoCuD5UBZr{HB;lqb7Uc8t;fBv>@+jj2U`Rv)VjT<-4o;`cV
zjvbF4J$mxw$)7)eo<DyM^q)cJo+&^to0SCl1v4<bm0rE>`I8k|AO6^Xwy99}{u!9C
z@yy`^mqg|2@^8mZGuVEW`QDs|CspPz<v-TKX8dZGpW+tJsjcM<3{1y8T^vIy;@({7
z<YZ9bVLo8zwOYX<;@kY=hE4~hAD-FFZMEw1-H1E~Z=JYn4YN+3z7<eh5qUv*%Gb?u
z)+G+W&_BfBk-WG0@8=nhrCk(cyEdhqoTTbKO(zl;<J#tIb#(@&Kmpd+LdJt7XA;=d
z{#W=MJS_e(Sk^)Q)t|batNS<XiP)%kZ&TmQjf<T3BzpIV$~`*Ux$%(m9%aL8!Oc<g
zvkqo0HHpxzd7pf+iIqF-grQEvhJ=GnU*7@=R&Fr}k4(nvwB>O@5-d#$4QYQ`KTcl5
zH1CMN&>0sK?#F-63kNuDx+Ix7A#YXK-b}80i*hzvv}%iOXxJ)oF(NiNuvAWeWzHJy
z+_#ZN*LruDS#lnG^}l}J?Co!+#~57emeQWq9oly#LU}_2t4_jN_J{*aVjIpdN0`lw
z_s-VIxwiX9($P0-HvKizPH7i?*S^#?Eo@%d!K||hQJWgW>jVrJbuq<TCYWBXRG0eU
zzq9PpEd!pGL<_Im6SmyU+U=Q}et-8n?nVij8jdCR|Npl=YT0g-%&X+|-qZYGvw)M2
zr{@*Mt=UUu*|jZogf(@_UU|gYt`Rb}y7q6wo%teR$91ONRo7-Qy{~hvuONNqF{y@I
z7j(onmCQ}M)gKhN#%RS?)eSxSH@j?H=dkv<O&Cj&a-fcrdb=sx&d$#fb|-x29?xo=
zV_q!#TIS2Gb;)NP^$TRQ*%r4dTwB^2QEL#zl@uG%v6X50E}5{kIkMMeBkrC~d@4VE
zTB2>kRPpY_zw_05uU<Hw)f5@Z+^u|b>akr{k5%y;)HP^++I@b?t0Y%{)-v9ngq7(p
zGgEcfOuv3ly6elokC_bKSNCfPteSNG;D5&T;!Fiv=2uPuGX;aEtDnm{r-UW|29*qX

diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/README.md b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/README.md
deleted file mode 100644
index b58fa1d4074..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/README.md
+++ /dev/null
@@ -1,106 +0,0 @@
-## 2.0 BOOTSTRAP JS PHILOSOPHY
-These are the high-level design rules which guide the development of Bootstrap's plugin apis.
-
----
-
-### DATA-ATTRIBUTE API
-
-We believe you should be able to use all plugins provided by Bootstrap purely through the markup API without writing a single line of javascript.
-
-We acknowledge that this isn't always the most performant and sometimes it may be desirable to turn this functionality off altogether. Therefore, as of 2.0 we provide the ability to disable the data attribute API by unbinding all events on the body namespaced with `'data-api'`. This looks like this:
-
-    $('body').off('.data-api')
-
-To target a specific plugin, just include the plugins name as a namespace along with the data-api namespace like this:
-
-    $('body').off('.alert.data-api')
-
----
-
-### PROGRAMATIC API
-
-We also believe you should be able to use all plugins provided by Bootstrap purely through the JS API.
-
-All public APIs should be single, chainable methods, and return the collection acted upon.
-
-    $(".btn.danger").button("toggle").addClass("fat")
-
-All methods should accept an optional options object, a string which targets a particular method, or null which initiates the default behavior:
-
-    $("#myModal").modal() // initialized with defaults
-    $("#myModal").modal({ keyboard: false }) // initialized with now keyboard
-    $("#myModal").modal('show') // initializes and invokes show immediately afterqwe2
-
----
-
-### OPTIONS
-
-Options should be sparse and add universal value. We should pick the right defaults.
-
-All plugins should have a default object which can be modified to effect all instance's default options. The defaults object should be available via `$.fn.plugin.defaults`.
-
-    $.fn.modal.defaults = { … }
-
-An options definition should take the following form:
-
-    *noun*: *adjective* - describes or modifies a quality of an instance
-
-examples:
-
-    backdrop: true
-    keyboard: false
-    placement: 'top'
-
----
-
-### EVENTS
-
-All events should have an infinitive and past participle form. The infinitive is fired just before an action takes place, the past participle on completion of the action.
-
-    show | shown
-    hide | hidden
-
----
-
-### CONSTRUCTORS
-
-Each plugin should expose it's raw constructor on a `Constructor` property -- accessed in the following way:
-
-
-    $.fn.popover.Constructor
-
----
-
-### DATA ACCESSOR
-
-Each plugin stores a copy of the invoked class on an object. This class instance can be accessed directly through jQuery's data API like this:
-
-    $('[rel=popover]').data('popover') instanceof $.fn.popover.Constructor
-
----
-
-### DATA ATTRIBUTES
-
-Data attributes should take the following form:
-
-- data-{{verb}}={{plugin}} - defines main interaction
-- data-target || href^=# - defined on "control" element (if element controls an element other than self)
-- data-{{noun}} - defines class instance options
-
-examples:
-
-    // control other targets
-    data-toggle="modal" data-target="#foo"
-    data-toggle="collapse" data-target="#foo" data-parent="#bar"
-
-    // defined on element they control
-    data-spy="scroll"
-
-    data-dismiss="modal"
-    data-dismiss="alert"
-
-    data-toggle="dropdown"
-
-    data-toggle="button"
-    data-toggle="buttons-checkbox"
-    data-toggle="buttons-radio"
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/application.js b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/application.js
deleted file mode 100644
index 6463b902fb1..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/application.js
+++ /dev/null
@@ -1,184 +0,0 @@
-// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT
-// IT'S ALL JUST JUNK FOR OUR DOCS!
-// ++++++++++++++++++++++++++++++++++++++++++
-
-!function ($) {
-
-  $(function(){
-
-    // Disable certain links in docs
-    $('section [href^=#]').click(function (e) {
-      e.preventDefault()
-    })
-
-    // make code pretty
-    window.prettyPrint && prettyPrint()
-
-    // add-ons
-    $('.add-on :checkbox').on('click', function () {
-      var $this = $(this)
-        , method = $this.attr('checked') ? 'addClass' : 'removeClass'
-      $(this).parents('.add-on')[method]('active')
-    })
-
-    // position static twipsies for components page
-    if ($(".twipsies a").length) {
-      $(window).on('load resize', function () {
-        $(".twipsies a").each(function () {
-          $(this)
-            .tooltip({
-              placement: $(this).attr('title')
-            , trigger: 'manual'
-            })
-            .tooltip('show')
-          })
-      })
-    }
-
-    // add tipsies to grid for scaffolding
-    if ($('#grid-system').length) {
-      $('#grid-system').tooltip({
-          selector: '.show-grid > div'
-        , title: function () { return $(this).width() + 'px' }
-      })
-    }
-
-    // fix sub nav on scroll
-    var $win = $(window)
-      , $nav = $('.subnav')
-      , navTop = $('.subnav').length && $('.subnav').offset().top - 40
-      , isFixed = 0
-
-    processScroll()
-
-    // hack sad times - holdover until rewrite for 2.1
-    $nav.on('click', function () {
-      if (!isFixed) setTimeout(function () {  $win.scrollTop($win.scrollTop() - 47) }, 10)
-    })
-
-    $win.on('scroll', processScroll)
-
-    function processScroll() {
-      var i, scrollTop = $win.scrollTop()
-      if (scrollTop >= navTop && !isFixed) {
-        isFixed = 1
-        $nav.addClass('subnav-fixed')
-      } else if (scrollTop <= navTop && isFixed) {
-        isFixed = 0
-        $nav.removeClass('subnav-fixed')
-      }
-    }
-
-    // tooltip demo
-    $('.tooltip-demo.well').tooltip({
-      selector: "a[rel=tooltip]"
-    })
-
-    $('.tooltip-test').tooltip()
-    $('.popover-test').popover()
-
-    // popover demo
-    $("a[rel=popover]")
-      .popover()
-      .click(function(e) {
-        e.preventDefault()
-      })
-
-    // button state demo
-    $('#fat-btn')
-      .click(function () {
-        var btn = $(this)
-        btn.button('loading')
-        setTimeout(function () {
-          btn.button('reset')
-        }, 3000)
-      })
-
-    // carousel demo
-    $('#myCarousel').carousel()
-
-    // javascript build logic
-    var inputsComponent = $("#components.download input")
-      , inputsPlugin = $("#plugins.download input")
-      , inputsVariables = $("#variables.download input")
-
-    // toggle all plugin checkboxes
-    $('#components.download .toggle-all').on('click', function (e) {
-      e.preventDefault()
-      inputsComponent.attr('checked', !inputsComponent.is(':checked'))
-    })
-
-    $('#plugins.download .toggle-all').on('click', function (e) {
-      e.preventDefault()
-      inputsPlugin.attr('checked', !inputsPlugin.is(':checked'))
-    })
-
-    $('#variables.download .toggle-all').on('click', function (e) {
-      e.preventDefault()
-      inputsVariables.val('')
-    })
-
-    // request built javascript
-    $('.download-btn').on('click', function () {
-
-      var css = $("#components.download input:checked")
-            .map(function () { return this.value })
-            .toArray()
-        , js = $("#plugins.download input:checked")
-            .map(function () { return this.value })
-            .toArray()
-        , vars = {}
-        , img = ['glyphicons-halflings.png', 'glyphicons-halflings-white.png']
-
-    $("#variables.download input")
-      .each(function () {
-        $(this).val() && (vars[ $(this).prev().text() ] = $(this).val())
-      })
-
-      $.ajax({
-        type: 'POST'
-      , url: /\?dev/.test(window.location) ? 'http://localhost:3000' : 'http://bootstrap.herokuapp.com'
-      , dataType: 'jsonpi'
-      , params: {
-          js: js
-        , css: css
-        , vars: vars
-        , img: img
-      }
-      })
-    })
-  })
-
-// Modified from the original jsonpi https://github.com/benvinegar/jquery-jsonpi
-$.ajaxTransport('jsonpi', function(opts, originalOptions, jqXHR) {
-  var url = opts.url;
-
-  return {
-    send: function(_, completeCallback) {
-      var name = 'jQuery_iframe_' + jQuery.now()
-        , iframe, form
-
-      iframe = $('<iframe>')
-        .attr('name', name)
-        .appendTo('head')
-
-      form = $('<form>')
-        .attr('method', opts.type) // GET or POST
-        .attr('action', url)
-        .attr('target', name)
-
-      $.each(opts.params, function(k, v) {
-
-        $('<input>')
-          .attr('type', 'hidden')
-          .attr('name', k)
-          .attr('value', typeof v == 'string' ? v : JSON.stringify(v))
-          .appendTo(form)
-      })
-
-      form.appendTo('body').submit()
-    }
-  }
-})
-
-}(window.jQuery)
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-alert.js b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-alert.js
deleted file mode 100644
index 57890a9a281..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-alert.js
+++ /dev/null
@@ -1,90 +0,0 @@
-/* ==========================================================
- * bootstrap-alert.js v2.0.4
- * 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"; // jshint ;_;
-
-
- /* ALERT CLASS DEFINITION
-  * ====================== */
-
-  var dismiss = '[data-dismiss="alert"]'
-    , Alert = function (el) {
-        $(el).on('click', dismiss, this.close)
-      }
-
-  Alert.prototype.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)
-
-    e && e.preventDefault()
-
-    $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
-
-    $parent.trigger(e = $.Event('close'))
-
-    if (e.isDefaultPrevented()) return
-
-    $parent.removeClass('in')
-
-    function removeElement() {
-      $parent
-        .trigger('closed')
-        .remove()
-    }
-
-    $.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);
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-button.js b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-button.js
deleted file mode 100644
index 7f187be6206..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-button.js
+++ /dev/null
@@ -1,96 +0,0 @@
-/* ============================================================
- * bootstrap-button.js v2.0.4
- * 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"; // jshint ;_;
-
-
- /* BUTTON PUBLIC CLASS DEFINITION
-  * ============================== */
-
-  var Button = function (element, options) {
-    this.$element = $(element)
-    this.options = $.extend({}, $.fn.button.defaults, options)
-  }
-
-  Button.prototype.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)
-  }
-
-  Button.prototype.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 ) {
-      var $btn = $(e.target)
-      if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
-      $btn.button('toggle')
-    })
-  })
-
-}(window.jQuery);
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-carousel.js b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-carousel.js
deleted file mode 100644
index 551de589112..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-carousel.js
+++ /dev/null
@@ -1,169 +0,0 @@
-/* ==========================================================
- * bootstrap-carousel.js v2.0.4
- * 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"; // jshint ;_;
-
-
- /* CAROUSEL CLASS DEFINITION
-  * ========================= */
-
-  var Carousel = function (element, options) {
-    this.$element = $(element)
-    this.options = options
-    this.options.slide && this.slide(this.options.slide)
-    this.options.pause == 'hover' && this.$element
-      .on('mouseenter', $.proxy(this.pause, this))
-      .on('mouseleave', $.proxy(this.cycle, this))
-  }
-
-  Carousel.prototype = {
-
-    cycle: function (e) {
-      if (!e) this.paused = false
-      this.options.interval
-        && !this.paused
-        && (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 (e) {
-      if (!e) this.paused = true
-      clearInterval(this.interval)
-      this.interval = null
-      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
-        , e = $.Event('slide')
-
-      this.sliding = true
-
-      isCycling && this.pause()
-
-      $next = $next.length ? $next : this.$element.find('.item')[fallback]()
-
-      if ($next.hasClass('active')) return
-
-      if ($.support.transition && this.$element.hasClass('slide')) {
-        this.$element.trigger(e)
-        if (e.isDefaultPrevented()) return
-        $next.addClass(type)
-        $next[0].offsetWidth // force reflow
-        $active.addClass(direction)
-        $next.addClass(direction)
-        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)
-        })
-      } else {
-        this.$element.trigger(e)
-        if (e.isDefaultPrevented()) return
-        $active.removeClass('active')
-        $next.addClass('active')
-        this.sliding = false
-        this.$element.trigger('slid')
-      }
-
-      isCycling && this.cycle()
-
-      return this
-    }
-
-  }
-
-
- /* CAROUSEL PLUGIN DEFINITION
-  * ========================== */
-
-  $.fn.carousel = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('carousel')
-        , options = $.extend({}, $.fn.carousel.defaults, 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 if (options.interval) data.cycle()
-    })
-  }
-
-  $.fn.carousel.defaults = {
-    interval: 5000
-  , pause: 'hover'
-  }
-
-  $.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);
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-collapse.js b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-collapse.js
deleted file mode 100644
index fbc915b9f96..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-collapse.js
+++ /dev/null
@@ -1,157 +0,0 @@
-/* =============================================================
- * bootstrap-collapse.js v2.0.4
- * 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"; // jshint ;_;
-
-
- /* COLLAPSE PUBLIC CLASS DEFINITION
-  * ================================ */
-
-  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
-        , scroll
-        , actives
-        , hasData
-
-      if (this.transitioning) return
-
-      dimension = this.dimension()
-      scroll = $.camelCase(['scroll', dimension].join('-'))
-      actives = this.$parent && this.$parent.find('> .accordion-group > .in')
-
-      if (actives && actives.length) {
-        hasData = actives.data('collapse')
-        if (hasData && hasData.transitioning) return
-        actives.collapse('hide')
-        hasData || actives.data('collapse', null)
-      }
-
-      this.$element[dimension](0)
-      this.transition('addClass', $.Event('show'), 'shown')
-      this.$element[dimension](this.$element[0][scroll])
-    }
-
-  , hide: function () {
-      var dimension
-      if (this.transitioning) return
-      dimension = this.dimension()
-      this.reset(this.$element[dimension]())
-      this.transition('removeClass', $.Event('hide'), 'hidden')
-      this.$element[dimension](0)
-    }
-
-  , reset: function (size) {
-      var dimension = this.dimension()
-
-      this.$element
-        .removeClass('collapse')
-        [dimension](size || 'auto')
-        [0].offsetWidth
-
-      this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
-
-      return this
-    }
-
-  , transition: function (method, startEvent, completeEvent) {
-      var that = this
-        , complete = function () {
-            if (startEvent.type == 'show') that.reset()
-            that.transitioning = 0
-            that.$element.trigger(completeEvent)
-          }
-
-      this.$element.trigger(startEvent)
-
-      if (startEvent.isDefaultPrevented()) return
-
-      this.transitioning = 1
-
-      this.$element[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);
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-dropdown.js b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-dropdown.js
deleted file mode 100644
index 454a9684b52..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-dropdown.js
+++ /dev/null
@@ -1,100 +0,0 @@
-/* ============================================================
- * bootstrap-dropdown.js v2.0.4
- * 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"; // jshint ;_;
-
-
- /* 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)
-        , $parent
-        , selector
-        , isActive
-
-      if ($this.is('.disabled, :disabled')) return
-
-      selector = $this.attr('data-target')
-
-      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()
-
-      if (!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', '.dropdown form', function (e) { e.stopPropagation() })
-      .on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
-  })
-
-}(window.jQuery);
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-modal.js b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-modal.js
deleted file mode 100644
index 38fd0c8468c..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-modal.js
+++ /dev/null
@@ -1,218 +0,0 @@
-/* =========================================================
- * bootstrap-modal.js v2.0.4
- * 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"; // jshint ;_;
-
-
- /* 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
-          , e = $.Event('show')
-
-        this.$element.trigger(e)
-
-        if (this.isShown || e.isDefaultPrevented()) return
-
-        $('body').addClass('modal-open')
-
-        this.isShown = true
-
-        escape.call(this)
-        backdrop.call(this, function () {
-          var transition = $.support.transition && that.$element.hasClass('fade')
-
-          if (!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()
-
-        var that = this
-
-        e = $.Event('hide')
-
-        this.$element.trigger(e)
-
-        if (!this.isShown || e.isDefaultPrevented()) return
-
-        this.isShown = false
-
-        $('body').removeClass('modal-open')
-
-        escape.call(this)
-
-        this.$element.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, $this.data(), 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);
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-popover.js b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-popover.js
deleted file mode 100644
index 39fbe358eb3..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-popover.js
+++ /dev/null
@@ -1,98 +0,0 @@
-/* ===========================================================
- * bootstrap-popover.js v2.0.4
- * 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"; // jshint ;_;
-
-
- /* POPOVER PUBLIC CLASS DEFINITION
-  * =============================== */
-
-  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')[this.isHTML(title) ? 'html' : 'text'](title)
-      $tip.find('.popover-content > *')[this.isHTML(content) ? 'html' : 'text'](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)
-
-      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);
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-scrollspy.js b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-scrollspy.js
deleted file mode 100644
index dce37181267..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-scrollspy.js
+++ /dev/null
@@ -1,151 +0,0 @@
-/* =============================================================
- * bootstrap-scrollspy.js v2.0.4
- * 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"; // jshint ;_;
-
-
-  /* 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')
-    this.refresh()
-    this.process()
-  }
-
-  ScrollSpy.prototype = {
-
-      constructor: ScrollSpy
-
-    , refresh: function () {
-        var self = this
-          , $targets
-
-        this.offsets = $([])
-        this.targets = $([])
-
-        $targets = this.$body
-          .find(this.selector)
-          .map(function () {
-            var $el = $(this)
-              , href = $el.data('target') || $el.attr('href')
-              , $href = /^#\w/.test(href) && $(href)
-            return ( $href
-              && href.length
-              && [[ $href.position().top, href ]] ) || null
-          })
-          .sort(function (a, b) { return a[0] - b[0] })
-          .each(function () {
-            self.offsets.push(this[0])
-            self.targets.push(this[1])
-          })
-      }
-
-    , process: function () {
-        var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
-          , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
-          , maxScroll = scrollHeight - this.$scrollElement.height()
-          , offsets = this.offsets
-          , targets = this.targets
-          , activeTarget = this.activeTarget
-          , i
-
-        if (scrollTop >= maxScroll) {
-          return activeTarget != (i = targets.last()[0])
-            && this.activate ( 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
-          , selector
-
-        this.activeTarget = target
-
-        $(this.selector)
-          .parent('.active')
-          .removeClass('active')
-
-        selector = this.selector
-          + '[data-target="' + target + '"],'
-          + this.selector + '[href="' + target + '"]'
-
-        active = $(selector)
-          .parent('li')
-          .addClass('active')
-
-        if (active.parent('.dropdown-menu'))  {
-          active = active.closest('li.dropdown').addClass('active')
-        }
-
-        active.trigger('activate')
-      }
-
-  }
-
-
- /* 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);
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-tab.js b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-tab.js
deleted file mode 100644
index d87f35099ae..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-tab.js
+++ /dev/null
@@ -1,135 +0,0 @@
-/* ========================================================
- * bootstrap-tab.js v2.0.4
- * 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"; // jshint ;_;
-
-
- /* 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
-        , e
-
-      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]
-
-      e = $.Event('show', {
-        relatedTarget: previous
-      })
-
-      $this.trigger(e)
-
-      if (e.isDefaultPrevented()) return
-
-      $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);
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-tooltip.js b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-tooltip.js
deleted file mode 100644
index b476f1c4e6d..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-tooltip.js
+++ /dev/null
@@ -1,275 +0,0 @@
-/* ===========================================================
- * bootstrap-tooltip.js v2.0.4
- * 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"; // jshint ;_;
-
-
- /* 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) return self.show()
-
-      clearTimeout(this.timeout)
-      self.hoverState = 'in'
-      this.timeout = 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 (this.timeout) clearTimeout(this.timeout)
-      if (!self.options.delay || !self.options.delay.hide) return self.hide()
-
-      self.hoverState = 'out'
-      this.timeout = 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')
-      }
-    }
-
-  , isHTML: function(text) {
-      // html string detection logic adapted from jQuery
-      return typeof text != 'string'
-        || ( text.charAt(0) === "<"
-          && text.charAt( text.length - 1 ) === ">"
-          && text.length >= 3
-        ) || /^(?:[^<]*<[\w\W]+>[^>]*$)/.exec(text)
-    }
-
-  , setContent: function () {
-      var $tip = this.tip()
-        , title = this.getTitle()
-
-      $tip.find('.tooltip-inner')[this.isHTML(title) ? 'html' : 'text'](title)
-      $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)
-
-      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
-  , placement: 'top'
-  , selector: false
-  , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
-  , trigger: 'hover'
-  , title: ''
-  , delay: 0
-  }
-
-}(window.jQuery);
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-transition.js b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-transition.js
deleted file mode 100644
index 534182622d0..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-transition.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/* ===================================================
- * bootstrap-transition.js v2.0.4
- * 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"; // jshint ;_;
-
-
-    /* CSS TRANSITION SUPPORT (http://www.modernizr.com/)
-     * ======================================================= */
-
-    $.support.transition = (function () {
-
-      var transitionEnd = (function () {
-
-        var el = document.createElement('bootstrap')
-          , transEndEventNames = {
-               'WebkitTransition' : 'webkitTransitionEnd'
-            ,  'MozTransition'    : 'transitionend'
-            ,  'OTransition'      : 'oTransitionEnd'
-            ,  'msTransition'     : 'MSTransitionEnd'
-            ,  'transition'       : 'transitionend'
-            }
-          , name
-
-        for (name in transEndEventNames){
-          if (el.style[name] !== undefined) {
-            return transEndEventNames[name]
-          }
-        }
-
-      }())
-
-      return transitionEnd && {
-        end: transitionEnd
-      }
-
-    })()
-
-  })
-
-}(window.jQuery);
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-typeahead.js b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-typeahead.js
deleted file mode 100644
index ad44b90852d..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap-typeahead.js
+++ /dev/null
@@ -1,285 +0,0 @@
-/* =============================================================
- * bootstrap-typeahead.js v2.0.4
- * 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"; // jshint ;_;
-
-
- /* TYPEAHEAD PUBLIC CLASS DEFINITION
-  * ================================= */
-
-  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.updater = this.options.updater || this.updater
-    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(this.updater(val))
-        .change()
-      return this.hide()
-    }
-
-  , updater: function (item) {
-      return item
-    }
-
-  , 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) {
-        return that.matcher(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) {
-      var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
-      return item.replace(new RegExp('(' + 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) {
-      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
-          if (!this.shown) return
-          this.hide()
-          break
-
-        default:
-          this.lookup()
-      }
-
-      e.stopPropagation()
-      e.preventDefault()
-  }
-
-  , keypress: function (e) {
-      if (!this.shown) return
-
-      switch(e.keyCode) {
-        case 9: // tab
-        case 13: // enter
-        case 27: // escape
-          e.preventDefault()
-          break
-
-        case 38: // up arrow
-          if (e.type != 'keydown') break
-          e.preventDefault()
-          this.prev()
-          break
-
-        case 40: // down arrow
-          if (e.type != 'keydown') break
-          e.preventDefault()
-          this.next()
-          break
-      }
-
-      e.stopPropagation()
-    }
-
-  , blur: function (e) {
-      var that = this
-      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);
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap.js b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap.js
deleted file mode 100644
index 5d6e65b8249..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap.js
+++ /dev/null
@@ -1,1825 +0,0 @@
-/* ===================================================
- * bootstrap-transition.js v2.0.4
- * 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"; // jshint ;_;
-
-
-    /* CSS TRANSITION SUPPORT (http://www.modernizr.com/)
-     * ======================================================= */
-
-    $.support.transition = (function () {
-
-      var transitionEnd = (function () {
-
-        var el = document.createElement('bootstrap')
-          , transEndEventNames = {
-               'WebkitTransition' : 'webkitTransitionEnd'
-            ,  'MozTransition'    : 'transitionend'
-            ,  'OTransition'      : 'oTransitionEnd'
-            ,  'msTransition'     : 'MSTransitionEnd'
-            ,  'transition'       : 'transitionend'
-            }
-          , name
-
-        for (name in transEndEventNames){
-          if (el.style[name] !== undefined) {
-            return transEndEventNames[name]
-          }
-        }
-
-      }())
-
-      return transitionEnd && {
-        end: transitionEnd
-      }
-
-    })()
-
-  })
-
-}(window.jQuery);/* ==========================================================
- * bootstrap-alert.js v2.0.4
- * 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"; // jshint ;_;
-
-
- /* ALERT CLASS DEFINITION
-  * ====================== */
-
-  var dismiss = '[data-dismiss="alert"]'
-    , Alert = function (el) {
-        $(el).on('click', dismiss, this.close)
-      }
-
-  Alert.prototype.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)
-
-    e && e.preventDefault()
-
-    $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
-
-    $parent.trigger(e = $.Event('close'))
-
-    if (e.isDefaultPrevented()) return
-
-    $parent.removeClass('in')
-
-    function removeElement() {
-      $parent
-        .trigger('closed')
-        .remove()
-    }
-
-    $.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.4
- * 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"; // jshint ;_;
-
-
- /* BUTTON PUBLIC CLASS DEFINITION
-  * ============================== */
-
-  var Button = function (element, options) {
-    this.$element = $(element)
-    this.options = $.extend({}, $.fn.button.defaults, options)
-  }
-
-  Button.prototype.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)
-  }
-
-  Button.prototype.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 ) {
-      var $btn = $(e.target)
-      if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
-      $btn.button('toggle')
-    })
-  })
-
-}(window.jQuery);/* ==========================================================
- * bootstrap-carousel.js v2.0.4
- * 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"; // jshint ;_;
-
-
- /* CAROUSEL CLASS DEFINITION
-  * ========================= */
-
-  var Carousel = function (element, options) {
-    this.$element = $(element)
-    this.options = options
-    this.options.slide && this.slide(this.options.slide)
-    this.options.pause == 'hover' && this.$element
-      .on('mouseenter', $.proxy(this.pause, this))
-      .on('mouseleave', $.proxy(this.cycle, this))
-  }
-
-  Carousel.prototype = {
-
-    cycle: function (e) {
-      if (!e) this.paused = false
-      this.options.interval
-        && !this.paused
-        && (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 (e) {
-      if (!e) this.paused = true
-      clearInterval(this.interval)
-      this.interval = null
-      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
-        , e = $.Event('slide')
-
-      this.sliding = true
-
-      isCycling && this.pause()
-
-      $next = $next.length ? $next : this.$element.find('.item')[fallback]()
-
-      if ($next.hasClass('active')) return
-
-      if ($.support.transition && this.$element.hasClass('slide')) {
-        this.$element.trigger(e)
-        if (e.isDefaultPrevented()) return
-        $next.addClass(type)
-        $next[0].offsetWidth // force reflow
-        $active.addClass(direction)
-        $next.addClass(direction)
-        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)
-        })
-      } else {
-        this.$element.trigger(e)
-        if (e.isDefaultPrevented()) return
-        $active.removeClass('active')
-        $next.addClass('active')
-        this.sliding = false
-        this.$element.trigger('slid')
-      }
-
-      isCycling && this.cycle()
-
-      return this
-    }
-
-  }
-
-
- /* CAROUSEL PLUGIN DEFINITION
-  * ========================== */
-
-  $.fn.carousel = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('carousel')
-        , options = $.extend({}, $.fn.carousel.defaults, 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 if (options.interval) data.cycle()
-    })
-  }
-
-  $.fn.carousel.defaults = {
-    interval: 5000
-  , pause: 'hover'
-  }
-
-  $.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-collapse.js v2.0.4
- * 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"; // jshint ;_;
-
-
- /* COLLAPSE PUBLIC CLASS DEFINITION
-  * ================================ */
-
-  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
-        , scroll
-        , actives
-        , hasData
-
-      if (this.transitioning) return
-
-      dimension = this.dimension()
-      scroll = $.camelCase(['scroll', dimension].join('-'))
-      actives = this.$parent && this.$parent.find('> .accordion-group > .in')
-
-      if (actives && actives.length) {
-        hasData = actives.data('collapse')
-        if (hasData && hasData.transitioning) return
-        actives.collapse('hide')
-        hasData || actives.data('collapse', null)
-      }
-
-      this.$element[dimension](0)
-      this.transition('addClass', $.Event('show'), 'shown')
-      this.$element[dimension](this.$element[0][scroll])
-    }
-
-  , hide: function () {
-      var dimension
-      if (this.transitioning) return
-      dimension = this.dimension()
-      this.reset(this.$element[dimension]())
-      this.transition('removeClass', $.Event('hide'), 'hidden')
-      this.$element[dimension](0)
-    }
-
-  , reset: function (size) {
-      var dimension = this.dimension()
-
-      this.$element
-        .removeClass('collapse')
-        [dimension](size || 'auto')
-        [0].offsetWidth
-
-      this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
-
-      return this
-    }
-
-  , transition: function (method, startEvent, completeEvent) {
-      var that = this
-        , complete = function () {
-            if (startEvent.type == 'show') that.reset()
-            that.transitioning = 0
-            that.$element.trigger(completeEvent)
-          }
-
-      this.$element.trigger(startEvent)
-
-      if (startEvent.isDefaultPrevented()) return
-
-      this.transitioning = 1
-
-      this.$element[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-dropdown.js v2.0.4
- * 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"; // jshint ;_;
-
-
- /* 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)
-        , $parent
-        , selector
-        , isActive
-
-      if ($this.is('.disabled, :disabled')) return
-
-      selector = $this.attr('data-target')
-
-      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()
-
-      if (!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', '.dropdown form', function (e) { e.stopPropagation() })
-      .on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
-  })
-
-}(window.jQuery);/* =========================================================
- * bootstrap-modal.js v2.0.4
- * 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"; // jshint ;_;
-
-
- /* 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
-          , e = $.Event('show')
-
-        this.$element.trigger(e)
-
-        if (this.isShown || e.isDefaultPrevented()) return
-
-        $('body').addClass('modal-open')
-
-        this.isShown = true
-
-        escape.call(this)
-        backdrop.call(this, function () {
-          var transition = $.support.transition && that.$element.hasClass('fade')
-
-          if (!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()
-
-        var that = this
-
-        e = $.Event('hide')
-
-        this.$element.trigger(e)
-
-        if (!this.isShown || e.isDefaultPrevented()) return
-
-        this.isShown = false
-
-        $('body').removeClass('modal-open')
-
-        escape.call(this)
-
-        this.$element.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, $this.data(), 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-tooltip.js v2.0.4
- * 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"; // jshint ;_;
-
-
- /* 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) return self.show()
-
-      clearTimeout(this.timeout)
-      self.hoverState = 'in'
-      this.timeout = 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 (this.timeout) clearTimeout(this.timeout)
-      if (!self.options.delay || !self.options.delay.hide) return self.hide()
-
-      self.hoverState = 'out'
-      this.timeout = 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')
-      }
-    }
-
-  , isHTML: function(text) {
-      // html string detection logic adapted from jQuery
-      return typeof text != 'string'
-        || ( text.charAt(0) === "<"
-          && text.charAt( text.length - 1 ) === ">"
-          && text.length >= 3
-        ) || /^(?:[^<]*<[\w\W]+>[^>]*$)/.exec(text)
-    }
-
-  , setContent: function () {
-      var $tip = this.tip()
-        , title = this.getTitle()
-
-      $tip.find('.tooltip-inner')[this.isHTML(title) ? 'html' : 'text'](title)
-      $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)
-
-      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
-  , placement: 'top'
-  , selector: false
-  , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
-  , trigger: 'hover'
-  , title: ''
-  , delay: 0
-  }
-
-}(window.jQuery);
-/* ===========================================================
- * bootstrap-popover.js v2.0.4
- * 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"; // jshint ;_;
-
-
- /* POPOVER PUBLIC CLASS DEFINITION
-  * =============================== */
-
-  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')[this.isHTML(title) ? 'html' : 'text'](title)
-      $tip.find('.popover-content > *')[this.isHTML(content) ? 'html' : 'text'](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)
-
-      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-scrollspy.js v2.0.4
- * 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"; // jshint ;_;
-
-
-  /* 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')
-    this.refresh()
-    this.process()
-  }
-
-  ScrollSpy.prototype = {
-
-      constructor: ScrollSpy
-
-    , refresh: function () {
-        var self = this
-          , $targets
-
-        this.offsets = $([])
-        this.targets = $([])
-
-        $targets = this.$body
-          .find(this.selector)
-          .map(function () {
-            var $el = $(this)
-              , href = $el.data('target') || $el.attr('href')
-              , $href = /^#\w/.test(href) && $(href)
-            return ( $href
-              && href.length
-              && [[ $href.position().top, href ]] ) || null
-          })
-          .sort(function (a, b) { return a[0] - b[0] })
-          .each(function () {
-            self.offsets.push(this[0])
-            self.targets.push(this[1])
-          })
-      }
-
-    , process: function () {
-        var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
-          , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
-          , maxScroll = scrollHeight - this.$scrollElement.height()
-          , offsets = this.offsets
-          , targets = this.targets
-          , activeTarget = this.activeTarget
-          , i
-
-        if (scrollTop >= maxScroll) {
-          return activeTarget != (i = targets.last()[0])
-            && this.activate ( 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
-          , selector
-
-        this.activeTarget = target
-
-        $(this.selector)
-          .parent('.active')
-          .removeClass('active')
-
-        selector = this.selector
-          + '[data-target="' + target + '"],'
-          + this.selector + '[href="' + target + '"]'
-
-        active = $(selector)
-          .parent('li')
-          .addClass('active')
-
-        if (active.parent('.dropdown-menu'))  {
-          active = active.closest('li.dropdown').addClass('active')
-        }
-
-        active.trigger('activate')
-      }
-
-  }
-
-
- /* 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.4
- * 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"; // jshint ;_;
-
-
- /* 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
-        , e
-
-      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]
-
-      e = $.Event('show', {
-        relatedTarget: previous
-      })
-
-      $this.trigger(e)
-
-      if (e.isDefaultPrevented()) return
-
-      $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-typeahead.js v2.0.4
- * 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"; // jshint ;_;
-
-
- /* TYPEAHEAD PUBLIC CLASS DEFINITION
-  * ================================= */
-
-  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.updater = this.options.updater || this.updater
-    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(this.updater(val))
-        .change()
-      return this.hide()
-    }
-
-  , updater: function (item) {
-      return item
-    }
-
-  , 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) {
-        return that.matcher(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) {
-      var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
-      return item.replace(new RegExp('(' + 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) {
-      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
-          if (!this.shown) return
-          this.hide()
-          break
-
-        default:
-          this.lookup()
-      }
-
-      e.stopPropagation()
-      e.preventDefault()
-  }
-
-  , keypress: function (e) {
-      if (!this.shown) return
-
-      switch(e.keyCode) {
-        case 9: // tab
-        case 13: // enter
-        case 27: // escape
-          e.preventDefault()
-          break
-
-        case 38: // up arrow
-          if (e.type != 'keydown') break
-          e.preventDefault()
-          this.prev()
-          break
-
-        case 40: // down arrow
-          if (e.type != 'keydown') break
-          e.preventDefault()
-          this.next()
-          break
-      }
-
-      e.stopPropagation()
-    }
-
-  , blur: function (e) {
-      var that = this
-      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);
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap.min.js b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap.min.js
deleted file mode 100644
index d5ccdee2fe6..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/bootstrap.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
-* Bootstrap.js by @fat & @mdo
-* Copyright 2012 Twitter, Inc.
-* http://www.apache.org/licenses/LICENSE-2.0.txt
-*/
-!function(a){a(function(){"use strict",a.support.transition=function(){var a=function(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",msTransition:"MSTransitionEnd",transition:"transitionend"},c;for(c in b)if(a.style[c]!==undefined)return b[c]}();return a&&{end:a}}()})}(window.jQuery),!function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function f(){e.trigger("closed").remove()}var c=a(this),d=c.attr("data-target"),e;d||(d=c.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),e=a(d),b&&b.preventDefault(),e.length||(e=c.hasClass("alert")?c:c.parent()),e.trigger(b=a.Event("close"));if(b.isDefaultPrevented())return;e.removeClass("in"),a.support.transition&&e.hasClass("fade")?e.on(a.support.transition.end,f):f()},a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("alert");e||d.data("alert",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.alert.Constructor=c,a(function(){a("body").on("click.alert.data-api",b,c.prototype.close)})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.button.defaults,c)};b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.data(),e=c.is("input")?"val":"html";a+="Text",d.resetText||c.data("resetText",c[e]()),c[e](d[a]||this.options[a]),setTimeout(function(){a=="loadingText"?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.parent('[data-toggle="buttons-radio"]');a&&a.find(".active").removeClass("active"),this.$element.toggleClass("active")},a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("button"),f=typeof c=="object"&&c;e||d.data("button",e=new b(this,f)),c=="toggle"?e.toggle():c&&e.setState(c)})},a.fn.button.defaults={loadingText:"loading..."},a.fn.button.Constructor=b,a(function(){a("body").on("click.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle")})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=c,this.options.slide&&this.slide(this.options.slide),this.options.pause=="hover"&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.prototype={cycle:function(b){return b||(this.paused=!1),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},to:function(b){var c=this.$element.find(".active"),d=c.parent().children(),e=d.index(c),f=this;if(b>d.length-1||b<0)return;return this.sliding?this.$element.one("slid",function(){f.to(b)}):e==b?this.pause().cycle():this.slide(b>e?"next":"prev",a(d[b]))},pause:function(a){return a||(this.paused=!0),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(b,c){var d=this.$element.find(".active"),e=c||d[b](),f=this.interval,g=b=="next"?"left":"right",h=b=="next"?"first":"last",i=this,j=a.Event("slide");this.sliding=!0,f&&this.pause(),e=e.length?e:this.$element.find(".item")[h]();if(e.hasClass("active"))return;if(a.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(j);if(j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),this.$element.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid")},0)})}else{this.$element.trigger(j);if(j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return f&&this.cycle(),this}},a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("carousel"),f=a.extend({},a.fn.carousel.defaults,typeof c=="object"&&c);e||d.data("carousel",e=new b(this,f)),typeof c=="number"?e.to(c):typeof c=="string"||(c=f.slide)?e[c]():f.interval&&e.cycle()})},a.fn.carousel.defaults={interval:5e3,pause:"hover"},a.fn.carousel.Constructor=b,a(function(){a("body").on("click.carousel.data-api","[data-slide]",function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=!e.data("modal")&&a.extend({},e.data(),c.data());e.carousel(f),b.preventDefault()})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.collapse.defaults,c),this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.prototype={constructor:b,dimension:function(){var a=this.$element.hasClass("width");return a?"width":"height"},show:function(){var b,c,d,e;if(this.transitioning)return;b=this.dimension(),c=a.camelCase(["scroll",b].join("-")),d=this.$parent&&this.$parent.find("> .accordion-group > .in");if(d&&d.length){e=d.data("collapse");if(e&&e.transitioning)return;d.collapse("hide"),e||d.data("collapse",null)}this.$element[b](0),this.transition("addClass",a.Event("show"),"shown"),this.$element[b](this.$element[0][c])},hide:function(){var b;if(this.transitioning)return;b=this.dimension(),this.reset(this.$element[b]()),this.transition("removeClass",a.Event("hide"),"hidden"),this.$element[b](0)},reset:function(a){var b=this.dimension();return this.$element.removeClass("collapse")[b](a||"auto")[0].offsetWidth,this.$element[a!==null?"addClass":"removeClass"]("collapse"),this},transition:function(b,c,d){var e=this,f=function(){c.type=="show"&&e.reset(),e.transitioning=0,e.$element.trigger(d)};this.$element.trigger(c);if(c.isDefaultPrevented())return;this.transitioning=1,this.$element[b]("in"),a.support.transition&&this.$element.hasClass("collapse")?this.$element.one(a.support.transition.end,f):f()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}},a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("collapse"),f=typeof c=="object"&&c;e||d.data("collapse",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.collapse.defaults={toggle:!0},a.fn.collapse.Constructor=b,a(function(){a("body").on("click.collapse.data-api","[data-toggle=collapse]",function(b){var c=a(this),d,e=c.attr("data-target")||b.preventDefault()||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),f=a(e).data("collapse")?"toggle":c.data();a(e).collapse(f)})})}(window.jQuery),!function(a){function d(){a(b).parent().removeClass("open")}"use strict";var b='[data-toggle="dropdown"]',c=function(b){var c=a(b).on("click.dropdown.data-api",this.toggle);a("html").on("click.dropdown.data-api",function(){c.parent().removeClass("open")})};c.prototype={constructor:c,toggle:function(b){var c=a(this),e,f,g;if(c.is(".disabled, :disabled"))return;return f=c.attr("data-target"),f||(f=c.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,"")),e=a(f),e.length||(e=c.parent()),g=e.hasClass("open"),d(),g||e.toggleClass("open"),!1}},a.fn.dropdown=function(b){return this.each(function(){var d=a(this),e=d.data("dropdown");e||d.data("dropdown",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.dropdown.Constructor=c,a(function(){a("html").on("click.dropdown.data-api",d),a("body").on("click.dropdown",".dropdown form",function(a){a.stopPropagation()}).on("click.dropdown.data-api",b,c.prototype.toggle)})}(window.jQuery),!function(a){function c(){var b=this,c=setTimeout(function(){b.$element.off(a.support.transition.end),d.call(b)},500);this.$element.one(a.support.transition.end,function(){clearTimeout(c),d.call(b)})}function d(a){this.$element.hide().trigger("hidden"),e.call(this)}function e(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(document.body),this.options.backdrop!="static"&&this.$backdrop.click(a.proxy(this.hide,this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),e?this.$backdrop.one(a.support.transition.end,b):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,a.proxy(f,this)):f.call(this)):b&&b()}function f(){this.$backdrop.remove(),this.$backdrop=null}function g(){var b=this;this.isShown&&this.options.keyboard?a(document).on("keyup.dismiss.modal",function(a){a.which==27&&b.hide()}):this.isShown||a(document).off("keyup.dismiss.modal")}"use strict";var b=function(b,c){this.options=c,this.$element=a(b).delegate('[data-dismiss="modal"]',"click.dismiss.modal",a.proxy(this.hide,this))};b.prototype={constructor:b,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var b=this,c=a.Event("show");this.$element.trigger(c);if(this.isShown||c.isDefaultPrevented())return;a("body").addClass("modal-open"),this.isShown=!0,g.call(this),e.call(this,function(){var c=a.support.transition&&b.$element.hasClass("fade");b.$element.parent().length||b.$element.appendTo(document.body),b.$element.show(),c&&b.$element[0].offsetWidth,b.$element.addClass("in"),c?b.$element.one(a.support.transition.end,function(){b.$element.trigger("shown")}):b.$element.trigger("shown")})},hide:function(b){b&&b.preventDefault();var e=this;b=a.Event("hide"),this.$element.trigger(b);if(!this.isShown||b.isDefaultPrevented())return;this.isShown=!1,a("body").removeClass("modal-open"),g.call(this),this.$element.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?c.call(this):d.call(this)}},a.fn.modal=function(c){return this.each(function(){var d=a(this),e=d.data("modal"),f=a.extend({},a.fn.modal.defaults,d.data(),typeof c=="object"&&c);e||d.data("modal",e=new b(this,f)),typeof c=="string"?e[c]():f.show&&e.show()})},a.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},a.fn.modal.Constructor=b,a(function(){a("body").on("click.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("modal")?"toggle":a.extend({},e.data(),c.data());b.preventDefault(),e.modal(f)})})}(window.jQuery),!function(a){"use strict";var b=function(a,b){this.init("tooltip",a,b)};b.prototype={constructor:b,init:function(b,c,d){var e,f;this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.enabled=!0,this.options.trigger!="manual"&&(e=this.options.trigger=="hover"?"mouseenter":"focus",f=this.options.trigger=="hover"?"mouseleave":"blur",this.$element.on(e,this.options.selector,a.proxy(this.enter,this)),this.$element.on(f,this.options.selector,a.proxy(this.leave,this))),this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(b){return b=a.extend({},a.fn[this.type].defaults,b,this.$element.data()),b.delay&&typeof b.delay=="number"&&(b.delay={show:b.delay,hide:b.delay}),b},enter:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);if(!c.options.delay||!c.options.delay.show)return c.show();clearTimeout(this.timeout),c.hoverState="in",this.timeout=setTimeout(function(){c.hoverState=="in"&&c.show()},c.options.delay.show)},leave:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!c.options.delay||!c.options.delay.hide)return c.hide();c.hoverState="out",this.timeout=setTimeout(function(){c.hoverState=="out"&&c.hide()},c.options.delay.hide)},show:function(){var a,b,c,d,e,f,g;if(this.hasContent()&&this.enabled){a=this.tip(),this.setContent(),this.options.animation&&a.addClass("fade"),f=typeof this.options.placement=="function"?this.options.placement.call(this,a[0],this.$element[0]):this.options.placement,b=/in/.test(f),a.remove().css({top:0,left:0,display:"block"}).appendTo(b?this.$element:document.body),c=this.getPosition(b),d=a[0].offsetWidth,e=a[0].offsetHeight;switch(b?f.split(" ")[1]:f){case"bottom":g={top:c.top+c.height,left:c.left+c.width/2-d/2};break;case"top":g={top:c.top-e,left:c.left+c.width/2-d/2};break;case"left":g={top:c.top+c.height/2-e/2,left:c.left-d};break;case"right":g={top:c.top+c.height/2-e/2,left:c.left+c.width}}a.css(g).addClass(f).addClass("in")}},isHTML:function(a){return typeof a!="string"||a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3||/^(?:[^<]*<[\w\W]+>[^>]*$)/.exec(a)},setContent:function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.isHTML(b)?"html":"text"](b),a.removeClass("fade in top bottom left right")},hide:function(){function d(){var b=setTimeout(function(){c.off(a.support.transition.end).remove()},500);c.one(a.support.transition.end,function(){clearTimeout(b),c.remove()})}var b=this,c=this.tip();c.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d():c.remove()},fixTitle:function(){var a=this.$element;(a.attr("title")||typeof a.attr("data-original-title")!="string")&&a.attr("data-original-title",a.attr("title")||"").removeAttr("title")},hasContent:function(){return this.getTitle()},getPosition:function(b){return a.extend({},b?{top:0,left:0}:this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||(typeof c.title=="function"?c.title.call(b[0]):c.title),a},tip:function(){return this.$tip=this.$tip||a(this.options.template)},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(){this[this.tip().hasClass("in")?"hide":"show"]()}},a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("tooltip"),f=typeof c=="object"&&c;e||d.data("tooltip",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover",title:"",delay:0}}(window.jQuery),!function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype,{constructor:b,setContent:function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.isHTML(b)?"html":"text"](b),a.find(".popover-content > *")[this.isHTML(c)?"html":"text"](c),a.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-content")||(typeof c.content=="function"?c.content.call(b[0]):c.content),a},tip:function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip}}),a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("popover"),f=typeof c=="object"&&c;e||d.data("popover",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.defaults=a.extend({},a.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),!function(a){function b(b,c){var d=a.proxy(this.process,this),e=a(b).is("body")?a(window):a(b),f;this.options=a.extend({},a.fn.scrollspy.defaults,c),this.$scrollElement=e.on("scroll.scroll.data-api",d),this.selector=(this.options.target||(f=a(b).attr("href"))&&f.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=a("body"),this.refresh(),this.process()}"use strict",b.prototype={constructor:b,refresh:function(){var b=this,c;this.offsets=a([]),this.targets=a([]),c=this.$body.find(this.selector).map(function(){var b=a(this),c=b.data("target")||b.attr("href"),d=/^#\w/.test(c)&&a(c);return d&&c.length&&[[d.position().top,c]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},process:function(){var a=this.$scrollElement.scrollTop()+this.options.offset,b=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,c=b-this.$scrollElement.height(),d=this.offsets,e=this.targets,f=this.activeTarget,g;if(a>=c)return f!=(g=e.last()[0])&&this.activate(g);for(g=d.length;g--;)f!=e[g]&&a>=d[g]&&(!d[g+1]||a<=d[g+1])&&this.activate(e[g])},activate:function(b){var c,d;this.activeTarget=b,a(this.selector).parent(".active").removeClass("active"),d=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',c=a(d).parent("li").addClass("active"),c.parent(".dropdown-menu")&&(c=c.closest("li.dropdown").addClass("active")),c.trigger("activate")}},a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("scrollspy"),f=typeof c=="object"&&c;e||d.data("scrollspy",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.defaults={offset:10},a(function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(window.jQuery),!function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype={constructor:b,show:function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.attr("data-target"),e,f,g;d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,""));if(b.parent("li").hasClass("active"))return;e=c.find(".active a").last()[0],g=a.Event("show",{relatedTarget:e}),b.trigger(g);if(g.isDefaultPrevented())return;f=a(d),this.activate(b.parent("li"),c),this.activate(f,f.parent(),function(){b.trigger({type:"shown",relatedTarget:e})})},activate:function(b,c,d){function g(){e.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),f?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var e=c.find("> .active"),f=d&&a.support.transition&&e.hasClass("fade");f?e.one(a.support.transition.end,g):g(),e.removeClass("in")}},a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("tab");e||d.data("tab",e=new b(this)),typeof c=="string"&&e[c]()})},a.fn.tab.Constructor=b,a(function(){a("body").on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.typeahead.defaults,c),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.$menu=a(this.options.menu).appendTo("body"),this.source=this.options.source,this.shown=!1,this.listen()};b.prototype={constructor:b,select:function(){var a=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(a)).change(),this.hide()},updater:function(a){return a},show:function(){var b=a.extend({},this.$element.offset(),{height:this.$element[0].offsetHeight});return this.$menu.css({top:b.top+b.height,left:b.left}),this.$menu.show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(b){var c=this,d,e;return this.query=this.$element.val(),this.query?(d=a.grep(this.source,function(a){return c.matcher(a)}),d=this.sorter(d),d.length?this.render(d.slice(0,this.options.items)).show():this.shown?this.hide():this):this.shown?this.hide():this},matcher:function(a){return~a.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(a){var b=[],c=[],d=[],e;while(e=a.shift())e.toLowerCase().indexOf(this.query.toLowerCase())?~e.indexOf(this.query)?c.push(e):d.push(e):b.push(e);return b.concat(c,d)},highlighter:function(a){var b=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return a.replace(new RegExp("("+b+")","ig"),function(a,b){return"<strong>"+b+"</strong>"})},render:function(b){var c=this;return b=a(b).map(function(b,d){return b=a(c.options.item).attr("data-value",d),b.find("a").html(c.highlighter(d)),b[0]}),b.first().addClass("active"),this.$menu.html(b),this},next:function(b){var c=this.$menu.find(".active").removeClass("active"),d=c.next();d.length||(d=a(this.$menu.find("li")[0])),d.addClass("active")},prev:function(a){var b=this.$menu.find(".active").removeClass("active"),c=b.prev();c.length||(c=this.$menu.find("li").last()),c.addClass("active")},listen:function(){this.$element.on("blur",a.proxy(this.blur,this)).on("keypress",a.proxy(this.keypress,this)).on("keyup",a.proxy(this.keyup,this)),(a.browser.webkit||a.browser.msie)&&this.$element.on("keydown",a.proxy(this.keypress,this)),this.$menu.on("click",a.proxy(this.click,this)).on("mouseenter","li",a.proxy(this.mouseenter,this))},keyup:function(a){switch(a.keyCode){case 40:case 38:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}a.stopPropagation(),a.preventDefault()},keypress:function(a){if(!this.shown)return;switch(a.keyCode){case 9:case 13:case 27:a.preventDefault();break;case 38:if(a.type!="keydown")break;a.preventDefault(),this.prev();break;case 40:if(a.type!="keydown")break;a.preventDefault(),this.next()}a.stopPropagation()},blur:function(a){var b=this;setTimeout(function(){b.hide()},150)},click:function(a){a.stopPropagation(),a.preventDefault(),this.select()},mouseenter:function(b){this.$menu.find(".active").removeClass("active"),a(b.currentTarget).addClass("active")}},a.fn.typeahead=function(c){return this.each(function(){var d=a(this),e=d.data("typeahead"),f=typeof c=="object"&&c;e||d.data("typeahead",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>'},a.fn.typeahead.Constructor=b,a(function(){a("body").on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(b){var c=a(this);if(c.data("typeahead"))return;b.preventDefault(),c.typeahead(c.data())})})}(window.jQuery);
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/d3/d3.js b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/d3/d3.js
deleted file mode 100644
index d24c2e4c83a..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/d3/d3.js
+++ /dev/null
@@ -1,4150 +0,0 @@
-(function(){if (!Date.now) Date.now = function() {
-  return +new Date;
-};
-try {
-  document.createElement("div").style.setProperty("opacity", 0, "");
-} catch (error) {
-  var d3_style_prototype = CSSStyleDeclaration.prototype,
-      d3_style_setProperty = d3_style_prototype.setProperty;
-  d3_style_prototype.setProperty = function(name, value, priority) {
-    d3_style_setProperty.call(this, name, value + "", priority);
-  };
-}
-d3 = {version: "2.4.6"}; // semver
-var d3_array = d3_arraySlice; // conversion for NodeLists
-
-function d3_arrayCopy(pseudoarray) {
-  var i = -1, n = pseudoarray.length, array = [];
-  while (++i < n) array.push(pseudoarray[i]);
-  return array;
-}
-
-function d3_arraySlice(pseudoarray) {
-  return Array.prototype.slice.call(pseudoarray);
-}
-
-try {
-  d3_array(document.documentElement.childNodes)[0].nodeType;
-} catch(e) {
-  d3_array = d3_arrayCopy;
-}
-
-var d3_arraySubclass = [].__proto__?
-
-// Until ECMAScript supports array subclassing, prototype injection works well.
-function(array, prototype) {
-  array.__proto__ = prototype;
-}:
-
-// And if your browser doesn't support __proto__, we'll use direct extension.
-function(array, prototype) {
-  for (var property in prototype) array[property] = prototype[property];
-};
-function d3_this() {
-  return this;
-}
-d3.functor = function(v) {
-  return typeof v === "function" ? v : function() { return v; };
-};
-// A getter-setter method that preserves the appropriate `this` context.
-d3.rebind = function(object, method) {
-  return function() {
-    var x = method.apply(object, arguments);
-    return arguments.length ? object : x;
-  };
-};
-d3.ascending = function(a, b) {
-  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
-};
-d3.descending = function(a, b) {
-  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
-};
-d3.mean = function(array, f) {
-  var n = array.length,
-      a,
-      m = 0,
-      i = -1,
-      j = 0;
-  if (arguments.length === 1) {
-    while (++i < n) if (d3_number(a = array[i])) m += (a - m) / ++j;
-  } else {
-    while (++i < n) if (d3_number(a = f.call(array, array[i], i))) m += (a - m) / ++j;
-  }
-  return j ? m : undefined;
-};
-d3.median = function(array, f) {
-  if (arguments.length > 1) array = array.map(f);
-  array = array.filter(d3_number);
-  return array.length ? d3.quantile(array.sort(d3.ascending), .5) : undefined;
-};
-d3.min = function(array, f) {
-  var i = -1,
-      n = array.length,
-      a,
-      b;
-  if (arguments.length === 1) {
-    while (++i < n && ((a = array[i]) == null || a != a)) a = undefined;
-    while (++i < n) if ((b = array[i]) != null && a > b) a = b;
-  } else {
-    while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined;
-    while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;
-  }
-  return a;
-};
-d3.max = function(array, f) {
-  var i = -1,
-      n = array.length,
-      a,
-      b;
-  if (arguments.length === 1) {
-    while (++i < n && ((a = array[i]) == null || a != a)) a = undefined;
-    while (++i < n) if ((b = array[i]) != null && b > a) a = b;
-  } else {
-    while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined;
-    while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;
-  }
-  return a;
-};
-function d3_number(x) {
-  return x != null && !isNaN(x);
-}
-d3.sum = function(array, f) {
-  var s = 0,
-      n = array.length,
-      a,
-      i = -1;
-
-  if (arguments.length === 1) {
-    while (++i < n) if (!isNaN(a = +array[i])) s += a;
-  } else {
-    while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a;
-  }
-
-  return s;
-};
-// R-7 per <http://en.wikipedia.org/wiki/Quantile>
-d3.quantile = function(values, p) {
-  var H = (values.length - 1) * p + 1,
-      h = Math.floor(H),
-      v = values[h - 1],
-      e = H - h;
-  return e ? v + e * (values[h] - v) : v;
-};
-d3.zip = function() {
-  if (!(n = arguments.length)) return [];
-  for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m;) {
-    for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n;) {
-      zip[j] = arguments[j][i];
-    }
-  }
-  return zips;
-};
-
-function d3_zipLength(d) {
-  return d.length;
-}
-// Locate the insertion point for x in a to maintain sorted order. The
-// arguments lo and hi may be used to specify a subset of the array which should
-// be considered; by default the entire array is used. If x is already present
-// in a, the insertion point will be before (to the left of) any existing
-// entries. The return value is suitable for use as the first argument to
-// `array.splice` assuming that a is already sorted.
-//
-// The returned insertion point i partitions the array a into two halves so that
-// all v < x for v in a[lo:i] for the left side and all v >= x for v in a[i:hi]
-// for the right side.
-d3.bisectLeft = function(a, x, lo, hi) {
-  if (arguments.length < 3) lo = 0;
-  if (arguments.length < 4) hi = a.length;
-  while (lo < hi) {
-    var mid = (lo + hi) >> 1;
-    if (a[mid] < x) lo = mid + 1;
-    else hi = mid;
-  }
-  return lo;
-};
-
-// Similar to bisectLeft, but returns an insertion point which comes after (to
-// the right of) any existing entries of x in a.
-//
-// The returned insertion point i partitions the array into two halves so that
-// all v <= x for v in a[lo:i] for the left side and all v > x for v in a[i:hi]
-// for the right side.
-d3.bisect =
-d3.bisectRight = function(a, x, lo, hi) {
-  if (arguments.length < 3) lo = 0;
-  if (arguments.length < 4) hi = a.length;
-  while (lo < hi) {
-    var mid = (lo + hi) >> 1;
-    if (x < a[mid]) hi = mid;
-    else lo = mid + 1;
-  }
-  return lo;
-};
-d3.first = function(array, f) {
-  var i = 0,
-      n = array.length,
-      a = array[0],
-      b;
-  if (arguments.length === 1) f = d3.ascending;
-  while (++i < n) {
-    if (f.call(array, a, b = array[i]) > 0) {
-      a = b;
-    }
-  }
-  return a;
-};
-d3.last = function(array, f) {
-  var i = 0,
-      n = array.length,
-      a = array[0],
-      b;
-  if (arguments.length === 1) f = d3.ascending;
-  while (++i < n) {
-    if (f.call(array, a, b = array[i]) <= 0) {
-      a = b;
-    }
-  }
-  return a;
-};
-d3.nest = function() {
-  var nest = {},
-      keys = [],
-      sortKeys = [],
-      sortValues,
-      rollup;
-
-  function map(array, depth) {
-    if (depth >= keys.length) return rollup
-        ? rollup.call(nest, array) : (sortValues
-        ? array.sort(sortValues)
-        : array);
-
-    var i = -1,
-        n = array.length,
-        key = keys[depth++],
-        keyValue,
-        object,
-        o = {};
-
-    while (++i < n) {
-      if ((keyValue = key(object = array[i])) in o) {
-        o[keyValue].push(object);
-      } else {
-        o[keyValue] = [object];
-      }
-    }
-
-    for (keyValue in o) {
-      o[keyValue] = map(o[keyValue], depth);
-    }
-
-    return o;
-  }
-
-  function entries(map, depth) {
-    if (depth >= keys.length) return map;
-
-    var a = [],
-        sortKey = sortKeys[depth++],
-        key;
-
-    for (key in map) {
-      a.push({key: key, values: entries(map[key], depth)});
-    }
-
-    if (sortKey) a.sort(function(a, b) {
-      return sortKey(a.key, b.key);
-    });
-
-    return a;
-  }
-
-  nest.map = function(array) {
-    return map(array, 0);
-  };
-
-  nest.entries = function(array) {
-    return entries(map(array, 0), 0);
-  };
-
-  nest.key = function(d) {
-    keys.push(d);
-    return nest;
-  };
-
-  // Specifies the order for the most-recently specified key.
-  // Note: only applies to entries. Map keys are unordered!
-  nest.sortKeys = function(order) {
-    sortKeys[keys.length - 1] = order;
-    return nest;
-  };
-
-  // Specifies the order for leaf values.
-  // Applies to both maps and entries array.
-  nest.sortValues = function(order) {
-    sortValues = order;
-    return nest;
-  };
-
-  nest.rollup = function(f) {
-    rollup = f;
-    return nest;
-  };
-
-  return nest;
-};
-d3.keys = function(map) {
-  var keys = [];
-  for (var key in map) keys.push(key);
-  return keys;
-};
-d3.values = function(map) {
-  var values = [];
-  for (var key in map) values.push(map[key]);
-  return values;
-};
-d3.entries = function(map) {
-  var entries = [];
-  for (var key in map) entries.push({key: key, value: map[key]});
-  return entries;
-};
-d3.permute = function(array, indexes) {
-  var permutes = [],
-      i = -1,
-      n = indexes.length;
-  while (++i < n) permutes[i] = array[indexes[i]];
-  return permutes;
-};
-d3.merge = function(arrays) {
-  return Array.prototype.concat.apply([], arrays);
-};
-d3.split = function(array, f) {
-  var arrays = [],
-      values = [],
-      value,
-      i = -1,
-      n = array.length;
-  if (arguments.length < 2) f = d3_splitter;
-  while (++i < n) {
-    if (f.call(values, value = array[i], i)) {
-      values = [];
-    } else {
-      if (!values.length) arrays.push(values);
-      values.push(value);
-    }
-  }
-  return arrays;
-};
-
-function d3_splitter(d) {
-  return d == null;
-}
-function d3_collapse(s) {
-  return s.replace(/(^\s+)|(\s+$)/g, "").replace(/\s+/g, " ");
-}
-/**
- * @param {number} start
- * @param {number=} stop
- * @param {number=} step
- */
-d3.range = function(start, stop, step) {
-  if (arguments.length < 3) {
-    step = 1;
-    if (arguments.length < 2) {
-      stop = start;
-      start = 0;
-    }
-  }
-  if ((stop - start) / step == Infinity) throw new Error("infinite range");
-  var range = [],
-       i = -1,
-       j;
-  if (step < 0) while ((j = start + step * ++i) > stop) range.push(j);
-  else while ((j = start + step * ++i) < stop) range.push(j);
-  return range;
-};
-d3.requote = function(s) {
-  return s.replace(d3_requote_re, "\\$&");
-};
-
-var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
-d3.round = function(x, n) {
-  return n
-      ? Math.round(x * Math.pow(10, n)) * Math.pow(10, -n)
-      : Math.round(x);
-};
-d3.xhr = function(url, mime, callback) {
-  var req = new XMLHttpRequest;
-  if (arguments.length < 3) callback = mime;
-  else if (mime && req.overrideMimeType) req.overrideMimeType(mime);
-  req.open("GET", url, true);
-  req.onreadystatechange = function() {
-    if (req.readyState === 4) callback(req.status < 300 ? req : null);
-  };
-  req.send(null);
-};
-d3.text = function(url, mime, callback) {
-  function ready(req) {
-    callback(req && req.responseText);
-  }
-  if (arguments.length < 3) {
-    callback = mime;
-    mime = null;
-  }
-  d3.xhr(url, mime, ready);
-};
-d3.json = function(url, callback) {
-  d3.text(url, "application/json", function(text) {
-    callback(text ? JSON.parse(text) : null);
-  });
-};
-d3.html = function(url, callback) {
-  d3.text(url, "text/html", function(text) {
-    if (text != null) { // Treat empty string as valid HTML.
-      var range = document.createRange();
-      range.selectNode(document.body);
-      text = range.createContextualFragment(text);
-    }
-    callback(text);
-  });
-};
-d3.xml = function(url, mime, callback) {
-  function ready(req) {
-    callback(req && req.responseXML);
-  }
-  if (arguments.length < 3) {
-    callback = mime;
-    mime = null;
-  }
-  d3.xhr(url, mime, ready);
-};
-d3.ns = {
-
-  prefix: {
-    svg: "http://www.w3.org/2000/svg",
-    xhtml: "http://www.w3.org/1999/xhtml",
-    xlink: "http://www.w3.org/1999/xlink",
-    xml: "http://www.w3.org/XML/1998/namespace",
-    xmlns: "http://www.w3.org/2000/xmlns/"
-  },
-
-  qualify: function(name) {
-    var i = name.indexOf(":");
-    return i < 0 ? name : {
-      space: d3.ns.prefix[name.substring(0, i)],
-      local: name.substring(i + 1)
-    };
-  }
-
-};
-/** @param {...string} types */
-d3.dispatch = function(types) {
-  var dispatch = {},
-      type;
-  for (var i = 0, n = arguments.length; i < n; i++) {
-    type = arguments[i];
-    dispatch[type] = d3_dispatch(type);
-  }
-  return dispatch;
-};
-
-function d3_dispatch(type) {
-  var dispatch = {},
-      listeners = [];
-
-  dispatch.add = function(listener) {
-    for (var i = 0; i < listeners.length; i++) {
-      if (listeners[i].listener == listener) return dispatch; // already registered
-    }
-    listeners.push({listener: listener, on: true});
-    return dispatch;
-  };
-
-  dispatch.remove = function(listener) {
-    for (var i = 0; i < listeners.length; i++) {
-      var l = listeners[i];
-      if (l.listener == listener) {
-        l.on = false;
-        listeners = listeners.slice(0, i).concat(listeners.slice(i + 1));
-        break;
-      }
-    }
-    return dispatch;
-  };
-
-  dispatch.dispatch = function() {
-    var ls = listeners; // defensive reference
-    for (var i = 0, n = ls.length; i < n; i++) {
-      var l = ls[i];
-      if (l.on) l.listener.apply(this, arguments);
-    }
-  };
-
-  return dispatch;
-};
-// TODO align
-d3.format = function(specifier) {
-  var match = d3_format_re.exec(specifier),
-      fill = match[1] || " ",
-      sign = match[3] || "",
-      zfill = match[5],
-      width = +match[6],
-      comma = match[7],
-      precision = match[8],
-      type = match[9],
-      scale = 1,
-      suffix = "",
-      integer = false;
-
-  if (precision) precision = +precision.substring(1);
-
-  if (zfill) {
-    fill = "0"; // TODO align = "=";
-    if (comma) width -= Math.floor((width - 1) / 4);
-  }
-
-  switch (type) {
-    case "n": comma = true; type = "g"; break;
-    case "%": scale = 100; suffix = "%"; type = "f"; break;
-    case "p": scale = 100; suffix = "%"; type = "r"; break;
-    case "d": integer = true; precision = 0; break;
-    case "s": scale = -1; type = "r"; break;
-  }
-
-  // If no precision is specified for r, fallback to general notation.
-  if (type == "r" && !precision) type = "g";
-
-  type = d3_format_types[type] || d3_format_typeDefault;
-
-  return function(value) {
-
-    // Return the empty string for floats formatted as ints.
-    if (integer && (value % 1)) return "";
-
-    // Convert negative to positive, and record the sign prefix.
-    var negative = (value < 0) && (value = -value) ? "\u2212" : sign;
-
-    // Apply the scale, computing it from the value's exponent for si format.
-    if (scale < 0) {
-      var prefix = d3.formatPrefix(value, precision);
-      value *= prefix.scale;
-      suffix = prefix.symbol;
-    } else {
-      value *= scale;
-    }
-
-    // Convert to the desired precision.
-    value = type(value, precision);
-
-    // If the fill character is 0, the sign and group is applied after the fill.
-    if (zfill) {
-      var length = value.length + negative.length;
-      if (length < width) value = new Array(width - length + 1).join(fill) + value;
-      if (comma) value = d3_format_group(value);
-      value = negative + value;
-    }
-
-    // Otherwise (e.g., space-filling), the sign and group is applied before.
-    else {
-      if (comma) value = d3_format_group(value);
-      value = negative + value;
-      var length = value.length;
-      if (length < width) value = new Array(width - length + 1).join(fill) + value;
-    }
-
-    return value + suffix;
-  };
-};
-
-// [[fill]align][sign][#][0][width][,][.precision][type]
-var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/;
-
-var d3_format_types = {
-  g: function(x, p) { return x.toPrecision(p); },
-  e: function(x, p) { return x.toExponential(p); },
-  f: function(x, p) { return x.toFixed(p); },
-  r: function(x, p) { return d3.round(x, p = d3_format_precision(x, p)).toFixed(Math.max(0, Math.min(20, p))); }
-};
-
-function d3_format_precision(x, p) {
-  return p - (x ? 1 + Math.floor(Math.log(x + Math.pow(10, 1 + Math.floor(Math.log(x) / Math.LN10) - p)) / Math.LN10) : 1);
-}
-
-function d3_format_typeDefault(x) {
-  return x + "";
-}
-
-// Apply comma grouping for thousands.
-function d3_format_group(value) {
-  var i = value.lastIndexOf("."),
-      f = i >= 0 ? value.substring(i) : (i = value.length, ""),
-      t = [];
-  while (i > 0) t.push(value.substring(i -= 3, i + 3));
-  return t.reverse().join(",") + f;
-}
-var d3_formatPrefixes = ["y","z","a","f","p","n","μ","m","","k","M","G","T","P","E","Z","Y"].map(d3_formatPrefix);
-
-d3.formatPrefix = function(value, precision) {
-  var i = 0;
-  if (value) {
-    if (value < 0) value *= -1;
-    if (precision) value = d3.round(value, d3_format_precision(value, precision));
-    i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10);
-    i = Math.max(-24, Math.min(24, Math.floor((i <= 0 ? i + 1 : i - 1) / 3) * 3));
-  }
-  return d3_formatPrefixes[8 + i / 3];
-};
-
-function d3_formatPrefix(d, i) {
-  return {
-    scale: Math.pow(10, (8 - i) * 3),
-    symbol: d
-  };
-}
-
-/*
- * TERMS OF USE - EASING EQUATIONS
- *
- * Open source under the BSD License.
- *
- * Copyright 2001 Robert Penner
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice, this
- *   list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright notice,
- *   this list of conditions and the following disclaimer in the documentation
- *   and/or other materials provided with the distribution.
- *
- * - Neither the name of the author nor the names of contributors may be used to
- *   endorse or promote products derived from this software without specific
- *   prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-var d3_ease_quad = d3_ease_poly(2),
-    d3_ease_cubic = d3_ease_poly(3);
-
-var d3_ease = {
-  linear: function() { return d3_ease_linear; },
-  poly: d3_ease_poly,
-  quad: function() { return d3_ease_quad; },
-  cubic: function() { return d3_ease_cubic; },
-  sin: function() { return d3_ease_sin; },
-  exp: function() { return d3_ease_exp; },
-  circle: function() { return d3_ease_circle; },
-  elastic: d3_ease_elastic,
-  back: d3_ease_back,
-  bounce: function() { return d3_ease_bounce; }
-};
-
-var d3_ease_mode = {
-  "in": function(f) { return f; },
-  "out": d3_ease_reverse,
-  "in-out": d3_ease_reflect,
-  "out-in": function(f) { return d3_ease_reflect(d3_ease_reverse(f)); }
-};
-
-d3.ease = function(name) {
-  var i = name.indexOf("-"),
-      t = i >= 0 ? name.substring(0, i) : name,
-      m = i >= 0 ? name.substring(i + 1) : "in";
-  return d3_ease_clamp(d3_ease_mode[m](d3_ease[t].apply(null, Array.prototype.slice.call(arguments, 1))));
-};
-
-function d3_ease_clamp(f) {
-  return function(t) {
-    return t <= 0 ? 0 : t >= 1 ? 1 : f(t);
-  };
-}
-
-function d3_ease_reverse(f) {
-  return function(t) {
-    return 1 - f(1 - t);
-  };
-}
-
-function d3_ease_reflect(f) {
-  return function(t) {
-    return .5 * (t < .5 ? f(2 * t) : (2 - f(2 - 2 * t)));
-  };
-}
-
-function d3_ease_linear(t) {
-  return t;
-}
-
-function d3_ease_poly(e) {
-  return function(t) {
-    return Math.pow(t, e);
-  }
-}
-
-function d3_ease_sin(t) {
-  return 1 - Math.cos(t * Math.PI / 2);
-}
-
-function d3_ease_exp(t) {
-  return Math.pow(2, 10 * (t - 1));
-}
-
-function d3_ease_circle(t) {
-  return 1 - Math.sqrt(1 - t * t);
-}
-
-function d3_ease_elastic(a, p) {
-  var s;
-  if (arguments.length < 2) p = 0.45;
-  if (arguments.length < 1) { a = 1; s = p / 4; }
-  else s = p / (2 * Math.PI) * Math.asin(1 / a);
-  return function(t) {
-    return 1 + a * Math.pow(2, 10 * -t) * Math.sin((t - s) * 2 * Math.PI / p);
-  };
-}
-
-function d3_ease_back(s) {
-  if (!s) s = 1.70158;
-  return function(t) {
-    return t * t * ((s + 1) * t - s);
-  };
-}
-
-function d3_ease_bounce(t) {
-  return t < 1 / 2.75 ? 7.5625 * t * t
-      : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75
-      : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375
-      : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;
-}
-d3.event = null;
-d3.interpolate = function(a, b) {
-  var i = d3.interpolators.length, f;
-  while (--i >= 0 && !(f = d3.interpolators[i](a, b)));
-  return f;
-};
-
-d3.interpolateNumber = function(a, b) {
-  b -= a;
-  return function(t) { return a + b * t; };
-};
-
-d3.interpolateRound = function(a, b) {
-  b -= a;
-  return function(t) { return Math.round(a + b * t); };
-};
-
-d3.interpolateString = function(a, b) {
-  var m, // current match
-      i, // current index
-      j, // current index (for coallescing)
-      s0 = 0, // start index of current string prefix
-      s1 = 0, // end index of current string prefix
-      s = [], // string constants and placeholders
-      q = [], // number interpolators
-      n, // q.length
-      o;
-
-  // Reset our regular expression!
-  d3_interpolate_number.lastIndex = 0;
-
-  // Find all numbers in b.
-  for (i = 0; m = d3_interpolate_number.exec(b); ++i) {
-    if (m.index) s.push(b.substring(s0, s1 = m.index));
-    q.push({i: s.length, x: m[0]});
-    s.push(null);
-    s0 = d3_interpolate_number.lastIndex;
-  }
-  if (s0 < b.length) s.push(b.substring(s0));
-
-  // Find all numbers in a.
-  for (i = 0, n = q.length; (m = d3_interpolate_number.exec(a)) && i < n; ++i) {
-    o = q[i];
-    if (o.x == m[0]) { // The numbers match, so coallesce.
-      if (o.i) {
-        if (s[o.i + 1] == null) { // This match is followed by another number.
-          s[o.i - 1] += o.x;
-          s.splice(o.i, 1);
-          for (j = i + 1; j < n; ++j) q[j].i--;
-        } else { // This match is followed by a string, so coallesce twice.
-          s[o.i - 1] += o.x + s[o.i + 1];
-          s.splice(o.i, 2);
-          for (j = i + 1; j < n; ++j) q[j].i -= 2;
-        }
-      } else {
-          if (s[o.i + 1] == null) { // This match is followed by another number.
-          s[o.i] = o.x;
-        } else { // This match is followed by a string, so coallesce twice.
-          s[o.i] = o.x + s[o.i + 1];
-          s.splice(o.i + 1, 1);
-          for (j = i + 1; j < n; ++j) q[j].i--;
-        }
-      }
-      q.splice(i, 1);
-      n--;
-      i--;
-    } else {
-      o.x = d3.interpolateNumber(parseFloat(m[0]), parseFloat(o.x));
-    }
-  }
-
-  // Remove any numbers in b not found in a.
-  while (i < n) {
-    o = q.pop();
-    if (s[o.i + 1] == null) { // This match is followed by another number.
-      s[o.i] = o.x;
-    } else { // This match is followed by a string, so coallesce twice.
-      s[o.i] = o.x + s[o.i + 1];
-      s.splice(o.i + 1, 1);
-    }
-    n--;
-  }
-
-  // Special optimization for only a single match.
-  if (s.length === 1) {
-    return s[0] == null ? q[0].x : function() { return b; };
-  }
-
-  // Otherwise, interpolate each of the numbers and rejoin the string.
-  return function(t) {
-    for (i = 0; i < n; ++i) s[(o = q[i]).i] = o.x(t);
-    return s.join("");
-  };
-};
-
-d3.interpolateRgb = function(a, b) {
-  a = d3.rgb(a);
-  b = d3.rgb(b);
-  var ar = a.r,
-      ag = a.g,
-      ab = a.b,
-      br = b.r - ar,
-      bg = b.g - ag,
-      bb = b.b - ab;
-  return function(t) {
-    return "#"
-        + d3_rgb_hex(Math.round(ar + br * t))
-        + d3_rgb_hex(Math.round(ag + bg * t))
-        + d3_rgb_hex(Math.round(ab + bb * t));
-  };
-};
-
-// interpolates HSL space, but outputs RGB string (for compatibility)
-d3.interpolateHsl = function(a, b) {
-  a = d3.hsl(a);
-  b = d3.hsl(b);
-  var h0 = a.h,
-      s0 = a.s,
-      l0 = a.l,
-      h1 = b.h - h0,
-      s1 = b.s - s0,
-      l1 = b.l - l0;
-  return function(t) {
-    return d3_hsl_rgb(h0 + h1 * t, s0 + s1 * t, l0 + l1 * t).toString();
-  };
-};
-
-d3.interpolateArray = function(a, b) {
-  var x = [],
-      c = [],
-      na = a.length,
-      nb = b.length,
-      n0 = Math.min(a.length, b.length),
-      i;
-  for (i = 0; i < n0; ++i) x.push(d3.interpolate(a[i], b[i]));
-  for (; i < na; ++i) c[i] = a[i];
-  for (; i < nb; ++i) c[i] = b[i];
-  return function(t) {
-    for (i = 0; i < n0; ++i) c[i] = x[i](t);
-    return c;
-  };
-};
-
-d3.interpolateObject = function(a, b) {
-  var i = {},
-      c = {},
-      k;
-  for (k in a) {
-    if (k in b) {
-      i[k] = d3_interpolateByName(k)(a[k], b[k]);
-    } else {
-      c[k] = a[k];
-    }
-  }
-  for (k in b) {
-    if (!(k in a)) {
-      c[k] = b[k];
-    }
-  }
-  return function(t) {
-    for (k in i) c[k] = i[k](t);
-    return c;
-  };
-}
-
-var d3_interpolate_number = /[-+]?(?:\d+\.\d+|\d+\.|\.\d+|\d+)(?:[eE][-]?\d+)?/g,
-    d3_interpolate_rgb = {background: 1, fill: 1, stroke: 1};
-
-function d3_interpolateByName(n) {
-  return n in d3_interpolate_rgb || /\bcolor\b/.test(n)
-      ? d3.interpolateRgb
-      : d3.interpolate;
-}
-
-d3.interpolators = [
-  d3.interpolateObject,
-  function(a, b) { return (b instanceof Array) && d3.interpolateArray(a, b); },
-  function(a, b) { return (typeof b === "string") && d3.interpolateString(String(a), b); },
-  function(a, b) { return (typeof b === "string" ? b in d3_rgb_names || /^(#|rgb\(|hsl\()/.test(b) : b instanceof d3_Rgb || b instanceof d3_Hsl) && d3.interpolateRgb(String(a), b); },
-  function(a, b) { return (typeof b === "number") && d3.interpolateNumber(+a, b); }
-];
-function d3_uninterpolateNumber(a, b) {
-  b = b - (a = +a) ? 1 / (b - a) : 0;
-  return function(x) { return (x - a) * b; };
-}
-
-function d3_uninterpolateClamp(a, b) {
-  b = b - (a = +a) ? 1 / (b - a) : 0;
-  return function(x) { return Math.max(0, Math.min(1, (x - a) * b)); };
-}
-d3.rgb = function(r, g, b) {
-  return arguments.length === 1
-      ? (r instanceof d3_Rgb ? d3_rgb(r.r, r.g, r.b)
-      : d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb))
-      : d3_rgb(~~r, ~~g, ~~b);
-};
-
-function d3_rgb(r, g, b) {
-  return new d3_Rgb(r, g, b);
-}
-
-function d3_Rgb(r, g, b) {
-  this.r = r;
-  this.g = g;
-  this.b = b;
-}
-
-d3_Rgb.prototype.brighter = function(k) {
-  k = Math.pow(0.7, arguments.length ? k : 1);
-  var r = this.r,
-      g = this.g,
-      b = this.b,
-      i = 30;
-  if (!r && !g && !b) return d3_rgb(i, i, i);
-  if (r && r < i) r = i;
-  if (g && g < i) g = i;
-  if (b && b < i) b = i;
-  return d3_rgb(
-      Math.min(255, Math.floor(r / k)),
-      Math.min(255, Math.floor(g / k)),
-      Math.min(255, Math.floor(b / k)));
-};
-
-d3_Rgb.prototype.darker = function(k) {
-  k = Math.pow(0.7, arguments.length ? k : 1);
-  return d3_rgb(
-      Math.floor(k * this.r),
-      Math.floor(k * this.g),
-      Math.floor(k * this.b));
-};
-
-d3_Rgb.prototype.hsl = function() {
-  return d3_rgb_hsl(this.r, this.g, this.b);
-};
-
-d3_Rgb.prototype.toString = function() {
-  return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);
-};
-
-function d3_rgb_hex(v) {
-  return v < 0x10
-      ? "0" + Math.max(0, v).toString(16)
-      : Math.min(255, v).toString(16);
-}
-
-function d3_rgb_parse(format, rgb, hsl) {
-  var r = 0, // red channel; int in [0, 255]
-      g = 0, // green channel; int in [0, 255]
-      b = 0, // blue channel; int in [0, 255]
-      m1, // CSS color specification match
-      m2, // CSS color specification type (e.g., rgb)
-      name;
-
-  /* Handle hsl, rgb. */
-  m1 = /([a-z]+)\((.*)\)/i.exec(format);
-  if (m1) {
-    m2 = m1[2].split(",");
-    switch (m1[1]) {
-      case "hsl": {
-        return hsl(
-          parseFloat(m2[0]), // degrees
-          parseFloat(m2[1]) / 100, // percentage
-          parseFloat(m2[2]) / 100 // percentage
-        );
-      }
-      case "rgb": {
-        return rgb(
-          d3_rgb_parseNumber(m2[0]),
-          d3_rgb_parseNumber(m2[1]),
-          d3_rgb_parseNumber(m2[2])
-        );
-      }
-    }
-  }
-
-  /* Named colors. */
-  if (name = d3_rgb_names[format]) return rgb(name.r, name.g, name.b);
-
-  /* Hexadecimal colors: #rgb and #rrggbb. */
-  if (format != null && format.charAt(0) === "#") {
-    if (format.length === 4) {
-      r = format.charAt(1); r += r;
-      g = format.charAt(2); g += g;
-      b = format.charAt(3); b += b;
-    } else if (format.length === 7) {
-      r = format.substring(1, 3);
-      g = format.substring(3, 5);
-      b = format.substring(5, 7);
-    }
-    r = parseInt(r, 16);
-    g = parseInt(g, 16);
-    b = parseInt(b, 16);
-  }
-
-  return rgb(r, g, b);
-}
-
-function d3_rgb_hsl(r, g, b) {
-  var min = Math.min(r /= 255, g /= 255, b /= 255),
-      max = Math.max(r, g, b),
-      d = max - min,
-      h,
-      s,
-      l = (max + min) / 2;
-  if (d) {
-    s = l < .5 ? d / (max + min) : d / (2 - max - min);
-    if (r == max) h = (g - b) / d + (g < b ? 6 : 0);
-    else if (g == max) h = (b - r) / d + 2;
-    else h = (r - g) / d + 4;
-    h *= 60;
-  } else {
-    s = h = 0;
-  }
-  return d3_hsl(h, s, l);
-}
-
-function d3_rgb_parseNumber(c) { // either integer or percentage
-  var f = parseFloat(c);
-  return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f;
-}
-
-var d3_rgb_names = {
-  aliceblue: "#f0f8ff",
-  antiquewhite: "#faebd7",
-  aqua: "#00ffff",
-  aquamarine: "#7fffd4",
-  azure: "#f0ffff",
-  beige: "#f5f5dc",
-  bisque: "#ffe4c4",
-  black: "#000000",
-  blanchedalmond: "#ffebcd",
-  blue: "#0000ff",
-  blueviolet: "#8a2be2",
-  brown: "#a52a2a",
-  burlywood: "#deb887",
-  cadetblue: "#5f9ea0",
-  chartreuse: "#7fff00",
-  chocolate: "#d2691e",
-  coral: "#ff7f50",
-  cornflowerblue: "#6495ed",
-  cornsilk: "#fff8dc",
-  crimson: "#dc143c",
-  cyan: "#00ffff",
-  darkblue: "#00008b",
-  darkcyan: "#008b8b",
-  darkgoldenrod: "#b8860b",
-  darkgray: "#a9a9a9",
-  darkgreen: "#006400",
-  darkgrey: "#a9a9a9",
-  darkkhaki: "#bdb76b",
-  darkmagenta: "#8b008b",
-  darkolivegreen: "#556b2f",
-  darkorange: "#ff8c00",
-  darkorchid: "#9932cc",
-  darkred: "#8b0000",
-  darksalmon: "#e9967a",
-  darkseagreen: "#8fbc8f",
-  darkslateblue: "#483d8b",
-  darkslategray: "#2f4f4f",
-  darkslategrey: "#2f4f4f",
-  darkturquoise: "#00ced1",
-  darkviolet: "#9400d3",
-  deeppink: "#ff1493",
-  deepskyblue: "#00bfff",
-  dimgray: "#696969",
-  dimgrey: "#696969",
-  dodgerblue: "#1e90ff",
-  firebrick: "#b22222",
-  floralwhite: "#fffaf0",
-  forestgreen: "#228b22",
-  fuchsia: "#ff00ff",
-  gainsboro: "#dcdcdc",
-  ghostwhite: "#f8f8ff",
-  gold: "#ffd700",
-  goldenrod: "#daa520",
-  gray: "#808080",
-  green: "#008000",
-  greenyellow: "#adff2f",
-  grey: "#808080",
-  honeydew: "#f0fff0",
-  hotpink: "#ff69b4",
-  indianred: "#cd5c5c",
-  indigo: "#4b0082",
-  ivory: "#fffff0",
-  khaki: "#f0e68c",
-  lavender: "#e6e6fa",
-  lavenderblush: "#fff0f5",
-  lawngreen: "#7cfc00",
-  lemonchiffon: "#fffacd",
-  lightblue: "#add8e6",
-  lightcoral: "#f08080",
-  lightcyan: "#e0ffff",
-  lightgoldenrodyellow: "#fafad2",
-  lightgray: "#d3d3d3",
-  lightgreen: "#90ee90",
-  lightgrey: "#d3d3d3",
-  lightpink: "#ffb6c1",
-  lightsalmon: "#ffa07a",
-  lightseagreen: "#20b2aa",
-  lightskyblue: "#87cefa",
-  lightslategray: "#778899",
-  lightslategrey: "#778899",
-  lightsteelblue: "#b0c4de",
-  lightyellow: "#ffffe0",
-  lime: "#00ff00",
-  limegreen: "#32cd32",
-  linen: "#faf0e6",
-  magenta: "#ff00ff",
-  maroon: "#800000",
-  mediumaquamarine: "#66cdaa",
-  mediumblue: "#0000cd",
-  mediumorchid: "#ba55d3",
-  mediumpurple: "#9370db",
-  mediumseagreen: "#3cb371",
-  mediumslateblue: "#7b68ee",
-  mediumspringgreen: "#00fa9a",
-  mediumturquoise: "#48d1cc",
-  mediumvioletred: "#c71585",
-  midnightblue: "#191970",
-  mintcream: "#f5fffa",
-  mistyrose: "#ffe4e1",
-  moccasin: "#ffe4b5",
-  navajowhite: "#ffdead",
-  navy: "#000080",
-  oldlace: "#fdf5e6",
-  olive: "#808000",
-  olivedrab: "#6b8e23",
-  orange: "#ffa500",
-  orangered: "#ff4500",
-  orchid: "#da70d6",
-  palegoldenrod: "#eee8aa",
-  palegreen: "#98fb98",
-  paleturquoise: "#afeeee",
-  palevioletred: "#db7093",
-  papayawhip: "#ffefd5",
-  peachpuff: "#ffdab9",
-  peru: "#cd853f",
-  pink: "#ffc0cb",
-  plum: "#dda0dd",
-  powderblue: "#b0e0e6",
-  purple: "#800080",
-  red: "#ff0000",
-  rosybrown: "#bc8f8f",
-  royalblue: "#4169e1",
-  saddlebrown: "#8b4513",
-  salmon: "#fa8072",
-  sandybrown: "#f4a460",
-  seagreen: "#2e8b57",
-  seashell: "#fff5ee",
-  sienna: "#a0522d",
-  silver: "#c0c0c0",
-  skyblue: "#87ceeb",
-  slateblue: "#6a5acd",
-  slategray: "#708090",
-  slategrey: "#708090",
-  snow: "#fffafa",
-  springgreen: "#00ff7f",
-  steelblue: "#4682b4",
-  tan: "#d2b48c",
-  teal: "#008080",
-  thistle: "#d8bfd8",
-  tomato: "#ff6347",
-  turquoise: "#40e0d0",
-  violet: "#ee82ee",
-  wheat: "#f5deb3",
-  white: "#ffffff",
-  whitesmoke: "#f5f5f5",
-  yellow: "#ffff00",
-  yellowgreen: "#9acd32"
-};
-
-for (var d3_rgb_name in d3_rgb_names) {
-  d3_rgb_names[d3_rgb_name] = d3_rgb_parse(
-      d3_rgb_names[d3_rgb_name],
-      d3_rgb,
-      d3_hsl_rgb);
-}
-d3.hsl = function(h, s, l) {
-  return arguments.length === 1
-      ? (h instanceof d3_Hsl ? d3_hsl(h.h, h.s, h.l)
-      : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl))
-      : d3_hsl(+h, +s, +l);
-};
-
-function d3_hsl(h, s, l) {
-  return new d3_Hsl(h, s, l);
-}
-
-function d3_Hsl(h, s, l) {
-  this.h = h;
-  this.s = s;
-  this.l = l;
-}
-
-d3_Hsl.prototype.brighter = function(k) {
-  k = Math.pow(0.7, arguments.length ? k : 1);
-  return d3_hsl(this.h, this.s, this.l / k);
-};
-
-d3_Hsl.prototype.darker = function(k) {
-  k = Math.pow(0.7, arguments.length ? k : 1);
-  return d3_hsl(this.h, this.s, k * this.l);
-};
-
-d3_Hsl.prototype.rgb = function() {
-  return d3_hsl_rgb(this.h, this.s, this.l);
-};
-
-d3_Hsl.prototype.toString = function() {
-  return this.rgb().toString();
-};
-
-function d3_hsl_rgb(h, s, l) {
-  var m1,
-      m2;
-
-  /* Some simple corrections for h, s and l. */
-  h = h % 360; if (h < 0) h += 360;
-  s = s < 0 ? 0 : s > 1 ? 1 : s;
-  l = l < 0 ? 0 : l > 1 ? 1 : l;
-
-  /* From FvD 13.37, CSS Color Module Level 3 */
-  m2 = l <= .5 ? l * (1 + s) : l + s - l * s;
-  m1 = 2 * l - m2;
-
-  function v(h) {
-    if (h > 360) h -= 360;
-    else if (h < 0) h += 360;
-    if (h < 60) return m1 + (m2 - m1) * h / 60;
-    if (h < 180) return m2;
-    if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;
-    return m1;
-  }
-
-  function vv(h) {
-    return Math.round(v(h) * 255);
-  }
-
-  return d3_rgb(vv(h + 120), vv(h), vv(h - 120));
-}
-function d3_selection(groups) {
-  d3_arraySubclass(groups, d3_selectionPrototype);
-  return groups;
-}
-
-var d3_select = function(s, n) { return n.querySelector(s); },
-    d3_selectAll = function(s, n) { return n.querySelectorAll(s); };
-
-// Prefer Sizzle, if available.
-if (typeof Sizzle === "function") {
-  d3_select = function(s, n) { return Sizzle(s, n)[0]; };
-  d3_selectAll = function(s, n) { return Sizzle.uniqueSort(Sizzle(s, n)); };
-}
-
-var d3_selectionPrototype = [];
-
-d3.selection = function() {
-  return d3_selectionRoot;
-};
-
-d3.selection.prototype = d3_selectionPrototype;
-d3_selectionPrototype.select = function(selector) {
-  var subgroups = [],
-      subgroup,
-      subnode,
-      group,
-      node;
-
-  if (typeof selector !== "function") selector = d3_selection_selector(selector);
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    subgroups.push(subgroup = []);
-    subgroup.parentNode = (group = this[j]).parentNode;
-    for (var i = -1, n = group.length; ++i < n;) {
-      if (node = group[i]) {
-        subgroup.push(subnode = selector.call(node, node.__data__, i));
-        if (subnode && "__data__" in node) subnode.__data__ = node.__data__;
-      } else {
-        subgroup.push(null);
-      }
-    }
-  }
-
-  return d3_selection(subgroups);
-};
-
-function d3_selection_selector(selector) {
-  return function() {
-    return d3_select(selector, this);
-  };
-}
-d3_selectionPrototype.selectAll = function(selector) {
-  var subgroups = [],
-      subgroup,
-      node;
-
-  if (typeof selector !== "function") selector = d3_selection_selectorAll(selector);
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      if (node = group[i]) {
-        subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i)));
-        subgroup.parentNode = node;
-      }
-    }
-  }
-
-  return d3_selection(subgroups);
-};
-
-function d3_selection_selectorAll(selector) {
-  return function() {
-    return d3_selectAll(selector, this);
-  };
-}
-d3_selectionPrototype.attr = function(name, value) {
-  name = d3.ns.qualify(name);
-
-  // If no value is specified, return the first value.
-  if (arguments.length < 2) {
-    var node = this.node();
-    return name.local
-        ? node.getAttributeNS(name.space, name.local)
-        : node.getAttribute(name);
-  }
-
-  function attrNull() {
-    this.removeAttribute(name);
-  }
-
-  function attrNullNS() {
-    this.removeAttributeNS(name.space, name.local);
-  }
-
-  function attrConstant() {
-    this.setAttribute(name, value);
-  }
-
-  function attrConstantNS() {
-    this.setAttributeNS(name.space, name.local, value);
-  }
-
-  function attrFunction() {
-    var x = value.apply(this, arguments);
-    if (x == null) this.removeAttribute(name);
-    else this.setAttribute(name, x);
-  }
-
-  function attrFunctionNS() {
-    var x = value.apply(this, arguments);
-    if (x == null) this.removeAttributeNS(name.space, name.local);
-    else this.setAttributeNS(name.space, name.local, x);
-  }
-
-  return this.each(value == null
-      ? (name.local ? attrNullNS : attrNull) : (typeof value === "function"
-      ? (name.local ? attrFunctionNS : attrFunction)
-      : (name.local ? attrConstantNS : attrConstant)));
-};
-d3_selectionPrototype.classed = function(name, value) {
-  var names = name.split(d3_selection_classedWhitespace),
-      n = names.length,
-      i = -1;
-  if (arguments.length > 1) {
-    while (++i < n) d3_selection_classed.call(this, names[i], value);
-    return this;
-  } else {
-    while (++i < n) if (!d3_selection_classed.call(this, names[i])) return false;
-    return true;
-  }
-};
-
-var d3_selection_classedWhitespace = /\s+/g;
-
-function d3_selection_classed(name, value) {
-  var re = new RegExp("(^|\\s+)" + d3.requote(name) + "(\\s+|$)", "g");
-
-  // If no value is specified, return the first value.
-  if (arguments.length < 2) {
-    var node = this.node();
-    if (c = node.classList) return c.contains(name);
-    var c = node.className;
-    re.lastIndex = 0;
-    return re.test(c.baseVal != null ? c.baseVal : c);
-  }
-
-  function classedAdd() {
-    if (c = this.classList) return c.add(name);
-    var c = this.className,
-        cb = c.baseVal != null,
-        cv = cb ? c.baseVal : c;
-    re.lastIndex = 0;
-    if (!re.test(cv)) {
-      cv = d3_collapse(cv + " " + name);
-      if (cb) c.baseVal = cv;
-      else this.className = cv;
-    }
-  }
-
-  function classedRemove() {
-    if (c = this.classList) return c.remove(name);
-    var c = this.className,
-        cb = c.baseVal != null,
-        cv = cb ? c.baseVal : c;
-    cv = d3_collapse(cv.replace(re, " "));
-    if (cb) c.baseVal = cv;
-    else this.className = cv;
-  }
-
-  function classedFunction() {
-    (value.apply(this, arguments)
-        ? classedAdd
-        : classedRemove).call(this);
-  }
-
-  return this.each(typeof value === "function"
-      ? classedFunction : value
-      ? classedAdd
-      : classedRemove);
-}
-d3_selectionPrototype.style = function(name, value, priority) {
-  if (arguments.length < 3) priority = "";
-
-  // If no value is specified, return the first value.
-  if (arguments.length < 2) return window
-      .getComputedStyle(this.node(), null)
-      .getPropertyValue(name);
-
-  function styleNull() {
-    this.style.removeProperty(name);
-  }
-
-  function styleConstant() {
-    this.style.setProperty(name, value, priority);
-  }
-
-  function styleFunction() {
-    var x = value.apply(this, arguments);
-    if (x == null) this.style.removeProperty(name);
-    else this.style.setProperty(name, x, priority);
-  }
-
-  return this.each(value == null
-      ? styleNull : (typeof value === "function"
-      ? styleFunction : styleConstant));
-};
-d3_selectionPrototype.property = function(name, value) {
-
-  // If no value is specified, return the first value.
-  if (arguments.length < 2) return this.node()[name];
-
-  function propertyNull() {
-    delete this[name];
-  }
-
-  function propertyConstant() {
-    this[name] = value;
-  }
-
-  function propertyFunction() {
-    var x = value.apply(this, arguments);
-    if (x == null) delete this[name];
-    else this[name] = x;
-  }
-
-  return this.each(value == null
-      ? propertyNull : (typeof value === "function"
-      ? propertyFunction : propertyConstant));
-};
-d3_selectionPrototype.text = function(value) {
-  return arguments.length < 1 ? this.node().textContent
-      : (this.each(typeof value === "function"
-      ? function() { this.textContent = value.apply(this, arguments); }
-      : function() { this.textContent = value; }));
-};
-d3_selectionPrototype.html = function(value) {
-  return arguments.length < 1 ? this.node().innerHTML
-      : (this.each(typeof value === "function"
-      ? function() { this.innerHTML = value.apply(this, arguments); }
-      : function() { this.innerHTML = value; }));
-};
-// TODO append(node)?
-// TODO append(function)?
-d3_selectionPrototype.append = function(name) {
-  name = d3.ns.qualify(name);
-
-  function append() {
-    return this.appendChild(document.createElement(name));
-  }
-
-  function appendNS() {
-    return this.appendChild(document.createElementNS(name.space, name.local));
-  }
-
-  return this.select(name.local ? appendNS : append);
-};
-// TODO insert(node, function)?
-// TODO insert(function, string)?
-// TODO insert(function, function)?
-d3_selectionPrototype.insert = function(name, before) {
-  name = d3.ns.qualify(name);
-
-  function insert() {
-    return this.insertBefore(
-        document.createElement(name),
-        d3_select(before, this));
-  }
-
-  function insertNS() {
-    return this.insertBefore(
-        document.createElementNS(name.space, name.local),
-        d3_select(before, this));
-  }
-
-  return this.select(name.local ? insertNS : insert);
-};
-// TODO remove(selector)?
-// TODO remove(node)?
-// TODO remove(function)?
-d3_selectionPrototype.remove = function() {
-  return this.each(function() {
-    var parent = this.parentNode;
-    if (parent) parent.removeChild(this);
-  });
-};
-// TODO data(null) for clearing data?
-d3_selectionPrototype.data = function(data, join) {
-  var enter = [],
-      update = [],
-      exit = [];
-
-  function bind(group, groupData) {
-    var i,
-        n = group.length,
-        m = groupData.length,
-        n0 = Math.min(n, m),
-        n1 = Math.max(n, m),
-        updateNodes = [],
-        enterNodes = [],
-        exitNodes = [],
-        node,
-        nodeData;
-
-    if (join) {
-      var nodeByKey = {},
-          keys = [],
-          key,
-          j = groupData.length;
-
-      for (i = -1; ++i < n;) {
-        key = join.call(node = group[i], node.__data__, i);
-        if (key in nodeByKey) {
-          exitNodes[j++] = node; // duplicate key
-        } else {
-          nodeByKey[key] = node;
-        }
-        keys.push(key);
-      }
-
-      for (i = -1; ++i < m;) {
-        node = nodeByKey[key = join.call(groupData, nodeData = groupData[i], i)];
-        if (node) {
-          node.__data__ = nodeData;
-          updateNodes[i] = node;
-          enterNodes[i] = exitNodes[i] = null;
-        } else {
-          enterNodes[i] = d3_selection_dataNode(nodeData);
-          updateNodes[i] = exitNodes[i] = null;
-        }
-        delete nodeByKey[key];
-      }
-
-      for (i = -1; ++i < n;) {
-        if (keys[i] in nodeByKey) {
-          exitNodes[i] = group[i];
-        }
-      }
-    } else {
-      for (i = -1; ++i < n0;) {
-        node = group[i];
-        nodeData = groupData[i];
-        if (node) {
-          node.__data__ = nodeData;
-          updateNodes[i] = node;
-          enterNodes[i] = exitNodes[i] = null;
-        } else {
-          enterNodes[i] = d3_selection_dataNode(nodeData);
-          updateNodes[i] = exitNodes[i] = null;
-        }
-      }
-      for (; i < m; ++i) {
-        enterNodes[i] = d3_selection_dataNode(groupData[i]);
-        updateNodes[i] = exitNodes[i] = null;
-      }
-      for (; i < n1; ++i) {
-        exitNodes[i] = group[i];
-        enterNodes[i] = updateNodes[i] = null;
-      }
-    }
-
-    enterNodes.update
-        = updateNodes;
-
-    enterNodes.parentNode
-        = updateNodes.parentNode
-        = exitNodes.parentNode
-        = group.parentNode;
-
-    enter.push(enterNodes);
-    update.push(updateNodes);
-    exit.push(exitNodes);
-  }
-
-  var i = -1,
-      n = this.length,
-      group;
-  if (typeof data === "function") {
-    while (++i < n) {
-      bind(group = this[i], data.call(group, group.parentNode.__data__, i));
-    }
-  } else {
-    while (++i < n) {
-      bind(group = this[i], data);
-    }
-  }
-
-  var selection = d3_selection(update);
-  selection.enter = function() { return d3_selection_enter(enter); };
-  selection.exit = function() { return d3_selection(exit); };
-  return selection;
-};
-
-function d3_selection_dataNode(data) {
-  return {__data__: data};
-}
-// TODO preserve null elements to maintain index?
-d3_selectionPrototype.filter = function(filter) {
-  var subgroups = [],
-      subgroup,
-      group,
-      node;
-
-  for (var j = 0, m = this.length; j < m; j++) {
-    subgroups.push(subgroup = []);
-    subgroup.parentNode = (group = this[j]).parentNode;
-    for (var i = 0, n = group.length; i < n; i++) {
-      if ((node = group[i]) && filter.call(node, node.__data__, i)) {
-        subgroup.push(node);
-      }
-    }
-  }
-
-  return d3_selection(subgroups);
-};
-d3_selectionPrototype.map = function(map) {
-  return this.each(function() {
-    this.__data__ = map.apply(this, arguments);
-  });
-};
-d3_selectionPrototype.sort = function(comparator) {
-  comparator = d3_selection_sortComparator.apply(this, arguments);
-  for (var j = 0, m = this.length; j < m; j++) {
-    for (var group = this[j].sort(comparator), i = 1, n = group.length, prev = group[0]; i < n; i++) {
-      var node = group[i];
-      if (node) {
-        if (prev) prev.parentNode.insertBefore(node, prev.nextSibling);
-        prev = node;
-      }
-    }
-  }
-  return this;
-};
-
-function d3_selection_sortComparator(comparator) {
-  if (!arguments.length) comparator = d3.ascending;
-  return function(a, b) {
-    return comparator(a && a.__data__, b && b.__data__);
-  };
-}
-// type can be namespaced, e.g., "click.foo"
-// listener can be null for removal
-d3_selectionPrototype.on = function(type, listener, capture) {
-  if (arguments.length < 3) capture = false;
-
-  // parse the type specifier
-  var name = "__on" + type, i = type.indexOf(".");
-  if (i > 0) type = type.substring(0, i);
-
-  // if called with only one argument, return the current listener
-  if (arguments.length < 2) return (i = this.node()[name]) && i._;
-
-  // remove the old event listener, and add the new event listener
-  return this.each(function(d, i) {
-    var node = this;
-
-    if (node[name]) node.removeEventListener(type, node[name], capture);
-    if (listener) node.addEventListener(type, node[name] = l, capture);
-
-    // wrapped event listener that preserves i
-    function l(e) {
-      var o = d3.event; // Events can be reentrant (e.g., focus).
-      d3.event = e;
-      try {
-        listener.call(node, node.__data__, i);
-      } finally {
-        d3.event = o;
-      }
-    }
-
-    // stash the unwrapped listener for retrieval
-    l._ = listener;
-  });
-};
-d3_selectionPrototype.each = function(callback) {
-  for (var j = -1, m = this.length; ++j < m;) {
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      var node = group[i];
-      if (node) callback.call(node, node.__data__, i, j);
-    }
-  }
-  return this;
-};
-//
-// Note: assigning to the arguments array simultaneously changes the value of
-// the corresponding argument!
-//
-// TODO The `this` argument probably shouldn't be the first argument to the
-// callback, anyway, since it's redundant. However, that will require a major
-// version bump due to backwards compatibility, so I'm not changing it right
-// away.
-//
-d3_selectionPrototype.call = function(callback) {
-  callback.apply(this, (arguments[0] = this, arguments));
-  return this;
-};
-d3_selectionPrototype.empty = function() {
-  return !this.node();
-};
-d3_selectionPrototype.node = function(callback) {
-  for (var j = 0, m = this.length; j < m; j++) {
-    for (var group = this[j], i = 0, n = group.length; i < n; i++) {
-      var node = group[i];
-      if (node) return node;
-    }
-  }
-  return null;
-};
-d3_selectionPrototype.transition = function() {
-  var subgroups = [],
-      subgroup,
-      node;
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    subgroups.push(subgroup = []);
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      subgroup.push((node = group[i]) ? {node: node, delay: 0, duration: 250} : null);
-    }
-  }
-
-  return d3_transition(subgroups, d3_transitionInheritId || ++d3_transitionId, Date.now());
-};
-var d3_selectionRoot = d3_selection([[document]]);
-
-d3_selectionRoot[0].parentNode = document.documentElement;
-
-// TODO fast singleton implementation!
-// TODO select(function)
-d3.select = function(selector) {
-  return typeof selector === "string"
-      ? d3_selectionRoot.select(selector)
-      : d3_selection([[selector]]); // assume node
-};
-
-// TODO selectAll(function)
-d3.selectAll = function(selector) {
-  return typeof selector === "string"
-      ? d3_selectionRoot.selectAll(selector)
-      : d3_selection([d3_array(selector)]); // assume node[]
-};
-function d3_selection_enter(selection) {
-  d3_arraySubclass(selection, d3_selection_enterPrototype);
-  return selection;
-}
-
-var d3_selection_enterPrototype = [];
-
-d3_selection_enterPrototype.append = d3_selectionPrototype.append;
-d3_selection_enterPrototype.insert = d3_selectionPrototype.insert;
-d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;
-d3_selection_enterPrototype.node = d3_selectionPrototype.node;
-d3_selection_enterPrototype.select = function(selector) {
-  var subgroups = [],
-      subgroup,
-      subnode,
-      upgroup,
-      group,
-      node;
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    upgroup = (group = this[j]).update;
-    subgroups.push(subgroup = []);
-    subgroup.parentNode = group.parentNode;
-    for (var i = -1, n = group.length; ++i < n;) {
-      if (node = group[i]) {
-        subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i));
-        subnode.__data__ = node.__data__;
-      } else {
-        subgroup.push(null);
-      }
-    }
-  }
-
-  return d3_selection(subgroups);
-};
-function d3_transition(groups, id, time) {
-  d3_arraySubclass(groups, d3_transitionPrototype);
-
-  var tweens = {},
-      event = d3.dispatch("start", "end"),
-      ease = d3_transitionEase;
-
-  groups.id = id;
-
-  groups.time = time;
-
-  groups.tween = function(name, tween) {
-    if (arguments.length < 2) return tweens[name];
-    if (tween == null) delete tweens[name];
-    else tweens[name] = tween;
-    return groups;
-  };
-
-  groups.ease = function(value) {
-    if (!arguments.length) return ease;
-    ease = typeof value === "function" ? value : d3.ease.apply(d3, arguments);
-    return groups;
-  };
-
-  groups.each = function(type, listener) {
-    if (arguments.length < 2) return d3_transition_each.call(groups, type);
-    event[type].add(listener);
-    return groups;
-  };
-
-  d3.timer(function(elapsed) {
-    groups.each(function(d, i, j) {
-      var tweened = [],
-          node = this,
-          delay = groups[j][i].delay,
-          duration = groups[j][i].duration,
-          lock = node.__transition__ || (node.__transition__ = {active: 0, count: 0});
-
-      ++lock.count;
-
-      delay <= elapsed ? start(elapsed) : d3.timer(start, delay, time);
-
-      function start(elapsed) {
-        if (lock.active > id) return stop();
-        lock.active = id;
-
-        for (var tween in tweens) {
-          if (tween = tweens[tween].call(node, d, i)) {
-            tweened.push(tween);
-          }
-        }
-
-        event.start.dispatch.call(node, d, i);
-        if (!tick(elapsed)) d3.timer(tick, 0, time);
-        return 1;
-      }
-
-      function tick(elapsed) {
-        if (lock.active !== id) return stop();
-
-        var t = (elapsed - delay) / duration,
-            e = ease(t),
-            n = tweened.length;
-
-        while (n > 0) {
-          tweened[--n].call(node, e);
-        }
-
-        if (t >= 1) {
-          stop();
-          d3_transitionInheritId = id;
-          event.end.dispatch.call(node, d, i);
-          d3_transitionInheritId = 0;
-          return 1;
-        }
-      }
-
-      function stop() {
-        if (!--lock.count) delete node.__transition__;
-        return 1;
-      }
-    });
-    return 1;
-  }, 0, time);
-
-  return groups;
-}
-
-var d3_transitionRemove = {};
-
-function d3_transitionNull(d, i, a) {
-  return a != "" && d3_transitionRemove;
-}
-
-function d3_transitionTween(b) {
-
-  function transitionFunction(d, i, a) {
-    var v = b.call(this, d, i);
-    return v == null
-        ? a != "" && d3_transitionRemove
-        : a != v && d3.interpolate(a, v);
-  }
-
-  function transitionString(d, i, a) {
-    return a != b && d3.interpolate(a, b);
-  }
-
-  return typeof b === "function" ? transitionFunction
-      : b == null ? d3_transitionNull
-      : (b += "", transitionString);
-}
-
-var d3_transitionPrototype = [],
-    d3_transitionId = 0,
-    d3_transitionInheritId = 0,
-    d3_transitionEase = d3.ease("cubic-in-out");
-
-d3_transitionPrototype.call = d3_selectionPrototype.call;
-
-d3.transition = function() {
-  return d3_selectionRoot.transition();
-};
-
-d3.transition.prototype = d3_transitionPrototype;
-d3_transitionPrototype.select = function(selector) {
-  var subgroups = [],
-      subgroup,
-      subnode,
-      node;
-
-  if (typeof selector !== "function") selector = d3_selection_selector(selector);
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    subgroups.push(subgroup = []);
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      if ((node = group[i]) && (subnode = selector.call(node.node, node.node.__data__, i))) {
-        if ("__data__" in node.node) subnode.__data__ = node.node.__data__;
-        subgroup.push({node: subnode, delay: node.delay, duration: node.duration});
-      } else {
-        subgroup.push(null);
-      }
-    }
-  }
-
-  return d3_transition(subgroups, this.id, this.time).ease(this.ease());
-};
-d3_transitionPrototype.selectAll = function(selector) {
-  var subgroups = [],
-      subgroup,
-      subnodes,
-      node;
-
-  if (typeof selector !== "function") selector = d3_selection_selectorAll(selector);
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      if (node = group[i]) {
-        subnodes = selector.call(node.node, node.node.__data__, i);
-        subgroups.push(subgroup = []);
-        for (var k = -1, o = subnodes.length; ++k < o;) {
-          subgroup.push({node: subnodes[k], delay: node.delay, duration: node.duration});
-        }
-      }
-    }
-  }
-
-  return d3_transition(subgroups, this.id, this.time).ease(this.ease());
-};
-d3_transitionPrototype.attr = function(name, value) {
-  return this.attrTween(name, d3_transitionTween(value));
-};
-
-d3_transitionPrototype.attrTween = function(nameNS, tween) {
-  var name = d3.ns.qualify(nameNS);
-
-  function attrTween(d, i) {
-    var f = tween.call(this, d, i, this.getAttribute(name));
-    return f === d3_transitionRemove
-        ? (this.removeAttribute(name), null)
-        : f && function(t) { this.setAttribute(name, f(t)); };
-  }
-
-  function attrTweenNS(d, i) {
-    var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));
-    return f === d3_transitionRemove
-        ? (this.removeAttributeNS(name.space, name.local), null)
-        : f && function(t) { this.setAttributeNS(name.space, name.local, f(t)); };
-  }
-
-  return this.tween("attr." + nameNS, name.local ? attrTweenNS : attrTween);
-};
-d3_transitionPrototype.style = function(name, value, priority) {
-  if (arguments.length < 3) priority = "";
-  return this.styleTween(name, d3_transitionTween(value), priority);
-};
-
-d3_transitionPrototype.styleTween = function(name, tween, priority) {
-  if (arguments.length < 3) priority = "";
-  return this.tween("style." + name, function(d, i) {
-    var f = tween.call(this, d, i, window.getComputedStyle(this, null).getPropertyValue(name));
-    return f === d3_transitionRemove
-        ? (this.style.removeProperty(name), null)
-        : f && function(t) { this.style.setProperty(name, f(t), priority); };
-  });
-};
-d3_transitionPrototype.text = function(value) {
-  return this.tween("text", function(d, i) {
-    this.textContent = typeof value === "function"
-        ? value.call(this, d, i)
-        : value;
-  });
-};
-d3_transitionPrototype.remove = function() {
-  return this.each("end", function() {
-    var p;
-    if (!this.__transition__ && (p = this.parentNode)) p.removeChild(this);
-  });
-};
-d3_transitionPrototype.delay = function(value) {
-  var groups = this;
-  return groups.each(typeof value === "function"
-      ? function(d, i, j) { groups[j][i].delay = +value.apply(this, arguments); }
-      : (value = +value, function(d, i, j) { groups[j][i].delay = value; }));
-};
-d3_transitionPrototype.duration = function(value) {
-  var groups = this;
-  return groups.each(typeof value === "function"
-      ? function(d, i, j) { groups[j][i].duration = +value.apply(this, arguments); }
-      : (value = +value, function(d, i, j) { groups[j][i].duration = value; }));
-};
-function d3_transition_each(callback) {
-  for (var j = 0, m = this.length; j < m; j++) {
-    for (var group = this[j], i = 0, n = group.length; i < n; i++) {
-      var node = group[i];
-      if (node) callback.call(node = node.node, node.__data__, i, j);
-    }
-  }
-  return this;
-}
-d3_transitionPrototype.transition = function() {
-  return this.select(d3_this);
-};
-var d3_timer_queue = null,
-    d3_timer_interval, // is an interval (or frame) active?
-    d3_timer_timeout; // is a timeout active?
-
-// The timer will continue to fire until callback returns true.
-d3.timer = function(callback, delay, then) {
-  var found = false,
-      t0,
-      t1 = d3_timer_queue;
-
-  if (arguments.length < 3) {
-    if (arguments.length < 2) delay = 0;
-    else if (!isFinite(delay)) return;
-    then = Date.now();
-  }
-
-  // See if the callback's already in the queue.
-  while (t1) {
-    if (t1.callback === callback) {
-      t1.then = then;
-      t1.delay = delay;
-      found = true;
-      break;
-    }
-    t0 = t1;
-    t1 = t1.next;
-  }
-
-  // Otherwise, add the callback to the queue.
-  if (!found) d3_timer_queue = {
-    callback: callback,
-    then: then,
-    delay: delay,
-    next: d3_timer_queue
-  };
-
-  // Start animatin'!
-  if (!d3_timer_interval) {
-    d3_timer_timeout = clearTimeout(d3_timer_timeout);
-    d3_timer_interval = 1;
-    d3_timer_frame(d3_timer_step);
-  }
-}
-
-function d3_timer_step() {
-  var elapsed,
-      now = Date.now(),
-      t1 = d3_timer_queue;
-
-  while (t1) {
-    elapsed = now - t1.then;
-    if (elapsed >= t1.delay) t1.flush = t1.callback(elapsed);
-    t1 = t1.next;
-  }
-
-  var delay = d3_timer_flush() - now;
-  if (delay > 24) {
-    if (isFinite(delay)) {
-      clearTimeout(d3_timer_timeout);
-      d3_timer_timeout = setTimeout(d3_timer_step, delay);
-    }
-    d3_timer_interval = 0;
-  } else {
-    d3_timer_interval = 1;
-    d3_timer_frame(d3_timer_step);
-  }
-}
-
-d3.timer.flush = function() {
-  var elapsed,
-      now = Date.now(),
-      t1 = d3_timer_queue;
-
-  while (t1) {
-    elapsed = now - t1.then;
-    if (!t1.delay) t1.flush = t1.callback(elapsed);
-    t1 = t1.next;
-  }
-
-  d3_timer_flush();
-};
-
-// Flush after callbacks, to avoid concurrent queue modification.
-function d3_timer_flush() {
-  var t0 = null,
-      t1 = d3_timer_queue,
-      then = Infinity;
-  while (t1) {
-    if (t1.flush) {
-      t1 = t0 ? t0.next = t1.next : d3_timer_queue = t1.next;
-    } else {
-      then = Math.min(then, t1.then + t1.delay);
-      t1 = (t0 = t1).next;
-    }
-  }
-  return then;
-}
-
-var d3_timer_frame = window.requestAnimationFrame
-    || window.webkitRequestAnimationFrame
-    || window.mozRequestAnimationFrame
-    || window.oRequestAnimationFrame
-    || window.msRequestAnimationFrame
-    || function(callback) { setTimeout(callback, 17); };
-function d3_noop() {}
-d3.scale = {};
-
-function d3_scaleExtent(domain) {
-  var start = domain[0], stop = domain[domain.length - 1];
-  return start < stop ? [start, stop] : [stop, start];
-}
-function d3_scale_nice(domain, nice) {
-  var i0 = 0,
-      i1 = domain.length - 1,
-      x0 = domain[i0],
-      x1 = domain[i1],
-      dx;
-
-  if (x1 < x0) {
-    dx = i0; i0 = i1; i1 = dx;
-    dx = x0; x0 = x1; x1 = dx;
-  }
-
-  if (dx = x1 - x0) {
-    nice = nice(dx);
-    domain[i0] = nice.floor(x0);
-    domain[i1] = nice.ceil(x1);
-  }
-
-  return domain;
-}
-
-function d3_scale_niceDefault() {
-  return Math;
-}
-d3.scale.linear = function() {
-  return d3_scale_linear([0, 1], [0, 1], d3.interpolate, false);
-};
-
-function d3_scale_linear(domain, range, interpolate, clamp) {
-  var output,
-      input;
-
-  function rescale() {
-    var linear = domain.length == 2 ? d3_scale_bilinear : d3_scale_polylinear,
-        uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;
-    output = linear(domain, range, uninterpolate, interpolate);
-    input = linear(range, domain, uninterpolate, d3.interpolate);
-    return scale;
-  }
-
-  function scale(x) {
-    return output(x);
-  }
-
-  // Note: requires range is coercible to number!
-  scale.invert = function(y) {
-    return input(y);
-  };
-
-  scale.domain = function(x) {
-    if (!arguments.length) return domain;
-    domain = x.map(Number);
-    return rescale();
-  };
-
-  scale.range = function(x) {
-    if (!arguments.length) return range;
-    range = x;
-    return rescale();
-  };
-
-  scale.rangeRound = function(x) {
-    return scale.range(x).interpolate(d3.interpolateRound);
-  };
-
-  scale.clamp = function(x) {
-    if (!arguments.length) return clamp;
-    clamp = x;
-    return rescale();
-  };
-
-  scale.interpolate = function(x) {
-    if (!arguments.length) return interpolate;
-    interpolate = x;
-    return rescale();
-  };
-
-  scale.ticks = function(m) {
-    return d3_scale_linearTicks(domain, m);
-  };
-
-  scale.tickFormat = function(m) {
-    return d3_scale_linearTickFormat(domain, m);
-  };
-
-  scale.nice = function() {
-    d3_scale_nice(domain, d3_scale_linearNice);
-    return rescale();
-  };
-
-  scale.copy = function() {
-    return d3_scale_linear(domain, range, interpolate, clamp);
-  };
-
-  return rescale();
-};
-
-function d3_scale_linearRebind(scale, linear) {
-  scale.range = d3.rebind(scale, linear.range);
-  scale.rangeRound = d3.rebind(scale, linear.rangeRound);
-  scale.interpolate = d3.rebind(scale, linear.interpolate);
-  scale.clamp = d3.rebind(scale, linear.clamp);
-  return scale;
-}
-
-function d3_scale_linearNice(dx) {
-  dx = Math.pow(10, Math.round(Math.log(dx) / Math.LN10) - 1);
-  return {
-    floor: function(x) { return Math.floor(x / dx) * dx; },
-    ceil: function(x) { return Math.ceil(x / dx) * dx; }
-  };
-}
-
-// TODO Dates? Ugh.
-function d3_scale_linearTickRange(domain, m) {
-  var extent = d3_scaleExtent(domain),
-      span = extent[1] - extent[0],
-      step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)),
-      err = m / span * step;
-
-  // Filter ticks to get closer to the desired count.
-  if (err <= .15) step *= 10;
-  else if (err <= .35) step *= 5;
-  else if (err <= .75) step *= 2;
-
-  // Round start and stop values to step interval.
-  extent[0] = Math.ceil(extent[0] / step) * step;
-  extent[1] = Math.floor(extent[1] / step) * step + step * .5; // inclusive
-  extent[2] = step;
-  return extent;
-}
-
-function d3_scale_linearTicks(domain, m) {
-  return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));
-}
-
-function d3_scale_linearTickFormat(domain, m) {
-  return d3.format(",." + Math.max(0, -Math.floor(Math.log(d3_scale_linearTickRange(domain, m)[2]) / Math.LN10 + .01)) + "f");
-}
-function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {
-  var u = uninterpolate(domain[0], domain[1]),
-      i = interpolate(range[0], range[1]);
-  return function(x) {
-    return i(u(x));
-  };
-}
-function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {
-  var u = [],
-      i = [],
-      j = 0,
-      n = domain.length;
-
-  while (++j < n) {
-    u.push(uninterpolate(domain[j - 1], domain[j]));
-    i.push(interpolate(range[j - 1], range[j]));
-  }
-
-  return function(x) {
-    var j = d3.bisect(domain, x, 1, domain.length - 1) - 1;
-    return i[j](u[j](x));
-  };
-}
-d3.scale.log = function() {
-  return d3_scale_log(d3.scale.linear(), d3_scale_logp);
-};
-
-function d3_scale_log(linear, log) {
-  var pow = log.pow;
-
-  function scale(x) {
-    return linear(log(x));
-  }
-
-  scale.invert = function(x) {
-    return pow(linear.invert(x));
-  };
-
-  scale.domain = function(x) {
-    if (!arguments.length) return linear.domain().map(pow);
-    log = x[0] < 0 ? d3_scale_logn : d3_scale_logp;
-    pow = log.pow;
-    linear.domain(x.map(log));
-    return scale;
-  };
-
-  scale.nice = function() {
-    linear.domain(d3_scale_nice(linear.domain(), d3_scale_niceDefault));
-    return scale;
-  };
-
-  scale.ticks = function() {
-    var extent = d3_scaleExtent(linear.domain()),
-        ticks = [];
-    if (extent.every(isFinite)) {
-      var i = Math.floor(extent[0]),
-          j = Math.ceil(extent[1]),
-          u = Math.round(pow(extent[0])),
-          v = Math.round(pow(extent[1]));
-      if (log === d3_scale_logn) {
-        ticks.push(pow(i));
-        for (; i++ < j;) for (var k = 9; k > 0; k--) ticks.push(pow(i) * k);
-      } else {
-        for (; i < j; i++) for (var k = 1; k < 10; k++) ticks.push(pow(i) * k);
-        ticks.push(pow(i));
-      }
-      for (i = 0; ticks[i] < u; i++) {} // strip small values
-      for (j = ticks.length; ticks[j - 1] > v; j--) {} // strip big values
-      ticks = ticks.slice(i, j);
-    }
-    return ticks;
-  };
-
-  scale.tickFormat = function(n, format) {
-    if (arguments.length < 2) format = d3_scale_logFormat;
-    if (arguments.length < 1) return format;
-    var k = n / scale.ticks().length,
-        f = log === d3_scale_logn ? (e = -1e-15, Math.floor) : (e = 1e-15, Math.ceil),
-        e;
-    return function(d) {
-      return d / pow(f(log(d) + e)) < k ? format(d) : "";
-    };
-  };
-
-  scale.copy = function() {
-    return d3_scale_log(linear.copy(), log);
-  };
-
-  return d3_scale_linearRebind(scale, linear);
-};
-
-var d3_scale_logFormat = d3.format("e");
-
-function d3_scale_logp(x) {
-  return Math.log(x) / Math.LN10;
-}
-
-function d3_scale_logn(x) {
-  return -Math.log(-x) / Math.LN10;
-}
-
-d3_scale_logp.pow = function(x) {
-  return Math.pow(10, x);
-};
-
-d3_scale_logn.pow = function(x) {
-  return -Math.pow(10, -x);
-};
-d3.scale.pow = function() {
-  return d3_scale_pow(d3.scale.linear(), 1);
-};
-
-function d3_scale_pow(linear, exponent) {
-  var powp = d3_scale_powPow(exponent),
-      powb = d3_scale_powPow(1 / exponent);
-
-  function scale(x) {
-    return linear(powp(x));
-  }
-
-  scale.invert = function(x) {
-    return powb(linear.invert(x));
-  };
-
-  scale.domain = function(x) {
-    if (!arguments.length) return linear.domain().map(powb);
-    linear.domain(x.map(powp));
-    return scale;
-  };
-
-  scale.ticks = function(m) {
-    return d3_scale_linearTicks(scale.domain(), m);
-  };
-
-  scale.tickFormat = function(m) {
-    return d3_scale_linearTickFormat(scale.domain(), m);
-  };
-
-  scale.nice = function() {
-    return scale.domain(d3_scale_nice(scale.domain(), d3_scale_linearNice));
-  };
-
-  scale.exponent = function(x) {
-    if (!arguments.length) return exponent;
-    var domain = scale.domain();
-    powp = d3_scale_powPow(exponent = x);
-    powb = d3_scale_powPow(1 / exponent);
-    return scale.domain(domain);
-  };
-
-  scale.copy = function() {
-    return d3_scale_pow(linear.copy(), exponent);
-  };
-
-  return d3_scale_linearRebind(scale, linear);
-};
-
-function d3_scale_powPow(e) {
-  return function(x) {
-    return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);
-  };
-}
-d3.scale.sqrt = function() {
-  return d3.scale.pow().exponent(.5);
-};
-d3.scale.ordinal = function() {
-  return d3_scale_ordinal([], {t: "range", x: []});
-};
-
-function d3_scale_ordinal(domain, ranger) {
-  var index,
-      range,
-      rangeBand;
-
-  function scale(x) {
-    return range[((index[x] || (index[x] = domain.push(x))) - 1) % range.length];
-  }
-
-  scale.domain = function(x) {
-    if (!arguments.length) return domain;
-    domain = [];
-    index = {};
-    var i = -1, n = x.length, xi;
-    while (++i < n) if (!index[xi = x[i]]) index[xi] = domain.push(xi);
-    return scale[ranger.t](ranger.x, ranger.p);
-  };
-
-  scale.range = function(x) {
-    if (!arguments.length) return range;
-    range = x;
-    rangeBand = 0;
-    ranger = {t: "range", x: x};
-    return scale;
-  };
-
-  scale.rangePoints = function(x, padding) {
-    if (arguments.length < 2) padding = 0;
-    var start = x[0],
-        stop = x[1],
-        step = (stop - start) / (domain.length - 1 + padding);
-    range = domain.length < 2 ? [(start + stop) / 2] : d3.range(start + step * padding / 2, stop + step / 2, step);
-    rangeBand = 0;
-    ranger = {t: "rangePoints", x: x, p: padding};
-    return scale;
-  };
-
-  scale.rangeBands = function(x, padding) {
-    if (arguments.length < 2) padding = 0;
-    var start = x[0],
-        stop = x[1],
-        step = (stop - start) / (domain.length + padding);
-    range = d3.range(start + step * padding, stop, step);
-    rangeBand = step * (1 - padding);
-    ranger = {t: "rangeBands", x: x, p: padding};
-    return scale;
-  };
-
-  scale.rangeRoundBands = function(x, padding) {
-    if (arguments.length < 2) padding = 0;
-    var start = x[0],
-        stop = x[1],
-        step = Math.floor((stop - start) / (domain.length + padding)),
-        err = stop - start - (domain.length - padding) * step;
-    range = d3.range(start + Math.round(err / 2), stop, step);
-    rangeBand = Math.round(step * (1 - padding));
-    ranger = {t: "rangeRoundBands", x: x, p: padding};
-    return scale;
-  };
-
-  scale.rangeBand = function() {
-    return rangeBand;
-  };
-
-  scale.copy = function() {
-    return d3_scale_ordinal(domain, ranger);
-  };
-
-  return scale.domain(domain);
-};
-/*
- * This product includes color specifications and designs developed by Cynthia
- * Brewer (http://colorbrewer.org/). See lib/colorbrewer for more information.
- */
-
-d3.scale.category10 = function() {
-  return d3.scale.ordinal().range(d3_category10);
-};
-
-d3.scale.category20 = function() {
-  return d3.scale.ordinal().range(d3_category20);
-};
-
-d3.scale.category20b = function() {
-  return d3.scale.ordinal().range(d3_category20b);
-};
-
-d3.scale.category20c = function() {
-  return d3.scale.ordinal().range(d3_category20c);
-};
-
-var d3_category10 = [
-  "#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd",
-  "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"
-];
-
-var d3_category20 = [
-  "#1f77b4", "#aec7e8",
-  "#ff7f0e", "#ffbb78",
-  "#2ca02c", "#98df8a",
-  "#d62728", "#ff9896",
-  "#9467bd", "#c5b0d5",
-  "#8c564b", "#c49c94",
-  "#e377c2", "#f7b6d2",
-  "#7f7f7f", "#c7c7c7",
-  "#bcbd22", "#dbdb8d",
-  "#17becf", "#9edae5"
-];
-
-var d3_category20b = [
-  "#393b79", "#5254a3", "#6b6ecf", "#9c9ede",
-  "#637939", "#8ca252", "#b5cf6b", "#cedb9c",
-  "#8c6d31", "#bd9e39", "#e7ba52", "#e7cb94",
-  "#843c39", "#ad494a", "#d6616b", "#e7969c",
-  "#7b4173", "#a55194", "#ce6dbd", "#de9ed6"
-];
-
-var d3_category20c = [
-  "#3182bd", "#6baed6", "#9ecae1", "#c6dbef",
-  "#e6550d", "#fd8d3c", "#fdae6b", "#fdd0a2",
-  "#31a354", "#74c476", "#a1d99b", "#c7e9c0",
-  "#756bb1", "#9e9ac8", "#bcbddc", "#dadaeb",
-  "#636363", "#969696", "#bdbdbd", "#d9d9d9"
-];
-d3.scale.quantile = function() {
-  return d3_scale_quantile([], []);
-};
-
-function d3_scale_quantile(domain, range) {
-  var thresholds;
-
-  function rescale() {
-    var k = 0,
-        n = domain.length,
-        q = range.length;
-    thresholds = [];
-    while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);
-    return scale;
-  }
-
-  function scale(x) {
-    if (isNaN(x = +x)) return NaN;
-    return range[d3.bisect(thresholds, x)];
-  }
-
-  scale.domain = function(x) {
-    if (!arguments.length) return domain;
-    domain = x.filter(function(d) { return !isNaN(d); }).sort(d3.ascending);
-    return rescale();
-  };
-
-  scale.range = function(x) {
-    if (!arguments.length) return range;
-    range = x;
-    return rescale();
-  };
-
-  scale.quantiles = function() {
-    return thresholds;
-  };
-
-  scale.copy = function() {
-    return d3_scale_quantile(domain, range); // copy on write!
-  };
-
-  return rescale();
-};
-d3.scale.quantize = function() {
-  return d3_scale_quantize(0, 1, [0, 1]);
-};
-
-function d3_scale_quantize(x0, x1, range) {
-  var kx, i;
-
-  function scale(x) {
-    return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];
-  }
-
-  function rescale() {
-    kx = range.length / (x1 - x0);
-    i = range.length - 1;
-    return scale;
-  }
-
-  scale.domain = function(x) {
-    if (!arguments.length) return [x0, x1];
-    x0 = +x[0];
-    x1 = +x[x.length - 1];
-    return rescale();
-  };
-
-  scale.range = function(x) {
-    if (!arguments.length) return range;
-    range = x;
-    return rescale();
-  };
-
-  scale.copy = function() {
-    return d3_scale_quantize(x0, x1, range); // copy on write
-  };
-
-  return rescale();
-};
-d3.svg = {};
-d3.svg.arc = function() {
-  var innerRadius = d3_svg_arcInnerRadius,
-      outerRadius = d3_svg_arcOuterRadius,
-      startAngle = d3_svg_arcStartAngle,
-      endAngle = d3_svg_arcEndAngle;
-
-  function arc() {
-    var r0 = innerRadius.apply(this, arguments),
-        r1 = outerRadius.apply(this, arguments),
-        a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset,
-        a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset,
-        da = (a1 < a0 && (da = a0, a0 = a1, a1 = da), a1 - a0),
-        df = da < Math.PI ? "0" : "1",
-        c0 = Math.cos(a0),
-        s0 = Math.sin(a0),
-        c1 = Math.cos(a1),
-        s1 = Math.sin(a1);
-    return da >= d3_svg_arcMax
-      ? (r0
-      ? "M0," + r1
-      + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1)
-      + "A" + r1 + "," + r1 + " 0 1,1 0," + r1
-      + "M0," + r0
-      + "A" + r0 + "," + r0 + " 0 1,0 0," + (-r0)
-      + "A" + r0 + "," + r0 + " 0 1,0 0," + r0
-      + "Z"
-      : "M0," + r1
-      + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1)
-      + "A" + r1 + "," + r1 + " 0 1,1 0," + r1
-      + "Z")
-      : (r0
-      ? "M" + r1 * c0 + "," + r1 * s0
-      + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1
-      + "L" + r0 * c1 + "," + r0 * s1
-      + "A" + r0 + "," + r0 + " 0 " + df + ",0 " + r0 * c0 + "," + r0 * s0
-      + "Z"
-      : "M" + r1 * c0 + "," + r1 * s0
-      + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1
-      + "L0,0"
-      + "Z");
-  }
-
-  arc.innerRadius = function(v) {
-    if (!arguments.length) return innerRadius;
-    innerRadius = d3.functor(v);
-    return arc;
-  };
-
-  arc.outerRadius = function(v) {
-    if (!arguments.length) return outerRadius;
-    outerRadius = d3.functor(v);
-    return arc;
-  };
-
-  arc.startAngle = function(v) {
-    if (!arguments.length) return startAngle;
-    startAngle = d3.functor(v);
-    return arc;
-  };
-
-  arc.endAngle = function(v) {
-    if (!arguments.length) return endAngle;
-    endAngle = d3.functor(v);
-    return arc;
-  };
-
-  arc.centroid = function() {
-    var r = (innerRadius.apply(this, arguments)
-        + outerRadius.apply(this, arguments)) / 2,
-        a = (startAngle.apply(this, arguments)
-        + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset;
-    return [Math.cos(a) * r, Math.sin(a) * r];
-  };
-
-  return arc;
-};
-
-var d3_svg_arcOffset = -Math.PI / 2,
-    d3_svg_arcMax = 2 * Math.PI - 1e-6;
-
-function d3_svg_arcInnerRadius(d) {
-  return d.innerRadius;
-}
-
-function d3_svg_arcOuterRadius(d) {
-  return d.outerRadius;
-}
-
-function d3_svg_arcStartAngle(d) {
-  return d.startAngle;
-}
-
-function d3_svg_arcEndAngle(d) {
-  return d.endAngle;
-}
-function d3_svg_line(projection) {
-  var x = d3_svg_lineX,
-      y = d3_svg_lineY,
-      interpolate = "linear",
-      interpolator = d3_svg_lineInterpolators[interpolate],
-      tension = .7;
-
-  function line(d) {
-    return d.length < 1 ? null : "M" + interpolator(projection(d3_svg_linePoints(this, d, x, y)), tension);
-  }
-
-  line.x = function(v) {
-    if (!arguments.length) return x;
-    x = v;
-    return line;
-  };
-
-  line.y = function(v) {
-    if (!arguments.length) return y;
-    y = v;
-    return line;
-  };
-
-  line.interpolate = function(v) {
-    if (!arguments.length) return interpolate;
-    interpolator = d3_svg_lineInterpolators[interpolate = v];
-    return line;
-  };
-
-  line.tension = function(v) {
-    if (!arguments.length) return tension;
-    tension = v;
-    return line;
-  };
-
-  return line;
-}
-
-d3.svg.line = function() {
-  return d3_svg_line(Object);
-};
-
-// Converts the specified array of data into an array of points
-// (x-y tuples), by evaluating the specified `x` and `y` functions on each
-// data point. The `this` context of the evaluated functions is the specified
-// "self" object; each function is passed the current datum and index.
-function d3_svg_linePoints(self, d, x, y) {
-  var points = [],
-      i = -1,
-      n = d.length,
-      fx = typeof x === "function",
-      fy = typeof y === "function",
-      value;
-  if (fx && fy) {
-    while (++i < n) points.push([
-      x.call(self, value = d[i], i),
-      y.call(self, value, i)
-    ]);
-  } else if (fx) {
-    while (++i < n) points.push([x.call(self, d[i], i), y]);
-  } else if (fy) {
-    while (++i < n) points.push([x, y.call(self, d[i], i)]);
-  } else {
-    while (++i < n) points.push([x, y]);
-  }
-  return points;
-}
-
-// The default `x` property, which references d[0].
-function d3_svg_lineX(d) {
-  return d[0];
-}
-
-// The default `y` property, which references d[1].
-function d3_svg_lineY(d) {
-  return d[1];
-}
-
-// The various interpolators supported by the `line` class.
-var d3_svg_lineInterpolators = {
-  "linear": d3_svg_lineLinear,
-  "step-before": d3_svg_lineStepBefore,
-  "step-after": d3_svg_lineStepAfter,
-  "basis": d3_svg_lineBasis,
-  "basis-open": d3_svg_lineBasisOpen,
-  "basis-closed": d3_svg_lineBasisClosed,
-  "bundle": d3_svg_lineBundle,
-  "cardinal": d3_svg_lineCardinal,
-  "cardinal-open": d3_svg_lineCardinalOpen,
-  "cardinal-closed": d3_svg_lineCardinalClosed,
-  "monotone": d3_svg_lineMonotone
-};
-
-// Linear interpolation; generates "L" commands.
-function d3_svg_lineLinear(points) {
-  var i = 0,
-      n = points.length,
-      p = points[0],
-      path = [p[0], ",", p[1]];
-  while (++i < n) path.push("L", (p = points[i])[0], ",", p[1]);
-  return path.join("");
-}
-
-// Step interpolation; generates "H" and "V" commands.
-function d3_svg_lineStepBefore(points) {
-  var i = 0,
-      n = points.length,
-      p = points[0],
-      path = [p[0], ",", p[1]];
-  while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]);
-  return path.join("");
-}
-
-// Step interpolation; generates "H" and "V" commands.
-function d3_svg_lineStepAfter(points) {
-  var i = 0,
-      n = points.length,
-      p = points[0],
-      path = [p[0], ",", p[1]];
-  while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]);
-  return path.join("");
-}
-
-// Open cardinal spline interpolation; generates "C" commands.
-function d3_svg_lineCardinalOpen(points, tension) {
-  return points.length < 4
-      ? d3_svg_lineLinear(points)
-      : points[1] + d3_svg_lineHermite(points.slice(1, points.length - 1),
-        d3_svg_lineCardinalTangents(points, tension));
-}
-
-// Closed cardinal spline interpolation; generates "C" commands.
-function d3_svg_lineCardinalClosed(points, tension) {
-  return points.length < 3
-      ? d3_svg_lineLinear(points)
-      : points[0] + d3_svg_lineHermite((points.push(points[0]), points),
-        d3_svg_lineCardinalTangents([points[points.length - 2]]
-        .concat(points, [points[1]]), tension));
-}
-
-// Cardinal spline interpolation; generates "C" commands.
-function d3_svg_lineCardinal(points, tension, closed) {
-  return points.length < 3
-      ? d3_svg_lineLinear(points)
-      : points[0] + d3_svg_lineHermite(points,
-        d3_svg_lineCardinalTangents(points, tension));
-}
-
-// Hermite spline construction; generates "C" commands.
-function d3_svg_lineHermite(points, tangents) {
-  if (tangents.length < 1
-      || (points.length != tangents.length
-      && points.length != tangents.length + 2)) {
-    return d3_svg_lineLinear(points);
-  }
-
-  var quad = points.length != tangents.length,
-      path = "",
-      p0 = points[0],
-      p = points[1],
-      t0 = tangents[0],
-      t = t0,
-      pi = 1;
-
-  if (quad) {
-    path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3)
-        + "," + p[0] + "," + p[1];
-    p0 = points[1];
-    pi = 2;
-  }
-
-  if (tangents.length > 1) {
-    t = tangents[1];
-    p = points[pi];
-    pi++;
-    path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1])
-        + "," + (p[0] - t[0]) + "," + (p[1] - t[1])
-        + "," + p[0] + "," + p[1];
-    for (var i = 2; i < tangents.length; i++, pi++) {
-      p = points[pi];
-      t = tangents[i];
-      path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1])
-          + "," + p[0] + "," + p[1];
-    }
-  }
-
-  if (quad) {
-    var lp = points[pi];
-    path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3)
-        + "," + lp[0] + "," + lp[1];
-  }
-
-  return path;
-}
-
-// Generates tangents for a cardinal spline.
-function d3_svg_lineCardinalTangents(points, tension) {
-  var tangents = [],
-      a = (1 - tension) / 2,
-      p0,
-      p1 = points[0],
-      p2 = points[1],
-      i = 1,
-      n = points.length;
-  while (++i < n) {
-    p0 = p1;
-    p1 = p2;
-    p2 = points[i];
-    tangents.push([a * (p2[0] - p0[0]), a * (p2[1] - p0[1])]);
-  }
-  return tangents;
-}
-
-// B-spline interpolation; generates "C" commands.
-function d3_svg_lineBasis(points) {
-  if (points.length < 3) return d3_svg_lineLinear(points);
-  var i = 1,
-      n = points.length,
-      pi = points[0],
-      x0 = pi[0],
-      y0 = pi[1],
-      px = [x0, x0, x0, (pi = points[1])[0]],
-      py = [y0, y0, y0, pi[1]],
-      path = [x0, ",", y0];
-  d3_svg_lineBasisBezier(path, px, py);
-  while (++i < n) {
-    pi = points[i];
-    px.shift(); px.push(pi[0]);
-    py.shift(); py.push(pi[1]);
-    d3_svg_lineBasisBezier(path, px, py);
-  }
-  i = -1;
-  while (++i < 2) {
-    px.shift(); px.push(pi[0]);
-    py.shift(); py.push(pi[1]);
-    d3_svg_lineBasisBezier(path, px, py);
-  }
-  return path.join("");
-}
-
-// Open B-spline interpolation; generates "C" commands.
-function d3_svg_lineBasisOpen(points) {
-  if (points.length < 4) return d3_svg_lineLinear(points);
-  var path = [],
-      i = -1,
-      n = points.length,
-      pi,
-      px = [0],
-      py = [0];
-  while (++i < 3) {
-    pi = points[i];
-    px.push(pi[0]);
-    py.push(pi[1]);
-  }
-  path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px)
-    + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));
-  --i; while (++i < n) {
-    pi = points[i];
-    px.shift(); px.push(pi[0]);
-    py.shift(); py.push(pi[1]);
-    d3_svg_lineBasisBezier(path, px, py);
-  }
-  return path.join("");
-}
-
-// Closed B-spline interpolation; generates "C" commands.
-function d3_svg_lineBasisClosed(points) {
-  var path,
-      i = -1,
-      n = points.length,
-      m = n + 4,
-      pi,
-      px = [],
-      py = [];
-  while (++i < 4) {
-    pi = points[i % n];
-    px.push(pi[0]);
-    py.push(pi[1]);
-  }
-  path = [
-    d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",",
-    d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)
-  ];
-  --i; while (++i < m) {
-    pi = points[i % n];
-    px.shift(); px.push(pi[0]);
-    py.shift(); py.push(pi[1]);
-    d3_svg_lineBasisBezier(path, px, py);
-  }
-  return path.join("");
-}
-
-function d3_svg_lineBundle(points, tension) {
-  var n = points.length - 1,
-      x0 = points[0][0],
-      y0 = points[0][1],
-      dx = points[n][0] - x0,
-      dy = points[n][1] - y0,
-      i = -1,
-      p,
-      t;
-  while (++i <= n) {
-    p = points[i];
-    t = i / n;
-    p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);
-    p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);
-  }
-  return d3_svg_lineBasis(points);
-}
-
-// Returns the dot product of the given four-element vectors.
-function d3_svg_lineDot4(a, b) {
-  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
-}
-
-// Matrix to transform basis (b-spline) control points to bezier
-// control points. Derived from FvD 11.2.8.
-var d3_svg_lineBasisBezier1 = [0, 2/3, 1/3, 0],
-    d3_svg_lineBasisBezier2 = [0, 1/3, 2/3, 0],
-    d3_svg_lineBasisBezier3 = [0, 1/6, 2/3, 1/6];
-
-// Pushes a "C" Bézier curve onto the specified path array, given the
-// two specified four-element arrays which define the control points.
-function d3_svg_lineBasisBezier(path, x, y) {
-  path.push(
-      "C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));
-}
-
-// Computes the slope from points p0 to p1.
-function d3_svg_lineSlope(p0, p1) {
-  return (p1[1] - p0[1]) / (p1[0] - p0[0]);
-}
-
-// Compute three-point differences for the given points.
-// http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Finite_difference
-function d3_svg_lineFiniteDifferences(points) {
-  var i = 0,
-      j = points.length - 1,
-      m = [],
-      p0 = points[0],
-      p1 = points[1],
-      d = m[0] = d3_svg_lineSlope(p0, p1);
-  while (++i < j) {
-    m[i] = d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]));
-  }
-  m[i] = d;
-  return m;
-}
-
-// Interpolates the given points using Fritsch-Carlson Monotone cubic Hermite
-// interpolation. Returns an array of tangent vectors. For details, see
-// http://en.wikipedia.org/wiki/Monotone_cubic_interpolation
-function d3_svg_lineMonotoneTangents(points) {
-  var tangents = [],
-      d,
-      a,
-      b,
-      s,
-      m = d3_svg_lineFiniteDifferences(points),
-      i = -1,
-      j = points.length - 1;
-
-  // The first two steps are done by computing finite-differences:
-  // 1. Compute the slopes of the secant lines between successive points.
-  // 2. Initialize the tangents at every point as the average of the secants.
-
-  // Then, for each segment…
-  while (++i < j) {
-    d = d3_svg_lineSlope(points[i], points[i + 1]);
-
-    // 3. If two successive yk = y{k + 1} are equal (i.e., d is zero), then set
-    // mk = m{k + 1} = 0 as the spline connecting these points must be flat to
-    // preserve monotonicity. Ignore step 4 and 5 for those k.
-
-    if (Math.abs(d) < 1e-6) {
-      m[i] = m[i + 1] = 0;
-    } else {
-      // 4. Let ak = mk / dk and bk = m{k + 1} / dk.
-      a = m[i] / d;
-      b = m[i + 1] / d;
-
-      // 5. Prevent overshoot and ensure monotonicity by restricting the
-      // magnitude of vector <ak, bk> to a circle of radius 3.
-      s = a * a + b * b;
-      if (s > 9) {
-        s = d * 3 / Math.sqrt(s);
-        m[i] = s * a;
-        m[i + 1] = s * b;
-      }
-    }
-  }
-
-  // Compute the normalized tangent vector from the slopes. Note that if x is
-  // not monotonic, it's possible that the slope will be infinite, so we protect
-  // against NaN by setting the coordinate to zero.
-  i = -1; while (++i <= j) {
-    s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0])
-      / (6 * (1 + m[i] * m[i]));
-    tangents.push([s || 0, m[i] * s || 0]);
-  }
-
-  return tangents;
-}
-
-function d3_svg_lineMonotone(points) {
-  return points.length < 3
-      ? d3_svg_lineLinear(points)
-      : points[0] +
-        d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));
-}
-d3.svg.line.radial = function() {
-  var line = d3_svg_line(d3_svg_lineRadial);
-  line.radius = line.x, delete line.x;
-  line.angle = line.y, delete line.y;
-  return line;
-};
-
-function d3_svg_lineRadial(points) {
-  var point,
-      i = -1,
-      n = points.length,
-      r,
-      a;
-  while (++i < n) {
-    point = points[i];
-    r = point[0];
-    a = point[1] + d3_svg_arcOffset;
-    point[0] = r * Math.cos(a);
-    point[1] = r * Math.sin(a);
-  }
-  return points;
-}
-function d3_svg_area(projection) {
-  var x0 = d3_svg_lineX,
-      x1 = d3_svg_lineX,
-      y0 = 0,
-      y1 = d3_svg_lineY,
-      interpolate,
-      i0,
-      i1,
-      tension = .7;
-
-  function area(d) {
-    if (d.length < 1) return null;
-    var points0 = d3_svg_linePoints(this, d, x0, y0),
-        points1 = d3_svg_linePoints(this, d, x0 === x1 ? d3_svg_areaX(points0) : x1, y0 === y1 ? d3_svg_areaY(points0) : y1);
-    return "M" + i0(projection(points1), tension)
-         + "L" + i1(projection(points0.reverse()), tension)
-         + "Z";
-  }
-
-  area.x = function(x) {
-    if (!arguments.length) return x1;
-    x0 = x1 = x;
-    return area;
-  };
-
-  area.x0 = function(x) {
-    if (!arguments.length) return x0;
-    x0 = x;
-    return area;
-  };
-
-  area.x1 = function(x) {
-    if (!arguments.length) return x1;
-    x1 = x;
-    return area;
-  };
-
-  area.y = function(y) {
-    if (!arguments.length) return y1;
-    y0 = y1 = y;
-    return area;
-  };
-
-  area.y0 = function(y) {
-    if (!arguments.length) return y0;
-    y0 = y;
-    return area;
-  };
-
-  area.y1 = function(y) {
-    if (!arguments.length) return y1;
-    y1 = y;
-    return area;
-  };
-
-  area.interpolate = function(x) {
-    if (!arguments.length) return interpolate;
-    i0 = d3_svg_lineInterpolators[interpolate = x];
-    i1 = i0.reverse || i0;
-    return area;
-  };
-
-  area.tension = function(x) {
-    if (!arguments.length) return tension;
-    tension = x;
-    return area;
-  };
-
-  return area.interpolate("linear");
-}
-
-d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter;
-d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore;
-
-d3.svg.area = function() {
-  return d3_svg_area(Object);
-};
-
-function d3_svg_areaX(points) {
-  return function(d, i) {
-    return points[i][0];
-  };
-}
-
-function d3_svg_areaY(points) {
-  return function(d, i) {
-    return points[i][1];
-  };
-}
-d3.svg.area.radial = function() {
-  var area = d3_svg_area(d3_svg_lineRadial);
-  area.radius = area.x, delete area.x;
-  area.innerRadius = area.x0, delete area.x0;
-  area.outerRadius = area.x1, delete area.x1;
-  area.angle = area.y, delete area.y;
-  area.startAngle = area.y0, delete area.y0;
-  area.endAngle = area.y1, delete area.y1;
-  return area;
-};
-d3.svg.chord = function() {
-  var source = d3_svg_chordSource,
-      target = d3_svg_chordTarget,
-      radius = d3_svg_chordRadius,
-      startAngle = d3_svg_arcStartAngle,
-      endAngle = d3_svg_arcEndAngle;
-
-  // TODO Allow control point to be customized.
-
-  function chord(d, i) {
-    var s = subgroup(this, source, d, i),
-        t = subgroup(this, target, d, i);
-    return "M" + s.p0
-      + arc(s.r, s.p1) + (equals(s, t)
-      ? curve(s.r, s.p1, s.r, s.p0)
-      : curve(s.r, s.p1, t.r, t.p0)
-      + arc(t.r, t.p1)
-      + curve(t.r, t.p1, s.r, s.p0))
-      + "Z";
-  }
-
-  function subgroup(self, f, d, i) {
-    var subgroup = f.call(self, d, i),
-        r = radius.call(self, subgroup, i),
-        a0 = startAngle.call(self, subgroup, i) + d3_svg_arcOffset,
-        a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset;
-    return {
-      r: r,
-      a0: a0,
-      a1: a1,
-      p0: [r * Math.cos(a0), r * Math.sin(a0)],
-      p1: [r * Math.cos(a1), r * Math.sin(a1)]
-    };
-  }
-
-  function equals(a, b) {
-    return a.a0 == b.a0 && a.a1 == b.a1;
-  }
-
-  function arc(r, p) {
-    return "A" + r + "," + r + " 0 0,1 " + p;
-  }
-
-  function curve(r0, p0, r1, p1) {
-    return "Q 0,0 " + p1;
-  }
-
-  chord.radius = function(v) {
-    if (!arguments.length) return radius;
-    radius = d3.functor(v);
-    return chord;
-  };
-
-  chord.source = function(v) {
-    if (!arguments.length) return source;
-    source = d3.functor(v);
-    return chord;
-  };
-
-  chord.target = function(v) {
-    if (!arguments.length) return target;
-    target = d3.functor(v);
-    return chord;
-  };
-
-  chord.startAngle = function(v) {
-    if (!arguments.length) return startAngle;
-    startAngle = d3.functor(v);
-    return chord;
-  };
-
-  chord.endAngle = function(v) {
-    if (!arguments.length) return endAngle;
-    endAngle = d3.functor(v);
-    return chord;
-  };
-
-  return chord;
-};
-
-function d3_svg_chordSource(d) {
-  return d.source;
-}
-
-function d3_svg_chordTarget(d) {
-  return d.target;
-}
-
-function d3_svg_chordRadius(d) {
-  return d.radius;
-}
-
-function d3_svg_chordStartAngle(d) {
-  return d.startAngle;
-}
-
-function d3_svg_chordEndAngle(d) {
-  return d.endAngle;
-}
-d3.svg.diagonal = function() {
-  var source = d3_svg_chordSource,
-      target = d3_svg_chordTarget,
-      projection = d3_svg_diagonalProjection;
-
-  function diagonal(d, i) {
-    var p0 = source.call(this, d, i),
-        p3 = target.call(this, d, i),
-        m = (p0.y + p3.y) / 2,
-        p = [p0, {x: p0.x, y: m}, {x: p3.x, y: m}, p3];
-    p = p.map(projection);
-    return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3];
-  }
-
-  diagonal.source = function(x) {
-    if (!arguments.length) return source;
-    source = d3.functor(x);
-    return diagonal;
-  };
-
-  diagonal.target = function(x) {
-    if (!arguments.length) return target;
-    target = d3.functor(x);
-    return diagonal;
-  };
-
-  diagonal.projection = function(x) {
-    if (!arguments.length) return projection;
-    projection = x;
-    return diagonal;
-  };
-
-  return diagonal;
-};
-
-function d3_svg_diagonalProjection(d) {
-  return [d.x, d.y];
-}
-d3.svg.diagonal.radial = function() {
-  var diagonal = d3.svg.diagonal(),
-      projection = d3_svg_diagonalProjection,
-      projection_ = diagonal.projection;
-
-  diagonal.projection = function(x) {
-    return arguments.length
-        ? projection_(d3_svg_diagonalRadialProjection(projection = x))
-        : projection;
-  };
-
-  return diagonal;
-};
-
-function d3_svg_diagonalRadialProjection(projection) {
-  return function() {
-    var d = projection.apply(this, arguments),
-        r = d[0],
-        a = d[1] + d3_svg_arcOffset;
-    return [r * Math.cos(a), r * Math.sin(a)];
-  };
-}
-d3.svg.mouse = function(container) {
-  return d3_svg_mousePoint(container, d3.event);
-};
-
-// https://bugs.webkit.org/show_bug.cgi?id=44083
-var d3_mouse_bug44083 = /WebKit/.test(navigator.userAgent) ? -1 : 0;
-
-function d3_svg_mousePoint(container, e) {
-  var point = (container.ownerSVGElement || container).createSVGPoint();
-  if ((d3_mouse_bug44083 < 0) && (window.scrollX || window.scrollY)) {
-    var svg = d3.select(document.body)
-      .append("svg:svg")
-        .style("position", "absolute")
-        .style("top", 0)
-        .style("left", 0);
-    var ctm = svg[0][0].getScreenCTM();
-    d3_mouse_bug44083 = !(ctm.f || ctm.e);
-    svg.remove();
-  }
-  if (d3_mouse_bug44083) {
-    point.x = e.pageX;
-    point.y = e.pageY;
-  } else {
-    point.x = e.clientX;
-    point.y = e.clientY;
-  }
-  point = point.matrixTransform(container.getScreenCTM().inverse());
-  return [point.x, point.y];
-};
-d3.svg.touches = function(container) {
-  var touches = d3.event.touches;
-  return touches ? d3_array(touches).map(function(touch) {
-    var point = d3_svg_mousePoint(container, touch);
-    point.identifier = touch.identifier;
-    return point;
-  }) : [];
-};
-d3.svg.symbol = function() {
-  var type = d3_svg_symbolType,
-      size = d3_svg_symbolSize;
-
-  function symbol(d, i) {
-    return (d3_svg_symbols[type.call(this, d, i)]
-        || d3_svg_symbols.circle)
-        (size.call(this, d, i));
-  }
-
-  symbol.type = function(x) {
-    if (!arguments.length) return type;
-    type = d3.functor(x);
-    return symbol;
-  };
-
-  // size of symbol in square pixels
-  symbol.size = function(x) {
-    if (!arguments.length) return size;
-    size = d3.functor(x);
-    return symbol;
-  };
-
-  return symbol;
-};
-
-function d3_svg_symbolSize() {
-  return 64;
-}
-
-function d3_svg_symbolType() {
-  return "circle";
-}
-
-// TODO cross-diagonal?
-var d3_svg_symbols = {
-  "circle": function(size) {
-    var r = Math.sqrt(size / Math.PI);
-    return "M0," + r
-        + "A" + r + "," + r + " 0 1,1 0," + (-r)
-        + "A" + r + "," + r + " 0 1,1 0," + r
-        + "Z";
-  },
-  "cross": function(size) {
-    var r = Math.sqrt(size / 5) / 2;
-    return "M" + -3 * r + "," + -r
-        + "H" + -r
-        + "V" + -3 * r
-        + "H" + r
-        + "V" + -r
-        + "H" + 3 * r
-        + "V" + r
-        + "H" + r
-        + "V" + 3 * r
-        + "H" + -r
-        + "V" + r
-        + "H" + -3 * r
-        + "Z";
-  },
-  "diamond": function(size) {
-    var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)),
-        rx = ry * d3_svg_symbolTan30;
-    return "M0," + -ry
-        + "L" + rx + ",0"
-        + " 0," + ry
-        + " " + -rx + ",0"
-        + "Z";
-  },
-  "square": function(size) {
-    var r = Math.sqrt(size) / 2;
-    return "M" + -r + "," + -r
-        + "L" + r + "," + -r
-        + " " + r + "," + r
-        + " " + -r + "," + r
-        + "Z";
-  },
-  "triangle-down": function(size) {
-    var rx = Math.sqrt(size / d3_svg_symbolSqrt3),
-        ry = rx * d3_svg_symbolSqrt3 / 2;
-    return "M0," + ry
-        + "L" + rx +"," + -ry
-        + " " + -rx + "," + -ry
-        + "Z";
-  },
-  "triangle-up": function(size) {
-    var rx = Math.sqrt(size / d3_svg_symbolSqrt3),
-        ry = rx * d3_svg_symbolSqrt3 / 2;
-    return "M0," + -ry
-        + "L" + rx +"," + ry
-        + " " + -rx + "," + ry
-        + "Z";
-  }
-};
-
-d3.svg.symbolTypes = d3.keys(d3_svg_symbols);
-
-var d3_svg_symbolSqrt3 = Math.sqrt(3),
-    d3_svg_symbolTan30 = Math.tan(30 * Math.PI / 180);
-d3.svg.axis = function() {
-  var scale = d3.scale.linear(),
-      orient = "bottom",
-      tickMajorSize = 6,
-      tickMinorSize = 6,
-      tickEndSize = 6,
-      tickPadding = 3,
-      tickArguments_ = [10],
-      tickFormat_,
-      tickSubdivide = 0;
-
-  function axis(selection) {
-    selection.each(function(d, i, j) {
-      var g = d3.select(this);
-
-      // If selection is a transition, create subtransitions.
-      var transition = selection.delay ? function(o) {
-        var id = d3_transitionInheritId;
-        try {
-          d3_transitionInheritId = selection.id;
-          return o.transition()
-              .delay(selection[j][i].delay)
-              .duration(selection[j][i].duration)
-              .ease(selection.ease());
-        } finally {
-          d3_transitionInheritId = id;
-        }
-      } : Object;
-
-      // Ticks.
-      var ticks = scale.ticks.apply(scale, tickArguments_),
-          tickFormat = tickFormat_ == null ? scale.tickFormat.apply(scale, tickArguments_) : tickFormat_;
-
-      // Minor ticks.
-      var subticks = d3_svg_axisSubdivide(scale, ticks, tickSubdivide),
-          subtick = g.selectAll(".minor").data(subticks, String),
-          subtickEnter = subtick.enter().insert("svg:line", "g").attr("class", "tick minor").style("opacity", 1e-6),
-          subtickExit = transition(subtick.exit()).style("opacity", 1e-6).remove(),
-          subtickUpdate = transition(subtick).style("opacity", 1);
-
-      // Major ticks.
-      var tick = g.selectAll("g").data(ticks, String),
-          tickEnter = tick.enter().insert("svg:g", "path").style("opacity", 1e-6),
-          tickExit = transition(tick.exit()).style("opacity", 1e-6).remove(),
-          tickUpdate = transition(tick).style("opacity", 1),
-          tickTransform;
-
-      // Domain.
-      var range = d3_scaleExtent(scale.range()),
-          path = g.selectAll(".domain").data([0]),
-          pathEnter = path.enter().append("svg:path").attr("class", "domain"),
-          pathUpdate = transition(path);
-
-      // Stash the new scale and grab the old scale.
-      var scale0 = this.__chart__ || scale;
-      this.__chart__ = scale.copy();
-
-      tickEnter.append("svg:line").attr("class", "tick");
-      tickEnter.append("svg:text");
-      tickUpdate.select("text").text(tickFormat);
-
-      switch (orient) {
-        case "bottom": {
-          tickTransform = d3_svg_axisX;
-          subtickUpdate.attr("x2", 0).attr("y2", tickMinorSize);
-          tickUpdate.select("line").attr("x2", 0).attr("y2", tickMajorSize);
-          tickUpdate.select("text").attr("x", 0).attr("y", Math.max(tickMajorSize, 0) + tickPadding).attr("dy", ".71em").attr("text-anchor", "middle");
-          pathUpdate.attr("d", "M" + range[0] + "," + tickEndSize + "V0H" + range[1] + "V" + tickEndSize);
-          break;
-        }
-        case "top": {
-          tickTransform = d3_svg_axisX;
-          subtickUpdate.attr("x2", 0).attr("y2", -tickMinorSize);
-          tickUpdate.select("line").attr("x2", 0).attr("y2", -tickMajorSize);
-          tickUpdate.select("text").attr("x", 0).attr("y", -(Math.max(tickMajorSize, 0) + tickPadding)).attr("dy", "0em").attr("text-anchor", "middle");
-          pathUpdate.attr("d", "M" + range[0] + "," + -tickEndSize + "V0H" + range[1] + "V" + -tickEndSize);
-          break;
-        }
-        case "left": {
-          tickTransform = d3_svg_axisY;
-          subtickUpdate.attr("x2", -tickMinorSize).attr("y2", 0);
-          tickUpdate.select("line").attr("x2", -tickMajorSize).attr("y2", 0);
-          tickUpdate.select("text").attr("x", -(Math.max(tickMajorSize, 0) + tickPadding)).attr("y", 0).attr("dy", ".32em").attr("text-anchor", "end");
-          pathUpdate.attr("d", "M" + -tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + -tickEndSize);
-          break;
-        }
-        case "right": {
-          tickTransform = d3_svg_axisY;
-          subtickUpdate.attr("x2", tickMinorSize).attr("y2", 0);
-          tickUpdate.select("line").attr("x2", tickMajorSize).attr("y2", 0);
-          tickUpdate.select("text").attr("x", Math.max(tickMajorSize, 0) + tickPadding).attr("y", 0).attr("dy", ".32em").attr("text-anchor", "start");
-          pathUpdate.attr("d", "M" + tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + tickEndSize);
-          break;
-        }
-      }
-
-      tickEnter.call(tickTransform, scale0);
-      tickUpdate.call(tickTransform, scale);
-      tickExit.call(tickTransform, scale);
-
-      subtickEnter.call(tickTransform, scale0);
-      subtickUpdate.call(tickTransform, scale);
-      subtickExit.call(tickTransform, scale);
-    });
-  }
-
-  axis.scale = function(x) {
-    if (!arguments.length) return scale;
-    scale = x;
-    return axis;
-  };
-
-  axis.orient = function(x) {
-    if (!arguments.length) return orient;
-    orient = x;
-    return axis;
-  };
-
-  axis.ticks = function() {
-    if (!arguments.length) return tickArguments_;
-    tickArguments_ = arguments;
-    return axis;
-  };
-
-  axis.tickFormat = function(x) {
-    if (!arguments.length) return tickFormat_;
-    tickFormat_ = x;
-    return axis;
-  };
-
-  axis.tickSize = function(x, y, z) {
-    if (!arguments.length) return tickMajorSize;
-    var n = arguments.length - 1;
-    tickMajorSize = +x;
-    tickMinorSize = n > 1 ? +y : tickMajorSize;
-    tickEndSize = n > 0 ? +arguments[n] : tickMajorSize;
-    return axis;
-  };
-
-  axis.tickPadding = function(x) {
-    if (!arguments.length) return tickPadding;
-    tickPadding = +x;
-    return axis;
-  };
-
-  axis.tickSubdivide = function(x) {
-    if (!arguments.length) return tickSubdivide;
-    tickSubdivide = +x;
-    return axis;
-  };
-
-  return axis;
-};
-
-function d3_svg_axisX(selection, x) {
-  selection.attr("transform", function(d) { return "translate(" + x(d) + ",0)"; });
-}
-
-function d3_svg_axisY(selection, y) {
-  selection.attr("transform", function(d) { return "translate(0," + y(d) + ")"; });
-}
-
-function d3_svg_axisSubdivide(scale, ticks, m) {
-  subticks = [];
-  if (m && ticks.length > 1) {
-    var extent = d3_scaleExtent(scale.domain()),
-        subticks,
-        i = -1,
-        n = ticks.length,
-        d = (ticks[1] - ticks[0]) / ++m,
-        j,
-        v;
-    while (++i < n) {
-      for (j = m; --j > 0;) {
-        if ((v = +ticks[i] - j * d) >= extent[0]) {
-          subticks.push(v);
-        }
-      }
-    }
-    for (--i, j = 0; ++j < m && (v = +ticks[i] + j * d) < extent[1];) {
-      subticks.push(v);
-    }
-  }
-  return subticks;
-}
-d3.behavior = {};
-d3.behavior.drag = function() {
-  var event = d3.dispatch("drag", "dragstart", "dragend");
-
-  function drag() {
-    this
-        .on("mousedown.drag", mousedown)
-        .on("touchstart.drag", mousedown);
-
-    d3.select(window)
-        .on("mousemove.drag", d3_behavior_dragMove)
-        .on("touchmove.drag", d3_behavior_dragMove)
-        .on("mouseup.drag", d3_behavior_dragUp, true)
-        .on("touchend.drag", d3_behavior_dragUp, true)
-        .on("click.drag", d3_behavior_dragClick, true);
-  }
-
-  // snapshot the local context for subsequent dispatch
-  function start() {
-    d3_behavior_dragEvent = event;
-    d3_behavior_dragEventTarget = d3.event.target;
-    d3_behavior_dragOffset = d3_behavior_dragPoint((d3_behavior_dragTarget = this).parentNode);
-    d3_behavior_dragMoved = 0;
-    d3_behavior_dragArguments = arguments;
-  }
-
-  function mousedown() {
-    start.apply(this, arguments);
-    d3_behavior_dragDispatch("dragstart");
-  }
-
-  drag.on = function(type, listener) {
-    event[type].add(listener);
-    return drag;
-  };
-
-  return drag;
-};
-
-var d3_behavior_dragEvent,
-    d3_behavior_dragEventTarget,
-    d3_behavior_dragTarget,
-    d3_behavior_dragArguments,
-    d3_behavior_dragOffset,
-    d3_behavior_dragMoved,
-    d3_behavior_dragStopClick;
-
-function d3_behavior_dragDispatch(type) {
-  var o = d3.event, p = d3_behavior_dragTarget.parentNode, dx = 0, dy = 0;
-
-  if (p) {
-    p = d3_behavior_dragPoint(p);
-    dx = p[0] - d3_behavior_dragOffset[0];
-    dy = p[1] - d3_behavior_dragOffset[1];
-    d3_behavior_dragOffset = p;
-    d3_behavior_dragMoved |= dx | dy;
-  }
-
-  try {
-    d3.event = {dx: dx, dy: dy};
-    d3_behavior_dragEvent[type].dispatch.apply(d3_behavior_dragTarget, d3_behavior_dragArguments);
-  } finally {
-    d3.event = o;
-  }
-
-  o.preventDefault();
-}
-
-function d3_behavior_dragPoint(container) {
-  return d3.event.touches
-      ? d3.svg.touches(container)[0]
-      : d3.svg.mouse(container);
-}
-
-function d3_behavior_dragMove() {
-  if (!d3_behavior_dragTarget) return;
-  var parent = d3_behavior_dragTarget.parentNode;
-
-  // O NOES! The drag element was removed from the DOM.
-  if (!parent) return d3_behavior_dragUp();
-
-  d3_behavior_dragDispatch("drag");
-  d3_behavior_dragCancel();
-}
-
-function d3_behavior_dragUp() {
-  if (!d3_behavior_dragTarget) return;
-  d3_behavior_dragDispatch("dragend");
-  d3_behavior_dragTarget = null;
-
-  // If the node was moved, prevent the mouseup from propagating.
-  // Also prevent the subsequent click from propagating (e.g., for anchors).
-  if (d3_behavior_dragMoved && d3_behavior_dragEventTarget === d3.event.target) {
-    d3_behavior_dragStopClick = true;
-    d3_behavior_dragCancel();
-  }
-}
-
-function d3_behavior_dragClick() {
-  if (d3_behavior_dragStopClick && d3_behavior_dragEventTarget === d3.event.target) {
-    d3_behavior_dragCancel();
-    d3_behavior_dragStopClick = false;
-    d3_behavior_dragEventTarget = null;
-  }
-}
-
-function d3_behavior_dragCancel() {
-  d3.event.stopPropagation();
-  d3.event.preventDefault();
-}
-// TODO unbind zoom behavior?
-// TODO unbind listener?
-d3.behavior.zoom = function() {
-  var xyz = [0, 0, 0],
-      event = d3.dispatch("zoom");
-
-  function zoom() {
-    this
-        .on("mousedown.zoom", mousedown)
-        .on("mousewheel.zoom", mousewheel)
-        .on("DOMMouseScroll.zoom", mousewheel)
-        .on("dblclick.zoom", dblclick)
-        .on("touchstart.zoom", touchstart);
-
-    d3.select(window)
-        .on("mousemove.zoom", d3_behavior_zoomMousemove)
-        .on("mouseup.zoom", d3_behavior_zoomMouseup)
-        .on("touchmove.zoom", d3_behavior_zoomTouchmove)
-        .on("touchend.zoom", d3_behavior_zoomTouchup)
-        .on("click.zoom", d3_behavior_zoomClick, true);
-  }
-
-  // snapshot the local context for subsequent dispatch
-  function start() {
-    d3_behavior_zoomXyz = xyz;
-    d3_behavior_zoomDispatch = event.zoom.dispatch;
-    d3_behavior_zoomEventTarget = d3.event.target;
-    d3_behavior_zoomTarget = this;
-    d3_behavior_zoomArguments = arguments;
-  }
-
-  function mousedown() {
-    start.apply(this, arguments);
-    d3_behavior_zoomPanning = d3_behavior_zoomLocation(d3.svg.mouse(d3_behavior_zoomTarget));
-    d3_behavior_zoomMoved = false;
-    d3.event.preventDefault();
-    window.focus();
-  }
-
-  // store starting mouse location
-  function mousewheel() {
-    start.apply(this, arguments);
-    if (!d3_behavior_zoomZooming) d3_behavior_zoomZooming = d3_behavior_zoomLocation(d3.svg.mouse(d3_behavior_zoomTarget));
-    d3_behavior_zoomTo(d3_behavior_zoomDelta() + xyz[2], d3.svg.mouse(d3_behavior_zoomTarget), d3_behavior_zoomZooming);
-  }
-
-  function dblclick() {
-    start.apply(this, arguments);
-    var mouse = d3.svg.mouse(d3_behavior_zoomTarget);
-    d3_behavior_zoomTo(d3.event.shiftKey ? Math.ceil(xyz[2] - 1) : Math.floor(xyz[2] + 1), mouse, d3_behavior_zoomLocation(mouse));
-  }
-
-  // doubletap detection
-  function touchstart() {
-    start.apply(this, arguments);
-    var touches = d3_behavior_zoomTouchup(),
-        touch,
-        now = Date.now();
-    if ((touches.length === 1) && (now - d3_behavior_zoomLast < 300)) {
-      d3_behavior_zoomTo(1 + Math.floor(xyz[2]), touch = touches[0], d3_behavior_zoomLocations[touch.identifier]);
-    }
-    d3_behavior_zoomLast = now;
-  }
-
-  zoom.on = function(type, listener) {
-    event[type].add(listener);
-    return zoom;
-  };
-
-  return zoom;
-};
-
-var d3_behavior_zoomDiv,
-    d3_behavior_zoomPanning,
-    d3_behavior_zoomZooming,
-    d3_behavior_zoomLocations = {}, // identifier -> location
-    d3_behavior_zoomLast = 0,
-    d3_behavior_zoomXyz,
-    d3_behavior_zoomDispatch,
-    d3_behavior_zoomEventTarget,
-    d3_behavior_zoomTarget,
-    d3_behavior_zoomArguments,
-    d3_behavior_zoomMoved,
-    d3_behavior_zoomStopClick;
-
-function d3_behavior_zoomLocation(point) {
-  return [
-    point[0] - d3_behavior_zoomXyz[0],
-    point[1] - d3_behavior_zoomXyz[1],
-    d3_behavior_zoomXyz[2]
-  ];
-}
-
-// detect the pixels that would be scrolled by this wheel event
-function d3_behavior_zoomDelta() {
-
-  // mousewheel events are totally broken!
-  // https://bugs.webkit.org/show_bug.cgi?id=40441
-  // not only that, but Chrome and Safari differ in re. to acceleration!
-  if (!d3_behavior_zoomDiv) {
-    d3_behavior_zoomDiv = d3.select("body").append("div")
-        .style("visibility", "hidden")
-        .style("top", 0)
-        .style("height", 0)
-        .style("width", 0)
-        .style("overflow-y", "scroll")
-      .append("div")
-        .style("height", "2000px")
-      .node().parentNode;
-  }
-
-  var e = d3.event, delta;
-  try {
-    d3_behavior_zoomDiv.scrollTop = 1000;
-    d3_behavior_zoomDiv.dispatchEvent(e);
-    delta = 1000 - d3_behavior_zoomDiv.scrollTop;
-  } catch (error) {
-    delta = e.wheelDelta || (-e.detail * 5);
-  }
-
-  return delta * .005;
-}
-
-// Note: Since we don't rotate, it's possible for the touches to become
-// slightly detached from their original positions. Thus, we recompute the
-// touch points on touchend as well as touchstart!
-function d3_behavior_zoomTouchup() {
-  var touches = d3.svg.touches(d3_behavior_zoomTarget),
-      i = -1,
-      n = touches.length,
-      touch;
-  while (++i < n) d3_behavior_zoomLocations[(touch = touches[i]).identifier] = d3_behavior_zoomLocation(touch);
-  return touches;
-}
-
-function d3_behavior_zoomTouchmove() {
-  var touches = d3.svg.touches(d3_behavior_zoomTarget);
-  switch (touches.length) {
-
-    // single-touch pan
-    case 1: {
-      var touch = touches[0];
-      d3_behavior_zoomTo(d3_behavior_zoomXyz[2], touch, d3_behavior_zoomLocations[touch.identifier]);
-      break;
-    }
-
-    // double-touch pan + zoom
-    case 2: {
-      var p0 = touches[0],
-          p1 = touches[1],
-          p2 = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2],
-          l0 = d3_behavior_zoomLocations[p0.identifier],
-          l1 = d3_behavior_zoomLocations[p1.identifier],
-          l2 = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2, l0[2]];
-      d3_behavior_zoomTo(Math.log(d3.event.scale) / Math.LN2 + l0[2], p2, l2);
-      break;
-    }
-  }
-}
-
-function d3_behavior_zoomMousemove() {
-  d3_behavior_zoomZooming = null;
-  if (d3_behavior_zoomPanning) {
-    d3_behavior_zoomMoved = true;
-    d3_behavior_zoomTo(d3_behavior_zoomXyz[2], d3.svg.mouse(d3_behavior_zoomTarget), d3_behavior_zoomPanning);
-  }
-}
-
-function d3_behavior_zoomMouseup() {
-  if (d3_behavior_zoomPanning) {
-    if (d3_behavior_zoomMoved && d3_behavior_zoomEventTarget === d3.event.target) {
-      d3_behavior_zoomStopClick = true;
-    }
-    d3_behavior_zoomMousemove();
-    d3_behavior_zoomPanning = null;
-  }
-}
-
-function d3_behavior_zoomClick() {
-  if (d3_behavior_zoomStopClick && d3_behavior_zoomEventTarget === d3.event.target) {
-    d3.event.stopPropagation();
-    d3.event.preventDefault();
-    d3_behavior_zoomStopClick = false;
-    d3_behavior_zoomEventTarget = null;
-  }
-}
-
-function d3_behavior_zoomTo(z, x0, x1) {
-  var K = Math.pow(2, (d3_behavior_zoomXyz[2] = z) - x1[2]),
-      x = d3_behavior_zoomXyz[0] = x0[0] - K * x1[0],
-      y = d3_behavior_zoomXyz[1] = x0[1] - K * x1[1],
-      o = d3.event, // Events can be reentrant (e.g., focus).
-      k = Math.pow(2, z);
-
-  d3.event = {
-    scale: k,
-    translate: [x, y],
-    transform: function(sx, sy) {
-      if (sx) transform(sx, x);
-      if (sy) transform(sy, y);
-    }
-  };
-
-  function transform(scale, o) {
-    var domain = scale.__domain || (scale.__domain = scale.domain()),
-        range = scale.range().map(function(v) { return (v - o) / k; });
-    scale.domain(domain).domain(range.map(scale.invert));
-  }
-
-  try {
-    d3_behavior_zoomDispatch.apply(d3_behavior_zoomTarget, d3_behavior_zoomArguments);
-  } finally {
-    d3.event = o;
-  }
-
-  o.preventDefault();
-}
-})();
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/d3/d3.layout.js b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/d3/d3.layout.js
deleted file mode 100644
index f812247e2f4..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/d3/d3.layout.js
+++ /dev/null
@@ -1,1892 +0,0 @@
-(function(){d3.layout = {};
-// Implements hierarchical edge bundling using Holten's algorithm. For each
-// input link, a path is computed that travels through the tree, up the parent
-// hierarchy to the least common ancestor, and then back down to the destination
-// node. Each path is simply an array of nodes.
-d3.layout.bundle = function() {
-  return function(links) {
-    var paths = [],
-        i = -1,
-        n = links.length;
-    while (++i < n) paths.push(d3_layout_bundlePath(links[i]));
-    return paths;
-  };
-};
-
-function d3_layout_bundlePath(link) {
-  var start = link.source,
-      end = link.target,
-      lca = d3_layout_bundleLeastCommonAncestor(start, end),
-      points = [start];
-  while (start !== lca) {
-    start = start.parent;
-    points.push(start);
-  }
-  var k = points.length;
-  while (end !== lca) {
-    points.splice(k, 0, end);
-    end = end.parent;
-  }
-  return points;
-}
-
-function d3_layout_bundleAncestors(node) {
-  var ancestors = [],
-      parent = node.parent;
-  while (parent != null) {
-    ancestors.push(node);
-    node = parent;
-    parent = parent.parent;
-  }
-  ancestors.push(node);
-  return ancestors;
-}
-
-function d3_layout_bundleLeastCommonAncestor(a, b) {
-  if (a === b) return a;
-  var aNodes = d3_layout_bundleAncestors(a),
-      bNodes = d3_layout_bundleAncestors(b),
-      aNode = aNodes.pop(),
-      bNode = bNodes.pop(),
-      sharedNode = null;
-  while (aNode === bNode) {
-    sharedNode = aNode;
-    aNode = aNodes.pop();
-    bNode = bNodes.pop();
-  }
-  return sharedNode;
-}
-d3.layout.chord = function() {
-  var chord = {},
-      chords,
-      groups,
-      matrix,
-      n,
-      padding = 0,
-      sortGroups,
-      sortSubgroups,
-      sortChords;
-
-  function relayout() {
-    var subgroups = {},
-        groupSums = [],
-        groupIndex = d3.range(n),
-        subgroupIndex = [],
-        k,
-        x,
-        x0,
-        i,
-        j;
-
-    chords = [];
-    groups = [];
-
-    // Compute the sum.
-    k = 0, i = -1; while (++i < n) {
-      x = 0, j = -1; while (++j < n) {
-        x += matrix[i][j];
-      }
-      groupSums.push(x);
-      subgroupIndex.push(d3.range(n));
-      k += x;
-    }
-
-    // Sort groups…
-    if (sortGroups) {
-      groupIndex.sort(function(a, b) {
-        return sortGroups(groupSums[a], groupSums[b]);
-      });
-    }
-
-    // Sort subgroups…
-    if (sortSubgroups) {
-      subgroupIndex.forEach(function(d, i) {
-        d.sort(function(a, b) {
-          return sortSubgroups(matrix[i][a], matrix[i][b]);
-        });
-      });
-    }
-
-    // Convert the sum to scaling factor for [0, 2pi].
-    // TODO Allow start and end angle to be specified.
-    // TODO Allow padding to be specified as percentage?
-    k = (2 * Math.PI - padding * n) / k;
-
-    // Compute the start and end angle for each group and subgroup.
-    x = 0, i = -1; while (++i < n) {
-      x0 = x, j = -1; while (++j < n) {
-        var di = groupIndex[i],
-            dj = subgroupIndex[di][j],
-            v = matrix[di][dj];
-        subgroups[di + "-" + dj] = {
-          index: di,
-          subindex: dj,
-          startAngle: x,
-          endAngle: x += v * k,
-          value: v
-        };
-      }
-      groups.push({
-        index: di,
-        startAngle: x0,
-        endAngle: x,
-        value: (x - x0) / k
-      });
-      x += padding;
-    }
-
-    // Generate chords for each (non-empty) subgroup-subgroup link.
-    i = -1; while (++i < n) {
-      j = i - 1; while (++j < n) {
-        var source = subgroups[i + "-" + j],
-            target = subgroups[j + "-" + i];
-        if (source.value || target.value) {
-          chords.push(source.value < target.value
-              ? {source: target, target: source}
-              : {source: source, target: target});
-        }
-      }
-    }
-
-    if (sortChords) resort();
-  }
-
-  function resort() {
-    chords.sort(function(a, b) {
-      return sortChords(
-          (a.source.value + a.target.value) / 2,
-          (b.source.value + b.target.value) / 2);
-    });
-  }
-
-  chord.matrix = function(x) {
-    if (!arguments.length) return matrix;
-    n = (matrix = x) && matrix.length;
-    chords = groups = null;
-    return chord;
-  };
-
-  chord.padding = function(x) {
-    if (!arguments.length) return padding;
-    padding = x;
-    chords = groups = null;
-    return chord;
-  };
-
-  chord.sortGroups = function(x) {
-    if (!arguments.length) return sortGroups;
-    sortGroups = x;
-    chords = groups = null;
-    return chord;
-  };
-
-  chord.sortSubgroups = function(x) {
-    if (!arguments.length) return sortSubgroups;
-    sortSubgroups = x;
-    chords = null;
-    return chord;
-  };
-
-  chord.sortChords = function(x) {
-    if (!arguments.length) return sortChords;
-    sortChords = x;
-    if (chords) resort();
-    return chord;
-  };
-
-  chord.chords = function() {
-    if (!chords) relayout();
-    return chords;
-  };
-
-  chord.groups = function() {
-    if (!groups) relayout();
-    return groups;
-  };
-
-  return chord;
-};
-// A rudimentary force layout using Gauss-Seidel.
-d3.layout.force = function() {
-  var force = {},
-      event = d3.dispatch("tick"),
-      size = [1, 1],
-      drag,
-      alpha,
-      friction = .9,
-      linkDistance = d3_layout_forceLinkDistance,
-      linkStrength = d3_layout_forceLinkStrength,
-      charge = -30,
-      gravity = .1,
-      theta = .8,
-      interval,
-      nodes = [],
-      links = [],
-      distances,
-      strengths,
-      charges;
-
-  function repulse(node) {
-    return function(quad, x1, y1, x2, y2) {
-      if (quad.point !== node) {
-        var dx = quad.cx - node.x,
-            dy = quad.cy - node.y,
-            dn = 1 / Math.sqrt(dx * dx + dy * dy);
-
-        /* Barnes-Hut criterion. */
-        if ((x2 - x1) * dn < theta) {
-          var k = quad.charge * dn * dn;
-          node.px -= dx * k;
-          node.py -= dy * k;
-          return true;
-        }
-
-        if (quad.point && isFinite(dn)) {
-          var k = quad.pointCharge * dn * dn;
-          node.px -= dx * k;
-          node.py -= dy * k;
-        }
-      }
-      return !quad.charge;
-    };
-  }
-
-  function tick() {
-    var n = nodes.length,
-        m = links.length,
-        q,
-        i, // current index
-        o, // current object
-        s, // current source
-        t, // current target
-        l, // current distance
-        k, // current force
-        x, // x-distance
-        y; // y-distance
-
-    // gauss-seidel relaxation for links
-    for (i = 0; i < m; ++i) {
-      o = links[i];
-      s = o.source;
-      t = o.target;
-      x = t.x - s.x;
-      y = t.y - s.y;
-      if (l = (x * x + y * y)) {
-        l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;
-        x *= l;
-        y *= l;
-        t.x -= x * (k = s.weight / (t.weight + s.weight));
-        t.y -= y * k;
-        s.x += x * (k = 1 - k);
-        s.y += y * k;
-      }
-    }
-
-    // apply gravity forces
-    if (k = alpha * gravity) {
-      x = size[0] / 2;
-      y = size[1] / 2;
-      i = -1; if (k) while (++i < n) {
-        o = nodes[i];
-        o.x += (x - o.x) * k;
-        o.y += (y - o.y) * k;
-      }
-    }
-
-    // compute quadtree center of mass and apply charge forces
-    if (charge) {
-      d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges);
-      i = -1; while (++i < n) {
-        if (!(o = nodes[i]).fixed) {
-          q.visit(repulse(o));
-        }
-      }
-    }
-
-    // position verlet integration
-    i = -1; while (++i < n) {
-      o = nodes[i];
-      if (o.fixed) {
-        o.x = o.px;
-        o.y = o.py;
-      } else {
-        o.x -= (o.px - (o.px = o.x)) * friction;
-        o.y -= (o.py - (o.py = o.y)) * friction;
-      }
-    }
-
-    event.tick.dispatch({type: "tick", alpha: alpha});
-
-    // simulated annealing, basically
-    return (alpha *= .99) < .005;
-  }
-
-  force.on = function(type, listener) {
-    event[type].add(listener);
-    return force;
-  };
-
-  force.nodes = function(x) {
-    if (!arguments.length) return nodes;
-    nodes = x;
-    return force;
-  };
-
-  force.links = function(x) {
-    if (!arguments.length) return links;
-    links = x;
-    return force;
-  };
-
-  force.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return force;
-  };
-
-  force.linkDistance = function(x) {
-    if (!arguments.length) return linkDistance;
-    linkDistance = d3.functor(x);
-    return force;
-  };
-
-  // For backwards-compatibility.
-  force.distance = force.linkDistance;
-
-  force.linkStrength = function(x) {
-    if (!arguments.length) return linkStrength;
-    linkStrength = d3.functor(x);
-    return force;
-  };
-
-  force.friction = function(x) {
-    if (!arguments.length) return friction;
-    friction = x;
-    return force;
-  };
-
-  force.charge = function(x) {
-    if (!arguments.length) return charge;
-    charge = typeof x === "function" ? x : +x;
-    return force;
-  };
-
-  force.gravity = function(x) {
-    if (!arguments.length) return gravity;
-    gravity = x;
-    return force;
-  };
-
-  force.theta = function(x) {
-    if (!arguments.length) return theta;
-    theta = x;
-    return force;
-  };
-
-  force.start = function() {
-    var i,
-        j,
-        n = nodes.length,
-        m = links.length,
-        w = size[0],
-        h = size[1],
-        neighbors,
-        o;
-
-    for (i = 0; i < n; ++i) {
-      (o = nodes[i]).index = i;
-      o.weight = 0;
-    }
-
-    distances = [];
-    strengths = [];
-    for (i = 0; i < m; ++i) {
-      o = links[i];
-      if (typeof o.source == "number") o.source = nodes[o.source];
-      if (typeof o.target == "number") o.target = nodes[o.target];
-      distances[i] = linkDistance.call(this, o, i);
-      strengths[i] = linkStrength.call(this, o, i);
-      ++o.source.weight;
-      ++o.target.weight;
-    }
-
-    for (i = 0; i < n; ++i) {
-      o = nodes[i];
-      if (isNaN(o.x)) o.x = position("x", w);
-      if (isNaN(o.y)) o.y = position("y", h);
-      if (isNaN(o.px)) o.px = o.x;
-      if (isNaN(o.py)) o.py = o.y;
-    }
-
-    charges = [];
-    if (typeof charge === "function") {
-      for (i = 0; i < n; ++i) {
-        charges[i] = +charge.call(this, nodes[i], i);
-      }
-    } else {
-      for (i = 0; i < n; ++i) {
-        charges[i] = charge;
-      }
-    }
-
-    // initialize node position based on first neighbor
-    function position(dimension, size) {
-      var neighbors = neighbor(i),
-          j = -1,
-          m = neighbors.length,
-          x;
-      while (++j < m) if (!isNaN(x = neighbors[j][dimension])) return x;
-      return Math.random() * size;
-    }
-
-    // initialize neighbors lazily
-    function neighbor() {
-      if (!neighbors) {
-        neighbors = [];
-        for (j = 0; j < n; ++j) {
-          neighbors[j] = [];
-        }
-        for (j = 0; j < m; ++j) {
-          var o = links[j];
-          neighbors[o.source.index].push(o.target);
-          neighbors[o.target.index].push(o.source);
-        }
-      }
-      return neighbors[i];
-    }
-
-    return force.resume();
-  };
-
-  force.resume = function() {
-    alpha = .1;
-    d3.timer(tick);
-    return force;
-  };
-
-  force.stop = function() {
-    alpha = 0;
-    return force;
-  };
-
-  // use `node.call(force.drag)` to make nodes draggable
-  force.drag = function() {
-    if (!drag) drag = d3.behavior.drag()
-        .on("dragstart", dragstart)
-        .on("drag", d3_layout_forceDrag)
-        .on("dragend", d3_layout_forceDragEnd);
-
-    this.on("mouseover.force", d3_layout_forceDragOver)
-        .on("mouseout.force", d3_layout_forceDragOut)
-        .call(drag);
-  };
-
-  function dragstart(d) {
-    d3_layout_forceDragOver(d3_layout_forceDragNode = d);
-    d3_layout_forceDragForce = force;
-  }
-
-  return force;
-};
-
-var d3_layout_forceDragForce,
-    d3_layout_forceDragNode;
-
-function d3_layout_forceDragOver(d) {
-  d.fixed |= 2;
-}
-
-function d3_layout_forceDragOut(d) {
-  if (d !== d3_layout_forceDragNode) d.fixed &= 1;
-}
-
-function d3_layout_forceDragEnd() {
-  d3_layout_forceDrag();
-  d3_layout_forceDragNode.fixed &= 1;
-  d3_layout_forceDragForce = d3_layout_forceDragNode = null;
-}
-
-function d3_layout_forceDrag() {
-  d3_layout_forceDragNode.px += d3.event.dx;
-  d3_layout_forceDragNode.py += d3.event.dy;
-  d3_layout_forceDragForce.resume(); // restart annealing
-}
-
-function d3_layout_forceAccumulate(quad, alpha, charges) {
-  var cx = 0,
-      cy = 0;
-  quad.charge = 0;
-  if (!quad.leaf) {
-    var nodes = quad.nodes,
-        n = nodes.length,
-        i = -1,
-        c;
-    while (++i < n) {
-      c = nodes[i];
-      if (c == null) continue;
-      d3_layout_forceAccumulate(c, alpha, charges);
-      quad.charge += c.charge;
-      cx += c.charge * c.cx;
-      cy += c.charge * c.cy;
-    }
-  }
-  if (quad.point) {
-    // jitter internal nodes that are coincident
-    if (!quad.leaf) {
-      quad.point.x += Math.random() - .5;
-      quad.point.y += Math.random() - .5;
-    }
-    var k = alpha * charges[quad.point.index];
-    quad.charge += quad.pointCharge = k;
-    cx += k * quad.point.x;
-    cy += k * quad.point.y;
-  }
-  quad.cx = cx / quad.charge;
-  quad.cy = cy / quad.charge;
-}
-
-function d3_layout_forceLinkDistance(link) {
-  return 20;
-}
-
-function d3_layout_forceLinkStrength(link) {
-  return 1;
-}
-d3.layout.partition = function() {
-  var hierarchy = d3.layout.hierarchy(),
-      size = [1, 1]; // width, height
-
-  function position(node, x, dx, dy) {
-    var children = node.children;
-    node.x = x;
-    node.y = node.depth * dy;
-    node.dx = dx;
-    node.dy = dy;
-    if (children && (n = children.length)) {
-      var i = -1,
-          n,
-          c,
-          d;
-      dx = node.value ? dx / node.value : 0;
-      while (++i < n) {
-        position(c = children[i], x, d = c.value * dx, dy);
-        x += d;
-      }
-    }
-  }
-
-  function depth(node) {
-    var children = node.children,
-        d = 0;
-    if (children && (n = children.length)) {
-      var i = -1,
-          n;
-      while (++i < n) d = Math.max(d, depth(children[i]));
-    }
-    return 1 + d;
-  }
-
-  function partition(d, i) {
-    var nodes = hierarchy.call(this, d, i);
-    position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));
-    return nodes;
-  }
-
-  partition.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return partition;
-  };
-
-  return d3_layout_hierarchyRebind(partition, hierarchy);
-};
-d3.layout.pie = function() {
-  var value = Number,
-      sort = null,
-      startAngle = 0,
-      endAngle = 2 * Math.PI;
-
-  function pie(data, i) {
-
-    // Compute the start angle.
-    var a = +(typeof startAngle === "function"
-        ? startAngle.apply(this, arguments)
-        : startAngle);
-
-    // Compute the angular range (end - start).
-    var k = (typeof endAngle === "function"
-        ? endAngle.apply(this, arguments)
-        : endAngle) - startAngle;
-
-    // Optionally sort the data.
-    var index = d3.range(data.length);
-    if (sort != null) index.sort(function(i, j) {
-      return sort(data[i], data[j]);
-    });
-
-    // Compute the numeric values for each data element.
-    var values = data.map(value);
-
-    // Convert k into a scale factor from value to angle, using the sum.
-    k /= values.reduce(function(p, d) { return p + d; }, 0);
-
-    // Compute the arcs!
-    var arcs = index.map(function(i) {
-      return {
-        data: data[i],
-        value: d = values[i],
-        startAngle: a,
-        endAngle: a += d * k
-      };
-    });
-
-    // Return the arcs in the original data's order.
-    return data.map(function(d, i) {
-      return arcs[index[i]];
-    });
-  }
-
-  /**
-   * Specifies the value function *x*, which returns a nonnegative numeric value
-   * for each datum. The default value function is `Number`. The value function
-   * is passed two arguments: the current datum and the current index.
-   */
-  pie.value = function(x) {
-    if (!arguments.length) return value;
-    value = x;
-    return pie;
-  };
-
-  /**
-   * Specifies a sort comparison operator *x*. The comparator is passed two data
-   * elements from the data array, a and b; it returns a negative value if a is
-   * less than b, a positive value if a is greater than b, and zero if a equals
-   * b.
-   */
-  pie.sort = function(x) {
-    if (!arguments.length) return sort;
-    sort = x;
-    return pie;
-  };
-
-  /**
-   * Specifies the overall start angle of the pie chart. Defaults to 0. The
-   * start angle can be specified either as a constant or as a function; in the
-   * case of a function, it is evaluated once per array (as opposed to per
-   * element).
-   */
-  pie.startAngle = function(x) {
-    if (!arguments.length) return startAngle;
-    startAngle = x;
-    return pie;
-  };
-
-  /**
-   * Specifies the overall end angle of the pie chart. Defaults to 2Ï€. The
-   * end angle can be specified either as a constant or as a function; in the
-   * case of a function, it is evaluated once per array (as opposed to per
-   * element).
-   */
-  pie.endAngle = function(x) {
-    if (!arguments.length) return endAngle;
-    endAngle = x;
-    return pie;
-  };
-
-  return pie;
-};
-// data is two-dimensional array of x,y; we populate y0
-d3.layout.stack = function() {
-  var values = Object,
-      order = d3_layout_stackOrders["default"],
-      offset = d3_layout_stackOffsets["zero"],
-      out = d3_layout_stackOut,
-      x = d3_layout_stackX,
-      y = d3_layout_stackY;
-
-  function stack(data, index) {
-
-    // Convert series to canonical two-dimensional representation.
-    var series = data.map(function(d, i) {
-      return values.call(stack, d, i);
-    });
-
-    // Convert each series to canonical [[x,y]] representation.
-    var points = series.map(function(d, i) {
-      return d.map(function(v, i) {
-        return [x.call(stack, v, i), y.call(stack, v, i)];
-      });
-    });
-
-    // Compute the order of series, and permute them.
-    var orders = order.call(stack, points, index);
-    series = d3.permute(series, orders);
-    points = d3.permute(points, orders);
-
-    // Compute the baseline…
-    var offsets = offset.call(stack, points, index);
-
-    // And propagate it to other series.
-    var n = series.length,
-        m = series[0].length,
-        i,
-        j,
-        o;
-    for (j = 0; j < m; ++j) {
-      out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);
-      for (i = 1; i < n; ++i) {
-        out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);
-      }
-    }
-
-    return data;
-  }
-
-  stack.values = function(x) {
-    if (!arguments.length) return values;
-    values = x;
-    return stack;
-  };
-
-  stack.order = function(x) {
-    if (!arguments.length) return order;
-    order = typeof x === "function" ? x : d3_layout_stackOrders[x];
-    return stack;
-  };
-
-  stack.offset = function(x) {
-    if (!arguments.length) return offset;
-    offset = typeof x === "function" ? x : d3_layout_stackOffsets[x];
-    return stack;
-  };
-
-  stack.x = function(z) {
-    if (!arguments.length) return x;
-    x = z;
-    return stack;
-  };
-
-  stack.y = function(z) {
-    if (!arguments.length) return y;
-    y = z;
-    return stack;
-  };
-
-  stack.out = function(z) {
-    if (!arguments.length) return out;
-    out = z;
-    return stack;
-  };
-
-  return stack;
-}
-
-function d3_layout_stackX(d) {
-  return d.x;
-}
-
-function d3_layout_stackY(d) {
-  return d.y;
-}
-
-function d3_layout_stackOut(d, y0, y) {
-  d.y0 = y0;
-  d.y = y;
-}
-
-var d3_layout_stackOrders = {
-
-  "inside-out": function(data) {
-    var n = data.length,
-        i,
-        j,
-        max = data.map(d3_layout_stackMaxIndex),
-        sums = data.map(d3_layout_stackReduceSum),
-        index = d3.range(n).sort(function(a, b) { return max[a] - max[b]; }),
-        top = 0,
-        bottom = 0,
-        tops = [],
-        bottoms = [];
-    for (i = 0; i < n; ++i) {
-      j = index[i];
-      if (top < bottom) {
-        top += sums[j];
-        tops.push(j);
-      } else {
-        bottom += sums[j];
-        bottoms.push(j);
-      }
-    }
-    return bottoms.reverse().concat(tops);
-  },
-
-  "reverse": function(data) {
-    return d3.range(data.length).reverse();
-  },
-
-  "default": function(data) {
-    return d3.range(data.length);
-  }
-
-};
-
-var d3_layout_stackOffsets = {
-
-  "silhouette": function(data) {
-    var n = data.length,
-        m = data[0].length,
-        sums = [],
-        max = 0,
-        i,
-        j,
-        o,
-        y0 = [];
-    for (j = 0; j < m; ++j) {
-      for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
-      if (o > max) max = o;
-      sums.push(o);
-    }
-    for (j = 0; j < m; ++j) {
-      y0[j] = (max - sums[j]) / 2;
-    }
-    return y0;
-  },
-
-  "wiggle": function(data) {
-    var n = data.length,
-        x = data[0],
-        m = x.length,
-        max = 0,
-        i,
-        j,
-        k,
-        s1,
-        s2,
-        s3,
-        dx,
-        o,
-        o0,
-        y0 = [];
-    y0[0] = o = o0 = 0;
-    for (j = 1; j < m; ++j) {
-      for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];
-      for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {
-        for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {
-          s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;
-        }
-        s2 += s3 * data[i][j][1];
-      }
-      y0[j] = o -= s1 ? s2 / s1 * dx : 0;
-      if (o < o0) o0 = o;
-    }
-    for (j = 0; j < m; ++j) y0[j] -= o0;
-    return y0;
-  },
-
-  "expand": function(data) {
-    var n = data.length,
-        m = data[0].length,
-        k = 1 / n,
-        i,
-        j,
-        o,
-        y0 = [];
-    for (j = 0; j < m; ++j) {
-      for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
-      if (o) for (i = 0; i < n; i++) data[i][j][1] /= o;
-      else for (i = 0; i < n; i++) data[i][j][1] = k;
-    }
-    for (j = 0; j < m; ++j) y0[j] = 0;
-    return y0;
-  },
-
-  "zero": function(data) {
-    var j = -1,
-        m = data[0].length,
-        y0 = [];
-    while (++j < m) y0[j] = 0;
-    return y0;
-  }
-
-};
-
-function d3_layout_stackMaxIndex(array) {
-  var i = 1,
-      j = 0,
-      v = array[0][1],
-      k,
-      n = array.length;
-  for (; i < n; ++i) {
-    if ((k = array[i][1]) > v) {
-      j = i;
-      v = k;
-    }
-  }
-  return j;
-}
-
-function d3_layout_stackReduceSum(d) {
-  return d.reduce(d3_layout_stackSum, 0);
-}
-
-function d3_layout_stackSum(p, d) {
-  return p + d[1];
-}
-d3.layout.histogram = function() {
-  var frequency = true,
-      valuer = Number,
-      ranger = d3_layout_histogramRange,
-      binner = d3_layout_histogramBinSturges;
-
-  function histogram(data, i) {
-    var bins = [],
-        values = data.map(valuer, this),
-        range = ranger.call(this, values, i),
-        thresholds = binner.call(this, range, values, i),
-        bin,
-        i = -1,
-        n = values.length,
-        m = thresholds.length - 1,
-        k = frequency ? 1 : 1 / n,
-        x;
-
-    // Initialize the bins.
-    while (++i < m) {
-      bin = bins[i] = [];
-      bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);
-      bin.y = 0;
-    }
-
-    // Fill the bins, ignoring values outside the range.
-    i = -1; while(++i < n) {
-      x = values[i];
-      if ((x >= range[0]) && (x <= range[1])) {
-        bin = bins[d3.bisect(thresholds, x, 1, m) - 1];
-        bin.y += k;
-        bin.push(data[i]);
-      }
-    }
-
-    return bins;
-  }
-
-  // Specifies how to extract a value from the associated data. The default
-  // value function is `Number`, which is equivalent to the identity function.
-  histogram.value = function(x) {
-    if (!arguments.length) return valuer;
-    valuer = x;
-    return histogram;
-  };
-
-  // Specifies the range of the histogram. Values outside the specified range
-  // will be ignored. The argument `x` may be specified either as a two-element
-  // array representing the minimum and maximum value of the range, or as a
-  // function that returns the range given the array of values and the current
-  // index `i`. The default range is the extent (minimum and maximum) of the
-  // values.
-  histogram.range = function(x) {
-    if (!arguments.length) return ranger;
-    ranger = d3.functor(x);
-    return histogram;
-  };
-
-  // Specifies how to bin values in the histogram. The argument `x` may be
-  // specified as a number, in which case the range of values will be split
-  // uniformly into the given number of bins. Or, `x` may be an array of
-  // threshold values, defining the bins; the specified array must contain the
-  // rightmost (upper) value, thus specifying n + 1 values for n bins. Or, `x`
-  // may be a function which is evaluated, being passed the range, the array of
-  // values, and the current index `i`, returning an array of thresholds. The
-  // default bin function will divide the values into uniform bins using
-  // Sturges' formula.
-  histogram.bins = function(x) {
-    if (!arguments.length) return binner;
-    binner = typeof x === "number"
-        ? function(range) { return d3_layout_histogramBinFixed(range, x); }
-        : d3.functor(x);
-    return histogram;
-  };
-
-  // Specifies whether the histogram's `y` value is a count (frequency) or a
-  // probability (density). The default value is true.
-  histogram.frequency = function(x) {
-    if (!arguments.length) return frequency;
-    frequency = !!x;
-    return histogram;
-  };
-
-  return histogram;
-};
-
-function d3_layout_histogramBinSturges(range, values) {
-  return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));
-}
-
-function d3_layout_histogramBinFixed(range, n) {
-  var x = -1,
-      b = +range[0],
-      m = (range[1] - b) / n,
-      f = [];
-  while (++x <= n) f[x] = m * x + b;
-  return f;
-}
-
-function d3_layout_histogramRange(values) {
-  return [d3.min(values), d3.max(values)];
-}
-d3.layout.hierarchy = function() {
-  var sort = d3_layout_hierarchySort,
-      children = d3_layout_hierarchyChildren,
-      value = d3_layout_hierarchyValue;
-
-  // Recursively compute the node depth and value.
-  // Also converts the data representation into a standard hierarchy structure.
-  function recurse(data, depth, nodes) {
-    var childs = children.call(hierarchy, data, depth),
-        node = d3_layout_hierarchyInline ? data : {data: data};
-    node.depth = depth;
-    nodes.push(node);
-    if (childs && (n = childs.length)) {
-      var i = -1,
-          n,
-          c = node.children = [],
-          v = 0,
-          j = depth + 1;
-      while (++i < n) {
-        d = recurse(childs[i], j, nodes);
-        d.parent = node;
-        c.push(d);
-        v += d.value;
-      }
-      if (sort) c.sort(sort);
-      if (value) node.value = v;
-    } else if (value) {
-      node.value = +value.call(hierarchy, data, depth) || 0;
-    }
-    return node;
-  }
-
-  // Recursively re-evaluates the node value.
-  function revalue(node, depth) {
-    var children = node.children,
-        v = 0;
-    if (children && (n = children.length)) {
-      var i = -1,
-          n,
-          j = depth + 1;
-      while (++i < n) v += revalue(children[i], j);
-    } else if (value) {
-      v = +value.call(hierarchy, d3_layout_hierarchyInline ? node : node.data, depth) || 0;
-    }
-    if (value) node.value = v;
-    return v;
-  }
-
-  function hierarchy(d) {
-    var nodes = [];
-    recurse(d, 0, nodes);
-    return nodes;
-  }
-
-  hierarchy.sort = function(x) {
-    if (!arguments.length) return sort;
-    sort = x;
-    return hierarchy;
-  };
-
-  hierarchy.children = function(x) {
-    if (!arguments.length) return children;
-    children = x;
-    return hierarchy;
-  };
-
-  hierarchy.value = function(x) {
-    if (!arguments.length) return value;
-    value = x;
-    return hierarchy;
-  };
-
-  // Re-evaluates the `value` property for the specified hierarchy.
-  hierarchy.revalue = function(root) {
-    revalue(root, 0);
-    return root;
-  };
-
-  return hierarchy;
-};
-
-// A method assignment helper for hierarchy subclasses.
-function d3_layout_hierarchyRebind(object, hierarchy) {
-  object.sort = d3.rebind(object, hierarchy.sort);
-  object.children = d3.rebind(object, hierarchy.children);
-  object.links = d3_layout_hierarchyLinks;
-  object.value = d3.rebind(object, hierarchy.value);
-
-  // If the new API is used, enabling inlining.
-  object.nodes = function(d) {
-    d3_layout_hierarchyInline = true;
-    return (object.nodes = object)(d);
-  };
-
-  return object;
-}
-
-function d3_layout_hierarchyChildren(d) {
-  return d.children;
-}
-
-function d3_layout_hierarchyValue(d) {
-  return d.value;
-}
-
-function d3_layout_hierarchySort(a, b) {
-  return b.value - a.value;
-}
-
-// Returns an array source+target objects for the specified nodes.
-function d3_layout_hierarchyLinks(nodes) {
-  return d3.merge(nodes.map(function(parent) {
-    return (parent.children || []).map(function(child) {
-      return {source: parent, target: child};
-    });
-  }));
-}
-
-// For backwards-compatibility, don't enable inlining by default.
-var d3_layout_hierarchyInline = false;
-d3.layout.pack = function() {
-  var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort),
-      size = [1, 1];
-
-  function pack(d, i) {
-    var nodes = hierarchy.call(this, d, i),
-        root = nodes[0];
-
-    // Recursively compute the layout.
-    root.x = 0;
-    root.y = 0;
-    d3_layout_packTree(root);
-
-    // Scale the layout to fit the requested size.
-    var w = size[0],
-        h = size[1],
-        k = 1 / Math.max(2 * root.r / w, 2 * root.r / h);
-    d3_layout_packTransform(root, w / 2, h / 2, k);
-
-    return nodes;
-  }
-
-  pack.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return pack;
-  };
-
-  return d3_layout_hierarchyRebind(pack, hierarchy);
-};
-
-function d3_layout_packSort(a, b) {
-  return a.value - b.value;
-}
-
-function d3_layout_packInsert(a, b) {
-  var c = a._pack_next;
-  a._pack_next = b;
-  b._pack_prev = a;
-  b._pack_next = c;
-  c._pack_prev = b;
-}
-
-function d3_layout_packSplice(a, b) {
-  a._pack_next = b;
-  b._pack_prev = a;
-}
-
-function d3_layout_packIntersects(a, b) {
-  var dx = b.x - a.x,
-      dy = b.y - a.y,
-      dr = a.r + b.r;
-  return (dr * dr - dx * dx - dy * dy) > .001; // within epsilon
-}
-
-function d3_layout_packCircle(nodes) {
-  var xMin = Infinity,
-      xMax = -Infinity,
-      yMin = Infinity,
-      yMax = -Infinity,
-      n = nodes.length,
-      a, b, c, j, k;
-
-  function bound(node) {
-    xMin = Math.min(node.x - node.r, xMin);
-    xMax = Math.max(node.x + node.r, xMax);
-    yMin = Math.min(node.y - node.r, yMin);
-    yMax = Math.max(node.y + node.r, yMax);
-  }
-
-  // Create node links.
-  nodes.forEach(d3_layout_packLink);
-
-  // Create first node.
-  a = nodes[0];
-  a.x = -a.r;
-  a.y = 0;
-  bound(a);
-
-  // Create second node.
-  if (n > 1) {
-    b = nodes[1];
-    b.x = b.r;
-    b.y = 0;
-    bound(b);
-
-    // Create third node and build chain.
-    if (n > 2) {
-      c = nodes[2];
-      d3_layout_packPlace(a, b, c);
-      bound(c);
-      d3_layout_packInsert(a, c);
-      a._pack_prev = c;
-      d3_layout_packInsert(c, b);
-      b = a._pack_next;
-
-      // Now iterate through the rest.
-      for (var i = 3; i < n; i++) {
-        d3_layout_packPlace(a, b, c = nodes[i]);
-
-        // Search for the closest intersection.
-        var isect = 0, s1 = 1, s2 = 1;
-        for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {
-          if (d3_layout_packIntersects(j, c)) {
-            isect = 1;
-            break;
-          }
-        }
-        if (isect == 1) {
-          for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {
-            if (d3_layout_packIntersects(k, c)) {
-              if (s2 < s1) {
-                isect = -1;
-                j = k;
-              }
-              break;
-            }
-          }
-        }
-
-        // Update node chain.
-        if (isect == 0) {
-          d3_layout_packInsert(a, c);
-          b = c;
-          bound(c);
-        } else if (isect > 0) {
-          d3_layout_packSplice(a, j);
-          b = j;
-          i--;
-        } else { // isect < 0
-          d3_layout_packSplice(j, b);
-          a = j;
-          i--;
-        }
-      }
-    }
-  }
-
-  // Re-center the circles and return the encompassing radius.
-  var cx = (xMin + xMax) / 2,
-      cy = (yMin + yMax) / 2,
-      cr = 0;
-  for (var i = 0; i < n; i++) {
-    var node = nodes[i];
-    node.x -= cx;
-    node.y -= cy;
-    cr = Math.max(cr, node.r + Math.sqrt(node.x * node.x + node.y * node.y));
-  }
-
-  // Remove node links.
-  nodes.forEach(d3_layout_packUnlink);
-
-  return cr;
-}
-
-function d3_layout_packLink(node) {
-  node._pack_next = node._pack_prev = node;
-}
-
-function d3_layout_packUnlink(node) {
-  delete node._pack_next;
-  delete node._pack_prev;
-}
-
-function d3_layout_packTree(node) {
-  var children = node.children;
-  if (children && children.length) {
-    children.forEach(d3_layout_packTree);
-    node.r = d3_layout_packCircle(children);
-  } else {
-    node.r = Math.sqrt(node.value);
-  }
-}
-
-function d3_layout_packTransform(node, x, y, k) {
-  var children = node.children;
-  node.x = (x += k * node.x);
-  node.y = (y += k * node.y);
-  node.r *= k;
-  if (children) {
-    var i = -1, n = children.length;
-    while (++i < n) d3_layout_packTransform(children[i], x, y, k);
-  }
-}
-
-function d3_layout_packPlace(a, b, c) {
-  var db = a.r + c.r,
-      dx = b.x - a.x,
-      dy = b.y - a.y;
-  if (db && (dx || dy)) {
-    var da = b.r + c.r,
-        dc = Math.sqrt(dx * dx + dy * dy),
-        cos = Math.max(-1, Math.min(1, (db * db + dc * dc - da * da) / (2 * db * dc))),
-        theta = Math.acos(cos),
-        x = cos * (db /= dc),
-        y = Math.sin(theta) * db;
-    c.x = a.x + x * dx + y * dy;
-    c.y = a.y + x * dy - y * dx;
-  } else {
-    c.x = a.x + db;
-    c.y = a.y;
-  }
-}
-// Implements a hierarchical layout using the cluster (or dendogram) algorithm.
-d3.layout.cluster = function() {
-  var hierarchy = d3.layout.hierarchy().sort(null).value(null),
-      separation = d3_layout_treeSeparation,
-      size = [1, 1]; // width, height
-
-  function cluster(d, i) {
-    var nodes = hierarchy.call(this, d, i),
-        root = nodes[0],
-        previousNode,
-        x = 0,
-        kx,
-        ky;
-
-    // First walk, computing the initial x & y values.
-    d3_layout_treeVisitAfter(root, function(node) {
-      var children = node.children;
-      if (children && children.length) {
-        node.x = d3_layout_clusterX(children);
-        node.y = d3_layout_clusterY(children);
-      } else {
-        node.x = previousNode ? x += separation(node, previousNode) : 0;
-        node.y = 0;
-        previousNode = node;
-      }
-    });
-
-    // Compute the left-most, right-most, and depth-most nodes for extents.
-    var left = d3_layout_clusterLeft(root),
-        right = d3_layout_clusterRight(root),
-        x0 = left.x - separation(left, right) / 2,
-        x1 = right.x + separation(right, left) / 2;
-
-    // Second walk, normalizing x & y to the desired size.
-    d3_layout_treeVisitAfter(root, function(node) {
-      node.x = (node.x - x0) / (x1 - x0) * size[0];
-      node.y = (1 - node.y / root.y) * size[1];
-    });
-
-    return nodes;
-  }
-
-  cluster.separation = function(x) {
-    if (!arguments.length) return separation;
-    separation = x;
-    return cluster;
-  };
-
-  cluster.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return cluster;
-  };
-
-  return d3_layout_hierarchyRebind(cluster, hierarchy);
-};
-
-function d3_layout_clusterY(children) {
-  return 1 + d3.max(children, function(child) {
-    return child.y;
-  });
-}
-
-function d3_layout_clusterX(children) {
-  return children.reduce(function(x, child) {
-    return x + child.x;
-  }, 0) / children.length;
-}
-
-function d3_layout_clusterLeft(node) {
-  var children = node.children;
-  return children && children.length ? d3_layout_clusterLeft(children[0]) : node;
-}
-
-function d3_layout_clusterRight(node) {
-  var children = node.children, n;
-  return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node;
-}
-// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm
-d3.layout.tree = function() {
-  var hierarchy = d3.layout.hierarchy().sort(null).value(null),
-      separation = d3_layout_treeSeparation,
-      size = [1, 1]; // width, height
-
-  function tree(d, i) {
-    var nodes = hierarchy.call(this, d, i),
-        root = nodes[0];
-
-    function firstWalk(node, previousSibling) {
-      var children = node.children,
-          layout = node._tree;
-      if (children && (n = children.length)) {
-        var n,
-            firstChild = children[0],
-            previousChild,
-            ancestor = firstChild,
-            child,
-            i = -1;
-        while (++i < n) {
-          child = children[i];
-          firstWalk(child, previousChild);
-          ancestor = apportion(child, previousChild, ancestor);
-          previousChild = child;
-        }
-        d3_layout_treeShift(node);
-        var midpoint = .5 * (firstChild._tree.prelim + child._tree.prelim);
-        if (previousSibling) {
-          layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
-          layout.mod = layout.prelim - midpoint;
-        } else {
-          layout.prelim = midpoint;
-        }
-      } else {
-        if (previousSibling) {
-          layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
-        }
-      }
-    }
-
-    function secondWalk(node, x) {
-      node.x = node._tree.prelim + x;
-      var children = node.children;
-      if (children && (n = children.length)) {
-        var i = -1,
-            n;
-        x += node._tree.mod;
-        while (++i < n) {
-          secondWalk(children[i], x);
-        }
-      }
-    }
-
-    function apportion(node, previousSibling, ancestor) {
-      if (previousSibling) {
-        var vip = node,
-            vop = node,
-            vim = previousSibling,
-            vom = node.parent.children[0],
-            sip = vip._tree.mod,
-            sop = vop._tree.mod,
-            sim = vim._tree.mod,
-            som = vom._tree.mod,
-            shift;
-        while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {
-          vom = d3_layout_treeLeft(vom);
-          vop = d3_layout_treeRight(vop);
-          vop._tree.ancestor = node;
-          shift = vim._tree.prelim + sim - vip._tree.prelim - sip + separation(vim, vip);
-          if (shift > 0) {
-            d3_layout_treeMove(d3_layout_treeAncestor(vim, node, ancestor), node, shift);
-            sip += shift;
-            sop += shift;
-          }
-          sim += vim._tree.mod;
-          sip += vip._tree.mod;
-          som += vom._tree.mod;
-          sop += vop._tree.mod;
-        }
-        if (vim && !d3_layout_treeRight(vop)) {
-          vop._tree.thread = vim;
-          vop._tree.mod += sim - sop;
-        }
-        if (vip && !d3_layout_treeLeft(vom)) {
-          vom._tree.thread = vip;
-          vom._tree.mod += sip - som;
-          ancestor = node;
-        }
-      }
-      return ancestor;
-    }
-
-    // Initialize temporary layout variables.
-    d3_layout_treeVisitAfter(root, function(node, previousSibling) {
-      node._tree = {
-        ancestor: node,
-        prelim: 0,
-        mod: 0,
-        change: 0,
-        shift: 0,
-        number: previousSibling ? previousSibling._tree.number + 1 : 0
-      };
-    });
-
-    // Compute the layout using Buchheim et al.'s algorithm.
-    firstWalk(root);
-    secondWalk(root, -root._tree.prelim);
-
-    // Compute the left-most, right-most, and depth-most nodes for extents.
-    var left = d3_layout_treeSearch(root, d3_layout_treeLeftmost),
-        right = d3_layout_treeSearch(root, d3_layout_treeRightmost),
-        deep = d3_layout_treeSearch(root, d3_layout_treeDeepest),
-        x0 = left.x - separation(left, right) / 2,
-        x1 = right.x + separation(right, left) / 2,
-        y1 = deep.depth || 1;
-
-    // Clear temporary layout variables; transform x and y.
-    d3_layout_treeVisitAfter(root, function(node) {
-      node.x = (node.x - x0) / (x1 - x0) * size[0];
-      node.y = node.depth / y1 * size[1];
-      delete node._tree;
-    });
-
-    return nodes;
-  }
-
-  tree.separation = function(x) {
-    if (!arguments.length) return separation;
-    separation = x;
-    return tree;
-  };
-
-  tree.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return tree;
-  };
-
-  return d3_layout_hierarchyRebind(tree, hierarchy);
-};
-
-function d3_layout_treeSeparation(a, b) {
-  return a.parent == b.parent ? 1 : 2;
-}
-
-// function d3_layout_treeSeparationRadial(a, b) {
-//   return (a.parent == b.parent ? 1 : 2) / a.depth;
-// }
-
-function d3_layout_treeLeft(node) {
-  var children = node.children;
-  return children && children.length ? children[0] : node._tree.thread;
-}
-
-function d3_layout_treeRight(node) {
-  var children = node.children,
-      n;
-  return children && (n = children.length) ? children[n - 1] : node._tree.thread;
-}
-
-function d3_layout_treeSearch(node, compare) {
-  var children = node.children;
-  if (children && (n = children.length)) {
-    var child,
-        n,
-        i = -1;
-    while (++i < n) {
-      if (compare(child = d3_layout_treeSearch(children[i], compare), node) > 0) {
-        node = child;
-      }
-    }
-  }
-  return node;
-}
-
-function d3_layout_treeRightmost(a, b) {
-  return a.x - b.x;
-}
-
-function d3_layout_treeLeftmost(a, b) {
-  return b.x - a.x;
-}
-
-function d3_layout_treeDeepest(a, b) {
-  return a.depth - b.depth;
-}
-
-function d3_layout_treeVisitAfter(node, callback) {
-  function visit(node, previousSibling) {
-    var children = node.children;
-    if (children && (n = children.length)) {
-      var child,
-          previousChild = null,
-          i = -1,
-          n;
-      while (++i < n) {
-        child = children[i];
-        visit(child, previousChild);
-        previousChild = child;
-      }
-    }
-    callback(node, previousSibling);
-  }
-  visit(node, null);
-}
-
-function d3_layout_treeShift(node) {
-  var shift = 0,
-      change = 0,
-      children = node.children,
-      i = children.length,
-      child;
-  while (--i >= 0) {
-    child = children[i]._tree;
-    child.prelim += shift;
-    child.mod += shift;
-    shift += child.shift + (change += child.change);
-  }
-}
-
-function d3_layout_treeMove(ancestor, node, shift) {
-  ancestor = ancestor._tree;
-  node = node._tree;
-  var change = shift / (node.number - ancestor.number);
-  ancestor.change += change;
-  node.change -= change;
-  node.shift += shift;
-  node.prelim += shift;
-  node.mod += shift;
-}
-
-function d3_layout_treeAncestor(vim, node, ancestor) {
-  return vim._tree.ancestor.parent == node.parent
-      ? vim._tree.ancestor
-      : ancestor;
-}
-// Squarified Treemaps by Mark Bruls, Kees Huizing, and Jarke J. van Wijk
-// Modified to support a target aspect ratio by Jeff Heer
-d3.layout.treemap = function() {
-  var hierarchy = d3.layout.hierarchy(),
-      round = Math.round,
-      size = [1, 1], // width, height
-      padding = null,
-      pad = d3_layout_treemapPadNull,
-      sticky = false,
-      stickies,
-      ratio = 0.5 * (1 + Math.sqrt(5)); // golden ratio
-
-  // Compute the area for each child based on value & scale.
-  function scale(children, k) {
-    var i = -1,
-        n = children.length,
-        child,
-        area;
-    while (++i < n) {
-      area = (child = children[i]).value * (k < 0 ? 0 : k);
-      child.area = isNaN(area) || area <= 0 ? 0 : area;
-    }
-  }
-
-  // Recursively arranges the specified node's children into squarified rows.
-  function squarify(node) {
-    var children = node.children;
-    if (children && children.length) {
-      var rect = pad(node),
-          row = [],
-          remaining = children.slice(), // copy-on-write
-          child,
-          best = Infinity, // the best row score so far
-          score, // the current row score
-          u = Math.min(rect.dx, rect.dy), // initial orientation
-          n;
-      scale(remaining, rect.dx * rect.dy / node.value);
-      row.area = 0;
-      while ((n = remaining.length) > 0) {
-        row.push(child = remaining[n - 1]);
-        row.area += child.area;
-        if ((score = worst(row, u)) <= best) { // continue with this orientation
-          remaining.pop();
-          best = score;
-        } else { // abort, and try a different orientation
-          row.area -= row.pop().area;
-          position(row, u, rect, false);
-          u = Math.min(rect.dx, rect.dy);
-          row.length = row.area = 0;
-          best = Infinity;
-        }
-      }
-      if (row.length) {
-        position(row, u, rect, true);
-        row.length = row.area = 0;
-      }
-      children.forEach(squarify);
-    }
-  }
-
-  // Recursively resizes the specified node's children into existing rows.
-  // Preserves the existing layout!
-  function stickify(node) {
-    var children = node.children;
-    if (children && children.length) {
-      var rect = pad(node),
-          remaining = children.slice(), // copy-on-write
-          child,
-          row = [];
-      scale(remaining, rect.dx * rect.dy / node.value);
-      row.area = 0;
-      while (child = remaining.pop()) {
-        row.push(child);
-        row.area += child.area;
-        if (child.z != null) {
-          position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length);
-          row.length = row.area = 0;
-        }
-      }
-      children.forEach(stickify);
-    }
-  }
-
-  // Computes the score for the specified row, as the worst aspect ratio.
-  function worst(row, u) {
-    var s = row.area,
-        r,
-        rmax = 0,
-        rmin = Infinity,
-        i = -1,
-        n = row.length;
-    while (++i < n) {
-      if (!(r = row[i].area)) continue;
-      if (r < rmin) rmin = r;
-      if (r > rmax) rmax = r;
-    }
-    s *= s;
-    u *= u;
-    return s
-        ? Math.max((u * rmax * ratio) / s, s / (u * rmin * ratio))
-        : Infinity;
-  }
-
-  // Positions the specified row of nodes. Modifies `rect`.
-  function position(row, u, rect, flush) {
-    var i = -1,
-        n = row.length,
-        x = rect.x,
-        y = rect.y,
-        v = u ? round(row.area / u) : 0,
-        o;
-    if (u == rect.dx) { // horizontal subdivision
-      if (flush || v > rect.dy) v = v ? rect.dy : 0; // over+underflow
-      while (++i < n) {
-        o = row[i];
-        o.x = x;
-        o.y = y;
-        o.dy = v;
-        x += o.dx = v ? round(o.area / v) : 0;
-      }
-      o.z = true;
-      o.dx += rect.x + rect.dx - x; // rounding error
-      rect.y += v;
-      rect.dy -= v;
-    } else { // vertical subdivision
-      if (flush || v > rect.dx) v = v ? rect.dx : 0; // over+underflow
-      while (++i < n) {
-        o = row[i];
-        o.x = x;
-        o.y = y;
-        o.dx = v;
-        y += o.dy = v ? round(o.area / v) : 0;
-      }
-      o.z = false;
-      o.dy += rect.y + rect.dy - y; // rounding error
-      rect.x += v;
-      rect.dx -= v;
-    }
-  }
-
-  function treemap(d) {
-    var nodes = stickies || hierarchy(d),
-        root = nodes[0];
-    root.x = 0;
-    root.y = 0;
-    root.dx = size[0];
-    root.dy = size[1];
-    if (stickies) hierarchy.revalue(root);
-    scale([root], root.dx * root.dy / root.value);
-    (stickies ? stickify : squarify)(root);
-    if (sticky) stickies = nodes;
-    return nodes;
-  }
-
-  treemap.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return treemap;
-  };
-
-  treemap.padding = function(x) {
-    if (!arguments.length) return padding;
-
-    function padFunction(node) {
-      var p = x.call(treemap, node, node.depth);
-      return p == null
-          ? d3_layout_treemapPadNull(node)
-          : d3_layout_treemapPad(node, typeof p === "number" ? [p, p, p, p] : p);
-    }
-
-    function padConstant(node) {
-      return d3_layout_treemapPad(node, x);
-    }
-
-    var type;
-    pad = (padding = x) == null ? d3_layout_treemapPadNull
-        : (type = typeof x) === "function" ? padFunction
-        : type === "number" ? (x = [x, x, x, x], padConstant)
-        : padConstant;
-    return treemap;
-  };
-
-  treemap.round = function(x) {
-    if (!arguments.length) return round != Number;
-    round = x ? Math.round : Number;
-    return treemap;
-  };
-
-  treemap.sticky = function(x) {
-    if (!arguments.length) return sticky;
-    sticky = x;
-    stickies = null;
-    return treemap;
-  };
-
-  treemap.ratio = function(x) {
-    if (!arguments.length) return ratio;
-    ratio = x;
-    return treemap;
-  };
-
-  return d3_layout_hierarchyRebind(treemap, hierarchy);
-};
-
-function d3_layout_treemapPadNull(node) {
-  return {x: node.x, y: node.y, dx: node.dx, dy: node.dy};
-}
-
-function d3_layout_treemapPad(node, padding) {
-  var x = node.x + padding[3],
-      y = node.y + padding[0],
-      dx = node.dx - padding[1] - padding[3],
-      dy = node.dy - padding[0] - padding[2];
-  if (dx < 0) { x += dx / 2; dx = 0; }
-  if (dy < 0) { y += dy / 2; dy = 0; }
-  return {x: x, y: y, dx: dx, dy: dy};
-}
-})();
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/d3/d3.time.js b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/d3/d3.time.js
deleted file mode 100644
index e1c0831c88e..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/d3/d3.time.js
+++ /dev/null
@@ -1,692 +0,0 @@
-(function(){d3.time = {};
-
-var d3_time = Date;
-d3.time.format = function(template) {
-  var n = template.length;
-
-  function format(date) {
-    var string = [],
-        i = -1,
-        j = 0,
-        c,
-        f;
-    while (++i < n) {
-      if (template.charCodeAt(i) == 37) {
-        string.push(
-            template.substring(j, i),
-            (f = d3_time_formats[c = template.charAt(++i)])
-            ? f(date) : c);
-        j = i + 1;
-      }
-    }
-    string.push(template.substring(j, i));
-    return string.join("");
-  }
-
-  format.parse = function(string) {
-    var date = new d3_time(1900, 0, 1),
-        i = d3_time_parse(date, template, string, 0);
-    if (i != string.length) return null;
-    if (date.hour12) {
-      var hours = date.getHours() % 12;
-      date.setHours(date.hour12pm ? hours + 12 : hours);
-    }
-    delete date.hour12;
-    delete date.hour12pm;
-    return date;
-  };
-
-  format.toString = function() {
-    return template;
-  };
-
-  return format;
-};
-
-function d3_time_parse(date, template, string, j) {
-  var c,
-      p,
-      i = 0,
-      n = template.length,
-      m = string.length;
-  while (i < n) {
-    if (j >= m) return -1;
-    c = template.charCodeAt(i++);
-    if (c == 37) {
-      p = d3_time_parsers[template.charAt(i++)];
-      if (!p || ((j = p(date, string, j)) < 0)) return -1;
-    } else if (c != string.charCodeAt(j++)) {
-      return -1;
-    }
-  }
-  return j;
-}
-
-var d3_time_zfill2 = d3.format("02d"),
-    d3_time_zfill3 = d3.format("03d"),
-    d3_time_zfill4 = d3.format("04d"),
-    d3_time_sfill2 = d3.format("2d");
-
-var d3_time_formats = {
-  a: function(d) { return d3_time_weekdays[d.getDay()].substring(0, 3); },
-  A: function(d) { return d3_time_weekdays[d.getDay()]; },
-  b: function(d) { return d3_time_months[d.getMonth()].substring(0, 3); },
-  B: function(d) { return d3_time_months[d.getMonth()]; },
-  c: d3.time.format("%a %b %e %H:%M:%S %Y"),
-  d: function(d) { return d3_time_zfill2(d.getDate()); },
-  e: function(d) { return d3_time_sfill2(d.getDate()); },
-  H: function(d) { return d3_time_zfill2(d.getHours()); },
-  I: function(d) { return d3_time_zfill2(d.getHours() % 12 || 12); },
-  j: d3_time_dayOfYear,
-  L: function(d) { return d3_time_zfill3(d.getMilliseconds()); },
-  m: function(d) { return d3_time_zfill2(d.getMonth() + 1); },
-  M: function(d) { return d3_time_zfill2(d.getMinutes()); },
-  p: function(d) { return d.getHours() >= 12 ? "PM" : "AM"; },
-  S: function(d) { return d3_time_zfill2(d.getSeconds()); },
-  U: d3_time_weekNumberSunday,
-  w: function(d) { return d.getDay(); },
-  W: d3_time_weekNumberMonday,
-  x: d3.time.format("%m/%d/%y"),
-  X: d3.time.format("%H:%M:%S"),
-  y: function(d) { return d3_time_zfill2(d.getFullYear() % 100); },
-  Y: function(d) { return d3_time_zfill4(d.getFullYear() % 10000); },
-  Z: d3_time_zone,
-  "%": function(d) { return "%"; }
-};
-
-var d3_time_parsers = {
-  a: d3_time_parseWeekdayAbbrev,
-  A: d3_time_parseWeekday,
-  b: d3_time_parseMonthAbbrev,
-  B: d3_time_parseMonth,
-  c: d3_time_parseLocaleFull,
-  d: d3_time_parseDay,
-  e: d3_time_parseDay,
-  H: d3_time_parseHour24,
-  I: d3_time_parseHour12,
-  // j: function(d, s, i) { /*TODO day of year [001,366] */ return i; },
-  L: d3_time_parseMilliseconds,
-  m: d3_time_parseMonthNumber,
-  M: d3_time_parseMinutes,
-  p: d3_time_parseAmPm,
-  S: d3_time_parseSeconds,
-  // U: function(d, s, i) { /*TODO week number (sunday) [00,53] */ return i; },
-  // w: function(d, s, i) { /*TODO weekday [0,6] */ return i; },
-  // W: function(d, s, i) { /*TODO week number (monday) [00,53] */ return i; },
-  x: d3_time_parseLocaleDate,
-  X: d3_time_parseLocaleTime,
-  y: d3_time_parseYear,
-  Y: d3_time_parseFullYear
-  // ,
-  // Z: function(d, s, i) { /*TODO time zone */ return i; },
-  // "%": function(d, s, i) { /*TODO literal % */ return i; }
-};
-
-// Note: weekday is validated, but does not set the date.
-function d3_time_parseWeekdayAbbrev(date, string, i) {
-  return string.substring(i, i += 3).toLowerCase() in d3_time_weekdayAbbrevLookup ? i : -1;
-}
-
-var d3_time_weekdayAbbrevLookup = {
-  sun: 3,
-  mon: 3,
-  tue: 3,
-  wed: 3,
-  thu: 3,
-  fri: 3,
-  sat: 3
-};
-
-// Note: weekday is validated, but does not set the date.
-function d3_time_parseWeekday(date, string, i) {
-  d3_time_weekdayRe.lastIndex = 0;
-  var n = d3_time_weekdayRe.exec(string.substring(i, i + 10));
-  return n ? i += n[0].length : -1;
-}
-
-var d3_time_weekdayRe = /^(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)/ig;
-
-var d3_time_weekdays = [
-  "Sunday",
-  "Monday",
-  "Tuesday",
-  "Wednesday",
-  "Thursday",
-  "Friday",
-  "Saturday"
-];
-
-function d3_time_parseMonthAbbrev(date, string, i) {
-  var n = d3_time_monthAbbrevLookup[string.substring(i, i += 3).toLowerCase()];
-  return n == null ? -1 : (date.setMonth(n), i);
-}
-
-var d3_time_monthAbbrevLookup = {
-  jan: 0,
-  feb: 1,
-  mar: 2,
-  apr: 3,
-  may: 4,
-  jun: 5,
-  jul: 6,
-  aug: 7,
-  sep: 8,
-  oct: 9,
-  nov: 10,
-  dec: 11
-};
-
-function d3_time_parseMonth(date, string, i) {
-  d3_time_monthRe.lastIndex = 0;
-  var n = d3_time_monthRe.exec(string.substring(i, i + 12));
-  return n ? (date.setMonth(d3_time_monthLookup[n[0].toLowerCase()]), i += n[0].length) : -1;
-}
-
-var d3_time_monthRe = /^(?:January|February|March|April|May|June|July|August|September|October|November|December)/ig;
-
-var d3_time_monthLookup = {
-  january: 0,
-  february: 1,
-  march: 2,
-  april: 3,
-  may: 4,
-  june: 5,
-  july: 6,
-  august: 7,
-  september: 8,
-  october: 9,
-  november: 10,
-  december: 11
-};
-
-var d3_time_months = [
-  "January",
-  "February",
-  "March",
-  "April",
-  "May",
-  "June",
-  "July",
-  "August",
-  "September",
-  "October",
-  "November",
-  "December"
-];
-
-function d3_time_parseLocaleFull(date, string, i) {
-  return d3_time_parse(date, d3_time_formats.c.toString(), string, i);
-}
-
-function d3_time_parseLocaleDate(date, string, i) {
-  return d3_time_parse(date, d3_time_formats.x.toString(), string, i);
-}
-
-function d3_time_parseLocaleTime(date, string, i) {
-  return d3_time_parse(date, d3_time_formats.X.toString(), string, i);
-}
-
-function d3_time_parseFullYear(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 4));
-  return n ? (date.setFullYear(n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_parseYear(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setFullYear(d3_time_century() + +n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_century() {
-  return ~~(new Date().getFullYear() / 1000) * 1000;
-}
-
-function d3_time_parseMonthNumber(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setMonth(n[0] - 1), i += n[0].length) : -1;
-}
-
-function d3_time_parseDay(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setDate(+n[0]), i += n[0].length) : -1;
-}
-
-// Note: we don't validate that the hour is in the range [0,23].
-function d3_time_parseHour24(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setHours(+n[0]), i += n[0].length) : -1;
-}
-
-// Note: we don't validate that the hour is in the range [1,12].
-function d3_time_parseHour12(date, string, i) {
-  date.hour12 = true;
-  return d3_time_parseHour24(date, string, i);
-}
-
-function d3_time_parseMinutes(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setMinutes(+n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_parseSeconds(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setSeconds(+n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_parseMilliseconds(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 3));
-  return n ? (date.setMilliseconds(+n[0]), i += n[0].length) : -1;
-}
-
-// Note: we don't look at the next directive.
-var d3_time_numberRe = /\s*\d+/;
-
-function d3_time_parseAmPm(date, string, i) {
-  var n = d3_time_amPmLookup[string.substring(i, i += 2).toLowerCase()];
-  return n == null ? -1 : (date.hour12pm = n, i);
-}
-
-var d3_time_amPmLookup = {
-  am: 0,
-  pm: 1
-};
-
-function d3_time_year(d) {
-  return new d3_time(d.getFullYear(), 0, 1);
-}
-
-function d3_time_daysElapsed(d0, d1) {
-  return ~~((d1 - d0) / 864e5 - (d1.getTimezoneOffset() - d0.getTimezoneOffset()) / 1440);
-}
-
-function d3_time_dayOfYear(d) {
-  return d3_time_zfill3(1 + d3_time_daysElapsed(d3_time_year(d), d));
-}
-
-function d3_time_weekNumberSunday(d) {
-  var d0 = d3_time_year(d);
-  return d3_time_zfill2(~~((d3_time_daysElapsed(d0, d) + d0.getDay()) / 7));
-}
-
-function d3_time_weekNumberMonday(d) {
-  var d0 = d3_time_year(d);
-  return d3_time_zfill2(~~((d3_time_daysElapsed(d0, d) + (d0.getDay() + 6) % 7) / 7));
-}
-
-// TODO table of time zone offset names?
-function d3_time_zone(d) {
-  var z = d.getTimezoneOffset(),
-      zs = z > 0 ? "-" : "+",
-      zh = ~~(Math.abs(z) / 60),
-      zm = Math.abs(z) % 60;
-  return zs + d3_time_zfill2(zh) + d3_time_zfill2(zm);
-}
-d3.time.format.utc = function(template) {
-  var local = d3.time.format(template);
-
-  function format(date) {
-    try {
-      d3_time = d3_time_format_utc;
-      var utc = new d3_time();
-      utc._ = date;
-      return local(utc);
-    } finally {
-      d3_time = Date;
-    }
-  }
-
-  format.parse = function(string) {
-    try {
-      d3_time = d3_time_format_utc;
-      var date = local.parse(string);
-      return date && date._;
-    } finally {
-      d3_time = Date;
-    }
-  };
-
-  format.toString = local.toString;
-
-  return format;
-};
-
-function d3_time_format_utc() {
-  this._ = new Date(Date.UTC.apply(this, arguments));
-}
-
-d3_time_format_utc.prototype = {
-  getDate: function() { return this._.getUTCDate(); },
-  getDay: function() { return this._.getUTCDay(); },
-  getFullYear: function() { return this._.getUTCFullYear(); },
-  getHours: function() { return this._.getUTCHours(); },
-  getMilliseconds: function() { return this._.getUTCMilliseconds(); },
-  getMinutes: function() { return this._.getUTCMinutes(); },
-  getMonth: function() { return this._.getUTCMonth(); },
-  getSeconds: function() { return this._.getUTCSeconds(); },
-  getTimezoneOffset: function() { return 0; },
-  valueOf: function() { return this._.getTime(); },
-  setDate: function(x) { this._.setUTCDate(x); },
-  setDay: function(x) { this._.setUTCDay(x); },
-  setFullYear: function(x) { this._.setUTCFullYear(x); },
-  setHours: function(x) { this._.setUTCHours(x); },
-  setMilliseconds: function(x) { this._.setUTCMilliseconds(x); },
-  setMinutes: function(x) { this._.setUTCMinutes(x); },
-  setMonth: function(x) { this._.setUTCMonth(x); },
-  setSeconds: function(x) { this._.setUTCSeconds(x); }
-};
-var d3_time_formatIso = d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ");
-
-d3.time.format.iso = Date.prototype.toISOString ? d3_time_formatIsoNative : d3_time_formatIso;
-
-function d3_time_formatIsoNative(date) {
-  return date.toISOString();
-}
-
-d3_time_formatIsoNative.parse = function(string) {
-  return new Date(string);
-};
-
-d3_time_formatIsoNative.toString = d3_time_formatIso.toString;
-function d3_time_range(floor, step, number) {
-  return function(t0, t1, dt) {
-    var time = floor(t0), times = [];
-    if (time < t0) step(time);
-    if (dt > 1) {
-      while (time < t1) {
-        var date = new Date(+time);
-        if (!(number(date) % dt)) times.push(date);
-        step(time);
-      }
-    } else {
-      while (time < t1) times.push(new Date(+time)), step(time);
-    }
-    return times;
-  };
-}
-d3.time.second = function(date) {
-  return new Date(~~(date / 1e3) * 1e3);
-};
-
-d3.time.second.utc = d3.time.second;
-d3.time.seconds = d3_time_range(d3.time.second, function(date) {
-  date.setTime(date.getTime() + 1e3);
-}, function(date) {
-  return date.getSeconds();
-});
-
-d3.time.seconds.utc = d3.time.seconds;
-d3.time.minute = function(date) {
-  return new Date(~~(date / 6e4) * 6e4);
-};
-
-d3.time.minute.utc = d3.time.minute;d3.time.minutes = d3_time_range(d3.time.minute, d3_time_minutesStep, function(date) {
-  return date.getMinutes();
-});
-
-d3.time.minutes.utc = d3_time_range(d3.time.minute, d3_time_minutesStep, function(date) {
-  return date.getUTCMinutes();
-});
-
-function d3_time_minutesStep(date) {
-  date.setTime(date.getTime() + 6e4); // assumes no leap seconds
-}
-d3.time.hour = function(date) {
-  var offset = date.getTimezoneOffset() / 60;
-  return new Date((~~(date / 36e5 - offset) + offset) * 36e5);
-};
-
-d3.time.hour.utc = function(date) {
-  return new Date(~~(date / 36e5) * 36e5);
-};
-d3.time.hours = d3_time_range(d3.time.hour, d3_time_hoursStep, function(date) {
-  return date.getHours();
-});
-
-d3.time.hours.utc = d3_time_range(d3.time.hour.utc, d3_time_hoursStep, function(date) {
-  return date.getUTCHours();
-});
-
-function d3_time_hoursStep(date) {
-  date.setTime(date.getTime() + 36e5);
-}
-d3.time.day = function(date) {
-  return new Date(date.getFullYear(), date.getMonth(), date.getDate());
-};
-
-d3.time.day.utc = function(date) {
-  return new Date(~~(date / 864e5) * 864e5);
-};
-d3.time.days = d3_time_range(d3.time.day, function(date) {
-  date.setDate(date.getDate() + 1);
-}, function(date) {
-  return date.getDate() - 1;
-});
-
-d3.time.days.utc = d3_time_range(d3.time.day.utc, function(date) {
-  date.setUTCDate(date.getUTCDate() + 1);
-}, function(date) {
-  return date.getUTCDate() - 1;
-});
-d3.time.week = function(date) {
-  (date = d3.time.day(date)).setDate(date.getDate() - date.getDay());
-  return date;
-};
-
-d3.time.week.utc = function(date) {
-  (date = d3.time.day.utc(date)).setUTCDate(date.getUTCDate() - date.getUTCDay());
-  return date;
-};
-d3.time.weeks = d3_time_range(d3.time.week, function(date) {
-  date.setDate(date.getDate() + 7);
-}, function(date) {
-  return ~~((date - new Date(date.getFullYear(), 0, 1)) / 6048e5);
-});
-
-d3.time.weeks.utc = d3_time_range(d3.time.week.utc, function(date) {
-  date.setUTCDate(date.getUTCDate() + 7);
-}, function(date) {
-  return ~~((date - Date.UTC(date.getUTCFullYear(), 0, 1)) / 6048e5);
-});
-d3.time.month = function(date) {
-  return new Date(date.getFullYear(), date.getMonth(), 1);
-};
-
-d3.time.month.utc = function(date) {
-  return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), 1));
-};
-d3.time.months = d3_time_range(d3.time.month, function(date) {
-  date.setMonth(date.getMonth() + 1);
-}, function(date) {
-  return date.getMonth();
-});
-
-d3.time.months.utc = d3_time_range(d3.time.month.utc, function(date) {
-  date.setUTCMonth(date.getUTCMonth() + 1);
-}, function(date) {
-  return date.getUTCMonth();
-});
-d3.time.year = function(date) {
-  return new Date(date.getFullYear(), 0, 1);
-};
-
-d3.time.year.utc = function(date) {
-  return new Date(Date.UTC(date.getUTCFullYear(), 0, 1));
-};
-d3.time.years = d3_time_range(d3.time.year, function(date) {
-  date.setFullYear(date.getFullYear() + 1);
-}, function(date) {
-  return date.getFullYear();
-});
-
-d3.time.years.utc = d3_time_range(d3.time.year.utc, function(date) {
-  date.setUTCFullYear(date.getUTCFullYear() + 1);
-}, function(date) {
-  return date.getUTCFullYear();
-});
-// TODO nice
-function d3_time_scale(linear, methods, format) {
-
-  function scale(x) {
-    return linear(x);
-  }
-
-  scale.invert = function(x) {
-    return d3_time_scaleDate(linear.invert(x));
-  };
-
-  scale.domain = function(x) {
-    if (!arguments.length) return linear.domain().map(d3_time_scaleDate);
-    linear.domain(x);
-    return scale;
-  };
-
-  scale.ticks = function(m, k) {
-    var extent = d3_time_scaleExtent(scale.domain());
-    if (typeof m !== "function") {
-      var span = extent[1] - extent[0],
-          target = span / m,
-          i = d3.bisect(d3_time_scaleSteps, target, 1, d3_time_scaleSteps.length - 1);
-      if (Math.log(target / d3_time_scaleSteps[i - 1]) < Math.log(d3_time_scaleSteps[i] / target)) --i;
-      m = methods[i];
-      k = m[1];
-      m = m[0];
-    }
-    return m(extent[0], extent[1], k);
-  };
-
-  scale.tickFormat = function() {
-    return format;
-  };
-
-  scale.copy = function() {
-    return d3_time_scale(linear.copy(), methods, format);
-  };
-
-  // TOOD expose d3_scale_linear_rebind?
-  scale.range = d3.rebind(scale, linear.range);
-  scale.rangeRound = d3.rebind(scale, linear.rangeRound);
-  scale.interpolate = d3.rebind(scale, linear.interpolate);
-  scale.clamp = d3.rebind(scale, linear.clamp);
-
-  return scale;
-}
-
-// TODO expose d3_scaleExtent?
-function d3_time_scaleExtent(domain) {
-  var start = domain[0], stop = domain[domain.length - 1];
-  return start < stop ? [start, stop] : [stop, start];
-}
-
-function d3_time_scaleDate(t) {
-  return new Date(t);
-}
-
-function d3_time_scaleFormat(formats) {
-  return function(date) {
-    var i = formats.length - 1, f = formats[i];
-    while (!f[1](date)) f = formats[--i];
-    return f[0](date);
-  };
-}
-
-var d3_time_scaleSteps = [
-  1e3,    // 1-second
-  5e3,    // 5-second
-  15e3,   // 15-second
-  3e4,    // 30-second
-  6e4,    // 1-minute
-  3e5,    // 5-minute
-  9e5,    // 15-minute
-  18e5,   // 30-minute
-  36e5,   // 1-hour
-  108e5,  // 3-hour
-  216e5,  // 6-hour
-  432e5,  // 12-hour
-  864e5,  // 1-day
-  1728e5, // 2-day
-  6048e5, // 1-week
-  1728e6, // 1-month
-  7776e6, // 3-month
-  31536e6 // 1-year
-];
-
-var d3_time_scaleLocalMethods = [
-  [d3.time.seconds, 1],
-  [d3.time.seconds, 5],
-  [d3.time.seconds, 15],
-  [d3.time.seconds, 30],
-  [d3.time.minutes, 1],
-  [d3.time.minutes, 5],
-  [d3.time.minutes, 15],
-  [d3.time.minutes, 30],
-  [d3.time.hours, 1],
-  [d3.time.hours, 3],
-  [d3.time.hours, 6],
-  [d3.time.hours, 12],
-  [d3.time.days, 1],
-  [d3.time.days, 2],
-  [d3.time.weeks, 1],
-  [d3.time.months, 1],
-  [d3.time.months, 3],
-  [d3.time.years, 1]
-];
-
-var d3_time_scaleLocalFormats = [
-  [d3.time.format("%Y"), function(d) { return true; }],
-  [d3.time.format("%B"), function(d) { return d.getMonth(); }],
-  [d3.time.format("%b %d"), function(d) { return d.getDate() != 1; }],
-  [d3.time.format("%a %d"), function(d) { return d.getDay() && d.getDate() != 1; }],
-  [d3.time.format("%I %p"), function(d) { return d.getHours(); }],
-  [d3.time.format("%I:%M"), function(d) { return d.getMinutes(); }],
-  [d3.time.format(":%S"), function(d) { return d.getSeconds() || d.getMilliseconds(); }]
-];
-
-var d3_time_scaleLocalFormat = d3_time_scaleFormat(d3_time_scaleLocalFormats);
-
-d3.time.scale = function() {
-  return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);
-};
-var d3_time_scaleUTCMethods = [
-  [d3.time.seconds.utc, 1],
-  [d3.time.seconds.utc, 5],
-  [d3.time.seconds.utc, 15],
-  [d3.time.seconds.utc, 30],
-  [d3.time.minutes.utc, 1],
-  [d3.time.minutes.utc, 5],
-  [d3.time.minutes.utc, 15],
-  [d3.time.minutes.utc, 30],
-  [d3.time.hours.utc, 1],
-  [d3.time.hours.utc, 3],
-  [d3.time.hours.utc, 6],
-  [d3.time.hours.utc, 12],
-  [d3.time.days.utc, 1],
-  [d3.time.days.utc, 2],
-  [d3.time.weeks.utc, 1],
-  [d3.time.months.utc, 1],
-  [d3.time.months.utc, 3],
-  [d3.time.years.utc, 1]
-];
-
-var d3_time_scaleUTCFormats = [
-  [d3.time.format.utc("%Y"), function(d) { return true; }],
-  [d3.time.format.utc("%B"), function(d) { return d.getUTCMonth(); }],
-  [d3.time.format.utc("%b %d"), function(d) { return d.getUTCDate() != 1; }],
-  [d3.time.format.utc("%a %d"), function(d) { return d.getUTCDay() && d.getUTCDate() != 1; }],
-  [d3.time.format.utc("%I %p"), function(d) { return d.getUTCHours(); }],
-  [d3.time.format.utc("%I:%M"), function(d) { return d.getUTCMinutes(); }],
-  [d3.time.format.utc(":%S"), function(d) { return d.getUTCSeconds() || d.getUTCMilliseconds(); }]
-];
-
-var d3_time_scaleUTCFormat = d3_time_scaleFormat(d3_time_scaleUTCFormats);
-
-d3.time.scale.utc = function() {
-  return d3_time_scale(d3.scale.linear(), d3_time_scaleUTCMethods, d3_time_scaleUTCFormat);
-};
-})();
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/dagre/dagre.js b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/dagre/dagre.js
deleted file mode 100644
index 54e90e13fbf..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/dagre/dagre.js
+++ /dev/null
@@ -1,4049 +0,0 @@
-/*
-Copyright (c) 2012 Chris Pettitt
-
-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.
-*/
-(function() {
-  dagre = {};
-dagre.version = "0.0.6";
-/*
- * Directed multi-graph used during layout.
- */
-dagre.graph = {};
-
-/*
- * Creates a new directed multi-graph. This should be invoked with
- * `var g = dagre.graph()` and _not_ `var g = new dagre.graph()`.
- */
-dagre.graph = function() {
-  var nodes = {},
-      inEdges = {},
-      outEdges = {},
-      edges = {},
-      graph = {},
-      idCounter = 0;
-
-  graph.addNode = function(u, value) {
-    if (graph.hasNode(u)) {
-      throw new Error("Graph already has node '" + u + "':\n" + graph.toString());
-    }
-    nodes[u] = { id: u, value: value };
-    inEdges[u] = {};
-    outEdges[u] = {};
-  }
-
-  graph.delNode = function(u) {
-    strictGetNode(u);
-
-    graph.edges(u).forEach(function(e) { graph.delEdge(e); });
-
-    delete inEdges[u];
-    delete outEdges[u];
-    delete nodes[u];
-  }
-
-  graph.node = function(u) {
-    return strictGetNode(u).value;
-  }
-
-  graph.hasNode = function(u) {
-    return u in nodes;
-  }
-
-  graph.addEdge = function(e, source, target, value) {
-    strictGetNode(source);
-    strictGetNode(target);
-
-    if (e === null) {
-      e = "_ANON-" + ++idCounter;
-    }
-    else if (graph.hasEdge(e)) {
-      throw new Error("Graph already has edge '" + e + "':\n" + graph.toString());
-    }
-
-    edges[e] = { id: e, source: source, target: target, value: value };
-    addEdgeToMap(inEdges[target], source, e);
-    addEdgeToMap(outEdges[source], target, e);
-  }
-
-  graph.delEdge = function(e) {
-    var edge = strictGetEdge(e);
-    delEdgeFromMap(inEdges[edge.target], edge.source, e)
-    delEdgeFromMap(outEdges[edge.source], edge.target, e)
-    delete edges[e];
-  }
-
-  graph.edge = function(e) {
-    return strictGetEdge(e).value;
-  }
-
-  graph.source = function(e) {
-    return strictGetEdge(e).source;
-  }
-
-  graph.target = function(e) {
-    return strictGetEdge(e).target;
-  }
-
-  graph.hasEdge = function(e) {
-    return e in edges;
-  }
-
-  graph.successors = function(u) {
-    strictGetNode(u);
-    return keys(outEdges[u]).map(function(v) { return nodes[v].id; });
-  }
-
-  graph.predecessors = function(u) {
-    strictGetNode(u);
-    return keys(inEdges[u]).map(function(v) { return nodes[v].id; });
-  }
-
-  graph.neighbors = function(u) {
-    strictGetNode(u);
-    var vs = {};
-    keys(outEdges[u]).map(function(v) { vs[v] = true; });
-    keys(inEdges[u]).map(function(v) { vs[v] = true; });
-    return keys(vs).map(function(v) { return nodes[v].id; });
-  }
-
-  graph.nodes = function() {
-    var nodes = [];
-    graph.eachNode(function(id, _) { nodes.push(id); });
-    return nodes;
-  }
-
-  graph.eachNode = function(func) {
-    for (var k in nodes) {
-      var node = nodes[k];
-      func(node.id, node.value);
-    }
-  }
-
-  /*
-   * Return all edges with no arguments,
-   * the ones that are incident on a node (one argument),
-   * or all edges from a source to a target (two arguments)
-   */
-  graph.edges = function(u, v) {
-    var es, sourceEdges;
-    if (!arguments.length) {
-      es = [];
-      graph.eachEdge(function(id) { es.push(id); });
-      return es;
-    } else if (arguments.length === 1) {
-      return union([graph.inEdges(u), graph.outEdges(u)]);
-    } else if (arguments.length === 2) {
-      strictGetNode(u);
-      strictGetNode(v);
-      sourceEdges = outEdges[u];
-      es = (v in sourceEdges) ? keys(sourceEdges[v].edges) : [];
-      return es.map(function(e) { return edges[e].id });
-    }
-  };
-
-  graph.eachEdge = function(func) {
-    for (var k in edges) {
-      var edge = edges[k];
-      func(edge.id, edge.source, edge.target, edge.value);
-    }
-  }
-
-  /*
-   * Return all in edges to a target node
-   */
-  graph.inEdges = function(target) {
-    strictGetNode(target);
-    return concat(values(inEdges[target]).map(function(es) { return keys(es.edges); }));
-  };
-
-  /*
-   * Return all out edges from a source node
-   */
-  graph.outEdges = function(source) {
-    strictGetNode(source);
-    return concat(values(outEdges[source]).map(function(es) { return keys(es.edges); }));
-  };
-
-  graph.subgraph = function(us) {
-    var g = dagre.graph();
-    us.forEach(function(u) {
-      g.addNode(u, graph.node(u));
-    });
-    values(edges).forEach(function(e) {
-      if (g.hasNode(e.source) && g.hasNode(e.target)) {
-        g.addEdge(e.id, e.source, e.target, graph.edge(e.id));
-      }
-    });
-    return g;
-  };
-
-  graph.toString = function() {
-    var str = "GRAPH:\n";
-    str += "    Nodes:\n";
-    keys(nodes).forEach(function(u) {
-      str += "        " + u + ": " + JSON.stringify(nodes[u].value) + "\n";
-    });
-    str += "    Edges:\n";
-    keys(edges).forEach(function(e) {
-      var edge = edges[e];
-      str += "        " + e + " (" + edge.source + " -> " + edge.target + "): " + JSON.stringify(edges[e].value) + "\n";
-    });
-    return str;
-  };
-
-  function addEdgeToMap(map, v, e) {
-    var vEntry = map[v];
-    if (!vEntry) {
-      vEntry = map[v] = { count: 0, edges: {} };
-    }
-    vEntry.count++;
-    vEntry.edges[e] = true;
-  }
-
-  function delEdgeFromMap(map, v, e) {
-    var vEntry = map[v];
-    if (--vEntry.count == 0) {
-      delete map[v];
-    } else {
-      delete vEntry.edges[e];
-    }
-  }
-
-  function strictGetNode(u) {
-    var node = nodes[u];
-    if (!(u in nodes)) {
-      throw new Error("Node '" + u + "' is not in graph:\n" + graph.toString());
-    }
-    return node;
-  }
-
-  function strictGetEdge(e) {
-    var edge = edges[e];
-    if (!edge) {
-      throw new Error("Edge '" + e + "' is not in graph:\n" + graph.toString());
-    }
-    return edge;
-  }
-
-  return graph;
-}
-dagre.layout = function() {
-  // External configuration
-  var config = {
-      // Nodes to lay out. At minimum must have `width` and `height` attributes.
-      nodes: [],
-      // Edges to lay out. At mimimum must have `source` and `target` attributes.
-      edges: [],
-      // How much debug information to include?
-      debugLevel: 0,
-  };
-
-  var timer = createTimer();
-
-  // Phase functions
-  var
-      acyclic = dagre.layout.acyclic(),
-      rank = dagre.layout.rank(),
-      order = dagre.layout.order(),
-      position = dagre.layout.position();
-
-  // This layout object
-  var self = {};
-
-  self.nodes = propertyAccessor(self, config, "nodes");
-  self.edges = propertyAccessor(self, config, "edges");
-
-  self.orderIters = delegateProperty(order.iterations);
-
-  self.nodeSep = delegateProperty(position.nodeSep);
-  self.edgeSep = delegateProperty(position.edgeSep);
-  self.universalSep = delegateProperty(position.universalSep);
-  self.rankSep = delegateProperty(position.rankSep);
-  self.rankDir = delegateProperty(position.rankDir);
-  self.debugAlignment = delegateProperty(position.debugAlignment);
-
-  self.debugLevel = propertyAccessor(self, config, "debugLevel", function(x) {
-    timer.enabled(x);
-    acyclic.debugLevel(x);
-    rank.debugLevel(x);
-    order.debugLevel(x);
-    position.debugLevel(x);
-  });
-
-  self.run = timer.wrap("Total layout", run);
-
-  return self;
-
-  // Build graph and save mapping of generated ids to original nodes and edges
-  function init() {
-    var g = dagre.graph();
-    var nextId = 0;
-
-    // Tag each node so that we can properly represent relationships when
-    // we add edges. Also copy relevant dimension information.
-    config.nodes.forEach(function(u) {
-      var id = "id" in u ? u.id : "_N" + nextId++;
-      u.dagre = { id: id, width: u.width, height: u.height };
-      g.addNode(id, u.dagre);
-    });
-
-    config.edges.forEach(function(e) {
-      var source = e.source.dagre.id;
-      if (!g.hasNode(source)) {
-        throw new Error("Source node for '" + e + "' not in node list");
-      }
-
-      var target = e.target.dagre.id;
-      if (!g.hasNode(target)) {
-        throw new Error("Target node for '" + e + "' not in node list");
-      }
-
-      e.dagre = {
-        points: []
-      };
-
-      // Track edges that aren't self loops - layout does nothing for self
-      // loops, so they can be skipped.
-      if (source !== target) {
-        var id = "id" in e ? e.id : "_E" + nextId++;
-        e.dagre.id = id;
-        e.dagre.minLen = e.minLen || 1;
-        e.dagre.width = e.width || 0;
-        e.dagre.height = e.height || 0;
-        g.addEdge(id, source, target, e.dagre);
-      }
-    });
-
-    return g;
-  }
-
-  function run () {
-    var rankSep = self.rankSep();
-    try {
-      if (!config.nodes.length) {
-        return;
-      }
-
-      // Build internal graph
-      var g = init();
-
-      // Make space for edge labels
-      g.eachEdge(function(e, s, t, a) {
-        a.minLen *= 2;
-      });
-      self.rankSep(rankSep / 2);
-
-      // Reverse edges to get an acyclic graph, we keep the graph in an acyclic
-      // state until the very end.
-      acyclic.run(g);
-
-      // Determine the rank for each node. Nodes with a lower rank will appear
-      // above nodes of higher rank.
-      rank.run(g);
-
-      // Normalize the graph by ensuring that every edge is proper (each edge has
-      // a length of 1). We achieve this by adding dummy nodes to long edges,
-      // thus shortening them.
-      normalize(g);
-
-      // Order the nodes so that edge crossings are minimized.
-      order.run(g);
-
-      // Find the x and y coordinates for every node in the graph.
-      position.run(g);
-
-      // De-normalize the graph by removing dummy nodes and augmenting the
-      // original long edges with coordinate information.
-      undoNormalize(g);
-
-      // Reverses points for edges that are in a reversed state.
-      fixupEdgePoints(g);
-
-      // Reverse edges that were revered previously to get an acyclic graph.
-      acyclic.undo(g);
-    } finally {
-      self.rankSep(rankSep);
-    }
-
-    return self;
-  }
-
-  // Assumes input graph has no self-loops and is otherwise acyclic.
-  function normalize(g) {
-    var dummyCount = 0;
-    g.eachEdge(function(e, s, t, a) {
-      var sourceRank = g.node(s).rank;
-      var targetRank = g.node(t).rank;
-      if (sourceRank + 1 < targetRank) {
-        for (var u = s, rank = sourceRank + 1, i = 0; rank < targetRank; ++rank, ++i) {
-          var v = "_D" + ++dummyCount;
-          var node = {
-            width: a.width,
-            height: a.height,
-            edge: { id: e, source: s, target: t, attrs: a },
-            rank: rank,
-            dummy: true
-          };
-
-          // If this node represents a bend then we will use it as a control
-          // point. For edges with 2 segments this will be the center dummy
-          // node. For edges with more than two segments, this will be the
-          // first and last dummy node.
-          if (i === 0) node.index = 0;
-          else if (rank + 1 === targetRank) node.index = 1;
-
-          g.addNode(v, node);
-          g.addEdge(null, u, v, {});
-          u = v;
-        }
-        g.addEdge(null, u, t, {});
-        g.delEdge(e);
-      }
-    });
-  }
-
-  function undoNormalize(g) {
-    var visited = {};
-
-    g.eachNode(function(u, a) {
-      if (a.dummy && "index" in a) {
-        var edge = a.edge;
-        if (!g.hasEdge(edge.id)) {
-          g.addEdge(edge.id, edge.source, edge.target, edge.attrs);
-        }
-        var points = g.edge(edge.id).points;
-        points[a.index] = { x: a.x, y: a.y, ul: a.ul, ur: a.ur, dl: a.dl, dr: a.dr };
-        g.delNode(u);
-      }
-    });
-  }
-
-  function fixupEdgePoints(g) {
-    g.eachEdge(function(e, s, t, a) { if (a.reversed) a.points.reverse(); });
-  }
-
-  function delegateProperty(f) {
-    return function() {
-      if (!arguments.length) return f();
-      f.apply(null, arguments);
-      return self;
-    }
-  }
-}
-dagre.layout.acyclic = function() {
-  // External configuration
-  var config = {
-    debugLevel: 0
-  }
-
-  var timer = createTimer();
-
-  var self = {};
-
-  self.debugLevel = propertyAccessor(self, config, "debugLevel", function(x) {
-    timer.enabled(x);
-  });
-
-  self.run = timer.wrap("Acyclic Phase", run);
-
-  self.undo = function(g) {
-    g.eachEdge(function(e, s, t, a) {
-      if (a.reversed) {
-        delete a.reversed;
-        g.delEdge(e);
-        g.addEdge(e, t, s, a);
-      }
-    });
-  }
-
-  return self;
-
-  function run(g) {
-    var onStack = {},
-        visited = {},
-        reverseCount = 0;
-
-    function dfs(u) {
-      if (u in visited) return;
-
-      visited[u] = onStack[u] = true;
-      g.outEdges(u).forEach(function(e) {
-        var t = g.target(e),
-            a;
-
-        if (t in onStack) {
-          a = g.edge(e);
-          g.delEdge(e);
-          a.reversed = true;
-          ++reverseCount;
-          g.addEdge(e, t, u, a);
-        } else {
-          dfs(t);
-        }
-      });
-
-      delete onStack[u];
-    }
-
-    g.eachNode(function(u) { dfs(u); });
-
-    if (config.debugLevel >= 2) console.log("Acyclic Phase: reversed " + reverseCount + " edge(s)");
-  }
-};
-dagre.layout.rank = function() {
-  // External configuration
-  var config = {
-    debugLevel: 0
-  };
-
-  var timer = createTimer();
-
-  var self = {};
-
-  self.debugLevel = propertyAccessor(self, config, "debugLevel", function(x) {
-    timer.enabled(x);
-  });
-
-  self.run = timer.wrap("Rank Phase", run);
-
-  return self;
-
-  function run(g) {
-    initRank(g);
-    components(g).forEach(function(cmpt) {
-      var subgraph = g.subgraph(cmpt);
-      feasibleTree(subgraph);
-      normalize(subgraph);
-    });
-  };
-
-
-  function initRank(g) {
-    var minRank = {};
-    var pq = priorityQueue();
-
-    g.eachNode(function(u) {
-      pq.add(u, g.inEdges(u).length);
-      minRank[u] = 0;
-    });
-
-    while (pq.size() > 0) {
-      var minId = pq.min();
-      if (pq.priority(minId) > 0) {
-        throw new Error("Input graph is not acyclic: " + g.toString());
-      }
-      pq.removeMin();
-
-      var rank = minRank[minId];
-      g.node(minId).rank = rank;
-
-      g.outEdges(minId).forEach(function(e) {
-        var target = g.target(e);
-        minRank[target] = Math.max(minRank[target], rank + (g.edge(e).minLen || 1));
-        pq.decrease(target, pq.priority(target) - 1);
-      });
-    }
-  }
-
-  function feasibleTree(g) {
-    // Precompute minimum lengths for each directed edge
-    var minLen = {};
-    g.eachEdge(function(e, source, target, edge) {
-      var id = incidenceId(source, target);
-      minLen[id] = Math.max(minLen[id] || 1, edge.minLen || 1);
-    });
-
-    var tree = dagre.util.prim(g, function(u, v) {
-      return Math.abs(g.node(u).rank - g.node(v).rank) - minLen[incidenceId(u, v)];
-    });
-
-    var visited = {};
-    function dfs(u, rank) {
-      visited[u] = true;
-      g.node(u).rank = rank;
-
-      tree[u].forEach(function(v) {
-        if (!(v in visited)) {
-          var delta = minLen[incidenceId(u, v)];
-          dfs(v, rank + (g.edges(u, v).length ? delta : -delta));
-        }
-      });
-    }
-
-    dfs(g.nodes()[0], 0);
-
-    return tree;
-  }
-
-  function normalize(g) {
-    var m = min(g.nodes().map(function(u) { return g.node(u).rank; }));
-    g.eachNode(function(u, node) { node.rank -= m; });
-  }
-
-  /*
-   * This id can be used to group (in an undirected manner) multi-edges
-   * incident on the same two nodes.
-   */
-  function incidenceId(u, v) {
-    return u < v ?  u.length + ":" + u + "-" + v : v.length + ":" + v + "-" + u;
-  }
-}
-dagre.layout.order = function() {
-  var config = {
-    iterations: 24, // max number of iterations
-    debugLevel: 0
-  };
-
-  var timer = createTimer();
-
-  var self = {};
-
-  self.iterations = propertyAccessor(self, config, "iterations");
-
-  self.debugLevel = propertyAccessor(self, config, "debugLevel", function(x) {
-    timer.enabled(x);
-  });
-
-  self.run = timer.wrap("Order Phase", run);
-
-  return self;
-
-  function run(g) {
-    var layering = initOrder(g);
-    var bestLayering = copyLayering(layering);
-    var bestCC = crossCount(g, layering);
-
-    if (config.debugLevel >= 2) {
-      console.log("Order phase start cross count: " + bestCC);
-    }
-
-    var cc, i, lastBest;
-    for (i = 0, lastBest = 0; lastBest < 4 && i < config.iterations; ++i, ++lastBest) {
-      cc = sweep(g, i, layering);
-      if (cc < bestCC) {
-        bestLayering = copyLayering(layering);
-        bestCC = cc;
-        lastBest = 0;
-      }
-      if (config.debugLevel >= 3) {
-        console.log("Order phase iter " + i + " cross count: " + bestCC);
-      }
-    }
-
-    bestLayering.forEach(function(layer) {
-      layer.forEach(function(u, i) {
-        g.node(u).order = i;
-      });
-    });
-
-    if (config.debugLevel >= 2) {
-      console.log("Order iterations: " + i);
-      console.log("Order phase best cross count: " + bestCC);
-    }
-
-    return bestLayering;
-  }
-
-  function initOrder(g) {
-    var layering = [];
-    g.eachNode(function(n, a) {
-      var layer = layering[a.rank] || (layering[a.rank] = []);
-      layer.push(n);
-    });
-    return layering;
-  }
-
-  /*
-   * Returns a function that will return the predecessors for a node. This
-   * function differs from `g.predecessors(u)` in that a predecessor appears
-   * for each incident edge (`g.predecessors(u)` treats predecessors as a set).
-   * This allows pseudo-weighting of predecessor nodes.
-   */
-  function multiPredecessors(g) {
-    return function(u) {
-      var preds = [];
-      g.inEdges(u).forEach(function(e) {
-        preds.push(g.source(e));
-      });
-      return preds;
-    }
-  }
-
-  /*
-   * Same as `multiPredecessors(g)` but for successors.
-   */
-  function multiSuccessors(g) {
-    return function(u) {
-      var sucs = [];
-      g.outEdges(u).forEach(function(e) {
-        sucs.push(g.target(e));
-      });
-      return sucs;
-    }
-  }
-
-  function sweep(g, iter, layering) {
-    if (iter % 2 === 0) {
-      for (var i = 1; i < layering.length; ++i) {
-        barycenterLayer(layering[i - 1], layering[i], multiPredecessors(g));
-      }
-    } else {
-      for (var i = layering.length - 2; i >= 0; --i) {
-        barycenterLayer(layering[i + 1], layering[i], multiSuccessors(g));
-      }
-    }
-    return crossCount(g, layering);
-  }
-
-  /*
-   * Given a fixed layer and a movable layer in a graph this function will
-   * attempt to find an improved ordering for the movable layer such that
-   * edge crossings may be reduced.
-   *
-   * This algorithm is based on the barycenter method.
-   */
-  function barycenterLayer(fixed, movable, predecessors) {
-    var pos = layerPos(movable);
-    var bs = barycenters(fixed, movable, predecessors);
-
-    var toSort = movable.slice(0).sort(function(x, y) {
-      return bs[x] - bs[y] || pos[x] - pos[y];
-    });
-
-    for (var i = movable.length - 1; i >= 0; --i) {
-      if (bs[movable[i]] !== -1) {
-        movable[i] = toSort.pop();
-      }
-    }
-  }
-
-  /*
-   * Given a fixed layer and a movable layer in a graph, this function will
-   * return weights for the movable layer that can be used to reorder the layer
-   * for potentially reduced edge crossings.
-   */
-  function barycenters(fixed, movable, predecessors) {
-    var pos = layerPos(fixed), // Position of node in fixed list
-        bs = {};               // Barycenters for each node
-
-    movable.forEach(function(u) {
-      var b = -1;
-      var preds = predecessors(u);
-      if (preds.length > 0) {
-        b = 0;
-        preds.forEach(function(v) { b += pos[v]; });
-        b = b / preds.length;
-      }
-      bs[u] = b;
-    });
-
-    return bs;
-  }
-
-  function copyLayering(layering) {
-    return layering.map(function(l) { return l.slice(0); });
-  }
-}
-
-var crossCount = dagre.layout.order.crossCount = function(g, layering) {
-  var cc = 0;
-  var prevLayer;
-  layering.forEach(function(layer) {
-    if (prevLayer) {
-      cc += bilayerCrossCount(g, prevLayer, layer);
-    }
-    prevLayer = layer;
-  });
-  return cc;
-}
-
-/*
- * This function searches through a ranked and ordered graph and counts the
- * number of edges that cross. This algorithm is derived from:
- *
- *    W. Barth et al., Bilayer Cross Counting, JGAA, 8(2) 179–194 (2004)
- */
-var bilayerCrossCount = dagre.layout.order.bilayerCrossCount = function(g, layer1, layer2) {
-  var layer2Pos = layerPos(layer2);
-
-  var indices = [];
-  layer1.forEach(function(u) {
-    var nodeIndices = [];
-    g.outEdges(u).forEach(function(e) { nodeIndices.push(layer2Pos[g.target(e)]); });
-    nodeIndices.sort(function(x, y) { return x - y; });
-    indices = indices.concat(nodeIndices);
-  });
-
-  var firstIndex = 1;
-  while (firstIndex < layer2.length) firstIndex <<= 1;
-
-  var treeSize = 2 * firstIndex - 1;
-  firstIndex -= 1;
-
-  var tree = [];
-  for (var i = 0; i < treeSize; ++i) { tree[i] = 0; }
-
-  var cc = 0;
-  indices.forEach(function(i) {
-    var treeIndex = i + firstIndex;
-    ++tree[treeIndex];
-    var weightSum = 0;
-    while (treeIndex > 0) {
-      if (treeIndex % 2) {
-        cc += tree[treeIndex + 1];
-      }
-      treeIndex = (treeIndex - 1) >> 1;
-      ++tree[treeIndex];
-    }
-  });
-
-  return cc;
-}
-
-function layerPos(layer) {
-  var pos = {};
-  layer.forEach(function(u, i) { pos[u] = i; });
-  return pos;
-}
-/*
- * The algorithms here are based on Brandes and Köpf, "Fast and Simple
- * Horizontal Coordinate Assignment".
- */
-dagre.layout.position = function() {
-  // External configuration
-  var config = {
-    nodeSep: 50,
-    edgeSep: 10,
-    universalSep: null,
-    rankSep: 30,
-    rankDir: "TB",
-    debugLevel: 0
-  };
-
-  var timer = createTimer();
-
-  var self = {};
-
-  self.nodeSep = propertyAccessor(self, config, "nodeSep");
-  self.edgeSep = propertyAccessor(self, config, "edgeSep");
-  // If not null this separation value is used for all nodes and edges
-  // regardless of their widths. `nodeSep` and `edgeSep` are ignored with this
-  // option.
-  self.universalSep = propertyAccessor(self, config, "universalSep");
-  self.rankSep = propertyAccessor(self, config, "rankSep");
-  self.rankDir = propertyAccessor(self, config, "rankDir");
-  self.debugLevel = propertyAccessor(self, config, "debugLevel", function(x) {
-    timer.enabled(x);
-  });
-
-  self.run = timer.wrap("Position Phase", run);
-
-  return self;
-
-  function run(g) {
-    var layering = [];
-    g.eachNode(function(u, node) {
-      var layer = layering[node.rank] || (layering[node.rank] = []);
-      layer[node.order] = u;
-    });
-
-    var conflicts = findConflicts(g, layering);
-
-    var xss = {};
-    ["u", "d"].forEach(function(vertDir) {
-      if (vertDir === "d") layering.reverse();
-
-      ["l", "r"].forEach(function(horizDir) {
-        if (horizDir === "r") reverseInnerOrder(layering);
-
-        var dir = vertDir + horizDir;
-        var align = verticalAlignment(g, layering, conflicts, vertDir === "u" ? "predecessors" : "successors");
-        xss[dir]= horizontalCompaction(g, layering, align.pos, align.root, align.align);
-        if (horizDir === "r") flipHorizontally(xss[dir]);
-
-        if (horizDir === "r") reverseInnerOrder(layering);
-      });
-
-      if (vertDir === "d") layering.reverse();
-    });
-
-    balance(g, layering, xss);
-    g.eachNode(function(v) {
-      var xs = [];
-      for (alignment in xss) {
-        xDebug(alignment, g, v, xss[alignment][v]);
-        xs.push(xss[alignment][v]);
-      }
-      xs.sort(function(x, y) { return x - y; });
-      x(g, v, (xs[1] + xs[2]) / 2);
-    });
-
-    // Translate layout so left edge of bounding rectangle has coordinate 0
-    var minX = min(g.nodes().map(function(u) { return x(g, u) - width(g, u) / 2; }));
-    g.eachNode(function(u) { x(g, u, x(g, u) - minX); });
-
-    // Align y coordinates with ranks
-    var posY = 0;
-    layering.forEach(function(layer) {
-      var maxHeight = max(layer.map(function(u) { return height(g, u); }));
-      posY += maxHeight / 2;
-      layer.forEach(function(u) { y(g, u, posY); });
-      posY += maxHeight / 2 + config.rankSep;
-    });
-  };
-
-  /*
-   * Generate an ID that can be used to represent any undirected edge that is
-   * incident on `u` and `v`.
-   */
-  function undirEdgeId(u, v) {
-    return u < v
-      ? u.toString().length + ":" + u + "-" + v
-      : v.toString().length + ":" + v + "-" + u;
-  }
-
-  function findConflicts(g, layering) {
-    var conflicts = {}, // Set of conflicting edge ids
-        pos = {};       // Position of node in its layer
-
-    if (layering.length <= 2) return conflicts;
-
-    layering[1].forEach(function(u, i) { pos[u] = i; });
-    for (var i = 1; i < layering.length - 1; ++i) {
-      prevLayer = layering[i];
-      currLayer = layering[i+1];
-      var k0 = 0; // Position of the last inner segment in the previous layer
-      var l = 0;  // Current position in the current layer (for iteration up to `l1`)
-
-      // Scan current layer for next node that is incident to an inner segement
-      // between layering[i+1] and layering[i].
-      for (var l1 = 0; l1 < currLayer.length; ++l1) {
-        var u = currLayer[l1]; // Next inner segment in the current layer or
-                               // last node in the current layer
-        pos[u] = l1;
-
-        var k1 = undefined; // Position of the next inner segment in the previous layer or
-                            // the position of the last element in the previous layer
-        if (g.node(u).dummy) {
-          var uPred = g.predecessors(u)[0];
-          if (g.node(uPred).dummy)
-            k1 = pos[uPred];
-        }
-        if (k1 === undefined && l1 === currLayer.length - 1)
-          k1 = prevLayer.length - 1;
-
-        if (k1 !== undefined) {
-          for (; l <= l1; ++l) {
-            g.predecessors(currLayer[l]).forEach(function(v) {
-              var k = pos[v];
-              if (k < k0 || k > k1)
-                conflicts[undirEdgeId(currLayer[l], v)] = true;
-            });
-          }
-          k0 = k1;
-        }
-      }
-    }
-
-    return conflicts;
-  }
-
-  function verticalAlignment(g, layering, conflicts, relationship) {
-    var pos = {},   // Position for a node in its layer
-        root = {},  // Root of the block that the node participates in
-        align = {}; // Points to the next node in the block or, if the last
-                    // element in the block, points to the first block's root
-
-    layering.forEach(function(layer) {
-      layer.forEach(function(u, i) {
-        root[u] = u;
-        align[u] = u;
-        pos[u] = i;
-      });
-    });
-
-    layering.forEach(function(layer) {
-      var prevIdx = -1;
-      layer.forEach(function(v) {
-        var related = g[relationship](v), // Adjacent nodes from the previous layer
-            m;                            // The mid point in the related array
-
-        if (related.length > 0) {
-          related.sort(function(x, y) { return pos[x] - pos[y]; });
-          mid = (related.length - 1) / 2;
-          related.slice(Math.floor(mid), Math.ceil(mid) + 1).forEach(function(u) {
-            if (align[v] === v) {
-              if (!conflicts[undirEdgeId(u, v)] && prevIdx < pos[u]) {
-                align[u] = v;
-                align[v] = root[v] = root[u];
-                prevIdx = pos[u];
-              }
-            }
-          });
-        }
-      });
-    });
-
-    return { pos: pos, root: root, align: align };
-  }
-
-  // This function deviates from the standard BK algorithm in two ways. First
-  // it takes into account the size of the nodes. Second it includes a fix to
-  // the original algorithm that is described in Carstens, "Node and Label
-  // Placement in a Layered Layout Algorithm".
-  function horizontalCompaction(g, layering, pos, root, align) {
-    var sink = {},  // Mapping of node id -> sink node id for class
-        shift = {}, // Mapping of sink node id -> x delta
-        pred = {},  // Mapping of node id -> predecessor node (or null)
-        xs = {};    // Calculated X positions
-
-    layering.forEach(function(layer) {
-      layer.forEach(function(u, i) {
-        sink[u] = u;
-        if (i > 0)
-          pred[u] = layer[i - 1];
-      });
-    });
-
-    function placeBlock(v) {
-      if (!(v in xs)) {
-        xs[v] = 0;
-        var w = v;
-        do {
-          if (pos[w] > 0) {
-            var u = root[pred[w]];
-            placeBlock(u);
-            if (sink[v] === v) {
-              sink[v] = sink[u];
-            }
-            var delta = sep(g, pred[w]) + sep(g, w);
-            if (sink[v] !== sink[u]) {
-              shift[sink[u]] = Math.min(shift[sink[u]] || Number.POSITIVE_INFINITY, xs[v] - xs[u] - delta);
-            } else {
-              xs[v] = Math.max(xs[v], xs[u] + delta);
-            }
-          }
-          w = align[w];
-        } while (w !== v);
-      }
-    }
-
-    // Root coordinates relative to sink
-    values(root).forEach(function(v) {
-      placeBlock(v);
-    });
-
-    // Absolute coordinates
-    layering.forEach(function(layer) {
-      layer.forEach(function(v) {
-        xs[v] = xs[root[v]];
-        var xDelta = shift[sink[v]];
-        if (root[v] === v && xDelta < Number.POSITIVE_INFINITY)
-          xs[v] += xDelta;
-      });
-    });
-
-    return xs;
-  }
-
-  function findMinCoord(g, layering, xs) {
-    return min(layering.map(function(layer) {
-      var u = layer[0];
-      return xs[u];
-    }));
-  }
-
-  function findMaxCoord(g, layering, xs) {
-    return max(layering.map(function(layer) {
-      var u = layer[layer.length - 1];
-      return xs[u];
-    }));
-  }
-
-  function balance(g, layering, xss) {
-    var min = {},                            // Min coordinate for the alignment
-        max = {},                            // Max coordinate for the alginment
-        smallestAlignment,
-        shift = {};                          // Amount to shift a given alignment
-
-    var smallest = Number.POSITIVE_INFINITY;
-    for (var alignment in xss) {
-      var xs = xss[alignment];
-      min[alignment] = findMinCoord(g, layering, xs);
-      max[alignment] = findMaxCoord(g, layering, xs);
-      var w = max[alignment] - min[alignment];
-      if (w < smallest) {
-        smallest = w;
-        smallestAlignment = alignment;
-      }
-    }
-
-    // Determine how much to adjust positioning for each alignment
-    ["u", "d"].forEach(function(vertDir) {
-      ["l", "r"].forEach(function(horizDir) {
-        var alignment = vertDir + horizDir;
-        shift[alignment] = horizDir === "l"
-            ? min[smallestAlignment] - min[alignment]
-            : max[smallestAlignment] - max[alignment];
-      });
-    });
-
-    // Find average of medians for xss array
-    for (var alignment in xss) {
-      g.eachNode(function(v) {
-        xss[alignment][v] += shift[alignment];
-      });
-    };
-  }
-
-  function flipHorizontally(xs) {
-    for (var u in xs) {
-      xs[u] = -xs[u];
-    }
-  }
-
-  function reverseInnerOrder(layering) {
-    layering.forEach(function(layer) {
-      layer.reverse();
-    });
-  }
-
-  function width(g, u) {
-    switch (config.rankDir) {
-      case "LR": return g.node(u).height;
-      default:   return g.node(u).width;
-    }
-  }
-
-  function height(g, u) {
-    switch(config.rankDir) {
-      case "LR": return g.node(u).width;
-      default:   return g.node(u).height;
-    }
-  }
-
-  function sep(g, u) {
-    if (config.universalSep !== null) {
-      return config.universalSep;
-    }
-    var w = width(g, u);
-    var s = g.node(u).dummy ? config.edgeSep : config.nodeSep;
-    return (w + s) / 2;
-  }
-
-  function x(g, u, x) {
-    switch (config.rankDir) {
-      case "LR":
-        if (arguments.length < 3) {
-          return g.node(u).y;
-        } else {
-          g.node(u).y = x;
-        }
-        break;
-      default:
-        if (arguments.length < 3) {
-          return g.node(u).x;
-        } else {
-          g.node(u).x = x;
-        }
-    }
-  }
-
-  function xDebug(name, g, u, x) {
-    switch (config.rankDir) {
-      case "LR":
-        if (arguments.length < 3) {
-          return g.node(u)[name];
-        } else {
-          g.node(u)[name] = x;
-        }
-        break;
-      default:
-        if (arguments.length < 3) {
-          return g.node(u)[name];
-        } else {
-          g.node(u)[name] = x;
-        }
-    }
-  }
-
-  function y(g, u, y) {
-    switch (config.rankDir) {
-      case "LR":
-        if (arguments.length < 3) {
-          return g.node(u).x;
-        } else {
-          g.node(u).x = y;
-        }
-        break;
-      default:
-        if (arguments.length < 3) {
-          return g.node(u).y;
-        } else {
-          g.node(u).y = y;
-        }
-    }
-  }
-}
-dagre.util = {};
-
-/*
- * Copies attributes from `src` to `dst`. If an attribute name is in both
- * `src` and `dst` then the attribute value from `src` takes precedence.
- */
-function mergeAttributes(src, dst) {
-  Object.keys(src).forEach(function(k) { dst[k] = src[k]; });
-}
-
-function min(values) {
-  return Math.min.apply(null, values);
-}
-
-function max(values) {
-  return Math.max.apply(null, values);
-}
-
-function concat(arrays) {
-  return Array.prototype.concat.apply([], arrays);
-}
-
-var keys = dagre.util.keys = Object.keys;
-
-/*
- * Returns an array of all values in the given object.
- */
-function values(obj) {
-  return Object.keys(obj).map(function(k) { return obj[k]; });
-}
-
-function union(arrays) {
-  var obj = {};
-  for (var i = 0; i < arrays.length; ++i) {
-    var a = arrays[i];
-    for (var j = 0; j < a.length; ++j) {
-      var v = a[j];
-      obj[v] = v;
-    }
-  }
-
-  var results = [];
-  for (var k in obj) {
-    results.push(obj[k]);
-  }
-
-  return results;
-}
-
-/*
- * Returns all components in the graph using undirected navigation.
- */
-var components = dagre.util.components = function(g) {
-  var results = [];
-  var visited = {};
-
-  function dfs(u, component) {
-    if (!(u in visited)) {
-      visited[u] = true;
-      component.push(u);
-      g.neighbors(u).forEach(function(v) {
-        dfs(v, component);
-      });
-    }
-  };
-
-  g.eachNode(function(u) {
-    var component = [];
-    dfs(u, component);
-    if (component.length > 0) {
-      results.push(component);
-    }
-  });
-
-  return results;
-};
-
-/*
- * This algorithm uses undirected traversal to find a miminum spanning tree
- * using the supplied weight function. The algorithm is described in
- * Cormen, et al., "Introduction to Algorithms". The returned structure
- * is an array of node id to an array of adjacent nodes.
- */
-var prim = dagre.util.prim = function(g, weight) {
-  var result = {};
-  var parent = {};
-  var q = priorityQueue();
-
-  if (g.nodes().length === 0) {
-    return result;
-  }
-
-  g.eachNode(function(u) {
-    q.add(u, Number.POSITIVE_INFINITY);
-    result[u] = [];
-  });
-
-  // Start from arbitrary node
-  q.decrease(g.nodes()[0], 0);
-
-  var u;
-  var init = false;
-  while (q.size() > 0) {
-    u = q.removeMin();
-    if (u in parent) {
-      result[u].push(parent[u]);
-      result[parent[u]].push(u);
-    } else if (init) {
-      throw new Error("Input graph is not connected:\n" + g.toString());
-    } else {
-      init = true;
-    }
-
-    g.neighbors(u).forEach(function(v) {
-      var pri = q.priority(v);
-      if (pri !== undefined) {
-        var edgeWeight = weight(u, v);
-        if (edgeWeight < pri) {
-          parent[v] = u;
-          q.decrease(v, edgeWeight);
-        }
-      }
-    });
-  }
-
-  return result;
-};
-
-var intersectRect = dagre.util.intersectRect = function(rect, point) {
-  var x = rect.x;
-  var y = rect.y;
-
-  // For now we only support rectangles
-
-  // Rectangle intersection algorithm from:
-  // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes
-  var dx = point.x - x;
-  var dy = point.y - y;
-  var w = rect.width / 2;
-  var h = rect.height / 2;
-
-  var sx, sy;
-  if (Math.abs(dy) * w > Math.abs(dx) * h) {
-    // Intersection is top or bottom of rect.
-    if (dy < 0) {
-      h = -h;
-    }
-    sx = dy === 0 ? 0 : h * dx / dy;
-    sy = h;
-  } else {
-    // Intersection is left or right of rect.
-    if (dx < 0) {
-      w = -w;
-    }
-    sx = w;
-    sy = dx === 0 ? 0 : w * dy / dx;
-  }
-
-  return {x: x + sx, y: y + sy};
-}
-
-var pointStr = dagre.util.pointStr = function(point) {
-  return point.x + "," + point.y;
-}
-
-var createTimer = function() {
-  var self = {},
-      enabled = false;
-
-  self.enabled = function(x) {
-    if (!arguments.length) return enabled;
-    enabled = x;
-    return self;
-  };
-
-  self.wrap = function(name, func) {
-    return function() {
-      var start = enabled ? new Date().getTime() : null;
-      try {
-        return func.apply(null, arguments);
-      } finally {
-        if (start) console.log(name + " time: " + (new Date().getTime() - start) + "ms");
-      }
-    }
-  };
-
-  return self;
-}
-
-function propertyAccessor(self, config, field, setHook) {
-  return function(x) {
-    if (!arguments.length) return config[field];
-    config[field] = x;
-    if (setHook) setHook(x);
-    return self;
-  };
-}
-function priorityQueue() {
-  var _arr = [];
-  var _keyIndices = {};
-
-  function _heapify(i) {
-    var arr = _arr;
-    var l = 2 * i,
-        r = l + 1,
-        largest = i;
-    if (l < arr.length) {
-      largest = arr[l].pri < arr[largest].pri ? l : largest;
-      if (r < arr.length) {
-        largest = arr[r].pri < arr[largest].pri ? r : largest;
-      }
-      if (largest !== i) {
-        _swap(i, largest);
-        _heapify(largest);
-      }
-    }
-  }
-
-  function _decrease(index) {
-    var arr = _arr;
-    var pri = arr[index].pri;
-    var parent;
-    while (index > 0) {
-      parent = index >> 1;
-      if (arr[parent].pri < pri) {
-        break;
-      }
-      _swap(index, parent);
-      index = parent;
-    }
-  }
-
-  function _swap(i, j) {
-    var arr = _arr;
-    var keyIndices = _keyIndices;
-    var tmp = arr[i];
-    arr[i] = arr[j];
-    arr[j] = tmp;
-    keyIndices[arr[i].key] = i;
-    keyIndices[arr[j].key] = j;
-  }
-
-  function size() { return _arr.length; }
-
-  function keys() { return Object.keys(_keyIndices); }
-
-  function has(key) { return key in _keyIndices; }
-
-  function priority(key) {
-    var index = _keyIndices[key];
-    if (index !== undefined) {
-      return _arr[index].pri;
-    }
-  }
-
-  function add(key, pri) {
-    if (!(key in _keyIndices)) {
-      var entry = {key: key, pri: pri};
-      var index = _arr.length;
-      _keyIndices[key] = index;
-      _arr.push(entry);
-      _decrease(index);
-      return true;
-    }
-    return false;
-  }
-
-  function min() {
-    if (size() > 0) {
-      return _arr[0].key;
-    }
-  }
-
-  function removeMin() {
-    _swap(0, _arr.length - 1);
-    var min = _arr.pop();
-    delete _keyIndices[min.key];
-    _heapify(0);
-    return min.key;
-  }
-
-  function decrease(key, pri) {
-    var index = _keyIndices[key];
-    if (pri > _arr[index].pri) {
-      throw new Error("New priority is greater than current priority. " +
-          "Key: " + key + " Old: " + _arr[index].pri + " New: " + pri);
-    }
-    _arr[index].pri = pri;
-    _decrease(index);
-  }
-
-  return {
-    size: size,
-    keys: keys,
-    has: has,
-    priority: priority,
-    add: add,
-    min: min,
-    removeMin: removeMin,
-    decrease: decrease
-  };
-}
-dagre.dot = {};
-
-dagre.dot.toGraph = function(str) {
-  var parseTree = dot_parser.parse(str);
-  var g = dagre.graph();
-  var undir = parseTree.type === "graph";
-
-  function createNode(id, attrs) {
-    if (!(g.hasNode(id))) {
-      g.addNode(id, { id: id, label: id });
-    }
-    if (attrs) {
-      mergeAttributes(attrs, g.node(id));
-    }
-  }
-
-  var edgeCount = {};
-  function createEdge(source, target, attrs) {
-    var edgeKey = source + "-" + target;
-    var count = edgeCount[edgeKey];
-    if (!count) {
-      count = edgeCount[edgeKey] = 0;
-    }
-    edgeCount[edgeKey]++;
-
-    var id = attrs.id || edgeKey + "-" + count;
-    var edge = {};
-    mergeAttributes(attrs, edge);
-    mergeAttributes({ id: id }, edge);
-    g.addEdge(id, source, target, edge);
-  }
-
-  function handleStmt(stmt) {
-    switch (stmt.type) {
-      case "node":
-        createNode(stmt.id, stmt.attrs);
-        break;
-      case "edge":
-        var prev;
-        stmt.elems.forEach(function(elem) {
-          handleStmt(elem);
-
-          switch(elem.type) {
-            case "node":
-              var curr = elem.id;
-
-              if (prev) {
-                createEdge(prev, curr, stmt.attrs);
-                if (undir) {
-                  createEdge(curr, prev, stmt.attrs);
-                }
-              }
-              prev = curr;
-              break;
-            default:
-              // We don't currently support subgraphs incident on an edge
-              throw new Error("Unsupported type incident on edge: " + elem.type);
-          }
-        });
-        break;
-      case "attr":
-        // Ignore for now
-        break;
-      default:
-        throw new Error("Unsupported statement type: " + stmt.type);
-    }
-  }
-
-  if (parseTree.stmts) {
-    parseTree.stmts.forEach(function(stmt) {
-      handleStmt(stmt);
-    });
-  }
-
-  return g;
-};
-
-dagre.dot.toObjects = function(str) {
-  var g = dagre.dot.toGraph(str);
-  var nodes = g.nodes().map(function(u) { return g.node(u); });
-  var edges = g.edges().map(function(e) {
-    var edge = g.edge(e);
-    edge.source = g.node(g.source(e));
-    edge.target = g.node(g.target(e));
-    return edge;
-  });
-  return { nodes: nodes, edges: edges };
-};
-dot_parser = (function(){
-  /*
-   * Generated by PEG.js 0.7.0.
-   *
-   * http://pegjs.majda.cz/
-   */
-  
-  function quote(s) {
-    /*
-     * ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a
-     * string literal except for the closing quote character, backslash,
-     * carriage return, line separator, paragraph separator, and line feed.
-     * Any character may appear in the form of an escape sequence.
-     *
-     * For portability, we also escape escape all control and non-ASCII
-     * characters. Note that "\0" and "\v" escape sequences are not used
-     * because JSHint does not like the first and IE the second.
-     */
-     return '"' + s
-      .replace(/\\/g, '\\\\')  // backslash
-      .replace(/"/g, '\\"')    // closing quote character
-      .replace(/\x08/g, '\\b') // backspace
-      .replace(/\t/g, '\\t')   // horizontal tab
-      .replace(/\n/g, '\\n')   // line feed
-      .replace(/\f/g, '\\f')   // form feed
-      .replace(/\r/g, '\\r')   // carriage return
-      .replace(/[\x00-\x07\x0B\x0E-\x1F\x80-\uFFFF]/g, escape)
-      + '"';
-  }
-  
-  var result = {
-    /*
-     * Parses the input with a generated parser. If the parsing is successfull,
-     * returns a value explicitly or implicitly specified by the grammar from
-     * which the parser was generated (see |PEG.buildParser|). If the parsing is
-     * unsuccessful, throws |PEG.parser.SyntaxError| describing the error.
-     */
-    parse: function(input, startRule) {
-      var parseFunctions = {
-        "start": parse_start,
-        "stmtList": parse_stmtList,
-        "stmt": parse_stmt,
-        "attrStmt": parse_attrStmt,
-        "inlineAttrStmt": parse_inlineAttrStmt,
-        "nodeStmt": parse_nodeStmt,
-        "edgeStmt": parse_edgeStmt,
-        "subgraphStmt": parse_subgraphStmt,
-        "attrList": parse_attrList,
-        "attrListBlock": parse_attrListBlock,
-        "aList": parse_aList,
-        "edgeRHS": parse_edgeRHS,
-        "idDef": parse_idDef,
-        "nodeIdOrSubgraph": parse_nodeIdOrSubgraph,
-        "nodeId": parse_nodeId,
-        "port": parse_port,
-        "compassPt": parse_compassPt,
-        "id": parse_id,
-        "node": parse_node,
-        "edge": parse_edge,
-        "graph": parse_graph,
-        "digraph": parse_digraph,
-        "subgraph": parse_subgraph,
-        "strict": parse_strict,
-        "graphType": parse_graphType,
-        "whitespace": parse_whitespace,
-        "comment": parse_comment,
-        "_": parse__
-      };
-      
-      if (startRule !== undefined) {
-        if (parseFunctions[startRule] === undefined) {
-          throw new Error("Invalid rule name: " + quote(startRule) + ".");
-        }
-      } else {
-        startRule = "start";
-      }
-      
-      var pos = 0;
-      var reportFailures = 0;
-      var rightmostFailuresPos = 0;
-      var rightmostFailuresExpected = [];
-      
-      function padLeft(input, padding, length) {
-        var result = input;
-        
-        var padLength = length - input.length;
-        for (var i = 0; i < padLength; i++) {
-          result = padding + result;
-        }
-        
-        return result;
-      }
-      
-      function escape(ch) {
-        var charCode = ch.charCodeAt(0);
-        var escapeChar;
-        var length;
-        
-        if (charCode <= 0xFF) {
-          escapeChar = 'x';
-          length = 2;
-        } else {
-          escapeChar = 'u';
-          length = 4;
-        }
-        
-        return '\\' + escapeChar + padLeft(charCode.toString(16).toUpperCase(), '0', length);
-      }
-      
-      function matchFailed(failure) {
-        if (pos < rightmostFailuresPos) {
-          return;
-        }
-        
-        if (pos > rightmostFailuresPos) {
-          rightmostFailuresPos = pos;
-          rightmostFailuresExpected = [];
-        }
-        
-        rightmostFailuresExpected.push(failure);
-      }
-      
-      function parse_start() {
-        var result0, result1, result2, result3, result4, result5, result6, result7, result8, result9, result10, result11, result12;
-        var pos0, pos1, pos2;
-        
-        pos0 = pos;
-        pos1 = pos;
-        result0 = [];
-        result1 = parse__();
-        while (result1 !== null) {
-          result0.push(result1);
-          result1 = parse__();
-        }
-        if (result0 !== null) {
-          pos2 = pos;
-          result1 = parse_strict();
-          if (result1 !== null) {
-            result2 = parse__();
-            if (result2 !== null) {
-              result1 = [result1, result2];
-            } else {
-              result1 = null;
-              pos = pos2;
-            }
-          } else {
-            result1 = null;
-            pos = pos2;
-          }
-          result1 = result1 !== null ? result1 : "";
-          if (result1 !== null) {
-            result2 = parse_graphType();
-            if (result2 !== null) {
-              result3 = [];
-              result4 = parse__();
-              while (result4 !== null) {
-                result3.push(result4);
-                result4 = parse__();
-              }
-              if (result3 !== null) {
-                result4 = parse_id();
-                result4 = result4 !== null ? result4 : "";
-                if (result4 !== null) {
-                  result5 = [];
-                  result6 = parse__();
-                  while (result6 !== null) {
-                    result5.push(result6);
-                    result6 = parse__();
-                  }
-                  if (result5 !== null) {
-                    if (input.charCodeAt(pos) === 123) {
-                      result6 = "{";
-                      pos++;
-                    } else {
-                      result6 = null;
-                      if (reportFailures === 0) {
-                        matchFailed("\"{\"");
-                      }
-                    }
-                    if (result6 !== null) {
-                      result7 = [];
-                      result8 = parse__();
-                      while (result8 !== null) {
-                        result7.push(result8);
-                        result8 = parse__();
-                      }
-                      if (result7 !== null) {
-                        result8 = parse_stmtList();
-                        result8 = result8 !== null ? result8 : "";
-                        if (result8 !== null) {
-                          result9 = [];
-                          result10 = parse__();
-                          while (result10 !== null) {
-                            result9.push(result10);
-                            result10 = parse__();
-                          }
-                          if (result9 !== null) {
-                            if (input.charCodeAt(pos) === 125) {
-                              result10 = "}";
-                              pos++;
-                            } else {
-                              result10 = null;
-                              if (reportFailures === 0) {
-                                matchFailed("\"}\"");
-                              }
-                            }
-                            if (result10 !== null) {
-                              result11 = [];
-                              result12 = parse__();
-                              while (result12 !== null) {
-                                result11.push(result12);
-                                result12 = parse__();
-                              }
-                              if (result11 !== null) {
-                                result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8, result9, result10, result11];
-                              } else {
-                                result0 = null;
-                                pos = pos1;
-                              }
-                            } else {
-                              result0 = null;
-                              pos = pos1;
-                            }
-                          } else {
-                            result0 = null;
-                            pos = pos1;
-                          }
-                        } else {
-                          result0 = null;
-                          pos = pos1;
-                        }
-                      } else {
-                        result0 = null;
-                        pos = pos1;
-                      }
-                    } else {
-                      result0 = null;
-                      pos = pos1;
-                    }
-                  } else {
-                    result0 = null;
-                    pos = pos1;
-                  }
-                } else {
-                  result0 = null;
-                  pos = pos1;
-                }
-              } else {
-                result0 = null;
-                pos = pos1;
-              }
-            } else {
-              result0 = null;
-              pos = pos1;
-            }
-          } else {
-            result0 = null;
-            pos = pos1;
-          }
-        } else {
-          result0 = null;
-          pos = pos1;
-        }
-        if (result0 !== null) {
-          result0 = (function(offset, type, id, stmts) {
-                return {type: type, id: id, stmts: stmts};
-              })(pos0, result0[2], result0[4], result0[8]);
-        }
-        if (result0 === null) {
-          pos = pos0;
-        }
-        return result0;
-      }
-      
-      function parse_stmtList() {
-        var result0, result1, result2, result3, result4, result5, result6, result7;
-        var pos0, pos1, pos2;
-        
-        pos0 = pos;
-        pos1 = pos;
-        result0 = parse_stmt();
-        if (result0 !== null) {
-          result1 = [];
-          result2 = parse__();
-          while (result2 !== null) {
-            result1.push(result2);
-            result2 = parse__();
-          }
-          if (result1 !== null) {
-            if (input.charCodeAt(pos) === 59) {
-              result2 = ";";
-              pos++;
-            } else {
-              result2 = null;
-              if (reportFailures === 0) {
-                matchFailed("\";\"");
-              }
-            }
-            result2 = result2 !== null ? result2 : "";
-            if (result2 !== null) {
-              result3 = [];
-              pos2 = pos;
-              result4 = [];
-              result5 = parse__();
-              while (result5 !== null) {
-                result4.push(result5);
-                result5 = parse__();
-              }
-              if (result4 !== null) {
-                result5 = parse_stmt();
-                if (result5 !== null) {
-                  result6 = [];
-                  result7 = parse__();
-                  while (result7 !== null) {
-                    result6.push(result7);
-                    result7 = parse__();
-                  }
-                  if (result6 !== null) {
-                    if (input.charCodeAt(pos) === 59) {
-                      result7 = ";";
-                      pos++;
-                    } else {
-                      result7 = null;
-                      if (reportFailures === 0) {
-                        matchFailed("\";\"");
-                      }
-                    }
-                    result7 = result7 !== null ? result7 : "";
-                    if (result7 !== null) {
-                      result4 = [result4, result5, result6, result7];
-                    } else {
-                      result4 = null;
-                      pos = pos2;
-                    }
-                  } else {
-                    result4 = null;
-                    pos = pos2;
-                  }
-                } else {
-                  result4 = null;
-                  pos = pos2;
-                }
-              } else {
-                result4 = null;
-                pos = pos2;
-              }
-              while (result4 !== null) {
-                result3.push(result4);
-                pos2 = pos;
-                result4 = [];
-                result5 = parse__();
-                while (result5 !== null) {
-                  result4.push(result5);
-                  result5 = parse__();
-                }
-                if (result4 !== null) {
-                  result5 = parse_stmt();
-                  if (result5 !== null) {
-                    result6 = [];
-                    result7 = parse__();
-                    while (result7 !== null) {
-                      result6.push(result7);
-                      result7 = parse__();
-                    }
-                    if (result6 !== null) {
-                      if (input.charCodeAt(pos) === 59) {
-                        result7 = ";";
-                        pos++;
-                      } else {
-                        result7 = null;
-                        if (reportFailures === 0) {
-                          matchFailed("\";\"");
-                        }
-                      }
-                      result7 = result7 !== null ? result7 : "";
-                      if (result7 !== null) {
-                        result4 = [result4, result5, result6, result7];
-                      } else {
-                        result4 = null;
-                        pos = pos2;
-                      }
-                    } else {
-                      result4 = null;
-                      pos = pos2;
-                    }
-                  } else {
-                    result4 = null;
-                    pos = pos2;
-                  }
-                } else {
-                  result4 = null;
-                  pos = pos2;
-                }
-              }
-              if (result3 !== null) {
-                result0 = [result0, result1, result2, result3];
-              } else {
-                result0 = null;
-                pos = pos1;
-              }
-            } else {
-              result0 = null;
-              pos = pos1;
-            }
-          } else {
-            result0 = null;
-            pos = pos1;
-          }
-        } else {
-          result0 = null;
-          pos = pos1;
-        }
-        if (result0 !== null) {
-          result0 = (function(offset, first, rest) {
-                var result = [first];
-                for (var i = 0; i < rest.length; ++i) {
-                    result.push(rest[i][1]);
-                }
-                return result;
-              })(pos0, result0[0], result0[3]);
-        }
-        if (result0 === null) {
-          pos = pos0;
-        }
-        return result0;
-      }
-      
-      function parse_stmt() {
-        var result0;
-        
-        result0 = parse_attrStmt();
-        if (result0 === null) {
-          result0 = parse_subgraphStmt();
-          if (result0 === null) {
-            result0 = parse_inlineAttrStmt();
-            if (result0 === null) {
-              result0 = parse_edgeStmt();
-              if (result0 === null) {
-                result0 = parse_nodeStmt();
-              }
-            }
-          }
-        }
-        return result0;
-      }
-      
-      function parse_attrStmt() {
-        var result0, result1, result2;
-        var pos0, pos1;
-        
-        pos0 = pos;
-        pos1 = pos;
-        result0 = parse_graph();
-        if (result0 === null) {
-          result0 = parse_node();
-          if (result0 === null) {
-            result0 = parse_edge();
-          }
-        }
-        if (result0 !== null) {
-          result1 = [];
-          result2 = parse__();
-          while (result2 !== null) {
-            result1.push(result2);
-            result2 = parse__();
-          }
-          if (result1 !== null) {
-            result2 = parse_attrList();
-            if (result2 !== null) {
-              result0 = [result0, result1, result2];
-            } else {
-              result0 = null;
-              pos = pos1;
-            }
-          } else {
-            result0 = null;
-            pos = pos1;
-          }
-        } else {
-          result0 = null;
-          pos = pos1;
-        }
-        if (result0 !== null) {
-          result0 = (function(offset, type, attrs) {
-                return { type: "attr", attrType: type, attrs: attrs || {}};
-              })(pos0, result0[0], result0[2]);
-        }
-        if (result0 === null) {
-          pos = pos0;
-        }
-        return result0;
-      }
-      
-      function parse_inlineAttrStmt() {
-        var result0, result1, result2, result3, result4;
-        var pos0, pos1;
-        
-        pos0 = pos;
-        pos1 = pos;
-        result0 = parse_id();
-        if (result0 !== null) {
-          result1 = [];
-          result2 = parse__();
-          while (result2 !== null) {
-            result1.push(result2);
-            result2 = parse__();
-          }
-          if (result1 !== null) {
-            if (input.charCodeAt(pos) === 61) {
-              result2 = "=";
-              pos++;
-            } else {
-              result2 = null;
-              if (reportFailures === 0) {
-                matchFailed("\"=\"");
-              }
-            }
-            if (result2 !== null) {
-              result3 = [];
-              result4 = parse__();
-              while (result4 !== null) {
-                result3.push(result4);
-                result4 = parse__();
-              }
-              if (result3 !== null) {
-                result4 = parse_id();
-                if (result4 !== null) {
-                  result0 = [result0, result1, result2, result3, result4];
-                } else {
-                  result0 = null;
-                  pos = pos1;
-                }
-              } else {
-                result0 = null;
-                pos = pos1;
-              }
-            } else {
-              result0 = null;
-              pos = pos1;
-            }
-          } else {
-            result0 = null;
-            pos = pos1;
-          }
-        } else {
-          result0 = null;
-          pos = pos1;
-        }
-        if (result0 !== null) {
-          result0 = (function(offset, k, v) {
-                var attrs = {};
-                attrs[k] = v;
-                return { type: "inlineAttr", attrs: attrs };
-              })(pos0, result0[0], result0[4]);
-        }
-        if (result0 === null) {
-          pos = pos0;
-        }
-        return result0;
-      }
-      
-      function parse_nodeStmt() {
-        var result0, result1, result2;
-        var pos0, pos1;
-        
-        pos0 = pos;
-        pos1 = pos;
-        result0 = parse_nodeId();
-        if (result0 !== null) {
-          result1 = [];
-          result2 = parse__();
-          while (result2 !== null) {
-            result1.push(result2);
-            result2 = parse__();
-          }
-          if (result1 !== null) {
-            result2 = parse_attrList();
-            result2 = result2 !== null ? result2 : "";
-            if (result2 !== null) {
-              result0 = [result0, result1, result2];
-            } else {
-              result0 = null;
-              pos = pos1;
-            }
-          } else {
-            result0 = null;
-            pos = pos1;
-          }
-        } else {
-          result0 = null;
-          pos = pos1;
-        }
-        if (result0 !== null) {
-          result0 = (function(offset, id, attrs) { return {type: "node", id: id, attrs: attrs || {}}; })(pos0, result0[0], result0[2]);
-        }
-        if (result0 === null) {
-          pos = pos0;
-        }
-        return result0;
-      }
-      
-      function parse_edgeStmt() {
-        var result0, result1, result2, result3, result4;
-        var pos0, pos1;
-        
-        pos0 = pos;
-        pos1 = pos;
-        result0 = parse_nodeIdOrSubgraph();
-        if (result0 !== null) {
-          result1 = [];
-          result2 = parse__();
-          while (result2 !== null) {
-            result1.push(result2);
-            result2 = parse__();
-          }
-          if (result1 !== null) {
-            result2 = parse_edgeRHS();
-            if (result2 !== null) {
-              result3 = [];
-              result4 = parse__();
-              while (result4 !== null) {
-                result3.push(result4);
-                result4 = parse__();
-              }
-              if (result3 !== null) {
-                result4 = parse_attrList();
-                result4 = result4 !== null ? result4 : "";
-                if (result4 !== null) {
-                  result0 = [result0, result1, result2, result3, result4];
-                } else {
-                  result0 = null;
-                  pos = pos1;
-                }
-              } else {
-                result0 = null;
-                pos = pos1;
-              }
-            } else {
-              result0 = null;
-              pos = pos1;
-            }
-          } else {
-            result0 = null;
-            pos = pos1;
-          }
-        } else {
-          result0 = null;
-          pos = pos1;
-        }
-        if (result0 !== null) {
-          result0 = (function(offset, lhs, rhs, attrs) {
-                var elems = [lhs];
-                for (var i = 0; i < rhs.length; ++i) {
-                    elems.push(rhs[i]);
-                }
-                return { type: "edge", elems: elems, attrs: attrs || {} };
-              })(pos0, result0[0], result0[2], result0[4]);
-        }
-        if (result0 === null) {
-          pos = pos0;
-        }
-        return result0;
-      }
-      
-      function parse_subgraphStmt() {
-        var result0, result1, result2, result3, result4, result5;
-        var pos0, pos1, pos2, pos3;
-        
-        pos0 = pos;
-        pos1 = pos;
-        pos2 = pos;
-        result0 = parse_subgraph();
-        if (result0 !== null) {
-          result1 = [];
-          result2 = parse__();
-          while (result2 !== null) {
-            result1.push(result2);
-            result2 = parse__();
-          }
-          if (result1 !== null) {
-            pos3 = pos;
-            result2 = parse_id();
-            if (result2 !== null) {
-              result3 = [];
-              result4 = parse__();
-              while (result4 !== null) {
-                result3.push(result4);
-                result4 = parse__();
-              }
-              if (result3 !== null) {
-                result2 = [result2, result3];
-              } else {
-                result2 = null;
-                pos = pos3;
-              }
-            } else {
-              result2 = null;
-              pos = pos3;
-            }
-            result2 = result2 !== null ? result2 : "";
-            if (result2 !== null) {
-              result0 = [result0, result1, result2];
-            } else {
-              result0 = null;
-              pos = pos2;
-            }
-          } else {
-            result0 = null;
-            pos = pos2;
-          }
-        } else {
-          result0 = null;
-          pos = pos2;
-        }
-        result0 = result0 !== null ? result0 : "";
-        if (result0 !== null) {
-          if (input.charCodeAt(pos) === 123) {
-            result1 = "{";
-            pos++;
-          } else {
-            result1 = null;
-            if (reportFailures === 0) {
-              matchFailed("\"{\"");
-            }
-          }
-          if (result1 !== null) {
-            result2 = [];
-            result3 = parse__();
-            while (result3 !== null) {
-              result2.push(result3);
-              result3 = parse__();
-            }
-            if (result2 !== null) {
-              result3 = parse_stmtList();
-              if (result3 !== null) {
-                result4 = [];
-                result5 = parse__();
-                while (result5 !== null) {
-                  result4.push(result5);
-                  result5 = parse__();
-                }
-                if (result4 !== null) {
-                  if (input.charCodeAt(pos) === 125) {
-                    result5 = "}";
-                    pos++;
-                  } else {
-                    result5 = null;
-                    if (reportFailures === 0) {
-                      matchFailed("\"}\"");
-                    }
-                  }
-                  if (result5 !== null) {
-                    result0 = [result0, result1, result2, result3, result4, result5];
-                  } else {
-                    result0 = null;
-                    pos = pos1;
-                  }
-                } else {
-                  result0 = null;
-                  pos = pos1;
-                }
-              } else {
-                result0 = null;
-                pos = pos1;
-              }
-            } else {
-              result0 = null;
-              pos = pos1;
-            }
-          } else {
-            result0 = null;
-            pos = pos1;
-          }
-        } else {
-          result0 = null;
-          pos = pos1;
-        }
-        if (result0 !== null) {
-          result0 = (function(offset, id, stmts) {
-                id = id[2] || [];
-                return { type: "subgraph", id: id[0], stmts: stmts };
-              })(pos0, result0[0], result0[3]);
-        }
-        if (result0 === null) {
-          pos = pos0;
-        }
-        return result0;
-      }
-      
-      function parse_attrList() {
-        var result0, result1, result2, result3;
-        var pos0, pos1, pos2;
-        
-        pos0 = pos;
-        pos1 = pos;
-        result0 = parse_attrListBlock();
-        if (result0 !== null) {
-          result1 = [];
-          pos2 = pos;
-          result2 = [];
-          result3 = parse__();
-          while (result3 !== null) {
-            result2.push(result3);
-            result3 = parse__();
-          }
-          if (result2 !== null) {
-            result3 = parse_attrListBlock();
-            if (result3 !== null) {
-              result2 = [result2, result3];
-            } else {
-              result2 = null;
-              pos = pos2;
-            }
-          } else {
-            result2 = null;
-            pos = pos2;
-          }
-          while (result2 !== null) {
-            result1.push(result2);
-            pos2 = pos;
-            result2 = [];
-            result3 = parse__();
-            while (result3 !== null) {
-              result2.push(result3);
-              result3 = parse__();
-            }
-            if (result2 !== null) {
-              result3 = parse_attrListBlock();
-              if (result3 !== null) {
-                result2 = [result2, result3];
-              } else {
-                result2 = null;
-                pos = pos2;
-              }
-            } else {
-              result2 = null;
-              pos = pos2;
-            }
-          }
-          if (result1 !== null) {
-            result0 = [result0, result1];
-          } else {
-            result0 = null;
-            pos = pos1;
-          }
-        } else {
-          result0 = null;
-          pos = pos1;
-        }
-        if (result0 !== null) {
-          result0 = (function(offset, first, rest) {
-                var result = first;
-                for (var i = 0; i < rest.length; ++i) {
-                    result = rightBiasedMerge(result, rest[i][1]);
-                }
-                return result;
-              })(pos0, result0[0], result0[1]);
-        }
-        if (result0 === null) {
-          pos = pos0;
-        }
-        return result0;
-      }
-      
-      function parse_attrListBlock() {
-        var result0, result1, result2, result3, result4;
-        var pos0, pos1;
-        
-        pos0 = pos;
-        pos1 = pos;
-        if (input.charCodeAt(pos) === 91) {
-          result0 = "[";
-          pos++;
-        } else {
-          result0 = null;
-          if (reportFailures === 0) {
-            matchFailed("\"[\"");
-          }
-        }
-        if (result0 !== null) {
-          result1 = [];
-          result2 = parse__();
-          while (result2 !== null) {
-            result1.push(result2);
-            result2 = parse__();
-          }
-          if (result1 !== null) {
-            result2 = parse_aList();
-            result2 = result2 !== null ? result2 : "";
-            if (result2 !== null) {
-              result3 = [];
-              result4 = parse__();
-              while (result4 !== null) {
-                result3.push(result4);
-                result4 = parse__();
-              }
-              if (result3 !== null) {
-                if (input.charCodeAt(pos) === 93) {
-                  result4 = "]";
-                  pos++;
-                } else {
-                  result4 = null;
-                  if (reportFailures === 0) {
-                    matchFailed("\"]\"");
-                  }
-                }
-                if (result4 !== null) {
-                  result0 = [result0, result1, result2, result3, result4];
-                } else {
-                  result0 = null;
-                  pos = pos1;
-                }
-              } else {
-                result0 = null;
-                pos = pos1;
-              }
-            } else {
-              result0 = null;
-              pos = pos1;
-            }
-          } else {
-            result0 = null;
-            pos = pos1;
-          }
-        } else {
-          result0 = null;
-          pos = pos1;
-        }
-        if (result0 !== null) {
-          result0 = (function(offset, aList) { return aList; })(pos0, result0[2]);
-        }
-        if (result0 === null) {
-          pos = pos0;
-        }
-        return result0;
-      }
-      
-      function parse_aList() {
-        var result0, result1, result2, result3, result4, result5;
-        var pos0, pos1, pos2;
-        
-        pos0 = pos;
-        pos1 = pos;
-        result0 = parse_idDef();
-        if (result0 !== null) {
-          result1 = [];
-          pos2 = pos;
-          result2 = [];
-          result3 = parse__();
-          while (result3 !== null) {
-            result2.push(result3);
-            result3 = parse__();
-          }
-          if (result2 !== null) {
-            if (input.charCodeAt(pos) === 44) {
-              result3 = ",";
-              pos++;
-            } else {
-              result3 = null;
-              if (reportFailures === 0) {
-                matchFailed("\",\"");
-              }
-            }
-            result3 = result3 !== null ? result3 : "";
-            if (result3 !== null) {
-              result4 = [];
-              result5 = parse__();
-              while (result5 !== null) {
-                result4.push(result5);
-                result5 = parse__();
-              }
-              if (result4 !== null) {
-                result5 = parse_idDef();
-                if (result5 !== null) {
-                  result2 = [result2, result3, result4, result5];
-                } else {
-                  result2 = null;
-                  pos = pos2;
-                }
-              } else {
-                result2 = null;
-                pos = pos2;
-              }
-            } else {
-              result2 = null;
-              pos = pos2;
-            }
-          } else {
-            result2 = null;
-            pos = pos2;
-          }
-          while (result2 !== null) {
-            result1.push(result2);
-            pos2 = pos;
-            result2 = [];
-            result3 = parse__();
-            while (result3 !== null) {
-              result2.push(result3);
-              result3 = parse__();
-            }
-            if (result2 !== null) {
-              if (input.charCodeAt(pos) === 44) {
-                result3 = ",";
-                pos++;
-              } else {
-                result3 = null;
-                if (reportFailures === 0) {
-                  matchFailed("\",\"");
-                }
-              }
-              result3 = result3 !== null ? result3 : "";
-              if (result3 !== null) {
-                result4 = [];
-                result5 = parse__();
-                while (result5 !== null) {
-                  result4.push(result5);
-                  result5 = parse__();
-                }
-                if (result4 !== null) {
-                  result5 = parse_idDef();
-                  if (result5 !== null) {
-                    result2 = [result2, result3, result4, result5];
-                  } else {
-                    result2 = null;
-                    pos = pos2;
-                  }
-                } else {
-                  result2 = null;
-                  pos = pos2;
-                }
-              } else {
-                result2 = null;
-                pos = pos2;
-              }
-            } else {
-              result2 = null;
-              pos = pos2;
-            }
-          }
-          if (result1 !== null) {
-            result0 = [result0, result1];
-          } else {
-            result0 = null;
-            pos = pos1;
-          }
-        } else {
-          result0 = null;
-          pos = pos1;
-        }
-        if (result0 !== null) {
-          result0 = (function(offset, first, rest) {
-                var result = first;
-                for (var i = 0; i < rest.length; ++i) {
-                    result = rightBiasedMerge(result, rest[i][3]);
-                }
-                return result;
-              })(pos0, result0[0], result0[1]);
-        }
-        if (result0 === null) {
-          pos = pos0;
-        }
-        return result0;
-      }
-      
-      function parse_edgeRHS() {
-        var result0, result1, result2, result3, result4;
-        var pos0, pos1, pos2;
-        
-        pos0 = pos;
-        pos1 = pos;
-        pos2 = pos;
-        if (input.substr(pos, 2) === "--") {
-          result0 = "--";
-          pos += 2;
-        } else {
-          result0 = null;
-          if (reportFailures === 0) {
-            matchFailed("\"--\"");
-          }
-        }
-        if (result0 !== null) {
-          result1 = (function(offset) { return directed; })(pos) ? null : "";
-          if (result1 !== null) {
-            result0 = [result0, result1];
-          } else {
-            result0 = null;
-            pos = pos2;
-          }
-        } else {
-          result0 = null;
-          pos = pos2;
-        }
-        if (result0 === null) {
-          pos2 = pos;
-          if (input.substr(pos, 2) === "->") {
-            result0 = "->";
-            pos += 2;
-          } else {
-            result0 = null;
-            if (reportFailures === 0) {
-              matchFailed("\"->\"");
-            }
-          }
-          if (result0 !== null) {
-            result1 = (function(offset) { return directed; })(pos) ? "" : null;
-            if (result1 !== null) {
-              result0 = [result0, result1];
-            } else {
-              result0 = null;
-              pos = pos2;
-            }
-          } else {
-            result0 = null;
-            pos = pos2;
-          }
-        }
-        if (result0 !== null) {
-          result1 = [];
-          result2 = parse__();
-          while (result2 !== null) {
-            result1.push(result2);
-            result2 = parse__();
-          }
-          if (result1 !== null) {
-            result2 = parse_nodeIdOrSubgraph();
-            if (result2 !== null) {
-              result3 = [];
-              result4 = parse__();
-              while (result4 !== null) {
-                result3.push(result4);
-                result4 = parse__();
-              }
-              if (result3 !== null) {
-                result4 = parse_edgeRHS();
-                result4 = result4 !== null ? result4 : "";
-                if (result4 !== null) {
-                  result0 = [result0, result1, result2, result3, result4];
-                } else {
-                  result0 = null;
-                  pos = pos1;
-                }
-              } else {
-                result0 = null;
-                pos = pos1;
-              }
-            } else {
-              result0 = null;
-              pos = pos1;
-            }
-          } else {
-            result0 = null;
-            pos = pos1;
-          }
-        } else {
-          result0 = null;
-          pos = pos1;
-        }
-        if (result0 !== null) {
-          result0 = (function(offset, rhs, rest) {
-                var result = [rhs];
-                for (var i = 0; i < rest.length; ++i) {
-                    result.push(rest[i]);
-                }
-                return result;
-              })(pos0, result0[2], result0[4]);
-        }
-        if (result0 === null) {
-          pos = pos0;
-        }
-        return result0;
-      }
-      
-      function parse_idDef() {
-        var result0, result1, result2, result3, result4;
-        var pos0, pos1, pos2;
-        
-        pos0 = pos;
-        pos1 = pos;
-        result0 = parse_id();
-        if (result0 !== null) {
-          pos2 = pos;
-          result1 = [];
-          result2 = parse__();
-          while (result2 !== null) {
-            result1.push(result2);
-            result2 = parse__();
-          }
-          if (result1 !== null) {
-            if (input.charCodeAt(pos) === 61) {
-              result2 = "=";
-              pos++;
-            } else {
-              result2 = null;
-              if (reportFailures === 0) {
-                matchFailed("\"=\"");
-              }
-            }
-            if (result2 !== null) {
-              result3 = [];
-              result4 = parse__();
-              while (result4 !== null) {
-                result3.push(result4);
-                result4 = parse__();
-              }
-              if (result3 !== null) {
-                result4 = parse_id();
-                if (result4 !== null) {
-                  result1 = [result1, result2, result3, result4];
-                } else {
-                  result1 = null;
-                  pos = pos2;
-                }
-              } else {
-                result1 = null;
-                pos = pos2;
-              }
-            } else {
-              result1 = null;
-              pos = pos2;
-            }
-          } else {
-            result1 = null;
-            pos = pos2;
-          }
-          result1 = result1 !== null ? result1 : "";
-          if (result1 !== null) {
-            result0 = [result0, result1];
-          } else {
-            result0 = null;
-            pos = pos1;
-          }
-        } else {
-          result0 = null;
-          pos = pos1;
-        }
-        if (result0 !== null) {
-          result0 = (function(offset, k, v) {
-                var result = {};
-                result[k] = v[3];
-                return result;
-              })(pos0, result0[0], result0[1]);
-        }
-        if (result0 === null) {
-          pos = pos0;
-        }
-        return result0;
-      }
-      
-      function parse_nodeIdOrSubgraph() {
-        var result0;
-        var pos0;
-        
-        result0 = parse_subgraphStmt();
-        if (result0 === null) {
-          pos0 = pos;
-          result0 = parse_nodeId();
-          if (result0 !== null) {
-            result0 = (function(offset, id) { return { type: "node", id: id, attrs: {} }; })(pos0, result0);
-          }
-          if (result0 === null) {
-            pos = pos0;
-          }
-        }
-        return result0;
-      }
-      
-      function parse_nodeId() {
-        var result0, result1, result2;
-        var pos0, pos1;
-        
-        pos0 = pos;
-        pos1 = pos;
-        result0 = parse_id();
-        if (result0 !== null) {
-          result1 = [];
-          result2 = parse__();
-          while (result2 !== null) {
-            result1.push(result2);
-            result2 = parse__();
-          }
-          if (result1 !== null) {
-            result2 = parse_port();
-            result2 = result2 !== null ? result2 : "";
-            if (result2 !== null) {
-              result0 = [result0, result1, result2];
-            } else {
-              result0 = null;
-              pos = pos1;
-            }
-          } else {
-            result0 = null;
-            pos = pos1;
-          }
-        } else {
-          result0 = null;
-          pos = pos1;
-        }
-        if (result0 !== null) {
-          result0 = (function(offset, id) { return id; })(pos0, result0[0]);
-        }
-        if (result0 === null) {
-          pos = pos0;
-        }
-        return result0;
-      }
-      
-      function parse_port() {
-        var result0, result1, result2, result3, result4, result5, result6;
-        var pos0, pos1;
-        
-        pos0 = pos;
-        if (input.charCodeAt(pos) === 58) {
-          result0 = ":";
-          pos++;
-        } else {
-          result0 = null;
-          if (reportFailures === 0) {
-            matchFailed("\":\"");
-          }
-        }
-        if (result0 !== null) {
-          result1 = [];
-          result2 = parse__();
-          while (result2 !== null) {
-            result1.push(result2);
-            result2 = parse__();
-          }
-          if (result1 !== null) {
-            result2 = parse_id();
-            if (result2 !== null) {
-              result3 = [];
-              result4 = parse__();
-              while (result4 !== null) {
-                result3.push(result4);
-                result4 = parse__();
-              }
-              if (result3 !== null) {
-                pos1 = pos;
-                if (input.charCodeAt(pos) === 58) {
-                  result4 = ":";
-                  pos++;
-                } else {
-                  result4 = null;
-                  if (reportFailures === 0) {
-                    matchFailed("\":\"");
-                  }
-                }
-                if (result4 !== null) {
-                  result5 = [];
-                  result6 = parse__();
-                  while (result6 !== null) {
-                    result5.push(result6);
-                    result6 = parse__();
-                  }
-                  if (result5 !== null) {
-                    result6 = parse_compassPt();
-                    if (result6 !== null) {
-                      result4 = [result4, result5, result6];
-                    } else {
-                      result4 = null;
-                      pos = pos1;
-                    }
-                  } else {
-                    result4 = null;
-                    pos = pos1;
-                  }
-                } else {
-                  result4 = null;
-                  pos = pos1;
-                }
-                result4 = result4 !== null ? result4 : "";
-                if (result4 !== null) {
-                  result0 = [result0, result1, result2, result3, result4];
-                } else {
-                  result0 = null;
-                  pos = pos0;
-                }
-              } else {
-                result0 = null;
-                pos = pos0;
-              }
-            } else {
-              result0 = null;
-              pos = pos0;
-            }
-          } else {
-            result0 = null;
-            pos = pos0;
-          }
-        } else {
-          result0 = null;
-          pos = pos0;
-        }
-        return result0;
-      }
-      
-      function parse_compassPt() {
-        var result0;
-        
-        if (input.charCodeAt(pos) === 110) {
-          result0 = "n";
-          pos++;
-        } else {
-          result0 = null;
-          if (reportFailures === 0) {
-            matchFailed("\"n\"");
-          }
-        }
-        if (result0 === null) {
-          if (input.substr(pos, 2) === "ne") {
-            result0 = "ne";
-            pos += 2;
-          } else {
-            result0 = null;
-            if (reportFailures === 0) {
-              matchFailed("\"ne\"");
-            }
-          }
-          if (result0 === null) {
-            if (input.charCodeAt(pos) === 101) {
-              result0 = "e";
-              pos++;
-            } else {
-              result0 = null;
-              if (reportFailures === 0) {
-                matchFailed("\"e\"");
-              }
-            }
-            if (result0 === null) {
-              if (input.substr(pos, 2) === "se") {
-                result0 = "se";
-                pos += 2;
-              } else {
-                result0 = null;
-                if (reportFailures === 0) {
-                  matchFailed("\"se\"");
-                }
-              }
-              if (result0 === null) {
-                if (input.charCodeAt(pos) === 115) {
-                  result0 = "s";
-                  pos++;
-                } else {
-                  result0 = null;
-                  if (reportFailures === 0) {
-                    matchFailed("\"s\"");
-                  }
-                }
-                if (result0 === null) {
-                  if (input.substr(pos, 2) === "sw") {
-                    result0 = "sw";
-                    pos += 2;
-                  } else {
-                    result0 = null;
-                    if (reportFailures === 0) {
-                      matchFailed("\"sw\"");
-                    }
-                  }
-                  if (result0 === null) {
-                    if (input.charCodeAt(pos) === 119) {
-                      result0 = "w";
-                      pos++;
-                    } else {
-                      result0 = null;
-                      if (reportFailures === 0) {
-                        matchFailed("\"w\"");
-                      }
-                    }
-                    if (result0 === null) {
-                      if (input.substr(pos, 2) === "nw") {
-                        result0 = "nw";
-                        pos += 2;
-                      } else {
-                        result0 = null;
-                        if (reportFailures === 0) {
-                          matchFailed("\"nw\"");
-                        }
-                      }
-                      if (result0 === null) {
-                        if (input.charCodeAt(pos) === 99) {
-                          result0 = "c";
-                          pos++;
-                        } else {
-                          result0 = null;
-                          if (reportFailures === 0) {
-                            matchFailed("\"c\"");
-                          }
-                        }
-                        if (result0 === null) {
-                          if (input.charCodeAt(pos) === 95) {
-                            result0 = "_";
-                            pos++;
-                          } else {
-                            result0 = null;
-                            if (reportFailures === 0) {
-                              matchFailed("\"_\"");
-                            }
-                          }
-                        }
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          }
-        }
-        return result0;
-      }
-      
-      function parse_id() {
-        var result0, result1, result2, result3, result4;
-        var pos0, pos1, pos2, pos3;
-        
-        reportFailures++;
-        pos0 = pos;
-        pos1 = pos;
-        if (/^[a-zA-Z\u0200-\u0377_]/.test(input.charAt(pos))) {
-          result0 = input.charAt(pos);
-          pos++;
-        } else {
-          result0 = null;
-          if (reportFailures === 0) {
-            matchFailed("[a-zA-Z\\u0200-\\u0377_]");
-          }
-        }
-        if (result0 !== null) {
-          result1 = [];
-          if (/^[a-zA-Z\u0200-\u0377_0-9]/.test(input.charAt(pos))) {
-            result2 = input.charAt(pos);
-            pos++;
-          } else {
-            result2 = null;
-            if (reportFailures === 0) {
-              matchFailed("[a-zA-Z\\u0200-\\u0377_0-9]");
-            }
-          }
-          while (result2 !== null) {
-            result1.push(result2);
-            if (/^[a-zA-Z\u0200-\u0377_0-9]/.test(input.charAt(pos))) {
-              result2 = input.charAt(pos);
-              pos++;
-            } else {
-              result2 = null;
-              if (reportFailures === 0) {
-                matchFailed("[a-zA-Z\\u0200-\\u0377_0-9]");
-              }
-            }
-          }
-          if (result1 !== null) {
-            result0 = [result0, result1];
-          } else {
-            result0 = null;
-            pos = pos1;
-          }
-        } else {
-          result0 = null;
-          pos = pos1;
-        }
-        if (result0 !== null) {
-          result0 = (function(offset, fst, rest) { return fst + rest.join(""); })(pos0, result0[0], result0[1]);
-        }
-        if (result0 === null) {
-          pos = pos0;
-        }
-        if (result0 === null) {
-          pos0 = pos;
-          pos1 = pos;
-          if (input.charCodeAt(pos) === 45) {
-            result0 = "-";
-            pos++;
-          } else {
-            result0 = null;
-            if (reportFailures === 0) {
-              matchFailed("\"-\"");
-            }
-          }
-          result0 = result0 !== null ? result0 : "";
-          if (result0 !== null) {
-            if (input.charCodeAt(pos) === 46) {
-              result1 = ".";
-              pos++;
-            } else {
-              result1 = null;
-              if (reportFailures === 0) {
-                matchFailed("\".\"");
-              }
-            }
-            if (result1 !== null) {
-              if (/^[0-9]/.test(input.charAt(pos))) {
-                result3 = input.charAt(pos);
-                pos++;
-              } else {
-                result3 = null;
-                if (reportFailures === 0) {
-                  matchFailed("[0-9]");
-                }
-              }
-              if (result3 !== null) {
-                result2 = [];
-                while (result3 !== null) {
-                  result2.push(result3);
-                  if (/^[0-9]/.test(input.charAt(pos))) {
-                    result3 = input.charAt(pos);
-                    pos++;
-                  } else {
-                    result3 = null;
-                    if (reportFailures === 0) {
-                      matchFailed("[0-9]");
-                    }
-                  }
-                }
-              } else {
-                result2 = null;
-              }
-              if (result2 !== null) {
-                result0 = [result0, result1, result2];
-              } else {
-                result0 = null;
-                pos = pos1;
-              }
-            } else {
-              result0 = null;
-              pos = pos1;
-            }
-          } else {
-            result0 = null;
-            pos = pos1;
-          }
-          if (result0 !== null) {
-            result0 = (function(offset, sign, dot, after) { return sign + dot + after.join(""); })(pos0, result0[0], result0[1], result0[2]);
-          }
-          if (result0 === null) {
-            pos = pos0;
-          }
-          if (result0 === null) {
-            pos0 = pos;
-            pos1 = pos;
-            if (input.charCodeAt(pos) === 45) {
-              result0 = "-";
-              pos++;
-            } else {
-              result0 = null;
-              if (reportFailures === 0) {
-                matchFailed("\"-\"");
-              }
-            }
-            result0 = result0 !== null ? result0 : "";
-            if (result0 !== null) {
-              if (/^[0-9]/.test(input.charAt(pos))) {
-                result2 = input.charAt(pos);
-                pos++;
-              } else {
-                result2 = null;
-                if (reportFailures === 0) {
-                  matchFailed("[0-9]");
-                }
-              }
-              if (result2 !== null) {
-                result1 = [];
-                while (result2 !== null) {
-                  result1.push(result2);
-                  if (/^[0-9]/.test(input.charAt(pos))) {
-                    result2 = input.charAt(pos);
-                    pos++;
-                  } else {
-                    result2 = null;
-                    if (reportFailures === 0) {
-                      matchFailed("[0-9]");
-                    }
-                  }
-                }
-              } else {
-                result1 = null;
-              }
-              if (result1 !== null) {
-                pos2 = pos;
-                if (input.charCodeAt(pos) === 46) {
-                  result2 = ".";
-                  pos++;
-                } else {
-                  result2 = null;
-                  if (reportFailures === 0) {
-                    matchFailed("\".\"");
-                  }
-                }
-                if (result2 !== null) {
-                  result3 = [];
-                  if (/^[0-9]/.test(input.charAt(pos))) {
-                    result4 = input.charAt(pos);
-                    pos++;
-                  } else {
-                    result4 = null;
-                    if (reportFailures === 0) {
-                      matchFailed("[0-9]");
-                    }
-                  }
-                  while (result4 !== null) {
-                    result3.push(result4);
-                    if (/^[0-9]/.test(input.charAt(pos))) {
-                      result4 = input.charAt(pos);
-                      pos++;
-                    } else {
-                      result4 = null;
-                      if (reportFailures === 0) {
-                        matchFailed("[0-9]");
-                      }
-                    }
-                  }
-                  if (result3 !== null) {
-                    result2 = [result2, result3];
-                  } else {
-                    result2 = null;
-                    pos = pos2;
-                  }
-                } else {
-                  result2 = null;
-                  pos = pos2;
-                }
-                result2 = result2 !== null ? result2 : "";
-                if (result2 !== null) {
-                  result0 = [result0, result1, result2];
-                } else {
-                  result0 = null;
-                  pos = pos1;
-                }
-              } else {
-                result0 = null;
-                pos = pos1;
-              }
-            } else {
-              result0 = null;
-              pos = pos1;
-            }
-            if (result0 !== null) {
-              result0 = (function(offset, sign, before, after) { return sign + before.join("") + (after[0] || "") + (after[1] || []).join(""); })(pos0, result0[0], result0[1], result0[2]);
-            }
-            if (result0 === null) {
-              pos = pos0;
-            }
-            if (result0 === null) {
-              pos0 = pos;
-              pos1 = pos;
-              if (input.charCodeAt(pos) === 34) {
-                result0 = "\"";
-                pos++;
-              } else {
-                result0 = null;
-                if (reportFailures === 0) {
-                  matchFailed("\"\\\"\"");
-                }
-              }
-              if (result0 !== null) {
-                result1 = [];
-                pos2 = pos;
-                if (input.substr(pos, 2) === "\\\"") {
-                  result2 = "\\\"";
-                  pos += 2;
-                } else {
-                  result2 = null;
-                  if (reportFailures === 0) {
-                    matchFailed("\"\\\\\\\"\"");
-                  }
-                }
-                if (result2 !== null) {
-                  result2 = (function(offset) { return '"'; })(pos2);
-                }
-                if (result2 === null) {
-                  pos = pos2;
-                }
-                if (result2 === null) {
-                  pos2 = pos;
-                  pos3 = pos;
-                  if (input.charCodeAt(pos) === 92) {
-                    result2 = "\\";
-                    pos++;
-                  } else {
-                    result2 = null;
-                    if (reportFailures === 0) {
-                      matchFailed("\"\\\\\"");
-                    }
-                  }
-                  if (result2 !== null) {
-                    if (/^[^"]/.test(input.charAt(pos))) {
-                      result3 = input.charAt(pos);
-                      pos++;
-                    } else {
-                      result3 = null;
-                      if (reportFailures === 0) {
-                        matchFailed("[^\"]");
-                      }
-                    }
-                    if (result3 !== null) {
-                      result2 = [result2, result3];
-                    } else {
-                      result2 = null;
-                      pos = pos3;
-                    }
-                  } else {
-                    result2 = null;
-                    pos = pos3;
-                  }
-                  if (result2 !== null) {
-                    result2 = (function(offset, ch) { return "\\" + ch; })(pos2, result2[1]);
-                  }
-                  if (result2 === null) {
-                    pos = pos2;
-                  }
-                  if (result2 === null) {
-                    if (/^[^"]/.test(input.charAt(pos))) {
-                      result2 = input.charAt(pos);
-                      pos++;
-                    } else {
-                      result2 = null;
-                      if (reportFailures === 0) {
-                        matchFailed("[^\"]");
-                      }
-                    }
-                  }
-                }
-                while (result2 !== null) {
-                  result1.push(result2);
-                  pos2 = pos;
-                  if (input.substr(pos, 2) === "\\\"") {
-                    result2 = "\\\"";
-                    pos += 2;
-                  } else {
-                    result2 = null;
-                    if (reportFailures === 0) {
-                      matchFailed("\"\\\\\\\"\"");
-                    }
-                  }
-                  if (result2 !== null) {
-                    result2 = (function(offset) { return '"'; })(pos2);
-                  }
-                  if (result2 === null) {
-                    pos = pos2;
-                  }
-                  if (result2 === null) {
-                    pos2 = pos;
-                    pos3 = pos;
-                    if (input.charCodeAt(pos) === 92) {
-                      result2 = "\\";
-                      pos++;
-                    } else {
-                      result2 = null;
-                      if (reportFailures === 0) {
-                        matchFailed("\"\\\\\"");
-                      }
-                    }
-                    if (result2 !== null) {
-                      if (/^[^"]/.test(input.charAt(pos))) {
-                        result3 = input.charAt(pos);
-                        pos++;
-                      } else {
-                        result3 = null;
-                        if (reportFailures === 0) {
-                          matchFailed("[^\"]");
-                        }
-                      }
-                      if (result3 !== null) {
-                        result2 = [result2, result3];
-                      } else {
-                        result2 = null;
-                        pos = pos3;
-                      }
-                    } else {
-                      result2 = null;
-                      pos = pos3;
-                    }
-                    if (result2 !== null) {
-                      result2 = (function(offset, ch) { return "\\" + ch; })(pos2, result2[1]);
-                    }
-                    if (result2 === null) {
-                      pos = pos2;
-                    }
-                    if (result2 === null) {
-                      if (/^[^"]/.test(input.charAt(pos))) {
-                        result2 = input.charAt(pos);
-                        pos++;
-                      } else {
-                        result2 = null;
-                        if (reportFailures === 0) {
-                          matchFailed("[^\"]");
-                        }
-                      }
-                    }
-                  }
-                }
-                if (result1 !== null) {
-                  if (input.charCodeAt(pos) === 34) {
-                    result2 = "\"";
-                    pos++;
-                  } else {
-                    result2 = null;
-                    if (reportFailures === 0) {
-                      matchFailed("\"\\\"\"");
-                    }
-                  }
-                  if (result2 !== null) {
-                    result0 = [result0, result1, result2];
-                  } else {
-                    result0 = null;
-                    pos = pos1;
-                  }
-                } else {
-                  result0 = null;
-                  pos = pos1;
-                }
-              } else {
-                result0 = null;
-                pos = pos1;
-              }
-              if (result0 !== null) {
-                result0 = (function(offset, id) { return id.join(""); })(pos0, result0[1]);
-              }
-              if (result0 === null) {
-                pos = pos0;
-              }
-            }
-          }
-        }
-        reportFailures--;
-        if (reportFailures === 0 && result0 === null) {
-          matchFailed("identifier");
-        }
-        return result0;
-      }
-      
-      function parse_node() {
-        var result0;
-        var pos0;
-        
-        pos0 = pos;
-        if (input.substr(pos, 4).toLowerCase() === "node") {
-          result0 = input.substr(pos, 4);
-          pos += 4;
-        } else {
-          result0 = null;
-          if (reportFailures === 0) {
-            matchFailed("\"node\"");
-          }
-        }
-        if (result0 !== null) {
-          result0 = (function(offset, k) { return k.toLowerCase(); })(pos0, result0);
-        }
-        if (result0 === null) {
-          pos = pos0;
-        }
-        return result0;
-      }
-      
-      function parse_edge() {
-        var result0;
-        var pos0;
-        
-        pos0 = pos;
-        if (input.substr(pos, 4).toLowerCase() === "edge") {
-          result0 = input.substr(pos, 4);
-          pos += 4;
-        } else {
-          result0 = null;
-          if (reportFailures === 0) {
-            matchFailed("\"edge\"");
-          }
-        }
-        if (result0 !== null) {
-          result0 = (function(offset, k) { return k.toLowerCase(); })(pos0, result0);
-        }
-        if (result0 === null) {
-          pos = pos0;
-        }
-        return result0;
-      }
-      
-      function parse_graph() {
-        var result0;
-        var pos0;
-        
-        pos0 = pos;
-        if (input.substr(pos, 5).toLowerCase() === "graph") {
-          result0 = input.substr(pos, 5);
-          pos += 5;
-        } else {
-          result0 = null;
-          if (reportFailures === 0) {
-            matchFailed("\"graph\"");
-          }
-        }
-        if (result0 !== null) {
-          result0 = (function(offset, k) { return k.toLowerCase(); })(pos0, result0);
-        }
-        if (result0 === null) {
-          pos = pos0;
-        }
-        return result0;
-      }
-      
-      function parse_digraph() {
-        var result0;
-        var pos0;
-        
-        pos0 = pos;
-        if (input.substr(pos, 7).toLowerCase() === "digraph") {
-          result0 = input.substr(pos, 7);
-          pos += 7;
-        } else {
-          result0 = null;
-          if (reportFailures === 0) {
-            matchFailed("\"digraph\"");
-          }
-        }
-        if (result0 !== null) {
-          result0 = (function(offset, k) { return k.toLowerCase(); })(pos0, result0);
-        }
-        if (result0 === null) {
-          pos = pos0;
-        }
-        return result0;
-      }
-      
-      function parse_subgraph() {
-        var result0;
-        var pos0;
-        
-        pos0 = pos;
-        if (input.substr(pos, 8).toLowerCase() === "subgraph") {
-          result0 = input.substr(pos, 8);
-          pos += 8;
-        } else {
-          result0 = null;
-          if (reportFailures === 0) {
-            matchFailed("\"subgraph\"");
-          }
-        }
-        if (result0 !== null) {
-          result0 = (function(offset, k) { return k.toLowerCase(); })(pos0, result0);
-        }
-        if (result0 === null) {
-          pos = pos0;
-        }
-        return result0;
-      }
-      
-      function parse_strict() {
-        var result0;
-        var pos0;
-        
-        pos0 = pos;
-        if (input.substr(pos, 6).toLowerCase() === "strict") {
-          result0 = input.substr(pos, 6);
-          pos += 6;
-        } else {
-          result0 = null;
-          if (reportFailures === 0) {
-            matchFailed("\"strict\"");
-          }
-        }
-        if (result0 !== null) {
-          result0 = (function(offset, k) { return k.toLowerCase(); })(pos0, result0);
-        }
-        if (result0 === null) {
-          pos = pos0;
-        }
-        return result0;
-      }
-      
-      function parse_graphType() {
-        var result0;
-        var pos0;
-        
-        result0 = parse_graph();
-        if (result0 === null) {
-          pos0 = pos;
-          result0 = parse_digraph();
-          if (result0 !== null) {
-            result0 = (function(offset, graph) {
-                  directed = graph === "digraph";
-                  return graph;
-                })(pos0, result0);
-          }
-          if (result0 === null) {
-            pos = pos0;
-          }
-        }
-        return result0;
-      }
-      
-      function parse_whitespace() {
-        var result0, result1;
-        
-        reportFailures++;
-        if (/^[ \t\r\n]/.test(input.charAt(pos))) {
-          result1 = input.charAt(pos);
-          pos++;
-        } else {
-          result1 = null;
-          if (reportFailures === 0) {
-            matchFailed("[ \\t\\r\\n]");
-          }
-        }
-        if (result1 !== null) {
-          result0 = [];
-          while (result1 !== null) {
-            result0.push(result1);
-            if (/^[ \t\r\n]/.test(input.charAt(pos))) {
-              result1 = input.charAt(pos);
-              pos++;
-            } else {
-              result1 = null;
-              if (reportFailures === 0) {
-                matchFailed("[ \\t\\r\\n]");
-              }
-            }
-          }
-        } else {
-          result0 = null;
-        }
-        reportFailures--;
-        if (reportFailures === 0 && result0 === null) {
-          matchFailed("whitespace");
-        }
-        return result0;
-      }
-      
-      function parse_comment() {
-        var result0, result1, result2, result3;
-        var pos0, pos1, pos2;
-        
-        reportFailures++;
-        pos0 = pos;
-        if (input.substr(pos, 2) === "//") {
-          result0 = "//";
-          pos += 2;
-        } else {
-          result0 = null;
-          if (reportFailures === 0) {
-            matchFailed("\"//\"");
-          }
-        }
-        if (result0 !== null) {
-          result1 = [];
-          if (/^[^\n]/.test(input.charAt(pos))) {
-            result2 = input.charAt(pos);
-            pos++;
-          } else {
-            result2 = null;
-            if (reportFailures === 0) {
-              matchFailed("[^\\n]");
-            }
-          }
-          while (result2 !== null) {
-            result1.push(result2);
-            if (/^[^\n]/.test(input.charAt(pos))) {
-              result2 = input.charAt(pos);
-              pos++;
-            } else {
-              result2 = null;
-              if (reportFailures === 0) {
-                matchFailed("[^\\n]");
-              }
-            }
-          }
-          if (result1 !== null) {
-            result0 = [result0, result1];
-          } else {
-            result0 = null;
-            pos = pos0;
-          }
-        } else {
-          result0 = null;
-          pos = pos0;
-        }
-        if (result0 === null) {
-          pos0 = pos;
-          if (input.substr(pos, 2) === "/*") {
-            result0 = "/*";
-            pos += 2;
-          } else {
-            result0 = null;
-            if (reportFailures === 0) {
-              matchFailed("\"/*\"");
-            }
-          }
-          if (result0 !== null) {
-            result1 = [];
-            pos1 = pos;
-            pos2 = pos;
-            reportFailures++;
-            if (input.substr(pos, 2) === "*/") {
-              result2 = "*/";
-              pos += 2;
-            } else {
-              result2 = null;
-              if (reportFailures === 0) {
-                matchFailed("\"*/\"");
-              }
-            }
-            reportFailures--;
-            if (result2 === null) {
-              result2 = "";
-            } else {
-              result2 = null;
-              pos = pos2;
-            }
-            if (result2 !== null) {
-              if (input.length > pos) {
-                result3 = input.charAt(pos);
-                pos++;
-              } else {
-                result3 = null;
-                if (reportFailures === 0) {
-                  matchFailed("any character");
-                }
-              }
-              if (result3 !== null) {
-                result2 = [result2, result3];
-              } else {
-                result2 = null;
-                pos = pos1;
-              }
-            } else {
-              result2 = null;
-              pos = pos1;
-            }
-            while (result2 !== null) {
-              result1.push(result2);
-              pos1 = pos;
-              pos2 = pos;
-              reportFailures++;
-              if (input.substr(pos, 2) === "*/") {
-                result2 = "*/";
-                pos += 2;
-              } else {
-                result2 = null;
-                if (reportFailures === 0) {
-                  matchFailed("\"*/\"");
-                }
-              }
-              reportFailures--;
-              if (result2 === null) {
-                result2 = "";
-              } else {
-                result2 = null;
-                pos = pos2;
-              }
-              if (result2 !== null) {
-                if (input.length > pos) {
-                  result3 = input.charAt(pos);
-                  pos++;
-                } else {
-                  result3 = null;
-                  if (reportFailures === 0) {
-                    matchFailed("any character");
-                  }
-                }
-                if (result3 !== null) {
-                  result2 = [result2, result3];
-                } else {
-                  result2 = null;
-                  pos = pos1;
-                }
-              } else {
-                result2 = null;
-                pos = pos1;
-              }
-            }
-            if (result1 !== null) {
-              if (input.substr(pos, 2) === "*/") {
-                result2 = "*/";
-                pos += 2;
-              } else {
-                result2 = null;
-                if (reportFailures === 0) {
-                  matchFailed("\"*/\"");
-                }
-              }
-              if (result2 !== null) {
-                result0 = [result0, result1, result2];
-              } else {
-                result0 = null;
-                pos = pos0;
-              }
-            } else {
-              result0 = null;
-              pos = pos0;
-            }
-          } else {
-            result0 = null;
-            pos = pos0;
-          }
-        }
-        reportFailures--;
-        if (reportFailures === 0 && result0 === null) {
-          matchFailed("comment");
-        }
-        return result0;
-      }
-      
-      function parse__() {
-        var result0;
-        
-        result0 = parse_whitespace();
-        if (result0 === null) {
-          result0 = parse_comment();
-        }
-        return result0;
-      }
-      
-      
-      function cleanupExpected(expected) {
-        expected.sort();
-        
-        var lastExpected = null;
-        var cleanExpected = [];
-        for (var i = 0; i < expected.length; i++) {
-          if (expected[i] !== lastExpected) {
-            cleanExpected.push(expected[i]);
-            lastExpected = expected[i];
-          }
-        }
-        return cleanExpected;
-      }
-      
-      function computeErrorPosition() {
-        /*
-         * The first idea was to use |String.split| to break the input up to the
-         * error position along newlines and derive the line and column from
-         * there. However IE's |split| implementation is so broken that it was
-         * enough to prevent it.
-         */
-        
-        var line = 1;
-        var column = 1;
-        var seenCR = false;
-        
-        for (var i = 0; i < Math.max(pos, rightmostFailuresPos); i++) {
-          var ch = input.charAt(i);
-          if (ch === "\n") {
-            if (!seenCR) { line++; }
-            column = 1;
-            seenCR = false;
-          } else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") {
-            line++;
-            column = 1;
-            seenCR = true;
-          } else {
-            column++;
-            seenCR = false;
-          }
-        }
-        
-        return { line: line, column: column };
-      }
-      
-      
-          var directed;
-      
-          function rightBiasedMerge(lhs, rhs) {
-              var result = {};
-              for (var k in lhs) {
-                  result[k] = lhs[k];
-              }
-              for (var k in rhs) {
-                  result[k] = rhs[k];
-              }
-              return result;     
-          }
-      
-      
-      var result = parseFunctions[startRule]();
-      
-      /*
-       * The parser is now in one of the following three states:
-       *
-       * 1. The parser successfully parsed the whole input.
-       *
-       *    - |result !== null|
-       *    - |pos === input.length|
-       *    - |rightmostFailuresExpected| may or may not contain something
-       *
-       * 2. The parser successfully parsed only a part of the input.
-       *
-       *    - |result !== null|
-       *    - |pos < input.length|
-       *    - |rightmostFailuresExpected| may or may not contain something
-       *
-       * 3. The parser did not successfully parse any part of the input.
-       *
-       *   - |result === null|
-       *   - |pos === 0|
-       *   - |rightmostFailuresExpected| contains at least one failure
-       *
-       * All code following this comment (including called functions) must
-       * handle these states.
-       */
-      if (result === null || pos !== input.length) {
-        var offset = Math.max(pos, rightmostFailuresPos);
-        var found = offset < input.length ? input.charAt(offset) : null;
-        var errorPosition = computeErrorPosition();
-        
-        throw new this.SyntaxError(
-          cleanupExpected(rightmostFailuresExpected),
-          found,
-          offset,
-          errorPosition.line,
-          errorPosition.column
-        );
-      }
-      
-      return result;
-    },
-    
-    /* Returns the parser source code. */
-    toSource: function() { return this._source; }
-  };
-  
-  /* Thrown when a parser encounters a syntax error. */
-  
-  result.SyntaxError = function(expected, found, offset, line, column) {
-    function buildMessage(expected, found) {
-      var expectedHumanized, foundHumanized;
-      
-      switch (expected.length) {
-        case 0:
-          expectedHumanized = "end of input";
-          break;
-        case 1:
-          expectedHumanized = expected[0];
-          break;
-        default:
-          expectedHumanized = expected.slice(0, expected.length - 1).join(", ")
-            + " or "
-            + expected[expected.length - 1];
-      }
-      
-      foundHumanized = found ? quote(found) : "end of input";
-      
-      return "Expected " + expectedHumanized + " but " + foundHumanized + " found.";
-    }
-    
-    this.name = "SyntaxError";
-    this.expected = expected;
-    this.found = found;
-    this.message = buildMessage(expected, found);
-    this.offset = offset;
-    this.line = line;
-    this.column = column;
-  };
-  
-  result.SyntaxError.prototype = Error.prototype;
-  
-  return result;
-})();
-})();
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/dagre/dagre.min.js b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/dagre/dagre.min.js
deleted file mode 100644
index ddc669f92b2..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/dagre/dagre.min.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-Copyright (c) 2012 Chris Pettitt
-
-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.
-*/(function(){function c(a){var b={};return a.forEach(function(a,c){b[a]=c}),b}function d(a,b){Object.keys(a).forEach(function(c){b[c]=a[c]})}function e(a){return Math.min.apply(null,a)}function f(a){return Math.max.apply(null,a)}function g(a){return Array.prototype.concat.apply([],a)}function i(a){return Object.keys(a).map(function(b){return a[b]})}function j(a){var b={};for(var c=0;c<a.length;++c){var d=a[c];for(var e=0;e<d.length;++e){var f=d[e];b[f]=f}}var g=[];for(var h in b)g.push(b[h]);return g}function p(a,b,c,d){return function(e){return arguments.length?(b[c]=e,d&&d(e),a):b[c]}}function q(){function c(b){var d=a,f=2*b,g=f+1,h=b;f<d.length&&(h=d[f].pri<d[h].pri?f:h,g<d.length&&(h=d[g].pri<d[h].pri?g:h),h!==b&&(e(b,h),c(h)))}function d(b){var c=a,d=c[b].pri,f;while(b>0){f=b>>1;if(c[f].pri<d)break;e(b,f),b=f}}function e(c,d){var e=a,f=b,g=e[c];e[c]=e[d],e[d]=g,f[e[c].key]=c,f[e[d].key]=d}function f(){return a.length}function g(){return Object.keys(b)}function h(a){return a in b}function i(c){var d=b[c];if(d!==undefined)return a[d].pri}function j(c,e){if(c in b)return!1;var f={key:c,pri:e},g=a.length;return b[c]=g,a.push(f),d(g),!0}function k(){if(f()>0)return a[0].key}function l(){e(0,a.length-1);var d=a.pop();return delete b[d.key],c(0),d.key}function m(c,e){var f=b[c];if(e>a[f].pri)throw new Error("New priority is greater than current priority. Key: "+c+" Old: "+a[f].pri+" New: "+e);a[f].pri=e,d(f)}var a=[],b={};return{size:f,keys:g,has:h,priority:i,add:j,min:k,removeMin:l,decrease:m}}dagre={},dagre.version="0.0.6",dagre.graph={},dagre.graph=function(){function k(a,b,c){var d=a[b];d||(d=a[b]={count:0,edges:{}}),d.count++,d.edges[c]=!0}function l(a,b,c){var d=a[b];--d.count==0?delete a[b]:delete d.edges[c]}function m(b){var c=a[b];if(b in a)return c;throw new Error("Node '"+b+"' is not in graph:\n"+e.toString())}function n(a){var b=d[a];if(!b)throw new Error("Edge '"+a+"' is not in graph:\n"+e.toString());return b}var a={},b={},c={},d={},e={},f=0;return e.addNode=function(d,f){if(e.hasNode(d))throw new Error("Graph already has node '"+d+"':\n"+e.toString());a[d]={id:d,value:f},b[d]={},c[d]={}},e.delNode=function(d){m(d),e.edges(d).forEach(function(a){e.delEdge(a)}),delete b[d],delete c[d],delete a[d]},e.node=function(a){return m(a).value},e.hasNode=function(b){return b in a},e.addEdge=function(a,g,h,i){m(g),m(h);if(a===null)a="_ANON-"+ ++f;else if(e.hasEdge(a))throw new Error("Graph already has edge '"+a+"':\n"+e.toString());d[a]={id:a,source:g,target:h,value:i},k(b[h],g,a),k(c[g],h,a)},e.delEdge=function(a){var e=n(a);l(b[e.target],e.source,a),l(c[e.source],e.target,a),delete d[a]},e.edge=function(a){return n(a).value},e.source=function(a){return n(a).source},e.target=function(a){return n(a).target},e.hasEdge=function(a){return a in d},e.successors=function(b){return m(b),h(c[b]).map(function(b){return a[b].id})},e.predecessors=function(c){return m(c),h(b[c]).map(function(b){return a[b].id})},e.neighbors=function(d){m(d);var e={};return h(c[d]).map(function(a){e[a]=!0}),h(b[d]).map(function(a){e[a]=!0}),h(e).map(function(b){return a[b].id})},e.nodes=function(){var a=[];return e.eachNode(function(b,c){a.push(b)}),a},e.eachNode=function(b){for(var c in a){var d=a[c];b(d.id,d.value)}},e.edges=function(a,b){var f,g;if(!arguments.length)return f=[],e.eachEdge(function(a){f.push(a)}),f;if(arguments.length===1)return j([e.inEdges(a),e.outEdges(a)]);if(arguments.length===2)return m(a),m(b),g=c[a],f=b in g?h(g[b].edges):[],f.map(function(a){return d[a].id})},e.eachEdge=function(a){for(var b in d){var c=d[b];a(c.id,c.source,c.target,c.value)}},e.inEdges=function(a){return m(a),g(i(b[a]).map(function(a){return h(a.edges)}))},e.outEdges=function(a){return m(a),g(i(c[a]).map(function(a){return h(a.edges)}))},e.subgraph=function(a){var b=dagre.graph();return a.forEach(function(a){b.addNode(a,e.node(a))}),i(d).forEach(function(a){b.hasNode(a.source)&&b.hasNode(a.target)&&b.addEdge(a.id,a.source,a.target,e.edge(a.id))}),b},e.toString=function(){var b="GRAPH:\n";return b+="    Nodes:\n",h(a).forEach(function(c){b+="        "+c+": "+JSON.stringify(a[c].value)+"\n"}),b+="    Edges:\n",h(d).forEach(function(a){var c=d[a];b+="        "+a+" ("+c.source+" -> "+c.target+"): "+JSON.stringify(d[a].value)+"\n"}),b},e},dagre.layout=function(){function h(){var b=dagre.graph(),c=0;return a.nodes.forEach(function(a){var d="id"in a?a.id:"_N"+c++;a.dagre={id:d,width:a.width,height:a.height},b.addNode(d,a.dagre)}),a.edges.forEach(function(a){var d=a.source.dagre.id;if(!b.hasNode(d))throw new Error("Source node for '"+a+"' not in node list");var e=a.target.dagre.id;if(!b.hasNode(e))throw new Error("Target node for '"+a+"' not in node list");a.dagre={points:[]};if(d!==e){var f="id"in a?a.id:"_E"+c++;a.dagre.id=f,a.dagre.minLen=a.minLen||1,a.dagre.width=a.width||0,a.dagre.height=a.height||0,b.addEdge(f,d,e,a.dagre)}}),b}function i(){var b=g.rankSep();try{if(!a.nodes.length)return;var i=h();i.eachEdge(function(a,b,c,d){d.minLen*=2}),g.rankSep(b/2),c.run(i),d.run(i),j(i),e.run(i),f.run(i),k(i),l(i),c.undo(i)}finally{g.rankSep(b)}return g}function j(a){var b=0;a.eachEdge(function(c,d,e,f){var g=a.node(d).rank,h=a.node(e).rank;if(g+1<h){for(var i=d,j=g+1,k=0;j<h;++j,++k){var l="_D"+ ++b,m={width:f.width,height:f.height,edge:{id:c,source:d,target:e,attrs:f},rank:j,dummy:!0};k===0?m.index=0:j+1===h&&(m.index=1),a.addNode(l,m),a.addEdge(null,i,l,{}),i=l}a.addEdge(null,i,e,{}),a.delEdge(c)}})}function k(a){var b={};a.eachNode(function(b,c){if(c.dummy&&"index"in c){var d=c.edge;a.hasEdge(d.id)||a.addEdge(d.id,d.source,d.target,d.attrs);var e=a.edge(d.id).points;e[c.index]={x:c.x,y:c.y,ul:c.ul,ur:c.ur,dl:c.dl,dr:c.dr},a.delNode(b)}})}function l(a){a.eachEdge(function(a,b,c,d){d.reversed&&d.points.reverse()})}function m(a){return function(){return arguments.length?(a.apply(null,arguments),g):a()}}var a={nodes:[],edges:[],debugLevel:0},b=o(),c=dagre.layout.acyclic(),d=dagre.layout.rank(),e=dagre.layout.order(),f=dagre.layout.position(),g={};return g.nodes=p(g,a,"nodes"),g.edges=p(g,a,"edges"),g.orderIters=m(e.iterations),g.nodeSep=m(f.nodeSep),g.edgeSep=m(f.edgeSep),g.universalSep=m(f.universalSep),g.rankSep=m(f.rankSep),g.rankDir=m(f.rankDir),g.debugAlignment=m(f.debugAlignment),g.debugLevel=p(g,a,"debugLevel",function(a){b.enabled(a),c.debugLevel(a),d.debugLevel(a),e.debugLevel(a),f.debugLevel(a)}),g.run=b.wrap("Total layout",i),g},dagre.layout.acyclic=function(){function d(b){function f(a){if(a in d)return;d[a]=c[a]=!0,b.outEdges(a).forEach(function(d){var g=b.target(d),h;g in c?(h=b.edge(d),b.delEdge(d),h.reversed=!0,++e,b.addEdge(d,g,a,h)):f(g)}),delete c[a]}var c={},d={},e=0;b.eachNode(function(a){f(a)}),a.debugLevel>=2&&console.log("Acyclic Phase: reversed "+e+" edge(s)")}var a={debugLevel:0},b=o(),c={};return c.debugLevel=p(c,a,"debugLevel",function(a){b.enabled(a)}),c.run=b.wrap("Acyclic Phase",d),c.undo=function(a){a.eachEdge(function(b,c,d,e){e.reversed&&(delete e.reversed,a.delEdge(b),a.addEdge(b,d,c,e))})},c},dagre.layout.rank=function(){function d(a){f(a),k(a).forEach(function(b){var c=a.subgraph(b);g(c),h(c)})}function f(a){var b={},c=q();a.eachNode(function(d){c.add(d,a.inEdges(d).length),b[d]=0});while(c.size()>0){var d=c.min();if(c.priority(d)>0)throw new Error("Input graph is not acyclic: "+a.toString());c.removeMin();var e=b[d];a.node(d).rank=e,a.outEdges(d).forEach(function(d){var f=a.target(d);b[f]=Math.max(b[f],e+(a.edge(d).minLen||1)),c.decrease(f,c.priority(f)-1)})}}function g(a){function e(f,g){d[f]=!0,a.node(f).rank=g,c[f].forEach(function(c){if(!(c in d)){var h=b[i(f,c)];e(c,g+(a.edges(f,c).length?h:-h))}})}var b={};a.eachEdge(function(a,c,d,e){var f=i(c,d);b[f]=Math.max(b[f]||1,e.minLen||1)});var c=dagre.util.prim(a,function(c,d){return Math.abs(a.node(c).rank-a.node(d).rank)-b[i(c,d)]}),d={};return e(a.nodes()[0],0),c}function h(a){var b=e(a.nodes().map(function(b){return a.node(b).rank}));a.eachNode(function(a,c){c.rank-=b})}function i(a,b){return a<b?a.length+":"+a+"-"+b:b.length+":"+b+"-"+a}var a={debugLevel:0},b=o(),c={};return c.debugLevel=p(c,a,"debugLevel",function(a){b.enabled(a)}),c.run=b.wrap("Rank Phase",d),c},dagre.layout.order=function(){function f(c){var d=g(c),e=m(d),f=a(c,d);b.debugLevel>=2&&console.log("Order phase start cross count: "+f);var h,i,k;for(i=0,k=0;k<4&&i<b.iterations;++i,++k)h=j(c,i,d),h<f&&(e=m(d),f=h,k=0),b.debugLevel>=3&&console.log("Order phase iter "+i+" cross count: "+f);return e.forEach(function(a){a.forEach(function(a,b){c.node(a).order=b})}),b.debugLevel>=2&&(console.log("Order iterations: "+i),console.log("Order phase best cross count: "+f)),e}function g(a){var b=[];return a.eachNode(function(a,c){var d=b[c.rank]||(b[c.rank]=[]);d.push(a)}),b}function h(a){return function(b){var c=[];return a.inEdges(b).forEach(function(b){c.push(a.source(b))}),c}}function i(a){return function(b){var c=[];return a.outEdges(b).forEach(function(b){c.push(a.target(b))}),c}}function j(b,c,d){if(c%2===0)for(var e=1;e<d.length;++e)k(d[e-1],d[e],h(b));else for(var e=d.length-2;e>=0;--e)k(d[e+1],d[e],i(b));return a(b,d)}function k(a,b,d){var e=c(b),f=l(a,b,d),g=b.slice(0).sort(function(a,b){return f[a]-f[b]||e[a]-e[b]});for(var h=b.length-1;h>=0;--h)f[b[h]]!==-1&&(b[h]=g.pop())}function l(a,b,d){var e=c(a),f={};return b.forEach(function(a){var b=-1,c=d(a);c.length>0&&(b=0,c.forEach(function(a){b+=e[a]}),b/=c.length),f[a]=b}),f}function m(a){return a.map(function(a){return a.slice(0)})}var b={iterations:24,debugLevel:0},d=o(),e={};return e.iterations=p(e,b,"iterations"),e.debugLevel=p(e,b,"debugLevel",function(a){d.enabled(a)}),e.run=d.wrap("Order Phase",f),e};var a=dagre.layout.order.crossCount=function(a,c){var d=0,e;return c.forEach(function(c){e&&(d+=b(a,e,c)),e=c}),d},b=dagre.layout.order.bilayerCrossCount=function(a,b,d){var e=c(d),f=[];b.forEach(function(b){var c=[];a.outEdges(b).forEach(function(b){c.push(e[a.target(b)])}),c.sort(function(a,b){return a-b}),f=f.concat(c)});var g=1;while(g<d.length)g<<=1;var h=2*g-1;g-=1;var i=[];for(var j=0;j<h;++j)i[j]=0;var k=0;return f.forEach(function(a){var b=a+g;++i[b];var c=0;while(b>0)b%2&&(k+=i[b+1]),b=b-1>>1,++i[b]}),k};dagre.layout.position=function(){function d(b){var c=[];b.eachNode(function(a,b){var d=c[b.rank]||(c[b.rank]=[]);d[b.order]=a});var d=h(b,c),g={};["u","d"].forEach(function(a){a==="d"&&c.reverse(),["l","r"].forEach(function(e){e==="r"&&r(c);var f=a+e,h=j(b,c,d,a==="u"?"predecessors":"successors");g[f]=k(b,c,h.pos,h.root,h.align),e==="r"&&q(g[f]),e==="r"&&r(c)}),a==="d"&&c.reverse()}),n(b,c,g),b.eachNode(function(a){var c=[];for(alignment in g)w(alignment,b,a,g[alignment][a]),c.push(g[alignment][a]);c.sort(function(a,b){return a-b}),v(b,a,(c[1]+c[2])/2)});var i=e(b.nodes().map(function(a){return v(b,a)-s(b,a)/2}));b.eachNode(function(a){v(b,a,v(b,a)-i)});var l=0;c.forEach(function(c){var d=f(c.map(function(a){return t(b,a)}));l+=d/2,c.forEach(function(a){x(b,a,l)}),l+=d/2+a.rankSep})}function g(a,b){return a<b?a.toString().length+":"+a+"-"+b:b.toString().length+":"+b+"-"+a}function h(a,b){var c={},d={};if(b.length<=2)return c;b[1].forEach(function(a,b){d[a]=b});for(var e=1;e<b.length-1;++e){prevLayer=b[e],currLayer=b[e+1];var f=0,h=0;for(var i=0;i<currLayer.length;++i){var j=currLayer[i];d[j]=i;var k=undefined;if(a.node(j).dummy){var l=a.predecessors(j)[0];a.node(l).dummy&&(k=d[l])}k===undefined&&i===currLayer.length-1&&(k=prevLayer.length-1);if(k!==undefined){for(;h<=i;++h)a.predecessors(currLayer[h]).forEach(function(a){var b=d[a];if(b<f||b>k)c[g(currLayer[h],a)]=!0});f=k}}}return c}function j(a,b,c,d){var e={},f={},h={};return b.forEach(function(a){a.forEach(function(a,b){f[a]=a,h[a]=a,e[a]=b})}),b.forEach(function(b){var i=-1;b.forEach(function(b){var j=a[d](b),k;j.length>0&&(j.sort(function(a,b){return e[a]-e[b]}),mid=(j.length-1)/2,j.slice(Math.floor(mid),Math.ceil(mid)+1).forEach(function(a){h[b]===b&&!c[g(a,b)]&&i<e[a]&&(h[a]=b,h[b]=f[b]=f[a],i=e[a])}))})}),{pos:e,root:f,align:h}}function k(a,b,c,d,e){function k(b){if(!(b in j)){j[b]=0;var i=b;do{if(c[i]>0){var l=d[h[i]];k(l),f[b]===b&&(f[b]=f[l]);var m=u(a,h[i])+u(a,i);f[b]!==f[l]?g[f[l]]=Math.min(g[f[l]]||Number.POSITIVE_INFINITY,j[b]-j[l]-m):j[b]=Math.max(j[b],j[l]+m)}i=e[i]}while(i!==b)}}var f={},g={},h={},j={};return b.forEach(function(a){a.forEach(function(b,c){f[b]=b,c>0&&(h[b]=a[c-1])})}),i(d).forEach(function(a){k(a)}),b.forEach(function(a){a.forEach(function(a){j[a]=j[d[a]];var b=g[f[a]];d[a]===a&&b<Number.POSITIVE_INFINITY&&(j[a]+=b)})}),j}function l(a,b,c){return e(b.map(function(a){var b=a[0];return c[b]}))}function m(a,b,c){return f(b.map(function(a){var b=a[a.length-1];return c[b]}))}function n(a,b,c){var d={},e={},f,g={},h=Number.POSITIVE_INFINITY;for(var i in c){var j=c[i];d[i]=l(a,b,j),e[i]=m(a,b,j);var k=e[i]-d[i];k<h&&(h=k,f=i)}["u","d"].forEach(function(a){["l","r"].forEach(function(b){var c=a+b;g[c]=b==="l"?d[f]-d[c]:e[f]-e[c]})});for(var i in c)a.eachNode(function(a){c[i][a]+=g[i]})}function q(a){for(var b in a)a[b]=-a[b]}function r(a){a.forEach(function(a){a.reverse()})}function s(b,c){switch(a.rankDir){case"LR":return b.node(c).height;default:return b.node(c).width}}function t(b,c){switch(a.rankDir){case"LR":return b.node(c).width;default:return b.node(c).height}}function u(b,c){if(a.universalSep!==null)return a.universalSep;var d=s(b,c),e=b.node(c).dummy?a.edgeSep:a.nodeSep;return(d+e)/2}function v(b,c,d){switch(a.rankDir){case"LR":if(arguments.length<3)return b.node(c).y;b.node(c).y=d;break;default:if(arguments.length<3)return b.node(c).x;b.node(c).x=d}}function w(b,c,d,e){switch(a.rankDir){case"LR":if(arguments.length<3)return c.node(d)[b];c.node(d)[b]=e;break;default:if(arguments.length<3)return c.node(d)[b];c.node(d)[b]=e}}function x(b,c,d){switch(a.rankDir){case"LR":if(arguments.length<3)return b.node(c).x;b.node(c).x=d;break;default:if(arguments.length<3)return b.node(c).y;b.node(c).y=d}}var a={nodeSep:50,edgeSep:10,universalSep:null,rankSep:30,rankDir:"TB",debugLevel:0},b=o(),c={};return c.nodeSep=p(c,a,"nodeSep"),c.edgeSep=p(c,a,"edgeSep"),c.universalSep=p(c,a,"universalSep"),c.rankSep=p(c,a,"rankSep"),c.rankDir=p(c,a,"rankDir"),c.debugLevel=p(c,a,"debugLevel",function(a){b.enabled(a)}),c.run=b.wrap("Position Phase",d),c},dagre.util={};var h=dagre.util.keys=Object.keys,k=dagre.util.components=function(a){function d(b,e){b in c||(c[b]=!0,e.push(b),a.neighbors(b).forEach(function(a){d(a,e)}))}var b=[],c={};return a.eachNode(function(a){var c=[];d(a,c),c.length>0&&b.push(c)}),b},l=dagre.util.prim=function(a,b){var c={},d={},e=q();if(a.nodes().length===0)return c;a.eachNode(function(a){e.add(a,Number.POSITIVE_INFINITY),c[a]=[]}),e.decrease(a.nodes()[0],0);var f,g=!1;while(e.size()>0){f=e.removeMin();if(f in d)c[f].push(d[f]),c[d[f]].push(f);else{if(g)throw new Error("Input graph is not connected:\n"+a.toString());g=!0}a.neighbors(f).forEach(function(a){var c=e.priority(a);if(c!==undefined){var g=b(f,a);g<c&&(d[a]=f,e.decrease(a,g))}})}return c},m=dagre.util.intersectRect=function(a,b){var c=a.x,d=a.y,e=b.x-c,f=b.y-d,g=a.width/2,h=a.height/2,i,j;return Math.abs(f)*g>Math.abs(e)*h?(f<0&&(h=-h),i=f===0?0:h*e/f,j=h):(e<0&&(g=-g),i=g,j=e===0?0:g*f/e),{x:c+i,y:d+j}},n=dagre.util.pointStr=function(a){return a.x+","+a.y},o=function(){var a={},b=!1;return a.enabled=function(c){return arguments.length?(b=c,a):b},a.wrap=function(a,c){return function(){var d=b?(new Date).getTime():null;try{return c.apply(null,arguments)}finally{d&&console.log(a+" time: "+((new Date).getTime()-d)+"ms")}}},a};dagre.dot={},dagre.dot.toGraph=function(a){function f(a,b){c.hasNode(a)||c.addNode(a,{id:a,label:a}),b&&d(b,c.node(a))}function h(a,b,e){var f=a+"-"+b,h=g[f];h||(h=g[f]=0),g[f]++;var i=e.id||f+"-"+h,j={};d(e,j),d({id:i},j),c.addEdge(i,a,b,j)}function i(a){switch(a.type){case"node":f(a.id,a.attrs);break;case"edge":var b;a.elems.forEach(function(c){i(c);switch(c.type){case"node":var d=c.id;b&&(h(b,d,a.attrs),e&&h(d,b,a.attrs)),b=d;break;default:throw new Error("Unsupported type incident on edge: "+c.type)}});break;case"attr":break;default:throw new Error("Unsupported statement type: "+a.type)}}var b=dot_parser.parse(a),c=dagre.graph(),e=b.type==="graph",g={};return b.stmts&&b.stmts.forEach(function(a){i(a)}),c},dagre.dot.toObjects=function(a){var b=dagre.dot.toGraph(a),c=b.nodes().map(function(a){return b.node(a)}),d=b.edges().map(function(a){var c=b.edge(a);return c.source=b.node(b.source(a)),c.target=b.node(b.target(a)),c});return{nodes:c,edges:d}},dot_parser=function(){function a(a){return'"'+a.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E-\x1F\x80-\uFFFF]/g,escape)+'"'}var b={parse:function(b,c){function i(a,b,c){var d=a,e=c-a.length;for(var f=0;f<e;f++)d=b+d;return d}function j(a){var b=a.charCodeAt(0),c,d;return b<=255?(c="x",d=2):(c="u",d=4),"\\"+c+i(b.toString(16).toUpperCase(),"0",d)}function k(a){if(e<g)return;e>g&&(g=e,h=[]),h.push(a)}function l(){var a,c,d,g,h,i,j,l,n,o,p,q,r,s,t,u;s=e,t=e,a=[],c=M();while(c!==null)a.push(c),c=M();if(a!==null){u=e,c=I(),c!==null?(d=M(),d!==null?c=[c,d]:(c=null,e=u)):(c=null,e=u),c=c!==null?c:"";if(c!==null){d=J();if(d!==null){g=[],h=M();while(h!==null)g.push(h),h=M();if(g!==null){h=C(),h=h!==null?h:"";if(h!==null){i=[],j=M();while(j!==null)i.push(j),j=M();if(i!==null){b.charCodeAt(e)===123?(j="{",e++):(j=null,f===0&&k('"{"'));if(j!==null){l=[],n=M();while(n!==null)l.push(n),n=M();if(l!==null){n=m(),n=n!==null?n:"";if(n!==null){o=[],p=M();while(p!==null)o.push(p),p=M();if(o!==null){b.charCodeAt(e)===125?(p="}",e++):(p=null,f===0&&k('"}"'));if(p!==null){q=[],r=M();while(r!==null)q.push(r),r=M();q!==null?a=[a,c,d,g,h,i,j,l,n,o,p,q]:(a=null,e=t)}else a=null,e=t}else a=null,e=t}else a=null,e=t}else a=null,e=t}else a=null,e=t}else a=null,e=t}else a=null,e=t}else a=null,e=t}else a=null,e=t}else a=null,e=t}else a=null,e=t;return a!==null&&(a=function(a,b,c,d){return{type:b,id:c,stmts:d}}(s,a[2],a[4],a[8])),a===null&&(e=s),a}function m(){var a,c,d,g,h,i,j,l,m,o,p;m=e,o=e,a=n();if(a!==null){c=[],d=M();while(d!==null)c.push(d),d=M();if(c!==null){b.charCodeAt(e)===59?(d=";",e++):(d=null,f===0&&k('";"')),d=d!==null?d:"";if(d!==null){g=[],p=e,h=[],i=M();while(i!==null)h.push(i),i=M();if(h!==null){i=n();if(i!==null){j=[],l=M();while(l!==null)j.push(l),l=M();j!==null?(b.charCodeAt(e)===59?(l=";",e++):(l=null,f===0&&k('";"')),l=l!==null?l:"",l!==null?h=[h,i,j,l]:(h=null,e=p)):(h=null,e=p)}else h=null,e=p}else h=null,e=p;while(h!==null){g.push(h),p=e,h=[],i=M();while(i!==null)h.push(i),i=M();if(h!==null){i=n();if(i!==null){j=[],l=M();while(l!==null)j.push(l),l=M();j!==null?(b.charCodeAt(e)===59?(l=";",e++):(l=null,f===0&&k('";"')),l=l!==null?l:"",l!==null?h=[h,i,j,l]:(h=null,e=p)):(h=null,e=p)}else h=null,e=p}else h=null,e=p}g!==null?a=[a,c,d,g]:(a=null,e=o)}else a=null,e=o}else a=null,e=o}else a=null,e=o;return a!==null&&(a=function(a,b,c){var d=[b];for(var e=0;e<c.length;++e)d.push(c[e][1]);return d}(m,a[0],a[3])),a===null&&(e=m),a}function n(){var a;return a=o(),a===null&&(a=s(),a===null&&(a=p(),a===null&&(a=r(),a===null&&(a=q())))),a}function o(){var a,b,c,d,f;d=e,f=e,a=F(),a===null&&(a=D(),a===null&&(a=E()));if(a!==null){b=[],c=M();while(c!==null)b.push(c),c=M();b!==null?(c=t(),c!==null?a=[a,b,c]:(a=null,e=f)):(a=null,e=f)}else a=null,e=f;return a!==null&&(a=function(a,b,c){return{type:"attr",attrType:b,attrs:c||{}}}(d,a[0],a[2])),a===null&&(e=d),a}function p(){var a,c,d,g,h,i,j;i=e,j=e,a=C();if(a!==null){c=[],d=M();while(d!==null)c.push(d),d=M();if(c!==null){b.charCodeAt(e)===61?(d="=",e++):(d=null,f===0&&k('"="'));if(d!==null){g=[],h=M();while(h!==null)g.push(h),h=M();g!==null?(h=C(),h!==null?a=[a,c,d,g,h]:(a=null,e=j)):(a=null,e=j)}else a=null,e=j}else a=null,e=j}else a=null,e=j;return a!==null&&(a=function(a,b,c){var d={};return d[b]=c,{type:"inlineAttr",attrs:d}}(i,a[0],a[4])),a===null&&(e=i),a}function q(){var a,b,c,d,f;d=e,f=e,a=z();if(a!==null){b=[],c=M();while(c!==null)b.push(c),c=M();b!==null?(c=t(),c=c!==null?c:"",c!==null?a=[a,b,c]:(a=null,e=f)):(a=null,e=f)}else a=null,e=f;return a!==null&&(a=function(a,b,c){return{type:"node",id:b,attrs:c||{}}}(d,a[0],a[2])),a===null&&(e=d),a}function r(){var a,b,c,d,f,g,h;g=e,h=e,a=y();if(a!==null){b=[],c=M();while(c!==null)b.push(c),c=M();if(b!==null){c=w();if(c!==null){d=[],f=M();while(f!==null)d.push(f),f=M();d!==null?(f=t(),f=f!==null?f:"",f!==null?a=[a,b,c,d,f]:(a=null,e=h)):(a=null,e=h)}else a=null,e=h}else a=null,e=h}else a=null,e=h;return a!==null&&(a=function(a,b,c,d){var e=[b];for(var f=0;f<c.length;++f)e.push(c[f]);return{type:"edge",elems:e,attrs:d||{}}}(g,a[0],a[2],a[4])),a===null&&(e=g),a}function s(){var a,c,d,g,h,i,j,l,n,o;j=e,l=e,n=e,a=H();if(a!==null){c=[],d=M();while(d!==null)c.push(d),d=M();if(c!==null){o=e,d=C();if(d!==null){g=[],h=M();while(h!==null)g.push(h),h=M();g!==null?d=[d,g]:(d=null,e=o)}else d=null,e=o;d=d!==null?d:"",d!==null?a=[a,c,d]:(a=null,e=n)}else a=null,e=n}else a=null,e=n;a=a!==null?a:"";if(a!==null){b.charCodeAt(e)===123?(c="{",e++):(c=null,f===0&&k('"{"'));if(c!==null){d=[],g=M();while(g!==null)d.push(g),g=M();if(d!==null){g=m();if(g!==null){h=[],i=M();while(i!==null)h.push(i),i=M();h!==null?(b.charCodeAt(e)===125?(i="}",e++):(i=null,f===0&&k('"}"')),i!==null?a=[a,c,d,g,h,i]:(a=null,e=l)):(a=null,e=l)}else a=null,e=l}else a=null,e=l}else a=null,e=l}else a=null,e=l;return a!==null&&(a=function(a,b,c){return b=b[2]||[],{type:"subgraph",id:b[0],stmts:c}}(j,a[0],a[3])),a===null&&(e=j),a}function t(){var a,b,c,d,f,g,h;f=e,g=e,a=u();if(a!==null){b=[],h=e,c=[],d=M();while(d!==null)c.push(d),d=M();c!==null?(d=u(),d!==null?c=[c,d]:(c=null,e=h)):(c=null,e=h);while(c!==null){b.push(c),h=e,c=[],d=M();while(d!==null)c.push(d),d=M();c!==null?(d=u(),d!==null?c=[c,d]:(c=null,e=h)):(c=null,e=h)}b!==null?a=[a,b]:(a=null,e=g)}else a=null,e=g;return a!==null&&(a=function(a,b,c){var d=b;for(var e=0;e<c.length;++e)d=Q(d,c[e][1]);return d}(f,a[0],a[1])),a===null&&(e=f),a}function u(){var a,c,d,g,h,i,j;i=e,j=e,b.charCodeAt(e)===91?(a="[",e++):(a=null,f===0&&k('"["'));if(a!==null){c=[],d=M();while(d!==null)c.push(d),d=M();if(c!==null){d=v(),d=d!==null?d:"";if(d!==null){g=[],h=M();while(h!==null)g.push(h),h=M();g!==null?(b.charCodeAt(e)===93?(h="]",e++):(h=null,f===0&&k('"]"')),h!==null?a=[a,c,d,g,h]:(a=null,e=j)):(a=null,e=j)}else a=null,e=j}else a=null,e=j}else a=null,e=j;return a!==null&&(a=function(a,b){return b}(i,a[2])),a===null&&(e=i),a}function v(){var a,c,d,g,h,i,j,l,m;j=e,l=e,a=x();if(a!==null){c=[],m=e,d=[],g=M();while(g!==null)d.push(g),g=M();if(d!==null){b.charCodeAt(e)===44?(g=",",e++):(g=null,f===0&&k('","')),g=g!==null?g:"";if(g!==null){h=[],i=M();while(i!==null)h.push(i),i=M();h!==null?(i=x(),i!==null?d=[d,g,h,i]:(d=null,e=m)):(d=null,e=m)}else d=null,e=m}else d=null,e=m;while(d!==null){c.push(d),m=e,d=[],g=M();while(g!==null)d.push(g),g=M();if(d!==null){b.charCodeAt(e)===44?(g=",",e++):(g=null,f===0&&k('","')),g=g!==null?g:"";if(g!==null){h=[],i=M();while(i!==null)h.push(i),i=M();h!==null?(i=x(),i!==null?d=[d,g,h,i]:(d=null,e=m)):(d=null,e=m)}else d=null,e=m}else d=null,e=m}c!==null?a=[a,c]:(a=null,e=l)}else a=null,e=l;return a!==null&&(a=function(a,b,c){var d=b;for(var e=0;e<c.length;++e)d=Q(d,c[e][3]);return d}(j,a[0],a[1])),a===null&&(e=j),a}function w(){var a,c,d,g,h,i,j,l;i=e,j=e,l=e,b.substr(e,2)==="--"?(a="--",e+=2):(a=null,f===0&&k('"--"')),a!==null?(c=function(a){return P}(e)?null:"",c!==null?a=[a,c]:(a=null,e=l)):(a=null,e=l),a===null&&(l=e,b.substr(e,2)==="->"?(a="->",e+=2):(a=null,f===0&&k('"->"')),a!==null?(c=function(a){return P}(e)?"":null,c!==null?a=[a,c]:(a=null,e=l)):(a=null,e=l));if(a!==null){c=[],d=M();while(d!==null)c.push(d),d=M();if(c!==null){d=y();if(d!==null){g=[],h=M();while(h!==null)g.push(h),h=M();g!==null?(h=w(),h=h!==null?h:"",h!==null?a=[a,c,d,g,h]:(a=null,e=j)):(a=null,e=j)}else a=null,e=j}else a=null,e=j}else a=null,e=j;return a!==null&&(a=function(a,b,c){var d=[b];for(var e=0;e<c.length;++e)d.push(c[e]);return d}(i,a[2],a[4])),a===null&&(e=i),a}function x(){var a,c,d,g,h,i,j,l;i=e,j=e,a=C();if(a!==null){l=e,c=[],d=M();while(d!==null)c.push(d),d=M();if(c!==null){b.charCodeAt(e)===61?(d="=",e++):(d=null,f===0&&k('"="'));if(d!==null){g=[],h=M();while(h!==null)g.push(h),h=M();g!==null?(h=C(),h!==null?c=[c,d,g,h]:(c=null,e=l)):(c=null,e=l)}else c=null,e=l}else c=null,e=l;c=c!==null?c:"",c!==null?a=[a,c]:(a=null,e=j)}else a=null,e=j;return a!==null&&(a=function(a,b,c){var d={};return d[b]=c[3],d}(i,a[0],a[1])),a===null&&(e=i),a}function y(){var a,b;return a=s(),a===null&&(b=e,a=z(),a!==null&&(a=function(a,b){return{type:"node",id:b,attrs:{}}}(b,a)),a===null&&(e=b)),a}function z(){var a,b,c,d,f;d=e,f=e,a=C();if(a!==null){b=[],c=M();while(c!==null)b.push(c),c=M();b!==null?(c=A(),c=c!==null?c:"",c!==null?a=[a,b,c]:(a=null,e=f)):(a=null,e=f)}else a=null,e=f;return a!==null&&(a=function(a,b){return b}(d,a[0])),a===null&&(e=d),a}function A(){var a,c,d,g,h,i,j,l,m;l=e,b.charCodeAt(e)===58?(a=":",e++):(a=null,f===0&&k('":"'));if(a!==null){c=[],d=M();while(d!==null)c.push(d),d=M();if(c!==null){d=C();if(d!==null){g=[],h=M();while(h!==null)g.push(h),h=M();if(g!==null){m=e,b.charCodeAt(e)===58?(h=":",e++):(h=null,f===0&&k('":"'));if(h!==null){i=[],j=M();while(j!==null)i.push(j),j=M();i!==null?(j=B(),j!==null?h=[h,i,j]:(h=null,e=m)):(h=null,e=m)}else h=null,e=m;h=h!==null?h:"",h!==null?a=[a,c,d,g,h]:(a=null,e=l)}else a=null,e=l}else a=null,e=l}else a=null,e=l}else a=null,e=l;return a}function B(){var a;return b.charCodeAt(e)===110?(a="n",e++):(a=null,f===0&&k('"n"')),a===null&&(b.substr(e,2)==="ne"?(a="ne",e+=2):(a=null,f===0&&k('"ne"')),a===null&&(b.charCodeAt(e)===101?(a="e",e++):(a=null,f===0&&k('"e"')),a===null&&(b.substr(e,2)==="se"?(a="se",e+=2):(a=null,f===0&&k('"se"')),a===null&&(b.charCodeAt(e)===115?(a="s",e++):(a=null,f===0&&k('"s"')),a===null&&(b.substr(e,2)==="sw"?(a="sw",e+=2):(a=null,f===0&&k('"sw"')),a===null&&(b.charCodeAt(e)===119?(a="w",e++):(a=null,f===0&&k('"w"')),a===null&&(b.substr(e,2)==="nw"?(a="nw",e+=2):(a=null,f===0&&k('"nw"')),a===null&&(b.charCodeAt(e)===99?(a="c",e++):(a=null,f===0&&k('"c"')),a===null&&(b.charCodeAt(e)===95?(a="_",e++):(a=null,f===0&&k('"_"'))))))))))),a}function C(){var a,c,d,g,h,i,j,l,m;f++,i=e,j=e,/^[a-zA-Z\u0200-\u0377_]/.test(b.charAt(e))?(a=b.charAt(e),e++):(a=null,f===0&&k("[a-zA-Z\\u0200-\\u0377_]"));if(a!==null){c=[],/^[a-zA-Z\u0200-\u0377_0-9]/.test(b.charAt(e))?(d=b.charAt(e),e++):(d=null,f===0&&k("[a-zA-Z\\u0200-\\u0377_0-9]"));while(d!==null)c.push(d),/^[a-zA-Z\u0200-\u0377_0-9]/.test(b.charAt(e))?(d=b.charAt(e),e++):(d=null,f===0&&k("[a-zA-Z\\u0200-\\u0377_0-9]"));c!==null?a=[a,c]:(a=null,e=j)}else a=null,e=j;a!==null&&(a=function(a,b,c){return b+c.join("")}(i,a[0],a[1])),a===null&&(e=i);if(a===null){i=e,j=e,b.charCodeAt(e)===45?(a="-",e++):(a=null,f===0&&k('"-"')),a=a!==null?a:"";if(a!==null){b.charCodeAt(e)===46?(c=".",e++):(c=null,f===0&&k('"."'));if(c!==null){/^[0-9]/.test(b.charAt(e))?(g=b.charAt(e),e++):(g=null,f===0&&k("[0-9]"));if(g!==null){d=[];while(g!==null)d.push(g),/^[0-9]/.test(b.charAt(e))?(g=b.charAt(e),e++):(g=null,f===0&&k("[0-9]"))}else d=null;d!==null?a=[a,c,d]:(a=null,e=j)}else a=null,e=j}else a=null,e=j;a!==null&&(a=function(a,b,c,d){return b+c+d.join("")}(i,a[0],a[1],a[2])),a===null&&(e=i);if(a===null){i=e,j=e,b.charCodeAt(e)===45?(a="-",e++):(a=null,f===0&&k('"-"')),a=a!==null?a:"";if(a!==null){/^[0-9]/.test(b.charAt(e))?(d=b.charAt(e),e++):(d=null,f===0&&k("[0-9]"));if(d!==null){c=[];while(d!==null)c.push(d),/^[0-9]/.test(b.charAt(e))?(d=b.charAt(e),e++):(d=null,f===0&&k("[0-9]"))}else c=null;if(c!==null){l=e,b.charCodeAt(e)===46?(d=".",e++):(d=null,f===0&&k('"."'));if(d!==null){g=[],/^[0-9]/.test(b.charAt(e))?(h=b.charAt(e),e++):(h=null,f===0&&k("[0-9]"));while(h!==null)g.push(h),/^[0-9]/.test(b.charAt(e))?(h=b.charAt(e),e++):(h=null,f===0&&k("[0-9]"));g!==null?d=[d,g]:(d=null,e=l)}else d=null,e=l;d=d!==null?d:"",d!==null?a=[a,c,d]:(a=null,e=j)}else a=null,e=j}else a=null,e=j;a!==null&&(a=function(a,b,c,d){return b+c.join("")+(d[0]||"")+(d[1]||[]).join("")}(i,a[0],a[1],a[2])),a===null&&(e=i);if(a===null){i=e,j=e,b.charCodeAt(e)===34?(a='"',e++):(a=null,f===0&&k('"\\""'));if(a!==null){c=[],l=e,b.substr(e,2)==='\\"'?(d='\\"',e+=2):(d=null,f===0&&k('"\\\\\\""')),d!==null&&(d=function(a){return'"'}(l)),d===null&&(e=l),d===null&&(l=e,m=e,b.charCodeAt(e)===92?(d="\\",e++):(d=null,f===0&&k('"\\\\"')),d!==null?(/^[^"]/.test(b.charAt(e))?(g=b.charAt(e),e++):(g=null,f===0&&k('[^"]')),g!==null?d=[d,g]:(d=null,e=m)):(d=null,e=m),d!==null&&(d=function(a,b){return"\\"+b}(l,d[1])),d===null&&(e=l),d===null&&(/^[^"]/.test(b.charAt(e))?(d=b.charAt(e),e++):(d=null,f===0&&k('[^"]'))));while(d!==null)c.push(d),l=e,b.substr(e,2)==='\\"'?(d='\\"',e+=2):(d=null,f===0&&k('"\\\\\\""')),d!==null&&(d=function(a){return'"'}(l)),d===null&&(e=l),d===null&&(l=e,m=e,b.charCodeAt(e)===92?(d="\\",e++):(d=null,f===0&&k('"\\\\"')),d!==null?(/^[^"]/.test(b.charAt(e))?(g=b.charAt(e),e++):(g=null,f===0&&k('[^"]')),g!==null?d=[d,g]:(d=null,e=m)):(d=null,e=m),d!==null&&(d=function(a,b){return"\\"+b}(l,d[1])),d===null&&(e=l),d===null&&(/^[^"]/.test(b.charAt(e))?(d=b.charAt(e),e++):(d=null,f===0&&k('[^"]'))));c!==null?(b.charCodeAt(e)===34?(d='"',e++):(d=null,f===0&&k('"\\""')),d!==null?a=[a,c,d]:(a=null,e=j)):(a=null,e=j)}else a=null,e=j;a!==null&&(a=function(a,b){return b.join("")}(i,a[1])),a===null&&(e=i)}}}return f--,f===0&&a===null&&k("identifier"),a}function D(){var a,c;return c=e,b.substr(e,4).toLowerCase()==="node"?(a=b.substr(e,4),e+=4):(a=null,f===0&&k('"node"')),a!==null&&(a=function(a,b){return b.toLowerCase()}(c,a)),a===null&&(e=c),a}function E(){var a,c;return c=e,b.substr(e,4).toLowerCase()==="edge"?(a=b.substr(e,4),e+=4):(a=null,f===0&&k('"edge"')),a!==null&&(a=function(a,b){return b.toLowerCase()}(c,a)),a===null&&(e=c),a}function F(){var a,c;return c=e,b.substr(e,5).toLowerCase()==="graph"?(a=b.substr(e,5),e+=5):(a=null,f===0&&k('"graph"')),a!==null&&(a=function(a,b){return b.toLowerCase()}(c,a)),a===null&&(e=c),a}function G(){var a,c;return c=e,b.substr(e,7).toLowerCase()==="digraph"?(a=b.substr(e,7),e+=7):(a=null,f===0&&k('"digraph"')),a!==null&&(a=function(a,b){return b.toLowerCase()}(c,a)),a===null&&(e=c),a}function H(){var a,c;return c=e,b.substr(e,8).toLowerCase()==="subgraph"?(a=b.substr(e,8),e+=8):(a=null,f===0&&k('"subgraph"')),a!==null&&(a=function(a,b){return b.toLowerCase()}(c,a)),a===null&&(e=c),a}function I(){var a,c;return c=e,b.substr(e,6).toLowerCase()==="strict"?(a=b.substr(e,6),e+=6):(a=null,f===0&&k('"strict"')),a!==null&&(a=function(a,b){return b.toLowerCase()}(c,a)),a===null&&(e=c),a}function J(){var a,b;return a=F(),a===null&&(b=e,a=G(),a!==null&&(a=function(a,b){return P=b==="digraph",b}(b,a)),a===null&&(e=b)),a}function K(){var a,c;f++,/^[ \t\r\n]/.test(b.charAt(e))?(c=b.charAt(e),e++):(c=null,f===0&&k("[ \\t\\r\\n]"));if(c!==null){a=[];while(c!==null)a.push(c),/^[ \t\r\n]/.test(b.charAt(e))?(c=b.charAt(e),e++):(c=null,f===0&&k("[ \\t\\r\\n]"))}else a=null;return f--,f===0&&a===null&&k("whitespace"),a}function L(){var a,c,d,g,h,i,j;f++,h=e,b.substr(e,2)==="//"?(a="//",e+=2):(a=null,f===0&&k('"//"'));if(a!==null){c=[],/^[^\n]/.test(b.charAt(e))?(d=b.charAt(e),e++):(d=null,f===0&&k("[^\\n]"));while(d!==null)c.push(d),/^[^\n]/.test(b.charAt(e))?(d=b.charAt(e),e++):(d=null,f===0&&k("[^\\n]"));c!==null?a=[a,c]:(a=null,e=h)}else a=null,e=h;if(a===null){h=e,b.substr(e,2)==="/*"?(a="/*",e+=2):(a=null,f===0&&k('"/*"'));if(a!==null){c=[],i=e,j=e,f++,b.substr(e,2)==="*/"?(d="*/",e+=2):(d=null,f===0&&k('"*/"')),f--,d===null?d="":(d=null
-,e=j),d!==null?(b.length>e?(g=b.charAt(e),e++):(g=null,f===0&&k("any character")),g!==null?d=[d,g]:(d=null,e=i)):(d=null,e=i);while(d!==null)c.push(d),i=e,j=e,f++,b.substr(e,2)==="*/"?(d="*/",e+=2):(d=null,f===0&&k('"*/"')),f--,d===null?d="":(d=null,e=j),d!==null?(b.length>e?(g=b.charAt(e),e++):(g=null,f===0&&k("any character")),g!==null?d=[d,g]:(d=null,e=i)):(d=null,e=i);c!==null?(b.substr(e,2)==="*/"?(d="*/",e+=2):(d=null,f===0&&k('"*/"')),d!==null?a=[a,c,d]:(a=null,e=h)):(a=null,e=h)}else a=null,e=h}return f--,f===0&&a===null&&k("comment"),a}function M(){var a;return a=K(),a===null&&(a=L()),a}function N(a){a.sort();var b=null,c=[];for(var d=0;d<a.length;d++)a[d]!==b&&(c.push(a[d]),b=a[d]);return c}function O(){var a=1,c=1,d=!1;for(var f=0;f<Math.max(e,g);f++){var h=b.charAt(f);h==="\n"?(d||a++,c=1,d=!1):h==="\r"||h==="\u2028"||h==="\u2029"?(a++,c=1,d=!0):(c++,d=!1)}return{line:a,column:c}}function Q(a,b){var c={};for(var d in a)c[d]=a[d];for(var d in b)c[d]=b[d];return c}var d={start:l,stmtList:m,stmt:n,attrStmt:o,inlineAttrStmt:p,nodeStmt:q,edgeStmt:r,subgraphStmt:s,attrList:t,attrListBlock:u,aList:v,edgeRHS:w,idDef:x,nodeIdOrSubgraph:y,nodeId:z,port:A,compassPt:B,id:C,node:D,edge:E,graph:F,digraph:G,subgraph:H,strict:I,graphType:J,whitespace:K,comment:L,_:M};if(c!==undefined){if(d[c]===undefined)throw new Error("Invalid rule name: "+a(c)+".")}else c="start";var e=0,f=0,g=0,h=[],P,R=d[c]();if(R===null||e!==b.length){var S=Math.max(e,g),T=S<b.length?b.charAt(S):null,U=O();throw new this.SyntaxError(N(h),T,S,U.line,U.column)}return R},toSource:function(){return this._source}};return b.SyntaxError=function(b,c,d,e,f){function g(b,c){var d,e;switch(b.length){case 0:d="end of input";break;case 1:d=b[0];break;default:d=b.slice(0,b.length-1).join(", ")+" or "+b[b.length-1]}return e=c?a(c):"end of input","Expected "+d+" but "+e+" found."}this.name="SyntaxError",this.expected=b,this.found=c,this.message=g(b,c),this.offset=d,this.line=e,this.column=f},b.SyntaxError.prototype=Error.prototype,b}()})();
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/google-code-prettify/prettify.css b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/google-code-prettify/prettify.css
deleted file mode 100644
index aedd8d1a915..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/google-code-prettify/prettify.css
+++ /dev/null
@@ -1,30 +0,0 @@
-.com { color: #93a1a1; }
-.lit { color: #195f91; }
-.pun, .opn, .clo { color: #93a1a1; }
-.fun { color: #dc322f; }
-.str, .atv { color: #D14; }
-.kwd, .linenums .tag { color: #1e347b; }
-.typ, .atn, .dec, .var { color: teal; }
-.pln { color: #48484c; }
-
-.prettyprint {
-  padding: 8px;
-  background-color: #f7f7f9;
-  border: 1px solid #e1e1e8;
-}
-.prettyprint.linenums {
-  -webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
-     -moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
-          box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
-}
-
-/* Specify class=linenums on a pre to get line numbering */
-ol.linenums {
-  margin: 0 0 0 33px; /* IE indents via margin-left */
-} 
-ol.linenums li {
-  padding-left: 12px;
-  color: #bebec5;
-  line-height: 18px;
-  text-shadow: 0 1px 0 #fff;
-}
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/google-code-prettify/prettify.js b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/google-code-prettify/prettify.js
deleted file mode 100644
index eef5ad7e6a0..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/assets/js/google-code-prettify/prettify.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
-(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a=
-[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c<
-f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&&
-(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r=
-{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length,
-t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===
-"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),
-l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
-q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/,
-q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g,
-"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a),
-a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}
-for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value",
-m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m=
-a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue=
-j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
-"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
-H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
-J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+
-I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
-["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
-/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
-["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
-hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b=
-!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,
-250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",
-PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/index.html b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/index.html
deleted file mode 100644
index 1d4dbb27a8e..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/index.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>Sample Graph</title>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <meta name="description" content="Displays NGS sample graphs">
-    <meta name="author" content="ETH | CISD">
-    
-    <!-- openBIS -->
-    <link href="assets/css/openbis.css" rel="stylesheet">
-    <script src="/openbis/resources/js/jquery.js"></script>
-    <script src="/openbis/resources/js/openbis.js"></script>
-    <script src="/openbis/resources/js/openbis-login.js"></script>
-    <script src="assets/js/d3/d3.js"></script>
-    <script src="assets/js/dagre/dagre.js"></script>
-    <script src="webapp.js"></script>
-    <script type="text/javascript">
-        // If this is being shown, we are logged in, so just enter the app.
-	    $(document).ready(function() {
-            enterApp();
-		});
-    </script>
-
-    <!-- Le styles -->
-    <link href="assets/css/bootstrap.css" rel="stylesheet">
-    <style>
-      body {
-        padding-top: 60px; /* 60px to make the container go all the way to the bottom of the topbar */
-      }
-    </style>
-    <link href="assets/css/bootstrap-responsive.css" rel="stylesheet">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le fav and touch icons -->
-    <link rel="shortcut icon" href="assets/ico/favicon.ico">
-    <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.png">
-    <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/ico/apple-touch-icon-114-precomposed.png">
-    <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/ico/apple-touch-icon-72-precomposed.png">
-    <link rel="apple-touch-icon-precomposed" href="assets/ico/apple-touch-icon-57-precomposed.png">
-  </head>
-
-  <body>
-	<div id="main">
-	    <div class="navbar navbar-fixed-top">
-	      <div class="navbar-inner">
-	        <div class="container-fluid">
-	          <a class="brand">Sample Graph</a>
-		      <ul class="nav">
-		        <li class="active"><a id="bottom-up">Bottom Up</a></li>
-		        <li><a id="top-down">Top Down</a></li>
-		      </ul>
-              <ul class="nav">
-                <li class="active"><a id="with-colors">Colors</a></li>
-                <li><a id="no-colors">B&amp;W</a></li>
-              </ul>
-              <ul class="nav">
-                <li class="active"><a id="space-saving">Space Saving</a></li>
-                <li><a id="space-filling">Space Filling</a></li>
-              </ul>
-	        </div>
-	      </div>
-	    </div>
-	
-	    <div class="container-fluid">
-            <h1 id="root-label"></h1>
-	    </div> <!-- /container -->
-	</div> <!-- /main -->
-    <div id="root" style="padding-left: 25px"></div>
-
-    <!-- Le javascript
-    ================================================== -->
-    <!-- Placed at the end of the document so the pages load faster -->
-    <script src="assets/js/bootstrap-transition.js"></script>
-    <script src="assets/js/bootstrap-alert.js"></script>
-    <script src="assets/js/bootstrap-modal.js"></script>
-    <script src="assets/js/bootstrap-dropdown.js"></script>
-    <script src="assets/js/bootstrap-scrollspy.js"></script>
-    <script src="assets/js/bootstrap-tab.js"></script>
-    <script src="assets/js/bootstrap-tooltip.js"></script>
-    <script src="assets/js/bootstrap-popover.js"></script>
-    <script src="assets/js/bootstrap-button.js"></script>
-    <script src="assets/js/bootstrap-collapse.js"></script>
-    <script src="assets/js/bootstrap-carousel.js"></script>
-    <script src="assets/js/bootstrap-typeahead.js"></script>
-
-  </body>
-</html>
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/webapp.js b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/webapp.js
deleted file mode 100644
index f70bf771b60..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/html/webapp.js
+++ /dev/null
@@ -1,1064 +0,0 @@
-/**
- * Sample-Relationship Bottom Up Webapp
- *
- * This webapp draws a graph emanating from a flowcell and terminating at the biological sample.
- *
- * Because the structure is rigid, it draws each sample type in its own column.
- */
-
-//
-// BEGIN CONFIGURATION PARAMTERS
-// 
-// The following parameters must be configured for the webapp
-
-var FLOWCELL_SAMPLE_TYPE = "FLOWCELL";
-var FLOWLANE_SAMPLE_TYPE = "FLOWLANE";
-
-// The view is organized in columns that correspond to a sample type. The columns are defined here.
-// The order of the sample types here matches the bottom-up order of the sample types.
-var COLUMNS = [
-	{ type : FLOWCELL_SAMPLE_TYPE, label : "Flowcell", width : 200 },
-	{ type : FLOWLANE_SAMPLE_TYPE, label : "Flowlane", width : 200 },
-	{ type : "MULTIPLEX", label : "Multiplex", width : 300 },
-	{ type : "LIBRARY", label : "Library", width : 240 },
-	{ type : "ALIQUOT", label : "Aliquot", width : 400 },
-	{ type : "SAMPLE", label : "Sample", width : 400 }
-];
-
-// The height of each line in the display
-var LINE_HEIGHT = 20;
-
-// The first N columns are shown expanded when the webapp is started. The next are initially collapsed.
-// N probably should not be less than 2 and certainly should not be less than 1.
-var FIRST_COLLAPSED_COLUMN = 2;
-
-// The colors used for the different samples. The colors are used when one sample has multiple parents or children to disambiguate.
-var sampleColors = d3.scale.category10();
-//var sampleColors = d3.scale.ordinal().range(['#999']);
-
-// The color used when the connection between two samples is unambiguous
-var oneToOneColor = "#999"
-
-// END CONFIGURATION PARAMTERS
-
-/// The openbisServer we use for our data
-var webappContext = new openbisWebAppContext();
-
-// openbisServer is global -- index.html needs to refer to it.
-openbisServer = new openbis('/openbis/openbis', '/datastore_server');
-openbisServer.useSession(webappContext.getSessionId());
-
-function parseJson(jsonString) { return eval('(' + jsonString + ')'); }
-
-function flowcellIdFromFlowlaneId(flowlaneId) { return flowlaneId.split(":")[0]; }
-
-/**
- * The node stores the information necessary for presenting the sample data in the graph.
- */
-function SampleGraphNode(sample) {
-	this.identifier = sample.identifier;
-	this.properties = sample.properties;
-	this.permId = sample.permId;
-	this.nodeId = sample["@id"];
-	this.sampleType = sample.sampleTypeCode;
-	this.children = [];
-	this.parents = [];
-	this.serverSample = sample;
-	this.arrayIndex = -1;
-}
-
-SampleGraphNode.prototype.toString = function() {
-	return "[" + this.sampleType + ", " + this.identifier + ", " + this.permId + "]";
-};
-
-/**
- * The link stores the information necessary for drawing connections between nodes
- */
-function SampleGraphEdge(source, target) {
-	this.source = source;
-	this.target = target;
-}
-
-/** Break an identifier into a code and space */
-function codeAndSpaceFromIdentifier(identifier) {
-	var identifierTokens = identifier.split("/");
-	var space, code;
-	if (identifierTokens.length > 2) {
-		space = identifierTokens[1];
-		code = identifierTokens[2];
-	} else {
-		space = null;
-		code = identifierTokens[1];
-	}
-	return {space : space, code : code};
-}
-
-
-/**
- * The model that manages state and implements the operations for the sample graph.
- */
-function SampleGraphModel() {
-	this.initializeModel();
-}
-
-SampleGraphModel.prototype.initializeModel = function() {
-	this.sampleIdentifier = webappContext.getEntityIdentifier();
-	var codeAndSpace = codeAndSpaceFromIdentifier(this.sampleIdentifier);
-	this.sampleSpace = codeAndSpace.space;
-	this.sampleCode = codeAndSpace.code;
-	this.samplePermId = webappContext.getEntityPermId();
-	this.sampleType = webappContext.getEntityType();
-	var samplesByType = {};
-	COLUMNS.forEach(function(column) { samplesByType[column.type] = [] });
-	this.samplesByType = samplesByType;
-	this.flowcellsByIdentifier = {};
-}
-
-/**
- * Request the data necessary to display the graph.
- */
-SampleGraphModel.prototype.requestGraphData = function(callback)
-{
-	var matchClauses = [ {"@type" : "AttributeMatchClause",
-		fieldType : "ATTRIBUTE",
-		attribute : "CODE",
-		desiredValue : (FLOWCELL_SAMPLE_TYPE == this.sampleType) ? this.sampleCode + "*" : this.sampleCode
-	}];
-
-	if (this.sampleSpace) {
-		matchClauses.push({"@type" : "AttributeMatchClause",
-			fieldType : "ATTRIBUTE",
-			attribute : "SPACE",
-			desiredValue : this.sampleSpace
-		})
-	}
-
-
-	var sampleCriteria = {
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	var lexicalParent = this;
-	function coalesceResult(data) {
-		lexicalParent.coalesceGraphData(data);
-		lexicalParent.requestFlowcellData(callback)
-	}
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], coalesceResult);
-}
-
-/**
- * In most cases, we need an additional server request to get the flowcell data. Make that call here.
- */
-SampleGraphModel.prototype.requestFlowcellData = function(callback) {
-	if (FLOWCELL_SAMPLE_TYPE == this.sampleType) {
-		callback();
-		return;
-	}
-
-	// Collect the Flowcell code and spaces
-	var flowlaneIds = [];
-	this.samplesByType[FLOWLANE_SAMPLE_TYPE].forEach(function(flowlane) {
-		var flowcellId = flowcellIdFromFlowlaneId(flowlane.identifier);
-		var codeAndSpace = codeAndSpaceFromIdentifier(flowcellId);
-		flowlaneIds.push(codeAndSpace);
-	});
-
-	var matchClauses = [];
-	flowlaneIds.forEach(function(cs) {
-		matchClauses.push({"@type" : "AttributeMatchClause",
-			fieldType : "ATTRIBUTE",
-			attribute : "CODE",
-			desiredValue : cs.code
-		})
-	})
-
-	var sampleCriteria = {
-		matchClauses : matchClauses,
-		operator : "MATCH_ANY_CLAUSES"
-	};
-
-	var lexicalParent = this;
-	function coalesceResult(data) {
-		lexicalParent.coalesceGraphData(data);
-		callback();
-	}
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES"], coalesceResult);
-
-};
-
-
-/**
- * Request the data necessary to display the graph.
- */
-SampleGraphModel.prototype.coalesceGraphData = function(data, callback) {
-	var samples = data.result;
-	var nodesById = {};
-
-	function isPureId(sample) { return null == sample["@id"]; }
-
-	function nodeForSample(sample) { return isPureId(sample) ? nodesById[sample] : nodesById[sample["@id"]]; }
-
-	var lexicalParent = this;
-	function convertSampleToNode(sample) {
-		// This is just a nodeId, it will be converted elsewhere
-		if (isPureId(sample)) return;
-		// This has already been converted
-		if (nodesById[sample.nodeId]) return;
-
-		var node = new SampleGraphNode(sample);
-		nodesById[node.nodeId] = node;
-		sampleTypeArray = lexicalParent.samplesByType[node.sampleType]
-		if (sampleTypeArray) {
-			node.arrayIndex = sampleTypeArray.length;
-			sampleTypeArray.push(node);
-		}
-		if (FLOWCELL_SAMPLE_TYPE == node.sampleType) {
-			lexicalParent.flowcellsByIdentifier[node.identifier] = node;
-		}
-
-		if (sample.parents) sample.parents.forEach(convertSampleToNode);
-		if (sample.children) sample.children.forEach(convertSampleToNode);
-	}
-
-	function resolveParents(sample) {
-		// This is just a nodeId, it will be resolved elsewhere
-		if (isPureId(sample)) return;
-		if (!sample.parents) return;
-
-		sample.parents.forEach(resolveParents);
-
-		var node = nodeForSample(sample);
-		node.parents = sample.parents.map(nodeForSample);
-		node.parents.forEach(function(p) { p.children ? p.children.push(node) : p.children = [node]});
-		node.parents.sort(function(a, b) { return a.identifier < b.identifier; });
-	}
-
-	function resolveChildren(sample) {
-		// This is just a nodeId, it will be resolved elsewhere
-		if (isPureId(sample)) return;
-		if (!sample.children) return;
-
-		sample.children.forEach(resolveChildren);
-
-		var node = nodeForSample(sample);
-		node.children = sample.children.map(nodeForSample);
-		node.children.forEach(function(p) { p.parents ? p.parents.push(node) : p.parents = [node]});
-		node.children.sort(function(a, b) { return a.identifier < b.identifier; })
-	}
-
-	samples.forEach(convertSampleToNode);
-	samples.forEach(resolveParents);
-	samples.forEach(resolveChildren);
-
-	// The parents of the flowlanes should become the parents of the flowcell and the
-	// flowcell should become the parent of the flowlanes.
-	var flowcellsByIdentifier = this.flowcellsByIdentifier;
-	this.samplesByType[FLOWLANE_SAMPLE_TYPE].forEach(function(flowlane) {
-		var flowcellId = flowcellIdFromFlowlaneId(flowlane.identifier);
-		var flowcell = flowcellsByIdentifier[flowcellId];
-		if (flowcell) {
-			flowcell.parents.push(flowlane);
-			flowlane.children.push(flowcell);
-		}
-	});
-}
-
-
-/**
- * The presenter that shows the model.
- */
-function SampleGraphPresenter(model) {
-	this.model = model;
-	this.selectedNode = null;
-	this.didCreateVis = false;
-	this.useSpaceSavingRenderer();
-	this.useBottomUpMode();
-	this.useWithColorsMode();
-	this.initializePresenter();
-}
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-SampleGraphPresenter.prototype.initializePresenter = function()
-{ 
-	if (this.didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	this.root = d3.select("#root");
-	this.rootLabel = d3.select("#root-label");
-	this.rootLabel.text(this.model.sampleIdentifier);
-	this.didCreateVis = true;
-}
-
-SampleGraphPresenter.prototype.useSpaceSavingRenderer = function() {
-	this.renderer = new SimpleGraphRenderer();
-}
-
-SampleGraphPresenter.prototype.useSpaceFillingRenderer = function() {
-	this.renderer = new DagreGraphRenderer();
-}
-
-SampleGraphPresenter.prototype.isSpaceSavingMode = function() {
-	return this.renderer instanceof SimpleGraphRenderer;
-}
-
-SampleGraphPresenter.prototype.isSpaceFillingMode = function() {
-	return this.renderer instanceof DagreGraphRenderer;
-}
-
-SampleGraphPresenter.prototype.clear = function() {
-	this.root.selectAll("svg").remove();
-};
-
-SampleGraphPresenter.prototype.calcuateVisibleColumnOffsets = function() {
-	// Calculate the offsets for the columns -- only need to do this once
-	var xOffset = 0;
-
-	// Depending on whether or not we are viewing top down or bottom up, the visible columns are those
-	// before and including the selected sample type, or those after and including the sample type, respectively.
-	var querySampleType = model.sampleType;
-	var seenQuerySampleType = false;
-	var bottomUpMode = this.bottomUpMode;
-	var visibleColumns = [];
-	COLUMNS.forEach(function(col, i) {
-		var atQuerySampleType = col.type == querySampleType;
-		if (atQuerySampleType) {
-			visibleColumns.push(col);
-		} else {
-			var includeCol = seenQuerySampleType && bottomUpMode;
-			includeCol = includeCol || !seenQuerySampleType && !bottomUpMode;
-			if (includeCol) visibleColumns.push(col)
-		}
-		seenQuerySampleType = seenQuerySampleType || atQuerySampleType;
-	})
-
-	if (!bottomUpMode) visibleColumns = visibleColumns.reverse();
-	this.visibleColumns = visibleColumns;
-	this.visibleColumns.forEach(function(column) { column.xOffset = xOffset; xOffset += column.width });
-};
-
-/**
- * Put the presenter in the bottom-up display mode (compared to top-down)
- */
-SampleGraphPresenter.prototype.useBottomUpMode = function() {
-	this.bottomUpMode = true;
-	this.calcuateVisibleColumnOffsets();
-};
-
-/**
- * Put the presenter in the top-down display mode (compared to bottom-up)
- */
-SampleGraphPresenter.prototype.useTopDownMode = function() {
-	this.bottomUpMode = false;
-	this.calcuateVisibleColumnOffsets();
-};
-
-SampleGraphPresenter.prototype.useWithColorsMode = function() {
-	this.withColorsMode = true;
-	sampleColors = d3.scale.category10();
-};
-
-SampleGraphPresenter.prototype.useNoColorsMode = function() {
-	this.withColorsMode = false;
-	sampleColors = d3.scale.ordinal().range(['#999']);
-};
-
-/**
- * Return a function that gives the outgoing edges for a sample.
- *
- * The outgoing edges depends on whether the view is top-down or bottom-up
- */
-SampleGraphPresenter.prototype.outEdgesFunction = function() {
-	var bottomUpMode = this.bottomUpMode;
-	return function(samp) { return bottomUpMode ? samp.parents : samp.children }
-}
-
-/**
- * Return a function that gives the incoming edges for a sample.
- *
- * The incoming edges depends on whether the view is top-down or bottom-up
- */
-SampleGraphPresenter.prototype.inEdgesFunction = function() {
-	var bottomUpMode = this.bottomUpMode;
-	return function(samp) { return bottomUpMode ? samp.children : samp.parents }
-}
-
-/**
- * Initialize the sample nodes
- */
-SampleGraphPresenter.prototype.initializeGraphSamples = function()
-{
-	var colors = sampleColors;
-	var nodes = this.visibleColumns.map(function(c) { return model.samplesByType[c.type] });
-	var outEdgesGetter = this.outEdgesFunction();
-	var inEdgesGetter = this.inEdgesFunction();
-	// Compute the x/y coordinates for each sample
-	for (var col = 0; col < nodes.length; ++col) {
-		var colData = nodes[col];
-		var xOffset = this.visibleColumns[col].xOffset;
-		var width = this.visibleColumns[col].width;
-		for (row = 0; row < colData.length; ++row) {
-			var sampleData = colData[row];
-			sampleData.col = col;
-			sampleData.row = row;
-			sampleData.colOffset = xOffset;
-			var outEdges = outEdgesGetter(sampleData);
-			var oneEdgeOrLess = outEdges.length < 2;
-			var connectedNodesWithMultipleInEdges = outEdges.filter(function(c) { return inEdgesGetter(c).length > 1 });
-			var oneToOne = oneEdgeOrLess && connectedNodesWithMultipleInEdges.length == 0;
-			sampleData.color = (!oneToOne) ? colors(row) : oneToOneColor;
-			sampleData.userEdgesVisible = null;
-			sampleData.edgesVisible = col + 1 < FIRST_COLLAPSED_COLUMN;
-		}
-	}
-	this.allNodes = nodes;
-}
-
-SampleGraphPresenter.prototype.updateVisibility = function() {
-	// Turn off visibility on all nodes except the root node
-	this.allNodes.forEach(function(samps) {
-		samps.forEach(function(s) { s.visible = s.identifier == model.sampleIdentifier;	})
-	});
-	var outEdgesGetter = this.outEdgesFunction();
-	// Figure out if the nodes should be visible
-	this.allNodes.forEach(function(samps) {
-		samps.forEach(function(sample) {
-			if (null != sample.userEdgesVisible) sample.edgesVisible = sample.userEdgesVisible;
-			var showChildren = sample.visible && sample.edgesVisible;
-			if (!showChildren) return;
-			outEdgesGetter(sample).forEach(function(c) {
-				c.visible = true;
-				// Nodes with only one outgoing edge should show their connected node as well, unless the user requests otherwise
-				if (outEdgesGetter(c).length == 1) {
-					c.edgesVisible = (null == c.userEdgesVisible) ? true : c.userEdgesVisible;
-				}
-			});
-		})
-	});
-}
-
-SampleGraphPresenter.prototype.updateEdges = function() {
-	var edges = [];
-	var outEdgesGetter = this.outEdgesFunction();
-	this.allNodes.forEach(function(samps) {
-		samps.forEach(function(d) { 
-			if (!d.visible) return;
-			outEdgesGetter(d).forEach(function(c) { if (c.visible) edges.push(new SampleGraphEdge(d, c))});
-		})
-	});
-
-	this.edges = edges;
-}
-
-SampleGraphPresenter.prototype.updateNodes = function() {
-	var nodes = this.allNodes.map(function(d) { return d.filter(function(n) { return n.visible })});
-	nodes.forEach(function(samps) { samps.forEach(function(s, i) { s.visibleIndex = i })});
-	this.nodes = nodes;
-}
-
-SampleGraphPresenter.prototype.updateState = function()
-{
-	// These need to be done in this order
-	this.updateVisibility();
-	this.updateNodes();
-	this.updateEdges();
-}
-
-/**
- * Display the sample nodes.
- */
-SampleGraphPresenter.prototype.draw = function()
-{
-	this.renderer.draw();
-}
-
-SampleGraphPresenter.prototype.toggleExpand = function(svgNode, d) {
-	// toggle visiblity
-	d.userEdgesVisible = (null == d.userEdgesVisible) ? !d.edgesVisible :!d.userEdgesVisible;
-	this.selectedNode = svgNode.parentNode;
-	this.draw();
-}
-
-SampleGraphPresenter.prototype.openSample = function(svgNode, d) {
-	var url = "/openbis/index.html?viewMode=SIMPLE#entity=SAMPLE&permId=" + d.permId;
-	window.open(url, '_blank');
-}
-
-function displayActiveMode(active, inactive) {
-	active.parent().addClass("active");
-	inactive.parent().removeClass("active");
-}
-
-function clickedBottomUp() {
-	if (presenter.bottomUpMode) return;
-
-	displayActiveMode($('#bottom-up'), $('#top-down'));
-	presenter.useBottomUpMode();
-	presenter.initializeGraphSamples();
-	presenter.draw();
-}
-
-function clickedTopDown() {
-	if (!presenter.bottomUpMode) return;
-
-	displayActiveMode($('#top-down'), $('#bottom-up'));
-	presenter.useTopDownMode();
-	presenter.initializeGraphSamples();
-	presenter.draw();
-}
-
-function clickedWithColors() {
-	if (presenter.withColorsMode) return;
-
-	displayActiveMode($('#with-colors'), $('#no-colors'));
-	presenter.useWithColorsMode();
-	presenter.initializeGraphSamples();
-	presenter.draw();
-}
-
-function clickedNoColors() {
-	if (!presenter.withColorsMode) return;
-
-	displayActiveMode($('#no-colors'), $('#with-colors'));
-	presenter.useNoColorsMode();
-	presenter.initializeGraphSamples();
-	presenter.draw();
-}
-
-function clickedSpaceSaving() {
-	if (presenter.isSpaceSavingMode()) return;
-
-	displayActiveMode($('#space-saving'), $('#space-filling'));
-	presenter.useSpaceSavingRenderer();
-	presenter.initializeGraphSamples();
-	presenter.clear();
-	presenter.draw();
-}
-
-function clickedSpaceFilling() {
-	if (presenter.isSpaceFillingMode()) return;
-
-	displayActiveMode($('#space-filling'), $('#space-saving'));
-	presenter.useSpaceFillingRenderer();
-	presenter.initializeGraphSamples();
-	presenter.clear();
-	presenter.draw();
-}
-
-function textBBoxForGraphNode(node) {
-	var element = presenter.renderer.columns.selectAll("text.sample")[node.col][node.visibleIndex];
-	if (!element) return {x: node.colOffset, y: 0, width : 0, height : 0 };
-	var bbox = element.getBBox();
-	// Correct for the column
-	bbox.x += node.colOffset;
-	return bbox;
-}
-
-function textBBoxForDomNode(node) {
-	var bbox = node.parentNode.childNodes[0].getBBox();
-	return bbox;
-}
-
-function translate(x, y) {
-	return "translate(" + x + "," + y + ")";
-}
-
-function countInLinksOfSameType(d) {
-	var type = d.sampleType;
-	var count = 0;
-	var outEdges = presenter.inEdgesFunction();
-	outEdges(d).forEach(function(edge) {
-		if (edge.sampleType == type) count++;
-	});
-	return count;
-}
-
-var yLinkOffset = LINE_HEIGHT * 0.33;
-
-
-/**
- * A class that renders the graph
- */
-function SimpleGraphRenderer() {
-	// Function used to draw paths between elements
-	function end(d) {
-		// Find the associated text node in the DOM and use that as a basis for creating the edges
-		var bbox = textBBoxForGraphNode(d);
-		return { x : bbox.x + bbox.width + 7, y  : bbox.y + yLinkOffset };
-	}
-	function start(d) {
-		var bbox = textBBoxForGraphNode(d);
-		return { x : bbox.x, y  : bbox.y + yLinkOffset }
-	}
-
-	this.useLineLinkPath(start, end);
-}
-
-/**
- * Draw edges using the diagonal function
- */
-SimpleGraphRenderer.prototype.useDiagonalLinkPath = function(start, end) {
-	var diagonal = d3.svg.diagonal();
-	diagonal.source(function(d) { return (countInLinksOfSameType(d.target) > 0) ? start(d.source) : end(d.source)});
-	diagonal.target(function(d) { return start(d.target)});
-	this.path = diagonal;
-}
-
-/**
- * Draw edges using the line function
- */
-SimpleGraphRenderer.prototype.useLineLinkPath = function(start, end) {
-	var line = d3.svg.line();
-	this.path = function(d) {
-		var src = (countInLinksOfSameType(d.target) > 0) ? start(d.source) : end(d.source);
-		var dst = start(d.target);
-		return line([[src.x, src.y], [dst.x, dst.y]]);
-	}
-}
-
-SimpleGraphRenderer.prototype.updateNodeOffsets = function()
-{
-	var nodes = presenter.nodes;
-	function initializeOffsetsAtLevel(level) {
-		level.forEach(function(d) { d.xOffset = countInLinksOfSameType(d) * 20; });
-	}
-	nodes.forEach(initializeOffsetsAtLevel)
-};
-
-/**
- * Display the sample nodes.
- */
-SimpleGraphRenderer.prototype.draw = function()
-{
-	presenter.updateState();
-	this.updateNodeOffsets();
-	var nodes = presenter.nodes;
-
-	// Display the graph in an SVG element
-	this.viz = presenter.root.selectAll("svg").data([nodes]);
-	// Code under enter is run if there is no HTML element for a data element	
-	this.viz.enter().append("svg:svg").attr("class", "viz");
-
-	// Columns
-	this.columns = this.viz.selectAll("g").data(function(d) { return d });
-	this.columns.enter().append("svg:g").attr("class", "column");
-	this.columns.exit().remove();
-	this.columns.attr("transform", function(d, i) { return "translate(" + presenter.visibleColumns[i].xOffset + ", 0)"});
-	this.drawHeaders();
-	this.drawNodes();
-	this.drawEdges();
-
-
-	var vizHeight = (d3.max(nodes, function(d) { return d.length}) + 1) * LINE_HEIGHT + 5;
-	var vizWidth = d3.sum(presenter.visibleColumns, function(column) { return column.width });
-	this.viz.attr("width", vizWidth);
-	this.viz.attr("height", vizHeight);
-}
-
-/**
- * Draw the headers
- */
-SimpleGraphRenderer.prototype.drawHeaders = function()
-{
-	var header = this.columns.selectAll("text.header").data(function(d, i) { return [presenter.visibleColumns[i]] });
-	header.enter().append("svg:text")
-		.attr("class", "header")
-		.attr("x", "0")
-		.attr("y", LINE_HEIGHT)
-		.attr("text-anchor", "begin")
-		.style("font-weight", "bold");
-	header
-		.text(function(d) { return d.label });
-}
-
-/**
- * Draw the nodes
- */
-SimpleGraphRenderer.prototype.drawNodes = function()
-{
-	var outEdgesGetter = presenter.outEdgesFunction();
-	var sample = this.columns.selectAll("text.sample").data(function(d) { return d });
-	sample.enter().append("svg:text")
-		.attr("class", "sample")
-		.attr("x", "0")
-		.attr("y", LINE_HEIGHT)
-		.attr("text-anchor", "begin")
-		.style("cursor", "pointer")
-		.on("click", function(d) { presenter.openSample(this, d) })
-		.transition()
-			.style("opacity", 1);
-	sample.exit()
-		.transition()
-			.style("opacity", 0).remove();
-	sample
-		.attr("x", function(d, i) { return d.xOffset; })
-		.attr("y", function(d, i) { return LINE_HEIGHT * (i+2)})
-
-		.text(function(d) { return d.identifier });
-
-	var ring = this.columns.selectAll("circle.ring").data(function(d) { return d });
-	ring.enter().append("svg:circle")
-		.attr("class", "ring")
-		.attr("pointer-events", "all")
-		.attr("r", 0)
-		.style("cursor", "pointer")
-		.style("stroke-width", "2px")
-	ring.exit()
-		.transition()
-			.style("opacity", 0).remove();
-	ring
-		.attr("cx", function(d) { return textBBoxForGraphNode(d).width + d.xOffset + 7 })
-		.attr("cy", function(d, i) { return LINE_HEIGHT * (i+2) - yLinkOffset})
-		.style("fill", function(d) { return d.edgesVisible ? "none" : d.color})
-		.style("stroke", function(d) { return d.color})
-		.on("click", function(d) { presenter.toggleExpand(this, d) });
-	ring
-		.transition()
-			.style("opacity", function(d) { return outEdgesGetter(d).length > 0 ? 1 : 0 })
-			.attr("r", 5);
-}
-
-/**
- * Draw the edges
- */
-SimpleGraphRenderer.prototype.drawEdges = function()
-{
-	var link = this.viz.selectAll("path.link").data(presenter.edges);
-	link.enter().append("svg:path")
-		.attr("class", "link")
-		.attr("pointer-events", "none")
-		.style("fill", "none")
-		.style("stroke-width", "1.5px")
-		.transition()
-			.style("opacity", 1);
-	link.exit()
-		.transition()
-			.style("opacity", 0).remove();
-	link
-		.style("stroke", function(d) { return d.source.color})
-		.attr("d", this.path);
-}
-
-/**
- * A class that renders the graph using dagre.
- */
-function DagreGraphRenderer() {
-	// Function used to draw paths between elements
-	function source(d) {
-		var dagre = d.source.dagre;
-		return { x : dagre.x + dagre.width + 9, y  : dagre.y + (dagre.height / 2) + 5 };
-	}
-	function target(d) {
-		var dagre = d.target.dagre;
-		return { x : dagre.x, y  : dagre.y + (dagre.height / 2) + 5};
-	}
-
-	this.useLineLinkPath(source, target);
-}
-
-/**
- * Draw edges using the diagonal function
- */
-DagreGraphRenderer.prototype.useDiagonalLinkPath = function(source, target) {
-	var diagonal = d3.svg.diagonal();
-	diagonal.source(source);
-	diagonal.target(target);
-	this.path = diagonal;
-}
-
-/**
- * Draw edges using the line function
- */
-DagreGraphRenderer.prototype.useLineLinkPath = function(source, target) {
-	var line = d3.svg.line();
-	this.path = function(d) {
-		var src = source(d);
-		var dst = target(d);
-		return line([[src.x, src.y], [dst.x, dst.y]]); }
-}
-
-var RANK_SEPARATION = 50;
-
-DagreGraphRenderer.prototype.normalizeNodeYPos = function() 
-{
-	var nodes = presenter.nodes;
-	function dagrey(node) { return node.dagre.y }
-	// Look at all the nodes and the edges and fix the height so that nodes of the same type form a row
-	minmaxy = nodes.map(function(d) { return [ d3.min(d, dagrey), d3.max(d, dagrey) ]});
-	miny = [minmaxy[0][0]];
-	// Look the levels as pairs and ensure that the min of level i+1 is > min of level i
-	minmaxy.reduce(function(a,b) {
-		var bcopy = b.slice(0);
-		if (bcopy[0] < a[1] + RANK_SEPARATION) {
-			bcopy[0] = a[1] + RANK_SEPARATION;
-			if (bcopy[1] < bcopy[0]) bcopy[1] = bcopy[0] + RANK_SEPARATION;
-		}
-		miny.push(bcopy[0]);
-		return bcopy;
-	});
-	nodes.forEach(function(group, i) { group.forEach(function(node) {
-		// look at the nodes in this group. Leave the ones that have parents/children within the group alone.
-		// Change the y position for the other ones
-		if (node.dagre.y < miny[i]) node.dagre.y = miny[i];
-	})});
-}
-
-DagreGraphRenderer.prototype.normalizeNodeXPos = function()
-{
-	var nodes = presenter.nodes;	
-	function computeMinX() {
-		function dagrex(node) { return node.dagre.x }	
-		function dagrexwidth(node) { return node.dagre.x + node.dagre.width }
-		// Look at all the nodes and the edges and fix the x pos so that nodes of the same type form a column
-		minmaxx = nodes.map(function(d) { return [ d3.min(d, dagrex), d3.max(d, dagrexwidth) ]});
-		minx = [minmaxx[0][0]];
-		// Look the levels as pairs and ensure that the min of level i+1 is > min of level i
-		minmaxx.reduce(function(a,b) {
-			var bcopy = b.slice(0);
-			if (bcopy[0] < a[1] + RANK_SEPARATION) {
-				bcopy[0] = a[1] + RANK_SEPARATION;
-				if (bcopy[1] < bcopy[0]) bcopy[1] = bcopy[0] + RANK_SEPARATION;
-			}
-			minx.push(bcopy[0]);
-			return bcopy;
-		});
-		return minx;
-	}
-
-	var minx = computeMinX();
-	nodes.forEach(function(group, i) { group.forEach(function(node) {
-		// look at the nodes in this group. Leave the ones that have parents/children within the group alone.
-		// Change the y position for the other ones
-		if (node.dagre.x < minx[i]) {
-			node.dagre.x = minx[i];
-			minx = computeMinX();
-		}
-	})});
-}
-
-/**
- * Display the sample nodes.
- */
-DagreGraphRenderer.prototype.draw = function()
-{
-	presenter.updateState();
-	var nodes = presenter.nodes;
-
-	var viz;
-	// Display the graph in an SVG element
-	viz = presenter.root.selectAll("svg").data([nodes]);
-	this.viz = viz;
-	// Code under enter is run if there is no HTML element for a data element
-	viz.enter().append("svg:svg")
-		.attr("class", "viz")
-		// Create an arrowhead to put to the lines
-		.append("svg:defs").append("svg:marker")
-			.attr("id", "arrowhead")
-			.attr("viewBox", "0 0 10 10")
-			.attr("refX", "8")
-			.attr("refY", "5")
-			.attr("markerUnits", "strokeWidth")
-			.attr("markerHeight", "5")
-			.attr("orient", "auto")
-			.style("fill", "#333")
-			.append("svg:path").attr("d", "M 0 0 L 10 5 L 0 10 z");
-
-	// Edges -- this has to come before the nodes so that the edges are under the nodes
-	this.edges = this.viz.selectAll("g.edge").data([0]);
-	this.edges.enter().append("svg:g").attr("class", "edge");
-	this.edges.exit().remove();
-
-	// Columns
-	this.columns = this.viz.selectAll("g.column").data(function(d) { return d });
-	this.columns.enter().append("svg:g").attr("class", "column");
-	this.columns.exit().remove();
-
-	// Draw the nodes so we get the bounding boxes for the nodes
-	this.initialDrawNodes();
-
-	var dagreNodes = []
-	presenter.nodes.forEach(function(nodeGroup) { nodeGroup.forEach(function(d) { dagreNodes = dagreNodes.concat(d) }) });
-
-	dagre.layout()
-		.nodeSep(RANK_SEPARATION)
-		.edgeSep(10)
-		.rankSep(RANK_SEPARATION)
-		.rankDir("LR")
-		.nodes(dagreNodes)
-		.edges(presenter.edges)
-	    .run();
-	this.normalizeNodeXPos();
-	this.redrawNodes();
-	this.drawHeaders();
-	this.drawEdges();
-
-	var vizWidth = d3.max(dagreNodes, function(d) {	return d.dagre.x + d.dagre.width; })
-	var vizHeight = d3.max(dagreNodes, function(d) { return d.dagre.y + d.dagre.height; })
-
-	// Resize the visualization
-	viz.attr("width", vizWidth + 20); // add space for the ring at the end
-	viz.attr("height", vizHeight + LINE_HEIGHT); // add a space to make it look less cramped
-
-	// If the user clicked on a node, scroll to make it visible
-	if (presenter.selectedNode) {
-		// Figure out which element we need to scroll
-		var scrollWindow = (d3.select("#root").style("overflow") == "visible")
-		if (scrollWindow) {
-			var scrolledElt = $(window);
-			var left = $(presenter.selectedNode).position().left - 50;
-			scrolledElt.scrollLeft(left);
-		} else {
-			var scrolledElt = $("#root");
-			var left = $(presenter.selectedNode).position().left + scrolledElt.scrollLeft() - 50;
-			scrolledElt.scrollLeft(left);
-		}
-
-		// WebKit only
-		// presenter.selectedNode.scrollIntoViewIfNeeded(true);
-
-	}
-}
-
-/**
- * Draw the headers
- */
-DagreGraphRenderer.prototype.drawHeaders = function()
-{
-	var sampleNodeGroup = this.columns.selectAll("g.sample").data(function(d) { return d });
-	var header = this.viz.selectAll("text.header").data(function(d, i) { return presenter.visibleColumns });
-	header.enter().append("svg:text")
-		.attr("class", "header")
-		.attr("y", LINE_HEIGHT - 10)
-		.attr("text-anchor", "begin")
-		.style("font-weight", "bold");
-	header.exit().remove();
-	header
-		.attr("x", function(d, i) {
-			var nodesAtLevel = sampleNodeGroup[i];
-			if (nodesAtLevel.length < 1) return 0;
-			if (!nodesAtLevel[0]) return 0;
-			var dagre = nodesAtLevel.filter(function(d) { return d != null }).map(function(d) { return d.__data__.dagre });
-
-			return d3.mean(dagre, function(d) { return d.x + (d.width * 0.5) }) - 1;
-		})
-		.attr("opacity", function(d, i) {
-			var nodesAtLevel = sampleNodeGroup[i];
-			if (nodesAtLevel.length < 1) return 0;
-			if (!nodesAtLevel[0]) return 0;
-			return 1;
-		})
-		.text(function(d) { return d.label });
-}
-
-/**
- * Draw the nodes
- */
-DagreGraphRenderer.prototype.initialDrawNodes = function()
-{
-	var outEdgesGetter = presenter.outEdgesFunction();
-	var sampleNodeGroup = this.columns.selectAll("g.sample").data(function(d) { return d });
-	sampleNodeGroup.enter().append("svg:g")
-		.attr("class", "sample")
-	sampleNodeGroup
-		sampleNodeGroup.attr("transform", function(d, i) { return translate(0, LINE_HEIGHT * (i+1)) });
-	sampleNodeGroup.exit()
-		.transition()
-			.style("opacity", 0).remove();
-
-	var sample = sampleNodeGroup.selectAll("text.sample").data(function(d) { return [d] });
-	sample.enter().append("svg:text")
-		.attr("class", "sample")
-		.attr("x", "0")
-		.attr("y", LINE_HEIGHT)
-		.attr("text-anchor", "begin")
-		.style("cursor", "pointer")
-		.on("click", function(d) { presenter.openSample(this, d) })
-		.transition()
-			.style("opacity", 1);
-	sample
-		.text(function(d) { return d.identifier });
-
-	var ring = sampleNodeGroup.selectAll("circle.ring").data(function(d) { return [d] });
-	ring.enter().append("svg:circle")
-		.attr("class", "ring")
-		.attr("pointer-events", "all")
-		.attr("r", 0)
-		.style("cursor", "pointer")
-		.style("stroke-width", "2px")
-	ring
-		.attr("cx", function(d, i) { return textBBoxForDomNode(this).width + 7 })
-		.attr("cy", function(d, i) { return textBBoxForDomNode(this).height - 1 })
-		.style("fill", function(d) { return d.edgesVisible ? "none" : d.color})
-		.style("stroke", function(d) { return d.color})
-		.on("click", function(d) { presenter.toggleExpand(this, d) });
-	ring
-		.transition()
-			.style("opacity", function(d) { return outEdgesGetter(d).length > 0 ? 1 : 0 })
-			.attr("r", 5);
-
-	// Update the bounding boxes
-	sampleNodeGroup.each(function(d) {
-		var bbox = this.getBBox();
-		d.width = bbox.width;
-		d.height = bbox.height;
-	});
-}
-
-/**
- * Move the nodes in their new positions.
- */
-DagreGraphRenderer.prototype.redrawNodes = function()
-{
-	var sampleNodeGroup = this.columns.selectAll("g.sample").data(function(d) { return d });
-	sampleNodeGroup
-		sampleNodeGroup.attr("transform", function(d, i) { return translate(d.dagre.x, d.dagre.y) });
-}
-
-/**
- * Draw the edges
- */
-DagreGraphRenderer.prototype.drawEdges = function()
-{
-	var link = this.edges.selectAll("path.link").data(presenter.edges);
-	link.enter().append("svg:path")
-		.attr("class", "link")
-		.attr("pointer-events", "none")
-		.style("fill", "none")
-		.style("stroke-width", "1.5px")
-		.attr("marker-end", "url(#arrowhead)")
-		.transition()
-			.style("opacity", 1);
-	link.exit()
-		.transition()
-			.style("opacity", 0).remove();
-	link
-		.style("stroke", function(d) { return d.source.color})
-		.attr("d", this.path);
-}
-
-
-
-/// The model that manages state and implements the operations
-var model;
-model = new SampleGraphModel();
-
-// The presenter tranlsates the model into visual elements
-var presenter;
-
-
-function enterApp(data)
-{
-	$('#bottom-up').click(clickedBottomUp);
-	$('#top-down').click(clickedTopDown);
-	$('#with-colors').click(clickedWithColors);
-	$('#no-colors').click(clickedNoColors);
-	$('#space-saving').click(clickedSpaceSaving);
-	$('#space-filling').click(clickedSpaceFilling);
-	presenter = new SampleGraphPresenter(model);
-	presenter.useBottomUpMode()
-    model.requestGraphData(function() { presenter.initializeGraphSamples(); presenter.draw() });
-}
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/plugin.properties b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/plugin.properties
deleted file mode 100644
index 8a3ed6bc2ae..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/as/webapps/sample-graph/plugin.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-# The properties file for an example webapps plugin
-# This file has no properties defined because none need to be defined.
-webapp-folder = html
-label = Sample Graph
-sorting = 1
-openbisui-contexts = sample-details-view
-sample-entity-types = FLOWCELL, FLOWLANE, MULTIPLEX, LIBRARY, ALIQUOT, SAMPLE
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/dss/reporting-plugins/sample-bottom-up-data/plugin.properties b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/dss/reporting-plugins/sample-bottom-up-data/plugin.properties
deleted file mode 100644
index 4420c9f866f..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/dss/reporting-plugins/sample-bottom-up-data/plugin.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-label = Sample Bottom Up Data
-class = ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython.JythonAggregationService
-script-path = sample-bottom-up.py
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/dss/reporting-plugins/sample-bottom-up-data/sample-bottom-up.py b/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/dss/reporting-plugins/sample-bottom-up-data/sample-bottom-up.py
deleted file mode 100644
index a698d3c98f5..00000000000
--- a/deep_sequencing_unit/source/core-plugins/ngs-sample-overview-graph/1/dss/reporting-plugins/sample-bottom-up-data/sample-bottom-up.py
+++ /dev/null
@@ -1,8 +0,0 @@
-"""An aggregation service that aggregates data for the sample-bottom-up display"""
-
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-def aggregate(parameters, table_builder):
-	table_builder.addHeader("TEST")
-	row = table_builder.addRow()
-	row.setCell("TEST", "TEST")
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/DataSetInfoExtractor.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/DataSetInfoExtractor.java
deleted file mode 100644
index 8c1525261d5..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/DataSetInfoExtractor.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright 2009 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss;
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Properties;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.log4j.Logger;
-
-import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
-import ch.systemsx.cisd.common.exceptions.UserFailureException;
-import ch.systemsx.cisd.common.filesystem.FileUtilities;
-import ch.systemsx.cisd.common.logging.LogCategory;
-import ch.systemsx.cisd.common.logging.LogFactory;
-import ch.systemsx.cisd.etlserver.DefaultDataSetInfoExtractor;
-import ch.systemsx.cisd.etlserver.IDataSetInfoExtractor;
-import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
-import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
-import ch.systemsx.cisd.openbis.generic.shared.dto.NewProperty;
-
-/**
- * Extension of {@link DefaultDataSetInfoExtractor} for DSU which tries to get version information from the content and store it into the data set
- * property <code>ILLUMINA_GA_OUTPUT</code>. The path to the configuration file inside a flow cell folder is specified by the property
- * <code>path-to-config-file</code>. Its default value is <code>Data/Intensities/config.xml</code>.
- * <p>
- * If version information couldn't be fetched a warning is logged.
- * 
- * @author Franz-Josef Elmer
- */
-public class DataSetInfoExtractor implements IDataSetInfoExtractor
-{
-    static final String VERSION_KEY = "ILLUMINA_PIPELINE_VERSION";
-
-    static final String PATH_TO_CONFIG_FILE_KEY = "path-to-config-file";
-
-    static final String DEFAULT_PATH_TO_CONFIG_FILE = "Data/Intensities/config.xml";
-
-    private final static Logger operationLog =
-            LogFactory.getLogger(LogCategory.OPERATION, DataSetInfoExtractor.class);
-
-    private final IDataSetInfoExtractor dataSetInfoExtractor;
-
-    private final String pathToConfigFile;
-
-    private final Pattern pattern;
-
-    public DataSetInfoExtractor(Properties properties)
-    {
-        dataSetInfoExtractor = new DefaultDataSetInfoExtractor(properties);
-        pathToConfigFile = properties.getProperty(PATH_TO_CONFIG_FILE_KEY, DEFAULT_PATH_TO_CONFIG_FILE);
-        pattern = Pattern.compile(".*<Software.*Version=('|\")(.*)('|\").*");
-    }
-
-    @Override
-    public DataSetInformation getDataSetInformation(File incomingDataSetPath,
-            IEncapsulatedOpenBISService openbisService) throws UserFailureException,
-            EnvironmentFailureException
-    {
-        DataSetInformation info =
-                dataSetInfoExtractor.getDataSetInformation(incomingDataSetPath, openbisService);
-        File configFile = new File(incomingDataSetPath, pathToConfigFile);
-        if (configFile.isFile())
-        {
-            String version = tryToExtractVersion(configFile);
-            if (version != null)
-            {
-                NewProperty property = new NewProperty();
-                property.setPropertyCode(VERSION_KEY);
-                property.setValue(version);
-                info.setDataSetProperties(Arrays.asList(property));
-            } else
-            {
-                operationLog.warn("No version found in config file '" + pathToConfigFile + "'.");
-            }
-        } else
-        {
-            operationLog.warn("Config file '" + pathToConfigFile
-                    + "' does not exists or is a directory.");
-        }
-        return info;
-    }
-
-    private String tryToExtractVersion(File configFile)
-    {
-        List<String> configFileContent = FileUtilities.loadToStringList(configFile);
-        for (String line : configFileContent)
-        {
-            Matcher matcher = pattern.matcher(line);
-            if (matcher.matches())
-            {
-                return matcher.group(2);
-            }
-        }
-        return null;
-    }
-
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/FlowLaneDataSetInfoExtractor.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/FlowLaneDataSetInfoExtractor.java
deleted file mode 100644
index 8c7cce90d6e..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/FlowLaneDataSetInfoExtractor.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss;
-
-import java.io.File;
-import java.util.Properties;
-
-import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
-import ch.systemsx.cisd.common.exceptions.UserFailureException;
-import ch.systemsx.cisd.etlserver.DefaultDataSetInfoExtractor;
-import ch.systemsx.cisd.etlserver.IDataSetInfoExtractor;
-import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
-import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
-import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
-
-/**
- * @author Franz-Josef Elmer
- */
-public class FlowLaneDataSetInfoExtractor implements IDataSetInfoExtractor
-{
-    static final String FLOW_LANE_NUMBER_SEPARATOR = ".";
-
-    private final IDataSetInfoExtractor dataSetInfoExtractor;
-
-    public FlowLaneDataSetInfoExtractor(Properties properties)
-    {
-        dataSetInfoExtractor = new DefaultDataSetInfoExtractor(properties);
-    }
-
-    @Override
-    public DataSetInformation getDataSetInformation(File incomingDataSetPath,
-            IEncapsulatedOpenBISService openbisService) throws UserFailureException,
-            EnvironmentFailureException
-    {
-        DataSetInformation dataSetInformation =
-                dataSetInfoExtractor.getDataSetInformation(incomingDataSetPath, openbisService);
-        String sampleCode = dataSetInformation.getSampleCode();
-        if (sampleCode != null)
-        {
-            dataSetInformation.setSampleCode(sampleCode.replace(FLOW_LANE_NUMBER_SEPARATOR,
-                    SampleIdentifier.CONTAINED_SAMPLE_CODE_SEPARARTOR_STRING));
-        }
-        return dataSetInformation;
-    }
-
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/FlowLaneFeeder.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/FlowLaneFeeder.java
deleted file mode 100644
index 99234754d47..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/FlowLaneFeeder.java
+++ /dev/null
@@ -1,493 +0,0 @@
-/*
- * Copyright 2009 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.Set;
-
-import org.apache.commons.io.FilenameUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.time.DateFormatUtils;
-import org.apache.log4j.Logger;
-
-import ch.systemsx.cisd.common.concurrent.ConcurrencyUtilities;
-import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException;
-import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
-import ch.systemsx.cisd.common.exceptions.Status;
-import ch.systemsx.cisd.common.exceptions.UserFailureException;
-import ch.systemsx.cisd.common.filesystem.FastRecursiveHardLinkMaker;
-import ch.systemsx.cisd.common.filesystem.FileConstants;
-import ch.systemsx.cisd.common.filesystem.FileOperations;
-import ch.systemsx.cisd.common.filesystem.FileUtilities;
-import ch.systemsx.cisd.common.filesystem.IImmutableCopier;
-import ch.systemsx.cisd.common.logging.LogCategory;
-import ch.systemsx.cisd.common.logging.LogFactory;
-import ch.systemsx.cisd.common.process.ProcessExecutionHelper;
-import ch.systemsx.cisd.common.process.ProcessIOStrategy;
-import ch.systemsx.cisd.common.process.ProcessResult;
-import ch.systemsx.cisd.common.properties.ExtendedProperties;
-import ch.systemsx.cisd.common.properties.PropertyUtils;
-import ch.systemsx.cisd.common.time.TimingParameters;
-import ch.systemsx.cisd.etlserver.AbstractPostRegistrationDataSetHandlerForFileBasedUndo;
-import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
-import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
-import ch.systemsx.cisd.openbis.dss.generic.shared.utils.RSyncConfig;
-import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant;
-import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityProperty;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityTypePropertyType;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListSampleCriteria;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewAttachment;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
-import ch.systemsx.cisd.openbis.generic.shared.dto.SampleUpdatesDTO;
-import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier;
-import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
-import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory;
-
-/**
- * Post registration data set handler which makes a hard-link copy of all flow-lane files to associated drop boxes.
- * 
- * @author Franz-Josef Elmer
- */
-class FlowLaneFeeder extends AbstractPostRegistrationDataSetHandlerForFileBasedUndo
-{
-    static final String META_DATA_FILE_TYPE = ".tsv";
-
-    static final String META_DATA_FILE_PREFIX = "meta-data-file-prefix";
-
-    static final String TRANSFER_PREFIX = "transfer.";
-
-    static final String AFFILIATION_KEY = "AFFILIATION";
-
-    static final String DATA_TRANSFERRED = "DATA_TRANSFERRED";
-
-    static final String EXTERNAL_SAMPLE_NAME_KEY = "EXTERNAL_SAMPLE_NAME";
-
-    static final String FLOW_LANE_DROP_BOX_TEMPLATE = "flow-lane-drop-box-template";
-
-    static final String SRF_INFO_PATH = "srf-info-path";
-
-    static final String ENTITY_SEPARATOR_KEY = "entity-separator";
-
-    static final String DEFAULT_ENTITY_SEPARATOR = "_";
-
-    static final String SRF_FILE_EXTENSION = "srf";
-
-    private final static Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION,
-            FlowLaneFeeder.class);
-
-    private final IEncapsulatedOpenBISService service;
-
-    private final MessageFormat flowLaneDropBoxTemplate;
-
-    private final String metaDataFilePrefix;
-
-    private final String entitySepaparator;
-
-    private final IImmutableCopier copier;
-
-    private final Map<String, File> transferDropBoxes = new HashMap<String, File>();
-
-    private final String srfInfoPathOrNull;
-
-    private boolean updateDataTransferredProperty = true;
-
-    FlowLaneFeeder(Properties properties, IEncapsulatedOpenBISService service)
-    {
-        super(FileOperations.getInstance());
-        this.service = service;
-        flowLaneDropBoxTemplate =
-                new MessageFormat(PropertyUtils.getMandatoryProperty(properties,
-                        FLOW_LANE_DROP_BOX_TEMPLATE));
-        metaDataFilePrefix = PropertyUtils.getMandatoryProperty(properties, META_DATA_FILE_PREFIX);
-        entitySepaparator = properties.getProperty(ENTITY_SEPARATOR_KEY, DEFAULT_ENTITY_SEPARATOR);
-        srfInfoPathOrNull = properties.getProperty(SRF_INFO_PATH);
-        if (srfInfoPathOrNull != null)
-        {
-            File srfInfo = new File(srfInfoPathOrNull);
-            if (srfInfo.isFile() == false)
-            {
-                throw new ConfigurationFailureException("File '" + srfInfo.getAbsolutePath()
-                        + "' does not exists or is a folder.");
-            }
-        }
-        copier = FastRecursiveHardLinkMaker.tryCreate(TimingParameters.getDefaultParameters(),
-                RSyncConfig.getInstance().getAdditionalCommandLineOptions());
-        Properties transferDropBoxMapping =
-                ExtendedProperties.getSubset(properties, TRANSFER_PREFIX, true);
-        Set<Entry<Object, Object>> entries = transferDropBoxMapping.entrySet();
-        for (Entry<Object, Object> entry : entries)
-        {
-            String affiliation = entry.getKey().toString();
-            String dropBoxPath = entry.getValue().toString();
-            File dropBox = new File(dropBoxPath);
-            if (dropBox.isDirectory() == false)
-            {
-                throw new EnvironmentFailureException("Transfer drop box for " + affiliation
-                        + " doen't exist or isn't a folder: " + dropBox.getAbsolutePath());
-            }
-            transferDropBoxes.put(affiliation, dropBox);
-        }
-    }
-
-    void setUpdateDataTransferredProperty(boolean updateDataTransferredProperty)
-    {
-        this.updateDataTransferredProperty = updateDataTransferredProperty;
-    }
-
-    @Override
-    public Status handle(File originalData, DataSetInformation dataSetInformation,
-            Map<String, String> parameterBindings)
-    {
-        Map<String, Sample> flowLaneSampleMap = createFlowLaneSampleMap(dataSetInformation);
-        String flowcellID = originalData.getName();
-        List<File> srfFiles = new ArrayList<File>();
-        FileUtilities.findFiles(originalData, srfFiles, createSrfFileFilter());
-        if (srfFiles.size() < flowLaneSampleMap.size())
-        {
-            throw new EnvironmentFailureException("Only " + srfFiles.size()
-                    + " flow lane files found instead of " + flowLaneSampleMap.size() + ".");
-        }
-        Set<String> processedFlowLanes = new LinkedHashSet<String>();
-        for (File srfFile : srfFiles)
-        {
-            List<String> srfInfo = getSRFInfo(srfFile);
-            String flowLane = extractFlowLane(srfFile);
-            if (processedFlowLanes.contains(flowLane))
-            {
-                throw new UserFailureException("Flow lane " + flowLane + " already registered.");
-            }
-            Sample flowLaneSample = flowLaneSampleMap.get(flowLane);
-            if (flowLaneSample == null)
-            {
-                throw new UserFailureException("No flow lane sample for flow lane " + flowLane
-                        + " found.");
-            }
-            File flowLaneDropBox = createDropBoxFile(flowLane);
-            String fileName =
-                    flowLaneSample.getSpace().getCode() + entitySepaparator + flowcellID
-                            + FlowLaneDataSetInfoExtractor.FLOW_LANE_NUMBER_SEPARATOR + flowLane;
-            File flowLaneDataSet = new File(flowLaneDropBox, fileName);
-            if (flowLaneDataSet.exists())
-            {
-                throw new EnvironmentFailureException("There is already a data set for flow lane "
-                        + flowLane + ".");
-            }
-            addFileForUndo(flowLaneDataSet);
-            boolean success = flowLaneDataSet.mkdir();
-            if (success == false)
-            {
-                throw new EnvironmentFailureException("Couldn't create folder '"
-                        + flowLaneDataSet.getAbsolutePath() + "'.");
-            }
-
-            createHardLink(srfFile, flowLaneDataSet);
-            createMetaDataFileAndHardLinkInTransferDropBox(flowLaneDataSet, flowLaneSample,
-                    flowLane, srfInfo);
-
-            // store additional flow lane files
-            List<File> flowLaneFiles = new ArrayList<File>();
-            FileUtilities.findFiles(originalData, flowLaneFiles,
-                    createPrefixFileFilter(FilenameUtils.getBaseName(srfFile.getName())));
-            for (File file : flowLaneFiles)
-            {
-                if (FilenameUtils.getExtension(file.getName()).equals(SRF_FILE_EXTENSION) == false)
-                {
-                    createHardLink(file, flowLaneDataSet);
-                }
-            }
-
-            if (updateDataTransferredProperty)
-            {
-                service.updateSample(createUpdates(flowLaneSample,
-                        createDataTransferredProperty(flowLaneSample)));
-            }
-
-            File markerFile =
-                    new File(flowLaneDropBox, FileConstants.IS_FINISHED_PREFIX + fileName);
-            addFileForUndo(markerFile);
-            FileUtilities.writeToFile(markerFile, "");
-            if (operationLog.isInfoEnabled())
-            {
-                operationLog.info("Flow lane file '" + srfFile
-                        + "' successfully dropped into drop box '" + flowLaneDropBox + "' as '"
-                        + flowLaneDataSet.getName() + "'.");
-            }
-            processedFlowLanes.add(flowLane);
-        }
-        return Status.OK;
-    }
-
-    private List<String> getSRFInfo(File file)
-    {
-        if (srfInfoPathOrNull == null)
-        {
-            return Collections.emptyList();
-        }
-        List<String> command = Arrays.asList(srfInfoPathOrNull, "-l1", file.getAbsolutePath());
-        ProcessResult result =
-                ProcessExecutionHelper.run(command, operationLog, operationLog,
-                        ConcurrencyUtilities.NO_TIMEOUT, ProcessIOStrategy.DEFAULT_IO_STRATEGY,
-                        true);
-        List<String> output = result.getOutput();
-        if (result.isOK() == false)
-        {
-            StringBuilder builder = new StringBuilder();
-            String startupFailureMessage = result.getStartupFailureMessage();
-            if (StringUtils.isNotBlank(startupFailureMessage))
-            {
-                builder.append("\nStartup failure message:").append(startupFailureMessage);
-            }
-            builder.append("\nStandard out and error:");
-            for (String outputLine : output)
-            {
-                builder.append("\n").append(outputLine);
-            }
-            throw new UserFailureException("Invalid SRF file '" + file.getAbsolutePath() + "':"
-                    + builder);
-        }
-        return output;
-    }
-
-    private Map<String, Sample> createFlowLaneSampleMap(DataSetInformation dataSetInformation)
-    {
-        SampleIdentifier sampleIdentifier = dataSetInformation.getSampleIdentifier();
-        Sample flowCell = service.tryGetSampleWithExperiment(sampleIdentifier);
-        if (flowCell == null)
-        {
-            throw new UserFailureException("Unkown flow cell sample: " + sampleIdentifier);
-        }
-        TechId flowCellID = new TechId(flowCell.getId());
-        ListSampleCriteria criteria = ListSampleCriteria.createForContainer(flowCellID);
-        List<Sample> flowLaneSamples = service.listSamples(criteria);
-        Map<String, Sample> flowLaneSampleMap = new LinkedHashMap<String, Sample>();
-        for (Sample flowLaneSample : flowLaneSamples)
-        {
-            flowLaneSampleMap.put(flowLaneSample.getSubCode(), flowLaneSample);
-        }
-        return flowLaneSampleMap;
-    }
-
-    private void createMetaDataFileAndHardLinkInTransferDropBox(File flowLaneDataSet,
-            Sample flowLaneSample, String flowLane, List<String> srfInfo)
-    {
-        if (flowLaneSample == null)
-        {
-            throw new UserFailureException("No flow lane sample for flow lane " + flowLane
-                    + " exists");
-        }
-        StringBuilder builder = new StringBuilder();
-        addLine(builder, "Parent", flowLaneSample.getGeneratedFrom().getIdentifier());
-        addLine(builder, "Code", flowLaneSample.getCode());
-        addLine(builder, "Contact Person Email", flowLaneSample.getRegistrator().getEmail());
-        SampleIdentifier identifier = SampleIdentifierFactory.parse(flowLaneSample.getIdentifier());
-        IEntityProperty[] propertiesOrNull =
-                service.tryGetPropertiesOfTopSample(identifier);
-        File dropBox = null;
-        if (propertiesOrNull != null)
-        {
-            for (IEntityProperty property : propertiesOrNull)
-            {
-                PropertyType propertyType = property.getPropertyType();
-                String value = property.tryGetAsString();
-                addLine(builder, propertyType.getCode(), value);
-                String code = propertyType.getCode();
-                if (code.equals(AFFILIATION_KEY))
-                {
-                    dropBox = transferDropBoxes.get(value);
-                }
-            }
-        }
-        if (srfInfo.isEmpty() == false)
-        {
-            builder.append("\n==== SRF Info ====\t\n");
-            for (String line : srfInfo)
-            {
-                builder.append(line).append("\t\n");
-            }
-        }
-        String sampleCode = flowLaneSample.getCode();
-        String metaFileName =
-                metaDataFilePrefix + escapeSampleCode(sampleCode) + META_DATA_FILE_TYPE;
-        FileUtilities.writeToFile(new File(flowLaneDataSet, metaFileName), builder.toString());
-        copyToDropBox(dropBox, flowLaneDataSet);
-    }
-
-    private IEntityProperty createDataTransferredProperty(Sample flowLaneSample)
-    {
-        final PropertyType propertyType = extractDataTransferredProperty(flowLaneSample);
-        final String currentDate =
-                DateFormatUtils.format(new Date(), BasicConstant.CANONICAL_DATE_FORMAT_PATTERN);
-
-        final IEntityProperty result = new EntityProperty();
-        result.setPropertyType(propertyType);
-        result.setValue(currentDate);
-        return result;
-    }
-
-    private PropertyType extractDataTransferredProperty(Sample flowLaneSample)
-    {
-        SampleType flowLaneType = service.getSampleType(flowLaneSample.getSampleType().getCode());
-        PropertyType propertyType = null;
-        for (EntityTypePropertyType<SampleType> entityTypePropertyType : flowLaneType
-                .getAssignedPropertyTypes())
-        {
-            if (entityTypePropertyType.getPropertyType().getCode().equals(DATA_TRANSFERRED))
-            {
-                propertyType = entityTypePropertyType.getPropertyType();
-            }
-        }
-        if (propertyType == null)
-        {
-            throw new UserFailureException(DATA_TRANSFERRED
-                    + " property type doesn't exist or is not assigned to Flow Lane samples");
-        }
-        return propertyType;
-    }
-
-    public static SampleUpdatesDTO createUpdates(Sample sample, IEntityProperty newEntityProperty)
-    {
-        final TechId sampleId = TechId.create(sample);
-        final List<IEntityProperty> properties =
-                new ArrayList<IEntityProperty>(sample.getProperties());
-        properties.add(newEntityProperty);
-        final ExperimentIdentifier experimentIdentifierOrNull =
-                (sample.getExperiment() != null) ? new ExperimentIdentifier(sample.getExperiment())
-                        : null;
-        final Collection<NewAttachment> attachments = new ArrayList<NewAttachment>();
-        final int version = sample.getVersion();
-        final SampleIdentifier sampleIdentifier =
-                SampleIdentifierFactory.parse(sample.getIdentifier());
-        final String containerIdentifierOrNull =
-                (sample.getContainer() != null) ? sample.getContainer().getIdentifier() : null;
-        final String[] modifiedParentCodesOrNull = null;
-        return new SampleUpdatesDTO(sampleId, properties, experimentIdentifierOrNull, null, attachments,
-                version, sampleIdentifier, containerIdentifierOrNull, modifiedParentCodesOrNull);
-    }
-
-    private void copyToDropBox(File dropBoxOrNull, File flowLaneDataSet)
-    {
-        if (dropBoxOrNull != null)
-        {
-            File[] files = flowLaneDataSet.listFiles();
-            for (File file : files)
-            {
-                createHardLink(file, dropBoxOrNull);
-                addFileForUndo(new File(dropBoxOrNull, file.getName()));
-            }
-            if (operationLog.isInfoEnabled())
-            {
-                operationLog.info("Flow lane data set '" + flowLaneDataSet.getName()
-                        + "' successfully transfered to drop box '" + dropBoxOrNull + "'");
-            }
-        }
-    }
-
-    static String escapeSampleCode(String sampleCode)
-    {
-        return sampleCode == null ? null : sampleCode.replace(
-                SampleIdentifier.CONTAINED_SAMPLE_CODE_SEPARARTOR_STRING, "_");
-    }
-
-    private void addLine(StringBuilder builder, String key, String value)
-    {
-        builder.append(key).append('\t').append(value).append('\n');
-    }
-
-    private void createHardLink(File file, File folder)
-    {
-        final Status status = copier.copyImmutably(file, folder, null);
-        if (status.isError())
-        {
-            throw new EnvironmentFailureException("Couldn't create a hard-link copy of '"
-                    + file.getAbsolutePath() + "' in folder '" + folder.getAbsolutePath() + "'. ["
-                    + status + "]");
-        }
-    }
-
-    private File createDropBoxFile(String flowLane)
-    {
-        File dropBox = new File(flowLaneDropBoxTemplate.format(new Object[] { flowLane }));
-        if (dropBox.exists() == false)
-        {
-            throw new ConfigurationFailureException("Drop box '" + dropBox + "' does not exist.");
-        }
-        if (dropBox.isDirectory() == false)
-        {
-            throw new ConfigurationFailureException("Drop box '" + dropBox
-                    + "' is not a directory.");
-        }
-        return dropBox;
-    }
-
-    private String extractFlowLane(File file)
-    {
-        String name = file.getName();
-        String nameWithoutType = name.substring(0, name.lastIndexOf('.'));
-        int lastIndexOfUnderScore = nameWithoutType.lastIndexOf('_');
-        String flowLane = nameWithoutType;
-        if (lastIndexOfUnderScore >= 0)
-        {
-            flowLane = nameWithoutType.substring(lastIndexOfUnderScore + 1);
-        }
-        return flowLane;
-    }
-
-    private FileFilter createSrfFileFilter()
-    {
-        return new FileFilter()
-            {
-                @Override
-                public boolean accept(File file)
-                {
-                    return file.isFile()
-                            && FilenameUtils.getExtension(file.getName())
-                                    .equals(SRF_FILE_EXTENSION);
-                }
-            };
-    }
-
-    private FileFilter createPrefixFileFilter(final String prefix)
-    {
-        return new FileFilter()
-            {
-                @Override
-                public boolean accept(File file)
-                {
-                    return file.getName().startsWith(prefix);
-                }
-            };
-    }
-
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/StorageProcessor.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/StorageProcessor.java
deleted file mode 100644
index 5391e9990f9..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/StorageProcessor.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2009 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss;
-
-import java.util.Properties;
-
-import ch.systemsx.cisd.etlserver.DelegatingStorageProcessorWithDropbox;
-import ch.systemsx.cisd.openbis.dss.generic.shared.IPostRegistrationDatasetHandler;
-import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider;
-
-/**
- * Storage processor which feeds flow-line drop boxes. Needs the property <code>flow-line-drop-box-template</code>. A <code>{0}</code> is the place
- * holder for the flow-line number.
- *
- * @author Franz-Josef Elmer
- */
-public class StorageProcessor extends DelegatingStorageProcessorWithDropbox
-{
-    public StorageProcessor(Properties properties)
-    {
-        super(properties);
-    }
-
-    @Override
-    public IPostRegistrationDatasetHandler createPostRegistrationDataSetHandler()
-    {
-        return new FlowLaneFeeder(properties, ServiceProvider.getOpenBISService());
-    }
-
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/ChipResultsSummary.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/ChipResultsSummary.java
deleted file mode 100644
index eadc082e447..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/ChipResultsSummary.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss.plugins;
-
-import javax.xml.bind.annotation.XmlElement;
-
-/**
- * <pre>
- *   &lt;ChipResultsSummary&gt;
- *     &lt;clusterCountPF&gt;98792458&lt;/clusterCountPF&gt;
- *     &lt;clusterCountRaw&gt;158466917&lt;/clusterCountRaw&gt;
- *     &lt;densityRatio&gt;3556528488&lt;/densityRatio&gt;
- *     &lt;yield&gt;3556528488&lt;/yield&gt;
- *   &lt;/ChipResultsSummary&gt;
- *   &lt;Software&gt;CASAVA-1.7.0&lt;/Software&gt;
- * </pre>
- * 
- * @author Manuel Kohler
- */
-
-class ChipResultsSummary
-{
-    private Long clusterCountPF = 0L;
-
-    private Long clusterCountRaw = 0L;
-
-    private Long yield = 0L;
-
-    private Double densityRatio = 0.0;
-
-    @XmlElement(name = "clusterCountPF")
-    public Long getClusterCountPF()
-    {
-        return clusterCountPF;
-    }
-
-    public void setClusterCountPF(Long clusterCountPF)
-    {
-        this.clusterCountPF = clusterCountPF;
-    }
-
-    @XmlElement(name = "clusterCountRaw")
-    public Long getClusterCountRaw()
-    {
-        return clusterCountRaw;
-    }
-
-    public void setClusterCountRaw(Long clusterCountRaw)
-    {
-        this.clusterCountRaw = clusterCountRaw;
-    }
-
-    @XmlElement(name = "yield")
-    public Long getYield()
-    {
-        return yield;
-    }
-
-    public void setYield(Long yield)
-    {
-        this.yield = yield;
-    }
-
-    @XmlElement(name = "densityRatio")
-    public Double getDensityRatio()
-    {
-        return densityRatio;
-    }
-
-    public void setDensityRatio(Double densityRatio)
-    {
-        this.densityRatio = densityRatio;
-    }
-
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/ChipSummary.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/ChipSummary.java
deleted file mode 100644
index f749f17e926..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/ChipSummary.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss.plugins;
-
-import javax.xml.bind.annotation.XmlElement;
-
-/**
- * <pre>
- *   &lt;ChipSummary&gt;
- *     &lt;ChipID&gt;708KLAAXX&lt;/ChipID&gt;
- *     &lt;Machine&gt;BS-DSU_ELLAC&lt;/Machine&gt;
- *     &lt;RunFolder&gt;101006_708KLAAXX&lt;/RunFolder&gt;
- *   &lt;/ChipSummary&gt;
- * </pre>
- * 
- * @author Manuel Kohler
- */
-class ChipSummary
-{
-    private String chipID = "";
-
-    private String machine = "";
-
-    private String runFolder = "";
-
-    @XmlElement(name = "ChipID")
-    public String getChipID()
-    {
-        return chipID;
-    }
-
-    public void setChipID(String chipID)
-    {
-        this.chipID = chipID;
-    }
-
-    @XmlElement(name = "Machine")
-    public String getMachine()
-    {
-        return machine;
-    }
-
-    public void setMachine(String machine)
-    {
-        this.machine = machine;
-    }
-
-    @XmlElement(name = "RunFolder")
-    public String getRunFolder()
-    {
-        return runFolder;
-    }
-
-    public void setRunFolder(String runFolder)
-    {
-        this.runFolder = runFolder;
-    }
-}
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/DataSetToSOFT.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/DataSetToSOFT.java
deleted file mode 100644
index 8ceb0a016b9..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/DataSetToSOFT.java
+++ /dev/null
@@ -1,360 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss.plugins;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
-import javax.activation.DataHandler;
-import javax.activation.DataSource;
-import javax.mail.util.ByteArrayDataSource;
-
-import org.apache.log4j.Logger;
-
-import ch.rinn.restrictions.Private;
-import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel;
-import ch.systemsx.cisd.common.exceptions.Status;
-import ch.systemsx.cisd.common.logging.LogCategory;
-import ch.systemsx.cisd.common.logging.LogFactory;
-import ch.systemsx.cisd.common.mail.EMailAddress;
-import ch.systemsx.cisd.common.security.MD5ChecksumCalculator;
-import ch.systemsx.cisd.common.string.Template;
-import ch.systemsx.cisd.openbis.dss.generic.shared.DataSetProcessingContext;
-import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
-import ch.systemsx.cisd.openbis.dss.generic.shared.IProcessingPluginTask;
-import ch.systemsx.cisd.openbis.dss.generic.shared.ProcessingStatus;
-import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider;
-import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListSampleCriteria;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
-import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription;
-import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
-import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory;
-
-/**
- * Processing plugin for exporting meta data of a flow lane as a SOFT file.
- * 
- * @author Franz-Josef Elmer
- */
-public class DataSetToSOFT implements IProcessingPluginTask
-{
-    @Private
-    static final String EXTERNAL_SAMPLE_NAME_PROPERTY = "EXTERNAL_SAMPLE_NAME";
-
-    private static final String EMPTY = "<<<NEED_TO_BE_FILLED>>>";
-
-    @Private
-    static final Template SOFT_FILE_NAME_TEMPLATE = new Template(
-            "${flow-lane}_${external-sample-name}_SOFT.txt");
-
-    @Private
-    static final Template E_MAIL_SUBJECT_TEMPLATE = new Template(
-            "SOFT file for '${external-sample-name}'");
-
-    @Private
-    static final Template E_MAIL_CONTENT_TEMPLATE = new Template("Dear User\n\n"
-            + "Enclosed you will find the SOFT file for '${external-sample-name}'.\n"
-            + "Flow lane: ${flow-lane}\nData Set: ${data-set}");
-
-    private static final class SOFTBuilder
-    {
-        private final StringBuilder builder = new StringBuilder();
-
-        void addSample(Sample sample, String propertyTypeCode)
-        {
-            addLine('^', "SAMPLE", getProperty(sample, propertyTypeCode));
-        }
-
-        void addSampleProperty(String key, Sample sample, String propertyTypeCode,
-                Map<String, String> translation)
-        {
-            String property = getProperty(sample, propertyTypeCode);
-            String translatedProperty = translation.get(property);
-            addProperty(key, translatedProperty == null ? property : translatedProperty);
-        }
-
-        void addSampleProperty(String key, Sample sample, String propertyTypeCode)
-        {
-            addProperty(key, getProperty(sample, propertyTypeCode));
-        }
-
-        void addProperty(String key, String property)
-        {
-            addLine('!', "Sample_" + key, property);
-        }
-
-        private void addLine(char prefix, String key, String value)
-        {
-            builder.append(prefix).append(key).append(" = ").append(value).append('\n');
-        }
-
-        private String getProperty(Sample sample, String propertyTypeCode)
-        {
-            String property = tryToGetProperty(sample, propertyTypeCode);
-            return property == null ? EMPTY : property;
-        }
-
-        @Override
-        public String toString()
-        {
-            return builder.toString();
-        }
-    }
-
-    private static final String tryToGetProperty(Sample sample, String propertyTypeCode)
-    {
-        List<IEntityProperty> properties = sample.getProperties();
-        for (IEntityProperty property : properties)
-        {
-            if (property.getPropertyType().getCode().equals(propertyTypeCode))
-            {
-                return property.tryGetAsString();
-            }
-        }
-        return null;
-    }
-
-    private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION,
-            DataSetToSOFT.class);
-
-    private static final long serialVersionUID = 1L;
-
-    private final Map<String, String> translation;
-
-    private transient IEncapsulatedOpenBISService service;
-
-    public DataSetToSOFT(Properties properties, File storeRoot)
-    {
-        translation = new HashMap<String, String>();
-        translation.put("GENOMIC_DNA", "genomic");
-        translation.put("FRAGMENTED_GENOMIC_DNA", "genomic");
-        translation.put("CHIP", "genomic");
-        translation.put("BISULFITE", "genomic");
-        translation.put("NON_GENOMIC", "non-genomic");
-        translation.put("SYNTHETIC", "synthetic");
-        translation.put("VIRAL_RNA", "viral RNA");
-        translation.put("SMALL_RNA", "other");
-        translation.put("TOTAL_RNA", "other");
-        translation.put("MRNA", "other");
-        translation.put("PROCESSED_DNA_LIBRARY", EMPTY);
-    }
-
-    @Override
-    public ProcessingStatus process(List<DatasetDescription> datasets,
-            DataSetProcessingContext context)
-    {
-        EMailAddress address = new EMailAddress(context.getUserEmailOrNull());
-        ProcessingStatus status = new ProcessingStatus();
-        for (DatasetDescription datasetDescription : datasets)
-        {
-            try
-            {
-                String dataSetCode = datasetDescription.getDataSetCode();
-                if (operationLog.isInfoEnabled())
-                {
-                    operationLog.info("Create SOFT file for data set " + dataSetCode);
-                }
-                AbstractExternalData srfDataSet = getService().tryGetDataSet(dataSetCode);
-                Sample flowLaneSample = getFlowLaneSample(srfDataSet);
-                Sample flowCellSample = getFlowCellSample(flowLaneSample);
-                Sample sequencingSample = getSequencingSample(flowLaneSample);
-                File srfFile = tryToFindSrfFile(datasetDescription, context);
-                if (srfFile == null)
-                {
-                    status.addDatasetStatus(datasetDescription,
-                            Status.createError("Data set " + dataSetCode + " has no srf file."));
-                    continue;
-                }
-                String checkSum = calculateCheckSum(srfFile);
-
-                SOFTBuilder softBuilder = new SOFTBuilder();
-                softBuilder.addSample(sequencingSample, EXTERNAL_SAMPLE_NAME_PROPERTY);
-                softBuilder.addProperty("type", "SRA");
-                softBuilder.addSampleProperty("title", sequencingSample,
-                        EXTERNAL_SAMPLE_NAME_PROPERTY);
-                softBuilder
-                        .addSampleProperty("source_name", sequencingSample, "SAMPLE_SOURCE_NAME");
-                softBuilder.addSampleProperty("organism", sequencingSample,
-                        "NCBI_ORGANISM_TAXONOMY");
-                softBuilder.addSampleProperty("characteristics", sequencingSample,
-                        "SAMPLE_CHARACTERISTICS");
-                softBuilder.addSampleProperty("biomaterial_provider", sequencingSample,
-                        "CONTACT_PERSON_NAME");
-                softBuilder.addSampleProperty("molecule", sequencingSample, "SAMPLE_MOLECULE");
-                softBuilder.addSampleProperty("extract_protocol", sequencingSample,
-                        "SAMPLE_EXTRACT_PROTOCOL");
-                softBuilder.addSampleProperty("data_processing", sequencingSample,
-                        "SAMPLE_DATA_PROCESSING");
-                softBuilder.addSampleProperty("library_strategy", sequencingSample,
-                        "SAMPLE_LIBRARY_STRATEGY");
-                softBuilder.addSampleProperty("library_source", sequencingSample, "SAMPLE_KIND",
-                        translation);
-                softBuilder.addSampleProperty("library_selection", sequencingSample,
-                        "SAMPLE_LIBRARY_SELECTION");
-                softBuilder
-                        .addSampleProperty("instrument_model", flowCellSample, "GENOME_ANALYZER");
-                softBuilder.addProperty("raw_file_1", srfFile.getName());
-                softBuilder.addProperty("raw_file_type_1", "srf");
-                softBuilder.addProperty("file_checksum_1", checkSum);
-
-                String subject = createSubject(sequencingSample);
-                String content = createContent(sequencingSample, flowLaneSample, srfDataSet);
-                String fileName = createSoftFileName(sequencingSample, flowLaneSample);
-                DataSource dataSource = createDataSource(softBuilder.toString());
-                context.getMailClient().sendEmailMessageWithAttachment(subject, content, fileName,
-                        new DataHandler(dataSource), null, null, address);
-                status.addDatasetStatus(datasetDescription, Status.OK);
-            } catch (Exception ex)
-            {
-                status.addDatasetStatus(datasetDescription,
-                        Status.createError("Exception occured: " + ex));
-                operationLog.error("Exception occured while processing " + datasetDescription, ex);
-            }
-        }
-        return status;
-    }
-
-    private String createSubject(Sample sequencingSample)
-    {
-        Template template = E_MAIL_SUBJECT_TEMPLATE.createFreshCopy();
-        bindExternalSampleName(template, sequencingSample);
-        return template.createText();
-    }
-
-    private String createContent(Sample sequencingSample, Sample flowLaneSample,
-            AbstractExternalData dataSet)
-    {
-        Template template = E_MAIL_CONTENT_TEMPLATE.createFreshCopy();
-        bindExternalSampleName(template, sequencingSample);
-        template.bind("flow-lane", flowLaneSample.getIdentifier());
-        template.bind("data-set", dataSet.getCode());
-        return template.createText();
-    }
-
-    private String createSoftFileName(Sample sequencingSample, Sample flowLaneSample)
-    {
-        Template template = SOFT_FILE_NAME_TEMPLATE.createFreshCopy();
-        String externalSampleName =
-                tryToGetProperty(sequencingSample, EXTERNAL_SAMPLE_NAME_PROPERTY);
-        template.bind("external-sample-name", externalSampleName.replace(' ', '_'));
-        template.bind("flow-lane", flowLaneSample.getCode().replace(':', '-'));
-        return template.createText();
-    }
-
-    private void bindExternalSampleName(Template template, Sample sequencingSample)
-    {
-        String externalSampleName =
-                tryToGetProperty(sequencingSample, EXTERNAL_SAMPLE_NAME_PROPERTY);
-        template.bind("external-sample-name", externalSampleName);
-    }
-
-    private String calculateCheckSum(File srfFile)
-    {
-        String checkSum;
-        try
-        {
-            checkSum = MD5ChecksumCalculator.calculate(new FileInputStream(srfFile));
-        } catch (IOException ex)
-        {
-            throw CheckedExceptionTunnel.wrapIfNecessary(ex);
-        }
-        return checkSum;
-    }
-
-    private File tryToFindSrfFile(DatasetDescription datasetDescription,
-            DataSetProcessingContext context)
-    {
-        return tryToFindSrfFile(context.getDirectoryProvider().getDataSetDirectory(
-                datasetDescription));
-    }
-
-    private File tryToFindSrfFile(File file)
-    {
-        if (file.isFile() && file.getName().endsWith(".srf"))
-        {
-            return file;
-        }
-        if (file.isDirectory())
-        {
-            File[] files = file.listFiles();
-            for (File child : files)
-            {
-                File srfFile = tryToFindSrfFile(child);
-                if (srfFile != null)
-                {
-                    return srfFile;
-                }
-            }
-        }
-        return null;
-    }
-
-    private Sample getFlowLaneSample(AbstractExternalData dataSet)
-    {
-        SampleIdentifier identifier = SampleIdentifierFactory.parse(dataSet.getSampleIdentifier());
-        return getService().tryGetSampleWithExperiment(identifier);
-    }
-
-    private Sample getFlowCellSample(Sample flowLaneSample)
-    {
-        SampleIdentifier identifier =
-                SampleIdentifierFactory.parse(flowLaneSample.getContainer().getIdentifier());
-        return getService().tryGetSampleWithExperiment(identifier);
-    }
-
-    private Sample getSequencingSample(Sample flowLaneSample)
-    {
-        List<Sample> parents =
-                getService().listSamples(
-                        ListSampleCriteria.createForChild(new TechId(flowLaneSample.getId())));
-        return parents.get(0);
-    }
-
-    private DataSource createDataSource(final String softData)
-    {
-        try
-        {
-            return new ByteArrayDataSource(softData, "text/plain");
-        } catch (IOException ex)
-        {
-            throw CheckedExceptionTunnel.wrapIfNecessary(ex);
-        }
-    }
-
-    private IEncapsulatedOpenBISService getService()
-    {
-        if (service == null)
-        {
-            service = ServiceProvider.getOpenBISService();
-        }
-        return service;
-    }
-
-    // for tests
-    void setService(IEncapsulatedOpenBISService service)
-    {
-        this.service = service;
-    }
-
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/Date.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/Date.java
deleted file mode 100644
index 9dff47c8e54..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/Date.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss.plugins;
-
-import javax.xml.bind.annotation.XmlElement;
-
-/*
- * @author Manuel Kohler
- */
-class Date
-{
-    private String Date;
-
-    @XmlElement
-    public String getDate()
-    {
-        return Date;
-    }
-
-    public void setDate(String date)
-    {
-        this.Date = date;
-    }
-
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummary.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummary.java
deleted file mode 100644
index 9226df41972..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummary.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss.plugins;
-
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-
-/**
- * Note: Not all XML Elements are read in
- * 
- * <pre>
- *   &lt;Summary&gt;
- *     &lt;ChipResultsSummary&gt;
- *     ...
- *     &lt;/ChipResultsSummary&gt;
- *     ...
- *     &lt;ChipSummary&gt;
- *     ...
- *     &lt;/ChipSummary&gt;
- *     ...
- *     &lt;Date&gt;
- *     ...
- *     &lt;/Date&gt;
- *     ...
- *     &lt;ExpandedLaneSummary&gt;
- *     ...
- *     &lt;/ExpandedLaneSummary&gt;
- *     ...
- *     &lt;LaneParameterSummary&gt;
- *     ...
- *     &lt;/LaneParameterSummary&gt;
- *     ...
- *     &lt;LaneResultsSummary&gt;
- *     ...
- *     &lt;/LaneResultsSummary&gt;
- *     ...
- *     &lt;Software&gt;CASAVA-1.7.0&lt;/Software&gt;
- *     ...
- *     &lt;TileErrorsByLane&gt;
- *     ...
- *     &lt;/TileErrorsByLane&gt;
- *     ...
- *     &lt;TileResultsByLane&gt;
- *     ...
- *     &lt;/TileResultsByLane&gt;
- *     ...
- *   &lt;Summary&gt;
- * </pre>
- * 
- * @author Manuel Kohler
- */
-
-@XmlRootElement(name = "Summary")
-class IlluminaSummary
-{
-    private ChipResultsSummary chipResultsSummary;
-
-    private LaneResultsSummary LaneResultsSummary;
-
-    private ChipSummary chipSummary;
-
-    private String Software = "";
-
-    private String Date = "";
-
-    @XmlElement(name = "ChipResultsSummary")
-    public ChipResultsSummary getChipResultsSummary()
-    {
-        return chipResultsSummary;
-    }
-
-    public void setChipResultsSummary(ChipResultsSummary chipResultsSummary)
-    {
-        this.chipResultsSummary = chipResultsSummary;
-    }
-
-    @XmlElement(name = "LaneResultsSummary")
-    public LaneResultsSummary getLaneResultsSummary()
-    {
-        return LaneResultsSummary;
-    }
-
-    public void setLaneResultsSummary(LaneResultsSummary laneResultsSummary)
-    {
-        this.LaneResultsSummary = laneResultsSummary;
-    }
-
-    @XmlElement(name = "ChipSummary")
-    public ChipSummary getChipSummary()
-    {
-        return chipSummary;
-    }
-
-    public void setChipSummary(ChipSummary chipSummary)
-    {
-        this.chipSummary = chipSummary;
-    }
-
-    @XmlElement(name = "Software")
-    public String getSoftware()
-    {
-        return Software;
-    }
-
-    public void setSoftware(String software)
-    {
-        this.Software = software;
-    }
-
-    @XmlElement(name = "Date")
-    public String getDate()
-    {
-        return Date;
-    }
-
-    public void setDate(String date)
-    {
-        this.Date = date;
-    }
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummaryReportingPlugin.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummaryReportingPlugin.java
deleted file mode 100644
index 7a5ecbf472d..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummaryReportingPlugin.java
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * Copyright 2009 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss.plugins;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-
-import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
-import ch.systemsx.cisd.common.xml.JaxbXmlParser;
-import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.AbstractTableModelReportingPlugin;
-import ch.systemsx.cisd.openbis.dss.generic.shared.DataSetProcessingContext;
-import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DoubleTableCell;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IntegerTableCell;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.StringTableCell;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel;
-import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription;
-import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
-import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier;
-import ch.systemsx.cisd.openbis.generic.shared.util.SimpleTableModelBuilder;
-
-/**
- * Reporting plugin which shows numbers of the Summary.xml file generated from the Illumina Sequencer. The structure of the Summary file has changed
- * from Casava 1.6 to 1.7 so some XML elements are not available in the old files.
- * 
- * @author Manuel Kohler
- */
-public class IlluminaSummaryReportingPlugin extends AbstractTableModelReportingPlugin
-{
-    private static final String UNALIGNED_PATH = "/Unaligned_no_mismatch";
-
-    private static final int MEGA = 1000000;
-
-    private static final int KILO = 1000;
-
-    private static final long serialVersionUID = 1L;
-
-    private static final String SUMMARY_FILE_NAME = "Summary.xml";
-
-    private static final String BUSTARD_SUMMARY_FILE_NAME = "BustardSummary.xml";
-
-    private static final String DATA_INTENSITIES_BASE_CALLS_PATH = "/Data/Intensities/BaseCalls";
-
-    private static final String GERALD_DIR = "GERALD";
-
-    private static final String BASECALL_DIR = "Basecall";
-
-    private static final String[] PROPERTIES =
-    { "GENOME_ANALYZER", "END_TYPE", "ILLUMINA_PIPELINE_VERSION",
-            "CYCLES_REQUESTED_BY_CUSTOMER" };
-
-    private static final String[] COLUMNS =
-    { "Sample Code", "Clusters", "Clusters (PF)", "Yield (Mbases)", "Density Ratio",
-            "PhiX: Clusters", "PhiX: ClustersPF", "PhiX: Yield (Mbases)", "PhiX: % Align (PF)",
-            "Software", "Eland finished" };
-
-    public IlluminaSummaryReportingPlugin(Properties properties, File storeRoot)
-    {
-        super(properties, storeRoot);
-    }
-
-    private File[] findFile(DataSetProcessingContext context, DatasetDescription dataset,
-            final String summaryFilePath, String path)
-    {
-
-        File originalData = getDataSubDir(context.getDirectoryProvider(), dataset);
-
-        File childDirectory = new File(originalData, path);
-
-        File[] files = childDirectory.listFiles(new FileFilter()
-            {
-                @Override
-                public boolean accept(File file)
-                {
-                    return file.isDirectory() && file.getName().startsWith(summaryFilePath);
-                }
-            });
-        return files;
-    }
-
-    private static void createRows(File[] f, String fileName, SimpleTableModelBuilder b,
-            DatasetDescription dataset)
-    {
-        File summaryFile = new File(f[0], fileName);
-        describe(b, dataset, summaryFile);
-
-    }
-
-    @Override
-    public TableModel createReport(List<DatasetDescription> datasets,
-            DataSetProcessingContext context)
-    {
-        SimpleTableModelBuilder builder = new SimpleTableModelBuilder();
-
-        for (String column : COLUMNS)
-        {
-            builder.addHeader(column);
-        }
-
-        for (String property : PROPERTIES)
-        {
-            builder.addHeader(property);
-        }
-
-        for (DatasetDescription dataset : datasets)
-        {
-
-            File[] f =
-                    findFile(context, dataset, GERALD_DIR, dataset.getSampleCode()
-                            + DATA_INTENSITIES_BASE_CALLS_PATH);
-
-            if (f != null && f.length > 0)
-            {
-                createRows(f, SUMMARY_FILE_NAME, builder, dataset);
-            } else
-            {
-                File[] fileNewCasava = findFile(context, dataset, BASECALL_DIR, UNALIGNED_PATH);
-                try
-                {
-                    createRows(fileNewCasava, BUSTARD_SUMMARY_FILE_NAME, builder, dataset);
-                } catch (RuntimeException exc)
-                {
-                    List<ISerializableComparable> row = new ArrayList<ISerializableComparable>();
-                    row.add(new StringTableCell(dataset.getSampleCode()));
-                    for (int i = 0; i <= COLUMNS.length + PROPERTIES.length - 2; ++i)
-                    {
-                        row.add(new StringTableCell(""));
-                    }
-                    builder.addRow(row);
-                }
-            }
-
-        }
-        return builder.getTableModel();
-    }
-
-    private static void describe(SimpleTableModelBuilder builder, DatasetDescription dataset,
-            File summaryFile)
-    {
-        IlluminaSummary summary = IlluminaSummaryXMLLoader.readSummaryXML(summaryFile);
-        describeSummary(builder, dataset, summary);
-    }
-
-    private static void describeSummary(SimpleTableModelBuilder builder,
-            DatasetDescription dataset, IlluminaSummary summary)
-    {
-        ChipResultsSummary chipResultSummary = summary.getChipResultsSummary();
-        LaneResultsSummary laneResultSummary = summary.getLaneResultsSummary();
-        // ChipSummary chipSummary = summary.getChipSummary();
-
-        List<ISerializableComparable> row = new ArrayList<ISerializableComparable>();
-        row.add(new StringTableCell(dataset.getSampleCode()));
-
-        addTableRow(chipResultSummary.getClusterCountRaw(), row);
-        addTableRow(chipResultSummary.getClusterCountPF(), row);
-        addTableRow(chipResultSummary.getYield() / MEGA, row);
-        addTableRow(chipResultSummary.getDensityRatio(), row);
-
-        // PhiX Lane
-        addTableRow(laneResultSummary.getRead().getLanes().get(4).getClusterCountRaw().getMean(),
-                row);
-        addTableRow(laneResultSummary.getRead().getLanes().get(4).getClusterCountPF().getMean(),
-                row);
-        addTableRow(laneResultSummary.getRead().getLanes().get(4).getLaneYield() / KILO, row);
-
-        try
-        {
-            addTableRow(laneResultSummary.getRead().getLanes().get(4).getPercentUniquelyAlignedPF()
-                    .getMean(), row);
-        } catch (RuntimeException exc)
-        {
-            row.add(new StringTableCell(""));
-
-        }
-
-        addTableRow(summary.getSoftware(), row);
-        addTableRow(summary.getDate(), row);
-        addPropertyColumnValues(dataset, row);
-
-        builder.addRow(row);
-    }
-
-    private static void addTableRow(Long number, List<ISerializableComparable> row)
-    {
-        try
-        {
-            row.add(new IntegerTableCell(number));
-
-        } catch (RuntimeException exc)
-        {
-            row.add(new StringTableCell(""));
-
-        }
-    }
-
-    private static void addTableRow(Double number, List<ISerializableComparable> row)
-    {
-        try
-        {
-            row.add(new DoubleTableCell(number));
-
-        } catch (RuntimeException exc)
-        {
-            row.add(new StringTableCell(""));
-
-        }
-    }
-
-    private static void addTableRow(String s, List<ISerializableComparable> row)
-    {
-        try
-        {
-            row.add(new StringTableCell(s));
-
-        } catch (RuntimeException exc)
-        {
-            row.add(new StringTableCell(""));
-
-        }
-    }
-
-    private static void addPropertyColumnValues(DatasetDescription dataset,
-            List<ISerializableComparable> row)
-    {
-        Sample sample = getSample(dataset);
-        for (String propertyCode : PROPERTIES)
-        {
-            boolean found = false;
-            for (IEntityProperty property : sample.getProperties())
-            {
-                if (property.getPropertyType().getCode().equals(propertyCode))
-                {
-                    row.add(new StringTableCell(property.tryGetAsString()));
-                    found = true;
-                    break;
-                }
-            }
-            if (found == false)
-            {
-                row.add(new StringTableCell(""));
-            }
-        }
-    }
-
-    private static Sample getSample(DatasetDescription dataset)
-    {
-        String spaceCode = dataset.getSpaceCode();
-        String sampleCode = dataset.getSampleCode();
-        SampleIdentifier sampleIdentifier =
-                new SampleIdentifier(new SpaceIdentifier(spaceCode), sampleCode);
-        Sample sampleOrNull =
-                ServiceProvider.getOpenBISService().tryGetSampleWithExperiment(sampleIdentifier);
-        if (sampleOrNull == null)
-        {
-            throw new EnvironmentFailureException(String.format(
-                    "Couldn't get sample %s for dataset %s.", dataset.getSampleCode(),
-                    dataset.getDataSetCode()));
-        }
-        return sampleOrNull;
-    }
-
-    /**
-     * Loader of Illumina summary XML file.
-     * <p>
-     * NOTE: This is not thread safe as it holds {@link JaxbXmlParser} singleton. As long as it is used only by {@link IlluminaSummaryReportingPlugin}
-     * it will work correctly because we only use a singleton of each reporting plugin.
-     * 
-     * @author Piotr Buczek
-     */
-    static class IlluminaSummaryXMLLoader
-    {
-        // we use one instance
-        private static JaxbXmlParser<IlluminaSummary> PARSER_INSTANCE =
-                new JaxbXmlParser<IlluminaSummary>(IlluminaSummary.class, false);
-
-        public static IlluminaSummary readSummaryXML(File summaryXml)
-        {
-            return PARSER_INSTANCE.doParse(summaryXml);
-        }
-
-    }
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/Lane.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/Lane.java
deleted file mode 100644
index 1f53180bae0..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/Lane.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss.plugins;
-
-import javax.xml.bind.annotation.XmlElement;
-
-/**
- * <pre>
- *  &lt;Lane&gt;
- *  &lt;laneNumber&gt;1&lt;/laneNumber&gt;
- *  &lt;averageAlignScorePF&gt;
- *  ...
- *  &lt;/averageAlignScorePF&gt;
- *  &lt;clusterCountPF&gt;
- *  ...
- *  &lt;/clusterCountPF&gt;
- *  &lt;clusterCountRaw&gt;
- *  ...
- *  &lt;/clusterCountRaw&gt;
- *  &lt;errorPF&gt;
- *  ...
- *  &lt;/errorPF&gt;
- *  &lt;laneYield&gt;2290093&lt;/laneYield&gt;
- *  &lt;oneSig&gt;
- *  ...
- *  &lt;/oneSig&gt;
- *  &lt;percentClustersPF&gt;
- *  ...
- *  &lt;/percentClustersPF&gt;
- *  &lt;percentUniquelyAlignedPF&gt;
- *  ...
- *  &lt;/percentUniquelyAlignedPF&gt;
- *  &lt;signal20AsPctOf1&gt;
- *  ...
- *  &lt;/signal20AsPctOf1&gt;
- *  &lt;/Lane&gt;
- * </pre>
- * 
- * @author Manuel Kohler
- */
-
-class Lane
-{
-    private Long laneNumber = 0L;
-
-    // since Casava 1.7 available
-    private doubleStats averageAlignScorePF;
-
-    private stats clusterCountPF;
-
-    private stats clusterCountRaw;
-
-    // since Casava 1.7 available
-    private doubleStats errorPF;
-
-    private Long laneYield = 0L;
-
-    private stats oneSig;
-
-    private doubleStats percentClustersPF;
-
-    // since Casava 1.7 available
-    private doubleStats percentUniquelyAlignedPF;
-
-    private doubleStats signal20AsPctOf1;
-
-    @XmlElement(name = "laneNumber")
-    public Long getLaneNumber()
-    {
-        return laneNumber;
-    }
-
-    public void setLaneNumber(Long laneNumber)
-    {
-        this.laneNumber = laneNumber;
-    }
-
-    @XmlElement(name = "averageAlignScorePF")
-    public doubleStats getAverageAlignScorePF()
-    {
-        return averageAlignScorePF;
-    }
-
-    public void setAverageAlignScorePF(doubleStats averageAlignScorePF)
-    {
-        this.averageAlignScorePF = averageAlignScorePF;
-    }
-
-    @XmlElement(name = "clusterCountPF")
-    public stats getClusterCountPF()
-    {
-        return clusterCountPF;
-    }
-
-    public void setClusterCountPF(stats clusterCountPF)
-    {
-        this.clusterCountPF = clusterCountPF;
-    }
-
-    @XmlElement(name = "clusterCountRaw")
-    public stats getClusterCountRaw()
-    {
-        return clusterCountRaw;
-    }
-
-    public void setClusterCountRaw(stats clusterCountRaw)
-    {
-        this.clusterCountRaw = clusterCountRaw;
-    }
-
-    @XmlElement(name = "errorPF")
-    public doubleStats getErrorPF()
-    {
-        return errorPF;
-    }
-
-    public void setErrorPF(doubleStats errorPF)
-    {
-        this.errorPF = errorPF;
-    }
-
-    @XmlElement(name = "laneYield")
-    public Long getLaneYield()
-    {
-        return laneYield;
-    }
-
-    public void setLaneYield(Long laneYield)
-    {
-        this.laneYield = laneYield;
-    }
-
-    @XmlElement(name = "oneSig")
-    public stats getOneSig()
-    {
-        return oneSig;
-    }
-
-    public void setOneSig(stats oneSig)
-    {
-        this.oneSig = oneSig;
-    }
-
-    @XmlElement(name = "percentClustersPF")
-    public doubleStats getPercentClustersPF()
-    {
-        return percentClustersPF;
-    }
-
-    public void setPercentClustersPF(doubleStats percentClustersPF)
-    {
-        this.percentClustersPF = percentClustersPF;
-    }
-
-    @XmlElement(name = "percentUniquelyAlignedPF")
-    public doubleStats getPercentUniquelyAlignedPF()
-    {
-        return percentUniquelyAlignedPF;
-    }
-
-    public void setPercentUniquelyAlignedPF(doubleStats percentUniquelyAlignedPF)
-    {
-        this.percentUniquelyAlignedPF = percentUniquelyAlignedPF;
-    }
-
-    @XmlElement(name = "signal20AsPctOf1")
-    public doubleStats getSignal20AsPctOf1()
-    {
-        return signal20AsPctOf1;
-    }
-
-    public void setSignal20AsPctOf1(doubleStats signal20AsPctOf1)
-    {
-        this.signal20AsPctOf1 = signal20AsPctOf1;
-    }
-
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/LaneResultsSummary.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/LaneResultsSummary.java
deleted file mode 100644
index 50c3538b359..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/LaneResultsSummary.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss.plugins;
-
-import javax.xml.bind.annotation.XmlElement;
-
-/**
- * <pre>
- *   &lt;ExpandedLaneSummary&gt;
- *      &lt;Read&gt;
- *      &lt;/Read&gt;
- *   &lt;/ExpandedLaneSummary&gt;
- * </pre>
- * 
- * @author Manuel Kohler
- */
-
-class LaneResultsSummary
-{
-    private Read read;
-
-    @XmlElement(name = "Read")
-    public Read getRead()
-    {
-        return read;
-    }
-
-    public void setRead(Read read)
-    {
-        this.read = read;
-    }
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/Read.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/Read.java
deleted file mode 100644
index fc00524a388..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/Read.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss.plugins;
-
-import java.util.ArrayList;
-import java.util.List;
-import javax.xml.bind.annotation.XmlElement;
-
-/**
- * <pre>
- *  &lt;Read&gt;
- *  &lt;readNumber&gt;1&lt;/readNumber&gt;
- *  &lt;Lane&gt;
- *  ...
- *  &lt;/Lane&gt;
- *  ...
- *  &lt;/Read&gt;
- * </pre>
- * 
- * @author Manuel Kohler
- */
-
-class Read
-{
-    private List<Integer> readNumber = new ArrayList<Integer>();
-
-    private List<Lane> lanes;
-
-    @XmlElement(name = "readNumber")
-    public List<Integer> getReadNumbers()
-    {
-        return readNumber;
-    }
-
-    public void setReadNumbers(List<Integer> readNumber)
-    {
-        this.readNumber = readNumber;
-    }
-
-    @XmlElement(name = "Lane")
-    public List<Lane> getLanes()
-    {
-        return lanes;
-    }
-
-    public void setLanes(List<Lane> lanes)
-    {
-        this.lanes = lanes;
-    }
-
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/doubleStats.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/doubleStats.java
deleted file mode 100644
index 0d21e99a72c..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/doubleStats.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss.plugins;
-
-import javax.xml.bind.annotation.XmlElement;
-
-/**
- * <pre>
- *   &lt;mean&gt;277736.1&lt;/mean&gt;
- *   &lt;stdev&gt;11981.2&lt;/stdev&gt;
- *   &lt;sumsq&gt;17.3&lt;/sumsq&gt;
- * </pre>
- * 
- * @author kohleman
- */
-
-public class doubleStats
-{
-    private double mean = 0.0;
-
-    private double stdev = 0.0;
-
-    private double sumsq = 0.0;
-
-    @XmlElement(name = "mean")
-    public double getMean()
-    {
-        return mean;
-    }
-
-    public void setMean(double mean)
-    {
-        this.mean = mean;
-    }
-
-    @XmlElement(name = "stdev")
-    public double getStdev()
-    {
-        return stdev;
-    }
-
-    public void setStdev(double stdev)
-    {
-        this.stdev = stdev;
-    }
-
-    @XmlElement(name = "sumsq")
-    public double getSumsq()
-    {
-        return sumsq;
-    }
-
-    public void setSumsq(double sumsq)
-    {
-        this.sumsq = sumsq;
-    }
-}
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/stats.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/stats.java
deleted file mode 100644
index 11717aacc51..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/stats.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss.plugins;
-
-import javax.xml.bind.annotation.XmlElement;
-
-/**
- * <pre>
- *   &lt;mean&gt;277736&lt;/mean&gt;
- *   &lt;stdev&gt;11981&lt;/stdev&gt;
- *   &lt;sumsq&gt;17224950000&lt;/sumsq&gt;
- * </pre>
- * 
- * @author kohleman
- */
-
-public class stats
-{
-    private Long mean = 0L;
-
-    private Long stdev = 0L;
-
-    private Long sumsq = 0L;
-
-    @XmlElement(name = "mean")
-    public Long getMean()
-    {
-        return mean;
-    }
-
-    public void setMean(Long mean)
-    {
-        this.mean = mean;
-    }
-
-    @XmlElement(name = "stdev")
-    public Long getStdev()
-    {
-        return stdev;
-    }
-
-    public void setStdev(Long stdev)
-    {
-        this.stdev = stdev;
-    }
-
-    @XmlElement(name = "sumsq")
-    public Long getSumsq()
-    {
-        return sumsq;
-    }
-
-    public void setSumsq(Long sumsq)
-    {
-        this.sumsq = sumsq;
-    }
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/metadata/DbAccess.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/metadata/DbAccess.java
deleted file mode 100644
index 4d5e311c91f..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/metadata/DbAccess.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package ch.ethz.bsse.cisd.dsu.metadata;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.HashMap;
-
-public class DbAccess
-{
-
-    private static final String FASTQ_GZ_SUFFIX = ".fastq.gz";
-
-    /**
-     * Connecting to the pathinfo_DB
-     * 
-     * @return Connection
-     */
-    static Connection connectToDB(Parameters params)
-    {
-        try
-        {
-            Class.forName("org.postgresql.Driver");
-        } catch (ClassNotFoundException e)
-        {
-            e.printStackTrace();
-        }
-        Connection connection = null;
-        try
-        {
-            connection = DriverManager.getConnection(
-                    params.getPathinfoDBConnectionString(), params.getPathinfoDBUser(), params.getPathinfoDBPassword());
-        } catch (SQLException e)
-        {
-            e.printStackTrace();
-            System.out.println("No PathinfoDB available");
-        }
-        return connection;
-    }
-
-    /**
-     * @return HashMap<String, Integer> of files and the corresponding checksum for the DB Uses a file as key and the checksum as value, we assume
-     *         that a file is unique
-     */
-    static HashMap<String, Integer> doQuery(Connection connection, String permId)
-    {
-        HashMap<String, Integer> dataSetResult = new HashMap<String, Integer>();
-        Statement st = null;
-        try
-        {
-            st = connection.createStatement();
-        } catch (SQLException e)
-        {
-            e.printStackTrace();
-        }
-        ResultSet rs = null;
-        try
-        {
-            System.out.println("Found data set with permID: " + permId);
-            rs = st.executeQuery("select dsf.id, dsf.file_name, dsf.checksum_crc32 from data_sets ds,"
-                    + " data_set_files dsf where ds.code='"
-                    + permId + "' and ds.id =dsf.dase_id and dsf.is_directory = FALSE;");
-            while (rs.next())
-            {
-                Integer id = rs.getInt("id");
-                String fileName = rs.getString("file_name");
-                Integer checksum = rs.getInt("checksum_crc32");
-
-                if (fileName.endsWith(FASTQ_GZ_SUFFIX))
-                {
-                    dataSetResult.put(fileName, checksum);
-                }
-            }
-        } catch (SQLException e)
-        {
-            e.printStackTrace();
-        }
-
-        try
-        {
-            rs.close();
-            st.close();
-
-        } catch (SQLException e)
-        {
-            e.printStackTrace();
-        }
-        return dataSetResult;
-    }
-
-    static void closeDBConnection(Connection connection)
-    {
-        try
-        {
-            connection.close();
-        } catch (SQLException e)
-        {
-            e.printStackTrace();
-        }
-
-    }
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/metadata/Parameters.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/metadata/Parameters.java
deleted file mode 100644
index 77eab96942b..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/metadata/Parameters.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright 2015 ETH Zuerich, SIS
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.metadata;
-
-import static ch.systemsx.cisd.common.properties.PropertyUtils.getMandatoryProperty;
-
-import java.util.Properties;
-
-/**
- * @author Manuel Kohler
- */
-public class Parameters
-{
-    private static final String OPENBIS_USER = "openbis-user";
-
-    private static final String OPENBIS_PASSWORD = "openbis-password";
-
-    private static final String OPENBIS_SERVER_URL = "openbis-server-url";
-
-    private static final String PATHINFO_DB_CONNECTION_STRING = "pathinfo-db-connection-string";
-
-    private static final String PATHINFO_DB_USER = "pathinfo-db-user";
-
-    private static final String PATHINFO_DB_CONNECTION_PASSWORD = "pathinfo-db-password";
-
-    private final String openbisUser;
-
-    private final String openbisPassword;
-
-    private final String openbisServerURL;
-
-    private final String pathinfoDBConnectionString;
-
-    private final String pathinfoDBUser;
-
-    private final String pathinfoDBPassword;
-
-    public Parameters(Properties props)
-    {
-        this.openbisUser = getMandatoryProperty(props, OPENBIS_USER);
-        this.openbisPassword = getMandatoryProperty(props, OPENBIS_PASSWORD);
-        this.openbisServerURL = getMandatoryProperty(props, OPENBIS_SERVER_URL);
-        this.pathinfoDBConnectionString = getMandatoryProperty(props, PATHINFO_DB_CONNECTION_STRING);
-        this.pathinfoDBUser = getMandatoryProperty(props, PATHINFO_DB_USER);
-        this.pathinfoDBPassword = getMandatoryProperty(props, PATHINFO_DB_CONNECTION_PASSWORD);
-    }
-
-    public String getOpenbisUser()
-    {
-        return openbisUser;
-    }
-
-    public String getOpenbisPassword()
-    {
-        return openbisPassword;
-    }
-
-    public String getOpenbisServerURL()
-    {
-        return openbisServerURL;
-    }
-
-    public String getPathinfoDBConnectionString()
-    {
-        return pathinfoDBConnectionString;
-    }
-
-    public String getPathinfoDBUser()
-    {
-        return pathinfoDBUser;
-    }
-
-    public String getPathinfoDBPassword()
-    {
-        return pathinfoDBPassword;
-    }
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/metadata/create_metadata.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/metadata/create_metadata.java
deleted file mode 100644
index 93eb052c65a..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/metadata/create_metadata.java
+++ /dev/null
@@ -1,445 +0,0 @@
-/*
- * Copyright 2015 ETH Zuerich, SIS
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.metadata;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.sql.Connection;
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.CommandLineParser;
-import org.apache.commons.cli.GnuParser;
-import org.apache.commons.cli.HelpFormatter;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.OptionBuilder;
-import org.apache.commons.cli.Options;
-import org.apache.commons.cli.ParseException;
-
-import ch.systemsx.cisd.common.io.PropertyIOUtils;
-import ch.systemsx.cisd.common.logging.LogInitializer;
-import ch.systemsx.cisd.openbis.common.api.client.ServiceFinder;
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService;
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet;
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample;
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SampleFetchOption;
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria;
-
-/**
- * @author Manuel Kohler
- */
-
-public class create_metadata
-{
-    private static final String SEQUENCER = "SEQUENCER";
-
-    private static final String SEQUENCER_MODEL = "SEQUENCER_MODEL";
-
-    private static final String ILLUMINA_FLOW_LANE = "ILLUMINA_FLOW_LANE";
-
-    private static final String LANE_NUMBER = "LANE_NUMBER";
-
-    private static final String TSV_ENDING = ".tsv";
-
-    private static final String FLOW_CELL_PROPERTIES_NAME = "FLOW_CELL_PROPERTIES";
-
-    private static final String EXPERIMENT_NAME = "EXPERIMENT";
-
-    private static final String SAMPLE_CODE = "SAMPLE_CODE";
-
-    private static final String SAMPLE_TYPE_ILLUMINA_SEQUENCING = "ILLUMINA_SEQUENCING";
-
-    private static final String SAMPLE_TYPE = "SAMPLE_TYPE";
-
-    private static final String INDEX1_NOINDEX_VALUE = "NOINDEX";
-
-    private static final String INDEX2_NOINDEX_VALUE = "NOINDEX";
-
-    private static final String DATASET_TYPE_CODE_FASTQ_GZ = "FASTQ_GZ";
-
-    private static final String INDEX1_PROPERTY_CODE = "BARCODE";
-
-    private static final String INDEX2_PROPERTY_CODE = "INDEX2";
-
-    private static final String TSV_FLOWCELL_PROPERTIES = "FLOWCELL PROPERTIES";
-
-    private static final String TSV_FASTQ_FILES = "FASTQ_FILES";
-
-    private static final String CL_PARAMETER_OUTPUT_FOLDER = "output";
-
-    private static final String CL_PARAMETER_SAMPLE_LIST = "samples";
-
-    private static final String SERVICE_PROPERTIES_FILE = "etc/service.properties";
-
-    private static final char[] HEX_CHARACTERS =
-    { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', };
-
-    private static final Map<String, String> SEQUENCER_NAMING;
-
-    static
-    {
-        SEQUENCER_NAMING = new HashMap<String, String>();
-        SEQUENCER_NAMING.put("ATTILA", "Illumina Genome Analyzer II");
-        SEQUENCER_NAMING.put("ATTILAX", "Illumina Genome Analyzer IIx");
-        SEQUENCER_NAMING.put("D00404", "Illumina HiSeq 2500");
-        SEQUENCER_NAMING.put("ELLAC", "Illumina Genome Analyzer IIx");
-        SEQUENCER_NAMING.put("M00721", "Illumina MiSeq");
-        SEQUENCER_NAMING.put("SN1043", "Illumina HiSeq 2000");
-        SEQUENCER_NAMING.put("D00535", "Illumina HiSeq 2500");
-        SEQUENCER_NAMING.put("J00121", "Illumina HiSeq 3000");
-        SEQUENCER_NAMING.put("M01761", "Illumina MiSeq");
-        SEQUENCER_NAMING.put("NS500318", "Illumina NextSeq 500");
-        SEQUENCER_NAMING.put("SN792", "Illumina HiSeq 2000");
-    }
-
-    public static void main(String[] args)
-    {
-        HashMap<String, String[]> commandLineMap = parseCommandLine(args);
-        extract(commandLineMap);
-    }
-
-    private static void extract(HashMap<String, String[]> commandLineMap)
-    {
-
-        Connection connection = null;
-
-        LogInitializer.init();
-        Properties props = PropertyIOUtils.loadProperties(SERVICE_PROPERTIES_FILE);
-        Parameters params = new Parameters(props);
-
-        ServiceFinder serviceFinder = new ServiceFinder("openbis", IGeneralInformationService.SERVICE_URL);
-        IGeneralInformationService infoService =
-                serviceFinder.createService(IGeneralInformationService.class, params.getOpenbisServerURL());
-
-        String sessionToken = infoService.tryToAuthenticateForAllServices(params.getOpenbisUser(), params.getOpenbisPassword());
-        if (sessionToken == null)
-        {
-            System.out.println("Wrong username/password!");
-            System.exit(0);
-        }
-        ArrayList<String> sampleCodeList = new ArrayList<String>();
-
-        String outputFolder = commandLineMap.get(CL_PARAMETER_OUTPUT_FOLDER)[0];
-        String[] clSampleCodeList = commandLineMap.get(CL_PARAMETER_SAMPLE_LIST);
-        for (String sampleCode : clSampleCodeList)
-        {
-            sampleCodeList.add(sampleCode);
-        }
-
-        EnumSet<SampleFetchOption> fetchOptions = EnumSet.of(SampleFetchOption.CHILDREN, SampleFetchOption.PROPERTIES);
-        EnumSet<SampleFetchOption> flowcellFetchOptions = EnumSet.of(SampleFetchOption.PROPERTIES);
-
-        connection = DbAccess.connectToDB(params);
-
-        for (String sampleCode : sampleCodeList)
-        {
-            List<Sample> sampleList = searchSample(infoService, sessionToken, sampleCode, fetchOptions);
-            if (sampleList.size() < 1)
-            {
-                System.out.println(sampleCode + " not found!");
-            }
-
-            SortedMap<String, SortedMap<String, String>> sampleMap = getProperties(sampleList);
-            SortedMap<String, SortedMap<String, String>> flowcellMap = null;
-            String flowcellCode = "";
-
-            // Should be always a single sample
-            for (Sample sample : sampleList)
-            {
-                List<Sample> children = sample.getChildren();
-                if (children.size() == 0)
-                {
-                    System.out.println("Skipping..." + sample.getCode() + ". No children found for sample.");
-                    continue;
-                }
-                HashMap<String, String> permIdMap = extractDataSets(infoService, sessionToken, children, sample);
-
-                for (String permId : permIdMap.keySet())
-                {
-                    if (permId.equals(""))
-                    {
-                        System.out.println("Skipping..." + sample.getCode() + ". No Data Set found.");
-                        continue;
-                    }
-
-                    HashMap<String, Integer> dbResult = new HashMap<String, Integer>();
-                    if (connection != null)
-                    {
-                        dbResult = DbAccess.doQuery(connection, permId);
-                    }
-
-                    for (Sample child : children)
-                    {
-                        String sampleConnectedToDataset = permIdMap.get(permId).split("/")[2];
-                        if (child.getSampleTypeCode().equals(ILLUMINA_FLOW_LANE) &&
-                                child.getCode().equals(sampleConnectedToDataset))
-                        {
-                            flowcellCode = child.getCode().split(":")[0];
-                            String flowlaneCode = child.getCode().split(":")[1];
-                            SortedMap<String, String> sampleProps = sampleMap.get(sampleCode);
-                            sampleProps.put(LANE_NUMBER, flowlaneCode);
-                            sampleMap.put(sampleCode, sampleProps);
-
-                            List<Sample> flowcellList = searchSample(infoService, sessionToken, flowcellCode, flowcellFetchOptions);
-                            flowcellMap = getProperties(flowcellList);
-
-                            writeTSVFile(sampleMap, flowcellMap, dbResult, outputFolder);
-                        }
-                    }
-                }
-            }
-        }
-        DbAccess.closeDBConnection(connection);
-    }
-
-    private static SortedMap<String, SortedMap<String, String>> getProperties(List<Sample> sampleList)
-    {
-        SortedMap<String, String> sortedProperties = new TreeMap<String, String>();
-        SortedMap<String, SortedMap<String, String>> sampleMap = new TreeMap<String, SortedMap<String, String>>();
-
-        for (Sample sample : sampleList)
-        {
-            Map<String, String> sampleProperties = sample.getProperties();
-            for (String key : sampleProperties.keySet())
-            {
-                if (!key.equals(FLOW_CELL_PROPERTIES_NAME))
-                {
-                    sortedProperties.put(key, cleanString(sampleProperties.get(key).toString()));
-                }
-                if (key.equals(SEQUENCER))
-                {
-                    sortedProperties.put(SEQUENCER_MODEL, SEQUENCER_NAMING.get(sampleProperties.get(key)));
-                }
-            }
-            if (sample.getSampleTypeCode().equals(SAMPLE_TYPE_ILLUMINA_SEQUENCING))
-            {
-                sortedProperties.put(EXPERIMENT_NAME, sample.getExperimentIdentifierOrNull());
-            }
-            sortedProperties.put(SAMPLE_CODE, sample.getCode());
-            sortedProperties.put(SAMPLE_TYPE, sample.getSampleTypeCode());
-
-            sampleMap.put(sample.getCode(), sortedProperties);
-        }
-        return sampleMap;
-    }
-
-    private static void writeTSVFile(SortedMap<String, SortedMap<String, String>> sampleMap,
-            SortedMap<String, SortedMap<String, String>> flowcellMap, HashMap<String, Integer> dbResult,
-            String outputFolder)
-    {
-        if (flowcellMap != null && flowcellMap.size() == 1)
-        {
-            SortedMap<String, String> flowcellProperties = flowcellMap.get(flowcellMap.firstKey());
-
-            for (String key : sampleMap.keySet())
-            {
-                SortedMap<String, String> currentSample = sampleMap.get(key);
-
-                StringBuilder stringBuilder = new StringBuilder();
-                stringBuilder.append(key.replace("-", "_"));
-                stringBuilder.append("_");
-                stringBuilder.append(flowcellProperties.get("RUN_NAME_FOLDER"));
-                stringBuilder.append("_metadata");
-                stringBuilder.append(TSV_ENDING);
-
-                Path path = Paths.get(outputFolder, stringBuilder.toString());
-                File metaDataFile = new File(path.toUri());
-                metaDataFile.getParentFile().mkdirs();
-                try
-                {
-                    metaDataFile.createNewFile();
-                } catch (IOException e1)
-                {
-                    e1.printStackTrace();
-                }
-
-                try
-                {
-                    BufferedWriter fOut = new BufferedWriter(new FileWriter(metaDataFile));
-                    for (String propertyKey : currentSample.keySet())
-                    {
-                        fOut.write(propertyKey + "\t" + currentSample.get(propertyKey) + "\n");
-                    }
-                    fOut.write("\n" + TSV_FLOWCELL_PROPERTIES + "\n");
-
-                    for (String flowcellPropertyKey : flowcellProperties.keySet())
-                    {
-                        fOut.write(flowcellPropertyKey + "\t" + flowcellProperties.get(flowcellPropertyKey) + "\n");
-                    }
-                    fOut.write("\n" + TSV_FASTQ_FILES + "\n");
-
-                    for (String fileName : dbResult.keySet())
-                    {
-                        fOut.write(fileName + "\t" + crc32ToString(dbResult.get(fileName)) + "\n");
-                    }
-
-                    fOut.close();
-                    System.out.println("Written " + metaDataFile);
-
-                } catch (IOException e)
-                {
-                    e.printStackTrace();
-                }
-            }
-        }
-    }
-
-    private static List<Sample> searchSample(IGeneralInformationService infoService, String sessionToken,
-            String sampleCode, EnumSet<SampleFetchOption> fetchOptions)
-    {
-        SearchCriteria sc = new SearchCriteria();
-        sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleCode));
-        List<Sample> sampleList = infoService.searchForSamples(sessionToken, sc, fetchOptions);
-        return sampleList;
-    }
-
-    private static HashMap<String, String> extractDataSets(IGeneralInformationService infoService, String sessionToken,
-            List<Sample> children, Sample sample)
-    {
-        HashMap<String, String> permIdMap = new HashMap<String, String>();
-        List<DataSet> flowLaneDatasets = infoService.listDataSets(sessionToken, children);
-        String permId = "";
-        Map<String, String> sampleProperties = sample.getProperties();
-        String sample_index1 = sampleProperties.get(INDEX1_PROPERTY_CODE);
-        if (sample_index1 == null)
-        {
-            sample_index1 = INDEX1_NOINDEX_VALUE;
-        }
-        String sample_index2 = sampleProperties.get(INDEX2_PROPERTY_CODE);
-        if (sample_index2 == null)
-        {
-            sample_index2 = INDEX2_NOINDEX_VALUE;
-        }
-
-        for (DataSet ds : flowLaneDatasets)
-        {
-            HashMap<String, String> dsProperties = ds.getProperties();
-            String datasetIndex1 = dsProperties.get(INDEX1_PROPERTY_CODE);
-            String datasetIndex2 = dsProperties.get(INDEX2_PROPERTY_CODE);
-            if (datasetIndex1 == null)
-            {
-                System.out.println("No index found for dataset " + ds.getCode() + ". Set the indices properly for the data sets and try again.");
-            } else
-            {
-
-                if (ds.getDataSetTypeCode().equals(DATASET_TYPE_CODE_FASTQ_GZ) &&
-                        datasetIndex1.equals(sample_index1) && datasetIndex2.equals(sample_index2))
-                {
-                    permId = ds.getCode();
-                    permIdMap.put(permId, ds.getSampleIdentifierOrNull());
-                }
-            }
-        }
-        if (permIdMap.size() == 0)
-        {
-            System.out.println("No data set found which matched the properties of " + sample.getCode() +
-                    ". Check the Indices of the Samples and the Data Sets.");
-        }
-        return permIdMap;
-    }
-
-    private static String cleanString(String s)
-    {
-        return s.replaceAll("\n", " ");
-    }
-
-    /**
-     * Converts a CRC32 checksum to a string representation.
-     */
-    public static String crc32ToString(final int checksum)
-    {
-        final char buf[] = new char[8];
-        int w = checksum;
-        for (int i = 0, x = 7; i < 4; i++)
-        {
-            buf[x--] = HEX_CHARACTERS[w & 0xf];
-            buf[x--] = HEX_CHARACTERS[(w >>> 4) & 0xf];
-            w >>= 8;
-        }
-        return new String(buf);
-    }
-
-    private static HashMap<String, String[]> parseCommandLine(String[] args)
-    {
-        HashMap<String, String[]> commandLineMap = new HashMap<String, String[]>();
-        CommandLineParser parser = new GnuParser();
-
-        Options options = new Options();
-
-        OptionBuilder.withArgName(CL_PARAMETER_SAMPLE_LIST);
-        OptionBuilder.hasArgs();
-        OptionBuilder.withDescription("list of samples");
-        Option samples = OptionBuilder.create(CL_PARAMETER_SAMPLE_LIST);
-        samples.setArgs(Option.UNLIMITED_VALUES);
-        samples.isRequired();
-        options.addOption(samples);
-
-        OptionBuilder.withArgName(CL_PARAMETER_OUTPUT_FOLDER);
-        OptionBuilder.hasArg();
-        OptionBuilder.withDescription("output folder");
-
-        Option outputFolder = OptionBuilder.create(CL_PARAMETER_OUTPUT_FOLDER);
-        outputFolder.setArgs(1);
-        options.addOption(outputFolder);
-
-        // automatically generate the help statement
-        HelpFormatter formatter = new HelpFormatter();
-        if (args.length < 2)
-        {
-            formatter.printHelp("help", options);
-            System.exit(0);
-        }
-
-        try
-        {
-            CommandLine line = parser.parse(options, args);
-            if (line.hasOption(CL_PARAMETER_SAMPLE_LIST))
-            {
-                String[] sampleArray = line.getOptionValues(CL_PARAMETER_SAMPLE_LIST);
-                commandLineMap.put(CL_PARAMETER_SAMPLE_LIST, sampleArray);
-            }
-            if (line.hasOption(CL_PARAMETER_OUTPUT_FOLDER))
-            {
-                String[] outputArray = line.getOptionValues(CL_PARAMETER_OUTPUT_FOLDER);
-                commandLineMap.put(CL_PARAMETER_OUTPUT_FOLDER, outputArray);
-            } else
-            {
-                String cwd = System.getProperty("user.dir");
-                String[] arrayCwd = cwd.split("@"); // just use a split with a not valid char to convert the String into String []
-                System.out.println("No output folder specified! Will use: " + cwd);
-                commandLineMap.put(CL_PARAMETER_OUTPUT_FOLDER, arrayCwd);
-            }
-        } catch (ParseException exp)
-        {
-            System.out.println("Parsing of command line parameters failed.\n" + exp.getMessage());
-            formatter.printHelp("help", options);
-            System.exit(0);
-        }
-        return commandLineMap;
-    }
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/dto/TrackedEntities.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/dto/TrackedEntities.java
deleted file mode 100644
index 3919ad6a06b..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/dto/TrackedEntities.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright 2009 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.tracking.dto;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
-
-/**
- * Simple encapsulation of list of entities that are tracked.
- * 
- * @author Piotr Buczek
- * @author Manuel Kohler
- */
-public class TrackedEntities
-{
-
-    private final List<Sample> sequencingSamplesToBeProcessed;
-
-    private final List<Sample> sequencingSamplesProcessed;
-
-    private final List<AbstractExternalData> dataSets;
-
-    private final HashMap<String, ArrayList<Long>> changedTrackingMap;
-
-    public TrackedEntities(List<Sample> sequencingSamplesToBeProcessed,
-            List<Sample> sequencingSamplesProcessed, List<AbstractExternalData> dataSets,
-            HashMap<String, ArrayList<Long>> changedTrackingMap)
-    {
-        this.sequencingSamplesToBeProcessed = sequencingSamplesToBeProcessed;
-        this.sequencingSamplesProcessed = sequencingSamplesProcessed;
-        this.dataSets = dataSets;
-        this.changedTrackingMap = changedTrackingMap;
-    }
-
-    public List<Sample> getSequencingSamplesToBeProcessed()
-    {
-        return sequencingSamplesToBeProcessed;
-    }
-
-    public List<Sample> getSequencingSamplesProcessed()
-    {
-        return sequencingSamplesProcessed;
-    }
-
-    public List<AbstractExternalData> getDataSets()
-    {
-        return dataSets;
-    }
-
-    public HashMap<String, ArrayList<Long>> getChangedTrackingMap()
-    {
-        return changedTrackingMap;
-    }
-
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/dto/TrackingStateDTO.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/dto/TrackingStateDTO.java
deleted file mode 100644
index f3376b413f6..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/dto/TrackingStateDTO.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright 2009 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.tracking.dto;
-
-import java.util.Properties;
-import java.util.Set;
-import java.util.TreeMap;
-
-/**
- * Tracking state DTO
- * 
- * @author Piotr Buczek
- * @author Manuel Kohler
- */
-
-public class TrackingStateDTO
-{
-    private Set<Long> alreadyTrackedSampleIdsToBeProcessed;
-
-    private Set<Long> alreadyTrackedSampleIdsProcessed;
-
-    private long lastSeenDatasetId;
-
-    private Properties lastSeenProperties;
-
-    private TreeMap<String, Long> lastSeenDataSetIdMap;
-
-    public TreeMap<String, Long> getLastSeenDataSetIdMap()
-    {
-        return lastSeenDataSetIdMap;
-    }
-
-    public void setLastSeenDataSetIdMap(TreeMap<String, Long> lastSeenDataSetIdMap)
-    {
-        this.lastSeenDataSetIdMap = lastSeenDataSetIdMap;
-    }
-
-    public long getLastSeenDatasetId()
-    {
-        return lastSeenDatasetId;
-    }
-
-    public void setLastSeenDatasetId(long lastSeenDatasetId)
-    {
-        this.lastSeenDatasetId = lastSeenDatasetId;
-    }
-
-    public Set<Long> getAlreadyTrackedSampleIdsToBeProcessed()
-    {
-        return alreadyTrackedSampleIdsToBeProcessed;
-    }
-
-    public void setAlreadyTrackedSampleIdsToBeProcessed(
-            Set<Long> alreadyTrackedSampleIdsToBeProcessed)
-    {
-        this.alreadyTrackedSampleIdsToBeProcessed = alreadyTrackedSampleIdsToBeProcessed;
-    }
-
-    public Set<Long> getAlreadyTrackedSampleIdsProcessed()
-    {
-        return alreadyTrackedSampleIdsProcessed;
-    }
-
-    public void setAlreadyTrackedSampleIdsProcessed(Set<Long> alreadyTrackedSampleIdsProcessed)
-    {
-        this.alreadyTrackedSampleIdsProcessed = alreadyTrackedSampleIdsProcessed;
-    }
-
-    public Properties getLastSeenProperties()
-    {
-        return lastSeenProperties;
-    }
-
-    public void setLastSeenProperties(Properties lastSeenProperties)
-    {
-        this.lastSeenProperties = lastSeenProperties;
-    }
-
-}
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/Email.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/Email.java
deleted file mode 100644
index 2d4b6fc9c6c..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/Email.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 2009 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.tracking.email;
-
-import ch.systemsx.cisd.common.mail.EMailAddress;
-import ch.systemsx.cisd.common.mail.From;
-import ch.systemsx.cisd.common.mail.IMailClient;
-
-/**
- * Simple encapsulation of {@link IMailClient#sendMessage(String, String, String, From, String...)} method parameters.
- * 
- * @author Piotr Buczek
- */
-public class Email
-{
-    private final String subject;
-
-    private final String content;
-
-    private final EMailAddress replyToOrNull;
-
-    private final EMailAddress fromOrNull;
-
-    private final EMailAddress[] recipients;
-
-    public Email(String subject, String content, EMailAddress replyToOrNull, EMailAddress fromOrNull,
-            EMailAddress... recipients)
-    {
-        super();
-        this.subject = subject;
-        this.content = content;
-        this.replyToOrNull = replyToOrNull;
-        this.fromOrNull = fromOrNull;
-        this.recipients = recipients;
-    }
-
-    public Email(String subject, String content, EMailAddress replyToOrNull, String fromOrNull,
-            EMailAddress... recipients)
-    {
-        this(subject, content, replyToOrNull, new EMailAddress(fromOrNull), recipients);
-    }
-
-    public String getSubject()
-    {
-        return subject;
-    }
-
-    public String getContent()
-    {
-        return content;
-    }
-
-    public EMailAddress getReplyToOrNull()
-    {
-        return replyToOrNull;
-    }
-
-    public EMailAddress getFromOrNull()
-    {
-        return fromOrNull;
-    }
-
-    public EMailAddress[] getRecipients()
-    {
-        return recipients;
-    }
-
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EmailWithSummary.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EmailWithSummary.java
deleted file mode 100644
index ae91239a0c7..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EmailWithSummary.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2009 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.tracking.email;
-
-/**
- * Encapsulation of {@link Email} with a short summary of its content.
- * 
- * @author Piotr Buczek
- */
-public class EmailWithSummary
-{
-    private final Email email;
-
-    private final String summary;
-
-    public EmailWithSummary(Email email, String summary)
-    {
-        this.email = email;
-        this.summary = summary;
-    }
-
-    public Email getEmail()
-    {
-        return email;
-    }
-
-    public String getSummary()
-    {
-        return summary;
-    }
-
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailData.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailData.java
deleted file mode 100644
index 08c7d402190..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailData.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright 2009 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.tracking.email;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import ch.systemsx.cisd.common.mail.EMailAddress;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
-
-/**
- * Structure containing all data about tracked entities that will be used in a single email to an recipient. Its purpose is to group data that will be
- * used to generate content of an email containing merged information about all events that the recipient should be notified about.
- * 
- * @author Piotr Buczek
- */
-public class EntityTrackingEmailData
-{
-    private List<Sample> sequencingSamplesToBeProcessed = new ArrayList<Sample>(0);
-
-    private List<Sample> sequencingSamplesProcessed = new ArrayList<Sample>(0);
-
-    private final List<AbstractExternalData> dataSets = new ArrayList<AbstractExternalData>(0);
-
-    private final EMailAddress recipient;
-
-    /** creates email data for given <var>recipient</var> */
-    public EntityTrackingEmailData(EMailAddress recipient)
-    {
-        this.recipient = recipient;
-    }
-
-    public EMailAddress getRecipient()
-    {
-        return recipient;
-    }
-
-    public List<Sample> getSequencingSamplesToBeProcessed()
-    {
-        return sequencingSamplesToBeProcessed;
-    }
-
-    public List<Sample> getSequencingSamplesProcessed()
-    {
-        return sequencingSamplesProcessed;
-    }
-
-    public List<AbstractExternalData> getDataSets()
-    {
-        return dataSets;
-    }
-
-    /** adds info about newly tracked sequencing sample to be processed */
-    public void addSequencingSampleToBeProcessed(Sample sequencingSample)
-    {
-        sequencingSamplesToBeProcessed.add(sequencingSample);
-    }
-
-    /** adds info about newly tracked sequencing sample successfully processed */
-    public void addSequencingSampleProcessed(Sample sequencingSample)
-    {
-        sequencingSamplesProcessed.add(sequencingSample);
-    }
-
-    /** adds info about newly tracked data set */
-    public void addDataSet(AbstractExternalData dataSet)
-    {
-        dataSets.add(dataSet);
-    }
-
-    /** short description of data kept in the structure */
-    public String getDescription()
-    {
-        final StringBuilder sb = new StringBuilder();
-        appendSamplesInfo(sb, sequencingSamplesToBeProcessed, "possible for processing");
-        appendSamplesInfo(sb, sequencingSamplesProcessed, "successfully processed");
-        appendDataSetsInfo(sb);
-        return sb.toString();
-    }
-
-    private void appendSamplesInfo(final StringBuilder sb, final List<Sample> samples,
-            final String actionDescription)
-    {
-        if (samples.isEmpty())
-        {
-            sb.append(String.format("no new samples are %s\n", actionDescription));
-        } else
-        {
-            for (Sample seqencingSample : samples)
-            {
-                final String sequencingSampleIdentifier = seqencingSample.getIdentifier();
-                sb.append(String.format("Sequencing sample: '%s' is %s",
-                        sequencingSampleIdentifier, actionDescription));
-                sb.append("\n");
-            }
-        }
-    }
-
-    private void appendDataSetsInfo(final StringBuilder sb)
-    {
-        if (getDataSets().isEmpty())
-        {
-            sb.append("no new data sets tracked");
-        } else
-        {
-            sb.append(getDataSets().size() + " new data set(s) tracked: ");
-            for (AbstractExternalData dataSet : getDataSets())
-            {
-                sb.append(dataSet.getIdentifier() + ", ");
-            }
-        }
-        sb.append("\n");
-    }
-
-    //
-    // Object
-    //
-
-    @Override
-    public String toString()
-    {
-        return getDescription();
-    }
-
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailDataManager.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailDataManager.java
deleted file mode 100644
index 3ddb5aacfbf..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailDataManager.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright 2009 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.tracking.email;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import ch.ethz.bsse.cisd.dsu.tracking.dto.TrackedEntities;
-import ch.systemsx.cisd.common.mail.EMailAddress;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
-
-/**
- * Manager that groups data about tracked entities into {@link EntityTrackingEmailData} objects.
- * 
- * @author Piotr Buczek
- * @author Manuel Kohler
- */
-class EntityTrackingEmailDataManager
-{
-    private final static String CONTACT_PERSON_EMAIL = "CONTACT_PERSON_EMAIL";
-
-    private final static String PRINCIPAL_INVESTIGATOR_EMAIL = "PRINCIPAL_INVESTIGATOR_EMAIL";
-
-    private final static String CONTACT_DATA_MANAGER_EMAIL = "CONTACT_DATA_MANAGER_EMAIL";
-
-    private static Map<String, String> recipientsBySpace;
-
-    public static void initialize(final Map<String, String> recipients)
-    {
-        recipientsBySpace = recipients;
-    }
-
-    public static Collection<EntityTrackingEmailData> groupByRecipient(
-            TrackedEntities trackedEntities)
-    {
-        assert recipientsBySpace != null : "recipientsBySpace not initialized";
-        // <recipients email, email data>
-        final Map<EMailAddress, EntityTrackingEmailData> dataByRecipient =
-                new HashMap<EMailAddress, EntityTrackingEmailData>();
-        groupSequencingSamplesToBeProcessed(dataByRecipient, trackedEntities);
-        groupSequencingSamplesProcessed(dataByRecipient, trackedEntities);
-        groupDataSetSamples(dataByRecipient, trackedEntities);
-        return dataByRecipient.values();
-    }
-
-    public static Collection<EntityTrackingEmailData> groupByRecipientDataSets(
-            TrackedEntities trackedEntities)
-    {
-        assert recipientsBySpace != null : "recipientsBySpace not initialized";
-        // <recipients email, email data>
-        final Map<EMailAddress, EntityTrackingEmailData> dataByRecipient =
-                new HashMap<EMailAddress, EntityTrackingEmailData>();
-        groupDataSetSamples(dataByRecipient, trackedEntities);
-        return dataByRecipient.values();
-    }
-
-    /** Puts tracked sequencing samples to be processed grouped by recipient into <var>result</var>. */
-    private static void groupSequencingSamplesToBeProcessed(
-            Map<EMailAddress, EntityTrackingEmailData> result, TrackedEntities trackedEntities)
-    {
-        for (Sample sequencingSample : trackedEntities.getSequencingSamplesToBeProcessed())
-        {
-            for (EMailAddress recipient : getSequencingSampleTrackingRecipients(Collections
-                    .singleton(sequencingSample)))
-            {
-                final EntityTrackingEmailData emailData =
-                        getOrCreateRecipientEmailData(result, recipient);
-                emailData.addSequencingSampleToBeProcessed(sequencingSample);
-            }
-        }
-    }
-
-    /** Puts tracked processed sequencing samples grouped by recipient into <var>result</var>. */
-    private static void groupSequencingSamplesProcessed(
-            Map<EMailAddress, EntityTrackingEmailData> result, TrackedEntities trackedEntities)
-    {
-        for (Sample sequencingSample : trackedEntities.getSequencingSamplesProcessed())
-        {
-            for (EMailAddress recipient : getSequencingSampleTrackingRecipients(Collections
-                    .singleton(sequencingSample)))
-            {
-                final EntityTrackingEmailData emailData =
-                        getOrCreateRecipientEmailData(result, recipient);
-                emailData.addSequencingSampleProcessed(sequencingSample);
-            }
-        }
-    }
-
-    /** Puts tracked data sets grouped by recipient into <var>result</var>. */
-    private static void groupDataSetSamples(Map<EMailAddress, EntityTrackingEmailData> result,
-            TrackedEntities trackedEntities)
-    {
-        for (AbstractExternalData dataSet : trackedEntities.getDataSets())
-        {
-            for (EMailAddress recipient : getDataSetTrackingRecipients(dataSet))
-            {
-                final EntityTrackingEmailData emailData =
-                        getOrCreateRecipientEmailData(result, recipient);
-                emailData.addDataSet(dataSet);
-            }
-        }
-    }
-
-    private static EntityTrackingEmailData getOrCreateRecipientEmailData(
-            Map<EMailAddress, EntityTrackingEmailData> dataByRecipient, EMailAddress recipient)
-    {
-        EntityTrackingEmailData emailDataOrNull = dataByRecipient.get(recipient);
-        if (emailDataOrNull == null)
-        {
-            emailDataOrNull = new EntityTrackingEmailData(recipient);
-            dataByRecipient.put(recipient, emailDataOrNull);
-        }
-        return emailDataOrNull;
-    }
-
-    /**
-     * Returns a set of emails of recipients that should get a tracking information about given <var>sequencingSample</var>.<br>
-     */
-    // NOTE: Set is needed because one recipient can occur in many roles for one sample
-    private static Set<EMailAddress> getSequencingSampleTrackingRecipients(
-            Collection<Sample> sequencingSamples)
-    {
-        assert sequencingSamples != null;
-
-        final Set<EMailAddress> recipients = new HashSet<EMailAddress>();
-
-        // Recipients are taken from properties of the sequencing sample.
-        final Set<String> recipientPropertyTypeCodes = new HashSet<String>();
-        recipientPropertyTypeCodes.add(CONTACT_PERSON_EMAIL);
-        recipientPropertyTypeCodes.add(PRINCIPAL_INVESTIGATOR_EMAIL);
-        recipientPropertyTypeCodes.add(CONTACT_DATA_MANAGER_EMAIL);
-
-        for (Sample sequencingSample : sequencingSamples)
-        {
-            for (Map.Entry<String, String> space : recipientsBySpace.entrySet())
-            {
-                if (sequencingSample.getIdentifier().split("/")[1].equals(space.getKey())) // 20.10 Bugfix to get Space Code
-                {
-                    String spaceRecipientOrNull =
-                            recipientsBySpace.get(space.getKey());
-                    if (spaceRecipientOrNull != null)
-                    {
-                        EMailAddress myEmail = new EMailAddress(spaceRecipientOrNull);
-                        recipients.add(myEmail);
-                    }
-                }
-            }
-
-            for (IEntityProperty property : sequencingSample.getProperties())
-            {
-                final String propertyCode = property.getPropertyType().getCode();
-                final String propertyValue = property.tryGetAsString();
-                if (recipientPropertyTypeCodes.contains(propertyCode))
-                {
-                    EMailAddress myEmail = new EMailAddress(propertyValue);
-                    recipients.add(myEmail);
-                }
-            }
-        }
-
-        return recipients;
-    }
-
-    /**
-     * Returns a set of emails of recipients that should get a tracking information about given <var>flowLaneSample</var>.
-     */
-    private static Set<EMailAddress> getFlowLaneSampleTrackingRecipients(Sample flowLaneSample)
-    {
-        // Recipients are taken from properties of sequencing sample
-        // that is a parent of the flow lane sample.
-        assert flowLaneSample != null;
-        return getSequencingSampleTrackingRecipients(flowLaneSample.getParents());
-    }
-
-    /**
-     * Returns a set of emails of recipients that should get a tracking information about given <var>dataSet</var>.
-     */
-    private static Set<EMailAddress> getDataSetTrackingRecipients(AbstractExternalData dataSet)
-    {
-        // Recipients are taken from properties of sequencing sample
-        // that is a parent of a flow lane sample connected directly with the data set.
-        assert dataSet != null;
-        return getFlowLaneSampleTrackingRecipients(dataSet.getSample());
-    }
-
-}
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailGenerator.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailGenerator.java
deleted file mode 100644
index d00978e6287..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailGenerator.java
+++ /dev/null
@@ -1,586 +0,0 @@
-/*
- * Copyright 2009 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.tracking.email;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.TreeMap;
-
-import org.apache.commons.lang3.time.DateUtils;
-
-import ch.ethz.bsse.cisd.dsu.tracking.dto.TrackedEntities;
-import ch.ethz.bsse.cisd.dsu.tracking.main.Parameters;
-import ch.systemsx.cisd.common.mail.EMailAddress;
-import ch.systemsx.cisd.common.properties.PropertyUtils;
-import ch.systemsx.cisd.common.shared.basic.string.StringUtils;
-import ch.systemsx.cisd.common.spring.HttpInvokerUtils;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.lang.StringEscapeUtils;
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService;
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SpaceWithProjectsAndRoleAssignments;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
-import ch.systemsx.cisd.openbis.generic.shared.dto.SessionContextDTO;
-
-/**
- * @author Piotr Buczek
- * @author Manuel Kohler
- */
-public class EntityTrackingEmailGenerator implements IEntityTrackingEmailGenerator
-{
-    private static final String DB_INSTANCE = "BSSE";
-
-    private static final String NOTIFICATION_EMAIL_FROM = "mail.from";
-
-    private static final String NOTIFICATION_EMAIL_REPLY_TO = "notification-email-reply-to";
-
-    private static final String NOTIFICATION_EMAIL_SUBJECT = "notification-email-subject";
-
-    private static final String AFFILIATION_NOTIFICATION_EMAIL_CONTACT_SUFFIX =
-            "-affiliation-notification-email-contact";
-
-    private static final String SPACE_NOTIFICATION_EMAIL_CONTACT_SUFFIX = "-space-notification-email-contact";
-
-    private final EMailAddress from;
-
-    private final EMailAddress replyTo;
-
-    private final String subject;
-
-    private final String template;
-
-    public EntityTrackingEmailGenerator(Properties properties, String template, SessionContextDTO session)
-    {
-        this.from = new EMailAddress(PropertyUtils.getMandatoryProperty(properties, NOTIFICATION_EMAIL_FROM));
-        this.replyTo = new EMailAddress(PropertyUtils.getMandatoryProperty(properties, NOTIFICATION_EMAIL_REPLY_TO));
-        this.subject = PropertyUtils.getMandatoryProperty(properties, NOTIFICATION_EMAIL_SUBJECT);
-        this.template = template;
-
-        final Map<String, String> recipientsBySpace =
-                retrieveRecipientsBySpace(properties, session);
-        EntityTrackingEmailDataManager.initialize(recipientsBySpace);
-
-    }
-
-    // <affiliation, recipient email>
-    @Deprecated
-    private Map<String, String> retrieveRecipientsByAffiliation(Properties properties)
-    {
-        final Map<String, String> result = new HashMap<String, String>();
-
-        for (Object key : properties.keySet())
-        {
-            final String propertyKey = (String) key;
-            if (propertyKey.endsWith(AFFILIATION_NOTIFICATION_EMAIL_CONTACT_SUFFIX))
-            {
-                final String affiliation =
-                        propertyKey.substring(0, propertyKey.length()
-                                - AFFILIATION_NOTIFICATION_EMAIL_CONTACT_SUFFIX.length());
-                final String affiliationRecipient =
-                        PropertyUtils.getMandatoryProperty(properties, propertyKey);
-                result.put(affiliation, affiliationRecipient);
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Builds a Map of <spaces, email addresses>
-     * 
-     * @author Manuel Kohler
-     */
-    private Map<String, String> retrieveRecipientsBySpace(Properties properties, SessionContextDTO session)
-    {
-        final Map<String, String> result = new HashMap<String, String>();
-
-        Parameters params = new Parameters(properties);
-        String serviceURL = params.getOpenbisServerURL() + IGeneralInformationService.SERVICE_URL;
-        IGeneralInformationService gis = HttpInvokerUtils.createServiceStub(IGeneralInformationService.class, serviceURL,
-                5 * DateUtils.MILLIS_PER_MINUTE);
-
-        List<SpaceWithProjectsAndRoleAssignments> spacesList =
-                gis.listSpacesWithProjectsAndRoleAssignments(session.getSessionToken(), DB_INSTANCE);
-
-        for (Object key : properties.keySet())
-        {
-            final String propertyKey = (String) key;
-
-            if (propertyKey.endsWith(SPACE_NOTIFICATION_EMAIL_CONTACT_SUFFIX))
-            {
-                if (propertyKey.contains("*"))
-                {
-                    String spacePreffix = propertyKey.substring(0, propertyKey.lastIndexOf("*"));
-                    for (SpaceWithProjectsAndRoleAssignments space : spacesList)
-                    {
-                        if (space.getCode().startsWith(spacePreffix))
-                        {
-                            final String spaceRecipient =
-                                    PropertyUtils.getMandatoryProperty(properties, propertyKey);
-                            result.put(space.getCode(), spaceRecipient);
-                        }
-                    }
-                } else
-                {
-                    final String space =
-                            propertyKey.substring(0, propertyKey.length()
-                                    - SPACE_NOTIFICATION_EMAIL_CONTACT_SUFFIX.length());
-                    final String spaceRecipient =
-                            PropertyUtils.getMandatoryProperty(properties, propertyKey);
-                    result.put(space, spaceRecipient);
-                }
-            }
-        }
-        return result;
-    }
-
-    @Override
-    public List<EmailWithSummary> generateEmails(TrackedEntities trackedEntities)
-    {
-        final Collection<EntityTrackingEmailData> emailDataGroupedByRecipient =
-                EntityTrackingEmailDataManager.groupByRecipient(trackedEntities);
-
-        final List<EmailWithSummary> results = new ArrayList<EmailWithSummary>();
-        for (EntityTrackingEmailData emailData : emailDataGroupedByRecipient)
-        {
-            results.add(createEmailWithSummary(emailData));
-        }
-        return results;
-    }
-
-    public List<EmailWithSummary> generateDataSetsEmails(TrackedEntities trackedEntities)
-    {
-        final Collection<EntityTrackingEmailData> emailDataGroupedByRecipientDataSets =
-                EntityTrackingEmailDataManager.groupByRecipientDataSets(trackedEntities);
-
-        final List<EmailWithSummary> results = new ArrayList<EmailWithSummary>();
-        for (EntityTrackingEmailData emailData : emailDataGroupedByRecipientDataSets)
-        {
-            results.add(createEmailWithSummary(emailData));
-        }
-        return results;
-    }
-
-    private EmailWithSummary createEmailWithSummary(EntityTrackingEmailData emailData)
-    {
-        return new EmailWithSummary(createEmail(emailData), emailData.getDescription());
-    }
-
-    private Email createEmail(EntityTrackingEmailData emailData)
-    {
-        String content = EmailContentGenerator.fillTemplateWithData(template, emailData);
-        EMailAddress recipients = emailData.getRecipient();
-
-        String[] mailStringArray = filterBlanks(recipients.tryGetEmailAddress().split(",|;| "));
-        EMailAddress[] recipientsArray = new EMailAddress[mailStringArray.length];
-
-        for (int i = 0; i < mailStringArray.length; ++i)
-        {
-            EMailAddress e = new EMailAddress(mailStringArray[i]);
-            recipientsArray[i] = e;
-        }
-
-        return new Email(subject, content, replyTo, from, recipientsArray);
-
-    }
-
-    private static String[] filterBlanks(String[] arr)
-    {
-        ArrayList<String> result = new ArrayList<String>();
-
-        for (String s : arr)
-        {
-            if (false == StringUtils.isBlank(s))
-            {
-                result.add(s.trim());
-            }
-        }
-
-        return result.toArray(new String[0]);
-    }
-
-    /**
-     * Helper class for generation of email content.
-     * 
-     * @author Piotr Buczek
-     */
-    private static final class EmailContentGenerator
-    {
-        private static final char NEW_LINE = '\n';
-
-        private static final int SEPARATOR_LINE_WIDTH = 100;
-
-        private static final char SECTION_SEPARATOR_CHAR = '#';
-
-        private static final char SUBSECTION_SEPARATOR_CHAR = '-';
-
-        private static final String SECTION_SEPARATOR_LINE =
-                createSeparatorLine(SECTION_SEPARATOR_CHAR);
-
-        private static final String SUBSECTION_SEPARATOR_LINE =
-                createSeparatorLine(SUBSECTION_SEPARATOR_CHAR);
-
-        private final static String EXTERNAL_SAMPLE_NAME_PROPERTY_CODE = "EXTERNAL_SAMPLE_NAME";
-
-        private final static String CONTACT_PERSON_NAME_PROPERTY_CODE = "CONTACT_PERSON_NAME";
-
-        private final static String INDEX1_PROPERTY_CODE = "BARCODE";
-
-        private final static String INDEX2_PROPERTY_CODE = "INDEX2";
-
-        private static final String PERMLINK_LABEL = "See details in openBIS";
-
-        private static final String GENARATED_CONTENT_TARGET = "{generated-content}";
-
-        public static String fillTemplateWithData(String template, EntityTrackingEmailData emailData)
-        {
-            return template.replace(GENARATED_CONTENT_TARGET, generateContent(emailData));
-        }
-
-        private static String generateContent(EntityTrackingEmailData emailData)
-        {
-            StringBuilder sb = new StringBuilder();
-            appendDataSetsData(sb, emailData.getDataSets());
-            appendSequencingSamplesData(sb, emailData.getSequencingSamplesToBeProcessed(), false);
-            appendSequencingSamplesData(sb, emailData.getSequencingSamplesProcessed(), true);
-            return sb.toString();
-        }
-
-        private static void appendSequencingSamplesData(StringBuilder sb,
-                Collection<Sample> sequencingSamples, boolean processed)
-        {
-            for (Sample sequencingSample : sequencingSamples)
-            {
-                final String externalSampleName = getExternalSampleName(sequencingSample);
-
-                appendln(sb, SECTION_SEPARATOR_LINE);
-                appendln(sb, SUBSECTION_SEPARATOR_LINE);
-
-                // append Sequencing sample details
-                if (processed)
-                {
-                    appendSampleDetails(sb,
-                            String.format("Library processing of sample '%s' was successful.",
-                                    externalSampleName), sequencingSample);
-                    appendln(sb, SUBSECTION_SEPARATOR_LINE);
-                } else
-                {
-                    appendSampleDetails(sb, String.format(
-                            "Library processing of sample '%s' is possible.", externalSampleName),
-                            sequencingSample);
-                    appendln(sb, SUBSECTION_SEPARATOR_LINE);
-                }
-            }
-        }
-
-        private static void appendSampleDetails(StringBuilder sb, String heading, Sample sample)
-        {
-            appendln(sb, heading);
-
-            // basic sample info
-            appendAttribute(sb, PERMLINK_LABEL, sample.getSearchlink());
-            appendAttribute(sb, "Sample identifier", sample.getIdentifier());
-            appendNewline(sb);
-
-            // sample properties
-            appendProperties(sb, sample.getProperties());
-        }
-
-        private static void appendDataSetsData(StringBuilder sb, List<AbstractExternalData> dataSets)
-        {
-            if (dataSets.isEmpty())
-            {
-                return;
-            }
-            appendln(sb, SECTION_SEPARATOR_LINE);
-            appendln(sb, SUBSECTION_SEPARATOR_LINE);
-            appendln(sb, "There are new sequencing results available to you.");
-            appendln(sb, SUBSECTION_SEPARATOR_LINE);
-
-            // Using a TreeMap, so the keys are sorted
-            TreeMap<String, List<AbstractExternalData>> sampleMap = new TreeMap<String, List<AbstractExternalData>>();
-            List<AbstractExternalData> dsList = new ArrayList<AbstractExternalData>();
-
-            // we just loop over the data sets and write the connected samples as keys
-            // and the data sets as values in a map, so that we can group together as
-            // data sets per lane
-            for (AbstractExternalData dataSet : dataSets)
-            {
-                Sample s = dataSet.getSample();
-                if (sampleMap.containsKey(s.getIdentifier()))
-                {
-                    dsList = sampleMap.get(s.getIdentifier());
-                }
-                dsList.add(dataSet);
-                sampleMap.put(s.getIdentifier(), dsList);
-                dsList = new ArrayList<AbstractExternalData>();
-            }
-
-            // now we can write out this per sample
-            Iterator<Entry<String, List<AbstractExternalData>>> it = sampleMap.entrySet().iterator();
-            while (it.hasNext())
-            {
-                Map.Entry pairs = (Map.Entry) it.next();
-                appendln(sb, String.format("Results for %s", pairs.getKey()));
-                dsList = (List<AbstractExternalData>) pairs.getValue();
-                for (AbstractExternalData ed : dsList)
-                {
-                    appendDataSetDetails(sb, ed);
-                }
-                it.remove(); // avoids a ConcurrentModificationException
-                appendln(sb, SUBSECTION_SEPARATOR_LINE);
-            }
-        }
-
-        private static void appendDataSetDetails(StringBuilder sb, AbstractExternalData dataSet)
-        {
-            Collection<Sample> sequencingSamples;
-
-            Sample flowLaneSample = dataSet.getSample();
-            assert flowLaneSample != null;
-            sequencingSamples = flowLaneSample.getParents();
-            assert sequencingSamples != null;
-
-            String Index1 = getIndex1(dataSet);
-            String Index2 = getIndex2(dataSet);
-
-            HashMap<String, String> parentProperties = propertiesFromParentSample(dataSet, sequencingSamples, Index1, Index2);
-
-            String externalSampleName = getExternalSampleNamefromDataSet(dataSet);
-            String contactPersonName = parentProperties.get(CONTACT_PERSON_NAME_PROPERTY_CODE);
-
-            String Index = null;
-
-            if (Index1 != null)
-            {
-                Index = Index1;
-            }
-            if (Index2 != null)
-            {
-                Index = Index + "-" + Index2;
-            }
-
-            if (Index != null && externalSampleName != null)
-            {
-                appendln(sb, "Data Set Type: " + dataSet.getDataSetType().toString() +
-                        " Index: " + Index + ", External Sample Name: " + externalSampleName +
-                        ", Contact Person: " + contactPersonName);
-            }
-            else
-            {
-                appendln(sb, "Data Set Type: " + dataSet.getDataSetType().toString() + ", No Meta Data");
-            }
-            appendln(sb, dataSet.getPermlink());
-        }
-
-        private static String getExternalSampleName(Sample sequencingSample)
-        {
-            String externalSampleName =
-                    tryGetSamplePropertyValue(sequencingSample, EXTERNAL_SAMPLE_NAME_PROPERTY_CODE);
-            assert externalSampleName != null;
-            return externalSampleName;
-        }
-
-        private static String getContactPersonName(Sample sequencingSample)
-        {
-            String contactPersonName = tryGetSamplePropertyValue(sequencingSample, CONTACT_PERSON_NAME_PROPERTY_CODE);
-            assert contactPersonName != null;
-            return contactPersonName;
-        }
-
-        private static String getIndex1(AbstractExternalData dataSet)
-        {
-            List<IEntityProperty> properties = dataSet.getProperties();
-
-            String Index = null;
-            for (IEntityProperty p : properties)
-            {
-                if (p.getPropertyType().getCode().equals(INDEX1_PROPERTY_CODE))
-                {
-                    Index = p.getVocabularyTerm().getCode();
-                    if (!Index.equals("NOINDEX"))
-                    {
-                        return Index;
-                    }
-                }
-            }
-            return null;
-        }
-
-        private static String getIndex2(AbstractExternalData dataSet)
-        {
-            List<IEntityProperty> properties = dataSet.getProperties();
-
-            String Index = null;
-            for (IEntityProperty p : properties)
-            {
-                if (p.getPropertyType().getCode().equals(INDEX2_PROPERTY_CODE))
-                {
-                    Index = p.getVocabularyTerm().getCode();
-                    if (!Index.equals("NOINDEX"))
-                    {
-                        return Index;
-                    }
-                }
-            }
-            return null;
-        }
-
-        private static String getExternalSampleNamefromDataSet(AbstractExternalData dataSet)
-        {
-            List<IEntityProperty> properties = dataSet.getProperties();
-
-            String externalSampleName = null;
-            for (IEntityProperty p : properties)
-            {
-                if (p.getPropertyType().getCode().equals(EXTERNAL_SAMPLE_NAME_PROPERTY_CODE))
-                {
-                    externalSampleName = p.getValue();
-                    return externalSampleName;
-                }
-            }
-            return null;
-        }
-
-        private static HashMap<String, String> propertiesFromParentSample(AbstractExternalData dataSet,
-                Collection<Sample> sequencingSamples, String dsIndex1, String dsIndex2)
-        {
-            HashMap<String, String> parentPropertiesMap = new HashMap<String, String>();
-            if (dsIndex1 == null)
-            {
-                return parentPropertiesMap;
-            }
-            if (dsIndex2 == null)
-            {
-                dsIndex2 = "";
-            }
-
-            for (Sample parent : sequencingSamples)
-            {
-                String parentIndex1 = "";
-                String parentIndex2 = "";
-                String externalSampleName = "";
-                String contactPersonName = "";
-
-                List<IEntityProperty> parentSampleProperties = parent.getProperties();
-                for (IEntityProperty pp : parentSampleProperties)
-                {
-                    if (pp.getPropertyType().getCode().equals(INDEX1_PROPERTY_CODE))
-                    {
-                        parentIndex1 = pp.getVocabularyTerm().getCode();
-                    }
-
-                    if (pp.getPropertyType().getCode().equals(INDEX2_PROPERTY_CODE))
-                    {
-                        parentIndex2 = pp.getVocabularyTerm().getCode();
-                        if (parentIndex2.equals(null))
-                        {
-                            parentIndex2 = "";
-                        }
-                    }
-
-                    if (pp.getPropertyType().getCode().equals(EXTERNAL_SAMPLE_NAME_PROPERTY_CODE))
-                    {
-                        externalSampleName = pp.getValue();
-                    }
-
-                    if (pp.getPropertyType().getCode().equals(CONTACT_PERSON_NAME_PROPERTY_CODE))
-                    {
-                        contactPersonName = pp.getValue();
-                    }
-
-                    // //if(index1 == parentIndex1 && (!index2 || !parentIndex2 || index2 == parentIndex2)){
-                    if (parentIndex1.equals(dsIndex1) && (!(dsIndex2.isEmpty()) || !(parentIndex2.isEmpty()) || parentIndex2.equals(dsIndex2)))
-                    {
-
-                        parentIndex1 = "";
-                        parentIndex2 = "";
-
-                        // System.out.println("Found matching meta data for: " + dataSet.getCode() + " from " + parent.getCode());
-
-                        parentPropertiesMap.put(EXTERNAL_SAMPLE_NAME_PROPERTY_CODE, externalSampleName);
-                        parentPropertiesMap.put(CONTACT_PERSON_NAME_PROPERTY_CODE, contactPersonName);
-                    }
-
-                }
-
-            }
-            return parentPropertiesMap;
-        }
-
-        private static String tryGetSamplePropertyValue(Sample sequencingSample, String propertyCode)
-        {
-            String result = null;
-            for (IEntityProperty property : sequencingSample.getProperties())
-            {
-                if (property.getPropertyType().getCode().equals(propertyCode))
-                {
-                    result = StringEscapeUtils.unescapeHtml(property.getValue());
-                    break;
-                }
-            }
-            return result;
-        }
-
-        // NOTE: Information about properties assigned to entity type are not loaded.
-        // If it would be available we could append information about all properties assigned
-        // to entity type, not only about properties filled for specific entity. Additionally
-        // we could group entities by in sections.
-        private static void appendProperties(StringBuilder sb, List<IEntityProperty> properties)
-        {
-            Collections.sort(properties); // sorting by property label or code if there is no label
-            for (IEntityProperty property : properties)
-            {
-                final String label = property.getPropertyType().getLabel();
-                final String valueOrNull = property.tryGetAsString();
-                appendAttribute(sb, label, valueOrNull);
-            }
-        }
-
-        private static void appendAttribute(StringBuilder sb, String name, String valueOrNull)
-        {
-            appendln(sb, String.format("- %s:\n\t\t%s", StringEscapeUtils.unescapeHtml(name),
-                    valueOrNull == null ? "(empty)" : StringEscapeUtils.unescapeHtml(valueOrNull)));
-        }
-
-        private static void appendln(StringBuilder sb, String string)
-        {
-            sb.append(string);
-            appendNewline(sb);
-        }
-
-        private static void appendNewline(StringBuilder sb)
-        {
-            sb.append(NEW_LINE);
-        }
-
-        private static String createSeparatorLine(char separatorChar)
-        {
-            char[] line = new char[SEPARATOR_LINE_WIDTH];
-            Arrays.fill(line, separatorChar);
-            return new String(line);
-        }
-
-    }
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/IEntityTrackingEmailGenerator.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/IEntityTrackingEmailGenerator.java
deleted file mode 100644
index 5d898f6eec5..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/IEntityTrackingEmailGenerator.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2009 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.tracking.email;
-
-import java.util.List;
-
-import ch.ethz.bsse.cisd.dsu.tracking.dto.TrackedEntities;
-
-/**
- * @author Piotr Buczek
- * @author Manuel Kohler
- */
-public interface IEntityTrackingEmailGenerator
-{
-    /**
-     * Generates all {@link EmailWithSummary}s to be send containing information about <var>trackedEntities</var>.
-     * 
-     * @param trackedEntities recently tracked entities
-     */
-    List<EmailWithSummary> generateEmails(TrackedEntities trackedEntities);
-
-    List<EmailWithSummary> generateDataSetsEmails(TrackedEntities changedEntities);
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/FileBasedTrackingDAO.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/FileBasedTrackingDAO.java
deleted file mode 100644
index 309e0099db6..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/FileBasedTrackingDAO.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright 2009 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.tracking.main;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.StringUtils;
-
-import ch.ethz.bsse.cisd.dsu.tracking.dto.TrackingStateDTO;
-import ch.ethz.bsse.cisd.dsu.tracking.utils.LogUtils;
-import ch.systemsx.cisd.common.io.PropertyIOUtils;
-
-/**
- * @author Tomasz Pylak
- * @author Manuel Kohler
- */
-public class FileBasedTrackingDAO implements ITrackingDAO
-{
-    static String LAST_SEEN_DATASET_ID = "lastSeenDatasetId";
-
-    static String TO_BE_PROCESSED = "trackedSamplesToBeProcessed";
-
-    static String PROCESSED = "trackedSamplesProcessedSuccessfully";
-
-    static String SEPARATOR = " ";
-
-    static String EQUAL = "=";
-
-    private final String filePathSampleDb;
-
-    private final String filePathDatasetDb;
-
-    public FileBasedTrackingDAO(String filePathSampleDb, String filePathDatasetDb)
-    {
-        this.filePathSampleDb = filePathSampleDb;
-        this.filePathDatasetDb = filePathDatasetDb;
-    }
-
-    @Override
-    public void saveTrackingState(TrackingStateDTO state)
-    {
-        List<String> lines = new ArrayList<String>();
-        lines.add(TO_BE_PROCESSED + SEPARATOR
-                + sampleIdsAsString(state.getAlreadyTrackedSampleIdsToBeProcessed()));
-        lines.add(PROCESSED + SEPARATOR
-                + sampleIdsAsString(state.getAlreadyTrackedSampleIdsProcessed()));
-
-        writeLines(new File(filePathSampleDb), lines);
-
-        lines = new ArrayList<String>();
-        for (Map.Entry<String, Long> entry : state.getLastSeenDataSetIdMap().entrySet())
-        {
-            lines.add(entry.getKey() + EQUAL + entry.getValue());
-        }
-        writeLines(new File(filePathDatasetDb), lines);
-    }
-
-    private String sampleIdsAsString(Collection<Long> sampleIds)
-    {
-        return StringUtils.join(sampleIds, SEPARATOR);
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public TrackingStateDTO getTrackingState()
-    {
-        try
-        {
-            TrackingStateDTO state = new TrackingStateDTO();
-
-            Properties props = PropertyIOUtils.loadProperties(filePathDatasetDb);
-            TreeMap<String, Long> propsMap = new TreeMap<String, Long>();
-            for (Object o : props.keySet())
-            {
-                propsMap.put(o.toString(), Long.parseLong(props.get(o).toString()));
-            }
-            state.setLastSeenProperties(props);
-            state.setLastSeenDataSetIdMap(propsMap);
-
-            List<String> lines = IOUtils.readLines(new FileReader(filePathSampleDb));
-            String[] toBeProcessed = lines.get(0).split(SEPARATOR);
-            String[] processed = lines.get(1).split(SEPARATOR);
-            state.setAlreadyTrackedSampleIdsToBeProcessed(parseIds(toBeProcessed));
-            state.setAlreadyTrackedSampleIdsProcessed(parseIds(processed));
-
-            return state;
-        } catch (Exception e)
-        {
-            throw LogUtils.environmentError("Incorrect file format", e);
-        }
-    }
-
-    private static Set<Long> parseIds(String[] array)
-    {
-        Set<Long> ids = new TreeSet<Long>();
-        for (int i = 1; i < array.length; i++)
-        {
-            ids.add(Long.parseLong(array[i]));
-        }
-        return ids;
-    }
-
-    private static void writeLines(File file, List<String> lines)
-    {
-        try
-        {
-            IOUtils.writeLines(lines, "\n", new FileOutputStream(file));
-        } catch (IOException ex)
-        {
-            throw LogUtils.environmentError(String.format(
-                    "Cannot save the file %s with content: %s", file.getPath(), lines), ex);
-        }
-    }
-
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/ITrackingDAO.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/ITrackingDAO.java
deleted file mode 100644
index 10ac486dafa..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/ITrackingDAO.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2009 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.tracking.main;
-
-import ch.ethz.bsse.cisd.dsu.tracking.dto.TrackingStateDTO;
-
-/**
- * @author Tomasz Pylak
- */
-public interface ITrackingDAO
-{
-    void saveTrackingState(TrackingStateDTO state);
-
-    TrackingStateDTO getTrackingState();
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/Parameters.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/Parameters.java
deleted file mode 100644
index 2b4d58a0f67..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/Parameters.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright 2016 ETH Zuerich, SIS
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.tracking.main;
-
-import static ch.systemsx.cisd.common.properties.PropertyUtils.getMandatoryProperty;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
-import ch.systemsx.cisd.common.mail.IMailClient;
-import ch.systemsx.cisd.common.mail.MailClient;
-import ch.systemsx.cisd.common.properties.PropertyUtils;
-
-/**
- * @author Tomasz Pylak
- * @author Manuel Kohler
- */
-public class Parameters
-{
-    private static final String OPENBIS_USER = "openbis-user";
-
-    private static final String OPENBIS_PASSWORD = "openbis-password";
-
-    private static final String OPENBIS_SERVER_URL = "openbis-server-url";
-
-    private static final String PERMLINK_URL = "permlink-url";
-
-    private static final String TRACKING_ADMIN_EMAIL = "tracking-admin-email";
-
-    private static final String NOTIFICATION_EMAIL_FROM = "mail.from";
-    
-    private static final String SPACE_WHITELIST = "space-whitelist";
-    
-    private static final String DBM_SPACE_PREFIX = "dbm-space-prefix";
-       
-    // For Development Mode
-    private static final String DEBUG = "debug";
-    
-    private static final String OLD_DATA_SET_BACKLOG_NUMBER = "old-data-set-backlog-number";
-    
-    private static final String DATA_SET_TYPE_LIST = "dataset-type-list";
-
-    private static final String DESTINATION_FOLDER = "destination-folder";
-
-    private static final String DESTINATION_FOLDER_SUFFIX = "destination-folder";
-    
-    private static final String RSYNC_BINARY = "rsync-binary";
-
-    private static final String RSYNC_FLAGS = "rsync-flags";
-    
-    private static final String DSS_ROOT_DIR = "dss-root-dir";
-    
-    private final String openbisUser;
-
-    private final String openbisPassword;
-
-    private final String openbisServerURL;
-
-    private final String permlinkURL;
-
-    private final IMailClient mailClient;
-
-    private final String adminEmail;
-
-    private final String notificationEmail;
-    
-    private final String spaceWhitelist;
-    
-    private final String dbmSpacePrefix;
-    
-    private final boolean debug;
-    
-    private final long oldDataSetBacklogNumber;
-    
-    private final String dataSetTypeList;
-    
-    private final String destinationFolder;
-    
-    private final String rsyncBinary;
-    
-    private final String rsyncFlags;
-    
-    private final String dssRootDir;
-    
-    private final Map<String, String> destinationFolderMap;
-
-    public Parameters(Properties props)
-    {
-        this.openbisUser = getMandatoryProperty(props, OPENBIS_USER);
-        this.openbisPassword = getMandatoryProperty(props, OPENBIS_PASSWORD);
-        this.openbisServerURL = getMandatoryProperty(props, OPENBIS_SERVER_URL);
-        this.permlinkURL = PropertyUtils.getProperty(props, PERMLINK_URL, openbisServerURL);
-        this.mailClient = new MailClient(props);
-        this.adminEmail = PropertyUtils.getProperty(props, TRACKING_ADMIN_EMAIL);
-        this.notificationEmail = PropertyUtils.getProperty(props, NOTIFICATION_EMAIL_FROM);
-        this.spaceWhitelist = PropertyUtils.getProperty(props, SPACE_WHITELIST);
-        this.dbmSpacePrefix = PropertyUtils.getProperty(props, DBM_SPACE_PREFIX);
-        this.debug = PropertyUtils.getBoolean(props, DEBUG, false);
-        this.oldDataSetBacklogNumber = PropertyUtils.getInt(props, OLD_DATA_SET_BACKLOG_NUMBER, 0);
-        this.dataSetTypeList = PropertyUtils.getProperty(props, DATA_SET_TYPE_LIST);
-        this.destinationFolder= PropertyUtils.getProperty(props, DESTINATION_FOLDER);
-        this.rsyncBinary = PropertyUtils.getProperty(props, RSYNC_BINARY);
-        this.rsyncFlags = PropertyUtils.getProperty(props, RSYNC_FLAGS);
-        this.dssRootDir = PropertyUtils.getProperty(props, DSS_ROOT_DIR);
-        
-        this.destinationFolderMap = this.setDataDestinationFolder(props);
-    }
-
-    public String getOpenbisUser()
-    {
-        return openbisUser;
-    }
-
-    public String getOpenbisPassword()
-    {
-        return openbisPassword;
-    }
-
-    public String getOpenbisServerURL()
-    {
-        return openbisServerURL;
-    }
-
-    public IMailClient getMailClient()
-    {
-        return mailClient;
-    }
-
-    public String getPermlinkURL()
-    {
-        return permlinkURL;
-    }
-
-    public String getAdminEmail()
-    {
-        return adminEmail;
-    }
-
-    public String getNotificationEmail()
-    {
-        return notificationEmail;
-    }
-    
-    public String getSpaceWhitelist()
-    {
-        return spaceWhitelist;
-    }
-    
-    public String getDbmSpacePrefix()
-    {
-        return dbmSpacePrefix;
-    }
-    
-    public boolean getDebug() 
-    {
-    	return debug;
-    }
-    
-    public long getoldDataSetBacklogNumber() 
-    {
-    	return oldDataSetBacklogNumber;
-    }    
-    
-    public String getdataSetTypeList()
-    {
-    	return dataSetTypeList;
-    }
-    
-    public String getDestinationFolder()
-    {
-    	return destinationFolder;
-    }
-    
-    public String getRsyncBinary()
-    {
-    	return rsyncBinary;
-    }
-    
-    public String [] getRsyncFlags()
-    {
-    	return rsyncFlags.split("\\s+");
-    }
-    
-    public String getDssRoot()
-    {
-    	return dssRootDir;
-    }
-    
-    public Map<String, String> getDestinationFolderMap() {
-    	return destinationFolderMap;
-    }
-    
-    private Map<String, String> setDataDestinationFolder(Properties properties) {
-        
-    	final Map<String, String> destinationFolderMap = new HashMap<String, String>();
-    	
-    	for (Object key : properties.keySet())
-        {
-            final String propertyKey = (String) key;
-
-            if (propertyKey.endsWith(DESTINATION_FOLDER_SUFFIX))
-            {
-            	String datasetTypePrefix = propertyKey.split("-")[0];
-            	destinationFolderMap.put(datasetTypePrefix, PropertyUtils.getMandatoryProperty(properties, propertyKey));
-            }
-        }
-    	return destinationFolderMap;
-   }
-}
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingBO.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingBO.java
deleted file mode 100644
index d96c507f08d..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingBO.java
+++ /dev/null
@@ -1,801 +0,0 @@
-/*
- * Copyright 2015 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.tracking.main;
-
-import java.io.File;
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.Map.Entry;
-
-import ch.ethz.bsse.cisd.dsu.tracking.dto.TrackedEntities;
-import ch.ethz.bsse.cisd.dsu.tracking.dto.TrackingStateDTO;
-import ch.ethz.bsse.cisd.dsu.tracking.email.Email;
-import ch.ethz.bsse.cisd.dsu.tracking.email.EmailWithSummary;
-import ch.ethz.bsse.cisd.dsu.tracking.email.IEntityTrackingEmailGenerator;
-import ch.ethz.bsse.cisd.dsu.tracking.utils.LogUtils;
-import ch.systemsx.cisd.common.collection.CollectionUtils;
-import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
-import ch.systemsx.cisd.common.exceptions.Status;
-import ch.systemsx.cisd.common.filesystem.rsync.RsyncCopier;
-import ch.systemsx.cisd.common.mail.EMailAddress;
-import ch.systemsx.cisd.common.mail.IMailClient;
-import ch.systemsx.cisd.openbis.generic.shared.ITrackingServer;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetArchivingStatus;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TrackingDataSetCriteria;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TrackingSampleCriteria;
-import ch.systemsx.cisd.openbis.generic.shared.dto.SessionContextDTO;
-import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
-import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.SearchResult;
-// v3 
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions.SampleFetchOptions;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.search.SampleSearchCriteria;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.update.SampleUpdate;
-
-/**
- * @author Tomasz Pylak
- * @author Manuel Kohler
- */
-
-public class TrackingBO
-{
-    private static final String HIGH_PRIORITY_DATA_SET_TYPE = "FASTQ_GZ";
-
-	private static final String ORIGINAL_PATH = "/original/";
-
-    private static final String PROPERTY_RUN_NAME_FOLDER = "RUN_NAME_FOLDER";
-
-    private static final String SEQUENCING_SAMPLE_TYPE = "ILLUMINA_SEQUENCING";
-
-    private static final String FLOW_LANE_SAMPLE_TYPE = "ILLUMINA_FLOW_LANE";
-
-    private static final String PROCESSING_POSSIBLE_PROPERTY_CODE = "LIBRARY_PROCESSING_POSSIBLE";
-
-    private static final String PROCESSING_SUCCESSFUL_PROPERTY_CODE =
-            "LIBRARY_PROCESSING_SUCCESSFUL";
-    
-    private static final String PROPERTY_DATA_TRANSFERRED = "DATA_TRANSFERRED";
-
-    /** The default date format pattern. */
-    public static final String DATE_FORMAT_PATTERN = "yyyy-MM-dd HH:mm:ss";
-
-    private static final String TRUE = "true";
-
-    private final ITrackingServer trackingServer;
-
-    private final IEntityTrackingEmailGenerator emailGenerator;
-
-    private final IMailClient mailClient;
-    
-    public TrackingBO(ITrackingServer trackingServer, IEntityTrackingEmailGenerator emailGenerator,
-            IMailClient mailClient)
-    {
-        this.trackingServer = trackingServer;
-        this.emailGenerator = emailGenerator;
-        this.mailClient = mailClient;
-    }
-
-    public void trackAndNotify(ITrackingDAO trackingDAO, final HashMap<String, String[]> commandLineMap,
-            Parameters params, SessionContextDTO session, IApplicationServerApi v3, String v3SessionToken)
-    {
-        Boolean sendEmails = true;
-        TrackingStateDTO prevTrackingState = trackingDAO.getTrackingState();
-
-        extractCommandLineFlags(commandLineMap);
-        LogUtils.debug("prevTrackingState: " + prevTrackingState.getLastSeenDataSetIdMap().toString());
-
-        TrackedEntities changedEntities = null;
-        List<EmailWithSummary> emailsWithSummary = null;
-
-        if (commandLineMap.get(TrackingClient.CL_PARAMETER_LANES) != null)
-        {
-            String[] laneCodeList = commandLineMap.get(TrackingClient.CL_PARAMETER_LANES);
-            changedEntities = fetchChangedDataSets(prevTrackingState, trackingServer, params,
-                    commandLineMap, laneCodeList, session, v3, v3SessionToken);
-        }
-
-        else if (commandLineMap.get(TrackingClient.CL_PARAMETER_REMOVE_LANES) != null)
-        {
-            sendEmails = false;
-            String[] laneCodeList = commandLineMap.get(TrackingClient.CL_PARAMETER_REMOVE_LANES);
-            changedEntities = fetchChangedDataSets(prevTrackingState, trackingServer, params,
-                    commandLineMap, laneCodeList, session, v3, v3SessionToken);
-        }
-
-        else if (commandLineMap.containsKey(TrackingClient.CL_PARAMETER_ALL))
-        {
-            // changedEntities = fetchChangedEntities(prevTrackingState, trackingServer, commandLineMap, session);
-            System.out.println("This function is deactivated");
-        }
-
-        // just list the potential changed lanes
-        else if (commandLineMap.containsKey(TrackingClient.CL_PARAMETER_CHANGED_LANES))
-        {
-            Map<String, String> changed_lanes = fetchChangedLanes(prevTrackingState, trackingServer, params, session);
-            sendEmails = false;
-
-        } else if (commandLineMap.containsKey(TrackingClient.CL_PARAMETER_LIST_SPACES))
-        {
-            sendEmails = false;
-            String trimmedSpaceWhiteList = "";
-
-            String spaceWhiteList = (params.getSpaceWhitelist());
-            trimmedSpaceWhiteList = spaceWhiteList.replace(" ", "");
-
-            // trim each list element and sort then
-            // String trimmedSpaceList =
-            // Pattern.compile(",")
-            // .splitAsStream(params.getSpaceWhitelist())
-            // .map(String :: trim)
-            // .sorted()
-            // .collect(Collectors.joining(","));
-            System.out.println(trimmedSpaceWhiteList);
-        }
-
-        else
-        {
-            LogUtils.debug("Should never be reached.");
-        }
-
-        if (sendEmails)
-        {
-            emailsWithSummary = emailGenerator.generateDataSetsEmails(changedEntities);
-            sendEmails(emailsWithSummary, mailClient);
-
-        } else
-        {
-            LogUtils.info("Not sending out any emails.");
-        }
-
-        if (!params.getDebug() && changedEntities != null)
-        {
-            LogUtils.info("Saving new state to tracking database.");
-            saveTrackingState(prevTrackingState, changedEntities, trackingDAO);
-        } else
-        {
-            LogUtils.info("Debug mode activated! Won't save anything to the tracking database.");
-        }
-
-    }
-
-    private void extractCommandLineFlags(final HashMap<String, String[]> commandLineMap)
-    {
-        StringBuilder sb = new StringBuilder();
-        for (Map.Entry<String, String[]> entry : commandLineMap.entrySet())
-        {
-            sb.append(entry.getKey() + " ");
-            if (entry.getValue() != null)
-            {
-                for (String value : entry.getValue())
-                {
-                    sb.append(value);
-                }
-            }
-        }
-        LogUtils.info("Got these command line flags: '" + sb + "'");
-    }
-
-    private static void sendEmails(List<EmailWithSummary> emailsWithSummary, IMailClient mailClient)
-    {
-        for (EmailWithSummary emailWithSummary : emailsWithSummary)
-        {
-            Email email = emailWithSummary.getEmail();
-            try
-            {
-                logEmailSummary(emailWithSummary);
-                sendMessage(mailClient, email);
-            } catch (Exception ex)
-            {
-                sendErrorReport(mailClient, ex, email);
-            }
-        }
-    }
-
-    private static void logEmailSummary(EmailWithSummary emailWithSummary)
-    {
-        LogUtils.info("Sending an email [" + emailWithSummary.getEmail().getSubject()
-                + "]. Summary:\n" + emailWithSummary.getSummary());
-    }
-
-    // This email could not be sent, most probably the recipient addresses were
-    // incorrect.
-    // We send the email to the administrator "replyTo' address, the admin should
-    // forward it to the right recipient.
-    private static void sendErrorReport(IMailClient mailClient, Exception exception, Email email)
-    {
-        StringBuilder errorReportContentBuilder = new StringBuilder();
-        appendLine(errorReportContentBuilder, "Dear openBIS Admin,");
-        appendLine(errorReportContentBuilder,
-                "This email has been generated automatically from the openBIS Changes Tracking system.");
-        appendLine(errorReportContentBuilder, "There was a failure while trying to send the email:");
-        appendLine(errorReportContentBuilder, exception.getMessage() == null ? "<no details>"
-                : exception.getMessage());
-        appendLine(errorReportContentBuilder,
-                "The possible reason is that the recipient address is not valid.");
-        appendLine(errorReportContentBuilder,
-                "If you know the address of the recipient please correct it and forward this email to him.");
-        appendLine(errorReportContentBuilder,
-                "!!! Note that the Tracking System will not try to send this email again !!!");
-        appendLine(errorReportContentBuilder,
-                "Please correct the recipient email address in openBIS to avoid similar problems in future.");
-        appendLine(errorReportContentBuilder, "");
-        appendLine(errorReportContentBuilder, "Subject:    " + email.getSubject());
-        appendLine(errorReportContentBuilder, "Recipients: "
-                + CollectionUtils.abbreviate(email.getRecipients(), -1));
-        appendLine(errorReportContentBuilder, "");
-
-        appendLine(errorReportContentBuilder, "Original content: ");
-        appendLine(errorReportContentBuilder, email.getContent());
-        String errorReportContent = errorReportContentBuilder.toString();
-
-        Email errorReportEmail =
-                new Email("[Tracking] Sending an email failed", errorReportContent, null, email
-                        .getFromOrNull(), email.getReplyToOrNull());
-        sendMessage(mailClient, errorReportEmail);
-    }
-
-    private static void sendMessage(IMailClient mailClient, Email email)
-    {
-        String subject = email.getSubject();
-        String content = email.getContent();
-        EMailAddress replyToOrNull = email.getReplyToOrNull();
-        EMailAddress fromOrNull = email.getFromOrNull();
-        EMailAddress[] recipients = email.getRecipients();
-
-        mailClient.sendEmailMessage(subject, content, replyToOrNull, fromOrNull, recipients);
-
-        // sendEmailMessage(String subject, String content, EMailAddress replyToOrNull,
-        // EMailAddress fromOrNull, EMailAddress... recipients)
-
-    }
-
-    private static void appendLine(StringBuilder sb, String msg)
-    {
-        sb.append(msg);
-        sb.append("\n");
-    }
-
-    private static void saveTrackingState(TrackingStateDTO prevTrackingState,
-            TrackedEntities changedEntities, ITrackingDAO trackingDAO)
-    {
-        TrackingStateDTO state = TrackingStateUpdateHelper.calcNewTrackingState(prevTrackingState, changedEntities);
-
-        trackingDAO.saveTrackingState(state);
-    }
-
-    // gets *all* data sets
-    private static TrackedEntities fetchChangedEntities(TrackingStateDTO trackingState,
-            ITrackingServer trackingServer, HashMap<String, String[]> clMap, SessionContextDTO session)
-    {
-
-        TrackingDataSetCriteria dataSetCriteria =
-                new TrackingDataSetCriteria(FLOW_LANE_SAMPLE_TYPE, trackingState
-                        .getLastSeenDatasetId());
-        List<AbstractExternalData> dataSets =
-                trackingServer.listDataSets(session.getSessionToken(), dataSetCriteria);
-
-        HashMap<String, ArrayList<Long>> changedTrackingMap = new HashMap<String, ArrayList<Long>>();
-
-        // Loop over all new data sets
-        for (AbstractExternalData d : dataSets)
-        {
-            addDataSetTo(changedTrackingMap, d);
-        }
-
-        return gatherTrackedEntities(trackingState, trackingServer, session, dataSets, changedTrackingMap);
-    }
-
-    private static Map<String, String> fetchChangedLanes(TrackingStateDTO trackingState,
-            ITrackingServer trackingServer, Parameters params, SessionContextDTO session)
-    {
-        long usableDataSetId = getUsableDataSetId(trackingState, params);
-        LogUtils.info("Using maximum DS techId " + usableDataSetId + " for search of changed data sets");
-
-        TrackingDataSetCriteria dataSetCriteria =
-                new TrackingDataSetCriteria(FLOW_LANE_SAMPLE_TYPE, usableDataSetId);
-        List<AbstractExternalData> dataSets =
-                trackingServer.listDataSets(session.getSessionToken(), dataSetCriteria);
-
-        Map<String, String> changedLanesMap = new HashMap<String, String>();
-
-        // Loop over all new data sets
-        for (AbstractExternalData d : dataSets)
-        {
-            Long newDataSetID = d.getId();
-            Sample lane = d.getSample();
-            String lanePermId = lane.getPermId();
-            String laneSpace = lane.getIdentifier().split("/")[1]; // Bugfix for 20.10.X that is not returning the space object
-            Long maxDatasetIdForSample = getMaxDataSetIdForSample(trackingState, lanePermId);
-
-            // Check if the given lanes/samples have data sets which are newer than the last seen one (= maxDatasetIdForSample)
-            if (newDataSetID > maxDatasetIdForSample)
-            {
-                SampleIdentifier currentLaneId = new SampleIdentifier(d.getSampleCode());
-                Sample flowcell = lane.getContainer();
-                String runNameFolder = "";
-                List<IEntityProperty> flowcellProperties = flowcell.getProperties();
-                for (IEntityProperty property : flowcellProperties)
-                {
-                    if (property.getPropertyType().getCode().equals(PROPERTY_RUN_NAME_FOLDER))
-                    {
-                        runNameFolder = property.getValue();
-                        break;
-                    }
-                }
-                String laneString = currentLaneId.toString().split(":")[1];
-                changedLanesMap.put(runNameFolder + ":" + laneString, laneSpace + " " + lane.getCode());
-                LogUtils.debug("DataSetID: " + newDataSetID + " of NEW data Sets > MAX DataSet id for this sample: " + maxDatasetIdForSample);
-            }
-        }
-
-        Set<Map.Entry<String, String>> entrySet = changedLanesMap.entrySet();
-        for (Entry<String, String> entry : entrySet)
-        {
-            // needed for the integration of the openBIS webapp
-            System.out.println(entry.getKey() + " " + entry.getValue());
-        }
-        LogUtils.debug("changedLanesMap: " + changedLanesMap.toString());
-        return changedLanesMap;
-    }
-
-    private static TrackedEntities fetchChangedDataSets(TrackingStateDTO trackingState,
-            ITrackingServer trackingServer, Parameters params, final HashMap<String, String[]> commandLineMap,
-            String[] laneCodeList, SessionContextDTO session, IApplicationServerApi v3, String v3SessionToken)
-    {
-        long usableDataSetId = getUsableDataSetId(trackingState, params);
-
-        List<String> spaceWhiteList = Arrays.asList(params.getSpaceWhitelist().split("\\s*,\\s*"));
-        List<String> datasetTypeList = Arrays.asList(params.getdataSetTypeList().split("\\s*,\\s*"));
-
-        LogUtils.info("Using maximum DS techId " + usableDataSetId + " for search of changed data sets");
-
-        TrackingDataSetCriteria dataSetCriteria =
-                new TrackingDataSetCriteria(FLOW_LANE_SAMPLE_TYPE, usableDataSetId);
-        List<AbstractExternalData> dataSets =
-                trackingServer.listDataSets(session.getSessionToken(), dataSetCriteria);
-
-        ArrayList<SampleIdentifier> filterList = new ArrayList<SampleIdentifier>();
-        ArrayList<AbstractExternalData> filteredDataSets = new ArrayList<AbstractExternalData>();
-        ArrayList<AbstractExternalData> toTransferDataSets = new ArrayList<AbstractExternalData>();
-        ArrayList<AbstractExternalData> toTransferDataSetsHighPriority = new ArrayList<AbstractExternalData>();
-
-
-        // changedTrackingMap is used to report back which lanes are written back to the DB which have changed
-        HashMap<String, ArrayList<Long>> changedTrackingMap = new HashMap<String, ArrayList<Long>>();
-
-        // Loop over all lanes and create a list of relevant lanes
-        for (String lane : laneCodeList)
-        {
-            LogUtils.info("Searching for new data sets which belong to " + lane);
-            filterList.add(new SampleIdentifier(lane));
-        }
-
-        // Loop over all new data sets
-        for (AbstractExternalData d : dataSets)
-        {
-            Long newDataSetID = d.getId();
-            SampleIdentifier currentLaneId = new SampleIdentifier(d.getSampleCode());
-            String lanePermId = d.getSample().getPermId();
-            Long maxDatasetIdForSample = getMaxDataSetIdForSample(trackingState, lanePermId);
-
-            // Check if the given lanes/samples have data sets which are newer than the last seen one (= maxDatasetIdForSample)
-            if (filterList.contains(currentLaneId) && newDataSetID > maxDatasetIdForSample)
-            {
-                LogUtils.debug("DataSetID: " + newDataSetID + " of NEW data Sets > MAX DataSet id for this sample: " + maxDatasetIdForSample);
-                filteredDataSets.add(d);
-                addDataSetTo(changedTrackingMap, d);
-
-                if (spaceWhiteList.contains(d.getSpace().getCode()) || d.getSpace().getCode().startsWith(params.getDbmSpacePrefix()))
-                {
-                    if (datasetTypeList.contains(d.getDataSetType().getCode()))
-                    {
-                        if (d.tryGetAsDataSet().getStatus().equals(DataSetArchivingStatus.AVAILABLE)
-                                || d.tryGetAsDataSet().getStatus().equals(DataSetArchivingStatus.LOCKED))
-                        {                            
-                        	// Here we distinguish between data sets types of low and high priority
-                            if (d.getDataSetType().getCode().equals(HIGH_PRIORITY_DATA_SET_TYPE)) {
-                                toTransferDataSetsHighPriority.add(d);                            	
-                            }
-                            else {
-                                toTransferDataSets.add(d);
-                            }
-                            
-                        } else
-                        {
-                            LogUtils.error("Data set " + d.getCode() + " eventually archived!");
-                        }
-                    }
-                }
-            }
-        }
-
-        LogUtils.info("TO_TRANSFER: Found " + toTransferDataSets.size()
-                + " data sets which are in the list of 'space-whitelist' and could be transferred to an extra folder");
-
-        if (commandLineMap.containsKey(TrackingClient.CL_PARAMETER_COPY_DATA_SETS))
-        {
-        	// Data Sets with higher priority get transferred first 
-            // extraDataSetCopy(params, toTransferDataSetsHighPriority);
-            // extraDataSetCopy(params, toTransferDataSets);
-            ArrayList<AbstractExternalData> toTransferDataSetsAll = new ArrayList<>(toTransferDataSetsHighPriority.size() + toTransferDataSets.size());
-            toTransferDataSetsAll.addAll(toTransferDataSetsHighPriority);
-            toTransferDataSetsAll.addAll(toTransferDataSets);
-            if (!toTransferDataSetsAll.isEmpty()) {
-                extraSCICOREDataSetListCopy(params, toTransferDataSetsAll);
-            }
-        }
-
-
-        LogUtils.info("Found " + filteredDataSets.size() + " data sets which are connected to samples in " + filterList.toString());       
-        setLaneProperties(changedTrackingMap, v3, v3SessionToken);
-        
-        return gatherTrackedEntities(trackingState, trackingServer, session, filteredDataSets, changedTrackingMap);
-    }
-    
-   
-    private static SearchResult<ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.Sample> searchForSamples(String permId, String v3sessionToken, IApplicationServerApi v3)
-    {
-    	SampleSearchCriteria criterion = new SampleSearchCriteria();
-        criterion.withPermId().thatEquals(permId);
-        
-        SampleFetchOptions fetchOptions = new SampleFetchOptions();       
-        fetchOptions.withProperties();
-  
-        return v3.searchSamples(v3sessionToken, criterion, fetchOptions);
-    }
-
-    
-    private static void setLaneProperties(HashMap<String, ArrayList<Long>> changedTrackingMap, IApplicationServerApi v3, String v3sessionToken) {
-    	
-		for (String lanePermId : changedTrackingMap.keySet()) {
-			 SearchResult<ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.Sample> samples = searchForSamples(lanePermId, v3sessionToken, v3);
-			 
-			 for (ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.Sample sample : samples.getObjects())
-	         {
-				 SampleUpdate sampleToUpdate = new SampleUpdate();
-				 sampleToUpdate.setSampleId(sample.getPermId());
-				 sampleToUpdate.setProperty(PROPERTY_DATA_TRANSFERRED, getCurrentDateTime());
-
-	             v3.updateSamples(v3sessionToken, Arrays.asList(sampleToUpdate));
-	         }			
-		}
-	}
-
-    
-    private static String getCurrentDateTime() {
-    	
-        return new SimpleDateFormat(DATE_FORMAT_PATTERN).format(Calendar.getInstance().getTime());
-    }
-
-    private static final SimpleDateFormat LIST_TIMESTAMP_FORMAT = new SimpleDateFormat("yyyyMMddHHmmssSSSS");
-
-    private static void extraSCICOREDataSetListCopy(Parameters params, List<AbstractExternalData> dataSets) {
-        LogUtils.info("SCICORE dataset listing - Start");
-        String datasetListFileBytes = "";
-        for (AbstractExternalData dataSet:dataSets) {
-            datasetListFileBytes += dataSet.getPermId() + "\n";
-        }
-        LogUtils.info("SCICORE dataset listing - Content : " + datasetListFileBytes);
-
-        String timestamp = LIST_TIMESTAMP_FORMAT.format(new Date());
-        String tempCanonicalPath = null;
-        try {
-            tempCanonicalPath = java.nio.file.Files.createTempDirectory(timestamp + "-tracking-temp-").toFile().getCanonicalPath();
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-        LogUtils.info("SCICORE dataset listing - temp : " + tempCanonicalPath);
-
-        String datasetTypeCode = "FASTQ_GZ";
-        String datasetName = timestamp + "_LIST";
-        File datasetSource = new File(tempCanonicalPath + "/" + datasetName);
-        datasetSource.mkdirs();
-        LogUtils.info("SCICORE dataset listing - datasetSource : " + datasetSource.getPath());
-
-        File datasetListFile = new File(tempCanonicalPath + "/" + datasetName + "/" + timestamp + ".tsv");
-        try {
-            java.nio.file.Files.write(datasetListFile.toPath(), datasetListFileBytes.getBytes());
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-
-        LogUtils.info("SCICORE dataset listing - writing to : " + datasetListFile.getPath());
-
-        File datasetDestination = new File(params.getDestinationFolderMap().get(datasetTypeCode), datasetName);
-        datasetDestination.mkdirs();
-
-        LogUtils.info("SCICORE dataset listing - datasetDestination : " + datasetDestination.getPath());
-
-        RsyncCopier copier = null;
-        File rsyncBinary = new File(params.getRsyncBinary());
-        if (params.getRsyncFlags() != null)
-        {
-            LogUtils.info("SCICORE dataset listing - RSYNC WITH EXTRA PARAMETERS ");
-            List<String> cmdLineOptions = new ArrayList<String>(params.getRsyncFlags().length);
-            Collections.addAll(cmdLineOptions, params.getRsyncFlags());
-            copier = new RsyncCopier(rsyncBinary, null, cmdLineOptions.toArray(new String[cmdLineOptions.size()]));
-        } else
-        {
-            LogUtils.info("SCICORE dataset listing - RSYNC NO EXTRA PARAMETERS ");
-            copier = new RsyncCopier(rsyncBinary, (File) null, "");
-        }
-
-        final long start = System.currentTimeMillis();
-        LogUtils.info("SCICORE dataset listing - BEFORE RSYNC");
-        Status status = copier.copyContent(datasetSource, datasetDestination, null, null);
-        final long end = System.currentTimeMillis();
-        LogUtils.info("SCICORE dataset listing - AFTER RSYNC TIME: " + (end-start) + " millis.");
-        LogUtils.info("SCICORE dataset listing - AFTER RSYNC STATUS: " + status.toString());
-
-        if (status.isError())
-        {
-            String exceptionMsg =
-                    (status == null) ? "" : " Unexpected exception has occured: "
-                            + status.toString();
-
-            List<EMailAddress> adminEmails = new ArrayList<EMailAddress>();
-            for (String adminEmail : params.getAdminEmail().split(","))
-            {
-                adminEmails.add(new EMailAddress(adminEmail.trim()));
-            }
-
-            EnvironmentFailureException ret =
-                    LogUtils.environmentError(
-                            "Data transfer failed for %s. %s",
-                            datasetName, exceptionMsg);
-
-            IMailClient emailClient = params.getMailClient();
-            emailClient.sendEmailMessage("GFB Tracker: Data transfer problem",
-                    ret.getLocalizedMessage(), null,
-                    new EMailAddress(params.getNotificationEmail()),
-                    adminEmails.toArray(new EMailAddress[0]));
-        }
-// MARKER FILE CREATION FAILED
-//        else {
-//            File datasetDestinationMarkerFile = new File(params.getDestinationFolderMap().get(datasetTypeCode), ".MARKER_is_finished_" + datasetName);
-//            try {
-//                datasetDestinationMarkerFile.createNewFile();
-//            } catch (IOException e) {
-//                throw new RuntimeException(e);
-//            }
-//        }
-    }
-
-	private static void extraDataSetCopy(Parameters params, List<AbstractExternalData> dataSets)
-    {
-        RsyncCopier copier = null;
-        File rsyncBinary = new File(params.getRsyncBinary());
-        String base_path_string = params.getDssRoot();
-        if (params.getRsyncFlags() != null)
-        {
-            List<String> cmdLineOptions = new ArrayList<String>(params.getRsyncFlags().length);
-            Collections.addAll(cmdLineOptions, params.getRsyncFlags());
-            copier = new RsyncCopier(rsyncBinary, null, cmdLineOptions.toArray(new String[cmdLineOptions.size()]));
-        } else
-        {
-            LogUtils.info("No extra rsync parameters found.");
-            copier = new RsyncCopier(rsyncBinary, (File) null, "");
-        }
-
-        for (AbstractExternalData ds : dataSets)
-        {
-            File source = new File(base_path_string, ds.tryGetAsDataSet().getFullLocation() + ORIGINAL_PATH);
-            File targetName = new File(ds.tryGetAsDataSet().getFullLocation());
-            
-            String datasetTypCode = ds.getDataSetType().getCode();
-
-            File omittedSource = new File(base_path_string, ds.tryGetAsDataSet().getFullLocation() + ORIGINAL_PATH + source.list()[0]);
-
-            File destination = new File(params.getDestinationFolderMap().get(datasetTypCode), targetName.getName());
-
-            if (!destination.exists())
-            {
-                destination.mkdirs();
-            }
-
-            final long start = System.currentTimeMillis();
-            LogUtils.info("Start rsyncing " + ds.getCode() + " from " + omittedSource.getPath() + " to " + destination.getPath());
-
-            // this has always an --archive flag added
-            // Status status = copier.copyDirectoryImmutably(source, destination, targetName.getName(), CopyModeExisting.OVERWRITE);
-
-            Status status = copier.copyContent(omittedSource, destination, null, null);
-
-            if (status.isError())
-            {
-                String exceptionMsg =
-                        (status == null) ? "" : " Unexpected exception has occured: "
-                                + status.toString();
-                
-                List<EMailAddress> adminEmails = new ArrayList<EMailAddress>();
-                    for (String adminEmail : params.getAdminEmail().split(","))
-                    {
-                        adminEmails.add(new EMailAddress(adminEmail.trim()));
-                    }
-
-                    EnvironmentFailureException ret =
-                            LogUtils.environmentError(
-                                    "Data transfer failed for %s. %s",
-                                    ds.getCode(), exceptionMsg);
-                    
-                    IMailClient emailClient = params.getMailClient();
-                    emailClient.sendEmailMessage("GFB Tracker: Data transfer problem",
-                            ret.getLocalizedMessage(), null,
-                            new EMailAddress(params.getNotificationEmail()),
-                            adminEmails.toArray(new EMailAddress[0]));
-            }
-
-            LogUtils.info(String.format("Got status: " + status + " for " + ds.getCode() + ", finished after %.2f s",
-                    (System.currentTimeMillis() - start) / 1000.0));
-        }
-    }
-
-    private static long getMaxDataSetId(TrackingStateDTO trackingState)
-    {
-        long maxDataSetId = 0;
-        for (Long id : trackingState.getLastSeenDataSetIdMap().values())
-        {
-            maxDataSetId = Math.max(maxDataSetId, id);
-        }
-        // return 0;
-        return maxDataSetId;
-    }
-
-    /**
-     * Little helper function which reduces the number of data sets we are looking at. This can be configured by value 'old-data-set-backlog-number'
-     * in the service.properties. Without this value the calls get slower and slower with the growing data set amount. But we can assume that older
-     * data sets already got triggered earlier to send out an email. If not, the sample is so old that we do not want to send an email.
-     */
-    private static long getUsableDataSetId(TrackingStateDTO trackingState, Parameters params)
-    {
-        long maxDataSetId = getMaxDataSetId(trackingState);
-        long oldDataSetBacklogNumber = params.getoldDataSetBacklogNumber();
-        long usableDataSetId = Math.max(maxDataSetId - oldDataSetBacklogNumber, 0);
-        return usableDataSetId;
-    }
-
-    private static long getMaxDataSetIdForSample(TrackingStateDTO trackingState, String lanePermId)
-    {
-        long maxDataSetId = 0;
-        Long maxDatasetIdForSample = trackingState.getLastSeenDataSetIdMap().get(lanePermId);
-        if (maxDatasetIdForSample != null)
-        {
-            return maxDatasetIdForSample;
-        } else
-            return maxDataSetId;
-    }
-
-    private static TrackedEntities gatherTrackedEntities(TrackingStateDTO trackingState,
-            ITrackingServer trackingServer, SessionContextDTO session,
-            List<AbstractExternalData> dataSets, HashMap<String, ArrayList<Long>> changedTrackingMap)
-    {
-        List<Sample> sequencingSamplesToBeProcessed =
-                listSequencingSamples(PROCESSING_POSSIBLE_PROPERTY_CODE, trackingState
-                        .getAlreadyTrackedSampleIdsToBeProcessed(), trackingServer, session);
-        List<Sample> sequencingSamplesSuccessfullyProcessed =
-                listSequencingSamples(PROCESSING_SUCCESSFUL_PROPERTY_CODE, trackingState
-                        .getAlreadyTrackedSampleIdsProcessed(), trackingServer, session);
-        return new TrackedEntities(sequencingSamplesToBeProcessed, sequencingSamplesSuccessfullyProcessed, dataSets,
-                changedTrackingMap);
-    }
-
-    private static void addDataSetTo(HashMap<String, ArrayList<Long>> changedTrackingMap, AbstractExternalData dataSet)
-    {
-        Sample currentLane = dataSet.getSample();
-        String lanePermId = currentLane.getPermId();
-
-        LogUtils.debug("Found lane " + currentLane.getCode() + " with permId: " + lanePermId + " with new DS techId " + dataSet.getId()
-                + " and DS permId " + dataSet.getPermId());
-        ArrayList<Long> existingList = changedTrackingMap.get(lanePermId);
-        if (existingList == null)
-        {
-            existingList = new ArrayList<Long>();
-            changedTrackingMap.put(lanePermId, existingList);
-        }
-        existingList.add(dataSet.getId());
-    }
-
-    private static List<Sample> listSequencingSamples(String propertyTypeCode,
-            Set<Long> alreadyTrackedSampleIds, ITrackingServer trackingServer,
-            SessionContextDTO session)
-    {
-        return listSamples(SEQUENCING_SAMPLE_TYPE, propertyTypeCode, TRUE, alreadyTrackedSampleIds,
-                trackingServer, session);
-    }
-
-    private static List<Sample> listSamples(String sampleType, String propertyTypeCode,
-            String propertyValue, Set<Long> alreadyTrackedSampleIds,
-            ITrackingServer trackingServer, SessionContextDTO session)
-    {
-        TrackingSampleCriteria criteria =
-                new TrackingSampleCriteria(sampleType, propertyTypeCode, propertyValue,
-                        alreadyTrackedSampleIds);
-        return trackingServer.listSamples(session.getSessionToken(), criteria);
-    }
-
-    static class TrackingStateUpdateHelper
-    {
-
-        static TrackingStateDTO calcNewTrackingState(TrackingStateDTO prevState,
-                TrackedEntities changedEntities)
-        {
-            TrackingStateDTO state = new TrackingStateDTO();
-            Set<Long> sequencingSamplesToBeProcessed =
-                    new TreeSet<Long>(prevState.getAlreadyTrackedSampleIdsToBeProcessed());
-            addNewSampleIds(sequencingSamplesToBeProcessed, changedEntities
-                    .getSequencingSamplesToBeProcessed());
-            state.setAlreadyTrackedSampleIdsToBeProcessed(sequencingSamplesToBeProcessed);
-
-            Set<Long> sequencingSamplesProcessed =
-                    new TreeSet<Long>(prevState.getAlreadyTrackedSampleIdsProcessed());
-            addNewSampleIds(sequencingSamplesProcessed, changedEntities
-                    .getSequencingSamplesProcessed());
-            state.setAlreadyTrackedSampleIdsProcessed(sequencingSamplesProcessed);
-
-            TreeMap<String, Long> newTrackingState = new TreeMap<String, Long>();
-
-            HashMap<String, ArrayList<Long>> changedTrackingMap = changedEntities.getChangedTrackingMap();
-            // System.out.println(changedTrackingMap.toString());
-
-            for (Map.Entry<String, ArrayList<Long>> entry : changedTrackingMap.entrySet())
-            {
-                newTrackingState.put(entry.getKey(), Collections.max(entry.getValue()));
-            }
-            // System.out.println(newTrackingState.entrySet().toString());
-
-            for (Map.Entry<String, Long> entry : prevState.getLastSeenDataSetIdMap().entrySet())
-            {
-                if (!newTrackingState.containsKey(entry.getKey()))
-                {
-                    newTrackingState.put(entry.getKey(), entry.getValue());
-                }
-            }
-
-            state.setLastSeenDataSetIdMap(newTrackingState);
-            return state;
-        }
-
-        static TrackingStateDTO calcNewTrackingStateDataSets(HashMap<String, ArrayList<Long>> changedTrackingMap,
-                TrackedEntities changedEntities)
-        {
-            TrackingStateDTO state = new TrackingStateDTO();
-
-            TreeMap<String, Long> newTrackingState = new TreeMap<String, Long>();
-            for (Map.Entry<String, ArrayList<Long>> entry : changedTrackingMap.entrySet())
-            {
-                newTrackingState.put(entry.getKey(), Collections.max(entry.getValue()));
-            }
-            LogUtils.info(newTrackingState.toString());
-
-            state.setLastSeenDataSetIdMap(newTrackingState);
-            return state;
-        }
-
-        private static void addNewSampleIds(Set<Long> alreadyTrackedSampleIdsProcessed,
-                List<Sample> sequencingSamplesProcessed)
-        {
-            for (Sample sample : sequencingSamplesProcessed)
-            {
-                alreadyTrackedSampleIdsProcessed.add(sample.getId());
-            }
-        }
-    }
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingClient.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingClient.java
deleted file mode 100644
index 4a7ce7658c4..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingClient.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * Copyright 2009 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.tracking.main;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Properties;
-
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.CommandLineParser;
-import org.apache.commons.cli.GnuParser;
-import org.apache.commons.cli.HelpFormatter;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.OptionBuilder;
-import org.apache.commons.cli.Options;
-import org.apache.commons.cli.ParseException;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.time.DateUtils;
-
-import ch.ethz.bsse.cisd.dsu.tracking.email.EntityTrackingEmailGenerator;
-import ch.ethz.bsse.cisd.dsu.tracking.email.IEntityTrackingEmailGenerator;
-import ch.ethz.bsse.cisd.dsu.tracking.utils.LogUtils;
-import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi;
-import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
-import ch.systemsx.cisd.common.io.PropertyIOUtils;
-import ch.systemsx.cisd.common.logging.LogInitializer;
-import ch.systemsx.cisd.common.mail.EMailAddress;
-import ch.systemsx.cisd.common.mail.IMailClient;
-import ch.systemsx.cisd.common.shared.basic.string.StringUtils;
-import ch.systemsx.cisd.common.spring.HttpInvokerUtils;
-import ch.systemsx.cisd.openbis.generic.shared.ITrackingServer;
-import ch.systemsx.cisd.openbis.generic.shared.dto.SessionContextDTO;
-
-// v3
-import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi;
-
-/**
- * @author Tomasz Pylak
- * @author Manuel Kohler
- */
-public class TrackingClient
-{
-    private static final String SERVICE_PROPERTIES_FILE = "etc/service.properties";
-
-    private static final String LOCAL_SAMPLE_DB = "etc/tracking-local-database";
-
-    private static final String LOCAL_DATASET_DB = "etc/tracking-sample-database";
-
-    private static final String EMAIL_TEMPLATE_FILE = "etc/email-template.txt";
-
-    private static final String OPENBIS_RMI_TRACKING = "/rmi-tracking";
-
-    public static final String CL_PARAMETER_LANES = "lanes";
-
-    public static final String CL_PARAMETER_ALL = "all";
-
-    public static final String CL_PARAMETER_CHANGED_LANES = "changed_lanes";
-
-    public static final String CL_PARAMETER_COPY_DATA_SETS = "copy_data_sets";
-    
-    public static final String CL_PARAMETER_REMOVE_LANES = "remove";
-    
-    public static final String CL_PARAMETER_LIST_SPACES = "list_spaces";
-    
-    private static IApplicationServerApi v3;
-
-    private static String v3SessionToken;
-    
-    public static void main(String[] args)
-    {
-        try
-        {
-            HashMap<String, String[]> commandLineMap = parseCommandLine(args);
-            track(commandLineMap);
-        } catch (EnvironmentFailureException ex)
-        {
-            LogUtils.notify(ex);
-        } catch (Throwable ex)
-        {
-            LogUtils.notify(ex);
-        }
-    }
-
-    private static HashMap<String, String[]> parseCommandLine(String[] args)
-    {
-        HashMap<String, String[]> commandLineMap = new HashMap<String, String[]>();
-        CommandLineParser parser = new GnuParser();
-
-        Options options = new Options();
-        Option lanes = OptionBuilder.withArgName(CL_PARAMETER_LANES)
-                .hasArg()
-                .withDescription("list of lanes to track")
-                .create(CL_PARAMETER_LANES);
-        lanes.setArgs(Option.UNLIMITED_VALUES);
-        // Option all = new Option(CL_PARAMETER_ALL, "track all lanes, only for testing, never use in production!");
-        
-        Option new_lanes = new Option(CL_PARAMETER_CHANGED_LANES, "only list lanes which have new datasets");
-        
-        Option copy_data_sets = new Option(CL_PARAMETER_COPY_DATA_SETS, "also copy the corresponding data sets to an extra"
-        		+ " folder. Sample must be part of the space which is set in the property 'space-whitelist'. "
-        		+ " Only in combination with parameter \"" + CL_PARAMETER_LANES + "\"");
-        
-        Option remove = OptionBuilder.withArgName(CL_PARAMETER_REMOVE_LANES)
-        		.hasArg()
-        		.withDescription("remove lanes from tracking list and do not send an email")
-        		.create(CL_PARAMETER_REMOVE_LANES);
-        remove.setArgs(Option.UNLIMITED_VALUES);
-
-        Option list_spaces = new Option(CL_PARAMETER_LIST_SPACES, "list spaces which are configured for an extra copy");
-        
-        options.addOption(lanes);
-        // options.addOption(all);
-        options.addOption(new_lanes);
-        options.addOption(copy_data_sets);
-        options.addOption(remove);
-        options.addOption(list_spaces);
-
-        // automatically generate the help statement
-        HelpFormatter formatter = new HelpFormatter();
-        if (args.length < 1)
-        {
-            formatter.printHelp("help", options);
-            System.exit(0);
-        }
-
-        try
-        {
-            CommandLine line = parser.parse(options, args);
-            if (line.hasOption(CL_PARAMETER_LANES))
-            {
-                String[] laneArray = line.getOptionValues(CL_PARAMETER_LANES);
-                commandLineMap.put(CL_PARAMETER_LANES, laneArray);
-            }
-            if (line.hasOption(CL_PARAMETER_ALL))
-            {
-                // commandLineMap.put(CL_PARAMETER_ALL, null);
-                System.out.println("This option is deactivated.");
-
-            }
-            if (line.hasOption(CL_PARAMETER_CHANGED_LANES))
-            {
-                commandLineMap.put(CL_PARAMETER_CHANGED_LANES, null);
-            }
-            if (line.hasOption(CL_PARAMETER_COPY_DATA_SETS))
-            {
-            	commandLineMap.put(CL_PARAMETER_COPY_DATA_SETS, null);
-            }
-            if (line.hasOption(CL_PARAMETER_LIST_SPACES))
-            {
-            	commandLineMap.put(CL_PARAMETER_LIST_SPACES, null);
-            }
-            if (line.hasOption(CL_PARAMETER_REMOVE_LANES))
-            {
-                commandLineMap.put(CL_PARAMETER_REMOVE_LANES, line.getOptionValues(CL_PARAMETER_REMOVE_LANES));
-            }
-        } catch (ParseException exp)
-        {
-            LogUtils.environmentError("Parsing of command line parameters failed.", exp.getMessage());
-            System.out.println("Parsing of command line parameters failed. " + exp.getMessage());
-            System.exit(1);
-        }
-        return commandLineMap;
-    }
-
-    private static void track(HashMap<String, String[]> commandLineMap)
-    {
-        LogInitializer.init();
-        Properties props = PropertyIOUtils.loadProperties(SERVICE_PROPERTIES_FILE);
-        Parameters params = new Parameters(props);
-
-        ITrackingServer trackingServer = createOpenBISTrackingServer(params);
-        SessionContextDTO session = authentificateInOpenBIS(params, trackingServer);
-        // also login to the v3 API 
-        IApplicationServerApi v3 = initV3(params);
-        v3SessionToken = v3.login(params.getOpenbisUser(), params.getOpenbisPassword());
-       
-
-        IEntityTrackingEmailGenerator emailGenerator =
-                new EntityTrackingEmailGenerator(props, retrieveEmailTemplate(), session);
-        IMailClient mailClient = params.getMailClient();
-        TrackingBO trackingBO = new TrackingBO(trackingServer, emailGenerator, mailClient);
-
-        ITrackingDAO trackingDAO = new FileBasedTrackingDAO(LOCAL_SAMPLE_DB, LOCAL_DATASET_DB);
-
-        trackingBO.trackAndNotify(trackingDAO, commandLineMap, params, session, v3, v3SessionToken);
-    }
-
-    private static ITrackingServer createOpenBISTrackingServer(Parameters params)
-    {
-        String serviceURL = params.getOpenbisServerURL() + OPENBIS_RMI_TRACKING;
-        return HttpInvokerUtils.createServiceStub(ITrackingServer.class, serviceURL,
-                5 * DateUtils.MILLIS_PER_MINUTE);
-    }
-
-    private static SessionContextDTO authentificateInOpenBIS(Parameters params,
-            ITrackingServer trackingServer)
-    {
-        try
-        {
-            String openbisUser = params.getOpenbisUser();
-            SessionContextDTO session =
-                    trackingServer.tryAuthenticate(openbisUser, params.getOpenbisPassword());
-            if (session == null)
-            {
-                throw createAuthentificationException(params, null);
-            }
-            trackingServer.setBaseIndexURL(session.getSessionToken(), params.getPermlinkURL());
-            return session;
-        } catch (Exception ex)
-        {
-            throw createAuthentificationException(params, ex);
-        }
-    }
-
-    private static String retrieveEmailTemplate()
-    {
-        try
-        {
-            return IOUtils.toString(new FileReader(new File(EMAIL_TEMPLATE_FILE)));
-        } catch (FileNotFoundException ex)
-        {
-            throw LogUtils.environmentError("Couldn't find email template file '%s'.",
-                    EMAIL_TEMPLATE_FILE);
-        } catch (IOException ex)
-        {
-            throw LogUtils.environmentError(
-                    "Exception has occured while trying to read template file '%s':%s",
-                    EMAIL_TEMPLATE_FILE, ex.getMessage());
-        }
-    }
-
-    private static EnvironmentFailureException createAuthentificationException(Parameters params,
-            Exception exOrNull)
-    {
-        String exceptionMsg =
-                (exOrNull == null) ? "" : " Unexpected exception has occured: "
-                        + exOrNull.getMessage();
-
-        EnvironmentFailureException ret =
-                LogUtils.environmentError(
-                        "Cannot authentificate in openBIS as a user '%s'. Check that the password is correct and that openBIS service URL is correct.%s",
-                        params.getOpenbisUser(), exceptionMsg);
-
-        if (false == StringUtils.isBlank(params.getAdminEmail()))
-        {
-            List<EMailAddress> adminEmails = new ArrayList<EMailAddress>();
-            for (String adminEmail : params.getAdminEmail().split(","))
-            {
-                adminEmails.add(new EMailAddress(adminEmail.trim()));
-            }
-
-            IMailClient emailClient = params.getMailClient();
-            emailClient.sendEmailMessage("[DSU Tracker] DSU Tracking client NOT working",
-                    ret.getLocalizedMessage(), null,
-                    new EMailAddress(params.getNotificationEmail()),
-                    adminEmails.toArray(new EMailAddress[0]));
-        }
-        return ret;
-    }
-    
-    private static IApplicationServerApi initV3(Parameters params) {
-        int TIMEOUT = 30000;
-        v3 = HttpInvokerUtils
-                .createServiceStub(IApplicationServerApi.class, params.getOpenbisServerURL()
-                        + IApplicationServerApi.SERVICE_URL, TIMEOUT);
-        return v3;
-   }
-}
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/utils/LogUtils.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/utils/LogUtils.java
deleted file mode 100644
index 1121a7d570c..00000000000
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/utils/LogUtils.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright 2009 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.tracking.utils;
-
-import org.apache.log4j.Logger;
-
-import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
-import ch.systemsx.cisd.common.logging.LogCategory;
-import ch.systemsx.cisd.common.logging.LogFactory;
-
-/**
- * @author Tomasz Pylak
- */
-public class LogUtils
-{
-    private static final Logger notificationLog = LogFactory.getLogger(LogCategory.NOTIFY,
-            LogUtils.class);
-
-    private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION,
-            LogUtils.class);
-
-    public static void notify(EnvironmentFailureException ex)
-    {
-        String causeMsg =
-                (ex.getCause() == null) ? "" : "Error cause: " + ex.getCause().getMessage();
-        String fullMsg =
-                "An environment exception occured while trying to send emails with changes.\n"
-                        + "Check and correct the configuration.\n" + "Error details: "
-                        + ex.getMessage() + "\n" + causeMsg;
-        notify(ex, fullMsg);
-    }
-
-    public static void notify(Throwable ex)
-    {
-        String fullMsg =
-                "An unexpected exception occured while trying to send emails with changes.\n"
-                        + "Error details: " + ex.getMessage();
-        notify(ex, fullMsg);
-    }
-
-    private static void notify(Throwable ex, String fullMsg)
-    {
-        ex.printStackTrace();
-        notificationLog.error(fullMsg);
-    }
-
-    public static EnvironmentFailureException environmentError(String message, Throwable exception)
-    {
-        String fullMsg =
-                message + " The following exception has been thrown: " + exception.getMessage();
-        return new EnvironmentFailureException(fullMsg, exception);
-    }
-
-    public static EnvironmentFailureException environmentError(String msgFormat, Object... params)
-    {
-        String fullMsg = String.format(msgFormat, params);
-        return new EnvironmentFailureException(fullMsg);
-    }
-
-    public static void info(String msg)
-    {
-        operationLog.info(msg);
-    }
-
-    public static void debug(String msg)
-    {
-        operationLog.debug(msg);
-    }
-    
-    public static void error(String msg)
-    {
-    	operationLog.error(msg);
-    }
-}
diff --git a/deep_sequencing_unit/source/java/service.properties b/deep_sequencing_unit/source/java/service.properties
deleted file mode 100644
index 8d8ac56ed08..00000000000
--- a/deep_sequencing_unit/source/java/service.properties
+++ /dev/null
@@ -1,141 +0,0 @@
-authentication-service = dummy-authentication-service
-
-# The time after which an inactive session is expired by the service (in minutes).
-session-timeout = 720 
-
-# Authorization
-# Supported: 'no-authorization' and 'active-authorization'
-authorization-component-factory = active-authorization
-
-script-folder = ./source/
-
-core-plugins-folder = source/core-plugins
-
-# Supported: currently only 'postgresql' is supported
-database.engine = postgresql
-database.create-from-scratch = false
-# For debugging set this value to true.
-database.script-single-step-mode = false
-database.url-host-part =
-# database.kind = new
-# database.kind = basynthec
-database.kind = dev
-# database.kind = basysbio
-# database.kind = system_test_strict
-# database.kind = system_test_plates_on_demand
-# database.kind = system_test_multi_groups
-database.owner =
-database.owner-password =
-database.admin-user = 
-database.admin-password =
-# Max time (in seconds) to wait for a connection to become available before throwing an exception.
-# Default: 60s, set to -1 to wait indefinitely.
-database.max-wait-for-connection = 
-# Max. number of active database connections. Default: 20. 
-database.max-active-connections =
-# Max. number of idle database connections to keep open. Default: 20.  
-database.max-idle-connections = 
-# Log interval (in seconds) between two regular log entries of the number of active database 
-# connections. Default: 3600.
-database.active-connections-log-interval = 30
-
-# User id of the user used for anonymous login 
-# user-for-anonymous-login = <user id>
-
-crowd.service.host = crowd-bsse.ethz.ch
-crowd.service.port = 8443
-crowd.application.name = lims
-crowd.application.password =
-
-# The database instance local unique identifier. Used when the new database is created.
-database-instance = CISD 
-
-trusted-cross-origin-domains= *
-
-# Comma-separated list of host names and IP addresses of clients on which an INSTANCE_ADMIN
-# user is allowed to change identity
-accepted-remote-hosts-for-identity-change = localhost
-
-
-# Online Help
-#
-# Online help is broken into two sections -- generic and specific. Generic help links back to
-# the CISD. Specific help is provided by the host of the installation
-#
-# OpenBIS needs to know the root URL for the online help and a template for the individual pages.
-# The template should have on parameter, called title, and should be constructed to automatically
-# create the page if it does not already exist.
-# The template can be created by going to the root page, adding a new link to the page, and
-# replacing the title of the new page with the ${title}
-onlinehelp.generic.root-url = https://wiki-bsse.ethz.ch/display/CISDDoc/OnlineHelp
-onlinehelp.generic.page-template = https://wiki-bsse.ethz.ch/pages/createpage.action?spaceKey=CISDDoc&title=${title}&linkCreation=true&fromPageId=40633829
-#onlinehelp.specific.root-url = https://wiki-bsse.ethz.ch/display/CISDDoc/OnlineHelp
-#onlinehelp.specific.page-template = https://wiki-bsse.ethz.ch/pages/createpage.action?spaceKey=CISDDoc&title=${title}&linkCreation=true&fromPageId=40633829
-# ---------------------------------------------------------------------------
-# (optional)  Database Configurations for Query module
-# ---------------------------------------------------------------------------
-
-# Comma separated keys of databases configured for Query module.
-# Each database should have configuration properties prefixed with its key.
-# Mandatory properties for each <database> include: 
-#   <database>.label                - name shown to the openBIS user when adding or editing a customized query
-#		<database>.database-driver      - JDBC Driver of the database (e.g. org.postgresql.Driver)
-#   <database>.database-url	        - JDBC URL to the database (e.g. jdbc:postgresql://localhost/openbis)
-# Optional properties for each <database> include:
-#   <database>.database-user        - name of the database user (default: user.name from system properties)
-#   <database>.database-password    - password of the database user
-#   <database>.creator-minimal-role - minimal role required to create/edit queries on this database (default: POWER_USER)
-#   <database>.data-space           - If NOT specified OBSERVER of any space will be allowed to perform 
-#                                     queries and <creator-minimal-role> of any space will allowed 
-#                                     to create/edit queries on this DB.
-#                                   - If specified only OBSERVER of the space will be allowed to perform 
-#                                     queries and <creator-minimal-role> of the space will allowed 
-#                                     to create/edit queries on this DB.
-query-databases = 1
-
-1.label = openBIS meta data
-#1.data-space = CISD
-#1.creator-minimal-role = SPACE_ADMIN
-1.database-driver = org.postgresql.Driver
-1.database-url = jdbc:postgresql://localhost/openbis_${database.kind}
-#1.database-username =
-#1.database-password =
-
-# ---------------------------------------------------------------------------
-# maintenance plugins configuration
-# ---------------------------------------------------------------------------
-
-# Comma separated names of maintenance plugins.  
-# Each plugin should have configuration properties prefixed with its name.
-# Mandatory properties for each <plugin> include: 
-#   <plugin>.class - Fully qualified plugin class name
-#   <plugin>.interval - The time between plugin executions (in seconds)
-# Optional properties for each <plugin> include:
-#   <plugin>.start - Time of the first execution (HH:mm)
-#   <plugin>.execute-only-once - If true the task will be executed exactly once, 
-#                                interval will be ignored. By default set to false.
-#maintenance-plugins = demo, dynamic-property-evaluator, remove-unused-ad-hoc-vocabulary-terms
-
-demo.class = ch.systemsx.cisd.openbis.generic.server.task.DemoMaintenanceTask
-demo.interval = 60
-#demo.execute-only-once = true
-demo.property_1 = some value
-demo.property_2 = some value 2
-
-#dynamic-property-evaluator.class = ch.systemsx.cisd.openbis.generic.server.task.DynamicPropertyEvaluationMaintenanceTask
-# run daily at midnight  
-#dynamic-property-evaluator.interval = 86400
-#dynamic-property-evaluator.start = 00:00
-# run every 10min
-#dynamic-property-evaluator.interval = 6000
-
-#remove-unused-ad-hoc-vocabulary-terms.class = ch.systemsx.cisd.openbis.generic.server.task.RemoveUnusedUnofficialTermsMaintenanceTask
-## run once every 12 hours
-#remove-unused-ad-hoc-vocabulary-terms.interval = 43200
-## delete unused ad hoc terms older than 7 days
-#remove-unused-ad-hoc-vocabulary-terms.older-than-days = 7
-
-# Name of the file that stores Web Client configuration
-web-client-configuration-file = etc/web-client.properties
-
-jython-version=2.7
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/core-plugins.properties b/deep_sequencing_unit/sourceTest/core-plugins/core-plugins.properties
deleted file mode 100644
index 3067caffb05..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/core-plugins.properties
+++ /dev/null
@@ -1 +0,0 @@
-enabled-modules = dropbox-test, illumina-qgf
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/demo/1/dss/drop-boxes/demo-dropbox/demo-dropbox.py b/deep_sequencing_unit/sourceTest/core-plugins/demo/1/dss/drop-boxes/demo-dropbox/demo-dropbox.py
deleted file mode 100644
index 9862bad460e..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/demo/1/dss/drop-boxes/demo-dropbox/demo-dropbox.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#! /usr/bin/env python
-
-def process(tr):
-    for file in tr.getIncoming().listFiles():
-        openFile = None
-        
-        try:
-            openFile = open(file.getAbsolutePath())
-            content = openFile.read().strip()
-            
-            experiment = tr.createNewExperiment("/BSSE_FLOWCELLS/FLOWCELLS/" + content, "HT_SEQUENCING")
-        finally:
-            if openFile:
-                openFile.close()
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/demo/1/dss/drop-boxes/demo-dropbox/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/demo/1/dss/drop-boxes/demo-dropbox/plugin.properties
deleted file mode 100644
index 563f2302935..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/demo/1/dss/drop-boxes/demo-dropbox/plugin.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-incoming-dir = ${root-dir}/incoming-demo-dropbox
-incoming-data-completeness-condition = auto-detection
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = demo-dropbox.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/body-style.css b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/body-style.css
deleted file mode 100644
index 629f097de8b..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/body-style.css
+++ /dev/null
@@ -1,4 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/css/bootstrap-theme.css b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/css/bootstrap-theme.css
deleted file mode 100644
index ad117356937..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/css/bootstrap-theme.css
+++ /dev/null
@@ -1,384 +0,0 @@
-.btn-default,
-.btn-primary,
-.btn-success,
-.btn-info,
-.btn-warning,
-.btn-danger {
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-
-.btn-default:active,
-.btn-primary:active,
-.btn-success:active,
-.btn-info:active,
-.btn-warning:active,
-.btn-danger:active,
-.btn-default.active,
-.btn-primary.active,
-.btn-success.active,
-.btn-info.active,
-.btn-warning.active,
-.btn-danger.active {
-  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-          box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-}
-
-.btn:active,
-.btn.active {
-  background-image: none;
-}
-
-.btn-default {
-  text-shadow: 0 1px 0 #fff;
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#e6e6e6));
-  background-image: -webkit-linear-gradient(top, #ffffff, 0%, #e6e6e6, 100%);
-  background-image: -moz-linear-gradient(top, #ffffff 0%, #e6e6e6 100%);
-  background-image: linear-gradient(to bottom, #ffffff 0%, #e6e6e6 100%);
-  background-repeat: repeat-x;
-  border-color: #e0e0e0;
-  border-color: #ccc;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
-}
-
-.btn-default:active,
-.btn-default.active {
-  background-color: #e6e6e6;
-  border-color: #e0e0e0;
-}
-
-.btn-primary {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9));
-  background-image: -webkit-linear-gradient(top, #428bca, 0%, #3071a9, 100%);
-  background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%);
-  background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
-  background-repeat: repeat-x;
-  border-color: #2d6ca2;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
-}
-
-.btn-primary:active,
-.btn-primary.active {
-  background-color: #3071a9;
-  border-color: #2d6ca2;
-}
-
-.btn-success {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44));
-  background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #449d44, 100%);
-  background-image: -moz-linear-gradient(top, #5cb85c 0%, #449d44 100%);
-  background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
-  background-repeat: repeat-x;
-  border-color: #419641;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
-}
-
-.btn-success:active,
-.btn-success.active {
-  background-color: #449d44;
-  border-color: #419641;
-}
-
-.btn-warning {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f));
-  background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #ec971f, 100%);
-  background-image: -moz-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
-  background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
-  background-repeat: repeat-x;
-  border-color: #eb9316;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
-}
-
-.btn-warning:active,
-.btn-warning.active {
-  background-color: #ec971f;
-  border-color: #eb9316;
-}
-
-.btn-danger {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c));
-  background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c9302c, 100%);
-  background-image: -moz-linear-gradient(top, #d9534f 0%, #c9302c 100%);
-  background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
-  background-repeat: repeat-x;
-  border-color: #c12e2a;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
-}
-
-.btn-danger:active,
-.btn-danger.active {
-  background-color: #c9302c;
-  border-color: #c12e2a;
-}
-
-.btn-info {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5));
-  background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #31b0d5, 100%);
-  background-image: -moz-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
-  background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
-  background-repeat: repeat-x;
-  border-color: #2aabd2;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
-}
-
-.btn-info:active,
-.btn-info.active {
-  background-color: #31b0d5;
-  border-color: #2aabd2;
-}
-
-.thumbnail,
-.img-thumbnail {
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
-          box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
-}
-
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus,
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
-  background-color: #357ebd;
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd));
-  background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%);
-  background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%);
-  background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
-}
-
-.navbar {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#f8f8f8));
-  background-image: -webkit-linear-gradient(top, #ffffff, 0%, #f8f8f8, 100%);
-  background-image: -moz-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
-  background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);
-  background-repeat: repeat-x;
-  border-radius: 4px;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
-}
-
-.navbar .navbar-nav > .active > a {
-  background-color: #f8f8f8;
-}
-
-.navbar-brand,
-.navbar-nav > li > a {
-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
-}
-
-.navbar-inverse {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#3c3c3c), to(#222222));
-  background-image: -webkit-linear-gradient(top, #3c3c3c, 0%, #222222, 100%);
-  background-image: -moz-linear-gradient(top, #3c3c3c 0%, #222222 100%);
-  background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
-}
-
-.navbar-inverse .navbar-nav > .active > a {
-  background-color: #222222;
-}
-
-.navbar-inverse .navbar-brand,
-.navbar-inverse .navbar-nav > li > a {
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-}
-
-.navbar-static-top,
-.navbar-fixed-top,
-.navbar-fixed-bottom {
-  border-radius: 0;
-}
-
-.alert {
-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-
-.alert-success {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#c8e5bc));
-  background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #c8e5bc, 100%);
-  background-image: -moz-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
-  background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
-  background-repeat: repeat-x;
-  border-color: #b2dba1;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
-}
-
-.alert-info {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#b9def0));
-  background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #b9def0, 100%);
-  background-image: -moz-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
-  background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
-  background-repeat: repeat-x;
-  border-color: #9acfea;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
-}
-
-.alert-warning {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#f8efc0));
-  background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #f8efc0, 100%);
-  background-image: -moz-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
-  background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
-  background-repeat: repeat-x;
-  border-color: #f5e79e;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
-}
-
-.alert-danger {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#e7c3c3));
-  background-image: -webkit-linear-gradient(top, #f2dede, 0%, #e7c3c3, 100%);
-  background-image: -moz-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
-  background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
-  background-repeat: repeat-x;
-  border-color: #dca7a7;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
-}
-
-.progress {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ebebeb), to(#f5f5f5));
-  background-image: -webkit-linear-gradient(top, #ebebeb, 0%, #f5f5f5, 100%);
-  background-image: -moz-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
-  background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
-}
-
-.progress-bar {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9));
-  background-image: -webkit-linear-gradient(top, #428bca, 0%, #3071a9, 100%);
-  background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%);
-  background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
-}
-
-.progress-bar-success {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44));
-  background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #449d44, 100%);
-  background-image: -moz-linear-gradient(top, #5cb85c 0%, #449d44 100%);
-  background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
-}
-
-.progress-bar-info {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5));
-  background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #31b0d5, 100%);
-  background-image: -moz-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
-  background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
-}
-
-.progress-bar-warning {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f));
-  background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #ec971f, 100%);
-  background-image: -moz-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
-  background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
-}
-
-.progress-bar-danger {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c));
-  background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c9302c, 100%);
-  background-image: -moz-linear-gradient(top, #d9534f 0%, #c9302c 100%);
-  background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
-}
-
-.list-group {
-  border-radius: 4px;
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
-          box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
-}
-
-.list-group-item.active,
-.list-group-item.active:hover,
-.list-group-item.active:focus {
-  text-shadow: 0 -1px 0 #3071a9;
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3278b3));
-  background-image: -webkit-linear-gradient(top, #428bca, 0%, #3278b3, 100%);
-  background-image: -moz-linear-gradient(top, #428bca 0%, #3278b3 100%);
-  background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);
-  background-repeat: repeat-x;
-  border-color: #3278b3;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);
-}
-
-.panel {
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
-          box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-
-.panel-default > .panel-heading {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f5f5f5), to(#e8e8e8));
-  background-image: -webkit-linear-gradient(top, #f5f5f5, 0%, #e8e8e8, 100%);
-  background-image: -moz-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
-  background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
-}
-
-.panel-primary > .panel-heading {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd));
-  background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%);
-  background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%);
-  background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
-}
-
-.panel-success > .panel-heading {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#d0e9c6));
-  background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #d0e9c6, 100%);
-  background-image: -moz-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
-  background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
-}
-
-.panel-info > .panel-heading {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#c4e3f3));
-  background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #c4e3f3, 100%);
-  background-image: -moz-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
-  background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
-}
-
-.panel-warning > .panel-heading {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#faf2cc));
-  background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #faf2cc, 100%);
-  background-image: -moz-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
-  background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
-}
-
-.panel-danger > .panel-heading {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#ebcccc));
-  background-image: -webkit-linear-gradient(top, #f2dede, 0%, #ebcccc, 100%);
-  background-image: -moz-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
-  background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
-}
-
-.well {
-  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#e8e8e8), to(#f5f5f5));
-  background-image: -webkit-linear-gradient(top, #e8e8e8, 0%, #f5f5f5, 100%);
-  background-image: -moz-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
-  background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
-  background-repeat: repeat-x;
-  border-color: #dcdcdc;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
-  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
-          box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
-}
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/css/bootstrap-theme.min.css b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/css/bootstrap-theme.min.css
deleted file mode 100644
index cad36b4e600..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/css/bootstrap-theme.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left 0,left 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,0%,#e6e6e6,100%);background-image:-moz-linear-gradient(top,#fff 0,#e6e6e6 100%);background-image:linear-gradient(to bottom,#fff 0,#e6e6e6 100%);background-repeat:repeat-x;border-color:#e0e0e0;border-color:#ccc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0)}.btn-default:active,.btn-default.active{background-color:#e6e6e6;border-color:#e0e0e0}.btn-primary{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3071a9));background-image:-webkit-linear-gradient(top,#428bca,0%,#3071a9,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;border-color:#2d6ca2;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3071a9',GradientType=0)}.btn-primary:active,.btn-primary.active{background-color:#3071a9;border-color:#2d6ca2}.btn-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5cb85c),to(#449d44));background-image:-webkit-linear-gradient(top,#5cb85c,0%,#449d44,100%);background-image:-moz-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;border-color:#419641;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff449d44',GradientType=0)}.btn-success:active,.btn-success.active{background-color:#449d44;border-color:#419641}.btn-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f0ad4e),to(#ec971f));background-image:-webkit-linear-gradient(top,#f0ad4e,0%,#ec971f,100%);background-image:-moz-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;border-color:#eb9316;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffec971f',GradientType=0)}.btn-warning:active,.btn-warning.active{background-color:#ec971f;border-color:#eb9316}.btn-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9534f),to(#c9302c));background-image:-webkit-linear-gradient(top,#d9534f,0%,#c9302c,100%);background-image:-moz-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;border-color:#c12e2a;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc9302c',GradientType=0)}.btn-danger:active,.btn-danger.active{background-color:#c9302c;border-color:#c12e2a}.btn-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5bc0de),to(#31b0d5));background-image:-webkit-linear-gradient(top,#5bc0de,0%,#31b0d5,100%);background-image:-moz-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;border-color:#2aabd2;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff31b0d5',GradientType=0)}.btn-info:active,.btn-info.active{background-color:#31b0d5;border-color:#2aabd2}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#357ebd;background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#357ebd));background-image:-webkit-linear-gradient(top,#428bca,0%,#357ebd,100%);background-image:-moz-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.navbar{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fff),to(#f8f8f8));background-image:-webkit-linear-gradient(top,#fff,0%,#f8f8f8,100%);background-image:-moz-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff8f8f8',GradientType=0);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075)}.navbar .navbar-nav>.active>a{background-color:#f8f8f8}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,0.25)}.navbar-inverse{background-image:-webkit-gradient(linear,left 0,left 100%,from(#3c3c3c),to(#222));background-image:-webkit-linear-gradient(top,#3c3c3c,0%,#222,100%);background-image:-moz-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c',endColorstr='#ff222222',GradientType=0)}.navbar-inverse .navbar-nav>.active>a{background-color:#222}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05)}.alert-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#dff0d8),to(#c8e5bc));background-image:-webkit-linear-gradient(top,#dff0d8,0%,#c8e5bc,100%);background-image:-moz-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);background-repeat:repeat-x;border-color:#b2dba1;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffc8e5bc',GradientType=0)}.alert-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9edf7),to(#b9def0));background-image:-webkit-linear-gradient(top,#d9edf7,0%,#b9def0,100%);background-image:-moz-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;border-color:#9acfea;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffb9def0',GradientType=0)}.alert-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fcf8e3),to(#f8efc0));background-image:-webkit-linear-gradient(top,#fcf8e3,0%,#f8efc0,100%);background-image:-moz-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);background-repeat:repeat-x;border-color:#f5e79e;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fff8efc0',GradientType=0)}.alert-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f2dede),to(#e7c3c3));background-image:-webkit-linear-gradient(top,#f2dede,0%,#e7c3c3,100%);background-image:-moz-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);background-repeat:repeat-x;border-color:#dca7a7;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffe7c3c3',GradientType=0)}.progress{background-image:-webkit-gradient(linear,left 0,left 100%,from(#ebebeb),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#ebebeb,0%,#f5f5f5,100%);background-image:-moz-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb',endColorstr='#fff5f5f5',GradientType=0)}.progress-bar{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3071a9));background-image:-webkit-linear-gradient(top,#428bca,0%,#3071a9,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3071a9',GradientType=0)}.progress-bar-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5cb85c),to(#449d44));background-image:-webkit-linear-gradient(top,#5cb85c,0%,#449d44,100%);background-image:-moz-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff449d44',GradientType=0)}.progress-bar-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5bc0de),to(#31b0d5));background-image:-webkit-linear-gradient(top,#5bc0de,0%,#31b0d5,100%);background-image:-moz-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff31b0d5',GradientType=0)}.progress-bar-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f0ad4e),to(#ec971f));background-image:-webkit-linear-gradient(top,#f0ad4e,0%,#ec971f,100%);background-image:-moz-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffec971f',GradientType=0)}.progress-bar-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9534f),to(#c9302c));background-image:-webkit-linear-gradient(top,#d9534f,0%,#c9302c,100%);background-image:-moz-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc9302c',GradientType=0)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3278b3));background-image:-webkit-linear-gradient(top,#428bca,0%,#3278b3,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;border-color:#3278b3;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3278b3',GradientType=0)}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.panel-default>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f5f5f5),to(#e8e8e8));background-image:-webkit-linear-gradient(top,#f5f5f5,0%,#e8e8e8,100%);background-image:-moz-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#ffe8e8e8',GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#357ebd));background-image:-webkit-linear-gradient(top,#428bca,0%,#357ebd,100%);background-image:-moz-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#dff0d8),to(#d0e9c6));background-image:-webkit-linear-gradient(top,#dff0d8,0%,#d0e9c6,100%);background-image:-moz-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffd0e9c6',GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9edf7),to(#c4e3f3));background-image:-webkit-linear-gradient(top,#d9edf7,0%,#c4e3f3,100%);background-image:-moz-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffc4e3f3',GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fcf8e3),to(#faf2cc));background-image:-webkit-linear-gradient(top,#fcf8e3,0%,#faf2cc,100%);background-image:-moz-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fffaf2cc',GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f2dede),to(#ebcccc));background-image:-webkit-linear-gradient(top,#f2dede,0%,#ebcccc,100%);background-image:-moz-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffebcccc',GradientType=0)}.well{background-image:-webkit-gradient(linear,left 0,left 100%,from(#e8e8e8),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#e8e8e8,0%,#f5f5f5,100%);background-image:-moz-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;border-color:#dcdcdc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8',endColorstr='#fff5f5f5',GradientType=0);-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1)}
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/css/bootstrap.css b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/css/bootstrap.css
deleted file mode 100644
index bbda4eed4af..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/css/bootstrap.css
+++ /dev/null
@@ -1,6805 +0,0 @@
-/*!
- * Bootstrap v3.0.0
- *
- * Copyright 2013 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 by @mdo and @fat.
- */
-
-/*! normalize.css v2.1.0 | MIT License | git.io/normalize */
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-nav,
-section,
-summary {
-  display: block;
-}
-
-audio,
-canvas,
-video {
-  display: inline-block;
-}
-
-audio:not([controls]) {
-  display: none;
-  height: 0;
-}
-
-[hidden] {
-  display: none;
-}
-
-html {
-  font-family: sans-serif;
-  -webkit-text-size-adjust: 100%;
-      -ms-text-size-adjust: 100%;
-}
-
-body {
-  margin: 0;
-}
-
-a:focus {
-  outline: thin dotted;
-}
-
-a:active,
-a:hover {
-  outline: 0;
-}
-
-h1 {
-  margin: 0.67em 0;
-  font-size: 2em;
-}
-
-abbr[title] {
-  border-bottom: 1px dotted;
-}
-
-b,
-strong {
-  font-weight: bold;
-}
-
-dfn {
-  font-style: italic;
-}
-
-hr {
-  height: 0;
-  -moz-box-sizing: content-box;
-       box-sizing: content-box;
-}
-
-mark {
-  color: #000;
-  background: #ff0;
-}
-
-code,
-kbd,
-pre,
-samp {
-  font-family: monospace, serif;
-  font-size: 1em;
-}
-
-pre {
-  white-space: pre-wrap;
-}
-
-q {
-  quotes: "\201C" "\201D" "\2018" "\2019";
-}
-
-small {
-  font-size: 80%;
-}
-
-sub,
-sup {
-  position: relative;
-  font-size: 75%;
-  line-height: 0;
-  vertical-align: baseline;
-}
-
-sup {
-  top: -0.5em;
-}
-
-sub {
-  bottom: -0.25em;
-}
-
-img {
-  border: 0;
-}
-
-svg:not(:root) {
-  overflow: hidden;
-}
-
-figure {
-  margin: 0;
-}
-
-fieldset {
-  padding: 0.35em 0.625em 0.75em;
-  margin: 0 2px;
-  border: 1px solid #c0c0c0;
-}
-
-legend {
-  padding: 0;
-  border: 0;
-}
-
-button,
-input,
-select,
-textarea {
-  margin: 0;
-  font-family: inherit;
-  font-size: 100%;
-}
-
-button,
-input {
-  line-height: normal;
-}
-
-button,
-select {
-  text-transform: none;
-}
-
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
-  cursor: pointer;
-  -webkit-appearance: button;
-}
-
-button[disabled],
-html input[disabled] {
-  cursor: default;
-}
-
-input[type="checkbox"],
-input[type="radio"] {
-  padding: 0;
-  box-sizing: border-box;
-}
-
-input[type="search"] {
-  -webkit-box-sizing: content-box;
-     -moz-box-sizing: content-box;
-          box-sizing: content-box;
-  -webkit-appearance: textfield;
-}
-
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
-  -webkit-appearance: none;
-}
-
-button::-moz-focus-inner,
-input::-moz-focus-inner {
-  padding: 0;
-  border: 0;
-}
-
-textarea {
-  overflow: auto;
-  vertical-align: top;
-}
-
-table {
-  border-collapse: collapse;
-  border-spacing: 0;
-}
-
-@media print {
-  * {
-    color: #000 !important;
-    text-shadow: none !important;
-    background: transparent !important;
-    box-shadow: none !important;
-  }
-  a,
-  a:visited {
-    text-decoration: underline;
-  }
-  a[href]:after {
-    content: " (" attr(href) ")";
-  }
-  abbr[title]:after {
-    content: " (" attr(title) ")";
-  }
-  .ir a:after,
-  a[href^="javascript:"]:after,
-  a[href^="#"]:after {
-    content: "";
-  }
-  pre,
-  blockquote {
-    border: 1px solid #999;
-    page-break-inside: avoid;
-  }
-  thead {
-    display: table-header-group;
-  }
-  tr,
-  img {
-    page-break-inside: avoid;
-  }
-  img {
-    max-width: 100% !important;
-  }
-  @page  {
-    margin: 2cm .5cm;
-  }
-  p,
-  h2,
-  h3 {
-    orphans: 3;
-    widows: 3;
-  }
-  h2,
-  h3 {
-    page-break-after: avoid;
-  }
-  .navbar {
-    display: none;
-  }
-  .table td,
-  .table th {
-    background-color: #fff !important;
-  }
-  .btn > .caret,
-  .dropup > .btn > .caret {
-    border-top-color: #000 !important;
-  }
-  .label {
-    border: 1px solid #000;
-  }
-  .table {
-    border-collapse: collapse !important;
-  }
-  .table-bordered th,
-  .table-bordered td {
-    border: 1px solid #ddd !important;
-  }
-}
-
-*,
-*:before,
-*:after {
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-html {
-  font-size: 62.5%;
-  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-}
-
-body {
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-size: 14px;
-  line-height: 1.428571429;
-  color: #333333;
-  background-color: #ffffff;
-}
-
-input,
-button,
-select,
-textarea {
-  font-family: inherit;
-  font-size: inherit;
-  line-height: inherit;
-}
-
-button,
-input,
-select[multiple],
-textarea {
-  background-image: none;
-}
-
-a {
-  color: #428bca;
-  text-decoration: none;
-}
-
-a:hover,
-a:focus {
-  color: #2a6496;
-  text-decoration: underline;
-}
-
-a:focus {
-  outline: thin dotted #333;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-
-img {
-  vertical-align: middle;
-}
-
-.img-responsive {
-  display: block;
-  height: auto;
-  max-width: 100%;
-}
-
-.img-rounded {
-  border-radius: 6px;
-}
-
-.img-thumbnail {
-  display: inline-block;
-  height: auto;
-  max-width: 100%;
-  padding: 4px;
-  line-height: 1.428571429;
-  background-color: #ffffff;
-  border: 1px solid #dddddd;
-  border-radius: 4px;
-  -webkit-transition: all 0.2s ease-in-out;
-          transition: all 0.2s ease-in-out;
-}
-
-.img-circle {
-  border-radius: 50%;
-}
-
-hr {
-  margin-top: 20px;
-  margin-bottom: 20px;
-  border: 0;
-  border-top: 1px solid #eeeeee;
-}
-
-.sr-only {
-  position: absolute;
-  width: 1px;
-  height: 1px;
-  padding: 0;
-  margin: -1px;
-  overflow: hidden;
-  clip: rect(0 0 0 0);
-  border: 0;
-}
-
-p {
-  margin: 0 0 10px;
-}
-
-.lead {
-  margin-bottom: 20px;
-  font-size: 16.099999999999998px;
-  font-weight: 200;
-  line-height: 1.4;
-}
-
-@media (min-width: 768px) {
-  .lead {
-    font-size: 21px;
-  }
-}
-
-small {
-  font-size: 85%;
-}
-
-cite {
-  font-style: normal;
-}
-
-.text-muted {
-  color: #999999;
-}
-
-.text-primary {
-  color: #428bca;
-}
-
-.text-warning {
-  color: #c09853;
-}
-
-.text-danger {
-  color: #b94a48;
-}
-
-.text-success {
-  color: #468847;
-}
-
-.text-info {
-  color: #3a87ad;
-}
-
-.text-left {
-  text-align: left;
-}
-
-.text-right {
-  text-align: right;
-}
-
-.text-center {
-  text-align: center;
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-.h1,
-.h2,
-.h3,
-.h4,
-.h5,
-.h6 {
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-weight: 500;
-  line-height: 1.1;
-}
-
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small,
-.h1 small,
-.h2 small,
-.h3 small,
-.h4 small,
-.h5 small,
-.h6 small {
-  font-weight: normal;
-  line-height: 1;
-  color: #999999;
-}
-
-h1,
-h2,
-h3 {
-  margin-top: 20px;
-  margin-bottom: 10px;
-}
-
-h4,
-h5,
-h6 {
-  margin-top: 10px;
-  margin-bottom: 10px;
-}
-
-h1,
-.h1 {
-  font-size: 36px;
-}
-
-h2,
-.h2 {
-  font-size: 30px;
-}
-
-h3,
-.h3 {
-  font-size: 24px;
-}
-
-h4,
-.h4 {
-  font-size: 18px;
-}
-
-h5,
-.h5 {
-  font-size: 14px;
-}
-
-h6,
-.h6 {
-  font-size: 12px;
-}
-
-h1 small,
-.h1 small {
-  font-size: 24px;
-}
-
-h2 small,
-.h2 small {
-  font-size: 18px;
-}
-
-h3 small,
-.h3 small,
-h4 small,
-.h4 small {
-  font-size: 14px;
-}
-
-.page-header {
-  padding-bottom: 9px;
-  margin: 40px 0 20px;
-  border-bottom: 1px solid #eeeeee;
-}
-
-ul,
-ol {
-  margin-top: 0;
-  margin-bottom: 10px;
-}
-
-ul ul,
-ol ul,
-ul ol,
-ol ol {
-  margin-bottom: 0;
-}
-
-.list-unstyled {
-  padding-left: 0;
-  list-style: none;
-}
-
-.list-inline {
-  padding-left: 0;
-  list-style: none;
-}
-
-.list-inline > li {
-  display: inline-block;
-  padding-right: 5px;
-  padding-left: 5px;
-}
-
-dl {
-  margin-bottom: 20px;
-}
-
-dt,
-dd {
-  line-height: 1.428571429;
-}
-
-dt {
-  font-weight: bold;
-}
-
-dd {
-  margin-left: 0;
-}
-
-@media (min-width: 768px) {
-  .dl-horizontal dt {
-    float: left;
-    width: 160px;
-    overflow: hidden;
-    clear: left;
-    text-align: right;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-  }
-  .dl-horizontal dd {
-    margin-left: 180px;
-  }
-  .dl-horizontal dd:before,
-  .dl-horizontal dd:after {
-    display: table;
-    content: " ";
-  }
-  .dl-horizontal dd:after {
-    clear: both;
-  }
-  .dl-horizontal dd:before,
-  .dl-horizontal dd:after {
-    display: table;
-    content: " ";
-  }
-  .dl-horizontal dd:after {
-    clear: both;
-  }
-}
-
-abbr[title],
-abbr[data-original-title] {
-  cursor: help;
-  border-bottom: 1px dotted #999999;
-}
-
-abbr.initialism {
-  font-size: 90%;
-  text-transform: uppercase;
-}
-
-blockquote {
-  padding: 10px 20px;
-  margin: 0 0 20px;
-  border-left: 5px solid #eeeeee;
-}
-
-blockquote p {
-  font-size: 17.5px;
-  font-weight: 300;
-  line-height: 1.25;
-}
-
-blockquote p:last-child {
-  margin-bottom: 0;
-}
-
-blockquote small {
-  display: block;
-  line-height: 1.428571429;
-  color: #999999;
-}
-
-blockquote small:before {
-  content: '\2014 \00A0';
-}
-
-blockquote.pull-right {
-  padding-right: 15px;
-  padding-left: 0;
-  border-right: 5px solid #eeeeee;
-  border-left: 0;
-}
-
-blockquote.pull-right p,
-blockquote.pull-right small {
-  text-align: right;
-}
-
-blockquote.pull-right small:before {
-  content: '';
-}
-
-blockquote.pull-right small:after {
-  content: '\00A0 \2014';
-}
-
-q:before,
-q:after,
-blockquote:before,
-blockquote:after {
-  content: "";
-}
-
-address {
-  display: block;
-  margin-bottom: 20px;
-  font-style: normal;
-  line-height: 1.428571429;
-}
-
-code,
-pre {
-  font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
-}
-
-code {
-  padding: 2px 4px;
-  font-size: 90%;
-  color: #c7254e;
-  white-space: nowrap;
-  background-color: #f9f2f4;
-  border-radius: 4px;
-}
-
-pre {
-  display: block;
-  padding: 9.5px;
-  margin: 0 0 10px;
-  font-size: 13px;
-  line-height: 1.428571429;
-  color: #333333;
-  word-break: break-all;
-  word-wrap: break-word;
-  background-color: #f5f5f5;
-  border: 1px solid #cccccc;
-  border-radius: 4px;
-}
-
-pre.prettyprint {
-  margin-bottom: 20px;
-}
-
-pre code {
-  padding: 0;
-  font-size: inherit;
-  color: inherit;
-  white-space: pre-wrap;
-  background-color: transparent;
-  border: 0;
-}
-
-.pre-scrollable {
-  max-height: 340px;
-  overflow-y: scroll;
-}
-
-.container {
-  padding-right: 15px;
-  padding-left: 15px;
-  margin-right: auto;
-  margin-left: auto;
-}
-
-.container:before,
-.container:after {
-  display: table;
-  content: " ";
-}
-
-.container:after {
-  clear: both;
-}
-
-.container:before,
-.container:after {
-  display: table;
-  content: " ";
-}
-
-.container:after {
-  clear: both;
-}
-
-.row {
-  margin-right: -15px;
-  margin-left: -15px;
-}
-
-.row:before,
-.row:after {
-  display: table;
-  content: " ";
-}
-
-.row:after {
-  clear: both;
-}
-
-.row:before,
-.row:after {
-  display: table;
-  content: " ";
-}
-
-.row:after {
-  clear: both;
-}
-
-.col-xs-1,
-.col-xs-2,
-.col-xs-3,
-.col-xs-4,
-.col-xs-5,
-.col-xs-6,
-.col-xs-7,
-.col-xs-8,
-.col-xs-9,
-.col-xs-10,
-.col-xs-11,
-.col-xs-12,
-.col-sm-1,
-.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-10,
-.col-sm-11,
-.col-sm-12,
-.col-md-1,
-.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-10,
-.col-md-11,
-.col-md-12,
-.col-lg-1,
-.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-10,
-.col-lg-11,
-.col-lg-12 {
-  position: relative;
-  min-height: 1px;
-  padding-right: 15px;
-  padding-left: 15px;
-}
-
-.col-xs-1,
-.col-xs-2,
-.col-xs-3,
-.col-xs-4,
-.col-xs-5,
-.col-xs-6,
-.col-xs-7,
-.col-xs-8,
-.col-xs-9,
-.col-xs-10,
-.col-xs-11 {
-  float: left;
-}
-
-.col-xs-1 {
-  width: 8.333333333333332%;
-}
-
-.col-xs-2 {
-  width: 16.666666666666664%;
-}
-
-.col-xs-3 {
-  width: 25%;
-}
-
-.col-xs-4 {
-  width: 33.33333333333333%;
-}
-
-.col-xs-5 {
-  width: 41.66666666666667%;
-}
-
-.col-xs-6 {
-  width: 50%;
-}
-
-.col-xs-7 {
-  width: 58.333333333333336%;
-}
-
-.col-xs-8 {
-  width: 66.66666666666666%;
-}
-
-.col-xs-9 {
-  width: 75%;
-}
-
-.col-xs-10 {
-  width: 83.33333333333334%;
-}
-
-.col-xs-11 {
-  width: 91.66666666666666%;
-}
-
-.col-xs-12 {
-  width: 100%;
-}
-
-@media (min-width: 768px) {
-  .container {
-    max-width: 750px;
-  }
-  .col-sm-1,
-  .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-10,
-  .col-sm-11 {
-    float: left;
-  }
-  .col-sm-1 {
-    width: 8.333333333333332%;
-  }
-  .col-sm-2 {
-    width: 16.666666666666664%;
-  }
-  .col-sm-3 {
-    width: 25%;
-  }
-  .col-sm-4 {
-    width: 33.33333333333333%;
-  }
-  .col-sm-5 {
-    width: 41.66666666666667%;
-  }
-  .col-sm-6 {
-    width: 50%;
-  }
-  .col-sm-7 {
-    width: 58.333333333333336%;
-  }
-  .col-sm-8 {
-    width: 66.66666666666666%;
-  }
-  .col-sm-9 {
-    width: 75%;
-  }
-  .col-sm-10 {
-    width: 83.33333333333334%;
-  }
-  .col-sm-11 {
-    width: 91.66666666666666%;
-  }
-  .col-sm-12 {
-    width: 100%;
-  }
-  .col-sm-push-1 {
-    left: 8.333333333333332%;
-  }
-  .col-sm-push-2 {
-    left: 16.666666666666664%;
-  }
-  .col-sm-push-3 {
-    left: 25%;
-  }
-  .col-sm-push-4 {
-    left: 33.33333333333333%;
-  }
-  .col-sm-push-5 {
-    left: 41.66666666666667%;
-  }
-  .col-sm-push-6 {
-    left: 50%;
-  }
-  .col-sm-push-7 {
-    left: 58.333333333333336%;
-  }
-  .col-sm-push-8 {
-    left: 66.66666666666666%;
-  }
-  .col-sm-push-9 {
-    left: 75%;
-  }
-  .col-sm-push-10 {
-    left: 83.33333333333334%;
-  }
-  .col-sm-push-11 {
-    left: 91.66666666666666%;
-  }
-  .col-sm-pull-1 {
-    right: 8.333333333333332%;
-  }
-  .col-sm-pull-2 {
-    right: 16.666666666666664%;
-  }
-  .col-sm-pull-3 {
-    right: 25%;
-  }
-  .col-sm-pull-4 {
-    right: 33.33333333333333%;
-  }
-  .col-sm-pull-5 {
-    right: 41.66666666666667%;
-  }
-  .col-sm-pull-6 {
-    right: 50%;
-  }
-  .col-sm-pull-7 {
-    right: 58.333333333333336%;
-  }
-  .col-sm-pull-8 {
-    right: 66.66666666666666%;
-  }
-  .col-sm-pull-9 {
-    right: 75%;
-  }
-  .col-sm-pull-10 {
-    right: 83.33333333333334%;
-  }
-  .col-sm-pull-11 {
-    right: 91.66666666666666%;
-  }
-  .col-sm-offset-1 {
-    margin-left: 8.333333333333332%;
-  }
-  .col-sm-offset-2 {
-    margin-left: 16.666666666666664%;
-  }
-  .col-sm-offset-3 {
-    margin-left: 25%;
-  }
-  .col-sm-offset-4 {
-    margin-left: 33.33333333333333%;
-  }
-  .col-sm-offset-5 {
-    margin-left: 41.66666666666667%;
-  }
-  .col-sm-offset-6 {
-    margin-left: 50%;
-  }
-  .col-sm-offset-7 {
-    margin-left: 58.333333333333336%;
-  }
-  .col-sm-offset-8 {
-    margin-left: 66.66666666666666%;
-  }
-  .col-sm-offset-9 {
-    margin-left: 75%;
-  }
-  .col-sm-offset-10 {
-    margin-left: 83.33333333333334%;
-  }
-  .col-sm-offset-11 {
-    margin-left: 91.66666666666666%;
-  }
-}
-
-@media (min-width: 992px) {
-  .container {
-    max-width: 970px;
-  }
-  .col-md-1,
-  .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-10,
-  .col-md-11 {
-    float: left;
-  }
-  .col-md-1 {
-    width: 8.333333333333332%;
-  }
-  .col-md-2 {
-    width: 16.666666666666664%;
-  }
-  .col-md-3 {
-    width: 25%;
-  }
-  .col-md-4 {
-    width: 33.33333333333333%;
-  }
-  .col-md-5 {
-    width: 41.66666666666667%;
-  }
-  .col-md-6 {
-    width: 50%;
-  }
-  .col-md-7 {
-    width: 58.333333333333336%;
-  }
-  .col-md-8 {
-    width: 66.66666666666666%;
-  }
-  .col-md-9 {
-    width: 75%;
-  }
-  .col-md-10 {
-    width: 83.33333333333334%;
-  }
-  .col-md-11 {
-    width: 91.66666666666666%;
-  }
-  .col-md-12 {
-    width: 100%;
-  }
-  .col-md-push-0 {
-    left: auto;
-  }
-  .col-md-push-1 {
-    left: 8.333333333333332%;
-  }
-  .col-md-push-2 {
-    left: 16.666666666666664%;
-  }
-  .col-md-push-3 {
-    left: 25%;
-  }
-  .col-md-push-4 {
-    left: 33.33333333333333%;
-  }
-  .col-md-push-5 {
-    left: 41.66666666666667%;
-  }
-  .col-md-push-6 {
-    left: 50%;
-  }
-  .col-md-push-7 {
-    left: 58.333333333333336%;
-  }
-  .col-md-push-8 {
-    left: 66.66666666666666%;
-  }
-  .col-md-push-9 {
-    left: 75%;
-  }
-  .col-md-push-10 {
-    left: 83.33333333333334%;
-  }
-  .col-md-push-11 {
-    left: 91.66666666666666%;
-  }
-  .col-md-pull-0 {
-    right: auto;
-  }
-  .col-md-pull-1 {
-    right: 8.333333333333332%;
-  }
-  .col-md-pull-2 {
-    right: 16.666666666666664%;
-  }
-  .col-md-pull-3 {
-    right: 25%;
-  }
-  .col-md-pull-4 {
-    right: 33.33333333333333%;
-  }
-  .col-md-pull-5 {
-    right: 41.66666666666667%;
-  }
-  .col-md-pull-6 {
-    right: 50%;
-  }
-  .col-md-pull-7 {
-    right: 58.333333333333336%;
-  }
-  .col-md-pull-8 {
-    right: 66.66666666666666%;
-  }
-  .col-md-pull-9 {
-    right: 75%;
-  }
-  .col-md-pull-10 {
-    right: 83.33333333333334%;
-  }
-  .col-md-pull-11 {
-    right: 91.66666666666666%;
-  }
-  .col-md-offset-0 {
-    margin-left: 0;
-  }
-  .col-md-offset-1 {
-    margin-left: 8.333333333333332%;
-  }
-  .col-md-offset-2 {
-    margin-left: 16.666666666666664%;
-  }
-  .col-md-offset-3 {
-    margin-left: 25%;
-  }
-  .col-md-offset-4 {
-    margin-left: 33.33333333333333%;
-  }
-  .col-md-offset-5 {
-    margin-left: 41.66666666666667%;
-  }
-  .col-md-offset-6 {
-    margin-left: 50%;
-  }
-  .col-md-offset-7 {
-    margin-left: 58.333333333333336%;
-  }
-  .col-md-offset-8 {
-    margin-left: 66.66666666666666%;
-  }
-  .col-md-offset-9 {
-    margin-left: 75%;
-  }
-  .col-md-offset-10 {
-    margin-left: 83.33333333333334%;
-  }
-  .col-md-offset-11 {
-    margin-left: 91.66666666666666%;
-  }
-}
-
-@media (min-width: 1200px) {
-  .container {
-    max-width: 1170px;
-  }
-  .col-lg-1,
-  .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-10,
-  .col-lg-11 {
-    float: left;
-  }
-  .col-lg-1 {
-    width: 8.333333333333332%;
-  }
-  .col-lg-2 {
-    width: 16.666666666666664%;
-  }
-  .col-lg-3 {
-    width: 25%;
-  }
-  .col-lg-4 {
-    width: 33.33333333333333%;
-  }
-  .col-lg-5 {
-    width: 41.66666666666667%;
-  }
-  .col-lg-6 {
-    width: 50%;
-  }
-  .col-lg-7 {
-    width: 58.333333333333336%;
-  }
-  .col-lg-8 {
-    width: 66.66666666666666%;
-  }
-  .col-lg-9 {
-    width: 75%;
-  }
-  .col-lg-10 {
-    width: 83.33333333333334%;
-  }
-  .col-lg-11 {
-    width: 91.66666666666666%;
-  }
-  .col-lg-12 {
-    width: 100%;
-  }
-  .col-lg-push-0 {
-    left: auto;
-  }
-  .col-lg-push-1 {
-    left: 8.333333333333332%;
-  }
-  .col-lg-push-2 {
-    left: 16.666666666666664%;
-  }
-  .col-lg-push-3 {
-    left: 25%;
-  }
-  .col-lg-push-4 {
-    left: 33.33333333333333%;
-  }
-  .col-lg-push-5 {
-    left: 41.66666666666667%;
-  }
-  .col-lg-push-6 {
-    left: 50%;
-  }
-  .col-lg-push-7 {
-    left: 58.333333333333336%;
-  }
-  .col-lg-push-8 {
-    left: 66.66666666666666%;
-  }
-  .col-lg-push-9 {
-    left: 75%;
-  }
-  .col-lg-push-10 {
-    left: 83.33333333333334%;
-  }
-  .col-lg-push-11 {
-    left: 91.66666666666666%;
-  }
-  .col-lg-pull-0 {
-    right: auto;
-  }
-  .col-lg-pull-1 {
-    right: 8.333333333333332%;
-  }
-  .col-lg-pull-2 {
-    right: 16.666666666666664%;
-  }
-  .col-lg-pull-3 {
-    right: 25%;
-  }
-  .col-lg-pull-4 {
-    right: 33.33333333333333%;
-  }
-  .col-lg-pull-5 {
-    right: 41.66666666666667%;
-  }
-  .col-lg-pull-6 {
-    right: 50%;
-  }
-  .col-lg-pull-7 {
-    right: 58.333333333333336%;
-  }
-  .col-lg-pull-8 {
-    right: 66.66666666666666%;
-  }
-  .col-lg-pull-9 {
-    right: 75%;
-  }
-  .col-lg-pull-10 {
-    right: 83.33333333333334%;
-  }
-  .col-lg-pull-11 {
-    right: 91.66666666666666%;
-  }
-  .col-lg-offset-0 {
-    margin-left: 0;
-  }
-  .col-lg-offset-1 {
-    margin-left: 8.333333333333332%;
-  }
-  .col-lg-offset-2 {
-    margin-left: 16.666666666666664%;
-  }
-  .col-lg-offset-3 {
-    margin-left: 25%;
-  }
-  .col-lg-offset-4 {
-    margin-left: 33.33333333333333%;
-  }
-  .col-lg-offset-5 {
-    margin-left: 41.66666666666667%;
-  }
-  .col-lg-offset-6 {
-    margin-left: 50%;
-  }
-  .col-lg-offset-7 {
-    margin-left: 58.333333333333336%;
-  }
-  .col-lg-offset-8 {
-    margin-left: 66.66666666666666%;
-  }
-  .col-lg-offset-9 {
-    margin-left: 75%;
-  }
-  .col-lg-offset-10 {
-    margin-left: 83.33333333333334%;
-  }
-  .col-lg-offset-11 {
-    margin-left: 91.66666666666666%;
-  }
-}
-
-table {
-  max-width: 100%;
-  background-color: transparent;
-}
-
-th {
-  text-align: left;
-}
-
-.table {
-  width: 100%;
-  margin-bottom: 20px;
-}
-
-.table thead > tr > th,
-.table tbody > tr > th,
-.table tfoot > tr > th,
-.table thead > tr > td,
-.table tbody > tr > td,
-.table tfoot > tr > td {
-  padding: 8px;
-  line-height: 1.428571429;
-  vertical-align: top;
-  border-top: 1px solid #dddddd;
-}
-
-.table thead > tr > th {
-  vertical-align: bottom;
-  border-bottom: 2px solid #dddddd;
-}
-
-.table caption + thead tr:first-child th,
-.table colgroup + thead tr:first-child th,
-.table thead:first-child tr:first-child th,
-.table caption + thead tr:first-child td,
-.table colgroup + thead tr:first-child td,
-.table thead:first-child tr:first-child td {
-  border-top: 0;
-}
-
-.table tbody + tbody {
-  border-top: 2px solid #dddddd;
-}
-
-.table .table {
-  background-color: #ffffff;
-}
-
-.table-condensed thead > tr > th,
-.table-condensed tbody > tr > th,
-.table-condensed tfoot > tr > th,
-.table-condensed thead > tr > td,
-.table-condensed tbody > tr > td,
-.table-condensed tfoot > tr > td {
-  padding: 5px;
-}
-
-.table-bordered {
-  border: 1px solid #dddddd;
-}
-
-.table-bordered > thead > tr > th,
-.table-bordered > tbody > tr > th,
-.table-bordered > tfoot > tr > th,
-.table-bordered > thead > tr > td,
-.table-bordered > tbody > tr > td,
-.table-bordered > tfoot > tr > td {
-  border: 1px solid #dddddd;
-}
-
-.table-bordered > thead > tr > th,
-.table-bordered > thead > tr > td {
-  border-bottom-width: 2px;
-}
-
-.table-striped > tbody > tr:nth-child(odd) > td,
-.table-striped > tbody > tr:nth-child(odd) > th {
-  background-color: #f9f9f9;
-}
-
-.table-hover > tbody > tr:hover > td,
-.table-hover > tbody > tr:hover > th {
-  background-color: #f5f5f5;
-}
-
-table col[class*="col-"] {
-  display: table-column;
-  float: none;
-}
-
-table td[class*="col-"],
-table th[class*="col-"] {
-  display: table-cell;
-  float: none;
-}
-
-.table > thead > tr > td.active,
-.table > tbody > tr > td.active,
-.table > tfoot > tr > td.active,
-.table > thead > tr > th.active,
-.table > tbody > tr > th.active,
-.table > tfoot > tr > th.active,
-.table > thead > tr.active > td,
-.table > tbody > tr.active > td,
-.table > tfoot > tr.active > td,
-.table > thead > tr.active > th,
-.table > tbody > tr.active > th,
-.table > tfoot > tr.active > th {
-  background-color: #f5f5f5;
-}
-
-.table > thead > tr > td.success,
-.table > tbody > tr > td.success,
-.table > tfoot > tr > td.success,
-.table > thead > tr > th.success,
-.table > tbody > tr > th.success,
-.table > tfoot > tr > th.success,
-.table > thead > tr.success > td,
-.table > tbody > tr.success > td,
-.table > tfoot > tr.success > td,
-.table > thead > tr.success > th,
-.table > tbody > tr.success > th,
-.table > tfoot > tr.success > th {
-  background-color: #dff0d8;
-  border-color: #d6e9c6;
-}
-
-.table-hover > tbody > tr > td.success:hover,
-.table-hover > tbody > tr > th.success:hover,
-.table-hover > tbody > tr.success:hover > td {
-  background-color: #d0e9c6;
-  border-color: #c9e2b3;
-}
-
-.table > thead > tr > td.danger,
-.table > tbody > tr > td.danger,
-.table > tfoot > tr > td.danger,
-.table > thead > tr > th.danger,
-.table > tbody > tr > th.danger,
-.table > tfoot > tr > th.danger,
-.table > thead > tr.danger > td,
-.table > tbody > tr.danger > td,
-.table > tfoot > tr.danger > td,
-.table > thead > tr.danger > th,
-.table > tbody > tr.danger > th,
-.table > tfoot > tr.danger > th {
-  background-color: #f2dede;
-  border-color: #eed3d7;
-}
-
-.table-hover > tbody > tr > td.danger:hover,
-.table-hover > tbody > tr > th.danger:hover,
-.table-hover > tbody > tr.danger:hover > td {
-  background-color: #ebcccc;
-  border-color: #e6c1c7;
-}
-
-.table > thead > tr > td.warning,
-.table > tbody > tr > td.warning,
-.table > tfoot > tr > td.warning,
-.table > thead > tr > th.warning,
-.table > tbody > tr > th.warning,
-.table > tfoot > tr > th.warning,
-.table > thead > tr.warning > td,
-.table > tbody > tr.warning > td,
-.table > tfoot > tr.warning > td,
-.table > thead > tr.warning > th,
-.table > tbody > tr.warning > th,
-.table > tfoot > tr.warning > th {
-  background-color: #fcf8e3;
-  border-color: #fbeed5;
-}
-
-.table-hover > tbody > tr > td.warning:hover,
-.table-hover > tbody > tr > th.warning:hover,
-.table-hover > tbody > tr.warning:hover > td {
-  background-color: #faf2cc;
-  border-color: #f8e5be;
-}
-
-@media (max-width: 768px) {
-  .table-responsive {
-    width: 100%;
-    margin-bottom: 15px;
-    overflow-x: scroll;
-    overflow-y: hidden;
-    border: 1px solid #dddddd;
-  }
-  .table-responsive > .table {
-    margin-bottom: 0;
-    background-color: #fff;
-  }
-  .table-responsive > .table > thead > tr > th,
-  .table-responsive > .table > tbody > tr > th,
-  .table-responsive > .table > tfoot > tr > th,
-  .table-responsive > .table > thead > tr > td,
-  .table-responsive > .table > tbody > tr > td,
-  .table-responsive > .table > tfoot > tr > td {
-    white-space: nowrap;
-  }
-  .table-responsive > .table-bordered {
-    border: 0;
-  }
-  .table-responsive > .table-bordered > thead > tr > th:first-child,
-  .table-responsive > .table-bordered > tbody > tr > th:first-child,
-  .table-responsive > .table-bordered > tfoot > tr > th:first-child,
-  .table-responsive > .table-bordered > thead > tr > td:first-child,
-  .table-responsive > .table-bordered > tbody > tr > td:first-child,
-  .table-responsive > .table-bordered > tfoot > tr > td:first-child {
-    border-left: 0;
-  }
-  .table-responsive > .table-bordered > thead > tr > th:last-child,
-  .table-responsive > .table-bordered > tbody > tr > th:last-child,
-  .table-responsive > .table-bordered > tfoot > tr > th:last-child,
-  .table-responsive > .table-bordered > thead > tr > td:last-child,
-  .table-responsive > .table-bordered > tbody > tr > td:last-child,
-  .table-responsive > .table-bordered > tfoot > tr > td:last-child {
-    border-right: 0;
-  }
-  .table-responsive > .table-bordered > thead > tr:last-child > th,
-  .table-responsive > .table-bordered > tbody > tr:last-child > th,
-  .table-responsive > .table-bordered > tfoot > tr:last-child > th,
-  .table-responsive > .table-bordered > thead > tr:last-child > td,
-  .table-responsive > .table-bordered > tbody > tr:last-child > td,
-  .table-responsive > .table-bordered > tfoot > tr:last-child > td {
-    border-bottom: 0;
-  }
-}
-
-fieldset {
-  padding: 0;
-  margin: 0;
-  border: 0;
-}
-
-legend {
-  display: block;
-  width: 100%;
-  padding: 0;
-  margin-bottom: 20px;
-  font-size: 21px;
-  line-height: inherit;
-  color: #333333;
-  border: 0;
-  border-bottom: 1px solid #e5e5e5;
-}
-
-label {
-  display: inline-block;
-  margin-bottom: 5px;
-  font-weight: bold;
-}
-
-input[type="search"] {
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-input[type="radio"],
-input[type="checkbox"] {
-  margin: 4px 0 0;
-  margin-top: 1px \9;
-  /* IE8-9 */
-
-  line-height: normal;
-}
-
-input[type="file"] {
-  display: block;
-}
-
-select[multiple],
-select[size] {
-  height: auto;
-}
-
-select optgroup {
-  font-family: inherit;
-  font-size: inherit;
-  font-style: inherit;
-}
-
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
-  outline: thin dotted #333;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-
-input[type="number"]::-webkit-outer-spin-button,
-input[type="number"]::-webkit-inner-spin-button {
-  height: auto;
-}
-
-.form-control:-moz-placeholder {
-  color: #999999;
-}
-
-.form-control::-moz-placeholder {
-  color: #999999;
-}
-
-.form-control:-ms-input-placeholder {
-  color: #999999;
-}
-
-.form-control::-webkit-input-placeholder {
-  color: #999999;
-}
-
-.form-control {
-  display: block;
-  width: 100%;
-  height: 34px;
-  padding: 6px 12px;
-  font-size: 14px;
-  line-height: 1.428571429;
-  color: #555555;
-  vertical-align: middle;
-  background-color: #ffffff;
-  border: 1px solid #cccccc;
-  border-radius: 4px;
-  -webkit-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-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
-          transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
-}
-
-.form-control:focus {
-  border-color: #66afe9;
-  outline: 0;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
-}
-
-.form-control[disabled],
-.form-control[readonly],
-fieldset[disabled] .form-control {
-  cursor: not-allowed;
-  background-color: #eeeeee;
-}
-
-textarea.form-control {
-  height: auto;
-}
-
-.form-group {
-  margin-bottom: 15px;
-}
-
-.radio,
-.checkbox {
-  display: block;
-  min-height: 20px;
-  padding-left: 20px;
-  margin-top: 10px;
-  margin-bottom: 10px;
-  vertical-align: middle;
-}
-
-.radio label,
-.checkbox label {
-  display: inline;
-  margin-bottom: 0;
-  font-weight: normal;
-  cursor: pointer;
-}
-
-.radio input[type="radio"],
-.radio-inline input[type="radio"],
-.checkbox input[type="checkbox"],
-.checkbox-inline input[type="checkbox"] {
-  float: left;
-  margin-left: -20px;
-}
-
-.radio + .radio,
-.checkbox + .checkbox {
-  margin-top: -5px;
-}
-
-.radio-inline,
-.checkbox-inline {
-  display: inline-block;
-  padding-left: 20px;
-  margin-bottom: 0;
-  font-weight: normal;
-  vertical-align: middle;
-  cursor: pointer;
-}
-
-.radio-inline + .radio-inline,
-.checkbox-inline + .checkbox-inline {
-  margin-top: 0;
-  margin-left: 10px;
-}
-
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-.radio[disabled],
-.radio-inline[disabled],
-.checkbox[disabled],
-.checkbox-inline[disabled],
-fieldset[disabled] input[type="radio"],
-fieldset[disabled] input[type="checkbox"],
-fieldset[disabled] .radio,
-fieldset[disabled] .radio-inline,
-fieldset[disabled] .checkbox,
-fieldset[disabled] .checkbox-inline {
-  cursor: not-allowed;
-}
-
-.input-sm {
-  height: 30px;
-  padding: 5px 10px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px;
-}
-
-select.input-sm {
-  height: 30px;
-  line-height: 30px;
-}
-
-textarea.input-sm {
-  height: auto;
-}
-
-.input-lg {
-  height: 45px;
-  padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.33;
-  border-radius: 6px;
-}
-
-select.input-lg {
-  height: 45px;
-  line-height: 45px;
-}
-
-textarea.input-lg {
-  height: auto;
-}
-
-.has-warning .help-block,
-.has-warning .control-label {
-  color: #c09853;
-}
-
-.has-warning .form-control {
-  border-color: #c09853;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-
-.has-warning .form-control:focus {
-  border-color: #a47e3c;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
-}
-
-.has-warning .input-group-addon {
-  color: #c09853;
-  background-color: #fcf8e3;
-  border-color: #c09853;
-}
-
-.has-error .help-block,
-.has-error .control-label {
-  color: #b94a48;
-}
-
-.has-error .form-control {
-  border-color: #b94a48;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-
-.has-error .form-control:focus {
-  border-color: #953b39;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
-}
-
-.has-error .input-group-addon {
-  color: #b94a48;
-  background-color: #f2dede;
-  border-color: #b94a48;
-}
-
-.has-success .help-block,
-.has-success .control-label {
-  color: #468847;
-}
-
-.has-success .form-control {
-  border-color: #468847;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-
-.has-success .form-control:focus {
-  border-color: #356635;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
-}
-
-.has-success .input-group-addon {
-  color: #468847;
-  background-color: #dff0d8;
-  border-color: #468847;
-}
-
-.form-control-static {
-  padding-top: 7px;
-  margin-bottom: 0;
-}
-
-.help-block {
-  display: block;
-  margin-top: 5px;
-  margin-bottom: 10px;
-  color: #737373;
-}
-
-@media (min-width: 768px) {
-  .form-inline .form-group {
-    display: inline-block;
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .form-inline .form-control {
-    display: inline-block;
-  }
-  .form-inline .radio,
-  .form-inline .checkbox {
-    display: inline-block;
-    padding-left: 0;
-    margin-top: 0;
-    margin-bottom: 0;
-  }
-  .form-inline .radio input[type="radio"],
-  .form-inline .checkbox input[type="checkbox"] {
-    float: none;
-    margin-left: 0;
-  }
-}
-
-.form-horizontal .control-label,
-.form-horizontal .radio,
-.form-horizontal .checkbox,
-.form-horizontal .radio-inline,
-.form-horizontal .checkbox-inline {
-  padding-top: 7px;
-  margin-top: 0;
-  margin-bottom: 0;
-}
-
-.form-horizontal .form-group {
-  margin-right: -15px;
-  margin-left: -15px;
-}
-
-.form-horizontal .form-group:before,
-.form-horizontal .form-group:after {
-  display: table;
-  content: " ";
-}
-
-.form-horizontal .form-group:after {
-  clear: both;
-}
-
-.form-horizontal .form-group:before,
-.form-horizontal .form-group:after {
-  display: table;
-  content: " ";
-}
-
-.form-horizontal .form-group:after {
-  clear: both;
-}
-
-@media (min-width: 768px) {
-  .form-horizontal .control-label {
-    text-align: right;
-  }
-}
-
-.btn {
-  display: inline-block;
-  padding: 6px 12px;
-  margin-bottom: 0;
-  font-size: 14px;
-  font-weight: normal;
-  line-height: 1.428571429;
-  text-align: center;
-  white-space: nowrap;
-  vertical-align: middle;
-  cursor: pointer;
-  border: 1px solid transparent;
-  border-radius: 4px;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-       -o-user-select: none;
-          user-select: none;
-}
-
-.btn:focus {
-  outline: thin dotted #333;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-
-.btn:hover,
-.btn:focus {
-  color: #333333;
-  text-decoration: none;
-}
-
-.btn:active,
-.btn.active {
-  background-image: none;
-  outline: 0;
-  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-          box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-}
-
-.btn.disabled,
-.btn[disabled],
-fieldset[disabled] .btn {
-  pointer-events: none;
-  cursor: not-allowed;
-  opacity: 0.65;
-  filter: alpha(opacity=65);
-  -webkit-box-shadow: none;
-          box-shadow: none;
-}
-
-.btn-default {
-  color: #333333;
-  background-color: #ffffff;
-  border-color: #cccccc;
-}
-
-.btn-default:hover,
-.btn-default:focus,
-.btn-default:active,
-.btn-default.active,
-.open .dropdown-toggle.btn-default {
-  color: #333333;
-  background-color: #ebebeb;
-  border-color: #adadad;
-}
-
-.btn-default:active,
-.btn-default.active,
-.open .dropdown-toggle.btn-default {
-  background-image: none;
-}
-
-.btn-default.disabled,
-.btn-default[disabled],
-fieldset[disabled] .btn-default,
-.btn-default.disabled:hover,
-.btn-default[disabled]:hover,
-fieldset[disabled] .btn-default:hover,
-.btn-default.disabled:focus,
-.btn-default[disabled]:focus,
-fieldset[disabled] .btn-default:focus,
-.btn-default.disabled:active,
-.btn-default[disabled]:active,
-fieldset[disabled] .btn-default:active,
-.btn-default.disabled.active,
-.btn-default[disabled].active,
-fieldset[disabled] .btn-default.active {
-  background-color: #ffffff;
-  border-color: #cccccc;
-}
-
-.btn-primary {
-  color: #ffffff;
-  background-color: #428bca;
-  border-color: #357ebd;
-}
-
-.btn-primary:hover,
-.btn-primary:focus,
-.btn-primary:active,
-.btn-primary.active,
-.open .dropdown-toggle.btn-primary {
-  color: #ffffff;
-  background-color: #3276b1;
-  border-color: #285e8e;
-}
-
-.btn-primary:active,
-.btn-primary.active,
-.open .dropdown-toggle.btn-primary {
-  background-image: none;
-}
-
-.btn-primary.disabled,
-.btn-primary[disabled],
-fieldset[disabled] .btn-primary,
-.btn-primary.disabled:hover,
-.btn-primary[disabled]:hover,
-fieldset[disabled] .btn-primary:hover,
-.btn-primary.disabled:focus,
-.btn-primary[disabled]:focus,
-fieldset[disabled] .btn-primary:focus,
-.btn-primary.disabled:active,
-.btn-primary[disabled]:active,
-fieldset[disabled] .btn-primary:active,
-.btn-primary.disabled.active,
-.btn-primary[disabled].active,
-fieldset[disabled] .btn-primary.active {
-  background-color: #428bca;
-  border-color: #357ebd;
-}
-
-.btn-warning {
-  color: #ffffff;
-  background-color: #f0ad4e;
-  border-color: #eea236;
-}
-
-.btn-warning:hover,
-.btn-warning:focus,
-.btn-warning:active,
-.btn-warning.active,
-.open .dropdown-toggle.btn-warning {
-  color: #ffffff;
-  background-color: #ed9c28;
-  border-color: #d58512;
-}
-
-.btn-warning:active,
-.btn-warning.active,
-.open .dropdown-toggle.btn-warning {
-  background-image: none;
-}
-
-.btn-warning.disabled,
-.btn-warning[disabled],
-fieldset[disabled] .btn-warning,
-.btn-warning.disabled:hover,
-.btn-warning[disabled]:hover,
-fieldset[disabled] .btn-warning:hover,
-.btn-warning.disabled:focus,
-.btn-warning[disabled]:focus,
-fieldset[disabled] .btn-warning:focus,
-.btn-warning.disabled:active,
-.btn-warning[disabled]:active,
-fieldset[disabled] .btn-warning:active,
-.btn-warning.disabled.active,
-.btn-warning[disabled].active,
-fieldset[disabled] .btn-warning.active {
-  background-color: #f0ad4e;
-  border-color: #eea236;
-}
-
-.btn-danger {
-  color: #ffffff;
-  background-color: #d9534f;
-  border-color: #d43f3a;
-}
-
-.btn-danger:hover,
-.btn-danger:focus,
-.btn-danger:active,
-.btn-danger.active,
-.open .dropdown-toggle.btn-danger {
-  color: #ffffff;
-  background-color: #d2322d;
-  border-color: #ac2925;
-}
-
-.btn-danger:active,
-.btn-danger.active,
-.open .dropdown-toggle.btn-danger {
-  background-image: none;
-}
-
-.btn-danger.disabled,
-.btn-danger[disabled],
-fieldset[disabled] .btn-danger,
-.btn-danger.disabled:hover,
-.btn-danger[disabled]:hover,
-fieldset[disabled] .btn-danger:hover,
-.btn-danger.disabled:focus,
-.btn-danger[disabled]:focus,
-fieldset[disabled] .btn-danger:focus,
-.btn-danger.disabled:active,
-.btn-danger[disabled]:active,
-fieldset[disabled] .btn-danger:active,
-.btn-danger.disabled.active,
-.btn-danger[disabled].active,
-fieldset[disabled] .btn-danger.active {
-  background-color: #d9534f;
-  border-color: #d43f3a;
-}
-
-.btn-success {
-  color: #ffffff;
-  background-color: #5cb85c;
-  border-color: #4cae4c;
-}
-
-.btn-success:hover,
-.btn-success:focus,
-.btn-success:active,
-.btn-success.active,
-.open .dropdown-toggle.btn-success {
-  color: #ffffff;
-  background-color: #47a447;
-  border-color: #398439;
-}
-
-.btn-success:active,
-.btn-success.active,
-.open .dropdown-toggle.btn-success {
-  background-image: none;
-}
-
-.btn-success.disabled,
-.btn-success[disabled],
-fieldset[disabled] .btn-success,
-.btn-success.disabled:hover,
-.btn-success[disabled]:hover,
-fieldset[disabled] .btn-success:hover,
-.btn-success.disabled:focus,
-.btn-success[disabled]:focus,
-fieldset[disabled] .btn-success:focus,
-.btn-success.disabled:active,
-.btn-success[disabled]:active,
-fieldset[disabled] .btn-success:active,
-.btn-success.disabled.active,
-.btn-success[disabled].active,
-fieldset[disabled] .btn-success.active {
-  background-color: #5cb85c;
-  border-color: #4cae4c;
-}
-
-.btn-info {
-  color: #ffffff;
-  background-color: #5bc0de;
-  border-color: #46b8da;
-}
-
-.btn-info:hover,
-.btn-info:focus,
-.btn-info:active,
-.btn-info.active,
-.open .dropdown-toggle.btn-info {
-  color: #ffffff;
-  background-color: #39b3d7;
-  border-color: #269abc;
-}
-
-.btn-info:active,
-.btn-info.active,
-.open .dropdown-toggle.btn-info {
-  background-image: none;
-}
-
-.btn-info.disabled,
-.btn-info[disabled],
-fieldset[disabled] .btn-info,
-.btn-info.disabled:hover,
-.btn-info[disabled]:hover,
-fieldset[disabled] .btn-info:hover,
-.btn-info.disabled:focus,
-.btn-info[disabled]:focus,
-fieldset[disabled] .btn-info:focus,
-.btn-info.disabled:active,
-.btn-info[disabled]:active,
-fieldset[disabled] .btn-info:active,
-.btn-info.disabled.active,
-.btn-info[disabled].active,
-fieldset[disabled] .btn-info.active {
-  background-color: #5bc0de;
-  border-color: #46b8da;
-}
-
-.btn-link {
-  font-weight: normal;
-  color: #428bca;
-  cursor: pointer;
-  border-radius: 0;
-}
-
-.btn-link,
-.btn-link:active,
-.btn-link[disabled],
-fieldset[disabled] .btn-link {
-  background-color: transparent;
-  -webkit-box-shadow: none;
-          box-shadow: none;
-}
-
-.btn-link,
-.btn-link:hover,
-.btn-link:focus,
-.btn-link:active {
-  border-color: transparent;
-}
-
-.btn-link:hover,
-.btn-link:focus {
-  color: #2a6496;
-  text-decoration: underline;
-  background-color: transparent;
-}
-
-.btn-link[disabled]:hover,
-fieldset[disabled] .btn-link:hover,
-.btn-link[disabled]:focus,
-fieldset[disabled] .btn-link:focus {
-  color: #999999;
-  text-decoration: none;
-}
-
-.btn-lg {
-  padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.33;
-  border-radius: 6px;
-}
-
-.btn-sm,
-.btn-xs {
-  padding: 5px 10px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px;
-}
-
-.btn-xs {
-  padding: 1px 5px;
-}
-
-.btn-block {
-  display: block;
-  width: 100%;
-  padding-right: 0;
-  padding-left: 0;
-}
-
-.btn-block + .btn-block {
-  margin-top: 5px;
-}
-
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
-  width: 100%;
-}
-
-.fade {
-  opacity: 0;
-  -webkit-transition: opacity 0.15s linear;
-          transition: opacity 0.15s linear;
-}
-
-.fade.in {
-  opacity: 1;
-}
-
-.collapse {
-  display: none;
-}
-
-.collapse.in {
-  display: block;
-}
-
-.collapsing {
-  position: relative;
-  height: 0;
-  overflow: hidden;
-  -webkit-transition: height 0.35s ease;
-          transition: height 0.35s ease;
-}
-
-@font-face {
-  font-family: 'Glyphicons Halflings';
-  src: url('../fonts/glyphicons-halflings-regular.eot');
-  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg');
-}
-
-.glyphicon {
-  position: relative;
-  top: 1px;
-  display: inline-block;
-  font-family: 'Glyphicons Halflings';
-  -webkit-font-smoothing: antialiased;
-  font-style: normal;
-  font-weight: normal;
-  line-height: 1;
-}
-
-.glyphicon-asterisk:before {
-  content: "\2a";
-}
-
-.glyphicon-plus:before {
-  content: "\2b";
-}
-
-.glyphicon-euro:before {
-  content: "\20ac";
-}
-
-.glyphicon-minus:before {
-  content: "\2212";
-}
-
-.glyphicon-cloud:before {
-  content: "\2601";
-}
-
-.glyphicon-envelope:before {
-  content: "\2709";
-}
-
-.glyphicon-pencil:before {
-  content: "\270f";
-}
-
-.glyphicon-glass:before {
-  content: "\e001";
-}
-
-.glyphicon-music:before {
-  content: "\e002";
-}
-
-.glyphicon-search:before {
-  content: "\e003";
-}
-
-.glyphicon-heart:before {
-  content: "\e005";
-}
-
-.glyphicon-star:before {
-  content: "\e006";
-}
-
-.glyphicon-star-empty:before {
-  content: "\e007";
-}
-
-.glyphicon-user:before {
-  content: "\e008";
-}
-
-.glyphicon-film:before {
-  content: "\e009";
-}
-
-.glyphicon-th-large:before {
-  content: "\e010";
-}
-
-.glyphicon-th:before {
-  content: "\e011";
-}
-
-.glyphicon-th-list:before {
-  content: "\e012";
-}
-
-.glyphicon-ok:before {
-  content: "\e013";
-}
-
-.glyphicon-remove:before {
-  content: "\e014";
-}
-
-.glyphicon-zoom-in:before {
-  content: "\e015";
-}
-
-.glyphicon-zoom-out:before {
-  content: "\e016";
-}
-
-.glyphicon-off:before {
-  content: "\e017";
-}
-
-.glyphicon-signal:before {
-  content: "\e018";
-}
-
-.glyphicon-cog:before {
-  content: "\e019";
-}
-
-.glyphicon-trash:before {
-  content: "\e020";
-}
-
-.glyphicon-home:before {
-  content: "\e021";
-}
-
-.glyphicon-file:before {
-  content: "\e022";
-}
-
-.glyphicon-time:before {
-  content: "\e023";
-}
-
-.glyphicon-road:before {
-  content: "\e024";
-}
-
-.glyphicon-download-alt:before {
-  content: "\e025";
-}
-
-.glyphicon-download:before {
-  content: "\e026";
-}
-
-.glyphicon-upload:before {
-  content: "\e027";
-}
-
-.glyphicon-inbox:before {
-  content: "\e028";
-}
-
-.glyphicon-play-circle:before {
-  content: "\e029";
-}
-
-.glyphicon-repeat:before {
-  content: "\e030";
-}
-
-.glyphicon-refresh:before {
-  content: "\e031";
-}
-
-.glyphicon-list-alt:before {
-  content: "\e032";
-}
-
-.glyphicon-flag:before {
-  content: "\e034";
-}
-
-.glyphicon-headphones:before {
-  content: "\e035";
-}
-
-.glyphicon-volume-off:before {
-  content: "\e036";
-}
-
-.glyphicon-volume-down:before {
-  content: "\e037";
-}
-
-.glyphicon-volume-up:before {
-  content: "\e038";
-}
-
-.glyphicon-qrcode:before {
-  content: "\e039";
-}
-
-.glyphicon-barcode:before {
-  content: "\e040";
-}
-
-.glyphicon-tag:before {
-  content: "\e041";
-}
-
-.glyphicon-tags:before {
-  content: "\e042";
-}
-
-.glyphicon-book:before {
-  content: "\e043";
-}
-
-.glyphicon-print:before {
-  content: "\e045";
-}
-
-.glyphicon-font:before {
-  content: "\e047";
-}
-
-.glyphicon-bold:before {
-  content: "\e048";
-}
-
-.glyphicon-italic:before {
-  content: "\e049";
-}
-
-.glyphicon-text-height:before {
-  content: "\e050";
-}
-
-.glyphicon-text-width:before {
-  content: "\e051";
-}
-
-.glyphicon-align-left:before {
-  content: "\e052";
-}
-
-.glyphicon-align-center:before {
-  content: "\e053";
-}
-
-.glyphicon-align-right:before {
-  content: "\e054";
-}
-
-.glyphicon-align-justify:before {
-  content: "\e055";
-}
-
-.glyphicon-list:before {
-  content: "\e056";
-}
-
-.glyphicon-indent-left:before {
-  content: "\e057";
-}
-
-.glyphicon-indent-right:before {
-  content: "\e058";
-}
-
-.glyphicon-facetime-video:before {
-  content: "\e059";
-}
-
-.glyphicon-picture:before {
-  content: "\e060";
-}
-
-.glyphicon-map-marker:before {
-  content: "\e062";
-}
-
-.glyphicon-adjust:before {
-  content: "\e063";
-}
-
-.glyphicon-tint:before {
-  content: "\e064";
-}
-
-.glyphicon-edit:before {
-  content: "\e065";
-}
-
-.glyphicon-share:before {
-  content: "\e066";
-}
-
-.glyphicon-check:before {
-  content: "\e067";
-}
-
-.glyphicon-move:before {
-  content: "\e068";
-}
-
-.glyphicon-step-backward:before {
-  content: "\e069";
-}
-
-.glyphicon-fast-backward:before {
-  content: "\e070";
-}
-
-.glyphicon-backward:before {
-  content: "\e071";
-}
-
-.glyphicon-play:before {
-  content: "\e072";
-}
-
-.glyphicon-pause:before {
-  content: "\e073";
-}
-
-.glyphicon-stop:before {
-  content: "\e074";
-}
-
-.glyphicon-forward:before {
-  content: "\e075";
-}
-
-.glyphicon-fast-forward:before {
-  content: "\e076";
-}
-
-.glyphicon-step-forward:before {
-  content: "\e077";
-}
-
-.glyphicon-eject:before {
-  content: "\e078";
-}
-
-.glyphicon-chevron-left:before {
-  content: "\e079";
-}
-
-.glyphicon-chevron-right:before {
-  content: "\e080";
-}
-
-.glyphicon-plus-sign:before {
-  content: "\e081";
-}
-
-.glyphicon-minus-sign:before {
-  content: "\e082";
-}
-
-.glyphicon-remove-sign:before {
-  content: "\e083";
-}
-
-.glyphicon-ok-sign:before {
-  content: "\e084";
-}
-
-.glyphicon-question-sign:before {
-  content: "\e085";
-}
-
-.glyphicon-info-sign:before {
-  content: "\e086";
-}
-
-.glyphicon-screenshot:before {
-  content: "\e087";
-}
-
-.glyphicon-remove-circle:before {
-  content: "\e088";
-}
-
-.glyphicon-ok-circle:before {
-  content: "\e089";
-}
-
-.glyphicon-ban-circle:before {
-  content: "\e090";
-}
-
-.glyphicon-arrow-left:before {
-  content: "\e091";
-}
-
-.glyphicon-arrow-right:before {
-  content: "\e092";
-}
-
-.glyphicon-arrow-up:before {
-  content: "\e093";
-}
-
-.glyphicon-arrow-down:before {
-  content: "\e094";
-}
-
-.glyphicon-share-alt:before {
-  content: "\e095";
-}
-
-.glyphicon-resize-full:before {
-  content: "\e096";
-}
-
-.glyphicon-resize-small:before {
-  content: "\e097";
-}
-
-.glyphicon-exclamation-sign:before {
-  content: "\e101";
-}
-
-.glyphicon-gift:before {
-  content: "\e102";
-}
-
-.glyphicon-leaf:before {
-  content: "\e103";
-}
-
-.glyphicon-eye-open:before {
-  content: "\e105";
-}
-
-.glyphicon-eye-close:before {
-  content: "\e106";
-}
-
-.glyphicon-warning-sign:before {
-  content: "\e107";
-}
-
-.glyphicon-plane:before {
-  content: "\e108";
-}
-
-.glyphicon-random:before {
-  content: "\e110";
-}
-
-.glyphicon-comment:before {
-  content: "\e111";
-}
-
-.glyphicon-magnet:before {
-  content: "\e112";
-}
-
-.glyphicon-chevron-up:before {
-  content: "\e113";
-}
-
-.glyphicon-chevron-down:before {
-  content: "\e114";
-}
-
-.glyphicon-retweet:before {
-  content: "\e115";
-}
-
-.glyphicon-shopping-cart:before {
-  content: "\e116";
-}
-
-.glyphicon-folder-close:before {
-  content: "\e117";
-}
-
-.glyphicon-folder-open:before {
-  content: "\e118";
-}
-
-.glyphicon-resize-vertical:before {
-  content: "\e119";
-}
-
-.glyphicon-resize-horizontal:before {
-  content: "\e120";
-}
-
-.glyphicon-hdd:before {
-  content: "\e121";
-}
-
-.glyphicon-bullhorn:before {
-  content: "\e122";
-}
-
-.glyphicon-certificate:before {
-  content: "\e124";
-}
-
-.glyphicon-thumbs-up:before {
-  content: "\e125";
-}
-
-.glyphicon-thumbs-down:before {
-  content: "\e126";
-}
-
-.glyphicon-hand-right:before {
-  content: "\e127";
-}
-
-.glyphicon-hand-left:before {
-  content: "\e128";
-}
-
-.glyphicon-hand-up:before {
-  content: "\e129";
-}
-
-.glyphicon-hand-down:before {
-  content: "\e130";
-}
-
-.glyphicon-circle-arrow-right:before {
-  content: "\e131";
-}
-
-.glyphicon-circle-arrow-left:before {
-  content: "\e132";
-}
-
-.glyphicon-circle-arrow-up:before {
-  content: "\e133";
-}
-
-.glyphicon-circle-arrow-down:before {
-  content: "\e134";
-}
-
-.glyphicon-globe:before {
-  content: "\e135";
-}
-
-.glyphicon-tasks:before {
-  content: "\e137";
-}
-
-.glyphicon-filter:before {
-  content: "\e138";
-}
-
-.glyphicon-fullscreen:before {
-  content: "\e140";
-}
-
-.glyphicon-dashboard:before {
-  content: "\e141";
-}
-
-.glyphicon-heart-empty:before {
-  content: "\e143";
-}
-
-.glyphicon-link:before {
-  content: "\e144";
-}
-
-.glyphicon-phone:before {
-  content: "\e145";
-}
-
-.glyphicon-usd:before {
-  content: "\e148";
-}
-
-.glyphicon-gbp:before {
-  content: "\e149";
-}
-
-.glyphicon-sort:before {
-  content: "\e150";
-}
-
-.glyphicon-sort-by-alphabet:before {
-  content: "\e151";
-}
-
-.glyphicon-sort-by-alphabet-alt:before {
-  content: "\e152";
-}
-
-.glyphicon-sort-by-order:before {
-  content: "\e153";
-}
-
-.glyphicon-sort-by-order-alt:before {
-  content: "\e154";
-}
-
-.glyphicon-sort-by-attributes:before {
-  content: "\e155";
-}
-
-.glyphicon-sort-by-attributes-alt:before {
-  content: "\e156";
-}
-
-.glyphicon-unchecked:before {
-  content: "\e157";
-}
-
-.glyphicon-expand:before {
-  content: "\e158";
-}
-
-.glyphicon-collapse-down:before {
-  content: "\e159";
-}
-
-.glyphicon-collapse-up:before {
-  content: "\e160";
-}
-
-.glyphicon-log-in:before {
-  content: "\e161";
-}
-
-.glyphicon-flash:before {
-  content: "\e162";
-}
-
-.glyphicon-log-out:before {
-  content: "\e163";
-}
-
-.glyphicon-new-window:before {
-  content: "\e164";
-}
-
-.glyphicon-record:before {
-  content: "\e165";
-}
-
-.glyphicon-save:before {
-  content: "\e166";
-}
-
-.glyphicon-open:before {
-  content: "\e167";
-}
-
-.glyphicon-saved:before {
-  content: "\e168";
-}
-
-.glyphicon-import:before {
-  content: "\e169";
-}
-
-.glyphicon-export:before {
-  content: "\e170";
-}
-
-.glyphicon-send:before {
-  content: "\e171";
-}
-
-.glyphicon-floppy-disk:before {
-  content: "\e172";
-}
-
-.glyphicon-floppy-saved:before {
-  content: "\e173";
-}
-
-.glyphicon-floppy-remove:before {
-  content: "\e174";
-}
-
-.glyphicon-floppy-save:before {
-  content: "\e175";
-}
-
-.glyphicon-floppy-open:before {
-  content: "\e176";
-}
-
-.glyphicon-credit-card:before {
-  content: "\e177";
-}
-
-.glyphicon-transfer:before {
-  content: "\e178";
-}
-
-.glyphicon-cutlery:before {
-  content: "\e179";
-}
-
-.glyphicon-header:before {
-  content: "\e180";
-}
-
-.glyphicon-compressed:before {
-  content: "\e181";
-}
-
-.glyphicon-earphone:before {
-  content: "\e182";
-}
-
-.glyphicon-phone-alt:before {
-  content: "\e183";
-}
-
-.glyphicon-tower:before {
-  content: "\e184";
-}
-
-.glyphicon-stats:before {
-  content: "\e185";
-}
-
-.glyphicon-sd-video:before {
-  content: "\e186";
-}
-
-.glyphicon-hd-video:before {
-  content: "\e187";
-}
-
-.glyphicon-subtitles:before {
-  content: "\e188";
-}
-
-.glyphicon-sound-stereo:before {
-  content: "\e189";
-}
-
-.glyphicon-sound-dolby:before {
-  content: "\e190";
-}
-
-.glyphicon-sound-5-1:before {
-  content: "\e191";
-}
-
-.glyphicon-sound-6-1:before {
-  content: "\e192";
-}
-
-.glyphicon-sound-7-1:before {
-  content: "\e193";
-}
-
-.glyphicon-copyright-mark:before {
-  content: "\e194";
-}
-
-.glyphicon-registration-mark:before {
-  content: "\e195";
-}
-
-.glyphicon-cloud-download:before {
-  content: "\e197";
-}
-
-.glyphicon-cloud-upload:before {
-  content: "\e198";
-}
-
-.glyphicon-tree-conifer:before {
-  content: "\e199";
-}
-
-.glyphicon-tree-deciduous:before {
-  content: "\e200";
-}
-
-.glyphicon-briefcase:before {
-  content: "\1f4bc";
-}
-
-.glyphicon-calendar:before {
-  content: "\1f4c5";
-}
-
-.glyphicon-pushpin:before {
-  content: "\1f4cc";
-}
-
-.glyphicon-paperclip:before {
-  content: "\1f4ce";
-}
-
-.glyphicon-camera:before {
-  content: "\1f4f7";
-}
-
-.glyphicon-lock:before {
-  content: "\1f512";
-}
-
-.glyphicon-bell:before {
-  content: "\1f514";
-}
-
-.glyphicon-bookmark:before {
-  content: "\1f516";
-}
-
-.glyphicon-fire:before {
-  content: "\1f525";
-}
-
-.glyphicon-wrench:before {
-  content: "\1f527";
-}
-
-.caret {
-  display: inline-block;
-  width: 0;
-  height: 0;
-  margin-left: 2px;
-  vertical-align: middle;
-  border-top: 4px solid #000000;
-  border-right: 4px solid transparent;
-  border-bottom: 0 dotted;
-  border-left: 4px solid transparent;
-  content: "";
-}
-
-.dropdown {
-  position: relative;
-}
-
-.dropdown-toggle:focus {
-  outline: 0;
-}
-
-.dropdown-menu {
-  position: absolute;
-  top: 100%;
-  left: 0;
-  z-index: 1000;
-  display: none;
-  float: left;
-  min-width: 160px;
-  padding: 5px 0;
-  margin: 2px 0 0;
-  font-size: 14px;
-  list-style: none;
-  background-color: #ffffff;
-  border: 1px solid #cccccc;
-  border: 1px solid rgba(0, 0, 0, 0.15);
-  border-radius: 4px;
-  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
-          box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
-  background-clip: padding-box;
-}
-
-.dropdown-menu.pull-right {
-  right: 0;
-  left: auto;
-}
-
-.dropdown-menu .divider {
-  height: 1px;
-  margin: 9px 0;
-  overflow: hidden;
-  background-color: #e5e5e5;
-}
-
-.dropdown-menu > li > a {
-  display: block;
-  padding: 3px 20px;
-  clear: both;
-  font-weight: normal;
-  line-height: 1.428571429;
-  color: #333333;
-  white-space: nowrap;
-}
-
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
-  color: #ffffff;
-  text-decoration: none;
-  background-color: #428bca;
-}
-
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
-  color: #ffffff;
-  text-decoration: none;
-  background-color: #428bca;
-  outline: 0;
-}
-
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-  color: #999999;
-}
-
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-  text-decoration: none;
-  cursor: not-allowed;
-  background-color: transparent;
-  background-image: none;
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
-}
-
-.open > .dropdown-menu {
-  display: block;
-}
-
-.open > a {
-  outline: 0;
-}
-
-.dropdown-header {
-  display: block;
-  padding: 3px 20px;
-  font-size: 12px;
-  line-height: 1.428571429;
-  color: #999999;
-}
-
-.dropdown-backdrop {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 990;
-}
-
-.pull-right > .dropdown-menu {
-  right: 0;
-  left: auto;
-}
-
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
-  border-top: 0 dotted;
-  border-bottom: 4px solid #000000;
-  content: "";
-}
-
-.dropup .dropdown-menu,
-.navbar-fixed-bottom .dropdown .dropdown-menu {
-  top: auto;
-  bottom: 100%;
-  margin-bottom: 1px;
-}
-
-@media (min-width: 768px) {
-  .navbar-right .dropdown-menu {
-    right: 0;
-    left: auto;
-  }
-}
-
-.btn-default .caret {
-  border-top-color: #333333;
-}
-
-.btn-primary .caret,
-.btn-success .caret,
-.btn-warning .caret,
-.btn-danger .caret,
-.btn-info .caret {
-  border-top-color: #fff;
-}
-
-.dropup .btn-default .caret {
-  border-bottom-color: #333333;
-}
-
-.dropup .btn-primary .caret,
-.dropup .btn-success .caret,
-.dropup .btn-warning .caret,
-.dropup .btn-danger .caret,
-.dropup .btn-info .caret {
-  border-bottom-color: #fff;
-}
-
-.btn-group,
-.btn-group-vertical {
-  position: relative;
-  display: inline-block;
-  vertical-align: middle;
-}
-
-.btn-group > .btn,
-.btn-group-vertical > .btn {
-  position: relative;
-  float: left;
-}
-
-.btn-group > .btn:hover,
-.btn-group-vertical > .btn:hover,
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus,
-.btn-group > .btn:active,
-.btn-group-vertical > .btn:active,
-.btn-group > .btn.active,
-.btn-group-vertical > .btn.active {
-  z-index: 2;
-}
-
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus {
-  outline: none;
-}
-
-.btn-group .btn + .btn,
-.btn-group .btn + .btn-group,
-.btn-group .btn-group + .btn,
-.btn-group .btn-group + .btn-group {
-  margin-left: -1px;
-}
-
-.btn-toolbar:before,
-.btn-toolbar:after {
-  display: table;
-  content: " ";
-}
-
-.btn-toolbar:after {
-  clear: both;
-}
-
-.btn-toolbar:before,
-.btn-toolbar:after {
-  display: table;
-  content: " ";
-}
-
-.btn-toolbar:after {
-  clear: both;
-}
-
-.btn-toolbar .btn-group {
-  float: left;
-}
-
-.btn-toolbar > .btn + .btn,
-.btn-toolbar > .btn-group + .btn,
-.btn-toolbar > .btn + .btn-group,
-.btn-toolbar > .btn-group + .btn-group {
-  margin-left: 5px;
-}
-
-.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
-  border-radius: 0;
-}
-
-.btn-group > .btn:first-child {
-  margin-left: 0;
-}
-
-.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
-  border-top-right-radius: 0;
-  border-bottom-right-radius: 0;
-}
-
-.btn-group > .btn:last-child:not(:first-child),
-.btn-group > .dropdown-toggle:not(:first-child) {
-  border-bottom-left-radius: 0;
-  border-top-left-radius: 0;
-}
-
-.btn-group > .btn-group {
-  float: left;
-}
-
-.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
-  border-radius: 0;
-}
-
-.btn-group > .btn-group:first-child > .btn:last-child,
-.btn-group > .btn-group:first-child > .dropdown-toggle {
-  border-top-right-radius: 0;
-  border-bottom-right-radius: 0;
-}
-
-.btn-group > .btn-group:last-child > .btn:first-child {
-  border-bottom-left-radius: 0;
-  border-top-left-radius: 0;
-}
-
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
-  outline: 0;
-}
-
-.btn-group-xs > .btn {
-  padding: 5px 10px;
-  padding: 1px 5px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px;
-}
-
-.btn-group-sm > .btn {
-  padding: 5px 10px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px;
-}
-
-.btn-group-lg > .btn {
-  padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.33;
-  border-radius: 6px;
-}
-
-.btn-group > .btn + .dropdown-toggle {
-  padding-right: 8px;
-  padding-left: 8px;
-}
-
-.btn-group > .btn-lg + .dropdown-toggle {
-  padding-right: 12px;
-  padding-left: 12px;
-}
-
-.btn-group.open .dropdown-toggle {
-  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-          box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-}
-
-.btn .caret {
-  margin-left: 0;
-}
-
-.btn-lg .caret {
-  border-width: 5px 5px 0;
-  border-bottom-width: 0;
-}
-
-.dropup .btn-lg .caret {
-  border-width: 0 5px 5px;
-}
-
-.btn-group-vertical > .btn,
-.btn-group-vertical > .btn-group {
-  display: block;
-  float: none;
-  width: 100%;
-  max-width: 100%;
-}
-
-.btn-group-vertical > .btn-group:before,
-.btn-group-vertical > .btn-group:after {
-  display: table;
-  content: " ";
-}
-
-.btn-group-vertical > .btn-group:after {
-  clear: both;
-}
-
-.btn-group-vertical > .btn-group:before,
-.btn-group-vertical > .btn-group:after {
-  display: table;
-  content: " ";
-}
-
-.btn-group-vertical > .btn-group:after {
-  clear: both;
-}
-
-.btn-group-vertical > .btn-group > .btn {
-  float: none;
-}
-
-.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:not(:first-child):not(:last-child) {
-  border-radius: 0;
-}
-
-.btn-group-vertical > .btn:first-child:not(:last-child) {
-  border-top-right-radius: 4px;
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
-}
-
-.btn-group-vertical > .btn:last-child:not(:first-child) {
-  border-top-right-radius: 0;
-  border-bottom-left-radius: 4px;
-  border-top-left-radius: 0;
-}
-
-.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
-  border-radius: 0;
-}
-
-.btn-group-vertical > .btn-group:first-child > .btn:last-child,
-.btn-group-vertical > .btn-group:first-child > .dropdown-toggle {
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
-}
-
-.btn-group-vertical > .btn-group:last-child > .btn:first-child {
-  border-top-right-radius: 0;
-  border-top-left-radius: 0;
-}
-
-.btn-group-justified {
-  display: table;
-  width: 100%;
-  border-collapse: separate;
-  table-layout: fixed;
-}
-
-.btn-group-justified .btn {
-  display: table-cell;
-  float: none;
-  width: 1%;
-}
-
-[data-toggle="buttons"] > .btn > input[type="radio"],
-[data-toggle="buttons"] > .btn > input[type="checkbox"] {
-  display: none;
-}
-
-.input-group {
-  position: relative;
-  display: table;
-  border-collapse: separate;
-}
-
-.input-group.col {
-  float: none;
-  padding-right: 0;
-  padding-left: 0;
-}
-
-.input-group .form-control {
-  width: 100%;
-  margin-bottom: 0;
-}
-
-.input-group-lg > .form-control,
-.input-group-lg > .input-group-addon,
-.input-group-lg > .input-group-btn > .btn {
-  height: 45px;
-  padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.33;
-  border-radius: 6px;
-}
-
-select.input-group-lg > .form-control,
-select.input-group-lg > .input-group-addon,
-select.input-group-lg > .input-group-btn > .btn {
-  height: 45px;
-  line-height: 45px;
-}
-
-textarea.input-group-lg > .form-control,
-textarea.input-group-lg > .input-group-addon,
-textarea.input-group-lg > .input-group-btn > .btn {
-  height: auto;
-}
-
-.input-group-sm > .form-control,
-.input-group-sm > .input-group-addon,
-.input-group-sm > .input-group-btn > .btn {
-  height: 30px;
-  padding: 5px 10px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px;
-}
-
-select.input-group-sm > .form-control,
-select.input-group-sm > .input-group-addon,
-select.input-group-sm > .input-group-btn > .btn {
-  height: 30px;
-  line-height: 30px;
-}
-
-textarea.input-group-sm > .form-control,
-textarea.input-group-sm > .input-group-addon,
-textarea.input-group-sm > .input-group-btn > .btn {
-  height: auto;
-}
-
-.input-group-addon,
-.input-group-btn,
-.input-group .form-control {
-  display: table-cell;
-}
-
-.input-group-addon:not(:first-child):not(:last-child),
-.input-group-btn:not(:first-child):not(:last-child),
-.input-group .form-control:not(:first-child):not(:last-child) {
-  border-radius: 0;
-}
-
-.input-group-addon,
-.input-group-btn {
-  width: 1%;
-  white-space: nowrap;
-  vertical-align: middle;
-}
-
-.input-group-addon {
-  padding: 6px 12px;
-  font-size: 14px;
-  font-weight: normal;
-  line-height: 1;
-  text-align: center;
-  background-color: #eeeeee;
-  border: 1px solid #cccccc;
-  border-radius: 4px;
-}
-
-.input-group-addon.input-sm {
-  padding: 5px 10px;
-  font-size: 12px;
-  border-radius: 3px;
-}
-
-.input-group-addon.input-lg {
-  padding: 10px 16px;
-  font-size: 18px;
-  border-radius: 6px;
-}
-
-.input-group-addon input[type="radio"],
-.input-group-addon input[type="checkbox"] {
-  margin-top: 0;
-}
-
-.input-group .form-control:first-child,
-.input-group-addon:first-child,
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .dropdown-toggle,
-.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {
-  border-top-right-radius: 0;
-  border-bottom-right-radius: 0;
-}
-
-.input-group-addon:first-child {
-  border-right: 0;
-}
-
-.input-group .form-control:last-child,
-.input-group-addon:last-child,
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .dropdown-toggle,
-.input-group-btn:first-child > .btn:not(:first-child) {
-  border-bottom-left-radius: 0;
-  border-top-left-radius: 0;
-}
-
-.input-group-addon:last-child {
-  border-left: 0;
-}
-
-.input-group-btn {
-  position: relative;
-  white-space: nowrap;
-}
-
-.input-group-btn > .btn {
-  position: relative;
-}
-
-.input-group-btn > .btn + .btn {
-  margin-left: -4px;
-}
-
-.input-group-btn > .btn:hover,
-.input-group-btn > .btn:active {
-  z-index: 2;
-}
-
-.nav {
-  padding-left: 0;
-  margin-bottom: 0;
-  list-style: none;
-}
-
-.nav:before,
-.nav:after {
-  display: table;
-  content: " ";
-}
-
-.nav:after {
-  clear: both;
-}
-
-.nav:before,
-.nav:after {
-  display: table;
-  content: " ";
-}
-
-.nav:after {
-  clear: both;
-}
-
-.nav > li {
-  position: relative;
-  display: block;
-}
-
-.nav > li > a {
-  position: relative;
-  display: block;
-  padding: 10px 15px;
-}
-
-.nav > li > a:hover,
-.nav > li > a:focus {
-  text-decoration: none;
-  background-color: #eeeeee;
-}
-
-.nav > li.disabled > a {
-  color: #999999;
-}
-
-.nav > li.disabled > a:hover,
-.nav > li.disabled > a:focus {
-  color: #999999;
-  text-decoration: none;
-  cursor: not-allowed;
-  background-color: transparent;
-}
-
-.nav .open > a,
-.nav .open > a:hover,
-.nav .open > a:focus {
-  background-color: #eeeeee;
-  border-color: #428bca;
-}
-
-.nav .nav-divider {
-  height: 1px;
-  margin: 9px 0;
-  overflow: hidden;
-  background-color: #e5e5e5;
-}
-
-.nav > li > a > img {
-  max-width: none;
-}
-
-.nav-tabs {
-  border-bottom: 1px solid #dddddd;
-}
-
-.nav-tabs > li {
-  float: left;
-  margin-bottom: -1px;
-}
-
-.nav-tabs > li > a {
-  margin-right: 2px;
-  line-height: 1.428571429;
-  border: 1px solid transparent;
-  border-radius: 4px 4px 0 0;
-}
-
-.nav-tabs > li > a:hover {
-  border-color: #eeeeee #eeeeee #dddddd;
-}
-
-.nav-tabs > li.active > a,
-.nav-tabs > li.active > a:hover,
-.nav-tabs > li.active > a:focus {
-  color: #555555;
-  cursor: default;
-  background-color: #ffffff;
-  border: 1px solid #dddddd;
-  border-bottom-color: transparent;
-}
-
-.nav-tabs.nav-justified {
-  width: 100%;
-  border-bottom: 0;
-}
-
-.nav-tabs.nav-justified > li {
-  float: none;
-}
-
-.nav-tabs.nav-justified > li > a {
-  text-align: center;
-}
-
-@media (min-width: 768px) {
-  .nav-tabs.nav-justified > li {
-    display: table-cell;
-    width: 1%;
-  }
-}
-
-.nav-tabs.nav-justified > li > a {
-  margin-right: 0;
-  border-bottom: 1px solid #dddddd;
-}
-
-.nav-tabs.nav-justified > .active > a {
-  border-bottom-color: #ffffff;
-}
-
-.nav-pills > li {
-  float: left;
-}
-
-.nav-pills > li > a {
-  border-radius: 5px;
-}
-
-.nav-pills > li + li {
-  margin-left: 2px;
-}
-
-.nav-pills > li.active > a,
-.nav-pills > li.active > a:hover,
-.nav-pills > li.active > a:focus {
-  color: #ffffff;
-  background-color: #428bca;
-}
-
-.nav-stacked > li {
-  float: none;
-}
-
-.nav-stacked > li + li {
-  margin-top: 2px;
-  margin-left: 0;
-}
-
-.nav-justified {
-  width: 100%;
-}
-
-.nav-justified > li {
-  float: none;
-}
-
-.nav-justified > li > a {
-  text-align: center;
-}
-
-@media (min-width: 768px) {
-  .nav-justified > li {
-    display: table-cell;
-    width: 1%;
-  }
-}
-
-.nav-tabs-justified {
-  border-bottom: 0;
-}
-
-.nav-tabs-justified > li > a {
-  margin-right: 0;
-  border-bottom: 1px solid #dddddd;
-}
-
-.nav-tabs-justified > .active > a {
-  border-bottom-color: #ffffff;
-}
-
-.tabbable:before,
-.tabbable:after {
-  display: table;
-  content: " ";
-}
-
-.tabbable:after {
-  clear: both;
-}
-
-.tabbable:before,
-.tabbable:after {
-  display: table;
-  content: " ";
-}
-
-.tabbable:after {
-  clear: both;
-}
-
-.tab-content > .tab-pane,
-.pill-content > .pill-pane {
-  display: none;
-}
-
-.tab-content > .active,
-.pill-content > .active {
-  display: block;
-}
-
-.nav .caret {
-  border-top-color: #428bca;
-  border-bottom-color: #428bca;
-}
-
-.nav a:hover .caret {
-  border-top-color: #2a6496;
-  border-bottom-color: #2a6496;
-}
-
-.nav-tabs .dropdown-menu {
-  margin-top: -1px;
-  border-top-right-radius: 0;
-  border-top-left-radius: 0;
-}
-
-.navbar {
-  position: relative;
-  z-index: 1000;
-  min-height: 50px;
-  margin-bottom: 20px;
-  border: 1px solid transparent;
-}
-
-.navbar:before,
-.navbar:after {
-  display: table;
-  content: " ";
-}
-
-.navbar:after {
-  clear: both;
-}
-
-.navbar:before,
-.navbar:after {
-  display: table;
-  content: " ";
-}
-
-.navbar:after {
-  clear: both;
-}
-
-@media (min-width: 768px) {
-  .navbar {
-    border-radius: 4px;
-  }
-}
-
-.navbar-header:before,
-.navbar-header:after {
-  display: table;
-  content: " ";
-}
-
-.navbar-header:after {
-  clear: both;
-}
-
-.navbar-header:before,
-.navbar-header:after {
-  display: table;
-  content: " ";
-}
-
-.navbar-header:after {
-  clear: both;
-}
-
-@media (min-width: 768px) {
-  .navbar-header {
-    float: left;
-  }
-}
-
-.navbar-collapse {
-  max-height: 340px;
-  padding-right: 15px;
-  padding-left: 15px;
-  overflow-x: visible;
-  border-top: 1px solid transparent;
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
-  -webkit-overflow-scrolling: touch;
-}
-
-.navbar-collapse:before,
-.navbar-collapse:after {
-  display: table;
-  content: " ";
-}
-
-.navbar-collapse:after {
-  clear: both;
-}
-
-.navbar-collapse:before,
-.navbar-collapse:after {
-  display: table;
-  content: " ";
-}
-
-.navbar-collapse:after {
-  clear: both;
-}
-
-.navbar-collapse.in {
-  overflow-y: auto;
-}
-
-@media (min-width: 768px) {
-  .navbar-collapse {
-    width: auto;
-    border-top: 0;
-    box-shadow: none;
-  }
-  .navbar-collapse.collapse {
-    display: block !important;
-    height: auto !important;
-    padding-bottom: 0;
-    overflow: visible !important;
-  }
-  .navbar-collapse.in {
-    overflow-y: visible;
-  }
-  .navbar-collapse .navbar-nav.navbar-left:first-child {
-    margin-left: -15px;
-  }
-  .navbar-collapse .navbar-nav.navbar-right:last-child {
-    margin-right: -15px;
-  }
-  .navbar-collapse .navbar-text:last-child {
-    margin-right: 0;
-  }
-}
-
-.container > .navbar-header,
-.container > .navbar-collapse {
-  margin-right: -15px;
-  margin-left: -15px;
-}
-
-@media (min-width: 768px) {
-  .container > .navbar-header,
-  .container > .navbar-collapse {
-    margin-right: 0;
-    margin-left: 0;
-  }
-}
-
-.navbar-static-top {
-  border-width: 0 0 1px;
-}
-
-@media (min-width: 768px) {
-  .navbar-static-top {
-    border-radius: 0;
-  }
-}
-
-.navbar-fixed-top,
-.navbar-fixed-bottom {
-  position: fixed;
-  right: 0;
-  left: 0;
-  border-width: 0 0 1px;
-}
-
-@media (min-width: 768px) {
-  .navbar-fixed-top,
-  .navbar-fixed-bottom {
-    border-radius: 0;
-  }
-}
-
-.navbar-fixed-top {
-  top: 0;
-  z-index: 1030;
-}
-
-.navbar-fixed-bottom {
-  bottom: 0;
-  margin-bottom: 0;
-}
-
-.navbar-brand {
-  float: left;
-  padding: 15px 15px;
-  font-size: 18px;
-  line-height: 20px;
-}
-
-.navbar-brand:hover,
-.navbar-brand:focus {
-  text-decoration: none;
-}
-
-@media (min-width: 768px) {
-  .navbar > .container .navbar-brand {
-    margin-left: -15px;
-  }
-}
-
-.navbar-toggle {
-  position: relative;
-  float: right;
-  padding: 9px 10px;
-  margin-top: 8px;
-  margin-right: 15px;
-  margin-bottom: 8px;
-  background-color: transparent;
-  border: 1px solid transparent;
-  border-radius: 4px;
-}
-
-.navbar-toggle .icon-bar {
-  display: block;
-  width: 22px;
-  height: 2px;
-  border-radius: 1px;
-}
-
-.navbar-toggle .icon-bar + .icon-bar {
-  margin-top: 4px;
-}
-
-@media (min-width: 768px) {
-  .navbar-toggle {
-    display: none;
-  }
-}
-
-.navbar-nav {
-  margin: 7.5px -15px;
-}
-
-.navbar-nav > li > a {
-  padding-top: 10px;
-  padding-bottom: 10px;
-  line-height: 20px;
-}
-
-@media (max-width: 767px) {
-  .navbar-nav .open .dropdown-menu {
-    position: static;
-    float: none;
-    width: auto;
-    margin-top: 0;
-    background-color: transparent;
-    border: 0;
-    box-shadow: none;
-  }
-  .navbar-nav .open .dropdown-menu > li > a,
-  .navbar-nav .open .dropdown-menu .dropdown-header {
-    padding: 5px 15px 5px 25px;
-  }
-  .navbar-nav .open .dropdown-menu > li > a {
-    line-height: 20px;
-  }
-  .navbar-nav .open .dropdown-menu > li > a:hover,
-  .navbar-nav .open .dropdown-menu > li > a:focus {
-    background-image: none;
-  }
-}
-
-@media (min-width: 768px) {
-  .navbar-nav {
-    float: left;
-    margin: 0;
-  }
-  .navbar-nav > li {
-    float: left;
-  }
-  .navbar-nav > li > a {
-    padding-top: 15px;
-    padding-bottom: 15px;
-  }
-}
-
-@media (min-width: 768px) {
-  .navbar-left {
-    float: left !important;
-  }
-  .navbar-right {
-    float: right !important;
-  }
-}
-
-.navbar-form {
-  padding: 10px 15px;
-  margin-top: 8px;
-  margin-right: -15px;
-  margin-bottom: 8px;
-  margin-left: -15px;
-  border-top: 1px solid transparent;
-  border-bottom: 1px solid transparent;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
-}
-
-@media (min-width: 768px) {
-  .navbar-form .form-group {
-    display: inline-block;
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .navbar-form .form-control {
-    display: inline-block;
-  }
-  .navbar-form .radio,
-  .navbar-form .checkbox {
-    display: inline-block;
-    padding-left: 0;
-    margin-top: 0;
-    margin-bottom: 0;
-  }
-  .navbar-form .radio input[type="radio"],
-  .navbar-form .checkbox input[type="checkbox"] {
-    float: none;
-    margin-left: 0;
-  }
-}
-
-@media (max-width: 767px) {
-  .navbar-form .form-group {
-    margin-bottom: 5px;
-  }
-}
-
-@media (min-width: 768px) {
-  .navbar-form {
-    width: auto;
-    padding-top: 0;
-    padding-bottom: 0;
-    margin-right: 0;
-    margin-left: 0;
-    border: 0;
-    -webkit-box-shadow: none;
-            box-shadow: none;
-  }
-}
-
-.navbar-nav > li > .dropdown-menu {
-  margin-top: 0;
-  border-top-right-radius: 0;
-  border-top-left-radius: 0;
-}
-
-.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
-}
-
-.navbar-nav.pull-right > li > .dropdown-menu,
-.navbar-nav > li > .dropdown-menu.pull-right {
-  right: 0;
-  left: auto;
-}
-
-.navbar-btn {
-  margin-top: 8px;
-  margin-bottom: 8px;
-}
-
-.navbar-text {
-  float: left;
-  margin-top: 15px;
-  margin-bottom: 15px;
-}
-
-@media (min-width: 768px) {
-  .navbar-text {
-    margin-right: 15px;
-    margin-left: 15px;
-  }
-}
-
-.navbar-default {
-  background-color: #f8f8f8;
-  border-color: #e7e7e7;
-}
-
-.navbar-default .navbar-brand {
-  color: #777777;
-}
-
-.navbar-default .navbar-brand:hover,
-.navbar-default .navbar-brand:focus {
-  color: #5e5e5e;
-  background-color: transparent;
-}
-
-.navbar-default .navbar-text {
-  color: #777777;
-}
-
-.navbar-default .navbar-nav > li > a {
-  color: #777777;
-}
-
-.navbar-default .navbar-nav > li > a:hover,
-.navbar-default .navbar-nav > li > a:focus {
-  color: #333333;
-  background-color: transparent;
-}
-
-.navbar-default .navbar-nav > .active > a,
-.navbar-default .navbar-nav > .active > a:hover,
-.navbar-default .navbar-nav > .active > a:focus {
-  color: #555555;
-  background-color: #e7e7e7;
-}
-
-.navbar-default .navbar-nav > .disabled > a,
-.navbar-default .navbar-nav > .disabled > a:hover,
-.navbar-default .navbar-nav > .disabled > a:focus {
-  color: #cccccc;
-  background-color: transparent;
-}
-
-.navbar-default .navbar-toggle {
-  border-color: #dddddd;
-}
-
-.navbar-default .navbar-toggle:hover,
-.navbar-default .navbar-toggle:focus {
-  background-color: #dddddd;
-}
-
-.navbar-default .navbar-toggle .icon-bar {
-  background-color: #cccccc;
-}
-
-.navbar-default .navbar-collapse,
-.navbar-default .navbar-form {
-  border-color: #e6e6e6;
-}
-
-.navbar-default .navbar-nav > .dropdown > a:hover .caret,
-.navbar-default .navbar-nav > .dropdown > a:focus .caret {
-  border-top-color: #333333;
-  border-bottom-color: #333333;
-}
-
-.navbar-default .navbar-nav > .open > a,
-.navbar-default .navbar-nav > .open > a:hover,
-.navbar-default .navbar-nav > .open > a:focus {
-  color: #555555;
-  background-color: #e7e7e7;
-}
-
-.navbar-default .navbar-nav > .open > a .caret,
-.navbar-default .navbar-nav > .open > a:hover .caret,
-.navbar-default .navbar-nav > .open > a:focus .caret {
-  border-top-color: #555555;
-  border-bottom-color: #555555;
-}
-
-.navbar-default .navbar-nav > .dropdown > a .caret {
-  border-top-color: #777777;
-  border-bottom-color: #777777;
-}
-
-@media (max-width: 767px) {
-  .navbar-default .navbar-nav .open .dropdown-menu > li > a {
-    color: #777777;
-  }
-  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
-  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
-    color: #333333;
-    background-color: transparent;
-  }
-  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
-  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
-  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
-    color: #555555;
-    background-color: #e7e7e7;
-  }
-  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
-  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
-  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
-    color: #cccccc;
-    background-color: transparent;
-  }
-}
-
-.navbar-default .navbar-link {
-  color: #777777;
-}
-
-.navbar-default .navbar-link:hover {
-  color: #333333;
-}
-
-.navbar-inverse {
-  background-color: #222222;
-  border-color: #080808;
-}
-
-.navbar-inverse .navbar-brand {
-  color: #999999;
-}
-
-.navbar-inverse .navbar-brand:hover,
-.navbar-inverse .navbar-brand:focus {
-  color: #ffffff;
-  background-color: transparent;
-}
-
-.navbar-inverse .navbar-text {
-  color: #999999;
-}
-
-.navbar-inverse .navbar-nav > li > a {
-  color: #999999;
-}
-
-.navbar-inverse .navbar-nav > li > a:hover,
-.navbar-inverse .navbar-nav > li > a:focus {
-  color: #ffffff;
-  background-color: transparent;
-}
-
-.navbar-inverse .navbar-nav > .active > a,
-.navbar-inverse .navbar-nav > .active > a:hover,
-.navbar-inverse .navbar-nav > .active > a:focus {
-  color: #ffffff;
-  background-color: #080808;
-}
-
-.navbar-inverse .navbar-nav > .disabled > a,
-.navbar-inverse .navbar-nav > .disabled > a:hover,
-.navbar-inverse .navbar-nav > .disabled > a:focus {
-  color: #444444;
-  background-color: transparent;
-}
-
-.navbar-inverse .navbar-toggle {
-  border-color: #333333;
-}
-
-.navbar-inverse .navbar-toggle:hover,
-.navbar-inverse .navbar-toggle:focus {
-  background-color: #333333;
-}
-
-.navbar-inverse .navbar-toggle .icon-bar {
-  background-color: #ffffff;
-}
-
-.navbar-inverse .navbar-collapse,
-.navbar-inverse .navbar-form {
-  border-color: #101010;
-}
-
-.navbar-inverse .navbar-nav > .open > a,
-.navbar-inverse .navbar-nav > .open > a:hover,
-.navbar-inverse .navbar-nav > .open > a:focus {
-  color: #ffffff;
-  background-color: #080808;
-}
-
-.navbar-inverse .navbar-nav > .dropdown > a:hover .caret {
-  border-top-color: #ffffff;
-  border-bottom-color: #ffffff;
-}
-
-.navbar-inverse .navbar-nav > .dropdown > a .caret {
-  border-top-color: #999999;
-  border-bottom-color: #999999;
-}
-
-.navbar-inverse .navbar-nav > .open > a .caret,
-.navbar-inverse .navbar-nav > .open > a:hover .caret,
-.navbar-inverse .navbar-nav > .open > a:focus .caret {
-  border-top-color: #ffffff;
-  border-bottom-color: #ffffff;
-}
-
-@media (max-width: 767px) {
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
-    border-color: #080808;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
-    color: #999999;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
-    color: #ffffff;
-    background-color: transparent;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
-    color: #ffffff;
-    background-color: #080808;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
-    color: #444444;
-    background-color: transparent;
-  }
-}
-
-.navbar-inverse .navbar-link {
-  color: #999999;
-}
-
-.navbar-inverse .navbar-link:hover {
-  color: #ffffff;
-}
-
-.breadcrumb {
-  padding: 8px 15px;
-  margin-bottom: 20px;
-  list-style: none;
-  background-color: #f5f5f5;
-  border-radius: 4px;
-}
-
-.breadcrumb > li {
-  display: inline-block;
-}
-
-.breadcrumb > li + li:before {
-  padding: 0 5px;
-  color: #cccccc;
-  content: "/\00a0";
-}
-
-.breadcrumb > .active {
-  color: #999999;
-}
-
-.pagination {
-  display: inline-block;
-  padding-left: 0;
-  margin: 20px 0;
-  border-radius: 4px;
-}
-
-.pagination > li {
-  display: inline;
-}
-
-.pagination > li > a,
-.pagination > li > span {
-  position: relative;
-  float: left;
-  padding: 6px 12px;
-  margin-left: -1px;
-  line-height: 1.428571429;
-  text-decoration: none;
-  background-color: #ffffff;
-  border: 1px solid #dddddd;
-}
-
-.pagination > li:first-child > a,
-.pagination > li:first-child > span {
-  margin-left: 0;
-  border-bottom-left-radius: 4px;
-  border-top-left-radius: 4px;
-}
-
-.pagination > li:last-child > a,
-.pagination > li:last-child > span {
-  border-top-right-radius: 4px;
-  border-bottom-right-radius: 4px;
-}
-
-.pagination > li > a:hover,
-.pagination > li > span:hover,
-.pagination > li > a:focus,
-.pagination > li > span:focus {
-  background-color: #eeeeee;
-}
-
-.pagination > .active > a,
-.pagination > .active > span,
-.pagination > .active > a:hover,
-.pagination > .active > span:hover,
-.pagination > .active > a:focus,
-.pagination > .active > span:focus {
-  z-index: 2;
-  color: #ffffff;
-  cursor: default;
-  background-color: #428bca;
-  border-color: #428bca;
-}
-
-.pagination > .disabled > span,
-.pagination > .disabled > a,
-.pagination > .disabled > a:hover,
-.pagination > .disabled > a:focus {
-  color: #999999;
-  cursor: not-allowed;
-  background-color: #ffffff;
-  border-color: #dddddd;
-}
-
-.pagination-lg > li > a,
-.pagination-lg > li > span {
-  padding: 10px 16px;
-  font-size: 18px;
-}
-
-.pagination-lg > li:first-child > a,
-.pagination-lg > li:first-child > span {
-  border-bottom-left-radius: 6px;
-  border-top-left-radius: 6px;
-}
-
-.pagination-lg > li:last-child > a,
-.pagination-lg > li:last-child > span {
-  border-top-right-radius: 6px;
-  border-bottom-right-radius: 6px;
-}
-
-.pagination-sm > li > a,
-.pagination-sm > li > span {
-  padding: 5px 10px;
-  font-size: 12px;
-}
-
-.pagination-sm > li:first-child > a,
-.pagination-sm > li:first-child > span {
-  border-bottom-left-radius: 3px;
-  border-top-left-radius: 3px;
-}
-
-.pagination-sm > li:last-child > a,
-.pagination-sm > li:last-child > span {
-  border-top-right-radius: 3px;
-  border-bottom-right-radius: 3px;
-}
-
-.pager {
-  padding-left: 0;
-  margin: 20px 0;
-  text-align: center;
-  list-style: none;
-}
-
-.pager:before,
-.pager:after {
-  display: table;
-  content: " ";
-}
-
-.pager:after {
-  clear: both;
-}
-
-.pager:before,
-.pager:after {
-  display: table;
-  content: " ";
-}
-
-.pager:after {
-  clear: both;
-}
-
-.pager li {
-  display: inline;
-}
-
-.pager li > a,
-.pager li > span {
-  display: inline-block;
-  padding: 5px 14px;
-  background-color: #ffffff;
-  border: 1px solid #dddddd;
-  border-radius: 15px;
-}
-
-.pager li > a:hover,
-.pager li > a:focus {
-  text-decoration: none;
-  background-color: #eeeeee;
-}
-
-.pager .next > a,
-.pager .next > span {
-  float: right;
-}
-
-.pager .previous > a,
-.pager .previous > span {
-  float: left;
-}
-
-.pager .disabled > a,
-.pager .disabled > a:hover,
-.pager .disabled > a:focus,
-.pager .disabled > span {
-  color: #999999;
-  cursor: not-allowed;
-  background-color: #ffffff;
-}
-
-.label {
-  display: inline;
-  padding: .2em .6em .3em;
-  font-size: 75%;
-  font-weight: bold;
-  line-height: 1;
-  color: #ffffff;
-  text-align: center;
-  white-space: nowrap;
-  vertical-align: baseline;
-  border-radius: .25em;
-}
-
-.label[href]:hover,
-.label[href]:focus {
-  color: #ffffff;
-  text-decoration: none;
-  cursor: pointer;
-}
-
-.label:empty {
-  display: none;
-}
-
-.label-default {
-  background-color: #999999;
-}
-
-.label-default[href]:hover,
-.label-default[href]:focus {
-  background-color: #808080;
-}
-
-.label-primary {
-  background-color: #428bca;
-}
-
-.label-primary[href]:hover,
-.label-primary[href]:focus {
-  background-color: #3071a9;
-}
-
-.label-success {
-  background-color: #5cb85c;
-}
-
-.label-success[href]:hover,
-.label-success[href]:focus {
-  background-color: #449d44;
-}
-
-.label-info {
-  background-color: #5bc0de;
-}
-
-.label-info[href]:hover,
-.label-info[href]:focus {
-  background-color: #31b0d5;
-}
-
-.label-warning {
-  background-color: #f0ad4e;
-}
-
-.label-warning[href]:hover,
-.label-warning[href]:focus {
-  background-color: #ec971f;
-}
-
-.label-danger {
-  background-color: #d9534f;
-}
-
-.label-danger[href]:hover,
-.label-danger[href]:focus {
-  background-color: #c9302c;
-}
-
-.badge {
-  display: inline-block;
-  min-width: 10px;
-  padding: 3px 7px;
-  font-size: 12px;
-  font-weight: bold;
-  line-height: 1;
-  color: #ffffff;
-  text-align: center;
-  white-space: nowrap;
-  vertical-align: baseline;
-  background-color: #999999;
-  border-radius: 10px;
-}
-
-.badge:empty {
-  display: none;
-}
-
-a.badge:hover,
-a.badge:focus {
-  color: #ffffff;
-  text-decoration: none;
-  cursor: pointer;
-}
-
-.btn .badge {
-  position: relative;
-  top: -1px;
-}
-
-a.list-group-item.active > .badge,
-.nav-pills > .active > a > .badge {
-  color: #428bca;
-  background-color: #ffffff;
-}
-
-.nav-pills > li > a > .badge {
-  margin-left: 3px;
-}
-
-.jumbotron {
-  padding: 30px;
-  margin-bottom: 30px;
-  font-size: 21px;
-  font-weight: 200;
-  line-height: 2.1428571435;
-  color: inherit;
-  background-color: #eeeeee;
-}
-
-.jumbotron h1 {
-  line-height: 1;
-  color: inherit;
-}
-
-.jumbotron p {
-  line-height: 1.4;
-}
-
-.container .jumbotron {
-  border-radius: 6px;
-}
-
-@media screen and (min-width: 768px) {
-  .jumbotron {
-    padding-top: 48px;
-    padding-bottom: 48px;
-  }
-  .container .jumbotron {
-    padding-right: 60px;
-    padding-left: 60px;
-  }
-  .jumbotron h1 {
-    font-size: 63px;
-  }
-}
-
-.thumbnail {
-  display: inline-block;
-  display: block;
-  height: auto;
-  max-width: 100%;
-  padding: 4px;
-  line-height: 1.428571429;
-  background-color: #ffffff;
-  border: 1px solid #dddddd;
-  border-radius: 4px;
-  -webkit-transition: all 0.2s ease-in-out;
-          transition: all 0.2s ease-in-out;
-}
-
-.thumbnail > img {
-  display: block;
-  height: auto;
-  max-width: 100%;
-}
-
-a.thumbnail:hover,
-a.thumbnail:focus {
-  border-color: #428bca;
-}
-
-.thumbnail > img {
-  margin-right: auto;
-  margin-left: auto;
-}
-
-.thumbnail .caption {
-  padding: 9px;
-  color: #333333;
-}
-
-.alert {
-  padding: 15px;
-  margin-bottom: 20px;
-  border: 1px solid transparent;
-  border-radius: 4px;
-}
-
-.alert h4 {
-  margin-top: 0;
-  color: inherit;
-}
-
-.alert .alert-link {
-  font-weight: bold;
-}
-
-.alert > p,
-.alert > ul {
-  margin-bottom: 0;
-}
-
-.alert > p + p {
-  margin-top: 5px;
-}
-
-.alert-dismissable {
-  padding-right: 35px;
-}
-
-.alert-dismissable .close {
-  position: relative;
-  top: -2px;
-  right: -21px;
-  color: inherit;
-}
-
-.alert-success {
-  color: #468847;
-  background-color: #dff0d8;
-  border-color: #d6e9c6;
-}
-
-.alert-success hr {
-  border-top-color: #c9e2b3;
-}
-
-.alert-success .alert-link {
-  color: #356635;
-}
-
-.alert-info {
-  color: #3a87ad;
-  background-color: #d9edf7;
-  border-color: #bce8f1;
-}
-
-.alert-info hr {
-  border-top-color: #a6e1ec;
-}
-
-.alert-info .alert-link {
-  color: #2d6987;
-}
-
-.alert-warning {
-  color: #c09853;
-  background-color: #fcf8e3;
-  border-color: #fbeed5;
-}
-
-.alert-warning hr {
-  border-top-color: #f8e5be;
-}
-
-.alert-warning .alert-link {
-  color: #a47e3c;
-}
-
-.alert-danger {
-  color: #b94a48;
-  background-color: #f2dede;
-  border-color: #eed3d7;
-}
-
-.alert-danger hr {
-  border-top-color: #e6c1c7;
-}
-
-.alert-danger .alert-link {
-  color: #953b39;
-}
-
-@-webkit-keyframes progress-bar-stripes {
-  from {
-    background-position: 40px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-
-@-moz-keyframes progress-bar-stripes {
-  from {
-    background-position: 40px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-
-@-o-keyframes progress-bar-stripes {
-  from {
-    background-position: 0 0;
-  }
-  to {
-    background-position: 40px 0;
-  }
-}
-
-@keyframes progress-bar-stripes {
-  from {
-    background-position: 40px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-
-.progress {
-  height: 20px;
-  margin-bottom: 20px;
-  overflow: hidden;
-  background-color: #f5f5f5;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-          box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-}
-
-.progress-bar {
-  float: left;
-  width: 0;
-  height: 100%;
-  font-size: 12px;
-  color: #ffffff;
-  text-align: center;
-  background-color: #428bca;
-  -webkit-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-transition: width 0.6s ease;
-          transition: width 0.6s ease;
-}
-
-.progress-striped .progress-bar {
-  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: 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-size: 40px 40px;
-}
-
-.progress.active .progress-bar {
-  -webkit-animation: progress-bar-stripes 2s linear infinite;
-     -moz-animation: progress-bar-stripes 2s linear infinite;
-      -ms-animation: progress-bar-stripes 2s linear infinite;
-       -o-animation: progress-bar-stripes 2s linear infinite;
-          animation: progress-bar-stripes 2s linear infinite;
-}
-
-.progress-bar-success {
-  background-color: #5cb85c;
-}
-
-.progress-striped .progress-bar-success {
-  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: 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-bar-info {
-  background-color: #5bc0de;
-}
-
-.progress-striped .progress-bar-info {
-  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: 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-bar-warning {
-  background-color: #f0ad4e;
-}
-
-.progress-striped .progress-bar-warning {
-  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: 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-bar-danger {
-  background-color: #d9534f;
-}
-
-.progress-striped .progress-bar-danger {
-  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: 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);
-}
-
-.media,
-.media-body {
-  overflow: hidden;
-  zoom: 1;
-}
-
-.media,
-.media .media {
-  margin-top: 15px;
-}
-
-.media:first-child {
-  margin-top: 0;
-}
-
-.media-object {
-  display: block;
-}
-
-.media-heading {
-  margin: 0 0 5px;
-}
-
-.media > .pull-left {
-  margin-right: 10px;
-}
-
-.media > .pull-right {
-  margin-left: 10px;
-}
-
-.media-list {
-  padding-left: 0;
-  list-style: none;
-}
-
-.list-group {
-  padding-left: 0;
-  margin-bottom: 20px;
-}
-
-.list-group-item {
-  position: relative;
-  display: block;
-  padding: 10px 15px;
-  margin-bottom: -1px;
-  background-color: #ffffff;
-  border: 1px solid #dddddd;
-}
-
-.list-group-item:first-child {
-  border-top-right-radius: 4px;
-  border-top-left-radius: 4px;
-}
-
-.list-group-item:last-child {
-  margin-bottom: 0;
-  border-bottom-right-radius: 4px;
-  border-bottom-left-radius: 4px;
-}
-
-.list-group-item > .badge {
-  float: right;
-}
-
-.list-group-item > .badge + .badge {
-  margin-right: 5px;
-}
-
-a.list-group-item {
-  color: #555555;
-}
-
-a.list-group-item .list-group-item-heading {
-  color: #333333;
-}
-
-a.list-group-item:hover,
-a.list-group-item:focus {
-  text-decoration: none;
-  background-color: #f5f5f5;
-}
-
-.list-group-item.active,
-.list-group-item.active:hover,
-.list-group-item.active:focus {
-  z-index: 2;
-  color: #ffffff;
-  background-color: #428bca;
-  border-color: #428bca;
-}
-
-.list-group-item.active .list-group-item-heading,
-.list-group-item.active:hover .list-group-item-heading,
-.list-group-item.active:focus .list-group-item-heading {
-  color: inherit;
-}
-
-.list-group-item.active .list-group-item-text,
-.list-group-item.active:hover .list-group-item-text,
-.list-group-item.active:focus .list-group-item-text {
-  color: #e1edf7;
-}
-
-.list-group-item-heading {
-  margin-top: 0;
-  margin-bottom: 5px;
-}
-
-.list-group-item-text {
-  margin-bottom: 0;
-  line-height: 1.3;
-}
-
-.panel {
-  margin-bottom: 20px;
-  background-color: #ffffff;
-  border: 1px solid transparent;
-  border-radius: 4px;
-  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
-          box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
-}
-
-.panel-body {
-  padding: 15px;
-}
-
-.panel-body:before,
-.panel-body:after {
-  display: table;
-  content: " ";
-}
-
-.panel-body:after {
-  clear: both;
-}
-
-.panel-body:before,
-.panel-body:after {
-  display: table;
-  content: " ";
-}
-
-.panel-body:after {
-  clear: both;
-}
-
-.panel > .list-group {
-  margin-bottom: 0;
-}
-
-.panel > .list-group .list-group-item {
-  border-width: 1px 0;
-}
-
-.panel > .list-group .list-group-item:first-child {
-  border-top-right-radius: 0;
-  border-top-left-radius: 0;
-}
-
-.panel > .list-group .list-group-item:last-child {
-  border-bottom: 0;
-}
-
-.panel-heading + .list-group .list-group-item:first-child {
-  border-top-width: 0;
-}
-
-.panel > .table {
-  margin-bottom: 0;
-}
-
-.panel > .panel-body + .table {
-  border-top: 1px solid #dddddd;
-}
-
-.panel-heading {
-  padding: 10px 15px;
-  border-bottom: 1px solid transparent;
-  border-top-right-radius: 3px;
-  border-top-left-radius: 3px;
-}
-
-.panel-title {
-  margin-top: 0;
-  margin-bottom: 0;
-  font-size: 16px;
-}
-
-.panel-title > a {
-  color: inherit;
-}
-
-.panel-footer {
-  padding: 10px 15px;
-  background-color: #f5f5f5;
-  border-top: 1px solid #dddddd;
-  border-bottom-right-radius: 3px;
-  border-bottom-left-radius: 3px;
-}
-
-.panel-group .panel {
-  margin-bottom: 0;
-  overflow: hidden;
-  border-radius: 4px;
-}
-
-.panel-group .panel + .panel {
-  margin-top: 5px;
-}
-
-.panel-group .panel-heading {
-  border-bottom: 0;
-}
-
-.panel-group .panel-heading + .panel-collapse .panel-body {
-  border-top: 1px solid #dddddd;
-}
-
-.panel-group .panel-footer {
-  border-top: 0;
-}
-
-.panel-group .panel-footer + .panel-collapse .panel-body {
-  border-bottom: 1px solid #dddddd;
-}
-
-.panel-default {
-  border-color: #dddddd;
-}
-
-.panel-default > .panel-heading {
-  color: #333333;
-  background-color: #f5f5f5;
-  border-color: #dddddd;
-}
-
-.panel-default > .panel-heading + .panel-collapse .panel-body {
-  border-top-color: #dddddd;
-}
-
-.panel-default > .panel-footer + .panel-collapse .panel-body {
-  border-bottom-color: #dddddd;
-}
-
-.panel-primary {
-  border-color: #428bca;
-}
-
-.panel-primary > .panel-heading {
-  color: #ffffff;
-  background-color: #428bca;
-  border-color: #428bca;
-}
-
-.panel-primary > .panel-heading + .panel-collapse .panel-body {
-  border-top-color: #428bca;
-}
-
-.panel-primary > .panel-footer + .panel-collapse .panel-body {
-  border-bottom-color: #428bca;
-}
-
-.panel-success {
-  border-color: #d6e9c6;
-}
-
-.panel-success > .panel-heading {
-  color: #468847;
-  background-color: #dff0d8;
-  border-color: #d6e9c6;
-}
-
-.panel-success > .panel-heading + .panel-collapse .panel-body {
-  border-top-color: #d6e9c6;
-}
-
-.panel-success > .panel-footer + .panel-collapse .panel-body {
-  border-bottom-color: #d6e9c6;
-}
-
-.panel-warning {
-  border-color: #fbeed5;
-}
-
-.panel-warning > .panel-heading {
-  color: #c09853;
-  background-color: #fcf8e3;
-  border-color: #fbeed5;
-}
-
-.panel-warning > .panel-heading + .panel-collapse .panel-body {
-  border-top-color: #fbeed5;
-}
-
-.panel-warning > .panel-footer + .panel-collapse .panel-body {
-  border-bottom-color: #fbeed5;
-}
-
-.panel-danger {
-  border-color: #eed3d7;
-}
-
-.panel-danger > .panel-heading {
-  color: #b94a48;
-  background-color: #f2dede;
-  border-color: #eed3d7;
-}
-
-.panel-danger > .panel-heading + .panel-collapse .panel-body {
-  border-top-color: #eed3d7;
-}
-
-.panel-danger > .panel-footer + .panel-collapse .panel-body {
-  border-bottom-color: #eed3d7;
-}
-
-.panel-info {
-  border-color: #bce8f1;
-}
-
-.panel-info > .panel-heading {
-  color: #3a87ad;
-  background-color: #d9edf7;
-  border-color: #bce8f1;
-}
-
-.panel-info > .panel-heading + .panel-collapse .panel-body {
-  border-top-color: #bce8f1;
-}
-
-.panel-info > .panel-footer + .panel-collapse .panel-body {
-  border-bottom-color: #bce8f1;
-}
-
-.well {
-  min-height: 20px;
-  padding: 19px;
-  margin-bottom: 20px;
-  background-color: #f5f5f5;
-  border: 1px solid #e3e3e3;
-  border-radius: 4px;
-  -webkit-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);
-}
-
-.well-lg {
-  padding: 24px;
-  border-radius: 6px;
-}
-
-.well-sm {
-  padding: 9px;
-  border-radius: 3px;
-}
-
-.close {
-  float: right;
-  font-size: 21px;
-  font-weight: bold;
-  line-height: 1;
-  color: #000000;
-  text-shadow: 0 1px 0 #ffffff;
-  opacity: 0.2;
-  filter: alpha(opacity=20);
-}
-
-.close:hover,
-.close:focus {
-  color: #000000;
-  text-decoration: none;
-  cursor: pointer;
-  opacity: 0.5;
-  filter: alpha(opacity=50);
-}
-
-button.close {
-  padding: 0;
-  cursor: pointer;
-  background: transparent;
-  border: 0;
-  -webkit-appearance: none;
-}
-
-.modal-open {
-  overflow: hidden;
-}
-
-body.modal-open,
-.modal-open .navbar-fixed-top,
-.modal-open .navbar-fixed-bottom {
-  margin-right: 15px;
-}
-
-.modal {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 1040;
-  display: none;
-  overflow: auto;
-  overflow-y: scroll;
-}
-
-.modal.fade .modal-dialog {
-  -webkit-transform: translate(0, -25%);
-      -ms-transform: translate(0, -25%);
-          transform: translate(0, -25%);
-  -webkit-transition: -webkit-transform 0.3s ease-out;
-     -moz-transition: -moz-transform 0.3s ease-out;
-       -o-transition: -o-transform 0.3s ease-out;
-          transition: transform 0.3s ease-out;
-}
-
-.modal.in .modal-dialog {
-  -webkit-transform: translate(0, 0);
-      -ms-transform: translate(0, 0);
-          transform: translate(0, 0);
-}
-
-.modal-dialog {
-  z-index: 1050;
-  width: auto;
-  padding: 10px;
-  margin-right: auto;
-  margin-left: auto;
-}
-
-.modal-content {
-  position: relative;
-  background-color: #ffffff;
-  border: 1px solid #999999;
-  border: 1px solid rgba(0, 0, 0, 0.2);
-  border-radius: 6px;
-  outline: none;
-  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
-          box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
-  background-clip: padding-box;
-}
-
-.modal-backdrop {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 1030;
-  background-color: #000000;
-}
-
-.modal-backdrop.fade {
-  opacity: 0;
-  filter: alpha(opacity=0);
-}
-
-.modal-backdrop.in {
-  opacity: 0.5;
-  filter: alpha(opacity=50);
-}
-
-.modal-header {
-  min-height: 16.428571429px;
-  padding: 15px;
-  border-bottom: 1px solid #e5e5e5;
-}
-
-.modal-header .close {
-  margin-top: -2px;
-}
-
-.modal-title {
-  margin: 0;
-  line-height: 1.428571429;
-}
-
-.modal-body {
-  position: relative;
-  padding: 20px;
-}
-
-.modal-footer {
-  padding: 19px 20px 20px;
-  margin-top: 15px;
-  text-align: right;
-  border-top: 1px solid #e5e5e5;
-}
-
-.modal-footer:before,
-.modal-footer:after {
-  display: table;
-  content: " ";
-}
-
-.modal-footer:after {
-  clear: both;
-}
-
-.modal-footer:before,
-.modal-footer:after {
-  display: table;
-  content: " ";
-}
-
-.modal-footer:after {
-  clear: both;
-}
-
-.modal-footer .btn + .btn {
-  margin-bottom: 0;
-  margin-left: 5px;
-}
-
-.modal-footer .btn-group .btn + .btn {
-  margin-left: -1px;
-}
-
-.modal-footer .btn-block + .btn-block {
-  margin-left: 0;
-}
-
-@media screen and (min-width: 768px) {
-  .modal-dialog {
-    right: auto;
-    left: 50%;
-    width: 600px;
-    padding-top: 30px;
-    padding-bottom: 30px;
-  }
-  .modal-content {
-    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
-            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
-  }
-}
-
-.tooltip {
-  position: absolute;
-  z-index: 1030;
-  display: block;
-  font-size: 12px;
-  line-height: 1.4;
-  opacity: 0;
-  filter: alpha(opacity=0);
-  visibility: visible;
-}
-
-.tooltip.in {
-  opacity: 0.9;
-  filter: alpha(opacity=90);
-}
-
-.tooltip.top {
-  padding: 5px 0;
-  margin-top: -3px;
-}
-
-.tooltip.right {
-  padding: 0 5px;
-  margin-left: 3px;
-}
-
-.tooltip.bottom {
-  padding: 5px 0;
-  margin-top: 3px;
-}
-
-.tooltip.left {
-  padding: 0 5px;
-  margin-left: -3px;
-}
-
-.tooltip-inner {
-  max-width: 200px;
-  padding: 3px 8px;
-  color: #ffffff;
-  text-align: center;
-  text-decoration: none;
-  background-color: #000000;
-  border-radius: 4px;
-}
-
-.tooltip-arrow {
-  position: absolute;
-  width: 0;
-  height: 0;
-  border-color: transparent;
-  border-style: solid;
-}
-
-.tooltip.top .tooltip-arrow {
-  bottom: 0;
-  left: 50%;
-  margin-left: -5px;
-  border-top-color: #000000;
-  border-width: 5px 5px 0;
-}
-
-.tooltip.top-left .tooltip-arrow {
-  bottom: 0;
-  left: 5px;
-  border-top-color: #000000;
-  border-width: 5px 5px 0;
-}
-
-.tooltip.top-right .tooltip-arrow {
-  right: 5px;
-  bottom: 0;
-  border-top-color: #000000;
-  border-width: 5px 5px 0;
-}
-
-.tooltip.right .tooltip-arrow {
-  top: 50%;
-  left: 0;
-  margin-top: -5px;
-  border-right-color: #000000;
-  border-width: 5px 5px 5px 0;
-}
-
-.tooltip.left .tooltip-arrow {
-  top: 50%;
-  right: 0;
-  margin-top: -5px;
-  border-left-color: #000000;
-  border-width: 5px 0 5px 5px;
-}
-
-.tooltip.bottom .tooltip-arrow {
-  top: 0;
-  left: 50%;
-  margin-left: -5px;
-  border-bottom-color: #000000;
-  border-width: 0 5px 5px;
-}
-
-.tooltip.bottom-left .tooltip-arrow {
-  top: 0;
-  left: 5px;
-  border-bottom-color: #000000;
-  border-width: 0 5px 5px;
-}
-
-.tooltip.bottom-right .tooltip-arrow {
-  top: 0;
-  right: 5px;
-  border-bottom-color: #000000;
-  border-width: 0 5px 5px;
-}
-
-.popover {
-  position: absolute;
-  top: 0;
-  left: 0;
-  z-index: 1010;
-  display: none;
-  max-width: 276px;
-  padding: 1px;
-  text-align: left;
-  white-space: normal;
-  background-color: #ffffff;
-  border: 1px solid #cccccc;
-  border: 1px solid rgba(0, 0, 0, 0.2);
-  border-radius: 6px;
-  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-          box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  background-clip: padding-box;
-}
-
-.popover.top {
-  margin-top: -10px;
-}
-
-.popover.right {
-  margin-left: 10px;
-}
-
-.popover.bottom {
-  margin-top: 10px;
-}
-
-.popover.left {
-  margin-left: -10px;
-}
-
-.popover-title {
-  padding: 8px 14px;
-  margin: 0;
-  font-size: 14px;
-  font-weight: normal;
-  line-height: 18px;
-  background-color: #f7f7f7;
-  border-bottom: 1px solid #ebebeb;
-  border-radius: 5px 5px 0 0;
-}
-
-.popover-content {
-  padding: 9px 14px;
-}
-
-.popover .arrow,
-.popover .arrow:after {
-  position: absolute;
-  display: block;
-  width: 0;
-  height: 0;
-  border-color: transparent;
-  border-style: solid;
-}
-
-.popover .arrow {
-  border-width: 11px;
-}
-
-.popover .arrow:after {
-  border-width: 10px;
-  content: "";
-}
-
-.popover.top .arrow {
-  bottom: -11px;
-  left: 50%;
-  margin-left: -11px;
-  border-top-color: #999999;
-  border-top-color: rgba(0, 0, 0, 0.25);
-  border-bottom-width: 0;
-}
-
-.popover.top .arrow:after {
-  bottom: 1px;
-  margin-left: -10px;
-  border-top-color: #ffffff;
-  border-bottom-width: 0;
-  content: " ";
-}
-
-.popover.right .arrow {
-  top: 50%;
-  left: -11px;
-  margin-top: -11px;
-  border-right-color: #999999;
-  border-right-color: rgba(0, 0, 0, 0.25);
-  border-left-width: 0;
-}
-
-.popover.right .arrow:after {
-  bottom: -10px;
-  left: 1px;
-  border-right-color: #ffffff;
-  border-left-width: 0;
-  content: " ";
-}
-
-.popover.bottom .arrow {
-  top: -11px;
-  left: 50%;
-  margin-left: -11px;
-  border-bottom-color: #999999;
-  border-bottom-color: rgba(0, 0, 0, 0.25);
-  border-top-width: 0;
-}
-
-.popover.bottom .arrow:after {
-  top: 1px;
-  margin-left: -10px;
-  border-bottom-color: #ffffff;
-  border-top-width: 0;
-  content: " ";
-}
-
-.popover.left .arrow {
-  top: 50%;
-  right: -11px;
-  margin-top: -11px;
-  border-left-color: #999999;
-  border-left-color: rgba(0, 0, 0, 0.25);
-  border-right-width: 0;
-}
-
-.popover.left .arrow:after {
-  right: 1px;
-  bottom: -10px;
-  border-left-color: #ffffff;
-  border-right-width: 0;
-  content: " ";
-}
-
-.carousel {
-  position: relative;
-}
-
-.carousel-inner {
-  position: relative;
-  width: 100%;
-  overflow: hidden;
-}
-
-.carousel-inner > .item {
-  position: relative;
-  display: none;
-  -webkit-transition: 0.6s ease-in-out left;
-          transition: 0.6s ease-in-out left;
-}
-
-.carousel-inner > .item > img,
-.carousel-inner > .item > a > img {
-  display: block;
-  height: auto;
-  max-width: 100%;
-  line-height: 1;
-}
-
-.carousel-inner > .active,
-.carousel-inner > .next,
-.carousel-inner > .prev {
-  display: block;
-}
-
-.carousel-inner > .active {
-  left: 0;
-}
-
-.carousel-inner > .next,
-.carousel-inner > .prev {
-  position: absolute;
-  top: 0;
-  width: 100%;
-}
-
-.carousel-inner > .next {
-  left: 100%;
-}
-
-.carousel-inner > .prev {
-  left: -100%;
-}
-
-.carousel-inner > .next.left,
-.carousel-inner > .prev.right {
-  left: 0;
-}
-
-.carousel-inner > .active.left {
-  left: -100%;
-}
-
-.carousel-inner > .active.right {
-  left: 100%;
-}
-
-.carousel-control {
-  position: absolute;
-  top: 0;
-  bottom: 0;
-  left: 0;
-  width: 15%;
-  font-size: 20px;
-  color: #ffffff;
-  text-align: center;
-  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
-  opacity: 0.5;
-  filter: alpha(opacity=50);
-}
-
-.carousel-control.left {
-  background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001)));
-  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%));
-  background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%);
-  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
-}
-
-.carousel-control.right {
-  right: 0;
-  left: auto;
-  background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5)));
-  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%));
-  background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%);
-  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
-}
-
-.carousel-control:hover,
-.carousel-control:focus {
-  color: #ffffff;
-  text-decoration: none;
-  opacity: 0.9;
-  filter: alpha(opacity=90);
-}
-
-.carousel-control .icon-prev,
-.carousel-control .icon-next,
-.carousel-control .glyphicon-chevron-left,
-.carousel-control .glyphicon-chevron-right {
-  position: absolute;
-  top: 50%;
-  left: 50%;
-  z-index: 5;
-  display: inline-block;
-}
-
-.carousel-control .icon-prev,
-.carousel-control .icon-next {
-  width: 20px;
-  height: 20px;
-  margin-top: -10px;
-  margin-left: -10px;
-  font-family: serif;
-}
-
-.carousel-control .icon-prev:before {
-  content: '\2039';
-}
-
-.carousel-control .icon-next:before {
-  content: '\203a';
-}
-
-.carousel-indicators {
-  position: absolute;
-  bottom: 10px;
-  left: 50%;
-  z-index: 15;
-  width: 60%;
-  padding-left: 0;
-  margin-left: -30%;
-  text-align: center;
-  list-style: none;
-}
-
-.carousel-indicators li {
-  display: inline-block;
-  width: 10px;
-  height: 10px;
-  margin: 1px;
-  text-indent: -999px;
-  cursor: pointer;
-  border: 1px solid #ffffff;
-  border-radius: 10px;
-}
-
-.carousel-indicators .active {
-  width: 12px;
-  height: 12px;
-  margin: 0;
-  background-color: #ffffff;
-}
-
-.carousel-caption {
-  position: absolute;
-  right: 15%;
-  bottom: 20px;
-  left: 15%;
-  z-index: 10;
-  padding-top: 20px;
-  padding-bottom: 20px;
-  color: #ffffff;
-  text-align: center;
-  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
-}
-
-.carousel-caption .btn {
-  text-shadow: none;
-}
-
-@media screen and (min-width: 768px) {
-  .carousel-control .icon-prev,
-  .carousel-control .icon-next {
-    width: 30px;
-    height: 30px;
-    margin-top: -15px;
-    margin-left: -15px;
-    font-size: 30px;
-  }
-  .carousel-caption {
-    right: 20%;
-    left: 20%;
-    padding-bottom: 30px;
-  }
-  .carousel-indicators {
-    bottom: 20px;
-  }
-}
-
-.clearfix:before,
-.clearfix:after {
-  display: table;
-  content: " ";
-}
-
-.clearfix:after {
-  clear: both;
-}
-
-.pull-right {
-  float: right !important;
-}
-
-.pull-left {
-  float: left !important;
-}
-
-.hide {
-  display: none !important;
-}
-
-.show {
-  display: block !important;
-}
-
-.invisible {
-  visibility: hidden;
-}
-
-.text-hide {
-  font: 0/0 a;
-  color: transparent;
-  text-shadow: none;
-  background-color: transparent;
-  border: 0;
-}
-
-.affix {
-  position: fixed;
-}
-
-@-ms-viewport {
-  width: device-width;
-}
-
-@media screen and (max-width: 400px) {
-  @-ms-viewport {
-    width: 320px;
-  }
-}
-
-.hidden {
-  display: none !important;
-  visibility: hidden !important;
-}
-
-.visible-xs {
-  display: none !important;
-}
-
-tr.visible-xs {
-  display: none !important;
-}
-
-th.visible-xs,
-td.visible-xs {
-  display: none !important;
-}
-
-@media (max-width: 767px) {
-  .visible-xs {
-    display: block !important;
-  }
-  tr.visible-xs {
-    display: table-row !important;
-  }
-  th.visible-xs,
-  td.visible-xs {
-    display: table-cell !important;
-  }
-}
-
-@media (min-width: 768px) and (max-width: 991px) {
-  .visible-xs.visible-sm {
-    display: block !important;
-  }
-  tr.visible-xs.visible-sm {
-    display: table-row !important;
-  }
-  th.visible-xs.visible-sm,
-  td.visible-xs.visible-sm {
-    display: table-cell !important;
-  }
-}
-
-@media (min-width: 992px) and (max-width: 1199px) {
-  .visible-xs.visible-md {
-    display: block !important;
-  }
-  tr.visible-xs.visible-md {
-    display: table-row !important;
-  }
-  th.visible-xs.visible-md,
-  td.visible-xs.visible-md {
-    display: table-cell !important;
-  }
-}
-
-@media (min-width: 1200px) {
-  .visible-xs.visible-lg {
-    display: block !important;
-  }
-  tr.visible-xs.visible-lg {
-    display: table-row !important;
-  }
-  th.visible-xs.visible-lg,
-  td.visible-xs.visible-lg {
-    display: table-cell !important;
-  }
-}
-
-.visible-sm {
-  display: none !important;
-}
-
-tr.visible-sm {
-  display: none !important;
-}
-
-th.visible-sm,
-td.visible-sm {
-  display: none !important;
-}
-
-@media (max-width: 767px) {
-  .visible-sm.visible-xs {
-    display: block !important;
-  }
-  tr.visible-sm.visible-xs {
-    display: table-row !important;
-  }
-  th.visible-sm.visible-xs,
-  td.visible-sm.visible-xs {
-    display: table-cell !important;
-  }
-}
-
-@media (min-width: 768px) and (max-width: 991px) {
-  .visible-sm {
-    display: block !important;
-  }
-  tr.visible-sm {
-    display: table-row !important;
-  }
-  th.visible-sm,
-  td.visible-sm {
-    display: table-cell !important;
-  }
-}
-
-@media (min-width: 992px) and (max-width: 1199px) {
-  .visible-sm.visible-md {
-    display: block !important;
-  }
-  tr.visible-sm.visible-md {
-    display: table-row !important;
-  }
-  th.visible-sm.visible-md,
-  td.visible-sm.visible-md {
-    display: table-cell !important;
-  }
-}
-
-@media (min-width: 1200px) {
-  .visible-sm.visible-lg {
-    display: block !important;
-  }
-  tr.visible-sm.visible-lg {
-    display: table-row !important;
-  }
-  th.visible-sm.visible-lg,
-  td.visible-sm.visible-lg {
-    display: table-cell !important;
-  }
-}
-
-.visible-md {
-  display: none !important;
-}
-
-tr.visible-md {
-  display: none !important;
-}
-
-th.visible-md,
-td.visible-md {
-  display: none !important;
-}
-
-@media (max-width: 767px) {
-  .visible-md.visible-xs {
-    display: block !important;
-  }
-  tr.visible-md.visible-xs {
-    display: table-row !important;
-  }
-  th.visible-md.visible-xs,
-  td.visible-md.visible-xs {
-    display: table-cell !important;
-  }
-}
-
-@media (min-width: 768px) and (max-width: 991px) {
-  .visible-md.visible-sm {
-    display: block !important;
-  }
-  tr.visible-md.visible-sm {
-    display: table-row !important;
-  }
-  th.visible-md.visible-sm,
-  td.visible-md.visible-sm {
-    display: table-cell !important;
-  }
-}
-
-@media (min-width: 992px) and (max-width: 1199px) {
-  .visible-md {
-    display: block !important;
-  }
-  tr.visible-md {
-    display: table-row !important;
-  }
-  th.visible-md,
-  td.visible-md {
-    display: table-cell !important;
-  }
-}
-
-@media (min-width: 1200px) {
-  .visible-md.visible-lg {
-    display: block !important;
-  }
-  tr.visible-md.visible-lg {
-    display: table-row !important;
-  }
-  th.visible-md.visible-lg,
-  td.visible-md.visible-lg {
-    display: table-cell !important;
-  }
-}
-
-.visible-lg {
-  display: none !important;
-}
-
-tr.visible-lg {
-  display: none !important;
-}
-
-th.visible-lg,
-td.visible-lg {
-  display: none !important;
-}
-
-@media (max-width: 767px) {
-  .visible-lg.visible-xs {
-    display: block !important;
-  }
-  tr.visible-lg.visible-xs {
-    display: table-row !important;
-  }
-  th.visible-lg.visible-xs,
-  td.visible-lg.visible-xs {
-    display: table-cell !important;
-  }
-}
-
-@media (min-width: 768px) and (max-width: 991px) {
-  .visible-lg.visible-sm {
-    display: block !important;
-  }
-  tr.visible-lg.visible-sm {
-    display: table-row !important;
-  }
-  th.visible-lg.visible-sm,
-  td.visible-lg.visible-sm {
-    display: table-cell !important;
-  }
-}
-
-@media (min-width: 992px) and (max-width: 1199px) {
-  .visible-lg.visible-md {
-    display: block !important;
-  }
-  tr.visible-lg.visible-md {
-    display: table-row !important;
-  }
-  th.visible-lg.visible-md,
-  td.visible-lg.visible-md {
-    display: table-cell !important;
-  }
-}
-
-@media (min-width: 1200px) {
-  .visible-lg {
-    display: block !important;
-  }
-  tr.visible-lg {
-    display: table-row !important;
-  }
-  th.visible-lg,
-  td.visible-lg {
-    display: table-cell !important;
-  }
-}
-
-.hidden-xs {
-  display: block !important;
-}
-
-tr.hidden-xs {
-  display: table-row !important;
-}
-
-th.hidden-xs,
-td.hidden-xs {
-  display: table-cell !important;
-}
-
-@media (max-width: 767px) {
-  .hidden-xs {
-    display: none !important;
-  }
-  tr.hidden-xs {
-    display: none !important;
-  }
-  th.hidden-xs,
-  td.hidden-xs {
-    display: none !important;
-  }
-}
-
-@media (min-width: 768px) and (max-width: 991px) {
-  .hidden-xs.hidden-sm {
-    display: none !important;
-  }
-  tr.hidden-xs.hidden-sm {
-    display: none !important;
-  }
-  th.hidden-xs.hidden-sm,
-  td.hidden-xs.hidden-sm {
-    display: none !important;
-  }
-}
-
-@media (min-width: 992px) and (max-width: 1199px) {
-  .hidden-xs.hidden-md {
-    display: none !important;
-  }
-  tr.hidden-xs.hidden-md {
-    display: none !important;
-  }
-  th.hidden-xs.hidden-md,
-  td.hidden-xs.hidden-md {
-    display: none !important;
-  }
-}
-
-@media (min-width: 1200px) {
-  .hidden-xs.hidden-lg {
-    display: none !important;
-  }
-  tr.hidden-xs.hidden-lg {
-    display: none !important;
-  }
-  th.hidden-xs.hidden-lg,
-  td.hidden-xs.hidden-lg {
-    display: none !important;
-  }
-}
-
-.hidden-sm {
-  display: block !important;
-}
-
-tr.hidden-sm {
-  display: table-row !important;
-}
-
-th.hidden-sm,
-td.hidden-sm {
-  display: table-cell !important;
-}
-
-@media (max-width: 767px) {
-  .hidden-sm.hidden-xs {
-    display: none !important;
-  }
-  tr.hidden-sm.hidden-xs {
-    display: none !important;
-  }
-  th.hidden-sm.hidden-xs,
-  td.hidden-sm.hidden-xs {
-    display: none !important;
-  }
-}
-
-@media (min-width: 768px) and (max-width: 991px) {
-  .hidden-sm {
-    display: none !important;
-  }
-  tr.hidden-sm {
-    display: none !important;
-  }
-  th.hidden-sm,
-  td.hidden-sm {
-    display: none !important;
-  }
-}
-
-@media (min-width: 992px) and (max-width: 1199px) {
-  .hidden-sm.hidden-md {
-    display: none !important;
-  }
-  tr.hidden-sm.hidden-md {
-    display: none !important;
-  }
-  th.hidden-sm.hidden-md,
-  td.hidden-sm.hidden-md {
-    display: none !important;
-  }
-}
-
-@media (min-width: 1200px) {
-  .hidden-sm.hidden-lg {
-    display: none !important;
-  }
-  tr.hidden-sm.hidden-lg {
-    display: none !important;
-  }
-  th.hidden-sm.hidden-lg,
-  td.hidden-sm.hidden-lg {
-    display: none !important;
-  }
-}
-
-.hidden-md {
-  display: block !important;
-}
-
-tr.hidden-md {
-  display: table-row !important;
-}
-
-th.hidden-md,
-td.hidden-md {
-  display: table-cell !important;
-}
-
-@media (max-width: 767px) {
-  .hidden-md.hidden-xs {
-    display: none !important;
-  }
-  tr.hidden-md.hidden-xs {
-    display: none !important;
-  }
-  th.hidden-md.hidden-xs,
-  td.hidden-md.hidden-xs {
-    display: none !important;
-  }
-}
-
-@media (min-width: 768px) and (max-width: 991px) {
-  .hidden-md.hidden-sm {
-    display: none !important;
-  }
-  tr.hidden-md.hidden-sm {
-    display: none !important;
-  }
-  th.hidden-md.hidden-sm,
-  td.hidden-md.hidden-sm {
-    display: none !important;
-  }
-}
-
-@media (min-width: 992px) and (max-width: 1199px) {
-  .hidden-md {
-    display: none !important;
-  }
-  tr.hidden-md {
-    display: none !important;
-  }
-  th.hidden-md,
-  td.hidden-md {
-    display: none !important;
-  }
-}
-
-@media (min-width: 1200px) {
-  .hidden-md.hidden-lg {
-    display: none !important;
-  }
-  tr.hidden-md.hidden-lg {
-    display: none !important;
-  }
-  th.hidden-md.hidden-lg,
-  td.hidden-md.hidden-lg {
-    display: none !important;
-  }
-}
-
-.hidden-lg {
-  display: block !important;
-}
-
-tr.hidden-lg {
-  display: table-row !important;
-}
-
-th.hidden-lg,
-td.hidden-lg {
-  display: table-cell !important;
-}
-
-@media (max-width: 767px) {
-  .hidden-lg.hidden-xs {
-    display: none !important;
-  }
-  tr.hidden-lg.hidden-xs {
-    display: none !important;
-  }
-  th.hidden-lg.hidden-xs,
-  td.hidden-lg.hidden-xs {
-    display: none !important;
-  }
-}
-
-@media (min-width: 768px) and (max-width: 991px) {
-  .hidden-lg.hidden-sm {
-    display: none !important;
-  }
-  tr.hidden-lg.hidden-sm {
-    display: none !important;
-  }
-  th.hidden-lg.hidden-sm,
-  td.hidden-lg.hidden-sm {
-    display: none !important;
-  }
-}
-
-@media (min-width: 992px) and (max-width: 1199px) {
-  .hidden-lg.hidden-md {
-    display: none !important;
-  }
-  tr.hidden-lg.hidden-md {
-    display: none !important;
-  }
-  th.hidden-lg.hidden-md,
-  td.hidden-lg.hidden-md {
-    display: none !important;
-  }
-}
-
-@media (min-width: 1200px) {
-  .hidden-lg {
-    display: none !important;
-  }
-  tr.hidden-lg {
-    display: none !important;
-  }
-  th.hidden-lg,
-  td.hidden-lg {
-    display: none !important;
-  }
-}
-
-.visible-print {
-  display: none !important;
-}
-
-tr.visible-print {
-  display: none !important;
-}
-
-th.visible-print,
-td.visible-print {
-  display: none !important;
-}
-
-@media print {
-  .visible-print {
-    display: block !important;
-  }
-  tr.visible-print {
-    display: table-row !important;
-  }
-  th.visible-print,
-  td.visible-print {
-    display: table-cell !important;
-  }
-  .hidden-print {
-    display: none !important;
-  }
-  tr.hidden-print {
-    display: none !important;
-  }
-  th.hidden-print,
-  td.hidden-print {
-    display: none !important;
-  }
-}
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/css/bootstrap.min.css b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/css/bootstrap.min.css
deleted file mode 100644
index a553c4f5e08..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/css/bootstrap.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * Bootstrap v3.0.0
- *
- * Copyright 2013 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 by @mdo and @fat.
- *//*! normalize.css v2.1.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{margin:.67em 0;font-size:2em}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}mark{color:#000;background:#ff0}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid #c0c0c0}legend{padding:0;border:0}button,input,select,textarea{margin:0;font-family:inherit;font-size:100%}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{padding:0;box-sizing:border-box}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:2cm .5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}button,input,select[multiple],textarea{background-image:none}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}img{vertical-align:middle}.img-responsive{display:block;height:auto;max-width:100%}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16.099999999999998px;font-weight:200;line-height:1.4}@media(min-width:768px){.lead{font-size:21px}}small{font-size:85%}cite{font-style:normal}.text-muted{color:#999}.text-primary{color:#428bca}.text-warning{color:#c09853}.text-danger{color:#b94a48}.text-success{color:#468847}.text-info{color:#3a87ad}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}h1 small,.h1 small{font-size:24px}h2 small,.h2 small{font-size:18px}h3 small,.h3 small,h4 small,.h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt,dd{line-height:1.428571429}dt{font-weight:bold}dd{margin-left:0}@media(min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}blockquote p:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.428571429;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:1.428571429}code,pre{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.row{margin-right:-15px;margin-left:-15px}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-sm-1,.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-10,.col-sm-11,.col-sm-12,.col-md-1,.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-10,.col-md-11,.col-md-12,.col-lg-1,.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-10,.col-lg-11,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11{float:left}.col-xs-1{width:8.333333333333332%}.col-xs-2{width:16.666666666666664%}.col-xs-3{width:25%}.col-xs-4{width:33.33333333333333%}.col-xs-5{width:41.66666666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.333333333333336%}.col-xs-8{width:66.66666666666666%}.col-xs-9{width:75%}.col-xs-10{width:83.33333333333334%}.col-xs-11{width:91.66666666666666%}.col-xs-12{width:100%}@media(min-width:768px){.container{max-width:750px}.col-sm-1,.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-10,.col-sm-11{float:left}.col-sm-1{width:8.333333333333332%}.col-sm-2{width:16.666666666666664%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333333333%}.col-sm-5{width:41.66666666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.333333333333336%}.col-sm-8{width:66.66666666666666%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333333334%}.col-sm-11{width:91.66666666666666%}.col-sm-12{width:100%}.col-sm-push-1{left:8.333333333333332%}.col-sm-push-2{left:16.666666666666664%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333333333%}.col-sm-push-5{left:41.66666666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.333333333333336%}.col-sm-push-8{left:66.66666666666666%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333333334%}.col-sm-push-11{left:91.66666666666666%}.col-sm-pull-1{right:8.333333333333332%}.col-sm-pull-2{right:16.666666666666664%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333333333%}.col-sm-pull-5{right:41.66666666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.333333333333336%}.col-sm-pull-8{right:66.66666666666666%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333333334%}.col-sm-pull-11{right:91.66666666666666%}.col-sm-offset-1{margin-left:8.333333333333332%}.col-sm-offset-2{margin-left:16.666666666666664%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333333333%}.col-sm-offset-5{margin-left:41.66666666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.333333333333336%}.col-sm-offset-8{margin-left:66.66666666666666%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333333334%}.col-sm-offset-11{margin-left:91.66666666666666%}}@media(min-width:992px){.container{max-width:970px}.col-md-1,.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-10,.col-md-11{float:left}.col-md-1{width:8.333333333333332%}.col-md-2{width:16.666666666666664%}.col-md-3{width:25%}.col-md-4{width:33.33333333333333%}.col-md-5{width:41.66666666666667%}.col-md-6{width:50%}.col-md-7{width:58.333333333333336%}.col-md-8{width:66.66666666666666%}.col-md-9{width:75%}.col-md-10{width:83.33333333333334%}.col-md-11{width:91.66666666666666%}.col-md-12{width:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.333333333333332%}.col-md-push-2{left:16.666666666666664%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333333333%}.col-md-push-5{left:41.66666666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.333333333333336%}.col-md-push-8{left:66.66666666666666%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333333334%}.col-md-push-11{left:91.66666666666666%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.333333333333332%}.col-md-pull-2{right:16.666666666666664%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333333333%}.col-md-pull-5{right:41.66666666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.333333333333336%}.col-md-pull-8{right:66.66666666666666%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333333334%}.col-md-pull-11{right:91.66666666666666%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.333333333333332%}.col-md-offset-2{margin-left:16.666666666666664%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333333333%}.col-md-offset-5{margin-left:41.66666666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.333333333333336%}.col-md-offset-8{margin-left:66.66666666666666%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333333334%}.col-md-offset-11{margin-left:91.66666666666666%}}@media(min-width:1200px){.container{max-width:1170px}.col-lg-1,.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-10,.col-lg-11{float:left}.col-lg-1{width:8.333333333333332%}.col-lg-2{width:16.666666666666664%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333333333%}.col-lg-5{width:41.66666666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.333333333333336%}.col-lg-8{width:66.66666666666666%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333333334%}.col-lg-11{width:91.66666666666666%}.col-lg-12{width:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.333333333333332%}.col-lg-push-2{left:16.666666666666664%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333333333%}.col-lg-push-5{left:41.66666666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.333333333333336%}.col-lg-push-8{left:66.66666666666666%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333333334%}.col-lg-push-11{left:91.66666666666666%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.333333333333332%}.col-lg-pull-2{right:16.666666666666664%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333333333%}.col-lg-pull-5{right:41.66666666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.333333333333336%}.col-lg-pull-8{right:66.66666666666666%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333333334%}.col-lg-pull-11{right:91.66666666666666%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.333333333333332%}.col-lg-offset-2{margin-left:16.666666666666664%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333333333%}.col-lg-offset-5{margin-left:41.66666666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.333333333333336%}.col-lg-offset-8{margin-left:66.66666666666666%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333333334%}.col-lg-offset-11{margin-left:91.66666666666666%}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table thead>tr>th,.table tbody>tr>th,.table tfoot>tr>th,.table thead>tr>td,.table tbody>tr>td,.table tfoot>tr>td{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table caption+thead tr:first-child th,.table colgroup+thead tr:first-child th,.table thead:first-child tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed thead>tr>th,.table-condensed tbody>tr>th,.table-condensed tfoot>tr>th,.table-condensed thead>tr>td,.table-condensed tbody>tr>td,.table-condensed tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*="col-"]{display:table-column;float:none}table td[class*="col-"],table th[class*="col-"]{display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8;border-color:#d6e9c6}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td{background-color:#d0e9c6;border-color:#c9e2b3}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede;border-color:#eed3d7}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td{background-color:#ebcccc;border-color:#e6c1c7}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3;border-color:#fbeed5}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td{background-color:#faf2cc;border-color:#f8e5be}@media(max-width:768px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:scroll;overflow-y:hidden;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0;background-color:#fff}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>thead>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>thead>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}select[multiple],select[size]{height:auto}select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{height:auto}.form-control:-moz-placeholder{color:#999}.form-control::-moz-placeholder{color:#999}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-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-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}textarea.form-control{height:auto}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.radio label,.checkbox label{display:inline;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:normal;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm{height:auto}.input-lg{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:45px;line-height:45px}textarea.input-lg{height:auto}.has-warning .help-block,.has-warning .control-label{color:#c09853}.has-warning .form-control{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.has-warning .input-group-addon{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.has-error .help-block,.has-error .control-label{color:#b94a48}.has-error .form-control{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.has-error .input-group-addon{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.has-success .help-block,.has-success .control-label{color:#468847}.has-success .form-control{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.has-success .input-group-addon{color:#468847;background-color:#dff0d8;border-color:#468847}.form-control-static{padding-top:7px;margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media(min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block}.form-inline .radio,.form-inline .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:none;margin-left:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}@media(min-width:768px){.form-horizontal .control-label{text-align:right}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:normal;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-link{font-weight:normal;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-xs{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs{padding:1px 5px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:normal;line-height:1}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-print:before{content:"\e045"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-briefcase:before{content:"\1f4bc"}.glyphicon-calendar:before{content:"\1f4c5"}.glyphicon-pushpin:before{content:"\1f4cc"}.glyphicon-paperclip:before{content:"\1f4ce"}.glyphicon-camera:before{content:"\1f4f7"}.glyphicon-lock:before{content:"\1f512"}.glyphicon-bell:before{content:"\1f514"}.glyphicon-bookmark:before{content:"\1f516"}.glyphicon-fire:before{content:"\1f525"}.glyphicon-wrench:before{content:"\1f527"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid #000;border-right:4px solid transparent;border-bottom:0 dotted;border-left:4px solid transparent;content:""}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.428571429;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#fff;text-decoration:none;background-color:#428bca}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0 dotted;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media(min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.btn-default .caret{border-top-color:#333}.btn-primary .caret,.btn-success .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret{border-top-color:#fff}.dropup .btn-default .caret{border-bottom-color:#333}.dropup .btn-primary .caret,.dropup .btn-success .caret,.dropup .btn-warning .caret,.dropup .btn-danger .caret,.dropup .btn-info .caret{border-bottom-color:#fff}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group{float:left}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group-xs>.btn{padding:5px 10px;padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.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:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-bottom-left-radius:4px;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.btn-group-justified .btn{display:table-cell;float:none;width:1%}[data-toggle="buttons"]>.btn>input[type="radio"],[data-toggle="buttons"]>.btn>input[type="checkbox"]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group.col{float:none;padding-right:0;padding-left:0}.input-group .form-control{width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:45px;line-height:45px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-4px}.input-group-btn>.btn:hover,.input-group-btn>.btn:active{z-index:2}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center}@media(min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}}.nav-tabs.nav-justified>li>a{margin-right:0;border-bottom:1px solid #ddd}.nav-tabs.nav-justified>.active>a{border-bottom-color:#fff}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:5px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center}@media(min-width:768px){.nav-justified>li{display:table-cell;width:1%}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-bottom:1px solid #ddd}.nav-tabs-justified>.active>a{border-bottom-color:#fff}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after{clear:both}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after{clear:both}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.nav .caret{border-top-color:#428bca;border-bottom-color:#428bca}.nav a:hover .caret{border-top-color:#2a6496;border-bottom-color:#2a6496}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;z-index:1000;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}@media(min-width:768px){.navbar{border-radius:4px}}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}@media(min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media(min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-collapse .navbar-nav.navbar-left:first-child{margin-left:-15px}.navbar-collapse .navbar-nav.navbar-right:last-child{margin-right:-15px}.navbar-collapse .navbar-text:last-child{margin-right:0}}.container>.navbar-header,.container>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media(min-width:768px){.container>.navbar-header,.container>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{border-width:0 0 1px}@media(min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;border-width:0 0 1px}@media(min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;z-index:1030}.navbar-fixed-bottom{bottom:0;margin-bottom:0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media(min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media(min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media(max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media(min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}@media(min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}@media(min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{float:none;margin-left:0}}@media(max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media(min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-nav.pull-right>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-text{float:left;margin-top:15px;margin-bottom:15px}@media(min-width:768px){.navbar-text{margin-right:15px;margin-left:15px}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e6e6e6}.navbar-default .navbar-nav>.dropdown>a:hover .caret,.navbar-default .navbar-nav>.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.open>a .caret,.navbar-default .navbar-nav>.open>a:hover .caret,.navbar-default .navbar-nav>.open>a:focus .caret{border-top-color:#555;border-bottom-color:#555}.navbar-default .navbar-nav>.dropdown>a .caret{border-top-color:#777;border-bottom-color:#777}@media(max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.dropdown>a:hover .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-nav>.dropdown>a .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .navbar-nav>.open>a .caret,.navbar-inverse .navbar-nav>.open>a:hover .caret,.navbar-inverse .navbar-nav>.open>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}@media(max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.428571429;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{background-color:#eee}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:#808080}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#999;border-radius:10px}.badge:empty{display:none}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.btn .badge{position:relative;top:-1px}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.jumbotron h1{line-height:1;color:inherit}.jumbotron p{line-height:1.4}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.thumbnail{display:inline-block;display:block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img{display:block;height:auto;max-width:100%}a.thumbnail:hover,a.thumbnail:focus{border-color:#428bca}.thumbnail>img{margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#356635}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#2d6987}.alert-warning{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}.alert-warning hr{border-top-color:#f8e5be}.alert-warning .alert-link{color:#a47e3c}.alert-danger{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger hr{border-top-color:#e6c1c7}.alert-danger .alert-link{color:#953b39}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;background-color:#428bca;-webkit-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-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{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: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-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{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: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-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{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: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-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{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: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-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{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: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)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0}.panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.list-group .list-group-item:last-child{border-bottom:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table{margin-bottom:0}.panel>.panel-body+.table{border-top:1px solid #ddd}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-title{margin-top:0;margin-bottom:0;font-size:16px}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.panel-warning{border-color:#fbeed5}.panel-warning>.panel-heading{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#fbeed5}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#fbeed5}.panel-danger{border-color:#eed3d7}.panel-danger>.panel-heading{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#eed3d7}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#eed3d7}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-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)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}body.modal-open,.modal-open .navbar-fixed-top,.modal-open .navbar-fixed-bottom{margin-right:15px}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:auto;overflow-y:scroll}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{z-index:1050;width:auto;padding:10px;margin-right:auto;margin-left:auto}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:20px}.modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.modal-dialog{right:auto;left:50%;width:600px;padding-top:30px;padding-bottom:30px}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}}.tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;height:auto;max-width:100%;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);opacity:.5;filter:alpha(opacity=50)}.carousel-control.left{background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.5)),to(rgba(0,0,0,0.0001)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.5) 0),color-stop(rgba(0,0,0,0.0001) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',endColorstr='#00000000',GradientType=1)}.carousel-control.right{right:0;left:auto;background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.0001)),to(rgba(0,0,0,0.5)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.0001) 0),color-stop(rgba(0,0,0,0.5) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#80000000',GradientType=1)}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;left:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;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;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{display:table;content:" "}.clearfix:after{clear:both}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media screen and (max-width:400px){@-ms-viewport{width:320px}}.hidden{display:none!important;visibility:hidden!important}.visible-xs{display:none!important}tr.visible-xs{display:none!important}th.visible-xs,td.visible-xs{display:none!important}@media(max-width:767px){.visible-xs{display:block!important}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-xs.visible-sm{display:block!important}tr.visible-xs.visible-sm{display:table-row!important}th.visible-xs.visible-sm,td.visible-xs.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-xs.visible-md{display:block!important}tr.visible-xs.visible-md{display:table-row!important}th.visible-xs.visible-md,td.visible-xs.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-xs.visible-lg{display:block!important}tr.visible-xs.visible-lg{display:table-row!important}th.visible-xs.visible-lg,td.visible-xs.visible-lg{display:table-cell!important}}.visible-sm{display:none!important}tr.visible-sm{display:none!important}th.visible-sm,td.visible-sm{display:none!important}@media(max-width:767px){.visible-sm.visible-xs{display:block!important}tr.visible-sm.visible-xs{display:table-row!important}th.visible-sm.visible-xs,td.visible-sm.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-sm{display:block!important}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-sm.visible-md{display:block!important}tr.visible-sm.visible-md{display:table-row!important}th.visible-sm.visible-md,td.visible-sm.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-sm.visible-lg{display:block!important}tr.visible-sm.visible-lg{display:table-row!important}th.visible-sm.visible-lg,td.visible-sm.visible-lg{display:table-cell!important}}.visible-md{display:none!important}tr.visible-md{display:none!important}th.visible-md,td.visible-md{display:none!important}@media(max-width:767px){.visible-md.visible-xs{display:block!important}tr.visible-md.visible-xs{display:table-row!important}th.visible-md.visible-xs,td.visible-md.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-md.visible-sm{display:block!important}tr.visible-md.visible-sm{display:table-row!important}th.visible-md.visible-sm,td.visible-md.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-md{display:block!important}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-md.visible-lg{display:block!important}tr.visible-md.visible-lg{display:table-row!important}th.visible-md.visible-lg,td.visible-md.visible-lg{display:table-cell!important}}.visible-lg{display:none!important}tr.visible-lg{display:none!important}th.visible-lg,td.visible-lg{display:none!important}@media(max-width:767px){.visible-lg.visible-xs{display:block!important}tr.visible-lg.visible-xs{display:table-row!important}th.visible-lg.visible-xs,td.visible-lg.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-lg.visible-sm{display:block!important}tr.visible-lg.visible-sm{display:table-row!important}th.visible-lg.visible-sm,td.visible-lg.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-lg.visible-md{display:block!important}tr.visible-lg.visible-md{display:table-row!important}th.visible-lg.visible-md,td.visible-lg.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-lg{display:block!important}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}.hidden-xs{display:block!important}tr.hidden-xs{display:table-row!important}th.hidden-xs,td.hidden-xs{display:table-cell!important}@media(max-width:767px){.hidden-xs{display:none!important}tr.hidden-xs{display:none!important}th.hidden-xs,td.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-xs.hidden-sm{display:none!important}tr.hidden-xs.hidden-sm{display:none!important}th.hidden-xs.hidden-sm,td.hidden-xs.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-xs.hidden-md{display:none!important}tr.hidden-xs.hidden-md{display:none!important}th.hidden-xs.hidden-md,td.hidden-xs.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-xs.hidden-lg{display:none!important}tr.hidden-xs.hidden-lg{display:none!important}th.hidden-xs.hidden-lg,td.hidden-xs.hidden-lg{display:none!important}}.hidden-sm{display:block!important}tr.hidden-sm{display:table-row!important}th.hidden-sm,td.hidden-sm{display:table-cell!important}@media(max-width:767px){.hidden-sm.hidden-xs{display:none!important}tr.hidden-sm.hidden-xs{display:none!important}th.hidden-sm.hidden-xs,td.hidden-sm.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}tr.hidden-sm{display:none!important}th.hidden-sm,td.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-sm.hidden-md{display:none!important}tr.hidden-sm.hidden-md{display:none!important}th.hidden-sm.hidden-md,td.hidden-sm.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-sm.hidden-lg{display:none!important}tr.hidden-sm.hidden-lg{display:none!important}th.hidden-sm.hidden-lg,td.hidden-sm.hidden-lg{display:none!important}}.hidden-md{display:block!important}tr.hidden-md{display:table-row!important}th.hidden-md,td.hidden-md{display:table-cell!important}@media(max-width:767px){.hidden-md.hidden-xs{display:none!important}tr.hidden-md.hidden-xs{display:none!important}th.hidden-md.hidden-xs,td.hidden-md.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-md.hidden-sm{display:none!important}tr.hidden-md.hidden-sm{display:none!important}th.hidden-md.hidden-sm,td.hidden-md.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}tr.hidden-md{display:none!important}th.hidden-md,td.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-md.hidden-lg{display:none!important}tr.hidden-md.hidden-lg{display:none!important}th.hidden-md.hidden-lg,td.hidden-md.hidden-lg{display:none!important}}.hidden-lg{display:block!important}tr.hidden-lg{display:table-row!important}th.hidden-lg,td.hidden-lg{display:table-cell!important}@media(max-width:767px){.hidden-lg.hidden-xs{display:none!important}tr.hidden-lg.hidden-xs{display:none!important}th.hidden-lg.hidden-xs,td.hidden-lg.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-lg.hidden-sm{display:none!important}tr.hidden-lg.hidden-sm{display:none!important}th.hidden-lg.hidden-sm,td.hidden-lg.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-lg.hidden-md{display:none!important}tr.hidden-lg.hidden-md{display:none!important}th.hidden-lg.hidden-md,td.hidden-lg.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-lg{display:none!important}tr.hidden-lg{display:none!important}th.hidden-lg,td.hidden-lg{display:none!important}}.visible-print{display:none!important}tr.visible-print{display:none!important}th.visible-print,td.visible-print{display:none!important}@media print{.visible-print{display:block!important}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}.hidden-print{display:none!important}tr.hidden-print{display:none!important}th.hidden-print,td.hidden-print{display:none!important}}
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/fonts/glyphicons-halflings-regular.eot b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/fonts/glyphicons-halflings-regular.eot
deleted file mode 100644
index 87eaa434234e2a984c261e0450a2f4ad837aa7b4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 14079
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

diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/fonts/glyphicons-halflings-regular.svg b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/fonts/glyphicons-halflings-regular.svg
deleted file mode 100644
index 5fee0685496..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/fonts/glyphicons-halflings-regular.svg
+++ /dev/null
@@ -1,228 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
-<font-face units-per-em="1200" ascent="960" descent="-240" />
-<missing-glyph horiz-adv-x="500" />
-<glyph />
-<glyph />
-<glyph unicode=" " />
-<glyph unicode="*" d="M1100 500h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200z" />
-<glyph unicode="+" d="M1100 400h-400v-400h-300v400h-400v300h400v400h300v-400h400v-300z" />
-<glyph unicode="&#xa0;" />
-<glyph unicode="&#x2000;" horiz-adv-x="652" />
-<glyph unicode="&#x2001;" horiz-adv-x="1304" />
-<glyph unicode="&#x2002;" horiz-adv-x="652" />
-<glyph unicode="&#x2003;" horiz-adv-x="1304" />
-<glyph unicode="&#x2004;" horiz-adv-x="434" />
-<glyph unicode="&#x2005;" horiz-adv-x="326" />
-<glyph unicode="&#x2006;" horiz-adv-x="217" />
-<glyph unicode="&#x2007;" horiz-adv-x="217" />
-<glyph unicode="&#x2008;" horiz-adv-x="163" />
-<glyph unicode="&#x2009;" horiz-adv-x="260" />
-<glyph unicode="&#x200a;" horiz-adv-x="72" />
-<glyph unicode="&#x202f;" horiz-adv-x="260" />
-<glyph unicode="&#x205f;" horiz-adv-x="326" />
-<glyph unicode="&#x20ac;" d="M800 500h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257 q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406z" />
-<glyph unicode="&#x2212;" d="M1100 700h-900v-300h900v300z" />
-<glyph unicode="&#x2601;" d="M178 300h750q120 0 205 86t85 208q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5q0 -80 56.5 -137t135.5 -57z" />
-<glyph unicode="&#x2709;" d="M1200 1100h-1200l600 -603zM300 600l-300 -300v600zM1200 900v-600l-300 300zM800 500l400 -400h-1200l400 400l200 -200z" />
-<glyph unicode="&#x270f;" d="M1101 889l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13l-94 -97zM401 189l614 614l-214 214l-614 -614zM-13 -13l333 112l-223 223z" />
-<glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" />
-<glyph unicode="&#xe001;" d="M700 100h300v-100h-800v100h300v550l-500 550h1200l-500 -550v-550z" />
-<glyph unicode="&#xe002;" d="M1000 934v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q17 -55 85.5 -75.5t147.5 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7q-79 -25 -122.5 -82t-25.5 -112t86 -75.5t147 5.5 q65 21 109 69t44 90v606z" />
-<glyph unicode="&#xe003;" d="M913 432l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342t142 342t342 142t342 -142t142 -342q0 -142 -78 -261zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
-<glyph unicode="&#xe005;" d="M649 949q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5t-94 124.5t-33.5 117.5q0 64 28 123t73 100.5t104.5 64t119 20.5 t120 -38.5t104.5 -104.5z" />
-<glyph unicode="&#xe006;" d="M791 522l145 -449l-384 275l-382 -275l146 447l-388 280h479l146 400h2l146 -400h472zM168 71l2 1z" />
-<glyph unicode="&#xe007;" d="M791 522l145 -449l-384 275l-382 -275l146 447l-388 280h479l146 400h2l146 -400h472zM747 331l-74 229l193 140h-235l-77 211l-78 -211h-239l196 -142l-73 -226l192 140zM168 71l2 1z" />
-<glyph unicode="&#xe008;" d="M1200 143v-143h-1200v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100z" />
-<glyph unicode="&#xe009;" d="M1200 1100v-1100h-1200v1100h1200zM200 1000h-100v-100h100v100zM900 1000h-600v-400h600v400zM1100 1000h-100v-100h100v100zM200 800h-100v-100h100v100zM1100 800h-100v-100h100v100zM200 600h-100v-100h100v100zM1100 600h-100v-100h100v100zM900 500h-600v-400h600 v400zM200 400h-100v-100h100v100zM1100 400h-100v-100h100v100zM200 200h-100v-100h100v100zM1100 200h-100v-100h100v100z" />
-<glyph unicode="&#xe010;" d="M500 1050v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5zM1100 1050v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h400 q21 0 35.5 -14.5t14.5 -35.5zM500 450v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5zM1100 450v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5z" />
-<glyph unicode="&#xe011;" d="M300 1050v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM700 1050v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5zM1100 1050v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM300 650v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM700 650v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM1100 650v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM300 250v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM700 250v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM1100 250v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5 t14.5 -35.5z" />
-<glyph unicode="&#xe012;" d="M300 1050v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM1200 1050v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h700 q21 0 35.5 -14.5t14.5 -35.5zM300 450v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-200q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5zM1200 650v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5zM300 250v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM1200 250v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5z" />
-<glyph unicode="&#xe013;" d="M448 34l818 820l-212 212l-607 -607l-206 207l-212 -212z" />
-<glyph unicode="&#xe014;" d="M882 106l-282 282l-282 -282l-212 212l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282z" />
-<glyph unicode="&#xe015;" d="M913 432l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342t142 342t342 142t342 -142t142 -342q0 -142 -78 -261zM507 363q137 0 233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5t-234 -97t-97 -233 t97 -233t234 -97zM600 800h100v-200h-100v-100h-200v100h-100v200h100v100h200v-100z" />
-<glyph unicode="&#xe016;" d="M913 432l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 299q-120 -77 -261 -77q-200 0 -342 142t-142 342t142 342t342 142t342 -142t142 -342q0 -141 -78 -262zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 801v-200h400v200h-400z" />
-<glyph unicode="&#xe017;" d="M700 750v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5zM800 975v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123 t-123 184t-45.5 224.5q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155z" />
-<glyph unicode="&#xe018;" d="M1200 1h-200v1200h200v-1200zM900 1h-200v800h200v-800zM600 1h-200v500h200v-500zM300 301h-200v-300h200v300z" />
-<glyph unicode="&#xe019;" d="M488 183l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5 q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39zM600 815q89 0 152 -63 t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152q0 88 63 151t152 63z" />
-<glyph unicode="&#xe020;" d="M900 1100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100zM800 1100v100h-300v-100h300zM200 900h900v-800q0 -41 -29.5 -71 t-70.5 -30h-700q-41 0 -70.5 30t-29.5 71v800zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" />
-<glyph unicode="&#xe021;" d="M1301 601h-200v-600h-300v400h-300v-400h-300v600h-200l656 644z" />
-<glyph unicode="&#xe022;" d="M600 700h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18v1150q0 11 7 18t18 7h475v-500zM1000 800h-300v300z" />
-<glyph unicode="&#xe023;" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM600 600h200 v-100h-300v400h100v-300z" />
-<glyph unicode="&#xe024;" d="M721 400h-242l-40 -400h-539l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538zM712 500l-27 300h-170l-27 -300h224z" />
-<glyph unicode="&#xe025;" d="M1100 400v-400h-1100v400h490l-290 300h200v500h300v-500h200l-290 -300h490zM988 300h-175v-100h175v100z" />
-<glyph unicode="&#xe026;" d="M600 1199q122 0 233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233t47.5 233t127.5 191t191 127.5t233 47.5zM600 1012q-170 0 -291 -121t-121 -291t121 -291t291 -121t291 121 t121 291t-121 291t-291 121zM700 600h150l-250 -300l-250 300h150v300h200v-300z" />
-<glyph unicode="&#xe027;" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM850 600h-150 v-300h-200v300h-150l250 300z" />
-<glyph unicode="&#xe028;" d="M0 500l200 700h800q199 -700 200 -700v-475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18v475zM903 1000h-606l-97 -500h200l50 -200h300l50 200h200z" />
-<glyph unicode="&#xe029;" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5zM797 598 l-297 -201v401z" />
-<glyph unicode="&#xe030;" d="M1177 600h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123t-123 -184t-45.5 -224.5t45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123 t123 184t45.5 224.5z" />
-<glyph unicode="&#xe031;" d="M700 800l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400zM500 400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122l-145 -145v400h400z" />
-<glyph unicode="&#xe032;" d="M100 1200v-1200h1100v1200h-1100zM1100 100h-900v900h900v-900zM400 800h-100v100h100v-100zM1000 800h-500v100h500v-100zM400 600h-100v100h100v-100zM1000 600h-500v100h500v-100zM400 400h-100v100h100v-100zM1000 400h-500v100h500v-100zM400 200h-100v100h100v-100 zM1000 300h-500v-100h500v100z" />
-<glyph unicode="&#xe034;" d="M200 0h-100v1100h100v-1100zM1100 600v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5z" />
-<glyph unicode="&#xe035;" d="M1200 275v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5t-49.5 -227v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50 q11 0 18 7t7 18zM400 480v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14zM1000 480v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14z" />
-<glyph unicode="&#xe036;" d="M0 800v-400h300l300 -200v800l-300 -200h-300zM971 600l141 -141l-71 -71l-141 141l-141 -141l-71 71l141 141l-141 141l71 71l141 -141l141 141l71 -71z" />
-<glyph unicode="&#xe037;" d="M0 800v-400h300l300 -200v800l-300 -200h-300zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" />
-<glyph unicode="&#xe038;" d="M974 186l6 8q142 178 142 405q0 230 -144 408l-6 8l-83 -64l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8zM300 801l300 200v-800l-300 200h-300v400h300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257z" />
-<glyph unicode="&#xe039;" d="M100 700h400v100h100v100h-100v300h-500v-600h100v100zM1200 700v500h-600v-200h100v-300h200v-300h300v200h-200v100h200zM100 1100h300v-300h-300v300zM800 800v300h300v-300h-300zM200 900h100v100h-100v-100zM900 1000h100v-100h-100v100zM300 600h-100v-100h-200 v-500h500v500h-200v100zM900 200v-100h-200v100h-100v100h100v200h-200v100h300v-300h200v-100h-100zM400 400v-300h-300v300h300zM300 200h-100v100h100v-100zM1100 300h100v-100h-100v100zM600 100h100v-100h-100v100zM1200 100v-100h-300v100h300z" />
-<glyph unicode="&#xe040;" d="M100 1200h-100v-1000h100v1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 1200v-1000h-200v1000h200zM400 100v-100h-300v100h300zM500 91h100v-91h-100v91zM700 91h100v-91h-100v91zM1100 91v-91h-200v91h200z " />
-<glyph unicode="&#xe041;" d="M1200 500l-500 -500l-699 700v475q0 10 7.5 17.5t17.5 7.5h474zM320 882q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71t29 -71q30 -30 71.5 -30t71.5 30z" />
-<glyph unicode="&#xe042;" d="M1201 500l-500 -500l-699 700v475q0 11 7 18t18 7h474zM1501 500l-500 -500l-50 50l450 450l-700 700h100zM320 882q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71t30 -71q29 -30 71 -30t71 30z" />
-<glyph unicode="&#xe043;" d="M1200 1200v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900v1025l175 175h925z" />
-<glyph unicode="&#xe045;" d="M947 829l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18l-94 -346l40 -124h592zM1200 800v-700h-200v200h-800v-200h-200v700h200l100 -200h600l100 200h200zM881 176l38 -152q2 -10 -3.5 -17t-15.5 -7h-600q-10 0 -15.5 7t-3.5 17l38 152q2 10 11.5 17t19.5 7 h500q10 0 19.5 -7t11.5 -17z" />
-<glyph unicode="&#xe047;" d="M1200 0v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417zM416 521l178 457l46 -140l116 -317 h-340z" />
-<glyph unicode="&#xe048;" d="M100 1199h471q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111t-162 -38.5h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21 t-29 14t-49 14.5v70zM400 1079v-379h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400z" />
-<glyph unicode="&#xe049;" d="M877 1200l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425z" />
-<glyph unicode="&#xe050;" d="M1150 1200h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49v300h150h700zM100 1000v-800h75l-125 -167l-125 167h75v800h-75l125 167 l125 -167h-75z" />
-<glyph unicode="&#xe051;" d="M950 1201h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50v300h150h700zM200 101h800v75l167 -125l-167 -125v75h-800v-75l-167 125l167 125 v-75z" />
-<glyph unicode="&#xe052;" d="M700 950v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35zM1100 650v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h1000 q21 0 35.5 15t14.5 35zM900 350v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35zM1200 50v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35 t35.5 -15h1100q21 0 35.5 15t14.5 35z" />
-<glyph unicode="&#xe053;" d="M1000 950v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35zM1200 650v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h1100 q21 0 35.5 15t14.5 35zM1000 350v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35zM1200 50v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35 t35.5 -15h1100q21 0 35.5 15t14.5 35z" />
-<glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe055;" d="M0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe056;" d="M0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35zM0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe057;" d="M400 1100h-100v-1100h100v1100zM700 950v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35zM1100 650v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15 h500q20 0 35 15t15 35zM100 425v75h-201v100h201v75l166 -125zM900 350v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35zM1200 50v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5 v-100q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35z" />
-<glyph unicode="&#xe058;" d="M201 950v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35zM801 1100h100v-1100h-100v1100zM601 650v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15 h500q20 0 35 15t15 35zM1101 425v75h200v100h-200v75l-167 -125zM401 350v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35zM701 50v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5 v-100q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35z" />
-<glyph unicode="&#xe059;" d="M900 925v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53zM1200 300l-300 300l300 300v-600z" />
-<glyph unicode="&#xe060;" d="M1200 1056v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31zM1100 1000h-1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500zM476 750q0 -56 -39 -95t-95 -39t-95 39t-39 95t39 95t95 39t95 -39 t39 -95z" />
-<glyph unicode="&#xe062;" d="M600 1213q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262q0 124 60.5 231.5t165 172t226.5 64.5zM599 514q107 0 182.5 75.5t75.5 182.5t-75.5 182 t-182.5 75t-182 -75.5t-75 -181.5q0 -107 75.5 -182.5t181.5 -75.5z" />
-<glyph unicode="&#xe063;" d="M600 1199q122 0 233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233t47.5 233t127.5 191t191 127.5t233 47.5zM600 173v854q-176 0 -301.5 -125t-125.5 -302t125.5 -302t301.5 -125z " />
-<glyph unicode="&#xe064;" d="M554 1295q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 138.5t-64 210.5q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5zM455 296q-7 6 -18 17 t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156q14 -82 59.5 -136t136.5 -80z" />
-<glyph unicode="&#xe065;" d="M1108 902l113 113l-21 85l-92 28l-113 -113zM1100 625v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5 t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125zM436 341l161 50l412 412l-114 113l-405 -405z" />
-<glyph unicode="&#xe066;" d="M1100 453v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5z M813 431l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209z" />
-<glyph unicode="&#xe067;" d="M1100 569v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5v300q0 165 117.5 282.5t282.5 117.5h300q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69z M625 348l566 567l-136 137l-430 -431l-147 147l-136 -136z" />
-<glyph unicode="&#xe068;" d="M900 303v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198l-300 300l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296z" />
-<glyph unicode="&#xe069;" d="M900 0l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100z" />
-<glyph unicode="&#xe070;" d="M1200 0l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100z" />
-<glyph unicode="&#xe071;" d="M1200 0l-500 488v-488l-564 550l564 550v-487l500 487v-1100z" />
-<glyph unicode="&#xe072;" d="M1100 550l-900 550v-1100z" />
-<glyph unicode="&#xe073;" d="M500 150v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5zM900 150v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800q0 -21 14.5 -35.5t35.5 -14.5h200 q21 0 35.5 14.5t14.5 35.5z" />
-<glyph unicode="&#xe074;" d="M1100 150v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35z" />
-<glyph unicode="&#xe075;" d="M500 0v488l-500 -488v1100l500 -487v487l564 -550z" />
-<glyph unicode="&#xe076;" d="M1050 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488l-500 -488v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe078;" d="M650 1064l-550 -564h1100zM1200 350v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
-<glyph unicode="&#xe079;" d="M777 7l240 240l-353 353l353 353l-240 240l-592 -594z" />
-<glyph unicode="&#xe080;" d="M513 -46l-241 240l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1z" />
-<glyph unicode="&#xe081;" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM500 900v-200h-200v-200h200v-200h200v200h200v200h-200v200h-200z" />
-<glyph unicode="&#xe082;" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM300 700v-200h600v200h-600z" />
-<glyph unicode="&#xe083;" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM247 741l141 -141l-142 -141l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141 l-141 142z" />
-<glyph unicode="&#xe084;" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM546 623l-102 102l-174 -174l276 -277l411 411l-175 174z" />
-<glyph unicode="&#xe085;" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM500 500h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3 q-105 0 -172 -56t-67 -183h144q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5zM500 400v-100h200v100h-200z" />
-<glyph unicode="&#xe086;" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM500 900v-100h200v100h-200zM400 700v-100h100v-200h-100v-100h400v100h-100v300h-300z" />
-<glyph unicode="&#xe087;" d="M1200 700v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194v200h194q15 60 36 104.5t55.5 86t88 69t126.5 40.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203zM700 500v-206q149 48 201 206h-201v200h200 q-25 74 -76 127.5t-124 76.5v-204h-200v203q-75 -24 -130 -77.5t-79 -125.5h209v-200h-210q24 -73 79.5 -127.5t130.5 -78.5v206h200z" />
-<glyph unicode="&#xe088;" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM844 735 l-135 -135l135 -135l-109 -109l-135 135l-135 -135l-109 109l135 135l-135 135l109 109l135 -135l135 135z" />
-<glyph unicode="&#xe089;" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM896 654 l-346 -345l-228 228l141 141l87 -87l204 205z" />
-<glyph unicode="&#xe090;" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM248 385l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5q0 -115 62 -215zM955 809l-564 -564q97 -59 209 -59q171 0 292.5 121.5 t121.5 292.5q0 112 -59 209z" />
-<glyph unicode="&#xe091;" d="M1200 400h-600v-301l-600 448l600 453v-300h600v-300z" />
-<glyph unicode="&#xe092;" d="M600 400h-600v300h600v300l600 -453l-600 -448v301z" />
-<glyph unicode="&#xe093;" d="M1098 600h-298v-600h-300v600h-296l450 600z" />
-<glyph unicode="&#xe094;" d="M998 600l-449 -600l-445 600h296v600h300v-600h298z" />
-<glyph unicode="&#xe095;" d="M600 199v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453z" />
-<glyph unicode="&#xe096;" d="M1200 1200h-400l129 -129l-294 -294l142 -142l294 294l129 -129v400zM565 423l-294 -294l129 -129h-400v400l129 -129l294 294z" />
-<glyph unicode="&#xe097;" d="M871 730l129 -130h-400v400l129 -129l295 295l142 -141zM200 600h400v-400l-129 130l-295 -295l-142 141l295 295z" />
-<glyph unicode="&#xe101;" d="M600 1177q118 0 224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5t45.5 224.5t123 184t184 123t224.5 45.5zM686 549l58 302q4 20 -8 34.5t-33 14.5h-207q-20 0 -32 -14.5t-8 -34.5 l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5zM700 400h-200v-100h200v100z" />
-<glyph unicode="&#xe102;" d="M1200 900h-111v6t-1 15t-3 18l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6h-111v-100h100v-200h400v300h200v-300h400v200h100v100z M731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269zM481 900h-281q-3 0 14 48t35 96l18 47zM100 0h400v400h-400v-400zM700 400h400v-400h-400v400z" />
-<glyph unicode="&#xe103;" d="M0 121l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55l-201 -202 v143zM692 611q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5t86.5 76.5q55 66 367 234z" />
-<glyph unicode="&#xe105;" d="M1261 600l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30l-26 40l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5 t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30zM600 240q64 0 123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212 q0 85 46 158q-102 -87 -226 -258q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5zM484 762l-107 -106q49 -124 154 -191l105 105q-37 24 -75 72t-57 84z" />
-<glyph unicode="&#xe106;" d="M906 1200l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43l-26 40l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148zM1261 600l-26 -40q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5 t-124 -100t-146.5 -79l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52zM513 264l37 141q-107 18 -178.5 101.5t-71.5 193.5q0 85 46 158q-102 -87 -226 -258q210 -282 393 -336z M484 762l-107 -106q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68z" />
-<glyph unicode="&#xe107;" d="M-47 0h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 33 -48 36t-48 -29l-642 -1066q-21 -32 -7.5 -66t50.5 -34zM700 200v100h-200v-100h-345l445 723l445 -723h-345zM700 700h-200v-100l100 -300l100 300v100z" />
-<glyph unicode="&#xe108;" d="M800 711l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -21 -13 -29t-32 1l-94 78h-222l-94 -78q-19 -9 -32 -1t-13 29v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41q0 20 11 44.5t26 38.5 l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339z" />
-<glyph unicode="&#xe110;" d="M941 800l-600 -600h-341v200h259l600 600h241v198l300 -295l-300 -300v197h-159zM381 678l141 142l-181 180h-341v-200h259zM1100 598l300 -295l-300 -300v197h-241l-181 181l141 142l122 -123h159v198z" />
-<glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
-<glyph unicode="&#xe112;" d="M400 900h-300v300h300v-300zM1100 900h-300v300h300v-300zM1100 800v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5t-58 109.5t-31.5 116t-15 104t-3 83v200h300v-250q0 -113 6 -145 q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300z" />
-<glyph unicode="&#xe113;" d="M902 184l226 227l-578 579l-580 -579l227 -227l352 353z" />
-<glyph unicode="&#xe114;" d="M650 218l578 579l-226 227l-353 -353l-352 353l-227 -227z" />
-<glyph unicode="&#xe115;" d="M1198 400v600h-796l215 -200h381v-400h-198l299 -283l299 283h-200zM-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196z" />
-<glyph unicode="&#xe116;" d="M1050 1200h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35 q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43l-100 475q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5z" />
-<glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
-<glyph unicode="&#xe118;" d="M201 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000zM1501 700l-300 -700h-1200l300 700h1200z" />
-<glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
-<glyph unicode="&#xe120;" d="M900 303v197h-600v-197l-300 297l300 298v-198h600v198l300 -298z" />
-<glyph unicode="&#xe121;" d="M31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM100 300h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM900 200h-100v-100h100v100z M1100 200h-100v-100h100v100z" />
-<glyph unicode="&#xe122;" d="M1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35zM325 800l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35q-56 337 -56 351v250v5 q0 13 0.5 18.5t2.5 13t8 10.5t15 3h200zM-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5z" />
-<glyph unicode="&#xe124;" d="M445 1180l-45 -233l-224 78l78 -225l-233 -44l179 -156l-179 -155l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180z" />
-<glyph unicode="&#xe125;" d="M700 1200h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400q0 -75 100 -75h61q123 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5zM700 925l-50 -225h450 v-125l-250 -375h-214l-136 100h-100v375l150 212l100 213h50v-175zM0 800v-600h200v600h-200z" />
-<glyph unicode="&#xe126;" d="M700 0h-50q-27 0 -51 20t-38 48l-96 198l-145 196q-20 26 -20 63v400q0 75 100 75h61q123 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5zM200 400h-200v600h200 v-600zM700 275l-50 225h450v125l-250 375h-214l-136 -100h-100v-375l150 -212l100 -213h50v175z" />
-<glyph unicode="&#xe127;" d="M364 873l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM408 792v-503 l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83zM208 200h-200v600h200v-600z" />
-<glyph unicode="&#xe128;" d="M475 1104l365 -230q7 -4 16.5 -10.5t26 -26t16.5 -36.5v-526q0 -13 -85.5 -93.5t-93.5 -80.5h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-84 0 -139 39t-55 111t54 110t139 37h302l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6zM370 946 l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100h222q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l106 89v502l-342 237zM1199 201h-200v600h200v-600z" />
-<glyph unicode="&#xe129;" d="M1100 473v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90zM911 400h-503l-236 339 l83 86l183 -146q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6v7.5v7v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294zM1000 200v-200h-600v200h600z" />
-<glyph unicode="&#xe130;" d="M305 1104v200h600v-200h-600zM605 310l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15l-230 -362q-15 -31 7 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85l-1 -302q0 -84 38.5 -138t110.5 -54t111 55t39 139v106z M905 804v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146l-83 86l237 339h503z" />
-<glyph unicode="&#xe131;" d="M603 1195q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5zM598 701h-298v-201h300l-2 -194l402 294l-402 298v-197z" />
-<glyph unicode="&#xe132;" d="M597 1195q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5zM200 600l400 -294v194h302v201h-300v197z" />
-<glyph unicode="&#xe133;" d="M603 1195q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5zM300 600h200v-300h200v300h200l-300 400z" />
-<glyph unicode="&#xe134;" d="M603 1195q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5zM500 900v-300h-200l300 -400l300 400h-200v300h-200z" />
-<glyph unicode="&#xe135;" d="M603 1195q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5zM627 1101q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6 q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55 t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q102 -2 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7 q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5 t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 41 1 44q31 -13 58.5 -14.5t39.5 3.5l11 4q6 36 -17 53.5t-64 28.5t-56 23q-19 -3 -37 0zM613 994q0 -18 8 -42.5t16.5 -44t9.5 -23.5q-9 2 -31 5t-36 5t-32 8t-30 14q3 12 16 30t16 25q10 -10 18.5 -10 t14 6t14.5 14.5t16 12.5z" />
-<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
-<glyph unicode="&#xe138;" d="M1100 1200v-100h-1000v100h1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
-<glyph unicode="&#xe140;" d="M329 729l142 142l-200 200l129 129h-400v-400l129 129zM1200 1200v-400l-129 129l-200 -200l-142 142l200 200l-129 129h400zM271 129l129 -129h-400v400l129 -129l200 200l142 -142zM1071 271l129 129v-400h-400l129 129l-200 200l142 142z" />
-<glyph unicode="&#xe141;" d="M596 1192q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM596 1010q-171 0 -292.5 -121.5t-121.5 -292.5q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5zM455 905 q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5t16 38.5t39 16.5zM708 821l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5 q0 32 20.5 56.5t51.5 29.5zM855 709q23 0 38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39q0 22 16 38t39 16zM345 709q23 0 39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39t15.5 38.5t38.5 15.5z" />
-<glyph unicode="&#xe143;" d="M649 54l-16 22q-90 125 -293 323q-71 70 -104.5 105.5t-77 89.5t-61 99t-17.5 91q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-203 -198 -293 -323zM844 524l12 12 q64 62 97.5 97t64.5 79t31 72q0 71 -48 119t-105 48q-74 0 -132 -82l-118 -171l-114 174q-51 79 -123 79q-60 0 -109.5 -49t-49.5 -118q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203z" />
-<glyph unicode="&#xe144;" d="M476 406l19 -17l105 105l-212 212l389 389l247 -247l-95 -96l18 -18q46 -46 77 -99l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159q0 -93 66 -159zM123 193l141 -141q66 -66 159 -66q95 0 159 66 l283 283q66 66 66 159t-66 159l-141 141q-12 12 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159q0 -94 66 -160z" />
-<glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM900 1000h-600v-700h600v700zM600 46q43 0 73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5t-73.5 -30.5t-30.5 -73.5 t30.5 -73.5t73.5 -30.5z" />
-<glyph unicode="&#xe148;" d="M700 1029v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5h139q5 -77 48.5 -126.5t117.5 -64.5v335l-27 7q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5 t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5zM600 755v274q-61 -8 -97.5 -37.5t-36.5 -102.5q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3zM700 548 v-311q170 18 170 151q0 64 -44 99.5t-126 60.5z" />
-<glyph unicode="&#xe149;" d="M866 300l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5t-30 142.5h-221v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5 t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -11 2.5 -24.5t5.5 -24t9.5 -26.5t10.5 -25t14 -27.5t14 -25.5t15.5 -27t13.5 -24h242v-100h-197q8 -50 -2.5 -115t-31.5 -94 q-41 -59 -99 -113q35 11 84 18t70 7q32 1 102 -16t104 -17q76 0 136 30z" />
-<glyph unicode="&#xe150;" d="M300 0l298 300h-198v900h-200v-900h-198zM900 1200l298 -300h-198v-900h-200v900h-198z" />
-<glyph unicode="&#xe151;" d="M400 300h198l-298 -300l-298 300h198v900h200v-900zM1000 1200v-500h-100v100h-100v-100h-100v500h300zM901 1100h-100v-200h100v200zM700 500h300v-200h-99v-100h-100v100h99v100h-200v100zM800 100h200v-100h-300v200h100v-100z" />
-<glyph unicode="&#xe152;" d="M400 300h198l-298 -300l-298 300h198v900h200v-900zM1000 1200v-200h-99v-100h-100v100h99v100h-200v100h300zM800 800h200v-100h-300v200h100v-100zM700 500h300v-500h-100v100h-100v-100h-100v500zM801 200h100v200h-100v-200z" />
-<glyph unicode="&#xe153;" d="M300 0l298 300h-198v900h-200v-900h-198zM900 1100h-100v100h200v-500h-100v400zM1100 500v-500h-100v100h-200v400h300zM1001 400h-100v-200h100v200z" />
-<glyph unicode="&#xe154;" d="M300 0l298 300h-198v900h-200v-900h-198zM1100 1200v-500h-100v100h-200v400h300zM1001 1100h-100v-200h100v200zM900 400h-100v100h200v-500h-100v400z" />
-<glyph unicode="&#xe155;" d="M300 0l298 300h-198v900h-200v-900h-198zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
-<glyph unicode="&#xe156;" d="M300 0l298 300h-198v900h-200v-900h-198zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
-<glyph unicode="&#xe157;" d="M400 1100h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5v300q0 165 117.5 282.5t282.5 117.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5 t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5z" />
-<glyph unicode="&#xe158;" d="M700 0h-300q-163 0 -281.5 117.5t-118.5 282.5v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5 t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5zM400 800v-500l333 250z" />
-<glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM900 300v500q0 41 -29.5 70.5t-70.5 29.5h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5 t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5zM800 700h-500l250 -333z" />
-<glyph unicode="&#xe160;" d="M1100 700v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5zM900 300v500q0 41 -29.5 70.5t-70.5 29.5h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5 t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5zM550 733l-250 -333h500z" />
-<glyph unicode="&#xe161;" d="M500 1100h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200zM700 550l-400 -350v200h-300v300h300v200z" />
-<glyph unicode="&#xe162;" d="M403 2l9 -1q13 0 26 16l538 630q15 19 6 36q-8 18 -32 16h-300q1 4 78 219.5t79 227.5q2 17 -6 27l-8 8h-9q-16 0 -25 -15q-4 -5 -98.5 -111.5t-228 -257t-209.5 -238.5q-17 -19 -7 -40q10 -19 32 -19h302q-155 -438 -160 -458q-5 -21 4 -32z" />
-<glyph unicode="&#xe163;" d="M800 200h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185zM900 200v200h-300v300h300v200l400 -350z" />
-<glyph unicode="&#xe164;" d="M1200 700l-149 149l-342 -353l-213 213l353 342l-149 149h500v-500zM1022 571l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5v-300 q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98z" />
-<glyph unicode="&#xe165;" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM600 794 q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
-<glyph unicode="&#xe166;" d="M700 800v400h-300v-400h-300l445 -500l450 500h-295zM25 300h1048q11 0 19 -7.5t8 -17.5v-275h-1100v275q0 11 7 18t18 7zM1000 200h-100v-50h100v50z" />
-<glyph unicode="&#xe167;" d="M400 700v-300h300v300h295l-445 500l-450 -500h300zM25 300h1048q11 0 19 -7.5t8 -17.5v-275h-1100v275q0 11 7 18t18 7zM1000 200h-100v-50h100v50z" />
-<glyph unicode="&#xe168;" d="M405 400l596 596l-154 155l-442 -442l-150 151l-155 -155zM25 300h1048q11 0 19 -7.5t8 -17.5v-275h-1100v275q0 11 7 18t18 7zM1000 200h-100v-50h100v50z" />
-<glyph unicode="&#xe169;" d="M409 1103l-97 97l-212 -212l97 -98zM650 861l-149 149l-212 -212l149 -149l-238 -248h700v699zM25 300h1048q11 0 19 -7.5t8 -17.5v-275h-1100v275q0 11 7 18t18 7zM1000 200h-100v-50h100v50z" />
-<glyph unicode="&#xe170;" d="M539 950l-149 -149l212 -212l149 148l248 -237v700h-699zM297 709l-97 -97l212 -212l98 97zM25 300h1048q11 0 19 -7.5t8 -17.5v-275h-1100v275q0 11 7 18t18 7zM1000 200h-100v-50h100v50z" />
-<glyph unicode="&#xe171;" d="M1200 1199v-1079l-475 272l-310 -393v416h-392zM1166 1148l-672 -712v-226z" />
-<glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1200h-100v-200h100v200z" />
-<glyph unicode="&#xe173;" d="M578 500h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120zM700 1200h-100v-200h100v200zM1300 538l-475 -476l-244 244l123 123l120 -120l353 352z" />
-<glyph unicode="&#xe174;" d="M529 500h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170zM700 1200h-100v-200h100v200zM1167 6l-170 170l-170 -170l-127 127l170 170l-170 170l127 127l170 -170l170 170l127 -128 l-170 -169l170 -170z" />
-<glyph unicode="&#xe175;" d="M700 500h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200zM700 1000h-100v200h100v-200zM1000 600h-200v-300h-200l300 -300l300 300h-200v300z" />
-<glyph unicode="&#xe176;" d="M602 500h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200zM700 1000h-100v200h100v-200zM1000 300h200l-300 300l-300 -300h200v-300h200v300z" />
-<glyph unicode="&#xe177;" d="M1200 900v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h1200zM0 800v-550q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200zM100 500h400v-200h-400v200z" />
-<glyph unicode="&#xe178;" d="M500 1000h400v198l300 -298l-300 -298v198h-400v200zM100 800v200h100v-200h-100zM400 800h-100v200h100v-200zM700 300h-400v-198l-300 298l300 298v-198h400v-200zM800 500h100v-200h-100v200zM1000 500v-200h100v200h-100z" />
-<glyph unicode="&#xe179;" d="M1200 50v1106q0 31 -18 40.5t-44 -7.5l-276 -117q-25 -16 -43.5 -50.5t-18.5 -65.5v-359q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5zM550 1200l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447l-100 203v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300z" />
-<glyph unicode="&#xe180;" d="M1100 106v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394 q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5z" />
-<glyph unicode="&#xe181;" d="M675 1000l-100 100h-375l-100 -100h400l200 -200v-98l295 98h105v200h-425zM500 300v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5zM100 800h300v-200h-300v200zM700 565l400 133 v-163l-400 -133v163zM100 500h300v-200h-300v200zM805 300l295 98v-298h-425l-100 -100h-375l-100 100h400l200 200h105z" />
-<glyph unicode="&#xe182;" d="M179 1169l-162 -162q-1 -11 -0.5 -32.5t16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q16 17 13 40.5t-22 37.5l-192 136q-19 14 -45 12t-42 -19l-119 -118q-143 103 -267 227q-126 126 -227 268l118 118 q17 17 20 41.5t-11 44.5l-139 194q-14 19 -36.5 22t-40.5 -14z" />
-<glyph unicode="&#xe183;" d="M1200 712v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40t-53.5 -36.5t-31 -27.5l-9 -10v-200q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38 t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5zM800 650l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -15 -35.5t-35 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5 t30 -27.5t12 -24l1 -10v-50z" />
-<glyph unicode="&#xe184;" d="M175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250zM1200 100v-100h-1100v100h1100z" />
-<glyph unicode="&#xe185;" d="M600 1100h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300v1000q0 41 29.5 70.5t70.5 29.5zM1000 800h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300v700q0 41 29.5 70.5t70.5 29.5zM400 0v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400h300z" />
-<glyph unicode="&#xe186;" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM200 800v-300h200v-100h-200v-100h300v300h-200v100h200v100h-300zM800 800h-200v-500h200v100h100v300h-100 v100zM800 700v-300h-100v300h100z" />
-<glyph unicode="&#xe187;" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM400 600h-100v200h-100v-500h100v200h100v-200h100v500h-100v-200zM800 800h-200v-500h200v100h100v300h-100 v100zM800 700v-300h-100v300h100z" />
-<glyph unicode="&#xe188;" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM200 800v-500h300v100h-200v300h200v100h-300zM600 800v-500h300v100h-200v300h200v100h-300z" />
-<glyph unicode="&#xe189;" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM500 700l-300 -150l300 -150v300zM600 400l300 150l-300 150v-300z" />
-<glyph unicode="&#xe190;" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM900 800v-500h-700v500h700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM800 700h-130 q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300z" />
-<glyph unicode="&#xe191;" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM200 800v-300h200v-100h-200v-100h300v300h-200v100h200v100h-300zM800 300h100v500h-200v-100h100v-400z M601 300h100v100h-100v-100z" />
-<glyph unicode="&#xe192;" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM300 700v100h-100v-500h300v400h-200zM800 300h100v500h-200v-100h100v-400zM401 400h-100v200h100v-200z M601 300h100v100h-100v-100z" />
-<glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM1000 900h-900v-700h900v700zM400 700h-200v100h300v-300h-99v-100h-100v100h99v200zM800 700h-100v100h200v-500h-100v400zM201 400h100v-100 h-100v100zM701 300h-100v100h100v-100z" />
-<glyph unicode="&#xe194;" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM800 700h-300 v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
-<glyph unicode="&#xe195;" d="M596 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM596 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM800 700v-100 h-100v100h-200v-100h200v-100h-200v-100h-100v400h300zM800 400h-100v100h100v-100z" />
-<glyph unicode="&#xe197;" d="M800 300h128q120 0 205 86t85 208q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5q0 -80 56.5 -137t135.5 -57h222v300h400v-300zM700 200h200l-300 -300 l-300 300h200v300h200v-300z" />
-<glyph unicode="&#xe198;" d="M600 714l403 -403q94 26 154.5 104t60.5 178q0 121 -85 207.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5q0 -80 56.5 -137t135.5 -57h8zM700 -100h-200v300h-200l300 300 l300 -300h-200v-300z" />
-<glyph unicode="&#xe199;" d="M700 200h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-155l-75 -45h350l-75 45v155z" />
-<glyph unicode="&#xe200;" d="M700 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -12t1 -11q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5 q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350z" />
-<glyph unicode="&#x1f4bc;" d="M800 1000h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100zM500 1000h200v100h-200v-100zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
-<glyph unicode="&#x1f4c5;" d="M1100 900v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150h1100zM0 800v-750q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100zM100 600h100v-100h-100v100zM300 600h100v-100h-100v100z M500 600h100v-100h-100v100zM700 600h100v-100h-100v100zM900 600h100v-100h-100v100zM100 400h100v-100h-100v100zM300 400h100v-100h-100v100zM500 400h100v-100h-100v100zM700 400h100v-100h-100v100zM900 400h100v-100h-100v100zM100 200h100v-100h-100v100zM300 200 h100v-100h-100v100zM500 200h100v-100h-100v100zM700 200h100v-100h-100v100zM900 200h100v-100h-100v100z" />
-<glyph unicode="&#x1f4cc;" d="M902 1185l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207l-380 -303l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15z" />
-<glyph unicode="&#x1f4ce;" d="M518 119l69 -60l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163t35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84 t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -79.5 -17t-67.5 -51l-388 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348 q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256z" />
-<glyph unicode="&#x1f4f7;" d="M1200 200v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5z M1000 700h-100v100h100v-100zM844 500q0 -100 -72 -172t-172 -72t-172 72t-72 172t72 172t172 72t172 -72t72 -172zM706 500q0 44 -31 75t-75 31t-75 -31t-31 -75t31 -75t75 -31t75 31t31 75z" />
-<glyph unicode="&#x1f512;" d="M900 800h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" />
-<glyph unicode="&#x1f514;" d="M1062 400h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-22 -9 -63 -23t-167.5 -37t-251.5 -23t-245.5 20.5t-178.5 41.5l-58 20q-18 7 -31 27.5t-13 40.5q0 21 13.5 35.5t33.5 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94 q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327zM600 104q-54 0 -103 6q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6z" />
-<glyph unicode="&#x1f516;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
-<glyph unicode="&#x1f525;" d="M400 755q2 -12 8 -41.5t8 -43t6 -39.5t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85t5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5 q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129 q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5z" />
-<glyph unicode="&#x1f527;" d="M948 778l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138z" />
-</font>
-</defs></svg> 
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/fonts/glyphicons-halflings-regular.ttf b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/fonts/glyphicons-halflings-regular.ttf
deleted file mode 100644
index be784dc1d5bcb92ab155f578f3723524a3dd9688..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 29512
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%0DQ&GeghWoFLr
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
DlhOCh

diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/fonts/glyphicons-halflings-regular.woff b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/fonts/glyphicons-halflings-regular.woff
deleted file mode 100644
index 2cc3e4852a5a42e6aadd6284e067b66e14a57bc7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16448
zcmbXJW03CL7d?tTjor45-QI26wzb=~ZQHhO@3w8*w(ZmJ@BZ(tbF0p$la(=N#>kvm
zE2(5vQkCf<D<T2_0{kp|d;s|Wyo1>PhyS<z|G$WcC`khVKx#iK&VMka{0A#4BrNiy
zIsS0G9}oaR06=9GX&HXB#2@~%51?y?XSr`+rDyx2Z2$nk-T=Tanlf6I8v|!Y0ssJ1
z^Ct%Me;@~bG0}7Qi38RB;Sm4f`x^jaV(Di5qnQE#i~|6Gh8ob_5Spoxo*@9hM)ecJ
z^aB<E8~2UrkNBhM{&4&s5JOdix|&)!y8dXsKYb(r^nH{Ihh%GMWAGEl{xd$HvLCdJ
zUhVK%>AC*&%gOhXNAMqjXaM8ZdR9h1n(j|bAOHa3xsaUpVQb^?bFN$mKV0Ewcy3Du
z@-8k$`ak32WBbVi`wx;7^0Pnwe^+&aJAe9T8!-8dp8P-m^j_k+W}s`RtGffD4+(~#
ztFH^%r@=P?d_)fbz?K5R0s#N*H#RfO?CBZn>6_?x^z-v0gc4w+(WBE}13CaHLhywQ
z!#%^j8s6#2z4_*~82qM%VW?EZaP{qr6q7)~zyRXUfu8*DIFkvyQi}2zgVP1nasq{A
zzK$~<^8~1Leh9gA7?OYdWb(rhHBCeLF_~b@=XwJtb#c@X=&{tLR~#2+TS{-c`vBYE
zGBWX|sg2q1)>^5WQl6tV-S^gSSDaqgl)f0g5bP3XzB_opq(U*a%n-{&Nsp#<<M(z4
zuF}v{9CiBVmMK|{6{m(8v0)}y#J}yt#oHf7au1Bupcn{+)8gVM#^XgARTR^goG<5r
zaOd=>PXeb*#gCojQ<~*y?%~jIH!wY%g9nHSRoaSF?Kj+nhFb0uC&n_VOmpd_OBYox
zmnx5#Y6>`tg|imfwPr|~9o*VGw6l}bCod<5GtgOopG#Z3FYU1yX;{uJt(#*r8r_e7
zFtr;Gdot=wqBrPOr&Auqx9S#4&q}4+IV@$;lS%g;OwuPXe}-tkmpsZwyFbf2RoE|~
z^I*n!=-?L4caqmD<h9+QcF``(XyFl`io-w6SKu)LpB92k^J(nxGscE_*!o)E+*ApY
z+da$9X5!jyvx|{IEXNkB3#@%giL;*SU6pu@5-`T$j56YvgmCY)M#ci)L%K&w(X}__
zgO{98F!Xz-A4y4sz2b0-9;HpsLmP&@GUR?ppK<6Etg2h2xkc4Cv`sCWIjcAi!?q>0
ze6gB6sXkw{<`|Cx?yb^4okCyXCb!Pswu?l=&V6!>eVjh=XD+I%?*-Gd7M;9>8h)~6
z&0J!HkB*tz&l&C|b)oTW*SdHifwpF*1$>(yA`o_PKmUNb%3cQp@DV=5e(dQG!VdB#
z4zOo2d<ek8krY(z_&cZJ(PSau4{NGNG4qYVX^bh%_oIBLOWv(b^&4yw%BR@R-Tw1D
z|5%`(XBgOZt;rKoS81{JhTA1AL!IG0E5nMkHElu)xF6J*fss$lUk@4L9Zeq5RtTuq
z7mE)8)y~R~;8%oh(F)YBKr#7tU7eyJ?S+5l1<G%Y|NbSa+%}C_P#V&FKWA|!NTD@;
zZhOSGuCqULZof{sOf_eZ*GiG}$7-}N1RDsE-r?w#i{hZV9eF;m2i)WkMcY$pGECdO
zsPzns3WJ>D*d^}VrwZDE>cjbvV3uXQpX;>NPr?6LUB>JyOhwrqV5Mj1Q8A=HxZxa-
zQwXEXE4&D0kFPJik^cKOC{0^_Gd~wNu89<_dGZ;!WUzzZ3ld}@(h^<$4X6-4pZP0>
z4cT8q?NQVurwRI1@u5c=cK!0A)|eeN43pohgBKnf%Zphd-bWZGHIQE~`m`*h=F^&l
ziYiYp2Bli;gaHnZjhfJboUR`tiB7foe6NfemF%KO8OT@`0*rjk^<*{<(SKi84B6$c
zSAeZ)XeDt@7mIt)7s!bPz7`HP9ftqc{+RVQxN1rHewmj8Yp3IVyy5+hfQzfO*PnR6
zhtk{-Yu&KlSEH<_;xUIck%#8F?#Q96cq(tN&Y&yCP>~SwZF+9EW+Z}7E5H4?%I{Wg
z(N$R$e70H+BskvgkMrx=s0NkTo4j@vUJI?-vt>?b>ZKxs;_5=f0G)6f@U^<go&);V
z6)Z>u0(`_>iKBH|X`>9ka9q#!rMTZ#DaG+DNj4Hb@5WUDRx;OQyC`$YMi^IjCMmr8
zI(s_$k$_>i*!Zw?b0n%}L?TE;8iYNv&D5Okc@@2k64bhgEg9atc=7JTCCwE4`m2d)
zotf55o`s|4kAD`L4d20r!>w61;4e~qalSS<zP~*(137sK^d^BZ{wkEAU>gRUGOBHl
z9RTUz=#A|RA)-_XJ;fPvhjE(w=K~z`rx{{e9EixI()Jy>7>q7pDk!X2)o;7@b}3Yu
z9i|Jv^->~KNaK}*?iz`k`wWk?k2H%PP(=B6#}1W+=RSZgxN>tnUk$!WK4gXlQ5YlR
zTsK(s$>9-qC<sI`iCQt+OQ`hVlkGIb)lgCnTkjjAl{1tt;R`|48Vc{DkOyAx#@EO|
zO<{w^h2jFq&W+aa7bXV^J|73h<$~^P7<~fqCs72p&(!fLTdOiLcK4ZW1y@ADYP7se
z9P}5`qu$TYpRF_*%}+LzE0%1hV_MVknF^c^YMGz692}P_3!XRHjaNpNFaut0`TjoL
zJ*V1zIOo=c)d7@J;#xxY!dp?|4-Tr<I@f}S8=VfCW9nk!TsX9-EatF6B{^lk0#J4e
zB|;!>_*h|B?@VYC<>v5_KI>C2z_VFA`o{64(?4{0alZ{Nw|H`!{CqynYP_3XpLG_k
ziP$}NfO!Bc1h;p(xMku(+}e9AFC+)*b7-cf-zFY{y5q^zfrbBu7o09H&lgsnQ0~~g
zy2GlijEBH%4KeBzhNc5k{iK+Y1-<2Q>UF|@>0Y(&Q0+KPt-?=>*O;tSLw&e#b>>(F
zM@%`Dp)}XMSMJ?EoMgkl7E2Dlkm_n=3YT5*wm_QDoZ>7lvtsY4O)?QU&&U>WL1boz
zQpm^5oPSA<)4GyW3E#Ps%#pgS9&NNgd{L&{3U4mAPIsPKsgeU0qP%W$`ZjtthBo>w
z{j$ZZ`}y)?bf|%(x(~j-JG@sY%R;$v#5BH_v+zHz7j`4+RX_0>ExySHVGK_8?ls$<
zCG8GiJ4!l$_CUvA=~B4lvLPO5zU!YI$VaRmBu-~t`|-fjE8m|b--_hjHI@%Obfn<5
zqFvMMzZAUzVr-;<cyi)+e23ZS2Uee1`KiU8*A!g$PLc^EZz^82$522h6_Germ?iOs
z#AT)PzW|h35Q?*zsrY;nZX3>8sF5B#27-ldl$|mdx)l)mQQFu2FIOtOc7Gu;oB3aT
zkoEXW@GtHDhHTLayMa&3)3q|?*fC_}cttu?Q9^2h4(mFdWi>)r&@Pv28u{R72XTH0
zZRuM=#0U~(p`Qab%BV&JME9I}R{we>pw1JgB;y5-iwrmRLHP%hMOR#-7%AknieOMN
zo?28Tc1wE+o31A<Tsj|bHQKAa9JVLVY2t&>m+Nv4Dye*YinTqC2UW;J%&TbQ$KFih
z&(4l%v^}kxB%IPw1bwe_&i`(w`EDZ;rR4y4yR?*>qOb6Ki?AP+?18T2(HMlK=(_{9
zdm{~sd*AEH(5!TkVTELf1xG<Ohb+ohb(zJ%1og=wQoii5Eo$Rp`4fdfG$pPSmJ}s~
zVlqKLXE7gpnEZaV1ZP64B%`Z>!^WBK_T~kY*#Ba=bK-yDs2kr{xCsRh;tzmzhb6>9
z!z+!FI)u7k9fl1aR<{6Rb(#qU59Ak=h_2T0ar}&kf$rP4^hRW*)_l%I!1KROf`P))
z2MGiZQI*|?s^T!TAY`p_e+dw98bH9&ELHjiE7;c;&=hB;DbKUs*7chHcwS>>?5k2X
zp7QG43(FDIEQzG>$ws8!ZtSL+a~6-GO3XhBmGXD*rd@xN*P6&K%~IvQsKK~mQb@B&
znOIXfL%=A0T}>ki50;ffb)L6t)Hpo7O2uKpP*QnuNkvcZ7+jf1M9EJKck{Er0rd+S
z=^O6^6DG2}`u2S{E__E%YL(>)Yet6OO*dmT3I<m(6XV#IwJI{ee6dvk(R$T*&Y0N+
zPXuSgW@i!3^xC~+e>tOyJl?OsHTW3*HpI6^v($s$sAGQW&Iq+~bF@Em2$N)h_?PSD
zFNSos=ZjgM*=UQLi`D+ET-=unMuvArE5e=BJ$R=i1hS<E&*Bt(P!ep%x=k3O79iEJ
z?ty6v;-Oxj{M6lGul@P42mH}E*22!K<<Yo@RnuEP{R_%Jr^GO4)4$|GIculeE++f<
z84w$%^+B7^lz2vT8lRPsRGOYgwM3&G)y2`7pmiZp0(d~G_?NkW5e$dGW%GGdat4?m
z3)|<70XRh0I<7v`u&fuOnQAJW52q!DM<wZP`+I}9e|!onAY_-l%F*%pD*ZY-Pc#;I
zy@Yu&qP>?<AwQ~cXI7F<Gpr&m=ZL6tD;VHX_9Bhc{mC_@RO0EADBm%G;I?%C*~1q-
z)5sMN<0y~*G8Cfrt?d0&Xee#Dc<9m6hkDz|RzDN!wG*D$Ui99C-vaj&34!DBNVg1%
z8>y}#89}ucRG*1PD=%dmAiyfM#)nR(>UJ0wzQnF2;OY3FpZoVXs+cy2w5;?GQ$<2e
zu|#iFD=ow}--1<8ZyobjRWkurqBk9Rt{?GAKrI;Q9zBLzZJaQ;ho{E4;I!6;pT$iX
zS#$C8bIak_Kk3dF92Spdm6>ggwrk&Z%+#hbn9KM1UQBdba`4JOzLqFGQ$(Mc6`_Sa
z>2U(>7)j=}3e*Pz?%(KIyA1H%1{)%%Nf*%@0bM+D+(`kq2KwZ*I4VfHF!=@9FDvf(
z`D5Cx&Iap(E)z~MuBMM|Ns<5%P%f*;vidnD<8)(8dNv&jv|>5$nb&i>+#`geKYw6}
zs3PT6u=@HGWyd^;J@9Q$(ot!|lp4;Qrkl549^Q|)eBMOVeorn*`w#^4TIQ!@;j7&}
z9jKr9SzUF3jZ=DpFN7>#&2XI5qjeoeB~fm-glu&dEb0p1Vc|JcV|rPadNR7eIg+YT
zLWliky9=Z8uLXGp{|#G$P#Gg@h1E>)KAdDmO{b&8e2ke8G}t7k_78@NFc#F0JXn|K
zBvx!abv-#UJu8Tw>T4$Mnk!cA>%@Qq*QbZ};0q`@1DY5aSuFp7Bp-&rG7uC;x6rA7
z-&=2G!#I_&T8pGOhQO5XUKHg8{w~_v^~rQ=q+?je+e{P>8?c)n&tiGj12TFTV;$st
z=imv0loSAktP4ipl*=6htfl+=WF}G)C<@j{hH6KSSnUA^irkKXuN>mhbMO<&)L9qz
ztxRgH)b)$4gWy-G7G{hdY%H>OqmH8Kiy4|O$&Qj{IOnqbUcP|=?pi__3Uy1aLIaXT
z;d4MJh&5FK?Qa(sU1p@<aHWu5{X|^|F%w%uMfa+`tZ-rTrGbeR)6Z$qp+lDi<0i6}
zX#Nr$y4Sr>pZKR<{N-QlW{S#Orx5zh4<Vi&CO|GU&n~BGe~dbkzvkTn4cE|T%USD{
zNFBn`<!UvVT8v~-vN%uab44=Qj~?HQUv7K_ph_RG6QntJvrZphZvfnYXymPe+B<m>
zlU(^I9ua#zo)9`cmCW5Kvt)91pz~0b@&G?Uw2oD%2yV27VTW}>Eenh@0=U_{(9%HS
z*C(a5G=1JvO&8Gjti7os4ro{Vz)^K%IlS?fIYb%(zC8>f85Ll-9YkHMM6S$>y!cYT
z1!SeBmg^~lOVX+>Lz83WdPQ++h8if4oWH1slf@6-32CtPG{~*G_I6H&G&0VYX-=$#
zq7{EUG?nMAbXe7^NV!fPq7}KKeYt2&Fi7xVgvFQ%z4Z~Q27(JT@Cadr_?d|J;<Y?I
z+=}K+=uDqAYpTe}>tJeEN9xPppq8Bu@=l-p?5xgbM{uJIeJS-PkEfhDz|l3rh3e{N
z6Cl11KlvT7)QQ+Xl`qK>!Ae6u1K$q+%+?(XC?gGoN4>bRfpG6Fh@<Zc_!EhIW@LI}
zi76Z`SNIT69vVw(-=?PfRZUCHQYkl8&ML}F^y!$jIek~#XggeQ-e>Q{H2N^RdDSz>
z9#GX){2iX!;5fyiR~cPQ9@+BDz*xjn<1~BopQ?g3p6ZM_OE~H2fF1hvX;z=qfH<`i
z_cPC*N)R{+*jZy%z|hj71bRpZ44Wm3Hy?9bl;fDtL3zH{a`}+!);WGv8VBmF(Ag<5
zvs#%3Mf|+(y)9->pV$x9Ce!7TyyjVegn{&u;Sw~l<2as_WBAt>PSk88Hc28D;TW4s
zN>HnoZ$=YxHg+OkcX|B&kQ=@aCMH^UV@sD1ZauA(hjO!9ebL?KskYqa;piGWM1P^y
z1@Y3$$V5t!4}m9XMbDLXadOE(9L3v26t;yxGY;P}ZbMx+#Gh<*J5>WKi==HW>GtE-
z0k&s-L-LJ4?!0cLr4X&4>&$rrPIuZCHv!tRJ0`AyV#S}yU?7L`D3Tn$iMEOF*nn=M
zIDL9;bkMPXrQN-JL+W@>%o%^wD{XBlQ>A)+uI)nFTA&;MYtebFrK1q-&0p9k<5VSF
z@?(|%Gdp164bk7<saw(7t{?5sts@_l%im~yZl7<nGd|+CB9kz;eA3i2@Lu1v<LzFg
zY(VaC)8E?Sa7`PZ@+aTNgs}^@ZmKExTff|g0LE;Let+-lws=Oi?&Wi_lBhgK@BE-3
zAYGaz);z5z1-$0bH@c?$=Sy<*uKh)EALKFq@Eu;b??2@^ZSa<Sc<P()ZJwc$76Un9
z^5=iV&(o^fbpLS|dwYO>6uKRMb82gs%moxKY-syEm0U^sI38*rKAiLv8C(>6E0j2T
z<l;KIV((vI`_R>I4B48ksbj&V)aN9gVR@x`Fl<WXa6t__Mp!$!obyR9<jAd|W0lH_
z6AEd<xKEfP<-Vb|(OkNqp|Zaks}hnceiML@#`X-K{u`xEAZxxc%0i<$py{y_XnP2H
zcS&%+1VI|?8x4J5rtuj{xuNw-g4ZIH$G1}?A?pkAx1;OToE4HrFet(M=XQB+F%<K?
zTdP-mhh5X{rQ4s*x<uvmaog;|HPzktRn={y^ZGm_V(>b*{v`D=w&v8`MavBqkxb>4
zc~+y2AGR<qD1dVa)?Sig5XjW5)3z{<J?F;FiaqK4r~BH_^{UxF>Q?Uck}=nxIDfq{
zd;hm3d8#P^Q#M5dNa3yGk(4=vl=k;PViIqw%R~LT4L*_kZ&GXvChe3)^_otV+Nkxp
zwzDTrd>n_#DJ5!~)aSi&x9#_%1TxNL3@+q9!#3q%)Z6q{Z&kvpb?l?tz!i;sptI0`
z;AF`$Oag5*)Xjp3N;T0yVn{^qBdF6h)Ck_Ue@nNQF+6W9>e_E0mrQRrBSGbVt!`LH
zuaedju6j`$BvedYKBHA2ecp)#x8Thy<a{cs+B}RCFSPThjq1JAE_?7vq=aHr9UVd}
z5k5DohWQIp#;W|)rjwAm$|~IaymXhAEbkpgsMlobcFyD*L}3}<t-D^qa#AuQP3%(t
zE@ckxdNZUiboc)~Tq!jw@MoqWB9ubsc?aOr{uSiD4SOmEi=sWqMZ%*$D}8cAr<iI8
z3u!uC$1@J`B8%|*&_wg2N6PRN%J_Gwhqb@pwUSDS_$*0Jr?msR8I*uX6l2$CrR0;}
zS@B-W{|V9_8|dvne5Ux8plGY*CNa2LnmxC5I_JPDpwly^AVv!wZ~#b6ClQ6yBsgw_
zRF4{`G(#TEY1^w|iUHAm02$<;(LDbJsfYRyRD!CI3U8u|MJ{CkCiKSqPs9hY;H|NI
z3;e7^kG^`hX90q$(-CG^!bo95q)n!G4Cw^b=fo@KO~xm#6?e0bRu#eBY+biR@dc%g
z*W}@~ctf>KcL%t9zLH^{mpC>c*G-&;?>pDU6Zr|Y0WCHAfrOseG`WZPzMHfc-H0N>
zQRK|s>|TkRlvYl_B)9L{Z4^4UG~h9l=gDh#iMZu-lkUBzpq3oxA;FJohjMo;j41a3
z22P0kqTrNq(`H}pKIwGX*)WfYX5tw$?mhDxE^3s-%sce9W=+wsS7-imPiGXkgDsM6
zowj>a_V}8QTB;`$Cr&tw#D@sFvE*wgI#!HW@wE`#gc6z(W0-fGSMu^44^NHXUmRo}
zjD*Umr|s!tcFJP7>E7ch*6h#Me$J)$ULRJ>%&@s^%fD<}tyI4m=q(~k2Yj_PL@fOF
z-`+Ipi3#=$i7;V#TQ|nmYadI+(l%B@20A_0h7lYrR>tmoXD6#*RMKK+Tb<n|vwC}^
z?a>dvI&Ek5E{W>TYiXL>cS-q5P9fP<riXh61_m+Jpoz^p=`tD8)(QT)VJ=s6387~O
zj7fe7iojE7f9PV{Aj4MnV7XCV?`dXpsn-T|{3^UIE&LuxE6<;tRZ}$b%R9td(xndr
z9!6^3G^j(?rm6B^N;(UxsdA|l0R--VbL9<uMtjQ%s$!nRc&P(>{aqMdq{g1fQ4~^4
zB<@ZMjpvP~FuYacPKg{Q#;1f<_zn4dgEE#2)(9QXIn~_#_hpayOcnnri%k!k&iK@o
zdA4n#?9<(2(yYmL*41h6&YyLQs>SNJho)Ae4!c|Z%WeB2;_`&pQAN4O*{8vR4$N0D
zhhEvoTE#EP8kJ#M$`|397jd)iTV#!BqUZ3uP!M?TMyhw0K{W|snIa!*7SecH%O+)y
zBlwJ?4(CCz>xC!&*J+O?<qZo`M66a@Y{)3Jg$HXZQcfnP;ofPscyBBI@!sh-rsS>!
z=_McM8)pWN&%c)@;2I1TcTq~;%rhf|p}0Xdve(0rcre)J-M@KB$(rDbbK2Cf84qho
zMTpD#+f}g3mc3wKOn`4>|5XdTK(4L-4S9lNkMn{)-voy7QmHX9to!YvVlg8UCxLVY
zCbRy9nS}dFo>PfqDk2Wf<Rkdr%<=+jfd4vg{qNPp5J7|fZAu(_+x_W?OMl+n;dLeV
z7%(O@v;eMdH$on&aWy|>N!t592XAU}6~Kvfu+A9M7_x(C79i@#lgQ}p&DhNj64FI0
zI4sc8w=JauYjuSK_t@mZnt<S84AO<QRyaBPm&Nqj`ZwW(RxW*YmQwJ$hsAs~DC%zg
zxTsv9K|I>)=kVrjm4!>34cswwp-vn0%WlVZmhF31ZR7Ptv|}&DCmE8RN2m3rG}~5+
z07c@dPb{WT!B&%LSTsSexqny^i$20G((4$QdvnGZQjq(XfnQ<Fy=t8O%n19S{NQhs
zjiLI(qc*v;=WZ?n0v`E}JdT7MBO5^zw#q+iJ*uD<X$jIk)t_OME*#INcII66*kPkt
zF62xrv&q*KwT<jVy~lSOr15i$Eeqn3i<x@&;Ho<AVWjnE7Bh$4zL$PqgXH}K35fr)
ziO+)yGn(!Ymu!eYQ**Nedxr9y;c2nBMh7^DxMZ-f%CtS_kz+F3Nw{{CQJ-tHJvL$1
zqe@l{4A7}M|Bdw@hglEq`qWp;tlLlS%#<Far|c75X|?1z4^*xYY}0K^u36Mvr=v1r
zY5qH)yhzvWhkc%kY>V=5rgQdCUmabx9?zK#wco#!O>KX@_k^Je2Q$W*QEtQ<BNAXH
zFbjPHO$%GP7pEJlr$7=9IN8@qWe0*L_30XsV{jh3tXg0D*R;iBWEqxM`W*0(>Y*y#
zP3qZ{M%>vS@*3Ru-N0RMn#E>5)5JJTgIn)vmpeMhqMH8acp{Uxy3Kv#BhBFt{omz%
zZHux<Eme<*q)7NkOl`JZtO>MCX74Hf`Hwa?!BLx(O6;Z<UGHE0f;t!{lAJ3>h{oh1
zk9?Tm2WBR8GEiCj!Ywjjg5qkgkPm)OBVoAa0Anb-81s@YwA8POu|YybRh{Z;Y(#=@
zawHH3n>7}m6HFy7o)u+jG#HquHrn`{XwYP9Kbp>0P{)$LPq58;1P&37^OF|AYi;g(
zE16q5W@YMaw(_GY8gy8e<QSt{j4yQq$#K?~yV6r$<8{1i>h?GsirgiJ?)11BHon@2
z2k?CyXF^c}@a~onwJ2e|$bbMr`g-rOR3+#ozPd#1YrHd=nv`(%_VP<2+PIWPF9N9H
zq+6r#yo<SYqXPQRTh&wk0|6*lgy11DVvd^fSOp&ca((ihT)ay2J#^SoCQ@8rZnF5&
zVE?I}q_`p$SwF$`v_JNf9zNL><VBZ`D6W=<X7_EzPbO>dRe~GJSDxd?Ysbs(A`;H~
z2cshGOmhy@h`h}Qg0l#en1aR&tgOq58Og{h_aT_b1|_!y{)7i=8)AC`425Fh09Ef;
zN&2hR2k%RQ-Ib&6T}w&$)d#LE`~BN1n`xW2bBb!JP938R*}P4syXwi|1=W+q`;6tI
zlglY7sem`;(Egfr5sE7uEVom^we!@iKGxnxZ#qanxh7>x2W2Z37J++aIyhFb6i6i+
z-%r|}!ZM=pgJka17$qBs#RWv}k&v)mVoP!e>9*5Rd|tQtLODMmYupBbTRto0vVNE~
zL@KHU%7Ug+km4GhdVO;$7N^1Z$9eElbk#&HRa2IB$&aL6F+ZZ~-%K8_&lArt8ZFNa
zZ>>@-;66ED@^3F8hF{M-hN49}Z?RN8x47e(yE^-6Qr1~<p%(>~``1k+jokRzdZJ#T
ze?CJnKrp8Y165+f+?bw+@_Y?%u-$k&ci>&Vc9##X6b%V5UtVQ*F}#yDp3kS?#jw{a
z&8gS$#pxj?^)F+5IVA)w(M>1t0UW|k8er6zQ)6(%j<9)3`6h+jSR~?fvI3fPVJVM+
zwCN#RBLikE)5lbgaD2zd0Gq_Nk%QjTkTEbwie6*tgDY65K~K&^CzhMnZ1OIY#TcIE
z17&d65gVw?>P|QcQFP0(gEe1c%<%(p$kg7L)n0cfC3mJtR?d`sGa2(^aQ6>ISNN?a
z-J^~O2SXiYVn6bO#&kDj*^5@Dq(FM5XiX4+0uyC;ECk&Q7&k8-5s%231WBA?$q0a9
zXMy6<Y5|qp;Ck2#RIUQ+ArZFGTa*9T-(UL|R(lb%_~U3op@dKKxJ}H>;|QB#W|+(v
zO`d8rhA}$HuBy9OscnOYCeZFok<KY{ZUZ2C<3-9c^>YRpi@1bRp-I_&4qY0mz)dv8
z#psFjfRS)w6fSp|gt2NY0OR?&ol6BnpGjYkiYa3CnjR6X!%qwmPg)L#a&-Nb{oV2H
zO_$lCeg)Jzczqn6q+{^q-BgdzhMM-Sbi>iS0zdfdq6(c8zG7_{jgca5gy~#3d7O0}
z#=MarJ;x^wl?0x2m=3AZqWyJqK?Ge;x4qX#DpG8$R4pVvS1%z2%!}@Idi(P#hs=l0
zbeX2*YrM|Dr`N*!Ifv|<ro%&3=Jx95n)Le>L#sj|afrtl@aUa4)SDlXmz+EP`&5FD
zH^4h6n@v8B&1dA=lz<+14Z?%#FV_l(PX(uP^O83`(#wDb`dpW)0(y8nGWxbRTN4qg
zbPU*fXZ^u~Yy|M%@qq=pIZX~a)a<1{R}ixEQ{PwCmvJcSi??WZ5K>LnI@Cj9K={AN
zbtd=RRU~KDiP{<ZWn>d~1tc=>BfLc^!n7cB9`KcuG*3h%hC>>Gc-FqGJ#D{Az`w4n
z>;DvS&)uSF;os}x#=WTf%HmFzK>{Qbk<uaa4O4*PAE!x-LMmI%%JRj$PC(Q)PuBrw
z<a_Rv>iW!_RO6LL>ck8dr}b%)tf7M}m$@%eVNR~$pjWIY>)K76S<ckr6CH8LZrP|(
z>&6D)ErTYo$!HbpW?J(LEb1Oh$ZHwXN1VXL70mn0hQUgw2^-o1YBD=iZc88NCXQc;
zG}<G}tbScA*l%=+m_S|#o|TEWejz>na7)C7!ox@$qVt+U6?6dipyH+rh4^T|;1{c5
z+KB?(kr}w<VDNj&gr+y;Q=g?)vJI<F`yw#{5CY4calUd#46~SSn6oc8^xDlrgQxdM
z+!xb#MiNpQeQQ-%W!-ww2Wqm7*R&-gHak;^c==crw+HO&yBn@uw7PG-c&&f7_@&Rp
z73{CQ1(z#`U;K<BRhh!7sin5!s~{355HJU1vFu#+a-q;L+e#E>(*g+=mOvH}!!q=G
z_xI0Tg_ykAxA`S<He6W36Fu7QDHBr<)~8gLlWA!2-5ZMKR;(=&IcCI+#=J)p%k87;
z5c2Zt-h<kfE4f+x-Q<&6Om@dXz%74%Ri1K)0>9xAJZ$P^cB4EX&1`Ps=_2hRR4R!B
zePQ~o{hbjJpb3KMMZsq1*J@(r{ltu{JFT3YkH>GUB1~8#?T>dK(ZY<f&(G_*@5DSF
z<$WnDUvooi4Ve(pt~cY9;2ysZ!)&)bze@vLPJju9U82U!pAwd<Hy+!)P7NC;V8U#M
z1vy+17!0ZbhZ$3AXl`oeR)^}!YPUC!>)hUEV?TAckZEm<8m!rW?ciPRR}Sl6Yh7Qq
z@;hYn@cSF`r9^T-)LuFshVKpK(d^`c`5B{_nCxn(lLIv0F)EirmwNF7Guoeyd}Vkm
zve@n34B@6edk^VE|A2|r<k_~zdTR?WJ9W#^i#9~PBDK(H4L$mu3y`_0T|#3xF>`k(
zRg-Mi;u||Z`OySCTK3@T>(UrSTgPBLBFc4pTFx2xHmpm;PO3L5{mkDGSOUGEZ$3!5
zLj6t*e#X8riT-kd@x-b6y~G?N@rX2u5QNA4ld=4cAiA!g#TjIOw^LMNR>9B~k5|tu
z6}X36Ay|b*C|MGbBT5Krbc;*8Q(0;IU@;5{`tp^#?0HS14m5^2BAtv7Jr<^r1yQGu
zP|-$dQdV_YmC&%Ml2j@pjzKzfk)XN2JhaOcS<=ftV9^@Nn9S(0f6rT0GqeX_^pl{X
zRfjUNPfT@zW|`PwNr9da2U{AeQ|S;=R!Bq|Ku^+a?TuGF-A+MX+36CbQ(Z{d2zybS
zgye5ZsWq(9HY{3t;~hhCbOvo9<!thWn%e*B`GZS43L?D(bR|$QKZrSLFZKtyqQz5Y
zhw=jt+9kq4EYt+HgJfEPFrDgTuh2v5s9z0lY(P`6?br30DCKEESuW7bbc0g#zdlY~
z4)h0CUz)qE7+<qj!B+Q3_rVNH9(R#t*0Z<#N?kn6?FDs&Ll$!neuaLE)KJ(t2GMVU
z?QrZ)ZBP{0K_C@mr(<~=Nd>fcxL?@`w;9S0%{PnBWwuFQv>o!S4U=j2?e6q-vl@?G
zk~X>MqMKZrw9{AkYtz>yuM<TC6<BG-lt#?pa!(4gB*bMyRofv0mGU`aqzuY?%%}_0
zkxiqslx)EBHg02MT=wdicE|>4k*q2jbBOI6D#~xqViag*hj9#4yU#j=25+<VVrfV!
z#z+;51wBn>6~h{c5z2|Mh?PZe?Tuj&(Su5)z2AX0V3TOflX7$@yQZv$<@WkFiv(@D
z#q*Q@2#_7oiKZ-KGIjCmroEgtO4+{>u$!qm+{V4gJ{&}%Je;oN$4BHJ??a?9w%Qn+
zA49Rv&qUp;b?CTvTi+K}?3$;dHhk{7-etD%(>%^w>PoIidH*fMSkYjz`n>h_E22eH
zWP2%hnp{~e%kyA5zbbm8eiQY;R^eibVl@I|K36Ttm7u7d>!RA5qLM;xI$|Rk0aF2)
zkQ08N{@vimdl`nE5-VHIvD{d2{e&fI;$>lRo}pCOSZNvkO>;G~q>pM-A9rCpgMP$G
zWLM)e+H<~}Byt%;WYf|m{|=_vht2D&3hH^7!^#E@E6t+KD;tAYn#PR=w}VOBPmEg|
zFVg;q-Ik&r)BN*&9N~=b`kPs^IpEPMVa>&Od2zB@(r!B?A2Ej(DT!k^ul2^#y-_7Z
z7?2%^K~~D#ZBVWkJ>OxDi3|>V;#!jCPOm0`OW1~)EC<g;`%V<-u;WaGFDLGNq7f~U
z9Fv+}$<;>r_^6%~w4oZvjvP)Dl~9p%1gogfOFu6PbC5kIiBpYj;{s!w655Podi3k^
zSY;L!&rb1E6)u%b+IgZ(lfz>!iiJVA5lsc&LPq;}hTQHBWee3>ZNv3Z=n~29XfgUZ
z7@9a>q^mm1nTO6E=P`_GuWN{RTvOTsRy`GBffl_SeMb5?X1EsJm&1tL2X=EcYX5|B
zgnsne&jRtH8Z?rnneHz$2@{_;BUU;!Ix%egsGc1LxW=C?kK!IH2K&VTG%km2N={MP
zDu@Y3Rmk8EE|=^HZ+8aS`10U)bO|FJYMbA?RzVEQBlp5+_bOZFBdnZKqtyEfg7Lyl
z4adqX_*%-0bpw<^A!!js3?@B)M@#atJDMOHk`m9qL}&iI^s8^z37kB^6nF#kbL}L$
zhp+R=>NZ&qczRWV#K5@2uE2C-@U7c1kfcUQ(5*<%NA9NzM&W78<Y^r0+jUb0J2RVs
zL@0T@Cx*Y$md)RY_OTXQE78}mCynx~hNjIP0CSm-8opO>uQf2@albRKYyS&t*#b-9
zCxDExUpqG^6>dJ+N<1@{U39t94_ILuf_0O~AYIG;^>%!k4{xn!`(kA2|5O_x$J9}n
zEmE7PW<)Uw%m4_GH>Y)d(sb2|WrJb|iOJ#9+XSU+53T9<PY5pi;*e&r9~2VJBTJ^4
zfo$lep;AtAe|gXvX97s)H4H0<Q-66;So#hd`OL_m?e{~_fM8_w3<Q7aHgG?o&TE+~
z$dJaxBBzO3;Wu@4=4AS$9~sr!aqj~=Fqpp<Pbj8G=NUK9*H&`sP^`n<NTQxjDfgkZ
zYEwf-1K#$tdA>)rL0@K-*{#g>M~E$tPw(A>A*=(>X}~13FV?jQPpzRnmN~C|6*YBW
zklLeHW@NO5Z)YrGuPwGO*R`)bsj5{y0u{S_4cE3JT6iVS`Sj<%N^~Zz?qHb8VzPFM
zTOov74bZ1&W@=h`Fzm?fb}Csc!CweLKugfg|EA$!Gp|#fNaj8i*c{;o+uGdA&cPsH
zlIW9@|A91NkcXwDplXVQX!DQ)ila%e8v5}3H)1?N3CNYLwbag@wLZ|9`)VK6V{j8Q
zOd-Hf*EiA7f+HJGAVLeFm?rHg`Yc~1X>EkG9^Dv>XypCXxJYw0NMF?z;Ru_?V`rr9
zuD*C)vplMXD|@OUTP(PJES$X9Zu-u%ncLiKl35Mh7OvM6+ZV>pF5Z-j^5&oz|MGOX
z=GQ#pe|gY1+g?x9)b1o8Ve@=?e{p-crf3tlx<0R?{@!#!x5dn!(bpKO*TuG#9(Adb
z>mMSqiR!|`@m#6dYI2BL(0(UDHJ#<~#&J1yp~+OAD2ozOJxY`SG^+iZj04%zZ`J!W
zHHkAIL;r+~$hJLV(0FbNIb}6HTpN+p)`3P2D+kuBpz$q?ozCf-V-sa{4u8VqWQ%m8
zRp7qc-EU)R%2NQl-9VK_Xl`g~qbSPDGvyx>IKg%hk!W|WysrV(81RSC$C@~NEhoAo
z6#-eZi{*D9_f{)6I18^4|F8fp%16TI&tDp?FL&%rBYne-$ly1znJDh@%@~A*!?pk^
z$|;f?=ylF6FwFvS-=0y;n+I(2l+!Mxk8~J8<W}DSr0wcojjD}{ALS38Un52H1JzZ(
zJyxFQ1bt-PIE3xuPp+WTlL9$Q>OUemtH6*ps?Hp)#bUPns@EdOSAdcnvO?&cBxRLd
z-c8puf_=_Tv!OSJ4~py(@oo&m0@>14&?UwKtrqYuz$&~t(n~zbfzg+$NuhNY9P)Bz
zr)rGPm8i>=b#Fb_lKE?m*Y2L@lLZT{;;J_t@+UYN(c3jTUVFHE5W6{Scd{>ZYDAi*
zt$FzH6gj<C?>xF4a*w@#CsuwwB12*hS80^S^`@%ZzpV;1o1ad_Z^1enve=#4b@=3E
znJ=I+l%sH}YHV%F7)xSoCN7m^9iCC9eOjk-_nx{9)kb4cFt@wt*J=SL``S%4ACo@n
za1@J9nI&*4oH8=SA_pGTclike?rlZDXP+PW;pqTs!aY2pgh%cl1<AgBA)^xLwuF2(
zh<_ZFhAn1OOxot7I8$c9m6^H!!q?0Q(f_lMO$Dz+PA4q&F&nuwkQ8S*N5IIZe55%T
z@qCAZ^Yjpod$Q95%&=yd{{C&<oQGa!n)r1)FR2yHd1)Zgl(p5Opo`GBp2yM+`%t9X
zRAE}b<<lYYjGTX#7}m$2<*}GvZ-<g7q~QE-_-1W54|J*78%W#Hg=-UR=vI2RPoT<3
zKhKyVv$Sa@6q1Y33K@Dds4uKAibuV#>IntO`9w}q&VnQcj9M@Rsh3=x6Mu?_G{(GY
zby#Ytdq!xOqkSHU2#-)$$&dnIFr#tJCo9c|1RSm;4BWCwQ%Jm8qKHv%swi%1=gu42
z4ELwEFBh?KMk|r20=Qf8*D`JY7!R2ue!tCGUl5%)`x@lA@+UmkXODnW-V+N7$mT_4
z);HKUib%U=K2W77KDq?~q!bvC{;%FXungD)p|19n*txf1w9Sv9eG5s+oPXGwyv~a&
zs#faFU&SgRy>F=J1m5S`_dTNj9I4t~>o|fgoRl>1|J_9|Wh_^1Z=7N5@$51j3?PiB
z#f^L-Zs}MbTD@e!Y(S}rA{jAgrXa}*j0Da%$W##b9^8;KU~OBIOH^?-e6^WeNihdT
ziPXHKHoG8~Z41%*(v4TfPe&n()yErElCgCfxz7kfRFt~~slt}UCyq%BS}GI?Xzz{}
z4MRcUC5-LX*GhQwV>!%c{ldLUO;Qql{iqih)zZ{waPl(n+ml_sD@5wsG)8JFc*qe<
z2Gy+~+JJT`VJLH?u--2+IE#*Wdy;>EY%ZkHp78V_fSxYB{#?9Qi8FJkZmW0i#TxMC
zIB9xg{{(Yt)+^O|UhHl71Cy+>sPC8t$2pmYc;f+`#toUuiayt^J!hihFMz{jg0Q^M
zvga}|vw#J>1hc)>MZ=BNAhNQ5zNXyRU>i`})luG<kbAGk-U=87=F4Zd5X|RCTQWK8
zjs}ls2)0P+|0Z$Wd2;y(S-1p;ca7Ac<J&BTh7G><6Qxfw|5Om1ogK-1F9N>g#e2&G
zu#`RXE>=j(s-U0D8}o$0{{CzX^j7c<@H&|vhUVPS$+1hO2zs{)0-3TOoRMdaCC`=F
zAKR48D0?_r2reI}-2t=L6SP&!Hy8BD5=vur=)YLSHhvnm0Gfz;Wzg<-<w<?2Yx#y|
zhb^9;?n+%OHOtDkuLH*mTD75lh=AO@s@~_*0{+|w8u)Q8sWrK~pI!UD7&~Mlbo>xm
z<X$&7#$A2M3H%97#}vzyj_hH-N)tf3a|?Tt!pRM1cAd|qY7}A++&L6ZujND$$kQ&*
z+Yl9;JULFHT_s76b3?NBI|bk<M+hNRSq{UKr`A`qo-q(x{F@kQ?yE=_M%}!9iYFNw
z&)=+)s&gL_<X^-&X4I+=IDHbzH5WLY4u=>e1%lC6#&fi{q`N89g}Ofx&z~#eOV8}u
zf`^kf*Uv!`6t_yWNwh}K@9RcsJ}ENiRs6n;%H8K|G}N=2(kwHYi%k^Ws50a=R#h8~
zgxeJ@+?k4-PVkdP&bXyN7$(Xg$%RzqAk95;xoe0006BO)ynGqiyuYe~Co;tR62#YB
z>U5WL`P<-{z;sDowb*n(;JBOFgyP_h<etUc)q05b3DKlEgo3#7#HG|MBbTZ>i%r)%
zIJ1qbh9DzCl<y<RU|<Cm1H=}ZT?P2fR`c6hpRudeZy#_wvJB8=Ls=!ArvnFhF3|%R
z+`F>Tf15Zvo)=>opRhCN80LG}fI6x;d&R*@=_v)y7zK04TP216M(Bpf1+QvxAP2<3
zmzy)@XiCJWn8_dtKEs{-%P&}7Moi%D3ZV~3D>y#|u`58zKe*1TG2umydw*BW(Sw?X
z%go}e=M?9Fw&%eN!dL&;iMTFP_U(|N1|d5Fsmm!XqkS7b@V02=`*uz@C9fgHFky^0
z6eG;jm1aOZ#3LSL$#C**5_oqQK3@}2_#9{TvzqYs9Pv@)w7}MFTK!n_vB0(YQt$|<
z^ymy2L6zGUc|E=3l%oCyF*SgCE7Qf&y#OZj=U;e!0s>iV5SP24b4wA)6slbkKPqVa
z?L7vIXHveS>h38t5DB(K7mO+b>$HL{jmc<mx-n*l#n@(A+wEl8FK1+^Tsp^(_lUj{
ze%uxnCx5ucVF#nW?>sulpV9gIQ+x8|K(jy>TN9DWHsRd-ESVJQ5c}`_fCcA#g-Gmp
zL9`a{aW52!x-Xv(liSJ&(t9irNI!(V-XjjUhIaKPVf1eo_X~Srh+bxvmvd1SB{2vp
z%wybkv@OTW;}j214>YImKO4Mx*VExQxs$uc1oj(hCj=~pPXQce4-mYN3K~rT&4clb
zV5Q3QA)*t>xFc<)$Gw1SYsK|7B|$F-FRzC1FnhN_gFTQu|AQqEncRzh0Z6B{M)+C<
z?u7TwN`dnG0r#=owToakaXE%{HxfBuQy5p=EZ(YlaaVUr2=-6PP)+q>>hzs585^st
zY6X>ID{0?<Jq$r^%2{U6tmCzZOsAPsCxsPwFVtek|6m`yRtFP9JYPt-c}{H6(b>7@
z=h44eJX;z{S1wJhYB!nt&1~C_TX)&^X*2?!zN!SN1c%|6_m5ayicG1(l*Fy;#;DzL
zNcKsqTvA%YiB)@?rim}#*ZBHl+u8^>-_NuAuhV<%)0+B}?EN!mTw3Dx*D$=fr${(d
ztqrI?OuuBAvJdwwJ4{1s#VOB+F3a$^pK;jc!^>uQA}tp0M?tagM(|)71f;VY>(F>&
z5E?p1FmY%imeRp8ba6QUHQK$*NNA)javS{<B!5heWQiVcKvO}1!R~Zi5YxC>-@X&e
zvtv0<#1x?N>6t|SePNQkwwJyq(K<7g@jJmdML2nT?gZO?nqU;AwC0{U8(w-dM`0*L
z>xv;G(}c96S4)A_{IyijaH#&KvIJB`3D48TL;Ez}==}t%=T7tmytIby6cLutzXBlT
zg%rq64!uz)`MUkLozQE9WyU#Ua)^a8;n>HbA^Aw^JVulCABWe7wT?Bmsmbw%BZu9l
zbPU79H^?Pg&By<#ThlePHJnSOr_bI#q72{~2g`-%U$yB@=|A~a`97}QGD-s2vty+4
z<pY9`;cEX+PS)KwbZp{_&Eqx0xz<kxR4Ndl@C2OhzgoAA-rU}LKR+PIlAaYQZWx$K
zB#3l7WQ2BlI=YR(y+J-6=-4OU83OjwFJvn0FCYKZ`)|g5^p;gmJ}Nl*dmnJnf)&{Q
zdcMqG%9PPF{RF>?F!Pw8XCm3<xFZpGQYZb3X@7-q(|JjWnM=ie)S`+}>MuY0uqe?=
zSwbc1gbRN{l5YYT<?tba=!@W%W^wvi0uf9`g7kk3`5&kv@PG_pig}WhZtGcd!wlZf
z_5q{7$M`m4$NmGJ69}c#TM)djAdlyPD^>fwFkLBUr^3bqOrHY;3XDO8DMMEd;wD9o
z0A%eejz)}V2c{GY%pwWsd*cO1^>_UGe)vX~t47NI;2jX64Mv7}g@FM$!j#4Sul`SW
z#=nm)7`WpG(9a%B8>tW}6R9039@&6FOZTN8uXkrKX23C2IrI@q5>*s#1UC+%g1N-D
z1h%AO31q2m$!!U~l3m+Sw_b~0H?7ax{}s{iTM%x5NCr}ZRf25-dkjwlUCmZ4u4&Q2
zV|#9=YD>HC-9t2}IOGtf8q*v#9cqKe3*L?AgY^yb1@hqodI7oy3J1}Fc!1o9@PHhN
zc!8)%*dlwAgpd>K7aJiLDHk$>mFLl?*(cto7<e5j76uyX7&?Kx`rBUMAbJE|9#fuk
z7HZZ)-&~(tUuQshV1B?P>^e?279nmX79uv4q)u=zd4NouMx1OEGTx(5t<bY@N!&ra
zMC>}jn}~>T|F<GBHetK?QzA}+X3z$`8>SoYs}qzy6e$!tlqAX&xu>F%JdA>+;zr4f
z^e7*Nj9Ks;rV*SG_#xFH#h6FpcIilIY8i2<lwxcCSe|)7dNGISV^DhB--tClCrl^w
zN2o_`EEp^mEOxAOCLXhNvn5mO`H#G!lBE2_A}4_i@pgWXgy=Y#s43DcpEmtA={5_1
zL7kh~e+8ZYRe7!h(gBG75diQHfc~fP0cidcT-U1NCuREhP=aKkvBE^6h%4J|cZZ5|
z2}Z_R5N=~kQM8~0%1|UMi{f8Ucml9lX*AzJ-|%>Xp!d`Cg#4)@<BW~FTDhMmvNQk_
zyO>x5w9&t&5KU(>mL;#=D)k_n!<{DfwCzCKT@`SI(eT5`YzvG~WPcZM|H&2*@KD4d
z>ZZ&d%IB$Z4elssli^YR@DKb_?x&>sq=6BfclO8%R(xFRQh)rr5*PyK-r^5}4GT(l
z(-Y?(M64o)+Qlq4z`myGQhFU9)CHLk2ixKqNeHfUWv*$V*`7&Ty0JGoEhhl9&h-d*
zXUnhVqeXXu3;AMkfGcaZn+#<m8I_V;iXWzzrDde$T{<tBzYATqp`;VJlR4n_?0PnY
z54QLt9`kj@xt7bor+n5P0E29id2c$~Brcm*#`s63x^|y*&fakK8O7eG<M4%+nFniZ
z*zn(Y&4%7)borWzlHB<=laY$L-r;X7829=T_rHmc*bFppX+s<yvAb06951}yz)@DA
z9<FOv3yblY$^hYAZE>+$P#2ewEuZhXC^A9#t1B5K2yqA)1ge(y_I3?h7njx@LRV0N
zd5f!)3@xoilPpGM9cc?qi--H^K9$+G?rEJWw0(?itnKuT^gd8DgWm~inIvlQMQZ7z
zQhJ!lM(oKppOa9PBNCMpe=5h!E2pq3NB>q%a#W7HS5AXjj)+)JkXnuzTTY=_j;dHr
zvNS^e!j<@Aj@9<Cl6<+6jk^+;wUSmQWe}=$!Z=ZVF?4m&n|(33b<y8-G5m$o<A*cQ
zi_@2fGqj7-8;3JEi_>3+Gklxb6P7tJn%U=QOqZa@9;Kc+WqCxG!k9XomN^Jv;sAHd
zkaN$L1KkoEq1H2~*;k}Fbg0>zq&c{#+25o&{J7B*wJ|Wc(O0!Gbh*)+wK2H4(cif-
z{K?f5z%|g%)mOkZw9nO>z%@9})!)E1eBaR%(J?UI(O1zibWU{uyLCXlb%eWh$h~z8
z!gD~xbA-%u$jEaH-E~0Ob%fn@$k}xa?tMV!eT43P$m)Fz|CPz+we-=-$dIZ(H*%47
z`LytqPrY_o7p2jH+w4f$?2O%f{<KjRKphOO0V{hFGm*jgR`e7<gwJ|8i~r~)v@QDZ
zKhxQ9edtAd?cugP{(iX<mi4nHR(GyM{I~XL>($h%u25c}K0$c|{f`>d{I8W5{Qp{`
z;u^(eVpm0@qI=ha=jrR%ebO=Iv}$&Zr>s%Q9d}aan6^>PKh^cJ%LQk1&Zew28LN_i
z^DAbass=T6%PSTa%uiSzQJq8D%l{8;TKoUrY-S?53a(E$-=e$b@!mgozD_vWqN@we
z|Bo}QWPIVw{~yaPI6h%_kN*F<`CG030)I4)=;(s&#O!&yvAS)K8t;Pb6V|t=|GR7A
z#uXi&wR6Pzf8#Lk*Bj=s9lzdfc<qS$4;%AlG0VaBo4-zASR;xh=u_?K9#2pfb<=%-
SpmL}^|C{CHXC=u2fd30xD#Mci

diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/js/bootstrap.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/js/bootstrap.js
deleted file mode 100644
index 2c64257146c..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/js/bootstrap.js
+++ /dev/null
@@ -1,1999 +0,0 @@
-/**
-* bootstrap.js v3.0.0 by @fat and @mdo
-* Copyright 2013 Twitter Inc.
-* http://www.apache.org/licenses/LICENSE-2.0
-*/
-if (!jQuery) { throw new Error("Bootstrap requires jQuery") }
-
-/* ========================================================================
- * Bootstrap: transition.js v3.0.0
- * http://twbs.github.com/bootstrap/javascript.html#transitions
- * ========================================================================
- * Copyright 2013 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";
-
-  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
-  // ============================================================
-
-  function transitionEnd() {
-    var el = document.createElement('bootstrap')
-
-    var transEndEventNames = {
-      'WebkitTransition' : 'webkitTransitionEnd'
-    , 'MozTransition'    : 'transitionend'
-    , 'OTransition'      : 'oTransitionEnd otransitionend'
-    , 'transition'       : 'transitionend'
-    }
-
-    for (var name in transEndEventNames) {
-      if (el.style[name] !== undefined) {
-        return { end: transEndEventNames[name] }
-      }
-    }
-  }
-
-  // http://blog.alexmaccaw.com/css-transitions
-  $.fn.emulateTransitionEnd = function (duration) {
-    var called = false, $el = this
-    $(this).one($.support.transition.end, function () { called = true })
-    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
-    setTimeout(callback, duration)
-    return this
-  }
-
-  $(function () {
-    $.support.transition = transitionEnd()
-  })
-
-}(window.jQuery);
-
-/* ========================================================================
- * Bootstrap: alert.js v3.0.0
- * http://twbs.github.com/bootstrap/javascript.html#alerts
- * ========================================================================
- * Copyright 2013 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"]'
-  var Alert   = function (el) {
-    $(el).on('click', dismiss, this.close)
-  }
-
-  Alert.prototype.close = function (e) {
-    var $this    = $(this)
-    var selector = $this.attr('data-target')
-
-    if (!selector) {
-      selector = $this.attr('href')
-      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
-    }
-
-    var $parent = $(selector)
-
-    if (e) e.preventDefault()
-
-    if (!$parent.length) {
-      $parent = $this.hasClass('alert') ? $this : $this.parent()
-    }
-
-    $parent.trigger(e = $.Event('close.bs.alert'))
-
-    if (e.isDefaultPrevented()) return
-
-    $parent.removeClass('in')
-
-    function removeElement() {
-      $parent.trigger('closed.bs.alert').remove()
-    }
-
-    $.support.transition && $parent.hasClass('fade') ?
-      $parent
-        .one($.support.transition.end, removeElement)
-        .emulateTransitionEnd(150) :
-      removeElement()
-  }
-
-
-  // ALERT PLUGIN DEFINITION
-  // =======================
-
-  var old = $.fn.alert
-
-  $.fn.alert = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-      var data  = $this.data('bs.alert')
-
-      if (!data) $this.data('bs.alert', (data = new Alert(this)))
-      if (typeof option == 'string') data[option].call($this)
-    })
-  }
-
-  $.fn.alert.Constructor = Alert
-
-
-  // ALERT NO CONFLICT
-  // =================
-
-  $.fn.alert.noConflict = function () {
-    $.fn.alert = old
-    return this
-  }
-
-
-  // ALERT DATA-API
-  // ==============
-
-  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
-
-}(window.jQuery);
-
-/* ========================================================================
- * Bootstrap: button.js v3.0.0
- * http://twbs.github.com/bootstrap/javascript.html#buttons
- * ========================================================================
- * Copyright 2013 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({}, Button.DEFAULTS, options)
-  }
-
-  Button.DEFAULTS = {
-    loadingText: 'loading...'
-  }
-
-  Button.prototype.setState = function (state) {
-    var d    = 'disabled'
-    var $el  = this.$element
-    var val  = $el.is('input') ? 'val' : 'html'
-    var data = $el.data()
-
-    state = state + 'Text'
-
-    if (!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)
-  }
-
-  Button.prototype.toggle = function () {
-    var $parent = this.$element.closest('[data-toggle="buttons"]')
-
-    if ($parent.length) {
-      var $input = this.$element.find('input')
-        .prop('checked', !this.$element.hasClass('active'))
-        .trigger('change')
-      if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active')
-    }
-
-    this.$element.toggleClass('active')
-  }
-
-
-  // BUTTON PLUGIN DEFINITION
-  // ========================
-
-  var old = $.fn.button
-
-  $.fn.button = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.button')
-      var options = typeof option == 'object' && option
-
-      if (!data) $this.data('bs.button', (data = new Button(this, options)))
-
-      if (option == 'toggle') data.toggle()
-      else if (option) data.setState(option)
-    })
-  }
-
-  $.fn.button.Constructor = Button
-
-
-  // BUTTON NO CONFLICT
-  // ==================
-
-  $.fn.button.noConflict = function () {
-    $.fn.button = old
-    return this
-  }
-
-
-  // BUTTON DATA-API
-  // ===============
-
-  $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {
-    var $btn = $(e.target)
-    if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
-    $btn.button('toggle')
-    e.preventDefault()
-  })
-
-}(window.jQuery);
-
-/* ========================================================================
- * Bootstrap: carousel.js v3.0.0
- * http://twbs.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.$indicators = this.$element.find('.carousel-indicators')
-    this.options     = options
-    this.paused      =
-    this.sliding     =
-    this.interval    =
-    this.$active     =
-    this.$items      = null
-
-    this.options.pause == 'hover' && this.$element
-      .on('mouseenter', $.proxy(this.pause, this))
-      .on('mouseleave', $.proxy(this.cycle, this))
-  }
-
-  Carousel.DEFAULTS = {
-    interval: 5000
-  , pause: 'hover'
-  , wrap: true
-  }
-
-  Carousel.prototype.cycle =  function (e) {
-    e || (this.paused = false)
-
-    this.interval && clearInterval(this.interval)
-
-    this.options.interval
-      && !this.paused
-      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
-
-    return this
-  }
-
-  Carousel.prototype.getActiveIndex = function () {
-    this.$active = this.$element.find('.item.active')
-    this.$items  = this.$active.parent().children()
-
-    return this.$items.index(this.$active)
-  }
-
-  Carousel.prototype.to = function (pos) {
-    var that        = this
-    var activeIndex = this.getActiveIndex()
-
-    if (pos > (this.$items.length - 1) || pos < 0) return
-
-    if (this.sliding)       return this.$element.one('slid', function () { that.to(pos) })
-    if (activeIndex == pos) return this.pause().cycle()
-
-    return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
-  }
-
-  Carousel.prototype.pause = function (e) {
-    e || (this.paused = true)
-
-    if (this.$element.find('.next, .prev').length && $.support.transition.end) {
-      this.$element.trigger($.support.transition.end)
-      this.cycle(true)
-    }
-
-    this.interval = clearInterval(this.interval)
-
-    return this
-  }
-
-  Carousel.prototype.next = function () {
-    if (this.sliding) return
-    return this.slide('next')
-  }
-
-  Carousel.prototype.prev = function () {
-    if (this.sliding) return
-    return this.slide('prev')
-  }
-
-  Carousel.prototype.slide = function (type, next) {
-    var $active   = this.$element.find('.item.active')
-    var $next     = next || $active[type]()
-    var isCycling = this.interval
-    var direction = type == 'next' ? 'left' : 'right'
-    var fallback  = type == 'next' ? 'first' : 'last'
-    var that      = this
-
-    if (!$next.length) {
-      if (!this.options.wrap) return
-      $next = this.$element.find('.item')[fallback]()
-    }
-
-    this.sliding = true
-
-    isCycling && this.pause()
-
-    var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })
-
-    if ($next.hasClass('active')) return
-
-    if (this.$indicators.length) {
-      this.$indicators.find('.active').removeClass('active')
-      this.$element.one('slid', function () {
-        var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
-        $nextIndicator && $nextIndicator.addClass('active')
-      })
-    }
-
-    if ($.support.transition && this.$element.hasClass('slide')) {
-      this.$element.trigger(e)
-      if (e.isDefaultPrevented()) return
-      $next.addClass(type)
-      $next[0].offsetWidth // force reflow
-      $active.addClass(direction)
-      $next.addClass(direction)
-      $active
-        .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)
-        })
-        .emulateTransitionEnd(600)
-    } else {
-      this.$element.trigger(e)
-      if (e.isDefaultPrevented()) return
-      $active.removeClass('active')
-      $next.addClass('active')
-      this.sliding = false
-      this.$element.trigger('slid')
-    }
-
-    isCycling && this.cycle()
-
-    return this
-  }
-
-
-  // CAROUSEL PLUGIN DEFINITION
-  // ==========================
-
-  var old = $.fn.carousel
-
-  $.fn.carousel = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.carousel')
-      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
-      var action  = typeof option == 'string' ? option : options.slide
-
-      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
-      if (typeof option == 'number') data.to(option)
-      else if (action) data[action]()
-      else if (options.interval) data.pause().cycle()
-    })
-  }
-
-  $.fn.carousel.Constructor = Carousel
-
-
-  // CAROUSEL NO CONFLICT
-  // ====================
-
-  $.fn.carousel.noConflict = function () {
-    $.fn.carousel = old
-    return this
-  }
-
-
-  // CAROUSEL DATA-API
-  // =================
-
-  $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
-    var $this   = $(this), href
-    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
-    var options = $.extend({}, $target.data(), $this.data())
-    var slideIndex = $this.attr('data-slide-to')
-    if (slideIndex) options.interval = false
-
-    $target.carousel(options)
-
-    if (slideIndex = $this.attr('data-slide-to')) {
-      $target.data('bs.carousel').to(slideIndex)
-    }
-
-    e.preventDefault()
-  })
-
-  $(window).on('load', function () {
-    $('[data-ride="carousel"]').each(function () {
-      var $carousel = $(this)
-      $carousel.carousel($carousel.data())
-    })
-  })
-
-}(window.jQuery);
-
-/* ========================================================================
- * Bootstrap: collapse.js v3.0.0
- * http://twbs.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";
-
-  // COLLAPSE PUBLIC CLASS DEFINITION
-  // ================================
-
-  var Collapse = function (element, options) {
-    this.$element      = $(element)
-    this.options       = $.extend({}, Collapse.DEFAULTS, options)
-    this.transitioning = null
-
-    if (this.options.parent) this.$parent = $(this.options.parent)
-    if (this.options.toggle) this.toggle()
-  }
-
-  Collapse.DEFAULTS = {
-    toggle: true
-  }
-
-  Collapse.prototype.dimension = function () {
-    var hasWidth = this.$element.hasClass('width')
-    return hasWidth ? 'width' : 'height'
-  }
-
-  Collapse.prototype.show = function () {
-    if (this.transitioning || this.$element.hasClass('in')) return
-
-    var startEvent = $.Event('show.bs.collapse')
-    this.$element.trigger(startEvent)
-    if (startEvent.isDefaultPrevented()) return
-
-    var actives = this.$parent && this.$parent.find('> .panel > .in')
-
-    if (actives && actives.length) {
-      var hasData = actives.data('bs.collapse')
-      if (hasData && hasData.transitioning) return
-      actives.collapse('hide')
-      hasData || actives.data('bs.collapse', null)
-    }
-
-    var dimension = this.dimension()
-
-    this.$element
-      .removeClass('collapse')
-      .addClass('collapsing')
-      [dimension](0)
-
-    this.transitioning = 1
-
-    var complete = function () {
-      this.$element
-        .removeClass('collapsing')
-        .addClass('in')
-        [dimension]('auto')
-      this.transitioning = 0
-      this.$element.trigger('shown.bs.collapse')
-    }
-
-    if (!$.support.transition) return complete.call(this)
-
-    var scrollSize = $.camelCase(['scroll', dimension].join('-'))
-
-    this.$element
-      .one($.support.transition.end, $.proxy(complete, this))
-      .emulateTransitionEnd(350)
-      [dimension](this.$element[0][scrollSize])
-  }
-
-  Collapse.prototype.hide = function () {
-    if (this.transitioning || !this.$element.hasClass('in')) return
-
-    var startEvent = $.Event('hide.bs.collapse')
-    this.$element.trigger(startEvent)
-    if (startEvent.isDefaultPrevented()) return
-
-    var dimension = this.dimension()
-
-    this.$element
-      [dimension](this.$element[dimension]())
-      [0].offsetHeight
-
-    this.$element
-      .addClass('collapsing')
-      .removeClass('collapse')
-      .removeClass('in')
-
-    this.transitioning = 1
-
-    var complete = function () {
-      this.transitioning = 0
-      this.$element
-        .trigger('hidden.bs.collapse')
-        .removeClass('collapsing')
-        .addClass('collapse')
-    }
-
-    if (!$.support.transition) return complete.call(this)
-
-    this.$element
-      [dimension](0)
-      .one($.support.transition.end, $.proxy(complete, this))
-      .emulateTransitionEnd(350)
-  }
-
-  Collapse.prototype.toggle = function () {
-    this[this.$element.hasClass('in') ? 'hide' : 'show']()
-  }
-
-
-  // COLLAPSE PLUGIN DEFINITION
-  // ==========================
-
-  var old = $.fn.collapse
-
-  $.fn.collapse = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.collapse')
-      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
-
-      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.collapse.Constructor = Collapse
-
-
-  // COLLAPSE NO CONFLICT
-  // ====================
-
-  $.fn.collapse.noConflict = function () {
-    $.fn.collapse = old
-    return this
-  }
-
-
-  // COLLAPSE DATA-API
-  // =================
-
-  $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {
-    var $this   = $(this), href
-    var target  = $this.attr('data-target')
-        || e.preventDefault()
-        || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
-    var $target = $(target)
-    var data    = $target.data('bs.collapse')
-    var option  = data ? 'toggle' : $this.data()
-    var parent  = $this.attr('data-parent')
-    var $parent = parent && $(parent)
-
-    if (!data || !data.transitioning) {
-      if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed')
-      $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
-    }
-
-    $target.collapse(option)
-  })
-
-}(window.jQuery);
-
-/* ========================================================================
- * Bootstrap: dropdown.js v3.0.0
- * http://twbs.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 backdrop = '.dropdown-backdrop'
-  var toggle   = '[data-toggle=dropdown]'
-  var Dropdown = function (element) {
-    var $el = $(element).on('click.bs.dropdown', this.toggle)
-  }
-
-  Dropdown.prototype.toggle = function (e) {
-    var $this = $(this)
-
-    if ($this.is('.disabled, :disabled')) return
-
-    var $parent  = getParent($this)
-    var isActive = $parent.hasClass('open')
-
-    clearMenus()
-
-    if (!isActive) {
-      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
-        // if mobile we we use a backdrop because click events don't delegate
-        $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
-      }
-
-      $parent.trigger(e = $.Event('show.bs.dropdown'))
-
-      if (e.isDefaultPrevented()) return
-
-      $parent
-        .toggleClass('open')
-        .trigger('shown.bs.dropdown')
-
-      $this.focus()
-    }
-
-    return false
-  }
-
-  Dropdown.prototype.keydown = function (e) {
-    if (!/(38|40|27)/.test(e.keyCode)) return
-
-    var $this = $(this)
-
-    e.preventDefault()
-    e.stopPropagation()
-
-    if ($this.is('.disabled, :disabled')) return
-
-    var $parent  = getParent($this)
-    var isActive = $parent.hasClass('open')
-
-    if (!isActive || (isActive && e.keyCode == 27)) {
-      if (e.which == 27) $parent.find(toggle).focus()
-      return $this.click()
-    }
-
-    var $items = $('[role=menu] li:not(.divider):visible a', $parent)
-
-    if (!$items.length) return
-
-    var index = $items.index($items.filter(':focus'))
-
-    if (e.keyCode == 38 && index > 0)                 index--                        // up
-    if (e.keyCode == 40 && index < $items.length - 1) index++                        // down
-    if (!~index)                                      index=0
-
-    $items.eq(index).focus()
-  }
-
-  function clearMenus() {
-    $(backdrop).remove()
-    $(toggle).each(function (e) {
-      var $parent = getParent($(this))
-      if (!$parent.hasClass('open')) return
-      $parent.trigger(e = $.Event('hide.bs.dropdown'))
-      if (e.isDefaultPrevented()) return
-      $parent.removeClass('open').trigger('hidden.bs.dropdown')
-    })
-  }
-
-  function getParent($this) {
-    var selector = $this.attr('data-target')
-
-    if (!selector) {
-      selector = $this.attr('href')
-      selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
-    }
-
-    var $parent = selector && $(selector)
-
-    return $parent && $parent.length ? $parent : $this.parent()
-  }
-
-
-  // DROPDOWN PLUGIN DEFINITION
-  // ==========================
-
-  var old = $.fn.dropdown
-
-  $.fn.dropdown = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-      var 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
-
-
-  // DROPDOWN NO CONFLICT
-  // ====================
-
-  $.fn.dropdown.noConflict = function () {
-    $.fn.dropdown = old
-    return this
-  }
-
-
-  // APPLY TO STANDARD DROPDOWN ELEMENTS
-  // ===================================
-
-  $(document)
-    .on('click.bs.dropdown.data-api', clearMenus)
-    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
-    .on('click.bs.dropdown.data-api'  , toggle, Dropdown.prototype.toggle)
-    .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
-
-}(window.jQuery);
-
-/* ========================================================================
- * Bootstrap: modal.js v3.0.0
- * http://twbs.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 (element, options) {
-    this.options   = options
-    this.$element  = $(element)
-    this.$backdrop =
-    this.isShown   = null
-
-    if (this.options.remote) this.$element.load(this.options.remote)
-  }
-
-  Modal.DEFAULTS = {
-      backdrop: true
-    , keyboard: true
-    , show: true
-  }
-
-  Modal.prototype.toggle = function (_relatedTarget) {
-    return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)
-  }
-
-  Modal.prototype.show = function (_relatedTarget) {
-    var that = this
-    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
-
-    this.$element.trigger(e)
-
-    if (this.isShown || e.isDefaultPrevented()) return
-
-    this.isShown = true
-
-    this.escape()
-
-    this.$element.on('click.dismiss.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
-
-    this.backdrop(function () {
-      var transition = $.support.transition && that.$element.hasClass('fade')
-
-      if (!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')
-        .attr('aria-hidden', false)
-
-      that.enforceFocus()
-
-      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
-
-      transition ?
-        that.$element.find('.modal-dialog') // wait for modal to slide in
-          .one($.support.transition.end, function () {
-            that.$element.focus().trigger(e)
-          })
-          .emulateTransitionEnd(300) :
-        that.$element.focus().trigger(e)
-    })
-  }
-
-  Modal.prototype.hide = function (e) {
-    if (e) e.preventDefault()
-
-    e = $.Event('hide.bs.modal')
-
-    this.$element.trigger(e)
-
-    if (!this.isShown || e.isDefaultPrevented()) return
-
-    this.isShown = false
-
-    this.escape()
-
-    $(document).off('focusin.bs.modal')
-
-    this.$element
-      .removeClass('in')
-      .attr('aria-hidden', true)
-      .off('click.dismiss.modal')
-
-    $.support.transition && this.$element.hasClass('fade') ?
-      this.$element
-        .one($.support.transition.end, $.proxy(this.hideModal, this))
-        .emulateTransitionEnd(300) :
-      this.hideModal()
-  }
-
-  Modal.prototype.enforceFocus = function () {
-    $(document)
-      .off('focusin.bs.modal') // guard against infinite focus loop
-      .on('focusin.bs.modal', $.proxy(function (e) {
-        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
-          this.$element.focus()
-        }
-      }, this))
-  }
-
-  Modal.prototype.escape = function () {
-    if (this.isShown && this.options.keyboard) {
-      this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {
-        e.which == 27 && this.hide()
-      }, this))
-    } else if (!this.isShown) {
-      this.$element.off('keyup.dismiss.bs.modal')
-    }
-  }
-
-  Modal.prototype.hideModal = function () {
-    var that = this
-    this.$element.hide()
-    this.backdrop(function () {
-      that.removeBackdrop()
-      that.$element.trigger('hidden.bs.modal')
-    })
-  }
-
-  Modal.prototype.removeBackdrop = function () {
-    this.$backdrop && this.$backdrop.remove()
-    this.$backdrop = null
-  }
-
-  Modal.prototype.backdrop = function (callback) {
-    var that    = this
-    var 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)
-
-      this.$element.on('click.dismiss.modal', $.proxy(function (e) {
-        if (e.target !== e.currentTarget) return
-        this.options.backdrop == 'static'
-          ? this.$element[0].focus.call(this.$element[0])
-          : this.hide.call(this)
-      }, this))
-
-      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
-
-      this.$backdrop.addClass('in')
-
-      if (!callback) return
-
-      doAnimate ?
-        this.$backdrop
-          .one($.support.transition.end, callback)
-          .emulateTransitionEnd(150) :
-        callback()
-
-    } else if (!this.isShown && this.$backdrop) {
-      this.$backdrop.removeClass('in')
-
-      $.support.transition && this.$element.hasClass('fade')?
-        this.$backdrop
-          .one($.support.transition.end, callback)
-          .emulateTransitionEnd(150) :
-        callback()
-
-    } else if (callback) {
-      callback()
-    }
-  }
-
-
-  // MODAL PLUGIN DEFINITION
-  // =======================
-
-  var old = $.fn.modal
-
-  $.fn.modal = function (option, _relatedTarget) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.modal')
-      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
-
-      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
-      if (typeof option == 'string') data[option](_relatedTarget)
-      else if (options.show) data.show(_relatedTarget)
-    })
-  }
-
-  $.fn.modal.Constructor = Modal
-
-
-  // MODAL NO CONFLICT
-  // =================
-
-  $.fn.modal.noConflict = function () {
-    $.fn.modal = old
-    return this
-  }
-
-
-  // MODAL DATA-API
-  // ==============
-
-  $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
-    var $this   = $(this)
-    var href    = $this.attr('href')
-    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
-    var option  = $target.data('modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
-
-    e.preventDefault()
-
-    $target
-      .modal(option, this)
-      .one('hide', function () {
-        $this.is(':visible') && $this.focus()
-      })
-  })
-
-  $(document)
-    .on('show.bs.modal',  '.modal', function () { $(document.body).addClass('modal-open') })
-    .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })
-
-}(window.jQuery);
-
-/* ========================================================================
- * Bootstrap: tooltip.js v3.0.0
- * http://twbs.github.com/bootstrap/javascript.html#tooltip
- * 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.type       =
-    this.options    =
-    this.enabled    =
-    this.timeout    =
-    this.hoverState =
-    this.$element   = null
-
-    this.init('tooltip', element, options)
-  }
-
-  Tooltip.DEFAULTS = {
-    animation: true
-  , placement: 'top'
-  , selector: false
-  , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
-  , trigger: 'hover focus'
-  , title: ''
-  , delay: 0
-  , html: false
-  , container: false
-  }
-
-  Tooltip.prototype.init = function (type, element, options) {
-    this.enabled  = true
-    this.type     = type
-    this.$element = $(element)
-    this.options  = this.getOptions(options)
-
-    var triggers = this.options.trigger.split(' ')
-
-    for (var i = triggers.length; i--;) {
-      var trigger = triggers[i]
-
-      if (trigger == 'click') {
-        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
-      } else if (trigger != 'manual') {
-        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focus'
-        var eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'
-
-        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
-        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
-      }
-    }
-
-    this.options.selector ?
-      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
-      this.fixTitle()
-  }
-
-  Tooltip.prototype.getDefaults = function () {
-    return Tooltip.DEFAULTS
-  }
-
-  Tooltip.prototype.getOptions = function (options) {
-    options = $.extend({}, this.getDefaults(), this.$element.data(), options)
-
-    if (options.delay && typeof options.delay == 'number') {
-      options.delay = {
-        show: options.delay
-      , hide: options.delay
-      }
-    }
-
-    return options
-  }
-
-  Tooltip.prototype.getDelegateOptions = function () {
-    var options  = {}
-    var defaults = this.getDefaults()
-
-    this._options && $.each(this._options, function (key, value) {
-      if (defaults[key] != value) options[key] = value
-    })
-
-    return options
-  }
-
-  Tooltip.prototype.enter = function (obj) {
-    var self = obj instanceof this.constructor ?
-      obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
-
-    clearTimeout(self.timeout)
-
-    self.hoverState = 'in'
-
-    if (!self.options.delay || !self.options.delay.show) return self.show()
-
-    self.timeout = setTimeout(function () {
-      if (self.hoverState == 'in') self.show()
-    }, self.options.delay.show)
-  }
-
-  Tooltip.prototype.leave = function (obj) {
-    var self = obj instanceof this.constructor ?
-      obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
-
-    clearTimeout(self.timeout)
-
-    self.hoverState = 'out'
-
-    if (!self.options.delay || !self.options.delay.hide) return self.hide()
-
-    self.timeout = setTimeout(function () {
-      if (self.hoverState == 'out') self.hide()
-    }, self.options.delay.hide)
-  }
-
-  Tooltip.prototype.show = function () {
-    var e = $.Event('show.bs.'+ this.type)
-
-    if (this.hasContent() && this.enabled) {
-      this.$element.trigger(e)
-
-      if (e.isDefaultPrevented()) return
-
-      var $tip = this.tip()
-
-      this.setContent()
-
-      if (this.options.animation) $tip.addClass('fade')
-
-      var placement = typeof this.options.placement == 'function' ?
-        this.options.placement.call(this, $tip[0], this.$element[0]) :
-        this.options.placement
-
-      var autoToken = /\s?auto?\s?/i
-      var autoPlace = autoToken.test(placement)
-      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
-
-      $tip
-        .detach()
-        .css({ top: 0, left: 0, display: 'block' })
-        .addClass(placement)
-
-      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
-
-      var pos          = this.getPosition()
-      var actualWidth  = $tip[0].offsetWidth
-      var actualHeight = $tip[0].offsetHeight
-
-      if (autoPlace) {
-        var $parent = this.$element.parent()
-
-        var orgPlacement = placement
-        var docScroll    = document.documentElement.scrollTop || document.body.scrollTop
-        var parentWidth  = this.options.container == 'body' ? window.innerWidth  : $parent.outerWidth()
-        var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()
-        var parentLeft   = this.options.container == 'body' ? 0 : $parent.offset().left
-
-        placement = placement == 'bottom' && pos.top   + pos.height  + actualHeight - docScroll > parentHeight  ? 'top'    :
-                    placement == 'top'    && pos.top   - docScroll   - actualHeight < 0                         ? 'bottom' :
-                    placement == 'right'  && pos.right + actualWidth > parentWidth                              ? 'left'   :
-                    placement == 'left'   && pos.left  - actualWidth < parentLeft                               ? 'right'  :
-                    placement
-
-        $tip
-          .removeClass(orgPlacement)
-          .addClass(placement)
-      }
-
-      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
-
-      this.applyPlacement(calculatedOffset, placement)
-      this.$element.trigger('shown.bs.' + this.type)
-    }
-  }
-
-  Tooltip.prototype.applyPlacement = function(offset, placement) {
-    var replace
-    var $tip   = this.tip()
-    var width  = $tip[0].offsetWidth
-    var height = $tip[0].offsetHeight
-
-    // manually read margins because getBoundingClientRect includes difference
-    var marginTop = parseInt($tip.css('margin-top'), 10)
-    var marginLeft = parseInt($tip.css('margin-left'), 10)
-
-    // we must check for NaN for ie 8/9
-    if (isNaN(marginTop))  marginTop  = 0
-    if (isNaN(marginLeft)) marginLeft = 0
-
-    offset.top  = offset.top  + marginTop
-    offset.left = offset.left + marginLeft
-
-    $tip
-      .offset(offset)
-      .addClass('in')
-
-    // check to see if placing tip in new offset caused the tip to resize itself
-    var actualWidth  = $tip[0].offsetWidth
-    var actualHeight = $tip[0].offsetHeight
-
-    if (placement == 'top' && actualHeight != height) {
-      replace = true
-      offset.top = offset.top + height - actualHeight
-    }
-
-    if (/bottom|top/.test(placement)) {
-      var delta = 0
-
-      if (offset.left < 0) {
-        delta       = offset.left * -2
-        offset.left = 0
-
-        $tip.offset(offset)
-
-        actualWidth  = $tip[0].offsetWidth
-        actualHeight = $tip[0].offsetHeight
-      }
-
-      this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
-    } else {
-      this.replaceArrow(actualHeight - height, actualHeight, 'top')
-    }
-
-    if (replace) $tip.offset(offset)
-  }
-
-  Tooltip.prototype.replaceArrow = function(delta, dimension, position) {
-    this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + "%") : '')
-  }
-
-  Tooltip.prototype.setContent = function () {
-    var $tip  = this.tip()
-    var title = this.getTitle()
-
-    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
-    $tip.removeClass('fade in top bottom left right')
-  }
-
-  Tooltip.prototype.hide = function () {
-    var that = this
-    var $tip = this.tip()
-    var e    = $.Event('hide.bs.' + this.type)
-
-    function complete() {
-      if (that.hoverState != 'in') $tip.detach()
-    }
-
-    this.$element.trigger(e)
-
-    if (e.isDefaultPrevented()) return
-
-    $tip.removeClass('in')
-
-    $.support.transition && this.$tip.hasClass('fade') ?
-      $tip
-        .one($.support.transition.end, complete)
-        .emulateTransitionEnd(150) :
-      complete()
-
-    this.$element.trigger('hidden.bs.' + this.type)
-
-    return this
-  }
-
-  Tooltip.prototype.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') || '').attr('title', '')
-    }
-  }
-
-  Tooltip.prototype.hasContent = function () {
-    return this.getTitle()
-  }
-
-  Tooltip.prototype.getPosition = function () {
-    var el = this.$element[0]
-    return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
-      width: el.offsetWidth
-    , height: el.offsetHeight
-    }, this.$element.offset())
-  }
-
-  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
-    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2  } :
-           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2  } :
-           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
-        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width   }
-  }
-
-  Tooltip.prototype.getTitle = function () {
-    var title
-    var $e = this.$element
-    var o  = this.options
-
-    title = $e.attr('data-original-title')
-      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
-
-    return title
-  }
-
-  Tooltip.prototype.tip = function () {
-    return this.$tip = this.$tip || $(this.options.template)
-  }
-
-  Tooltip.prototype.arrow = function () {
-    return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')
-  }
-
-  Tooltip.prototype.validate = function () {
-    if (!this.$element[0].parentNode) {
-      this.hide()
-      this.$element = null
-      this.options  = null
-    }
-  }
-
-  Tooltip.prototype.enable = function () {
-    this.enabled = true
-  }
-
-  Tooltip.prototype.disable = function () {
-    this.enabled = false
-  }
-
-  Tooltip.prototype.toggleEnabled = function () {
-    this.enabled = !this.enabled
-  }
-
-  Tooltip.prototype.toggle = function (e) {
-    var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this
-    self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
-  }
-
-  Tooltip.prototype.destroy = function () {
-    this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
-  }
-
-
-  // TOOLTIP PLUGIN DEFINITION
-  // =========================
-
-  var old = $.fn.tooltip
-
-  $.fn.tooltip = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.tooltip')
-      var options = typeof option == 'object' && option
-
-      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.tooltip.Constructor = Tooltip
-
-
-  // TOOLTIP NO CONFLICT
-  // ===================
-
-  $.fn.tooltip.noConflict = function () {
-    $.fn.tooltip = old
-    return this
-  }
-
-}(window.jQuery);
-
-/* ========================================================================
- * Bootstrap: popover.js v3.0.0
- * http://twbs.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";
-
-  // POPOVER PUBLIC CLASS DEFINITION
-  // ===============================
-
-  var Popover = function (element, options) {
-    this.init('popover', element, options)
-  }
-
-  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
-
-  Popover.DEFAULTS = $.extend({} , $.fn.tooltip.Constructor.DEFAULTS, {
-    placement: 'right'
-  , trigger: 'click'
-  , content: ''
-  , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
-  })
-
-
-  // NOTE: POPOVER EXTENDS tooltip.js
-  // ================================
-
-  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
-
-  Popover.prototype.constructor = Popover
-
-  Popover.prototype.getDefaults = function () {
-    return Popover.DEFAULTS
-  }
-
-  Popover.prototype.setContent = function () {
-    var $tip    = this.tip()
-    var title   = this.getTitle()
-    var content = this.getContent()
-
-    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
-    $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)
-
-    $tip.removeClass('fade top bottom left right in')
-
-    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
-    // this manually by checking the contents.
-    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
-  }
-
-  Popover.prototype.hasContent = function () {
-    return this.getTitle() || this.getContent()
-  }
-
-  Popover.prototype.getContent = function () {
-    var $e = this.$element
-    var o  = this.options
-
-    return $e.attr('data-content')
-      || (typeof o.content == 'function' ?
-            o.content.call($e[0]) :
-            o.content)
-  }
-
-  Popover.prototype.arrow = function () {
-    return this.$arrow = this.$arrow || this.tip().find('.arrow')
-  }
-
-  Popover.prototype.tip = function () {
-    if (!this.$tip) this.$tip = $(this.options.template)
-    return this.$tip
-  }
-
-
-  // POPOVER PLUGIN DEFINITION
-  // =========================
-
-  var old = $.fn.popover
-
-  $.fn.popover = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.popover')
-      var options = typeof option == 'object' && option
-
-      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.popover.Constructor = Popover
-
-
-  // POPOVER NO CONFLICT
-  // ===================
-
-  $.fn.popover.noConflict = function () {
-    $.fn.popover = old
-    return this
-  }
-
-}(window.jQuery);
-
-/* ========================================================================
- * Bootstrap: scrollspy.js v3.0.0
- * http://twbs.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 href
-    var process  = $.proxy(this.process, this)
-
-    this.$element       = $(element).is('body') ? $(window) : $(element)
-    this.$body          = $('body')
-    this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)
-    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)
-    this.selector       = (this.options.target
-      || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
-      || '') + ' .nav li > a'
-    this.offsets        = $([])
-    this.targets        = $([])
-    this.activeTarget   = null
-
-    this.refresh()
-    this.process()
-  }
-
-  ScrollSpy.DEFAULTS = {
-    offset: 10
-  }
-
-  ScrollSpy.prototype.refresh = function () {
-    var offsetMethod = this.$element[0] == window ? 'offset' : 'position'
-
-    this.offsets = $([])
-    this.targets = $([])
-
-    var self     = this
-    var $targets = this.$body
-      .find(this.selector)
-      .map(function () {
-        var $el   = $(this)
-        var href  = $el.data('target') || $el.attr('href')
-        var $href = /^#\w/.test(href) && $(href)
-
-        return ($href
-          && $href.length
-          && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null
-      })
-      .sort(function (a, b) { return a[0] - b[0] })
-      .each(function () {
-        self.offsets.push(this[0])
-        self.targets.push(this[1])
-      })
-  }
-
-  ScrollSpy.prototype.process = function () {
-    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset
-    var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
-    var maxScroll    = scrollHeight - this.$scrollElement.height()
-    var offsets      = this.offsets
-    var targets      = this.targets
-    var activeTarget = this.activeTarget
-    var i
-
-    if (scrollTop >= maxScroll) {
-      return activeTarget != (i = targets.last()[0]) && this.activate(i)
-    }
-
-    for (i = offsets.length; i--;) {
-      activeTarget != targets[i]
-        && scrollTop >= offsets[i]
-        && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
-        && this.activate( targets[i] )
-    }
-  }
-
-  ScrollSpy.prototype.activate = function (target) {
-    this.activeTarget = target
-
-    $(this.selector)
-      .parents('.active')
-      .removeClass('active')
-
-    var selector = this.selector
-      + '[data-target="' + target + '"],'
-      + this.selector + '[href="' + target + '"]'
-
-    var active = $(selector)
-      .parents('li')
-      .addClass('active')
-
-    if (active.parent('.dropdown-menu').length)  {
-      active = active
-        .closest('li.dropdown')
-        .addClass('active')
-    }
-
-    active.trigger('activate')
-  }
-
-
-  // SCROLLSPY PLUGIN DEFINITION
-  // ===========================
-
-  var old = $.fn.scrollspy
-
-  $.fn.scrollspy = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.scrollspy')
-      var options = typeof option == 'object' && option
-
-      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.scrollspy.Constructor = ScrollSpy
-
-
-  // SCROLLSPY NO CONFLICT
-  // =====================
-
-  $.fn.scrollspy.noConflict = function () {
-    $.fn.scrollspy = old
-    return this
-  }
-
-
-  // SCROLLSPY DATA-API
-  // ==================
-
-  $(window).on('load', function () {
-    $('[data-spy="scroll"]').each(function () {
-      var $spy = $(this)
-      $spy.scrollspy($spy.data())
-    })
-  })
-
-}(window.jQuery);
-
-/* ========================================================================
- * Bootstrap: tab.js v3.0.0
- * http://twbs.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.show = function () {
-    var $this    = this.element
-    var $ul      = $this.closest('ul:not(.dropdown-menu)')
-    var selector = $this.attr('data-target')
-
-    if (!selector) {
-      selector = $this.attr('href')
-      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
-    }
-
-    if ($this.parent('li').hasClass('active')) return
-
-    var previous = $ul.find('.active:last a')[0]
-    var e        = $.Event('show.bs.tab', {
-      relatedTarget: previous
-    })
-
-    $this.trigger(e)
-
-    if (e.isDefaultPrevented()) return
-
-    var $target = $(selector)
-
-    this.activate($this.parent('li'), $ul)
-    this.activate($target, $target.parent(), function () {
-      $this.trigger({
-        type: 'shown.bs.tab'
-      , relatedTarget: previous
-      })
-    })
-  }
-
-  Tab.prototype.activate = function (element, container, callback) {
-    var $active    = container.find('> .active')
-    var 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)
-        .emulateTransitionEnd(150) :
-      next()
-
-    $active.removeClass('in')
-  }
-
-
-  // TAB PLUGIN DEFINITION
-  // =====================
-
-  var old = $.fn.tab
-
-  $.fn.tab = function ( option ) {
-    return this.each(function () {
-      var $this = $(this)
-      var data  = $this.data('bs.tab')
-
-      if (!data) $this.data('bs.tab', (data = new Tab(this)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.tab.Constructor = Tab
-
-
-  // TAB NO CONFLICT
-  // ===============
-
-  $.fn.tab.noConflict = function () {
-    $.fn.tab = old
-    return this
-  }
-
-
-  // TAB DATA-API
-  // ============
-
-  $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
-    e.preventDefault()
-    $(this).tab('show')
-  })
-
-}(window.jQuery);
-
-/* ========================================================================
- * Bootstrap: affix.js v3.0.0
- * http://twbs.github.com/bootstrap/javascript.html#affix
- * ========================================================================
- * 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";
-
-  // AFFIX CLASS DEFINITION
-  // ======================
-
-  var Affix = function (element, options) {
-    this.options = $.extend({}, Affix.DEFAULTS, options)
-    this.$window = $(window)
-      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
-      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))
-
-    this.$element = $(element)
-    this.affixed  =
-    this.unpin    = null
-
-    this.checkPosition()
-  }
-
-  Affix.RESET = 'affix affix-top affix-bottom'
-
-  Affix.DEFAULTS = {
-    offset: 0
-  }
-
-  Affix.prototype.checkPositionWithEventLoop = function () {
-    setTimeout($.proxy(this.checkPosition, this), 1)
-  }
-
-  Affix.prototype.checkPosition = function () {
-    if (!this.$element.is(':visible')) return
-
-    var scrollHeight = $(document).height()
-    var scrollTop    = this.$window.scrollTop()
-    var position     = this.$element.offset()
-    var offset       = this.options.offset
-    var offsetTop    = offset.top
-    var offsetBottom = offset.bottom
-
-    if (typeof offset != 'object')         offsetBottom = offsetTop = offset
-    if (typeof offsetTop == 'function')    offsetTop    = offset.top()
-    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()
-
-    var affix = this.unpin   != null && (scrollTop + this.unpin <= position.top) ? false :
-                offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :
-                offsetTop    != null && (scrollTop <= offsetTop) ? 'top' : false
-
-    if (this.affixed === affix) return
-    if (this.unpin) this.$element.css('top', '')
-
-    this.affixed = affix
-    this.unpin   = affix == 'bottom' ? position.top - scrollTop : null
-
-    this.$element.removeClass(Affix.RESET).addClass('affix' + (affix ? '-' + affix : ''))
-
-    if (affix == 'bottom') {
-      this.$element.offset({ top: document.body.offsetHeight - offsetBottom - this.$element.height() })
-    }
-  }
-
-
-  // AFFIX PLUGIN DEFINITION
-  // =======================
-
-  var old = $.fn.affix
-
-  $.fn.affix = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.affix')
-      var options = typeof option == 'object' && option
-
-      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.affix.Constructor = Affix
-
-
-  // AFFIX NO CONFLICT
-  // =================
-
-  $.fn.affix.noConflict = function () {
-    $.fn.affix = old
-    return this
-  }
-
-
-  // AFFIX DATA-API
-  // ==============
-
-  $(window).on('load', function () {
-    $('[data-spy="affix"]').each(function () {
-      var $spy = $(this)
-      var data = $spy.data()
-
-      data.offset = data.offset || {}
-
-      if (data.offsetBottom) data.offset.bottom = data.offsetBottom
-      if (data.offsetTop)    data.offset.top    = data.offsetTop
-
-      $spy.affix(data)
-    })
-  })
-
-}(window.jQuery);
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/js/bootstrap.min.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/js/bootstrap.min.js
deleted file mode 100644
index 1765631f41f..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/bootstrap3/js/bootstrap.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
-* bootstrap.js v3.0.0 by @fat and @mdo
-* Copyright 2013 Twitter Inc.
-* http://www.apache.org/licenses/LICENSE-2.0
-*/
-if(!jQuery)throw new Error("Bootstrap requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]}}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(window.jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(window.jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d)};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.is("input")?"val":"html",e=c.data();a+="Text",e.resetText||c.data("resetText",c[d]()),c[d](e[a]||this.options[a]),setTimeout(function(){"loadingText"==a?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.closest('[data-toggle="buttons"]');if(a.length){var b=this.$element.find("input").prop("checked",!this.$element.hasClass("active")).trigger("change");"radio"===b.prop("type")&&a.find(".active").removeClass("active")}this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition.end&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}this.sliding=!0,f&&this.pause();var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});if(!e.hasClass("active")){if(this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(j),j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid")},0)}).emulateTransitionEnd(600)}else{if(this.$element.trigger(j),j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return f&&this.cycle(),this}};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?(this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350),void 0):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(window.jQuery),+function(a){"use strict";function b(){a(d).remove(),a(e).each(function(b){var d=c(a(this));d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown")),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown"))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){if("ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b),f.trigger(d=a.Event("show.bs.dropdown")),d.isDefaultPrevented())return;f.toggleClass("open").trigger("shown.bs.dropdown"),e.focus()}return!1}},f.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var f=c(d),g=f.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&f.find(e).focus(),d.click();var h=a("[role=menu] li:not(.divider):visible a",f);if(h.length){var i=h.index(h.filter(":focus"));38==b.keyCode&&i>0&&i--,40==b.keyCode&&i<h.length-1&&i++,~i||(i=0),h.eq(i).focus()}}}};var g=a.fn.dropdown;a.fn.dropdown=function(b){return this.each(function(){var c=a(this),d=c.data("dropdown");d||c.data("dropdown",d=new f(this)),"string"==typeof b&&d[b].call(c)})},a.fn.dropdown.Constructor=f,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=g,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",e,f.prototype.toggle).on("keydown.bs.dropdown.data-api",e+", [role=menu]",f.prototype.keydown)}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=c,this.$element=a(b),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.load(this.options.remote)};b.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},b.prototype.toggle=function(a){return this[this.isShown?"hide":"show"](a)},b.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.escape(),this.$element.on("click.dismiss.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(document.body),c.$element.show(),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one(a.support.transition.end,function(){c.$element.focus().trigger(e)}).emulateTransitionEnd(300):c.$element.focus().trigger(e)}))},b.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one(a.support.transition.end,a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},b.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.focus()},this))},b.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},b.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.removeBackdrop(),a.$element.trigger("hidden.bs.modal")})},b.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},b.prototype.backdrop=function(b){var c=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var d=a.support.transition&&c;if(this.$backdrop=a('<div class="modal-backdrop '+c+'" />').appendTo(document.body),this.$element.on("click.dismiss.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),d&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;d?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()):b&&b()};var c=a.fn.modal;a.fn.modal=function(c,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},b.DEFAULTS,e.data(),"object"==typeof c&&c);f||e.data("bs.modal",f=new b(this,g)),"string"==typeof c?f[c](d):g.show&&f.show(d)})},a.fn.modal.Constructor=b,a.fn.modal.noConflict=function(){return a.fn.modal=c,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());b.preventDefault(),e.modal(f,this).one("hide",function(){c.is(":visible")&&c.focus()})}),a(document).on("show.bs.modal",".modal",function(){a(document.body).addClass("modal-open")}).on("hidden.bs.modal",".modal",function(){a(document.body).removeClass("modal-open")})}(window.jQuery),+function(a){"use strict";var b=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};b.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},b.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focus",i="hover"==g?"mouseleave":"blur";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},b.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},b.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show),void 0):c.show()},b.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide),void 0):c.hide()},b.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){if(this.$element.trigger(b),b.isDefaultPrevented())return;var c=this.tip();this.setContent(),this.options.animation&&c.addClass("fade");var d="function"==typeof this.options.placement?this.options.placement.call(this,c[0],this.$element[0]):this.options.placement,e=/\s?auto?\s?/i,f=e.test(d);f&&(d=d.replace(e,"")||"top"),c.detach().css({top:0,left:0,display:"block"}).addClass(d),this.options.container?c.appendTo(this.options.container):c.insertAfter(this.$element);var g=this.getPosition(),h=c[0].offsetWidth,i=c[0].offsetHeight;if(f){var j=this.$element.parent(),k=d,l=document.documentElement.scrollTop||document.body.scrollTop,m="body"==this.options.container?window.innerWidth:j.outerWidth(),n="body"==this.options.container?window.innerHeight:j.outerHeight(),o="body"==this.options.container?0:j.offset().left;d="bottom"==d&&g.top+g.height+i-l>n?"top":"top"==d&&g.top-l-i<0?"bottom":"right"==d&&g.right+h>m?"left":"left"==d&&g.left-h<o?"right":d,c.removeClass(k).addClass(d)}var p=this.getCalculatedOffset(d,g,h,i);this.applyPlacement(p,d),this.$element.trigger("shown.bs."+this.type)}},b.prototype.applyPlacement=function(a,b){var c,d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),a.top=a.top+g,a.left=a.left+h,d.offset(a).addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;if("top"==b&&j!=f&&(c=!0,a.top=a.top+f-j),/bottom|top/.test(b)){var k=0;a.left<0&&(k=-2*a.left,a.left=0,d.offset(a),i=d[0].offsetWidth,j=d[0].offsetHeight),this.replaceArrow(k-e+i,i,"left")}else this.replaceArrow(j-f,j,"top");c&&d.offset(a)},b.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},b.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach()}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,b).emulateTransitionEnd(150):b(),this.$element.trigger("hidden.bs."+this.type),this)},b.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},b.prototype.hasContent=function(){return this.getTitle()},b.prototype.getPosition=function(){var b=this.$element[0];return a.extend({},"function"==typeof b.getBoundingClientRect?b.getBoundingClientRect():{width:b.offsetWidth,height:b.offsetHeight},this.$element.offset())},b.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},b.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},b.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},b.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},b.prototype.enable=function(){this.enabled=!0},b.prototype.disable=function(){this.enabled=!1},b.prototype.toggleEnabled=function(){this.enabled=!this.enabled},b.prototype.toggle=function(b){var c=b?a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;c.tip().hasClass("in")?c.leave(c):c.enter(c)},b.prototype.destroy=function(){this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var c=a.fn.tooltip;a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof c&&c;e||d.data("bs.tooltip",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=c,this}}(window.jQuery),+function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");b.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"html":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(window.jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(c).is("body")?a(window):a(c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#\w/.test(e)&&a(e);return f&&f.length&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parents(".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.attr("data-target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(window.jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top()),"function"==typeof h&&(h=f.bottom());var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;this.affixed!==i&&(this.unpin&&this.$element.css("top",""),this.affixed=i,this.unpin="bottom"==i?e.top-d:null,this.$element.removeClass(b.RESET).addClass("affix"+(i?"-"+i:"")),"bottom"==i&&this.$element.offset({top:document.body.offsetHeight-h-this.$element.height()}))}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(window.jQuery);
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/button.css b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/button.css
deleted file mode 100644
index 520064cfe9e..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/button.css
+++ /dev/null
@@ -1,54 +0,0 @@
-button {
-  font: 14px "Trebuchet MS";
-  background-color: #222;
-  background-image: -moz-linear-gradient(top, rgba(255,255,255,.25), rgba(255,255,255,.11));
-  background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, rgba(255,255,255,.25)),color-stop(1, rgba(255,255,255,.11)));
-  background-image: -webkit-linear-gradient(rgba(255,255,255,.25), rgba(255,255,255,.11));
-  color: #fff;
-  text-rendering: optimizeLegibility;
-  text-shadow: 0 -1px 1px #222;
-  padding: 3px 5px 3px 5px;
-  border: 0;
-  border-radius: 0;
-  border-bottom: 1px solid #222;
-  margin.left: 5;
-  -moz-box-shadow: 0 1px 3px #999;
-  -webkit-box-shadow: 0 1px 3px #999;
-  box-shadow: 0 1px 3px #999;
-}
-
-button.first {
-  border-top-left-radius: 5px;
-  border-bottom-left-radius: 5px;
-}
-
-button.last {
-  border-top-right-radius: 5px;
-  border-bottom-right-radius: 5px;
-}
-
-button.active {
-  background-color: rgb(65,102,133);
-}
-
-button:hover {
-  background-color: grey;
-  cursor: pointer;
-}
-
-input {
-  font: 14px "Trebuchet MS";
-  background-image: -moz-linear-gradient(top, rgba(255,255,255,.25), rgba(255,255,255,.11));
-  background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, rgba(255,255,255,.25)),color-stop(1, rgba(255,255,255,.11)));
-  background-image: -webkit-linear-gradient(rgba(255,255,255,.5), rgba(255,255,255,.1));
-  color: #000;
-  text-rendering: optimizeLegibility;
-  padding: 3px 5px 3px 5px;
-  border: 0;
-  border-radius: 0;
-  margin: 0;
-  -moz-box-shadow: 0 1px 3px #999;
-  -webkit-box-shadow: 0 1px 3px #999;
-  box-shadow: 0 1px 3px #999;
-}
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/d3.v2.min.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/d3.v2.min.js
deleted file mode 100644
index 0b4ea58fdb3..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/d3.v2.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-(function(){function e(e,t){try{for(var n in t)Object.defineProperty(e.prototype,n,{value:t[n],enumerable:!1})}catch(r){e.prototype=t}}function t(e){var t=-1,n=e.length,r=[];while(++t<n)r.push(e[t]);return r}function n(e){return Array.prototype.slice.call(e)}function r(){}function i(e){return e}function s(){return this}function o(){return!0}function u(e){return typeof e=="function"?e:function(){return e}}function a(e,t,n){return function(){var r=n.apply(t,arguments);return arguments.length?e:r}}function f(e){return e!=null&&!isNaN(e)}function l(e){return e.length}function c(e){return e==null}function h(e){return e.trim().replace(/\s+/g," ")}function p(e){var t=1;while(e*t%1)t*=10;return t}function d(){}function v(e){function t(){var t=n,r=-1,i=t.length,s;while(++r<i)(s=t[r].on)&&s.apply(this,arguments);return e}var n=[],i=new r;return t.on=function(t,r){var s=i.get(t),o;return arguments.length<2?s&&s.on:(s&&(s.on=null,n=n.slice(0,o=n.indexOf(s)).concat(n.slice(o+1)),i.remove(t)),r&&n.push(i.set(t,{on:r})),e)},t}function m(e,t){return t-(e?1+Math.floor(Math.log(e+Math.pow(10,1+Math.floor(Math.log(e)/Math.LN10)-t))/Math.LN10):1)}function g(e){return e+""}function y(e){var t=e.lastIndexOf("."),n=t>=0?e.substring(t):(t=e.length,""),r=[];while(t>0)r.push(e.substring(t-=3,t+3));return r.reverse().join(",")+n}function b(e,t){var n=Math.pow(10,Math.abs(8-t)*3);return{scale:t>8?function(e){return e/n}:function(e){return e*n},symbol:e}}function w(e){return function(t){return t<=0?0:t>=1?1:e(t)}}function E(e){return function(t){return 1-e(1-t)}}function S(e){return function(t){return.5*(t<.5?e(2*t):2-e(2-2*t))}}function x(e){return e}function T(e){return function(t){return Math.pow(t,e)}}function N(e){return 1-Math.cos(e*Math.PI/2)}function C(e){return Math.pow(2,10*(e-1))}function k(e){return 1-Math.sqrt(1-e*e)}function L(e,t){var n;return arguments.length<2&&(t=.45),arguments.length<1?(e=1,n=t/4):n=t/(2*Math.PI)*Math.asin(1/e),function(r){return 1+e*Math.pow(2,10*-r)*Math.sin((r-n)*2*Math.PI/t)}}function A(e){return e||(e=1.70158),function(t){return t*t*((e+1)*t-e)}}function O(e){return e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375}function M(){d3.event.stopPropagation(),d3.event.preventDefault()}function _(){var e=d3.event,t;while(t=e.sourceEvent)e=t;return e}function D(e){var t=new d,n=0,r=arguments.length;while(++n<r)t[arguments[n]]=v(t);return t.of=function(n,r){return function(i){try{var s=i.sourceEvent=d3.event;i.target=e,d3.event=i,t[i.type].apply(n,r)}finally{d3.event=s}}},t}function P(e){var t=[e.a,e.b],n=[e.c,e.d],r=B(t),i=H(t,n),s=B(j(n,t,-i))||0;t[0]*n[1]<n[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-n[0],n[1]))*ls,this.translate=[e.e,e.f],this.scale=[r,s],this.skew=s?Math.atan2(i,s)*ls:0}function H(e,t){return e[0]*t[0]+e[1]*t[1]}function B(e){var t=Math.sqrt(H(e,e));return t&&(e[0]/=t,e[1]/=t),t}function j(e,t,n){return e[0]+=n*t[0],e[1]+=n*t[1],e}function F(e){return e=="transform"?d3.interpolateTransform:d3.interpolate}function I(e,t){return t=t-(e=+e)?1/(t-e):0,function(n){return(n-e)*t}}function q(e,t){return t=t-(e=+e)?1/(t-e):0,function(n){return Math.max(0,Math.min(1,(n-e)*t))}}function R(){}function U(e,t,n){return new z(e,t,n)}function z(e,t,n){this.r=e,this.g=t,this.b=n}function W(e){return e<16?"0"+Math.max(0,e).toString(16):Math.min(255,e).toString(16)}function X(e,t,n){var r=0,i=0,s=0,o,u,a;o=/([a-z]+)\((.*)\)/i.exec(e);if(o){u=o[2].split(",");switch(o[1]){case"hsl":return n(parseFloat(u[0]),parseFloat(u[1])/100,parseFloat(u[2])/100);case"rgb":return t(K(u[0]),K(u[1]),K(u[2]))}}return(a=ds.get(e))?t(a.r,a.g,a.b):(e!=null&&e.charAt(0)==="#"&&(e.length===4?(r=e.charAt(1),r+=r,i=e.charAt(2),i+=i,s=e.charAt(3),s+=s):e.length===7&&(r=e.substring(1,3),i=e.substring(3,5),s=e.substring(5,7)),r=parseInt(r,16),i=parseInt(i,16),s=parseInt(s,16)),t(r,i,s))}function V(e,t,n){var r=Math.min(e/=255,t/=255,n/=255),i=Math.max(e,t,n),s=i-r,o,u,a=(i+r)/2;return s?(u=a<.5?s/(i+r):s/(2-i-r),e==i?o=(t-n)/s+(t<n?6:0):t==i?o=(n-e)/s+2:o=(e-t)/s+4,o*=60):u=o=0,Q(o,u,a)}function $(e,t,n){e=J(e),t=J(t),n=J(n);var r=ut((.4124564*e+.3575761*t+.1804375*n)/ys),i=ut((.2126729*e+.7151522*t+.072175*n)/bs),s=ut((.0193339*e+.119192*t+.9503041*n)/ws);return nt(116*i-16,500*(r-i),200*(i-s))}function J(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function K(e){var t=parseFloat(e);return e.charAt(e.length-1)==="%"?Math.round(t*2.55):t}function Q(e,t,n){return new G(e,t,n)}function G(e,t,n){this.h=e,this.s=t,this.l=n}function Y(e,t,n){function r(e){return e>360?e-=360:e<0&&(e+=360),e<60?s+(o-s)*e/60:e<180?o:e<240?s+(o-s)*(240-e)/60:s}function i(e){return Math.round(r(e)*255)}var s,o;return e%=360,e<0&&(e+=360),t=t<0?0:t>1?1:t,n=n<0?0:n>1?1:n,o=n<=.5?n*(1+t):n+t-n*t,s=2*n-o,U(i(e+120),i(e),i(e-120))}function Z(e,t,n){return new et(e,t,n)}function et(e,t,n){this.h=e,this.c=t,this.l=n}function tt(e,t,n){return nt(n,Math.cos(e*=Math.PI/180)*t,Math.sin(e)*t)}function nt(e,t,n){return new rt(e,t,n)}function rt(e,t,n){this.l=e,this.a=t,this.b=n}function it(e,t,n){var r=(e+16)/116,i=r+t/500,s=r-n/200;return i=ot(i)*ys,r=ot(r)*bs,s=ot(s)*ws,U(at(3.2404542*i-1.5371385*r-.4985314*s),at(-0.969266*i+1.8760108*r+.041556*s),at(.0556434*i-.2040259*r+1.0572252*s))}function st(e,t,n){return Z(Math.atan2(n,t)/Math.PI*180,Math.sqrt(t*t+n*n),e)}function ot(e){return e>.206893034?e*e*e:(e-4/29)/7.787037}function ut(e){return e>.008856?Math.pow(e,1/3):7.787037*e+4/29}function at(e){return Math.round(255*(e<=.00304?12.92*e:1.055*Math.pow(e,1/2.4)-.055))}function ft(e){return Qi(e,ks),e}function lt(e){return function(){return Ss(e,this)}}function ct(e){return function(){return xs(e,this)}}function ht(e,t){function n(){this.removeAttribute(e)}function r(){this.removeAttributeNS(e.space,e.local)}function i(){this.setAttribute(e,t)}function s(){this.setAttributeNS(e.space,e.local,t)}function o(){var n=t.apply(this,arguments);n==null?this.removeAttribute(e):this.setAttribute(e,n)}function u(){var n=t.apply(this,arguments);n==null?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,n)}return e=d3.ns.qualify(e),t==null?e.local?r:n:typeof t=="function"?e.local?u:o:e.local?s:i}function pt(e){return new RegExp("(?:^|\\s+)"+d3.requote(e)+"(?:\\s+|$)","g")}function dt(e,t){function n(){var n=-1;while(++n<i)e[n](this,t)}function r(){var n=-1,r=t.apply(this,arguments);while(++n<i)e[n](this,r)}e=e.trim().split(/\s+/).map(vt);var i=e.length;return typeof t=="function"?r:n}function vt(e){var t=pt(e);return function(n,r){if(i=n.classList)return r?i.add(e):i.remove(e);var i=n.className,s=i.baseVal!=null,o=s?i.baseVal:i;r?(t.lastIndex=0,t.test(o)||(o=h(o+" "+e),s?i.baseVal=o:n.className=o)):o&&(o=h(o.replace(t," ")),s?i.baseVal=o:n.className=o)}}function mt(e,t,n){function r(){this.style.removeProperty(e)}function i(){this.style.setProperty(e,t,n)}function s(){var r=t.apply(this,arguments);r==null?this.style.removeProperty(e):this.style.setProperty(e,r,n)}return t==null?r:typeof t=="function"?s:i}function gt(e,t){function n(){delete this[e]}function r(){this[e]=t}function i(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}return t==null?n:typeof t=="function"?i:r}function yt(e){return{__data__:e}}function bt(e){return function(){return Cs(this,e)}}function wt(e){return arguments.length||(e=d3.ascending),function(t,n){return e(t&&t.__data__,n&&n.__data__)}}function Et(e,t,n){function r(){var t=this[s];t&&(this.removeEventListener(e,t,t.$),delete this[s])}function i(){function i(e){var n=d3.event;d3.event=e,u[0]=o.__data__;try{t.apply(o,u)}finally{d3.event=n}}var o=this,u=arguments;r.call(this),this.addEventListener(e,this[s]=i,i.$=n),i._=t}var s="__on"+e,o=e.indexOf(".");return o>0&&(e=e.substring(0,o)),t?i:r}function St(e,t){for(var n=0,r=e.length;n<r;n++)for(var i=e[n],s=0,o=i.length,u;s<o;s++)(u=i[s])&&t(u,s,n);return e}function xt(e){return Qi(e,As),e}function Tt(e,t,n){Qi(e,Os);var i=new r,s=d3.dispatch("start","end"),o=Fs;return e.id=t,e.time=n,e.tween=function(t,n){return arguments.length<2?i.get(t):(n==null?i.remove(t):i.set(t,n),e)},e.ease=function(t){return arguments.length?(o=typeof t=="function"?t:d3.ease.apply(d3,arguments),e):o},e.each=function(t,n){return arguments.length<2?Nt.call(e,t):(s.on(t,n),e)},d3.timer(function(r){return St(e,function(e,u,a){function f(r){return v.active>t?c():(v.active=t,i.forEach(function(t,n){(n=n.call(e,m,u))&&h.push(n)}),s.start.call(e,m,u),l(r)||d3.timer(l,0,n),1)}function l(n){if(v.active!==t)return c();var r=(n-p)/d,i=o(r),a=h.length;while(a>0)h[--a].call(e,i);if(r>=1)return c(),_s=t,s.end.call(e,m,u),_s=0,1}function c(){return--v.count||delete e.__transition__,1}var h=[],p=e.delay,d=e.duration,v=(e=e.node).__transition__||(e.__transition__={active:0,count:0}),m=e.__data__;++v.count,p<=r?f(r):d3.timer(f,p,n)})},0,n),e}function Nt(e){var t=_s,n=Fs,r=Bs,i=js;return _s=this.id,Fs=this.ease(),St(this,function(t,n,r){Bs=t.delay,js=t.duration,e.call(t=t.node,t.__data__,n,r)}),_s=t,Fs=n,Bs=r,js=i,this}function Ct(e,t,n){return n!=""&&Is}function kt(e,t){return d3.tween(e,F(t))}function Lt(){var e,t=Date.now(),n=Us;while(n)e=t-n.then,e>=n.delay&&(n.flush=n.callback(e)),n=n.next;var r=At()-t;r>24?(isFinite(r)&&(clearTimeout(Ws),Ws=setTimeout(Lt,r)),zs=0):(zs=1,Xs(Lt))}function At(){var e=null,t=Us,n=Infinity;while(t)t.flush?(delete Rs[t.callback.id],t=e?e.next=t.next:Us=t.next):(n=Math.min(n,t.then+t.delay),t=(e=t).next);return n}function Ot(e,t){var n=e.ownerSVGElement||e;if(n.createSVGPoint){var r=n.createSVGPoint();if(Vs<0&&(window.scrollX||window.scrollY)){n=d3.select(document.body).append("svg").style("position","absolute").style("top",0).style("left",0);var i=n[0][0].getScreenCTM();Vs=!i.f&&!i.e,n.remove()}return Vs?(r.x=t.pageX,r.y=t.pageY):(r.x=t.clientX,r.y=t.clientY),r=r.matrixTransform(e.getScreenCTM().inverse()),[r.x,r.y]}var s=e.getBoundingClientRect();return[t.clientX-s.left-e.clientLeft,t.clientY-s.top-e.clientTop]}function Mt(){}function _t(e){var t=e[0],n=e[e.length-1];return t<n?[t,n]:[n,t]}function Dt(e){return e.rangeExtent?e.rangeExtent():_t(e.range())}function Pt(e,t){var n=0,r=e.length-1,i=e[n],s=e[r],o;s<i&&(o=n,n=r,r=o,o=i,i=s,s=o);if(t=t(s-i))e[n]=t.floor(i),e[r]=t.ceil(s);return e}function Ht(){return Math}function Bt(e,t,n,r){function i(){var i=Math.min(e.length,t.length)>2?zt:Ut,a=r?q:I;return o=i(e,t,a,n),u=i(t,e,a,d3.interpolate),s}function s(e){return o(e)}var o,u;return s.invert=function(e){return u(e)},s.domain=function(t){return arguments.length?(e=t.map(Number),i()):e},s.range=function(e){return arguments.length?(t=e,i()):t},s.rangeRound=function(e){return s.range(e).interpolate(d3.interpolateRound)},s.clamp=function(e){return arguments.length?(r=e,i()):r},s.interpolate=function(e){return arguments.length?(n=e,i()):n},s.ticks=function(t){return qt(e,t)},s.tickFormat=function(t){return Rt(e,t)},s.nice=function(){return Pt(e,Ft),i()},s.copy=function(){return Bt(e,t,n,r)},i()}function jt(e,t){return d3.rebind(e,t,"range","rangeRound","interpolate","clamp")}function Ft(e){return e=Math.pow(10,Math.round(Math.log(e)/Math.LN10)-1),e&&{floor:function(t){return Math.floor(t/e)*e},ceil:function(t){return Math.ceil(t/e)*e}}}function It(e,t){var n=_t(e),r=n[1]-n[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),s=t/r*i;return s<=.15?i*=10:s<=.35?i*=5:s<=.75&&(i*=2),n[0]=Math.ceil(n[0]/i)*i,n[1]=Math.floor(n[1]/i)*i+i*.5,n[2]=i,n}function qt(e,t){return d3.range.apply(d3,It(e,t))}function Rt(e,t){return d3.format(",."+Math.max(0,-Math.floor(Math.log(It(e,t)[2])/Math.LN10+.01))+"f")}function Ut(e,t,n,r){var i=n(e[0],e[1]),s=r(t[0],t[1]);return function(e){return s(i(e))}}function zt(e,t,n,r){var i=[],s=[],o=0,u=Math.min(e.length,t.length)-1;e[u]<e[0]&&(e=e.slice().reverse(),t=t.slice().reverse());while(++o<=u)i.push(n(e[o-1],e[o])),s.push(r(t[o-1],t[o]));return function(t){var n=d3.bisect(e,t,1,u)-1;return s[n](i[n](t))}}function Wt(e,t){function n(n){return e(t(n))}var r=t.pow;return n.invert=function(t){return r(e.invert(t))},n.domain=function(i){return arguments.length?(t=i[0]<0?Vt:Xt,r=t.pow,e.domain(i.map(t)),n):e.domain().map(r)},n.nice=function(){return e.domain(Pt(e.domain(),Ht)),n},n.ticks=function(){var n=_t(e.domain()),i=[];if(n.every(isFinite)){var s=Math.floor(n[0]),o=Math.ceil(n[1]),u=r(n[0]),a=r(n[1]);if(t===Vt){i.push(r(s));for(;s++<o;)for(var f=9;f>0;f--)i.push(r(s)*f)}else{for(;s<o;s++)for(var f=1;f<10;f++)i.push(r(s)*f);i.push(r(s))}for(s=0;i[s]<u;s++);for(o=i.length;i[o-1]>a;o--);i=i.slice(s,o)}return i},n.tickFormat=function(e,i){arguments.length<2&&(i=$s);if(arguments.length<1)return i;var s=Math.max(.1,e/n.ticks().length),o=t===Vt?(u=-1e-12,Math.floor):(u=1e-12,Math.ceil),u;return function(e){return e/r(o(t(e)+u))<=s?i(e):""}},n.copy=function(){return Wt(e.copy(),t)},jt(n,e)}function Xt(e){return Math.log(e<0?0:e)/Math.LN10}function Vt(e){return-Math.log(e>0?0:-e)/Math.LN10}function $t(e,t){function n(t){return e(r(t))}var r=Jt(t),i=Jt(1/t);return n.invert=function(t){return i(e.invert(t))},n.domain=function(t){return arguments.length?(e.domain(t.map(r)),n):e.domain().map(i)},n.ticks=function(e){return qt(n.domain(),e)},n.tickFormat=function(e){return Rt(n.domain(),e)},n.nice=function(){return n.domain(Pt(n.domain(),Ft))},n.exponent=function(e){if(!arguments.length)return t;var s=n.domain();return r=Jt(t=e),i=Jt(1/t),n.domain(s)},n.copy=function(){return $t(e.copy(),t)},jt(n,e)}function Jt(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function Kt(e,t){function n(t){return o[((s.get(t)||s.set(t,e.push(t)))-1)%o.length]}function i(t,n){return d3.range(e.length).map(function(e){return t+n*e})}var s,o,u;return n.domain=function(i){if(!arguments.length)return e;e=[],s=new r;var o=-1,u=i.length,a;while(++o<u)s.has(a=i[o])||s.set(a,e.push(a));return n[t.t].apply(n,t.a)},n.range=function(e){return arguments.length?(o=e,u=0,t={t:"range",a:arguments},n):o},n.rangePoints=function(r,s){arguments.length<2&&(s=0);var a=r[0],f=r[1],l=(f-a)/(Math.max(1,e.length-1)+s);return o=i(e.length<2?(a+f)/2:a+l*s/2,l),u=0,t={t:"rangePoints",a:arguments},n},n.rangeBands=function(r,s,a){arguments.length<2&&(s=0),arguments.length<3&&(a=s);var f=r[1]<r[0],l=r[f-0],c=r[1-f],h=(c-l)/(e.length-s+2*a);return o=i(l+h*a,h),f&&o.reverse(),u=h*(1-s),t={t:"rangeBands",a:arguments},n},n.rangeRoundBands=function(r,s,a){arguments.length<2&&(s=0),arguments.length<3&&(a=s);var f=r[1]<r[0],l=r[f-0],c=r[1-f],h=Math.floor((c-l)/(e.length-s+2*a)),p=c-l-(e.length-s)*h;return o=i(l+Math.round(p/2),h),f&&o.reverse(),u=Math.round(h*(1-s)),t={t:"rangeRoundBands",a:arguments},n},n.rangeBand=function(){return u},n.rangeExtent=function(){return _t(t.a[0])},n.copy=function(){return Kt(e,t)},n.domain(e)}function Qt(e,t){function n(){var n=0,s=e.length,o=t.length;i=[];while(++n<o)i[n-1]=d3.quantile(e,n/o);return r}function r(e){return isNaN(e=+e)?NaN:t[d3.bisect(i,e)]}var i;return r.domain=function(t){return arguments.length?(e=t.filter(function(e){return!isNaN(e)}).sort(d3.ascending),n()):e},r.range=function(e){return arguments.length?(t=e,n()):t},r.quantiles=function(){return i},r.copy=function(){return Qt(e,t)},n()}function Gt(e,t,n){function r(t){return n[Math.max(0,Math.min(o,Math.floor(s*(t-e))))]}function i(){return s=n.length/(t-e),o=n.length-1,r}var s,o;return r.domain=function(n){return arguments.length?(e=+n[0],t=+n[n.length-1],i()):[e,t]},r.range=function(e){return arguments.length?(n=e,i()):n},r.copy=function(){return Gt(e,t,n)},i()}function Yt(e,t){function n(n){return t[d3.bisect(e,n)]}return n.domain=function(t){return arguments.length?(e=t,n):e},n.range=function(e){return arguments.length?(t=e,n):t},n.copy=function(){return Yt(e,t)},n}function Zt(e){function t(e){return+e}return t.invert=t,t.domain=t.range=function(n){return arguments.length?(e=n.map(t),t):e},t.ticks=function(t){return qt(e,t)},t.tickFormat=function(t){return Rt(e,t)},t.copy=function(){return Zt(e)},t}function en(e){return e.innerRadius}function tn(e){return e.outerRadius}function nn(e){return e.startAngle}function rn(e){return e.endAngle}function sn(e){function t(t){function o(){a.push("M",s(e(l),f))}var a=[],l=[],c=-1,h=t.length,p,d=u(n),v=u(r);while(++c<h)i.call(this,p=t[c],c)?l.push([+d.call(this,p,c),+v.call(this,p,c)]):l.length&&(o(),l=[]);return l.length&&o(),a.length?a.join(""):null}var n=on,r=un,i=o,s=an,a=s.key,f=.7;return t.x=function(e){return arguments.length?(n=e,t):n},t.y=function(e){return arguments.length?(r=e,t):r},t.defined=function(e){return arguments.length?(i=e,t):i},t.interpolate=function(e){return arguments.length?(typeof e=="function"?a=s=e:a=(s=eo.get(e)||an).key,t):a},t.tension=function(e){return arguments.length?(f=e,t):f},t}function on(e){return e[0]}function un(e){return e[1]}function an(e){return e.join("L")}function fn(e){return an(e)+"Z"}function ln(e){var t=0,n=e.length,r=e[0],i=[r[0],",",r[1]];while(++t<n)i.push("V",(r=e[t])[1],"H",r[0]);return i.join("")}function cn(e){var t=0,n=e.length,r=e[0],i=[r[0],",",r[1]];while(++t<n)i.push("H",(r=e[t])[0],"V",r[1]);return i.join("")}function hn(e,t){return e.length<4?an(e):e[1]+vn(e.slice(1,e.length-1),mn(e,t))}function pn(e,t){return e.length<3?an(e):e[0]+vn((e.push(e[0]),e),mn([e[e.length-2]].concat(e,[e[1]]),t))}function dn(e,t,n){return e.length<3?an(e):e[0]+vn(e,mn(e,t))}function vn(e,t){if(t.length<1||e.length!=t.length&&e.length!=t.length+2)return an(e);var n=e.length!=t.length,r="",i=e[0],s=e[1],o=t[0],u=o,a=1;n&&(r+="Q"+(s[0]-o[0]*2/3)+","+(s[1]-o[1]*2/3)+","+s[0]+","+s[1],i=e[1],a=2);if(t.length>1){u=t[1],s=e[a],a++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(s[0]-u[0])+","+(s[1]-u[1])+","+s[0]+","+s[1];for(var f=2;f<t.length;f++,a++)s=e[a],u=t[f],r+="S"+(s[0]-u[0])+","+(s[1]-u[1])+","+s[0]+","+s[1]}if(n){var l=e[a];r+="Q"+(s[0]+u[0]*2/3)+","+(s[1]+u[1]*2/3)+","+l[0]+","+l[1]}return r}function mn(e,t){var n=[],r=(1-t)/2,i,s=e[0],o=e[1],u=1,a=e.length;while(++u<a)i=s,s=o,o=e[u],n.push([r*(o[0]-i[0]),r*(o[1]-i[1])]);return n}function gn(e){if(e.length<3)return an(e);var t=1,n=e.length,r=e[0],i=r[0],s=r[1],o=[i,i,i,(r=e[1])[0]],u=[s,s,s,r[1]],a=[i,",",s];Sn(a,o,u);while(++t<n)r=e[t],o.shift(),o.push(r[0]),u.shift(),u.push(r[1]),Sn(a,o,u);t=-1;while(++t<2)o.shift(),o.push(r[0]),u.shift(),u.push(r[1]),Sn(a,o,u);return a.join("")}function yn(e){if(e.length<4)return an(e);var t=[],n=-1,r=e.length,i,s=[0],o=[0];while(++n<3)i=e[n],s.push(i[0]),o.push(i[1]);t.push(En(ro,s)+","+En(ro,o)),--n;while(++n<r)i=e[n],s.shift(),s.push(i[0]),o.shift(),o.push(i[1]),Sn(t,s,o);return t.join("")}function bn(e){var t,n=-1,r=e.length,i=r+4,s,o=[],u=[];while(++n<4)s=e[n%r],o.push(s[0]),u.push(s[1]);t=[En(ro,o),",",En(ro,u)],--n;while(++n<i)s=e[n%r],o.shift(),o.push(s[0]),u.shift(),u.push(s[1]),Sn(t,o,u);return t.join("")}function wn(e,t){var n=e.length-1;if(n){var r=e[0][0],i=e[0][1],s=e[n][0]-r,o=e[n][1]-i,u=-1,a,f;while(++u<=n)a=e[u],f=u/n,a[0]=t*a[0]+(1-t)*(r+f*s),a[1]=t*a[1]+(1-t)*(i+f*o)}return gn(e)}function En(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3]}function Sn(e,t,n){e.push("C",En(to,t),",",En(to,n),",",En(no,t),",",En(no,n),",",En(ro,t),",",En(ro,n))}function xn(e,t){return(t[1]-e[1])/(t[0]-e[0])}function Tn(e){var t=0,n=e.length-1,r=[],i=e[0],s=e[1],o=r[0]=xn(i,s);while(++t<n)r[t]=(o+(o=xn(i=s,s=e[t+1])))/2;return r[t]=o,r}function Nn(e){var t=[],n,r,i,s,o=Tn(e),u=-1,a=e.length-1;while(++u<a)n=xn(e[u],e[u+1]),Math.abs(n)<1e-6?o[u]=o[u+1]=0:(r=o[u]/n,i=o[u+1]/n,s=r*r+i*i,s>9&&(s=n*3/Math.sqrt(s),o[u]=s*r,o[u+1]=s*i));u=-1;while(++u<=a)s=(e[Math.min(a,u+1)][0]-e[Math.max(0,u-1)][0])/(6*(1+o[u]*o[u])),t.push([s||0,o[u]*s||0]);return t}function Cn(e){return e.length<3?an(e):e[0]+vn(e,Nn(e))}function kn(e){var t,n=-1,r=e.length,i,s;while(++n<r)t=e[n],i=t[0],s=t[1]+Ys,t[0]=i*Math.cos(s),t[1]=i*Math.sin(s);return e}function Ln(e){function t(t){function o(){l.push("M",f(e(v),p),h,c(e(d.reverse()),p),"Z")}var l=[],d=[],v=[],m=-1,g=t.length,y,b=u(n),w=u(i),E=n===r?function(){return x}:u(r),S=i===s?function(){return T}:u(s),x,T;while(++m<g)a.call(this,y=t[m],m)?(d.push([x=+b.call(this,y,m),T=+w.call(this,y,m)]),v.push([+E.call(this,y,m),+S.call(this,y,m)])):d.length&&(o(),d=[],v=[]);return d.length&&o(),l.length?l.join(""):null}var n=on,r=on,i=0,s=un,a=o,f=an,l=f.key,c=f,h="L",p=.7;return t.x=function(e){return arguments.length?(n=r=e,t):r},t.x0=function(e){return arguments.length?(n=e,t):n},t.x1=function(e){return arguments.length?(r=e,t):r},t.y=function(e){return arguments.length?(i=s=e,t):s},t.y0=function(e){return arguments.length?(i=e,t):i},t.y1=function(e){return arguments.length?(s=e,t):s},t.defined=function(e){return arguments.length?(a=e,t):a},t.interpolate=function(e){return arguments.length?(typeof e=="function"?l=f=e:l=(f=eo.get(e)||an).key,c=f.reverse||f,h=f.closed?"M":"L",t):l},t.tension=function(e){return arguments.length?(p=e,t):p},t}function An(e){return e.source}function On(e){return e.target}function Mn(e){return e.radius}function _n(e){return e.startAngle}function Dn(e){return e.endAngle}function Pn(e){return[e.x,e.y]}function Hn(e){return function(){var t=e.apply(this,arguments),n=t[0],r=t[1]+Ys;return[n*Math.cos(r),n*Math.sin(r)]}}function Bn(){return 64}function jn(){return"circle"}function Fn(e){var t=Math.sqrt(e/Math.PI);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+ -t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function In(e,t){e.attr("transform",function(e){return"translate("+t(e)+",0)"})}function qn(e,t){e.attr("transform",function(e){return"translate(0,"+t(e)+")"})}function Rn(e,t,n){i=[];if(n&&t.length>1){var r=_t(e.domain()),i,s=-1,o=t.length,u=(t[1]-t[0])/++n,a,f;while(++s<o)for(a=n;--a>0;)(f=+t[s]-a*u)>=r[0]&&i.push(f);for(--s,a=0;++a<n&&(f=+t[s]+a*u)<r[1];)i.push(f)}return i}function Un(){fo||(fo=d3.select("body").append("div").style("visibility","hidden").style("top",0).style("height",0).style("width",0).style("overflow-y","scroll").append("div").style("height","2000px").node().parentNode);var e=d3.event,t;try{fo.scrollTop=1e3,fo.dispatchEvent(e),t=1e3-fo.scrollTop}catch(n){t=e.wheelDelta||-e.detail*5}return t}function zn(e){var t=e.source,n=e.target,r=Xn(t,n),i=[t];while(t!==r)t=t.parent,i.push(t);var s=i.length;while(n!==r)i.splice(s,0,n),n=n.parent;return i}function Wn(e){var t=[],n=e.parent;while(n!=null)t.push(e),e=n,n=n.parent;return t.push(e),t}function Xn(e,t){if(e===t)return e;var n=Wn(e),r=Wn(t),i=n.pop(),s=r.pop(),o=null;while(i===s)o=i,i=n.pop(),s=r.pop();return o}function Vn(e){e.fixed|=2}function $n(e){e.fixed&=1}function Jn(e){e.fixed|=4}function Kn(e){e.fixed&=3}function Qn(e,t,n){var r=0,i=0;e.charge=0;if(!e.leaf){var s=e.nodes,o=s.length,u=-1,a;while(++u<o){a=s[u];if(a==null)continue;Qn(a,t,n),e.charge+=a.charge,r+=a.charge*a.cx,i+=a.charge*a.cy}}if(e.point){e.leaf||(e.point.x+=Math.random()-.5,e.point.y+=Math.random()-.5);var f=t*n[e.point.index];e.charge+=e.pointCharge=f,r+=f*e.point.x,i+=f*e.point.y}e.cx=r/e.charge,e.cy=i/e.charge}function Gn(e){return 20}function Yn(e){return 1}function Zn(e){return e.x}function er(e){return e.y}function tr(e,t,n){e.y0=t,e.y=n}function nr(e){return d3.range(e.length)}function rr(e){var t=-1,n=e[0].length,r=[];while(++t<n)r[t]=0;return r}function ir(e){var t=1,n=0,r=e[0][1],i,s=e.length;for(;t<s;++t)(i=e[t][1])>r&&(n=t,r=i);return n}function sr(e){return e.reduce(or,0)}function or(e,t){return e+t[1]}function ur(e,t){return ar(e,Math.ceil(Math.log(t.length)/Math.LN2+1))}function ar(e,t){var n=-1,r=+e[0],i=(e[1]-r)/t,s=[];while(++n<=t)s[n]=i*n+r;return s}function fr(e){return[d3.min(e),d3.max(e)]}function lr(e,t){return d3.rebind(e,t,"sort","children","value"),e.links=dr,e.nodes=function(t){return vo=!0,(e.nodes=e)(t)},e}function cr(e){return e.children}function hr(e){return e.value}function pr(e,t){return t.value-e.value}function dr(e){return d3.merge(e.map(function(e){return(e.children||[]).map(function(t){return{source:e,target:t}})}))}function vr(e,t){return e.value-t.value}function mr(e,t){var n=e._pack_next;e._pack_next=t,t._pack_prev=e,t._pack_next=n,n._pack_prev=t}function gr(e,t){e._pack_next=t,t._pack_prev=e}function yr(e,t){var n=t.x-e.x,r=t.y-e.y,i=e.r+t.r;return i*i-n*n-r*r>.001}function br(e){function t(e){r=Math.min(e.x-e.r,r),i=Math.max(e.x+e.r,i),s=Math.min(e.y-e.r,s),o=Math.max(e.y+e.r,o)}if(!(n=e.children)||!(p=n.length))return;var n,r=Infinity,i=-Infinity,s=Infinity,o=-Infinity,u,a,f,l,c,h,p;n.forEach(wr),u=n[0],u.x=-u.r,u.y=0,t(u);if(p>1){a=n[1],a.x=a.r,a.y=0,t(a);if(p>2){f=n[2],xr(u,a,f),t(f),mr(u,f),u._pack_prev=f,mr(f,a),a=u._pack_next;for(l=3;l<p;l++){xr(u,a,f=n[l]);var d=0,v=1,m=1;for(c=a._pack_next;c!==a;c=c._pack_next,v++)if(yr(c,f)){d=1;break}if(d==1)for(h=u._pack_prev;h!==c._pack_prev;h=h._pack_prev,m++)if(yr(h,f))break;d?(v<m||v==m&&a.r<u.r?gr(u,a=c):gr(u=h,a),l--):(mr(u,f),a=f,t(f))}}}var g=(r+i)/2,y=(s+o)/2,b=0;for(l=0;l<p;l++)f=n[l],f.x-=g,f.y-=y,b=Math.max(b,f.r+Math.sqrt(f.x*f.x+f.y*f.y));e.r=b,n.forEach(Er)}function wr(e){e._pack_next=e._pack_prev=e}function Er(e){delete e._pack_next,delete e._pack_prev}function Sr(e,t,n,r){var i=e.children;e.x=t+=r*e.x,e.y=n+=r*e.y,e.r*=r;if(i){var s=-1,o=i.length;while(++s<o)Sr(i[s],t,n,r)}}function xr(e,t,n){var r=e.r+n.r,i=t.x-e.x,s=t.y-e.y;if(r&&(i||s)){var o=t.r+n.r,u=i*i+s*s;o*=o,r*=r;var a=.5+(r-o)/(2*u),f=Math.sqrt(Math.max(0,2*o*(r+u)-(r-=u)*r-o*o))/(2*u);n.x=e.x+a*i+f*s,n.y=e.y+a*s-f*i}else n.x=e.x+r,n.y=e.y}function Tr(e){return 1+d3.max(e,function(e){return e.y})}function Nr(e){return e.reduce(function(e,t){return e+t.x},0)/e.length}function Cr(e){var t=e.children;return t&&t.length?Cr(t[0]):e}function kr(e){var t=e.children,n;return t&&(n=t.length)?kr(t[n-1]):e}function Lr(e,t){return e.parent==t.parent?1:2}function Ar(e){var t=e.children;return t&&t.length?t[0]:e._tree.thread}function Or(e){var t=e.children,n;return t&&(n=t.length)?t[n-1]:e._tree.thread}function Mr(e,t){var n=e.children;if(n&&(i=n.length)){var r,i,s=-1;while(++s<i)t(r=Mr(n[s],t),e)>0&&(e=r)}return e}function _r(e,t){return e.x-t.x}function Dr(e,t){return t.x-e.x}function Pr(e,t){return e.depth-t.depth}function Hr(e,t){function n(e,r){var i=e.children;if(i&&(a=i.length)){var s,o=null,u=-1,a;while(++u<a)s=i[u],n(s,o),o=s}t(e,r)}n(e,null)}function Br(e){var t=0,n=0,r=e.children,i=r.length,s;while(--i>=0)s=r[i]._tree,s.prelim+=t,s.mod+=t,t+=s.shift+(n+=s.change)}function jr(e,t,n){e=e._tree,t=t._tree;var r=n/(t.number-e.number);e.change+=r,t.change-=r,t.shift+=n,t.prelim+=n,t.mod+=n}function Fr(e,t,n){return e._tree.ancestor.parent==t.parent?e._tree.ancestor:n}function Ir(e){return{x:e.x,y:e.y,dx:e.dx,dy:e.dy}}function qr(e,t){var n=e.x+t[3],r=e.y+t[0],i=e.dx-t[1]-t[3],s=e.dy-t[0]-t[2];return i<0&&(n+=i/2,i=0),s<0&&(r+=s/2,s=0),{x:n,y:r,dx:i,dy:s}}function Rr(e,t){function n(e,r){d3.text(e,t,function(e){r(e&&n.parse(e))})}function r(t){return t.map(i).join(e)}function i(e){return o.test(e)?'"'+e.replace(/\"/g,'""')+'"':e}var s=new RegExp("\r\n|["+e+"\r\n]","g"),o=new RegExp('["'+e+"\n]"),u=e.charCodeAt(0);return n.parse=function(e){var t;return n.parseRows(e,function(e,n){if(n){var r={},i=-1,s=t.length;while(++i<s)r[t[i]]=e[i];return r}return t=e,null})},n.parseRows=function(e,t){function n(){if(s.lastIndex>=e.length)return i;if(l)return l=!1,r;var t=s.lastIndex;if(e.charCodeAt(t)===34){var n=t;while(n++<e.length)if(e.charCodeAt(n)===34){if(e.charCodeAt(n+1)!==34)break;n++}s.lastIndex=n+2;var o=e.charCodeAt(n+1);return o===13?(l=!0,e.charCodeAt(n+2)===10&&s.lastIndex++):o===10&&(l=!0),e.substring(t+1,n).replace(/""/g,'"')}var a=s.exec(e);return a?(l=a[0].charCodeAt(0)!==u,e.substring(t,a.index)):(s.lastIndex=e.length,e.substring(t))}var r={},i={},o=[],a=0,f,l;s.lastIndex=0;while((f=n())!==i){var c=[];while(f!==r&&f!==i)c.push(f),f=n();if(t&&!(c=t(c,a++)))continue;o.push(c)}return o},n.format=function(e){return e.map(r).join("\n")},n}function Ur(e,t){return function(n){return n&&e.hasOwnProperty(n.type)?e[n.type](n):t}}function zr(e){return"m0,"+e+"a"+e+","+e+" 0 1,1 0,"+ -2*e+"a"+e+","+e+" 0 1,1 0,"+2*e+"z"}function Wr(e,t){go.hasOwnProperty(e.type)&&go[e.type](e,t)}function Xr(e,t){Wr(e.geometry,t)}function Vr(e,t){for(var n=e.features,r=0,i=n.length;r<i;r++)Wr(n[r].geometry,t)}function $r(e,t){for(var n=e.geometries,r=0,i=n.length;r<i;r++)Wr(n[r],t)}function Jr(e,t){for(var n=e.coordinates,r=0,i=n.length;r<i;r++)t.apply(null,n[r])}function Kr(e,t){for(var n=e.coordinates,r=0,i=n.length;r<i;r++)for(var s=n[r],o=0,u=s.length;o<u;o++)t.apply(null,s[o])}function Qr(e,t){for(var n=e.coordinates,r=0,i=n.length;r<i;r++)for(var s=n[r][0],o=0,u=s.length;o<u;o++)t.apply(null,s[o])}function Gr(e,t){t.apply(null,e.coordinates)}function Yr(e,t){for(var n=e.coordinates[0],r=0,i=n.length;r<i;r++)t.apply(null,n[r])}function Zr(e){return e.source}function ei(e){return e.target}function ti(){function e(e){var t=Math.sin(e*=p)*d,n=Math.sin(p-e)*d,r=n*s+t*c,u=n*o+t*h,a=n*i+t*l;return[Math.atan2(u,r)/mo,Math.atan2(a,Math.sqrt(r*r+u*u))/mo]}var t,n,r,i,s,o,u,a,f,l,c,h,p,d;return e.distance=function(){return p==null&&(d=1/Math.sin(p=Math.acos(Math.max(-1,Math.min(1,i*l+r*f*Math.cos(u-t)))))),p},e.source=function(u){var a=Math.cos(t=u[0]*mo),f=Math.sin(t);return r=Math.cos(n=u[1]*mo),i=Math.sin(n),s=r*a,o=r*f,p=null,e},e.target=function(t){var n=Math.cos(u=t[0]*mo),r=Math.sin(u);return f=Math.cos(a=t[1]*mo),l=Math.sin(a),c=f*n,h=f*r,p=null,e},e}function ni(e,t){var n=ti().source(e).target(t);return n.distance(),n}function ri(e){var t=0,n=0;for(;;){if(e(t,n))return[t,n];t===0?(t=n+1,n=0):(t-=1,n+=1)}}function ii(e,t,n,r){var i,s,o,u,a,f,l;return i=r[e],s=i[0],o=i[1],i=r[t],u=i[0],a=i[1],i=r[n],f=i[0],l=i[1],(l-o)*(u-s)-(a-o)*(f-s)>0}function si(e,t,n){return(n[0]-t[0])*(e[1]-t[1])<(n[1]-t[1])*(e[0]-t[0])}function oi(e,t,n,r){var i=e[0],s=t[0],o=n[0],u=r[0],a=e[1],f=t[1],l=n[1],c=r[1],h=i-o,p=s-i,d=u-o,v=a-l,m=f-a,g=c-l,y=(d*v-g*h)/(g*p-d*m);return[i+y*p,a+y*m]}function ui(e,t){var n={list:e.map(function(e,t){return{index:t,x:e[0],y:e[1]}}).sort(function(e,t){return e.y<t.y?-1:e.y>t.y?1:e.x<t.x?-1:e.x>t.x?1:0}),bottomSite:null},r={list:[],leftEnd:null,rightEnd:null,init:function(){r.leftEnd=r.createHalfEdge(null,"l"),r.rightEnd=r.createHalfEdge(null,"l"),r.leftEnd.r=r.rightEnd,r.rightEnd.l=r.leftEnd,r.list.unshift(r.leftEnd,r.rightEnd)},createHalfEdge:function(e,t){return{edge:e,side:t,vertex:null,l:null,r:null}},insert:function(e,t){t.l=e,t.r=e.r,e.r.l=t,e.r=t},leftBound:function(e){var t=r.leftEnd;do t=t.r;while(t!=r.rightEnd&&i.rightOf(t,e));return t=t.l,t},del:function(e){e.l.r=e.r,e.r.l=e.l,e.edge=null},right:function(e){return e.r},left:function(e){return e.l},leftRegion:function(e){return e.edge==null?n.bottomSite:e.edge.region[e.side]},rightRegion:function(e){return e.edge==null?n.bottomSite:e.edge.region[wo[e.side]]}},i={bisect:function(e,t){var n={region:{l:e,r:t},ep:{l:null,r:null}},r=t.x-e.x,i=t.y-e.y,s=r>0?r:-r,o=i>0?i:-i;return n.c=e.x*r+e.y*i+(r*r+i*i)*.5,s>o?(n.a=1,n.b=i/r,n.c/=r):(n.b=1,n.a=r/i,n.c/=i),n},intersect:function(e,t){var n=e.edge,r=t.edge;if(!n||!r||n.region.r==r.region.r)return null;var i=n.a*r.b-n.b*r.a;if(Math.abs(i)<1e-10)return null;var s=(n.c*r.b-r.c*n.b)/i,o=(r.c*n.a-n.c*r.a)/i,u=n.region.r,a=r.region.r,f,l;u.y<a.y||u.y==a.y&&u.x<a.x?(f=e,l=n):(f=t,l=r);var c=s>=l.region.r.x;return c&&f.side==="l"||!c&&f.side==="r"?null:{x:s,y:o}},rightOf:function(e,t){var n=e.edge,r=n.region.r,i=t.x>r.x;if(i&&e.side==="l")return 1;if(!i&&e.side==="r")return 0;if(n.a===1){var s=t.y-r.y,o=t.x-r.x,u=0,a=0;!i&&n.b<0||i&&n.b>=0?a=u=s>=n.b*o:(a=t.x+t.y*n.b>n.c,n.b<0&&(a=!a),a||(u=1));if(!u){var f=r.x-n.region.l.x;a=n.b*(o*o-s*s)<f*s*(1+2*o/f+n.b*n.b),n.b<0&&(a=!a)}}else{var l=n.c-n.a*t.x,c=t.y-l,h=t.x-r.x,p=l-r.y;a=c*c>h*h+p*p}return e.side==="l"?a:!a},endPoint:function(e,n,r){e.ep[n]=r;if(!e.ep[wo[n]])return;t(e)},distance:function(e,t){var n=e.x-t.x,r=e.y-t.y;return Math.sqrt(n*n+r*r)}},s={list:[],insert:function(e,t,n){e.vertex=t,e.ystar=t.y+n;for(var r=0,i=s.list,o=i.length;r<o;r++){var u=i[r];if(e.ystar>u.ystar||e.ystar==u.ystar&&t.x>u.vertex.x)continue;break}i.splice(r,0,e)},del:function(e){for(var t=0,n=s.list,r=n.length;t<r&&n[t]!=e;++t);n.splice(t,1)},empty:function(){return s.list.length===0},nextEvent:function(e){for(var t=0,n=s.list,r=n.length;t<r;++t)if(n[t]==e)return n[t+1];return null},min:function(){var e=s.list[0];return{x:e.vertex.x,y:e.ystar}},extractMin:function(){return s.list.shift()}};r.init(),n.bottomSite=n.list.shift();var o=n.list.shift(),u,a,f,l,c,h,p,d,v,m,g,y,b;for(;;){s.empty()||(u=s.min());if(o&&(s.empty()||o.y<u.y||o.y==u.y&&o.x<u.x))a=r.leftBound(o),f=r.right(a),p=r.rightRegion(a),y=i.bisect(p,o),h=r.createHalfEdge(y,"l"),r.insert(a,h),m=i.intersect(a,h),m&&(s.del(a),s.insert(a,m,i.
-distance(m,o))),a=h,h=r.createHalfEdge(y,"r"),r.insert(a,h),m=i.intersect(h,f),m&&s.insert(h,m,i.distance(m,o)),o=n.list.shift();else{if(!!s.empty())break;a=s.extractMin(),l=r.left(a),f=r.right(a),c=r.right(f),p=r.leftRegion(a),d=r.rightRegion(f),g=a.vertex,i.endPoint(a.edge,a.side,g),i.endPoint(f.edge,f.side,g),r.del(a),s.del(f),r.del(f),b="l",p.y>d.y&&(v=p,p=d,d=v,b="r"),y=i.bisect(p,d),h=r.createHalfEdge(y,b),r.insert(l,h),i.endPoint(y,wo[b],g),m=i.intersect(l,h),m&&(s.del(l),s.insert(l,m,i.distance(m,p))),m=i.intersect(h,c),m&&s.insert(h,m,i.distance(m,p))}}for(a=r.right(r.leftEnd);a!=r.rightEnd;a=r.right(a))t(a.edge)}function ai(){return{leaf:!0,nodes:[],point:null}}function fi(e,t,n,r,i,s){if(!e(t,n,r,i,s)){var o=(n+i)*.5,u=(r+s)*.5,a=t.nodes;a[0]&&fi(e,a[0],n,r,o,u),a[1]&&fi(e,a[1],o,r,i,u),a[2]&&fi(e,a[2],n,u,o,s),a[3]&&fi(e,a[3],o,u,i,s)}}function li(e){return{x:e[0],y:e[1]}}function ci(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function hi(e){return e.substring(0,3)}function pi(e,t,n,r){var i,s,o=0,u=t.length,a=n.length;while(o<u){if(r>=a)return-1;i=t.charCodeAt(o++);if(i==37){s=Uo[t.charAt(o++)];if(!s||(r=s(e,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}function di(e){return new RegExp("^(?:"+e.map(d3.requote).join("|")+")","i")}function vi(e){var t=new r,n=-1,i=e.length;while(++n<i)t.set(e[n].toLowerCase(),n);return t}function mi(e,t,n){Bo.lastIndex=0;var r=Bo.exec(t.substring(n));return r?n+=r[0].length:-1}function gi(e,t,n){Ho.lastIndex=0;var r=Ho.exec(t.substring(n));return r?n+=r[0].length:-1}function yi(e,t,n){Io.lastIndex=0;var r=Io.exec(t.substring(n));return r?(e.m=qo.get(r[0].toLowerCase()),n+=r[0].length):-1}function bi(e,t,n){jo.lastIndex=0;var r=jo.exec(t.substring(n));return r?(e.m=Fo.get(r[0].toLowerCase()),n+=r[0].length):-1}function wi(e,t,n){return pi(e,Ro.c.toString(),t,n)}function Ei(e,t,n){return pi(e,Ro.x.toString(),t,n)}function Si(e,t,n){return pi(e,Ro.X.toString(),t,n)}function xi(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+4));return r?(e.y=+r[0],n+=r[0].length):-1}function Ti(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+2));return r?(e.y=Ni(+r[0]),n+=r[0].length):-1}function Ni(e){return e+(e>68?1900:2e3)}function Ci(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+2));return r?(e.m=r[0]-1,n+=r[0].length):-1}function ki(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+2));return r?(e.d=+r[0],n+=r[0].length):-1}function Li(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+2));return r?(e.H=+r[0],n+=r[0].length):-1}function Ai(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+2));return r?(e.M=+r[0],n+=r[0].length):-1}function Oi(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+2));return r?(e.S=+r[0],n+=r[0].length):-1}function Mi(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+3));return r?(e.L=+r[0],n+=r[0].length):-1}function _i(e,t,n){var r=Wo.get(t.substring(n,n+=2).toLowerCase());return r==null?-1:(e.p=r,n)}function Di(e){var t=e.getTimezoneOffset(),n=t>0?"-":"+",r=~~(Math.abs(t)/60),i=Math.abs(t)%60;return n+Mo(r)+Mo(i)}function Pi(e){return e.toISOString()}function Hi(e,t,n){function r(t){var n=e(t),r=s(n,1);return t-n<r-t?n:r}function i(n){return t(n=e(new Eo(n-1)),1),n}function s(e,n){return t(e=new Eo(+e),n),e}function o(e,r,s){var o=i(e),u=[];if(s>1)while(o<r)n(o)%s||u.push(new Date(+o)),t(o,1);else while(o<r)u.push(new Date(+o)),t(o,1);return u}function u(e,t,n){try{Eo=ci;var r=new ci;return r._=e,o(r,t,n)}finally{Eo=Date}}e.floor=e,e.round=r,e.ceil=i,e.offset=s,e.range=o;var a=e.utc=Bi(e);return a.floor=a,a.round=Bi(r),a.ceil=Bi(i),a.offset=Bi(s),a.range=u,e}function Bi(e){return function(t,n){try{Eo=ci;var r=new ci;return r._=t,e(r,n)._}finally{Eo=Date}}}function ji(e,t,n){function r(t){return e(t)}return r.invert=function(t){return Ii(e.invert(t))},r.domain=function(t){return arguments.length?(e.domain(t),r):e.domain().map(Ii)},r.nice=function(e){return r.domain(Pt(r.domain(),function(){return e}))},r.ticks=function(n,i){var s=Fi(r.domain());if(typeof n!="function"){var o=s[1]-s[0],u=o/n,a=d3.bisect(Vo,u);if(a==Vo.length)return t.year(s,n);if(!a)return e.ticks(n).map(Ii);Math.log(u/Vo[a-1])<Math.log(Vo[a]/u)&&--a,n=t[a],i=n[1],n=n[0].range}return n(s[0],new Date(+s[1]+1),i)},r.tickFormat=function(){return n},r.copy=function(){return ji(e.copy(),t,n)},d3.rebind(r,e,"range","rangeRound","interpolate","clamp")}function Fi(e){var t=e[0],n=e[e.length-1];return t<n?[t,n]:[n,t]}function Ii(e){return new Date(e)}function qi(e){return function(t){var n=e.length-1,r=e[n];while(!r[1](t))r=e[--n];return r[0](t)}}function Ri(e){var t=new Date(e,0,1);return t.setFullYear(e),t}function Ui(e){var t=e.getFullYear(),n=Ri(t),r=Ri(t+1);return t+(e-n)/(r-n)}function zi(e){var t=new Date(Date.UTC(e,0,1));return t.setUTCFullYear(e),t}function Wi(e){var t=e.getUTCFullYear(),n=zi(t),r=zi(t+1);return t+(e-n)/(r-n)}Date.now||(Date.now=function(){return+(new Date)});try{document.createElement("div").style.setProperty("opacity",0,"")}catch(Xi){var Vi=CSSStyleDeclaration.prototype,$i=Vi.setProperty;Vi.setProperty=function(e,t,n){$i.call(this,e,t+"",n)}}d3={version:"2.10.3"};var Ji=n;try{Ji(document.documentElement.childNodes)[0].nodeType}catch(Ki){Ji=t}var Qi=[].__proto__?function(e,t){e.__proto__=t}:function(e,t){for(var n in t)e[n]=t[n]};d3.map=function(e){var t=new r;for(var n in e)t.set(n,e[n]);return t},e(r,{has:function(e){return Gi+e in this},get:function(e){return this[Gi+e]},set:function(e,t){return this[Gi+e]=t},remove:function(e){return e=Gi+e,e in this&&delete this[e]},keys:function(){var e=[];return this.forEach(function(t){e.push(t)}),e},values:function(){var e=[];return this.forEach(function(t,n){e.push(n)}),e},entries:function(){var e=[];return this.forEach(function(t,n){e.push({key:t,value:n})}),e},forEach:function(e){for(var t in this)t.charCodeAt(0)===Yi&&e.call(this,t.substring(1),this[t])}});var Gi="\0",Yi=Gi.charCodeAt(0);d3.functor=u,d3.rebind=function(e,t){var n=1,r=arguments.length,i;while(++n<r)e[i=arguments[n]]=a(e,t,t[i]);return e},d3.ascending=function(e,t){return e<t?-1:e>t?1:e>=t?0:NaN},d3.descending=function(e,t){return t<e?-1:t>e?1:t>=e?0:NaN},d3.mean=function(e,t){var n=e.length,r,i=0,s=-1,o=0;if(arguments.length===1)while(++s<n)f(r=e[s])&&(i+=(r-i)/++o);else while(++s<n)f(r=t.call(e,e[s],s))&&(i+=(r-i)/++o);return o?i:undefined},d3.median=function(e,t){return arguments.length>1&&(e=e.map(t)),e=e.filter(f),e.length?d3.quantile(e.sort(d3.ascending),.5):undefined},d3.min=function(e,t){var n=-1,r=e.length,i,s;if(arguments.length===1){while(++n<r&&((i=e[n])==null||i!=i))i=undefined;while(++n<r)(s=e[n])!=null&&i>s&&(i=s)}else{while(++n<r&&((i=t.call(e,e[n],n))==null||i!=i))i=undefined;while(++n<r)(s=t.call(e,e[n],n))!=null&&i>s&&(i=s)}return i},d3.max=function(e,t){var n=-1,r=e.length,i,s;if(arguments.length===1){while(++n<r&&((i=e[n])==null||i!=i))i=undefined;while(++n<r)(s=e[n])!=null&&s>i&&(i=s)}else{while(++n<r&&((i=t.call(e,e[n],n))==null||i!=i))i=undefined;while(++n<r)(s=t.call(e,e[n],n))!=null&&s>i&&(i=s)}return i},d3.extent=function(e,t){var n=-1,r=e.length,i,s,o;if(arguments.length===1){while(++n<r&&((i=o=e[n])==null||i!=i))i=o=undefined;while(++n<r)(s=e[n])!=null&&(i>s&&(i=s),o<s&&(o=s))}else{while(++n<r&&((i=o=t.call(e,e[n],n))==null||i!=i))i=undefined;while(++n<r)(s=t.call(e,e[n],n))!=null&&(i>s&&(i=s),o<s&&(o=s))}return[i,o]},d3.random={normal:function(e,t){var n=arguments.length;return n<2&&(t=1),n<1&&(e=0),function(){var n,r,i;do n=Math.random()*2-1,r=Math.random()*2-1,i=n*n+r*r;while(!i||i>1);return e+t*n*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(e,t){var n=arguments.length;n<2&&(t=1),n<1&&(e=0);var r=d3.random.normal();return function(){return Math.exp(e+t*r())}},irwinHall:function(e){return function(){for(var t=0,n=0;n<e;n++)t+=Math.random();return t/e}}},d3.sum=function(e,t){var n=0,r=e.length,i,s=-1;if(arguments.length===1)while(++s<r)isNaN(i=+e[s])||(n+=i);else while(++s<r)isNaN(i=+t.call(e,e[s],s))||(n+=i);return n},d3.quantile=function(e,t){var n=(e.length-1)*t+1,r=Math.floor(n),i=e[r-1],s=n-r;return s?i+s*(e[r]-i):i},d3.transpose=function(e){return d3.zip.apply(d3,e)},d3.zip=function(){if(!(i=arguments.length))return[];for(var e=-1,t=d3.min(arguments,l),n=new Array(t);++e<t;)for(var r=-1,i,s=n[e]=new Array(i);++r<i;)s[r]=arguments[r][e];return n},d3.bisector=function(e){return{left:function(t,n,r,i){arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);while(r<i){var s=r+i>>>1;e.call(t,t[s],s)<n?r=s+1:i=s}return r},right:function(t,n,r,i){arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);while(r<i){var s=r+i>>>1;n<e.call(t,t[s],s)?i=s:r=s+1}return r}}};var Zi=d3.bisector(function(e){return e});d3.bisectLeft=Zi.left,d3.bisect=d3.bisectRight=Zi.right,d3.first=function(e,t){var n=0,r=e.length,i=e[0],s;arguments.length===1&&(t=d3.ascending);while(++n<r)t.call(e,i,s=e[n])>0&&(i=s);return i},d3.last=function(e,t){var n=0,r=e.length,i=e[0],s;arguments.length===1&&(t=d3.ascending);while(++n<r)t.call(e,i,s=e[n])<=0&&(i=s);return i},d3.nest=function(){function e(t,s){if(s>=i.length)return u?u.call(n,t):o?t.sort(o):t;var a=-1,f=t.length,l=i[s++],c,h,p=new r,d,v={};while(++a<f)(d=p.get(c=l(h=t[a])))?d.push(h):p.set(c,[h]);return p.forEach(function(t,n){v[t]=e(n,s)}),v}function t(e,n){if(n>=i.length)return e;var r=[],o=s[n++],u;for(u in e)r.push({key:u,values:t(e[u],n)});return o&&r.sort(function(e,t){return o(e.key,t.key)}),r}var n={},i=[],s=[],o,u;return n.map=function(t){return e(t,0)},n.entries=function(n){return t(e(n,0),0)},n.key=function(e){return i.push(e),n},n.sortKeys=function(e){return s[i.length-1]=e,n},n.sortValues=function(e){return o=e,n},n.rollup=function(e){return u=e,n},n},d3.keys=function(e){var t=[];for(var n in e)t.push(n);return t},d3.values=function(e){var t=[];for(var n in e)t.push(e[n]);return t},d3.entries=function(e){var t=[];for(var n in e)t.push({key:n,value:e[n]});return t},d3.permute=function(e,t){var n=[],r=-1,i=t.length;while(++r<i)n[r]=e[t[r]];return n},d3.merge=function(e){return Array.prototype.concat.apply([],e)},d3.split=function(e,t){var n=[],r=[],i,s=-1,o=e.length;arguments.length<2&&(t=c);while(++s<o)t.call(r,i=e[s],s)?r=[]:(r.length||n.push(r),r.push(i));return n},d3.range=function(e,t,n){arguments.length<3&&(n=1,arguments.length<2&&(t=e,e=0));if((t-e)/n===Infinity)throw new Error("infinite range");var r=[],i=p(Math.abs(n)),s=-1,o;e*=i,t*=i,n*=i;if(n<0)while((o=e+n*++s)>t)r.push(o/i);else while((o=e+n*++s)<t)r.push(o/i);return r},d3.requote=function(e){return e.replace(es,"\\$&")};var es=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;d3.round=function(e,t){return t?Math.round(e*(t=Math.pow(10,t)))/t:Math.round(e)},d3.xhr=function(e,t,n){var r=new XMLHttpRequest;arguments.length<3?(n=t,t=null):t&&r.overrideMimeType&&r.overrideMimeType(t),r.open("GET",e,!0),t&&r.setRequestHeader("Accept",t),r.onreadystatechange=function(){if(r.readyState===4){var e=r.status;n(!e&&r.response||e>=200&&e<300||e===304?r:null)}},r.send(null)},d3.text=function(e,t,n){function r(e){n(e&&e.responseText)}arguments.length<3&&(n=t,t=null),d3.xhr(e,t,r)},d3.json=function(e,t){d3.text(e,"application/json",function(e){t(e?JSON.parse(e):null)})},d3.html=function(e,t){d3.text(e,"text/html",function(e){if(e!=null){var n=document.createRange();n.selectNode(document.body),e=n.createContextualFragment(e)}t(e)})},d3.xml=function(e,t,n){function r(e){n(e&&e.responseXML)}arguments.length<3&&(n=t,t=null),d3.xhr(e,t,r)};var ts={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};d3.ns={prefix:ts,qualify:function(e){var t=e.indexOf(":"),n=e;return t>=0&&(n=e.substring(0,t),e=e.substring(t+1)),ts.hasOwnProperty(n)?{space:ts[n],local:e}:e}},d3.dispatch=function(){var e=new d,t=-1,n=arguments.length;while(++t<n)e[arguments[t]]=v(e);return e},d.prototype.on=function(e,t){var n=e.indexOf("."),r="";return n>0&&(r=e.substring(n+1),e=e.substring(0,n)),arguments.length<2?this[e].on(r):this[e].on(r,t)},d3.format=function(e){var t=ns.exec(e),n=t[1]||" ",r=t[3]||"",i=t[5],s=+t[6],o=t[7],u=t[8],a=t[9],f=1,l="",c=!1;u&&(u=+u.substring(1)),i&&(n="0",o&&(s-=Math.floor((s-1)/4)));switch(a){case"n":o=!0,a="g";break;case"%":f=100,l="%",a="f";break;case"p":f=100,l="%",a="r";break;case"d":c=!0,u=0;break;case"s":f=-1,a="r"}return a=="r"&&!u&&(a="g"),a=rs.get(a)||g,function(e){if(c&&e%1)return"";var t=e<0&&(e=-e)?"-":r;if(f<0){var h=d3.formatPrefix(e,u);e=h.scale(e),l=h.symbol}else e*=f;e=a(e,u);if(i){var p=e.length+t.length;p<s&&(e=(new Array(s-p+1)).join(n)+e),o&&(e=y(e)),e=t+e}else{o&&(e=y(e)),e=t+e;var p=e.length;p<s&&(e=(new Array(s-p+1)).join(n)+e)}return e+l}};var ns=/(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,rs=d3.map({g:function(e,t){return e.toPrecision(t)},e:function(e,t){return e.toExponential(t)},f:function(e,t){return e.toFixed(t)},r:function(e,t){return d3.round(e,t=m(e,t)).toFixed(Math.max(0,Math.min(20,t)))}}),is=["y","z","a","f","p","n","μ","m","","k","M","G","T","P","E","Z","Y"].map(b);d3.formatPrefix=function(e,t){var n=0;return e&&(e<0&&(e*=-1),t&&(e=d3.round(e,m(e,t))),n=1+Math.floor(1e-12+Math.log(e)/Math.LN10),n=Math.max(-24,Math.min(24,Math.floor((n<=0?n+1:n-1)/3)*3))),is[8+n/3]};var ss=T(2),os=T(3),us=function(){return x},as=d3.map({linear:us,poly:T,quad:function(){return ss},cubic:function(){return os},sin:function(){return N},exp:function(){return C},circle:function(){return k},elastic:L,back:A,bounce:function(){return O}}),fs=d3.map({"in":x,out:E,"in-out":S,"out-in":function(e){return S(E(e))}});d3.ease=function(e){var t=e.indexOf("-"),n=t>=0?e.substring(0,t):e,r=t>=0?e.substring(t+1):"in";return n=as.get(n)||us,r=fs.get(r)||x,w(r(n.apply(null,Array.prototype.slice.call(arguments,1))))},d3.event=null,d3.transform=function(e){var t=document.createElementNS(d3.ns.prefix.svg,"g");return(d3.transform=function(e){t.setAttribute("transform",e);var n=t.transform.baseVal.consolidate();return new P(n?n.matrix:cs)})(e)},P.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var ls=180/Math.PI,cs={a:1,b:0,c:0,d:1,e:0,f:0};d3.interpolate=function(e,t){var n=d3.interpolators.length,r;while(--n>=0&&!(r=d3.interpolators[n](e,t)));return r},d3.interpolateNumber=function(e,t){return t-=e,function(n){return e+t*n}},d3.interpolateRound=function(e,t){return t-=e,function(n){return Math.round(e+t*n)}},d3.interpolateString=function(e,t){var n,r,i,s=0,o=0,u=[],a=[],f,l;hs.lastIndex=0;for(r=0;n=hs.exec(t);++r)n.index&&u.push(t.substring(s,o=n.index)),a.push({i:u.length,x:n[0]}),u.push(null),s=hs.lastIndex;s<t.length&&u.push(t.substring(s));for(r=0,f=a.length;(n=hs.exec(e))&&r<f;++r){l=a[r];if(l.x==n[0]){if(l.i)if(u[l.i+1]==null){u[l.i-1]+=l.x,u.splice(l.i,1);for(i=r+1;i<f;++i)a[i].i--}else{u[l.i-1]+=l.x+u[l.i+1],u.splice(l.i,2);for(i=r+1;i<f;++i)a[i].i-=2}else if(u[l.i+1]==null)u[l.i]=l.x;else{u[l.i]=l.x+u[l.i+1],u.splice(l.i+1,1);for(i=r+1;i<f;++i)a[i].i--}a.splice(r,1),f--,r--}else l.x=d3.interpolateNumber(parseFloat(n[0]),parseFloat(l.x))}while(r<f)l=a.pop(),u[l.i+1]==null?u[l.i]=l.x:(u[l.i]=l.x+u[l.i+1],u.splice(l.i+1,1)),f--;return u.length===1?u[0]==null?a[0].x:function(){return t}:function(e){for(r=0;r<f;++r)u[(l=a[r]).i]=l.x(e);return u.join("")}},d3.interpolateTransform=function(e,t){var n=[],r=[],i,s=d3.transform(e),o=d3.transform(t),u=s.translate,a=o.translate,f=s.rotate,l=o.rotate,c=s.skew,h=o.skew,p=s.scale,d=o.scale;return u[0]!=a[0]||u[1]!=a[1]?(n.push("translate(",null,",",null,")"),r.push({i:1,x:d3.interpolateNumber(u[0],a[0])},{i:3,x:d3.interpolateNumber(u[1],a[1])})):a[0]||a[1]?n.push("translate("+a+")"):n.push(""),f!=l?(f-l>180?l+=360:l-f>180&&(f+=360),r.push({i:n.push(n.pop()+"rotate(",null,")")-2,x:d3.interpolateNumber(f,l)})):l&&n.push(n.pop()+"rotate("+l+")"),c!=h?r.push({i:n.push(n.pop()+"skewX(",null,")")-2,x:d3.interpolateNumber(c,h)}):h&&n.push(n.pop()+"skewX("+h+")"),p[0]!=d[0]||p[1]!=d[1]?(i=n.push(n.pop()+"scale(",null,",",null,")"),r.push({i:i-4,x:d3.interpolateNumber(p[0],d[0])},{i:i-2,x:d3.interpolateNumber(p[1],d[1])})):(d[0]!=1||d[1]!=1)&&n.push(n.pop()+"scale("+d+")"),i=r.length,function(e){var t=-1,s;while(++t<i)n[(s=r[t]).i]=s.x(e);return n.join("")}},d3.interpolateRgb=function(e,t){e=d3.rgb(e),t=d3.rgb(t);var n=e.r,r=e.g,i=e.b,s=t.r-n,o=t.g-r,u=t.b-i;return function(e){return"#"+W(Math.round(n+s*e))+W(Math.round(r+o*e))+W(Math.round(i+u*e))}},d3.interpolateHsl=function(e,t){e=d3.hsl(e),t=d3.hsl(t);var n=e.h,r=e.s,i=e.l,s=t.h-n,o=t.s-r,u=t.l-i;return s>180?s-=360:s<-180&&(s+=360),function(e){return Y(n+s*e,r+o*e,i+u*e)+""}},d3.interpolateLab=function(e,t){e=d3.lab(e),t=d3.lab(t);var n=e.l,r=e.a,i=e.b,s=t.l-n,o=t.a-r,u=t.b-i;return function(e){return it(n+s*e,r+o*e,i+u*e)+""}},d3.interpolateHcl=function(e,t){e=d3.hcl(e),t=d3.hcl(t);var n=e.h,r=e.c,i=e.l,s=t.h-n,o=t.c-r,u=t.l-i;return s>180?s-=360:s<-180&&(s+=360),function(e){return tt(n+s*e,r+o*e,i+u*e)+""}},d3.interpolateArray=function(e,t){var n=[],r=[],i=e.length,s=t.length,o=Math.min(e.length,t.length),u;for(u=0;u<o;++u)n.push(d3.interpolate(e[u],t[u]));for(;u<i;++u)r[u]=e[u];for(;u<s;++u)r[u]=t[u];return function(e){for(u=0;u<o;++u)r[u]=n[u](e);return r}},d3.interpolateObject=function(e,t){var n={},r={},i;for(i in e)i in t?n[i]=F(i)(e[i],t[i]):r[i]=e[i];for(i in t)i in e||(r[i]=t[i]);return function(e){for(i in n)r[i]=n[i](e);return r}};var hs=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;d3.interpolators=[d3.interpolateObject,function(e,t){return t instanceof Array&&d3.interpolateArray(e,t)},function(e,t){return(typeof e=="string"||typeof t=="string")&&d3.interpolateString(e+"",t+"")},function(e,t){return(typeof t=="string"?ds.has(t)||/^(#|rgb\(|hsl\()/.test(t):t instanceof R)&&d3.interpolateRgb(e,t)},function(e,t){return!isNaN(e=+e)&&!isNaN(t=+t)&&d3.interpolateNumber(e,t)}],R.prototype.toString=function(){return this.rgb()+""},d3.rgb=function(e,t,n){return arguments.length===1?e instanceof z?U(e.r,e.g,e.b):X(""+e,U,Y):U(~~e,~~t,~~n)};var ps=z.prototype=new R;ps.brighter=function(e){e=Math.pow(.7,arguments.length?e:1);var t=this.r,n=this.g,r=this.b,i=30;return!t&&!n&&!r?U(i,i,i):(t&&t<i&&(t=i),n&&n<i&&(n=i),r&&r<i&&(r=i),U(Math.min(255,Math.floor(t/e)),Math.min(255,Math.floor(n/e)),Math.min(255,Math.floor(r/e))))},ps.darker=function(e){return e=Math.pow(.7,arguments.length?e:1),U(Math.floor(e*this.r),Math.floor(e*this.g),Math.floor(e*this.b))},ps.hsl=function(){return V(this.r,this.g,this.b)},ps.toString=function(){return"#"+W(this.r)+W(this.g)+W(this.b)};var ds=d3.map({aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"});ds.forEach(function(e,t){ds.set(e,X(t,U,Y))}),d3.hsl=function(e,t,n){return arguments.length===1?e instanceof G?Q(e.h,e.s,e.l):X(""+e,V,Q):Q(+e,+t,+n)};var vs=G.prototype=new R;vs.brighter=function(e){return e=Math.pow(.7,arguments.length?e:1),Q(this.h,this.s,this.l/e)},vs.darker=function(e){return e=Math.pow(.7,arguments.length?e:1),Q(this.h,this.s,e*this.l)},vs.rgb=function(){return Y(this.h,this.s,this.l)},d3.hcl=function(e,t,n){return arguments.length===1?e instanceof et?Z(e.h,e.c,e.l):e instanceof rt?st(e.l,e.a,e.b):st((e=$((e=d3.rgb(e)).r,e.g,e.b)).l,e.a,e.b):Z(+e,+t,+n)};var ms=et.prototype=new R;ms.brighter=function(e){return Z(this.h,this.c,Math.min(100,this.l+gs*(arguments.length?e:1)))},ms.darker=function(e){return Z(this.h,this.c,Math.max(0,this.l-gs*(arguments.length?e:1)))},ms.rgb=function(){return tt(this.h,this.c,this.l).rgb()},d3.lab=function(e,t,n){return arguments.length===1?e instanceof rt?nt(e.l,e.a,e.b):e instanceof et?tt(e.l,e.c,e.h):$((e=d3.rgb(e)).r,e.g,e.b):nt(+e,+t,+n)};var gs=18,ys=.95047,bs=1,ws=1.08883,Es=rt.prototype=new R;Es.brighter=function(e){return nt(Math.min(100,this.l+gs*(arguments.length?e:1)),this.a,this.b)},Es.darker=function(e){return nt(Math.max(0,this.l-gs*(arguments.length?e:1)),this.a,this.b)},Es.rgb=function(){return it(this.l,this.a,this.b)};var Ss=function(e,t){return t.querySelector(e)},xs=function(e,t){return t.querySelectorAll(e)},Ts=document.documentElement,Ns=Ts.matchesSelector||Ts.webkitMatchesSelector||Ts.mozMatchesSelector||Ts.msMatchesSelector||Ts.oMatchesSelector,Cs=function(e,t){return Ns.call(e,t)};typeof Sizzle=="function"&&(Ss=function(e,t){return Sizzle(e,t)[0]||null},xs=function(e,t){return Sizzle.uniqueSort(Sizzle(e,t))},Cs=Sizzle.matchesSelector);var ks=[];d3.selection=function(){return Ls},d3.selection.prototype=ks,ks.select=function(e){var t=[],n,r,i,s;typeof e!="function"&&(e=lt(e));for(var o=-1,u=this.length;++o<u;){t.push(n=[]),n.parentNode=(i=this[o]).parentNode;for(var a=-1,f=i.length;++a<f;)(s=i[a])?(n.push(r=e.call(s,s.__data__,a)),r&&"__data__"in s&&(r.__data__=s.__data__)):n.push(null)}return ft(t)},ks.selectAll=function(e){var t=[],n,r;typeof e!="function"&&(e=ct(e));for(var i=-1,s=this.length;++i<s;)for(var o=this[i],u=-1,a=o.length;++u<a;)if(r=o[u])t.push(n=Ji(e.call(r,r.__data__,u))),n.parentNode=r;return ft(t)},ks.attr=function(e,t){if(arguments.length<2){if(typeof e=="string"){var n=this.node();return e=d3.ns.qualify(e),e.local?n.getAttributeNS(e.space,e.local):n.getAttribute(e)}for(t in e)this.each(ht(t,e[t]));return this}return this.each(ht(e,t))},ks.classed=function(e,t){if(arguments.length<2){if(typeof e=="string"){var n=this.node(),r=(e=e.trim().split(/^|\s+/g)).length,i=-1;if(t=n.classList){while(++i<r)if(!t.contains(e[i]))return!1}else{t=n.className,t.baseVal!=null&&(t=t.baseVal);while(++i<r)if(!pt(e[i]).test(t))return!1}return!0}for(t in e)this.each(dt(t,e[t]));return this}return this.each(dt(e,t))},ks.style=function(e,t,n){var r=arguments.length;if(r<3){if(typeof e!="string"){r<2&&(t="");for(n in e)this.each(mt(n,e[n],t));return this}if(r<2)return window.getComputedStyle(this.node(),null).getPropertyValue(e);n=""}return this.each(mt(e,t,n))},ks.property=function(e,t){if(arguments.length<2){if(typeof e=="string")return this.node()[e];for(t in e)this.each(gt(t,e[t]));return this}return this.each(gt(e,t))},ks.text=function(e){return arguments.length<1?this.node().textContent:this.each(typeof e=="function"?function(){var t=e.apply(this,arguments);this.textContent=t==null?"":t}:e==null?function(){this.textContent=""}:function(){this.textContent=e})},ks.html=function(e){return arguments.length<1?this.node().innerHTML:this.each(typeof e=="function"?function(){var t=e.apply(this,arguments);this.innerHTML=t==null?"":t}:e==null?function(){this.innerHTML=""}:function(){this.innerHTML=e})},ks.append=function(e){function t(){return this.appendChild(document.createElementNS(this.namespaceURI,e))}function n(){return this.appendChild(document.createElementNS(e.space,e.local))}return e=d3.ns.qualify(e),this.select(e.local?n:t)},ks.insert=function(e,t){function n(){return this.insertBefore(document.createElementNS(this.namespaceURI,e),Ss(t,this))}function r(){return this.insertBefore(document.createElementNS(e.space,e.local),Ss(t,this))}return e=d3.ns.qualify(e),this.select(e.local?r:n)},ks.remove=function(){return this.each(function(){var e=this.parentNode;e&&e.removeChild(this)})},ks.data=function(e,t){function n(e,n){var i,s=e.length,o=n.length,u=Math.min(s,o),c=Math.max(s,o),h=[],p=[],d=[],v,m;if(t){var g=new r,y=[],b,w=n.length;for(i=-1;++i<s;)b=t.call(v=e[i],v.__data__,i),g.has(b)?d[w++]=v:g.set(b,v),y.push(b);for(i=-1;++i<o;)b=t.call(n,m=n[i],i),g.has(b)?(h[i]=v=g.get(b),v.__data__=m,p[i]=d[i]=null):(p[i]=yt(m),h[i]=d[i]=null),g.remove(b);for(i=-1;++i<s;)g.has(y[i])&&(d[i]=e[i])}else{for(i=-1;++i<u;)v=e[i],m=n[i],v?(v.__data__=m,h[i]=v,p[i]=d[i]=null):(p[i]=yt(m),h[i]=d[i]=null);for(;i<o;++i)p[i]=yt(n[i]),h[i]=d[i]=null;for(;i<c;++i)d[i]=e[i],p[i]=h[i]=null}p.update=h,p.parentNode=h.parentNode=d.parentNode=e.parentNode,a.push(p),f.push(h),l.push(d)}var i=-1,s=this.length,o,u;if(!arguments.length){e=new Array(s=(o=this[0]).length);while(++i<s)if(u=o[i])e[i]=u.__data__;return e}var a=xt([]),f=ft([]),l=ft([]);if(typeof e=="function")while(++i<s)n(o=this[i],e.call(o,o.parentNode.__data__,i));else while(++i<s)n(o=this[i],e);return f.enter=function(){return a},f.exit=function(){return l},f},ks.datum=ks.map=function(e){return arguments.length<1?this.property("__data__"):this.property("__data__",e)},ks.filter=function(e){var t=[],n,r,i;typeof e!="function"&&(e=bt(e));for(var s=0,o=this.length;s<o;s++){t.push(n=[]),n.parentNode=(r=this[s]).parentNode;for(var u=0,a=r.length;u<a;u++)(i=r[u])&&e.call(i,i.__data__,u)&&n.push(i)}return ft(t)},ks.order=function(){for(var e=-1,t=this.length;++e<t;)for(var n=this[e],r=n.length-1,i=n[r],s;--r>=0;)if(s=n[r])i&&i!==s.nextSibling&&i.parentNode.insertBefore(s,i),i=s;return this},ks.sort=function(e){e=wt.apply(this,arguments);for(var t=-1,n=this.length;++t<n;)this[t].sort(e);return this.order()},ks.on=function(e,t,n){var r=arguments.length;if(r<3){if(typeof e!="string"){r<2&&(t=!1);for(n in e)this.each(Et(n,e[n],t));return this}if(r<2)return(r=this.node()["__on"+e])&&r._;n=!1}return this.each(Et(e,t,n))},ks.each=function(e){return St(this,function(t,n,r){e.call(t,t.__data__,n,r)})},ks.call=function(e){return e.apply(this,(arguments[0]=this,arguments)),this},ks.empty=function(){return!this.node()},ks.node=function(e){for(var t=0,n=this.length;t<n;t++)for(var r=this[t],i=0,s=r.length;i<s;i++){var o=r[i];if(o)return o}return null},ks.transition=function(){var e=[],t,n;for(var r=-1,i=this.length;++r<i;){e.push(t=[]);for(var s=this[r],o=-1,u=s.length;++o<u;)t.push((n=s[o])?{node:n,delay:Bs,duration:js}:null)}return Tt(e,_s||++Ms,Date.now())};var Ls=ft([[document]]);Ls[0].parentNode=Ts,d3.select=function(e){return typeof e=="string"?Ls.select(e):ft([[e]])},d3.selectAll=function(e){return typeof e=="string"?Ls.selectAll(e):ft([Ji(e)])};var As=[];d3.selection.enter=xt,d3.selection.enter.prototype=As,As.append=ks.append,As.insert=ks.insert,As.empty=ks.empty,As.node=ks.node,As.select=function(e){var t=[],n,r,i,s,o;for(var u=-1,a=this.length;++u<a;){i=(s=this[u]).update,t.push(n=[]),n.parentNode=s.parentNode;for(var f=-1,l=s.length;++f<l;)(o=s[f])?(n.push(i[f]=r=e.call(s.parentNode,o.__data__,f)),r.__data__=o.__data__):n.push(null)}return ft(t)};var Os=[],Ms=0,_s=0,Ds=0,Ps=250,Hs=d3.ease("cubic-in-out"),Bs=Ds,js=Ps,Fs=Hs;Os.call=ks.call,d3.transition=function(e){return arguments.length?_s?e.transition():e:Ls.transition()},d3.transition.prototype=Os,Os.select=function(e){var t=[],n,r,i;typeof e!="function"&&(e=lt(e));for(var s=-1,o=this.length;++s<o;){t.push(n=[]);for(var u=this[s],a=-1,f=u.length;++a<f;)(i=u[a])&&(r=e.call(i.node,i.node.__data__,a))?("__data__"in i.node&&(r.__data__=i.node.__data__),n.push({node:r,delay:i.delay,duration:i.duration})):n.push(null)}return Tt(t,this.id,this.time).ease(this.ease())},Os.selectAll=function(e){var t=[],n,r,i;typeof e!="function"&&(e=ct(e));for(var s=-1,o=this.length;++s<o;)for(var u=this[s],a=-1,f=u.length;++a<f;)if(i=u[a]){r=e.call(i.node,i.node.__data__,a),t.push(n=[]);for(var l=-1,c=r.length;++l<c;)n.push({node:r[l],delay:i.delay,duration:i.duration})}return Tt(t,this.id,this.time).ease(this.ease())},Os.filter=function(e){var t=[],n,r,i;typeof e!="function"&&(e=bt(e));for(var s=0,o=this.length;s<o;s++){t.push(n=[]);for(var r=this[s],u=0,a=r.length;u<a;u++)(i=r[u])&&e.call(i.node,i.node.__data__,u)&&n.push(i)}return Tt(t,this.id,this.time).ease(this.ease())},Os.attr=function(e,t){if(arguments.length<2){for(t in e)this.attrTween(t,kt(e[t],t));return this}return this.attrTween(e,kt(t,e))},Os.attrTween=function(e,t){function n(e,n){var r=t.call(this,e,n,this.getAttribute(i));return r===Is?(this.removeAttribute(i),null):r&&function(e){this.setAttribute(i,r(e))}}function r(e,n){var r=t.call(this,e,n,this.getAttributeNS(i.space,i.local));return r===Is?(this.removeAttributeNS(i.space,i.local),null):r&&function(e){this.setAttributeNS(i.space,i.local,r(e))}}var i=d3.ns.qualify(e);return this.tween("attr."+e,i.local?r:n)},Os.style=function(e,t,n){var r=arguments.length;if(r<3){if(typeof e!="string"){r<2&&(t="");for(n in e)this.styleTween(n,kt(e[n],n),t);return this}n=""}return this.styleTween(e,kt(t,e),n)},Os.styleTween=function(e,t,n){return arguments.length<3&&(n=""),this.tween("style."+e,function(r,i){var s=t.call(this,r,i,window.getComputedStyle(this,null).getPropertyValue(e));return s===Is?(this.style.removeProperty(e),null):s&&function(t){this.style.setProperty(e,s(t),n)}})},Os.text=function(e){return this.tween("text",function(t,n){this.textContent=typeof e=="function"?e.call(this,t,n):e})},Os.remove=function(){return this.each("end.transition",function(){var e;!this.__transition__&&(e=this.parentNode)&&e.removeChild(this)})},Os.delay=function(e){return St(this,typeof e=="function"?function(t,n,r){t.delay=e.call(t=t.node,t.__data__,n,r)|0}:(e|=0,function(t){t.delay=e}))},Os.duration=function(e){return St(this,typeof e=="function"?function(t,n,r){t.duration=Math.max(1,e.call(t=t.node,t.__data__,n,r)|0)}:(e=Math.max(1,e|0),function(t){t.duration=e}))},Os.transition=function(){return this.select(s)},d3.tween=function(e,t){function n(n,r,i){var s=e.call(this,n,r);return s==null?i!=""&&Is:i!=s&&t(i,s+"")}function r(n,r,i){return i!=e&&t(i,e)}return typeof e=="function"?n:e==null?Ct:(e+="",r)};var Is={},qs=0,Rs={},Us=null,zs,Ws;d3.timer=function(e,t,n){if(arguments.length<3){if(arguments.length<2)t=0;else if(!isFinite(t))return;n=Date.now()}var r=Rs[e.id];r&&r.callback===e?(r.then=n,r.delay=t):Rs[e.id=++qs]=Us={callback:e,then:n,delay:t,next:Us},zs||(Ws=clearTimeout(Ws),zs=1,Xs(Lt))},d3.timer.flush=function(){var e,t=Date.now(),n=Us;while(n)e=t-n.then,n.delay||(n.flush=n.callback(e)),n=n.next;At()};var Xs=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e){setTimeout
-(e,17)};d3.mouse=function(e){return Ot(e,_())};var Vs=/WebKit/.test(navigator.userAgent)?-1:0;d3.touches=function(e,t){return arguments.length<2&&(t=_().touches),t?Ji(t).map(function(t){var n=Ot(e,t);return n.identifier=t.identifier,n}):[]},d3.scale={},d3.scale.linear=function(){return Bt([0,1],[0,1],d3.interpolate,!1)},d3.scale.log=function(){return Wt(d3.scale.linear(),Xt)};var $s=d3.format(".0e");Xt.pow=function(e){return Math.pow(10,e)},Vt.pow=function(e){return-Math.pow(10,-e)},d3.scale.pow=function(){return $t(d3.scale.linear(),1)},d3.scale.sqrt=function(){return d3.scale.pow().exponent(.5)},d3.scale.ordinal=function(){return Kt([],{t:"range",a:[[]]})},d3.scale.category10=function(){return d3.scale.ordinal().range(Js)},d3.scale.category20=function(){return d3.scale.ordinal().range(Ks)},d3.scale.category20b=function(){return d3.scale.ordinal().range(Qs)},d3.scale.category20c=function(){return d3.scale.ordinal().range(Gs)};var Js=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],Ks=["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"],Qs=["#393b79","#5254a3","#6b6ecf","#9c9ede","#637939","#8ca252","#b5cf6b","#cedb9c","#8c6d31","#bd9e39","#e7ba52","#e7cb94","#843c39","#ad494a","#d6616b","#e7969c","#7b4173","#a55194","#ce6dbd","#de9ed6"],Gs=["#3182bd","#6baed6","#9ecae1","#c6dbef","#e6550d","#fd8d3c","#fdae6b","#fdd0a2","#31a354","#74c476","#a1d99b","#c7e9c0","#756bb1","#9e9ac8","#bcbddc","#dadaeb","#636363","#969696","#bdbdbd","#d9d9d9"];d3.scale.quantile=function(){return Qt([],[])},d3.scale.quantize=function(){return Gt(0,1,[0,1])},d3.scale.threshold=function(){return Yt([.5],[0,1])},d3.scale.identity=function(){return Zt([0,1])},d3.svg={},d3.svg.arc=function(){function e(){var e=t.apply(this,arguments),s=n.apply(this,arguments),o=r.apply(this,arguments)+Ys,u=i.apply(this,arguments)+Ys,a=(u<o&&(a=o,o=u,u=a),u-o),f=a<Math.PI?"0":"1",l=Math.cos(o),c=Math.sin(o),h=Math.cos(u),p=Math.sin(u);return a>=Zs?e?"M0,"+s+"A"+s+","+s+" 0 1,1 0,"+ -s+"A"+s+","+s+" 0 1,1 0,"+s+"M0,"+e+"A"+e+","+e+" 0 1,0 0,"+ -e+"A"+e+","+e+" 0 1,0 0,"+e+"Z":"M0,"+s+"A"+s+","+s+" 0 1,1 0,"+ -s+"A"+s+","+s+" 0 1,1 0,"+s+"Z":e?"M"+s*l+","+s*c+"A"+s+","+s+" 0 "+f+",1 "+s*h+","+s*p+"L"+e*h+","+e*p+"A"+e+","+e+" 0 "+f+",0 "+e*l+","+e*c+"Z":"M"+s*l+","+s*c+"A"+s+","+s+" 0 "+f+",1 "+s*h+","+s*p+"L0,0"+"Z"}var t=en,n=tn,r=nn,i=rn;return e.innerRadius=function(n){return arguments.length?(t=u(n),e):t},e.outerRadius=function(t){return arguments.length?(n=u(t),e):n},e.startAngle=function(t){return arguments.length?(r=u(t),e):r},e.endAngle=function(t){return arguments.length?(i=u(t),e):i},e.centroid=function(){var e=(t.apply(this,arguments)+n.apply(this,arguments))/2,s=(r.apply(this,arguments)+i.apply(this,arguments))/2+Ys;return[Math.cos(s)*e,Math.sin(s)*e]},e};var Ys=-Math.PI/2,Zs=2*Math.PI-1e-6;d3.svg.line=function(){return sn(i)};var eo=d3.map({linear:an,"linear-closed":fn,"step-before":ln,"step-after":cn,basis:gn,"basis-open":yn,"basis-closed":bn,bundle:wn,cardinal:dn,"cardinal-open":hn,"cardinal-closed":pn,monotone:Cn});eo.forEach(function(e,t){t.key=e,t.closed=/-closed$/.test(e)});var to=[0,2/3,1/3,0],no=[0,1/3,2/3,0],ro=[0,1/6,2/3,1/6];d3.svg.line.radial=function(){var e=sn(kn);return e.radius=e.x,delete e.x,e.angle=e.y,delete e.y,e},ln.reverse=cn,cn.reverse=ln,d3.svg.area=function(){return Ln(i)},d3.svg.area.radial=function(){var e=Ln(kn);return e.radius=e.x,delete e.x,e.innerRadius=e.x0,delete e.x0,e.outerRadius=e.x1,delete e.x1,e.angle=e.y,delete e.y,e.startAngle=e.y0,delete e.y0,e.endAngle=e.y1,delete e.y1,e},d3.svg.chord=function(){function e(e,u){var a=t(this,s,e,u),f=t(this,o,e,u);return"M"+a.p0+r(a.r,a.p1,a.a1-a.a0)+(n(a,f)?i(a.r,a.p1,a.r,a.p0):i(a.r,a.p1,f.r,f.p0)+r(f.r,f.p1,f.a1-f.a0)+i(f.r,f.p1,a.r,a.p0))+"Z"}function t(e,t,n,r){var i=t.call(e,n,r),s=a.call(e,i,r),o=f.call(e,i,r)+Ys,u=l.call(e,i,r)+Ys;return{r:s,a0:o,a1:u,p0:[s*Math.cos(o),s*Math.sin(o)],p1:[s*Math.cos(u),s*Math.sin(u)]}}function n(e,t){return e.a0==t.a0&&e.a1==t.a1}function r(e,t,n){return"A"+e+","+e+" 0 "+ +(n>Math.PI)+",1 "+t}function i(e,t,n,r){return"Q 0,0 "+r}var s=An,o=On,a=Mn,f=nn,l=rn;return e.radius=function(t){return arguments.length?(a=u(t),e):a},e.source=function(t){return arguments.length?(s=u(t),e):s},e.target=function(t){return arguments.length?(o=u(t),e):o},e.startAngle=function(t){return arguments.length?(f=u(t),e):f},e.endAngle=function(t){return arguments.length?(l=u(t),e):l},e},d3.svg.diagonal=function(){function e(e,i){var s=t.call(this,e,i),o=n.call(this,e,i),u=(s.y+o.y)/2,a=[s,{x:s.x,y:u},{x:o.x,y:u},o];return a=a.map(r),"M"+a[0]+"C"+a[1]+" "+a[2]+" "+a[3]}var t=An,n=On,r=Pn;return e.source=function(n){return arguments.length?(t=u(n),e):t},e.target=function(t){return arguments.length?(n=u(t),e):n},e.projection=function(t){return arguments.length?(r=t,e):r},e},d3.svg.diagonal.radial=function(){var e=d3.svg.diagonal(),t=Pn,n=e.projection;return e.projection=function(e){return arguments.length?n(Hn(t=e)):t},e},d3.svg.mouse=d3.mouse,d3.svg.touches=d3.touches,d3.svg.symbol=function(){function e(e,r){return(io.get(t.call(this,e,r))||Fn)(n.call(this,e,r))}var t=jn,n=Bn;return e.type=function(n){return arguments.length?(t=u(n),e):t},e.size=function(t){return arguments.length?(n=u(t),e):n},e};var io=d3.map({circle:Fn,cross:function(e){var t=Math.sqrt(e/5)/2;return"M"+ -3*t+","+ -t+"H"+ -t+"V"+ -3*t+"H"+t+"V"+ -t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+ -t+"V"+t+"H"+ -3*t+"Z"},diamond:function(e){var t=Math.sqrt(e/(2*oo)),n=t*oo;return"M0,"+ -t+"L"+n+",0"+" 0,"+t+" "+ -n+",0"+"Z"},square:function(e){var t=Math.sqrt(e)/2;return"M"+ -t+","+ -t+"L"+t+","+ -t+" "+t+","+t+" "+ -t+","+t+"Z"},"triangle-down":function(e){var t=Math.sqrt(e/so),n=t*so/2;return"M0,"+n+"L"+t+","+ -n+" "+ -t+","+ -n+"Z"},"triangle-up":function(e){var t=Math.sqrt(e/so),n=t*so/2;return"M0,"+ -n+"L"+t+","+n+" "+ -t+","+n+"Z"}});d3.svg.symbolTypes=io.keys();var so=Math.sqrt(3),oo=Math.tan(30*Math.PI/180);d3.svg.axis=function(){function e(e){e.each(function(){var e=d3.select(this),c=a==null?t.ticks?t.ticks.apply(t,u):t.domain():a,h=f==null?t.tickFormat?t.tickFormat.apply(t,u):String:f,p=Rn(t,c,l),d=e.selectAll(".minor").data(p,String),v=d.enter().insert("line","g").attr("class","tick minor").style("opacity",1e-6),m=d3.transition(d.exit()).style("opacity",1e-6).remove(),g=d3.transition(d).style("opacity",1),y=e.selectAll("g").data(c,String),b=y.enter().insert("g","path").style("opacity",1e-6),w=d3.transition(y.exit()).style("opacity",1e-6).remove(),E=d3.transition(y).style("opacity",1),S,x=Dt(t),T=e.selectAll(".domain").data([0]),N=T.enter().append("path").attr("class","domain"),C=d3.transition(T),k=t.copy(),L=this.__chart__||k;this.__chart__=k,b.append("line").attr("class","tick"),b.append("text");var A=b.select("line"),O=E.select("line"),M=y.select("text").text(h),_=b.select("text"),D=E.select("text");switch(n){case"bottom":S=In,v.attr("y2",i),g.attr("x2",0).attr("y2",i),A.attr("y2",r),_.attr("y",Math.max(r,0)+o),O.attr("x2",0).attr("y2",r),D.attr("x",0).attr("y",Math.max(r,0)+o),M.attr("dy",".71em").attr("text-anchor","middle"),C.attr("d","M"+x[0]+","+s+"V0H"+x[1]+"V"+s);break;case"top":S=In,v.attr("y2",-i),g.attr("x2",0).attr("y2",-i),A.attr("y2",-r),_.attr("y",-(Math.max(r,0)+o)),O.attr("x2",0).attr("y2",-r),D.attr("x",0).attr("y",-(Math.max(r,0)+o)),M.attr("dy","0em").attr("text-anchor","middle"),C.attr("d","M"+x[0]+","+ -s+"V0H"+x[1]+"V"+ -s);break;case"left":S=qn,v.attr("x2",-i),g.attr("x2",-i).attr("y2",0),A.attr("x2",-r),_.attr("x",-(Math.max(r,0)+o)),O.attr("x2",-r).attr("y2",0),D.attr("x",-(Math.max(r,0)+o)).attr("y",0),M.attr("dy",".32em").attr("text-anchor","end"),C.attr("d","M"+ -s+","+x[0]+"H0V"+x[1]+"H"+ -s);break;case"right":S=qn,v.attr("x2",i),g.attr("x2",i).attr("y2",0),A.attr("x2",r),_.attr("x",Math.max(r,0)+o),O.attr("x2",r).attr("y2",0),D.attr("x",Math.max(r,0)+o).attr("y",0),M.attr("dy",".32em").attr("text-anchor","start"),C.attr("d","M"+s+","+x[0]+"H0V"+x[1]+"H"+s)}if(t.ticks)b.call(S,L),E.call(S,k),w.call(S,k),v.call(S,L),g.call(S,k),m.call(S,k);else{var P=k.rangeBand()/2,H=function(e){return k(e)+P};b.call(S,H),E.call(S,H)}})}var t=d3.scale.linear(),n="bottom",r=6,i=6,s=6,o=3,u=[10],a=null,f,l=0;return e.scale=function(n){return arguments.length?(t=n,e):t},e.orient=function(t){return arguments.length?(n=t,e):n},e.ticks=function(){return arguments.length?(u=arguments,e):u},e.tickValues=function(t){return arguments.length?(a=t,e):a},e.tickFormat=function(t){return arguments.length?(f=t,e):f},e.tickSize=function(t,n,o){if(!arguments.length)return r;var u=arguments.length-1;return r=+t,i=u>1?+n:r,s=u>0?+arguments[u]:r,e},e.tickPadding=function(t){return arguments.length?(o=+t,e):o},e.tickSubdivide=function(t){return arguments.length?(l=+t,e):l},e},d3.svg.brush=function(){function e(s){s.each(function(){var s=d3.select(this),f=s.selectAll(".background").data([0]),l=s.selectAll(".extent").data([0]),c=s.selectAll(".resize").data(a,String),h;s.style("pointer-events","all").on("mousedown.brush",i).on("touchstart.brush",i),f.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),l.enter().append("rect").attr("class","extent").style("cursor","move"),c.enter().append("g").attr("class",function(e){return"resize "+e}).style("cursor",function(e){return uo[e]}).append("rect").attr("x",function(e){return/[ew]$/.test(e)?-3:null}).attr("y",function(e){return/^[ns]/.test(e)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),c.style("display",e.empty()?"none":null),c.exit().remove(),o&&(h=Dt(o),f.attr("x",h[0]).attr("width",h[1]-h[0]),n(s)),u&&(h=Dt(u),f.attr("y",h[0]).attr("height",h[1]-h[0]),r(s)),t(s)})}function t(e){e.selectAll(".resize").attr("transform",function(e){return"translate("+f[+/e$/.test(e)][0]+","+f[+/^s/.test(e)][1]+")"})}function n(e){e.select(".extent").attr("x",f[0][0]),e.selectAll(".extent,.n>rect,.s>rect").attr("width",f[1][0]-f[0][0])}function r(e){e.select(".extent").attr("y",f[0][1]),e.selectAll(".extent,.e>rect,.w>rect").attr("height",f[1][1]-f[0][1])}function i(){function i(){var e=d3.event.changedTouches;return e?d3.touches(v,e)[0]:d3.mouse(v)}function a(){d3.event.keyCode==32&&(S||(x=null,T[0]-=f[1][0],T[1]-=f[1][1],S=2),M())}function c(){d3.event.keyCode==32&&S==2&&(T[0]+=f[1][0],T[1]+=f[1][1],S=0,M())}function h(){var e=i(),s=!1;N&&(e[0]+=N[0],e[1]+=N[1]),S||(d3.event.altKey?(x||(x=[(f[0][0]+f[1][0])/2,(f[0][1]+f[1][1])/2]),T[0]=f[+(e[0]<x[0])][0],T[1]=f[+(e[1]<x[1])][1]):x=null),w&&p(e,o,0)&&(n(y),s=!0),E&&p(e,u,1)&&(r(y),s=!0),s&&(t(y),g({type:"brush",mode:S?"move":"resize"}))}function p(e,t,n){var r=Dt(t),i=r[0],s=r[1],o=T[n],u=f[1][n]-f[0][n],a,c;S&&(i-=o,s-=u+o),a=Math.max(i,Math.min(s,e[n])),S?c=(a+=o)+u:(x&&(o=Math.max(i,Math.min(s,2*x[n]-a))),o<a?(c=a,a=o):c=o);if(f[0][n]!==a||f[1][n]!==c)return l=null,f[0][n]=a,f[1][n]=c,!0}function d(){h(),y.style("pointer-events","all").selectAll(".resize").style("display",e.empty()?"none":null),d3.select("body").style("cursor",null),C.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),g({type:"brushend"}),M()}var v=this,m=d3.select(d3.event.target),g=s.of(v,arguments),y=d3.select(v),b=m.datum(),w=!/^(n|s)$/.test(b)&&o,E=!/^(e|w)$/.test(b)&&u,S=m.classed("extent"),x,T=i(),N,C=d3.select(window).on("mousemove.brush",h).on("mouseup.brush",d).on("touchmove.brush",h).on("touchend.brush",d).on("keydown.brush",a).on("keyup.brush",c);if(S)T[0]=f[0][0]-T[0],T[1]=f[0][1]-T[1];else if(b){var k=+/w$/.test(b),L=+/^n/.test(b);N=[f[1-k][0]-T[0],f[1-L][1]-T[1]],T[0]=f[k][0],T[1]=f[L][1]}else d3.event.altKey&&(x=T.slice());y.style("pointer-events","none").selectAll(".resize").style("display",null),d3.select("body").style("cursor",m.style("cursor")),g({type:"brushstart"}),h(),M()}var s=D(e,"brushstart","brush","brushend"),o=null,u=null,a=ao[0],f=[[0,0],[0,0]],l;return e.x=function(t){return arguments.length?(o=t,a=ao[!o<<1|!u],e):o},e.y=function(t){return arguments.length?(u=t,a=ao[!o<<1|!u],e):u},e.extent=function(t){var n,r,i,s,a;return arguments.length?(l=[[0,0],[0,0]],o&&(n=t[0],r=t[1],u&&(n=n[0],r=r[0]),l[0][0]=n,l[1][0]=r,o.invert&&(n=o(n),r=o(r)),r<n&&(a=n,n=r,r=a),f[0][0]=n|0,f[1][0]=r|0),u&&(i=t[0],s=t[1],o&&(i=i[1],s=s[1]),l[0][1]=i,l[1][1]=s,u.invert&&(i=u(i),s=u(s)),s<i&&(a=i,i=s,s=a),f[0][1]=i|0,f[1][1]=s|0),e):(t=l||f,o&&(n=t[0][0],r=t[1][0],l||(n=f[0][0],r=f[1][0],o.invert&&(n=o.invert(n),r=o.invert(r)),r<n&&(a=n,n=r,r=a))),u&&(i=t[0][1],s=t[1][1],l||(i=f[0][1],s=f[1][1],u.invert&&(i=u.invert(i),s=u.invert(s)),s<i&&(a=i,i=s,s=a))),o&&u?[[n,i],[r,s]]:o?[n,r]:u&&[i,s])},e.clear=function(){return l=null,f[0][0]=f[0][1]=f[1][0]=f[1][1]=0,e},e.empty=function(){return o&&f[0][0]===f[1][0]||u&&f[0][1]===f[1][1]},d3.rebind(e,s,"on")};var uo={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},ao=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]];d3.behavior={},d3.behavior.drag=function(){function e(){this.on("mousedown.drag",t).on("touchstart.drag",t)}function t(){function e(){var e=o.parentNode;return f?d3.touches(e).filter(function(e){return e.identifier===f})[0]:d3.mouse(e)}function t(){if(!o.parentNode)return i();var t=e(),n=t[0]-c[0],r=t[1]-c[1];h|=n|r,c=t,M(),u({type:"drag",x:t[0]+l[0],y:t[1]+l[1],dx:n,dy:r})}function i(){u({type:"dragend"}),h&&(M(),d3.event.target===a&&p.on("click.drag",s,!0)),p.on(f?"touchmove.drag-"+f:"mousemove.drag",null).on(f?"touchend.drag-"+f:"mouseup.drag",null)}function s(){M(),p.on("click.drag",null)}var o=this,u=n.of(o,arguments),a=d3.event.target,f=d3.event.touches&&d3.event.changedTouches[0].identifier,l,c=e(),h=0,p=d3.select(window).on(f?"touchmove.drag-"+f:"mousemove.drag",t).on(f?"touchend.drag-"+f:"mouseup.drag",i,!0);r?(l=r.apply(o,arguments),l=[l.x-c[0],l.y-c[1]]):l=[0,0],f||M(),u({type:"dragstart"})}var n=D(e,"drag","dragstart","dragend"),r=null;return e.origin=function(t){return arguments.length?(r=t,e):r},d3.rebind(e,n,"on")},d3.behavior.zoom=function(){function e(){this.on("mousedown.zoom",o).on("mousewheel.zoom",u).on("mousemove.zoom",a).on("DOMMouseScroll.zoom",u).on("dblclick.zoom",f).on("touchstart.zoom",l).on("touchmove.zoom",c).on("touchend.zoom",l)}function t(e){return[(e[0]-h[0])/d,(e[1]-h[1])/d]}function n(e){return[e[0]*d+h[0],e[1]*d+h[1]]}function r(e){d=Math.max(m[0],Math.min(m[1],e))}function i(e,t){t=n(t),h[0]+=e[0]-t[0],h[1]+=e[1]-t[1]}function s(e){b&&b.domain(y.range().map(function(e){return(e-h[0])/d}).map(y.invert)),E&&E.domain(w.range().map(function(e){return(e-h[1])/d}).map(w.invert)),d3.event.preventDefault(),e({type:"zoom",scale:d,translate:h})}function o(){function e(){f=1,i(d3.mouse(o),c),s(u)}function n(){f&&M(),l.on("mousemove.zoom",null).on("mouseup.zoom",null),f&&d3.event.target===a&&l.on("click.zoom",r,!0)}function r(){M(),l.on("click.zoom",null)}var o=this,u=g.of(o,arguments),a=d3.event.target,f=0,l=d3.select(window).on("mousemove.zoom",e).on("mouseup.zoom",n),c=t(d3.mouse(o));window.focus(),M()}function u(){p||(p=t(d3.mouse(this))),r(Math.pow(2,Un()*.002)*d),i(d3.mouse(this),p),s(g.of(this,arguments))}function a(){p=null}function f(){var e=d3.mouse(this),n=t(e);r(d3.event.shiftKey?d/2:d*2),i(e,n),s(g.of(this,arguments))}function l(){var e=d3.touches(this),n=Date.now();v=d,p={},e.forEach(function(e){p[e.identifier]=t(e)}),M();if(e.length===1){if(n-S<500){var o=e[0],u=t(e[0]);r(d*2),i(o,u),s(g.of(this,arguments))}S=n}}function c(){var e=d3.touches(this),t=e[0],n=p[t.identifier];if(o=e[1]){var o,u=p[o.identifier];t=[(t[0]+o[0])/2,(t[1]+o[1])/2],n=[(n[0]+u[0])/2,(n[1]+u[1])/2],r(d3.event.scale*v)}i(t,n),S=null,s(g.of(this,arguments))}var h=[0,0],p,d=1,v,m=lo,g=D(e,"zoom"),y,b,w,E,S;return e.translate=function(t){return arguments.length?(h=t.map(Number),e):h},e.scale=function(t){return arguments.length?(d=+t,e):d},e.scaleExtent=function(t){return arguments.length?(m=t==null?lo:t.map(Number),e):m},e.x=function(t){return arguments.length?(b=t,y=t.copy(),e):b},e.y=function(t){return arguments.length?(E=t,w=t.copy(),e):E},d3.rebind(e,g,"on")};var fo,lo=[0,Infinity];d3.layout={},d3.layout.bundle=function(){return function(e){var t=[],n=-1,r=e.length;while(++n<r)t.push(zn(e[n]));return t}},d3.layout.chord=function(){function e(){var e={},n=[],c=d3.range(o),h=[],p,d,v,m,g;r=[],i=[],p=0,m=-1;while(++m<o){d=0,g=-1;while(++g<o)d+=s[m][g];n.push(d),h.push(d3.range(o)),p+=d}a&&c.sort(function(e,t){return a(n[e],n[t])}),f&&h.forEach(function(e,t){e.sort(function(e,n){return f(s[t][e],s[t][n])})}),p=(2*Math.PI-u*o)/p,d=0,m=-1;while(++m<o){v=d,g=-1;while(++g<o){var y=c[m],b=h[y][g],w=s[y][b],E=d,S=d+=w*p;e[y+"-"+b]={index:y,subindex:b,startAngle:E,endAngle:S,value:w}}i[y]={index:y,startAngle:v,endAngle:d,value:(d-v)/p},d+=u}m=-1;while(++m<o){g=m-1;while(++g<o){var x=e[m+"-"+g],T=e[g+"-"+m];(x.value||T.value)&&r.push(x.value<T.value?{source:T,target:x}:{source:x,target:T})}}l&&t()}function t(){r.sort(function(e,t){return l((e.source.value+e.target.value)/2,(t.source.value+t.target.value)/2)})}var n={},r,i,s,o,u=0,a,f,l;return n.matrix=function(e){return arguments.length?(o=(s=e)&&s.length,r=i=null,n):s},n.padding=function(e){return arguments.length?(u=e,r=i=null,n):u},n.sortGroups=function(e){return arguments.length?(a=e,r=i=null,n):a},n.sortSubgroups=function(e){return arguments.length?(f=e,r=null,n):f},n.sortChords=function(e){return arguments.length?(l=e,r&&t(),n):l},n.chords=function(){return r||e(),r},n.groups=function(){return i||e(),i},n},d3.layout.force=function(){function e(e){return function(t,n,r,i,s){if(t.point!==e){var o=t.cx-e.x,u=t.cy-e.y,a=1/Math.sqrt(o*o+u*u);if((i-n)*a<d){var f=t.charge*a*a;return e.px-=o*f,e.py-=u*f,!0}if(t.point&&isFinite(a)){var f=t.pointCharge*a*a;e.px-=o*f,e.py-=u*f}}return!t.charge}}function t(e){e.px=d3.event.x,e.py=d3.event.y,n.resume()}var n={},r=d3.dispatch("start","tick","end"),s=[1,1],o,a,f=.9,l=Gn,c=Yn,h=-30,p=.1,d=.8,v,m=[],g=[],y,b,w;return n.tick=function(){if((a*=.99)<.005)return r.end({type:"end",alpha:a=0}),!0;var t=m.length,n=g.length,i,o,u,l,c,d,v,E,S;for(o=0;o<n;++o){u=g[o],l=u.source,c=u.target,E=c.x-l.x,S=c.y-l.y;if(d=E*E+S*S)d=a*b[o]*((d=Math.sqrt(d))-y[o])/d,E*=d,S*=d,c.x-=E*(v=l.weight/(c.weight+l.weight)),c.y-=S*v,l.x+=E*(v=1-v),l.y+=S*v}if(v=a*p){E=s[0]/2,S=s[1]/2,o=-1;if(v)while(++o<t)u=m[o],u.x+=(E-u.x)*v,u.y+=(S-u.y)*v}if(h){Qn(i=d3.geom.quadtree(m),a,w),o=-1;while(++o<t)(u=m[o]).fixed||i.visit(e(u))}o=-1;while(++o<t)u=m[o],u.fixed?(u.x=u.px,u.y=u.py):(u.x-=(u.px-(u.px=u.x))*f,u.y-=(u.py-(u.py=u.y))*f);r.tick({type:"tick",alpha:a})},n.nodes=function(e){return arguments.length?(m=e,n):m},n.links=function(e){return arguments.length?(g=e,n):g},n.size=function(e){return arguments.length?(s=e,n):s},n.linkDistance=function(e){return arguments.length?(l=u(e),n):l},n.distance=n.linkDistance,n.linkStrength=function(e){return arguments.length?(c=u(e),n):c},n.friction=function(e){return arguments.length?(f=e,n):f},n.charge=function(e){return arguments.length?(h=typeof e=="function"?e:+e,n):h},n.gravity=function(e){return arguments.length?(p=e,n):p},n.theta=function(e){return arguments.length?(d=e,n):d},n.alpha=function(e){return arguments.length?(a?e>0?a=e:a=0:e>0&&(r.start({type:"start",alpha:a=e}),d3.timer(n.tick)),n):a},n.start=function(){function e(e,n){var i=t(r),s=-1,o=i.length,u;while(++s<o)if(!isNaN(u=i[s][e]))return u;return Math.random()*n}function t(){if(!p){p=[];for(i=0;i<o;++i)p[i]=[];for(i=0;i<u;++i){var e=g[i];p[e.source.index].push(e.target),p[e.target.index].push(e.source)}}return p[r]}var r,i,o=m.length,u=g.length,a=s[0],f=s[1],p,d;for(r=0;r<o;++r)(d=m[r]).index=r,d.weight=0;y=[],b=[];for(r=0;r<u;++r)d=g[r],typeof d.source=="number"&&(d.source=m[d.source]),typeof d.target=="number"&&(d.target=m[d.target]),y[r]=l.call(this,d,r),b[r]=c.call(this,d,r),++d.source.weight,++d.target.weight;for(r=0;r<o;++r)d=m[r],isNaN(d.x)&&(d.x=e("x",a)),isNaN(d.y)&&(d.y=e("y",f)),isNaN(d.px)&&(d.px=d.x),isNaN(d.py)&&(d.py=d.y);w=[];if(typeof h=="function")for(r=0;r<o;++r)w[r]=+h.call(this,m[r],r);else for(r=0;r<o;++r)w[r]=h;return n.resume()},n.resume=function(){return n.alpha(.1)},n.stop=function(){return n.alpha(0)},n.drag=function(){o||(o=d3.behavior.drag().origin(i).on("dragstart",Vn).on("drag",t).on("dragend",$n)),this.on("mouseover.force",Jn).on("mouseout.force",Kn).call(o)},d3.rebind(n,r,"on")},d3.layout.partition=function(){function e(t,n,r,i){var s=t.children;t.x=n,t.y=t.depth*i,t.dx=r,t.dy=i;if(s&&(u=s.length)){var o=-1,u,a,f;r=t.value?r/t.value:0;while(++o<u)e(a=s[o],n,f=a.value*r,i),n+=f}}function t(e){var n=e.children,r=0;if(n&&(s=n.length)){var i=-1,s;while(++i<s)r=Math.max(r,t(n[i]))}return 1+r}function n(n,s){var o=r.call(this,n,s);return e(o[0],0,i[0],i[1]/t(o[0])),o}var r=d3.layout.hierarchy(),i=[1,1];return n.size=function(e){return arguments.length?(i=e,n):i},lr(n,r)},d3.layout.pie=function(){function e(s,o){var u=s.map(function(n,r){return+t.call(e,n,r)}),a=+(typeof r=="function"?r.apply(this,arguments):r),f=((typeof i=="function"?i.apply(this,arguments):i)-r)/d3.sum(u),l=d3.range(s.length);n!=null&&l.sort(n===co?function(e,t){return u[t]-u[e]}:function(e,t){return n(s[e],s[t])});var c=[];return l.forEach(function(e){var t;c[e]={data:s[e],value:t=u[e],startAngle:a,endAngle:a+=t*f}}),c}var t=Number,n=co,r=0,i=2*Math.PI;return e.value=function(n){return arguments.length?(t=n,e):t},e.sort=function(t){return arguments.length?(n=t,e):n},e.startAngle=function(t){return arguments.length?(r=t,e):r},e.endAngle=function(t){return arguments.length?(i=t,e):i},e};var co={};d3.layout.stack=function(){function e(i,a){var f=i.map(function(n,r){return t.call(e,n,r)}),l=f.map(function(t,n){return t.map(function(t,n){return[o.call(e,t,n),u.call(e,t,n)]})}),c=n.call(e,l,a);f=d3.permute(f,c),l=d3.permute(l,c);var h=r.call(e,l,a),p=f.length,d=f[0].length,v,m,g;for(m=0;m<d;++m){s.call(e,f[0][m],g=h[m],l[0][m][1]);for(v=1;v<p;++v)s.call(e,f[v][m],g+=l[v-1][m][1],l[v][m][1])}return i}var t=i,n=nr,r=rr,s=tr,o=Zn,u=er;return e.values=function(n){return arguments.length?(t=n,e):t},e.order=function(t){return arguments.length?(n=typeof t=="function"?t:ho.get(t)||nr,e):n},e.offset=function(t){return arguments.length?(r=typeof t=="function"?t:po.get(t)||rr,e):r},e.x=function(t){return arguments.length?(o=t,e):o},e.y=function(t){return arguments.length?(u=t,e):u},e.out=function(t){return arguments.length?(s=t,e):s},e};var ho=d3.map({"inside-out":function(e){var t=e.length,n,r,i=e.map(ir),s=e.map(sr),o=d3.range(t).sort(function(e,t){return i[e]-i[t]}),u=0,a=0,f=[],l=[];for(n=0;n<t;++n)r=o[n],u<a?(u+=s[r],f.push(r)):(a+=s[r],l.push(r));return l.reverse().concat(f)},reverse:function(e){return d3.range(e.length).reverse()},"default":nr}),po=d3.map({silhouette:function(e){var t=e.length,n=e[0].length,r=[],i=0,s,o,u,a=[];for(o=0;o<n;++o){for(s=0,u=0;s<t;s++)u+=e[s][o][1];u>i&&(i=u),r.push(u)}for(o=0;o<n;++o)a[o]=(i-r[o])/2;return a},wiggle:function(e){var t=e.length,n=e[0],r=n.length,i=0,s,o,u,a,f,l,c,h,p,d=[];d[0]=h=p=0;for(o=1;o<r;++o){for(s=0,a=0;s<t;++s)a+=e[s][o][1];for(s=0,f=0,c=n[o][0]-n[o-1][0];s<t;++s){for(u=0,l=(e[s][o][1]-e[s][o-1][1])/(2*c);u<s;++u)l+=(e[u][o][1]-e[u][o-1][1])/c;f+=l*e[s][o][1]}d[o]=h-=a?f/a*c:0,h<p&&(p=h)}for(o=0;o<r;++o)d[o]-=p;return d},expand:function(e){var t=e.length,n=e[0].length,r=1/t,i,s,o,u=[];for(s=0;s<n;++s){for(i=0,o=0;i<t;i++)o+=e[i][s][1];if(o)for(i=0;i<t;i++)e[i][s][1]/=o;else for(i=0;i<t;i++)e[i][s][1]=r}for(s=0;s<n;++s)u[s]=0;return u},zero:rr});d3.layout.histogram=function(){function e(e,s){var o=[],u=e.map(n,this),a=r.call(this,u,s),f=i.call(this,a,u,s),l,s=-1,c=u.length,h=f.length-1,p=t?1:1/c,d;while(++s<h)l=o[s]=[],l.dx=f[s+1]-(l.x=f[s]),l.y=0;if(h>0){s=-1;while(++s<c)d=u[s],d>=a[0]&&d<=a[1]&&(l=o[d3.bisect(f,d,1,h)-1],l.y+=p,l.push(e[s]))}return o}var t=!0,n=Number,r=fr,i=ur;return e.value=function(t){return arguments.length?(n=t,e):n},e.range=function(t){return arguments.length?(r=u(t),e):r},e.bins=function(t){return arguments.length?(i=typeof t=="number"?function(e){return ar(e,t)}:u(t),e):i},e.frequency=function(n){return arguments.length?(t=!!n,e):t},e},d3.layout.hierarchy=function(){function e(t,o,u){var a=i.call(n,t,o),f=vo?t:{data:t};f.depth=o,u.push(f);if(a&&(c=a.length)){var l=-1,c,h=f.children=[],p=0,d=o+1,v;while(++l<c)v=e(a[l],d,u),v.parent=f,h.push(v),p+=v.value;r&&h.sort(r),s&&(f.value=p)}else s&&(f.value=+s.call(n,t,o)||0);return f}function t(e,r){var i=e.children,o=0;if(i&&(a=i.length)){var u=-1,a,f=r+1;while(++u<a)o+=t(i[u],f)}else s&&(o=+s.call(n,vo?e:e.data,r)||0);return s&&(e.value=o),o}function n(t){var n=[];return e(t,0,n),n}var r=pr,i=cr,s=hr;return n.sort=function(e){return arguments.length?(r=e,n):r},n.children=function(e){return arguments.length?(i=e,n):i},n.value=function(e){return arguments.length?(s=e,n):s},n.revalue=function(e){return t(e,0),e},n};var vo=!1;d3.layout.pack=function(){function e(e,i){var s=t.call(this,e,i),o=s[0];o.x=0,o.y=0,Hr(o,function(e){e.r=Math.sqrt(e.value)}),Hr(o,br);var u=r[0],a=r[1],f=Math.max(2*o.r/u,2*o.r/a);if(n>0){var l=n*f/2;Hr(o,function(e){e.r+=l}),Hr(o,br),Hr(o,function(e){e.r-=l}),f=Math.max(2*o.r/u,2*o.r/a)}return Sr(o,u/2,a/2,1/f),s}var t=d3.layout.hierarchy().sort(vr),n=0,r=[1,1];return e.size=function(t){return arguments.length?(r=t,e):r},e.padding=function(t){return arguments.length?(n=+t,e):n},lr(e,t)},d3.layout.cluster=function(){function e(e,i){var s=t.call(this,e,i),o=s[0],u,a=0,f,l;Hr(o,function(e){var t=e.children;t&&t.length?(e.x=Nr(t),e.y=Tr(t)):(e.x=u?a+=n(e,u):0,e.y=0,u=e)});var c=Cr(o),h=kr(o),p=c.x-n(c,h)/2,d=h.x+n(h,c)/2;return Hr(o,function(e){e.x=(e.x-p)/(d-p)*r[0],e.y=(1-(o.y?e.y/o.y:1))*r[1]}),s}var t=d3.layout.hierarchy().sort(null).value(null),n=Lr,r=[1,1];return e.separation=function(t){return arguments.length?(n=t,e):n},e.size=function(t){return arguments.length?(r=t,e):r},lr(e,t)},d3.layout.tree=function(){function e(e,i){function s(e,t){var r=e.children,i=e._tree;if(r&&(o=r.length)){var o,a=r[0],f,l=a,c,h=-1;while(++h<o)c=r[h],s(c,f),l=u(c,f,l),f=c;Br(e);var p=.5*(a._tree.prelim+c._tree.prelim);t?(i.prelim=t._tree.prelim+n(e,t),i.mod=i.prelim-p):i.prelim=p}else t&&(i.prelim=t._tree.prelim+n(e,t))}function o(e,t){e.x=e._tree.prelim+t;var n=e.children;if(n&&(i=n.length)){var r=-1,i;t+=e._tree.mod;while(++r<i)o(n[r],t)}}function u(e,t,r){if(t){var i=e,s=e,o=t,u=e.parent.children[0],a=i._tree.mod,f=s._tree.mod,l=o._tree.mod,c=u._tree.mod,h;while(o=Or(o),i=Ar(i),o&&i)u=Ar(u),s=Or(s),s._tree.ancestor=e,h=o._tree.prelim+l-i._tree.prelim-a+n(o,i),h>0&&(jr(Fr(o,e,r),e,h),a+=h,f+=h),l+=o._tree.mod,a+=i._tree.mod,c+=u._tree.mod,f+=s._tree.mod;o&&!Or(s)&&(s._tree.thread=o,s._tree.mod+=l-f),i&&!Ar(u)&&(u._tree.thread=i,u._tree.mod+=a-c,r=e)}return r}var a=t.call(this,e,i),f=a[0];Hr(f,function(e,t){e._tree={ancestor:e,prelim:0,mod:0,change:0,shift:0,number:t?t._tree.number+1:0}}),s(f),o(f,-f._tree.prelim);var l=Mr(f,Dr),c=Mr(f,_r),h=Mr(f,Pr),p=l.x-n(l,c)/2,d=c.x+n(c,l)/2,v=h.depth||1;return Hr(f,function(e){e.x=(e.x-p)/(d-p)*r[0],e.y=e.depth/v*r[1],delete e._tree}),a}var t=d3.layout.hierarchy().sort(null).value(null),n=Lr,r=[1,1];return e.separation=function(t){return arguments.length?(n=t,e):n},e.size=function(t){return arguments.length?(r=t,e):r},lr(e,t)},d3.layout.treemap=function(){function e(e,t){var n=-1,r=e.length,i,s;while(++n<r)s=(i=e[n]).value*(t<0?0:t),i.area=isNaN(s)||s<=0?0:s}function t(n){var s=n.children;if(s&&s.length){var o=l(n),u=[],a=s.slice(),f,c=Infinity,h,p=Math.min(o.dx,o.dy),d;e(a,o.dx*o.dy/n.value),u.area=0;while((d=a.length)>0)u.push(f=a[d-1]),u.area+=f.area,(h=r(u,p))<=c?(a.pop(),c=h):(u.area-=u.pop().area,i(u,p,o,!1),p=Math.min(o.dx,o.dy),u.length=u.area=0,c=Infinity);u.length&&(i(u,p,o,!0),u.length=u.area=0),s.forEach(t)}}function n(t){var r=t.children;if(r&&r.length){var s=l(t),o=r.slice(),u,a=[];e(o,s.dx*s.dy/t.value),a.area=0;while(u=o.pop())a.push(u),a.area+=u.area,u.z!=null&&(i(a,u.z?s.dx:s.dy,s,!o.length),a.length=a.area=0);r.forEach(n)}}function r(e,t){var n=e.area,r,i=0,s=Infinity,o=-1,u=e.length;while(++o<u){if(!(r=e[o].area))continue;r<s&&(s=r),r>i&&(i=r)}return n*=n,t*=t,n?Math.max(t*i*p/n,n/(t*s*p)):Infinity}function i(e,t,n,r){var i=-1,s=e.length,o=n.x,a=n.y,f=t?u(e.area/t):0,l;if(t==n.dx){if(r||f>n.dy)f=n.dy;while(++i<s)l=e[i],l.x=o,l.y=a,l.dy=f,o+=l.dx=Math.min(n.x+n.dx-o,f?u(l.area/f):0);l.z=!0,l.dx+=n.x+n.dx-o,n.y+=f,n.dy-=f}else{if(r||f>n.dx)f=n.dx;while(++i<s)l=e[i],l.x=o,l.y=a,l.dx=f,a+=l.dy=Math.min(n.y+n.dy-a,f?u(l.area/f):0);l.z=!1,l.dy+=n.y+n.dy-a,n.x+=f,n.dx-=f}}function s(r){var i=h||o(r),s=i[0];return s.x=0,s.y=0,s.dx=a[0],s.dy=a[1],h&&o.revalue(s),e([s],s.dx*s.dy/s.value),(h?n:t)(s),c&&(h=i),i}var o=d3.layout.hierarchy(),u=Math.round,a=[1,1],f=null,l=Ir,c=!1,h,p=.5*(1+Math.sqrt(5));return s.size=function(e){return arguments.length?(a=e,s):a},s.padding=function(e){function t(t){var n=e.call(s,t,t.depth);return n==null?Ir(t):qr(t,typeof n=="number"?[n,n,n,n]:n)}function n(t){return qr(t,e)}if(!arguments.length)return f;var r;return l=(f=e)==null?Ir:(r=typeof e)==="function"?t:r==="number"?(e=[e,e,e,e],n):n,s},s.round=function(e){return arguments.length?(u=e?Math.round:Number,s):u!=Number},s.sticky=function(e){return arguments.length?(c=e,h=null,s):c},s.ratio=function(e){return arguments.length?(p=e,s):p},lr(s,o)},d3.csv=Rr(",","text/csv"),d3.tsv=Rr("	","text/tab-separated-values"),d3.geo={};var mo=Math.PI/180;d3.geo.azimuthal=function(){function e(e){var n=e[0]*mo-s,o=e[1]*mo,f=Math.cos(n),l=Math.sin(n),c=Math.cos(o),h=Math.sin(o),p=t!=="orthographic"?a*h+u*c*f:null,d,v=t==="stereographic"?1/(1+p):t==="gnomonic"?1/p:t==="equidistant"?(d=Math.acos(p),d?d/Math.sin(d):0):t==="equalarea"?Math.sqrt(2/(1+p)):1,m=v*c*l,g=v*(a*c*f-u*h);return[r*m+i[0],r*g+i[1]]}var t="orthographic",n,r=200,i=[480,250],s,o,u,a;return e.invert=function(e){var n=(e[0]-i[0])/r,o=(e[1]-i[1])/r,f=Math.sqrt(n*n+o*o),l=t==="stereographic"?2*Math.atan(f):t==="gnomonic"?Math.atan(f):t==="equidistant"?f:t==="equalarea"?2*Math.asin(.5*f):Math.asin(f),c=Math.sin(l),h=Math.cos(l);return[(s+Math.atan2(n*c,f*u*h+o*a*c))/mo,Math.asin(h*a-(f?o*c*u/f:0))/mo]},e.mode=function(n){return arguments.length?(t=n+"",e):t},e.origin=function(t){return arguments.length?(n=t,s=n[0]*mo,o=n[1]*mo,u=Math.cos(o),a=Math.sin(o),e):n},e.scale=function(t){return arguments.length?(r=+t,e):r},e.translate=function(t){return arguments.length?(i=[+t[0],+t[1]],e):i},e.origin([0,0])},d3.geo.albers=function(){function e(e){var t=u*(mo*e[0]-o),n=Math.sqrt(a-2*u*Math.sin(mo*e[1]))/u;return[i*n*Math.sin(t)+s[0],i*(n*Math.cos(t)-f)+s[1]]}function t(){var t=mo*r[0],i=mo*r[1],s=mo*n[1],l=Math.sin(t),c=Math.cos(t);return o=mo*n[0],u=.5*(l+Math.sin(i)),a=c*c+2*u*l,f=Math.sqrt(a-2*u*Math.sin(s))/u,e}var n=[-98,38],r=[29.5,45.5],i=1e3,s=[480,250],o,u,a,f;return e.invert=function(e){var t=(e[0]-s[0])/i,n=(e[1]-s[1])/i,r=f+n,l=Math.atan2(t,r),c=Math.sqrt(t*t+r*r);return[(o+l/u)/mo,Math.asin((a-c*c*u*u)/(2*u))/mo]},e.origin=function(e){return arguments.length?(n=[+e[0],+e[1]],t()):n},e.parallels=function(e){return arguments.length?(r=[+e[0],+e[1]],t()):r},e.scale=function(t){return arguments.length?(i=+t,e):i},e.translate=function(t){return arguments.length?(s=[+t[0],+t[1]],e):s},t()},d3.geo.albersUsa=function(){function e(e){var s=e[0],o=e[1];return(o>50?n:s<-140?r:o<21?i:t)(e)}var t=d3.geo.albers(),n=d3.geo.albers().origin([-160,60]).parallels([55,65]),r=d3.geo.albers().origin([-160,20]).parallels([8,18]),i=d3.geo.albers().origin([-60,10]).parallels([8,18]);return e.scale=function(s){return arguments.length?(t.scale(s),n.scale(s*.6),r.scale(s),i.scale(s*1.5),e.translate(t.translate())):t.scale()},e.translate=function(s){if(!arguments.length)return t.translate();var o=t.scale()/1e3,u=s[0],a=s[1];return t.translate(s),n.translate([u-400*o,a+170*o]),r.translate([u-190*o,a+200*o]),i.translate([u+580*o,a+430*o]),e},e.scale(t.scale())},d3.geo.bonne=function(){function e(e){var u=e[0]*mo-r,a=e[1]*mo-i;if(s){var f=o+s-a,l=u*Math.cos(a)/f;u=f*Math.sin(l),a=f*Math.cos(l)-o}else u*=Math.cos(a),a*=-1;return[t*u+n[0],t*a+n[1]]}var t=200,n=[480,250],r,i,s,o;return e.invert=function(e){var i=(e[0]-n[0])/t,u=(e[1]-n[1])/t;if(s){var a=o+u,f=Math.sqrt(i*i+a*a);u=o+s-f,i=r+f*Math.atan2(i,a)/Math.cos(u)}else u*=-1,i/=Math.cos(u);return[i/mo,u/mo]},e.parallel=function(t){return arguments.length?(o=1/Math.tan(s=t*mo),e):s/mo},e.origin=function(t){return arguments.length?(r=t[0]*mo,i=t[1]*mo,e):[r/mo,i/mo]},e.scale=function(
-n){return arguments.length?(t=+n,e):t},e.translate=function(t){return arguments.length?(n=[+t[0],+t[1]],e):n},e.origin([0,0]).parallel(45)},d3.geo.equirectangular=function(){function e(e){var r=e[0]/360,i=-e[1]/360;return[t*r+n[0],t*i+n[1]]}var t=500,n=[480,250];return e.invert=function(e){var r=(e[0]-n[0])/t,i=(e[1]-n[1])/t;return[360*r,-360*i]},e.scale=function(n){return arguments.length?(t=+n,e):t},e.translate=function(t){return arguments.length?(n=[+t[0],+t[1]],e):n},e},d3.geo.mercator=function(){function e(e){var r=e[0]/360,i=-(Math.log(Math.tan(Math.PI/4+e[1]*mo/2))/mo)/360;return[t*r+n[0],t*Math.max(-0.5,Math.min(.5,i))+n[1]]}var t=500,n=[480,250];return e.invert=function(e){var r=(e[0]-n[0])/t,i=(e[1]-n[1])/t;return[360*r,2*Math.atan(Math.exp(-360*i*mo))/mo-90]},e.scale=function(n){return arguments.length?(t=+n,e):t},e.translate=function(t){return arguments.length?(n=[+t[0],+t[1]],e):n},e},d3.geo.path=function(){function e(e,t){typeof s=="function"&&(o=zr(s.apply(this,arguments))),f(e);var n=a.length?a.join(""):null;return a=[],n}function t(e){return u(e).join(",")}function n(e){var t=i(e[0]),n=0,r=e.length;while(++n<r)t-=i(e[n]);return t}function r(e){var t=d3.geom.polygon(e[0].map(u)),n=t.area(),r=t.centroid(n<0?(n*=-1,1):-1),i=r[0],s=r[1],o=n,a=0,f=e.length;while(++a<f)t=d3.geom.polygon(e[a].map(u)),n=t.area(),r=t.centroid(n<0?(n*=-1,1):-1),i-=r[0],s-=r[1],o-=n;return[i,s,6*o]}function i(e){return Math.abs(d3.geom.polygon(e.map(u)).area())}var s=4.5,o=zr(s),u=d3.geo.albersUsa(),a=[],f=Ur({FeatureCollection:function(e){var t=e.features,n=-1,r=t.length;while(++n<r)a.push(f(t[n].geometry))},Feature:function(e){f(e.geometry)},Point:function(e){a.push("M",t(e.coordinates),o)},MultiPoint:function(e){var n=e.coordinates,r=-1,i=n.length;while(++r<i)a.push("M",t(n[r]),o)},LineString:function(e){var n=e.coordinates,r=-1,i=n.length;a.push("M");while(++r<i)a.push(t(n[r]),"L");a.pop()},MultiLineString:function(e){var n=e.coordinates,r=-1,i=n.length,s,o,u;while(++r<i){s=n[r],o=-1,u=s.length,a.push("M");while(++o<u)a.push(t(s[o]),"L");a.pop()}},Polygon:function(e){var n=e.coordinates,r=-1,i=n.length,s,o,u;while(++r<i){s=n[r],o=-1;if((u=s.length-1)>0){a.push("M");while(++o<u)a.push(t(s[o]),"L");a[a.length-1]="Z"}}},MultiPolygon:function(e){var n=e.coordinates,r=-1,i=n.length,s,o,u,f,l,c;while(++r<i){s=n[r],o=-1,u=s.length;while(++o<u){f=s[o],l=-1;if((c=f.length-1)>0){a.push("M");while(++l<c)a.push(t(f[l]),"L");a[a.length-1]="Z"}}}},GeometryCollection:function(e){var t=e.geometries,n=-1,r=t.length;while(++n<r)a.push(f(t[n]))}}),l=e.area=Ur({FeatureCollection:function(e){var t=0,n=e.features,r=-1,i=n.length;while(++r<i)t+=l(n[r]);return t},Feature:function(e){return l(e.geometry)},Polygon:function(e){return n(e.coordinates)},MultiPolygon:function(e){var t=0,r=e.coordinates,i=-1,s=r.length;while(++i<s)t+=n(r[i]);return t},GeometryCollection:function(e){var t=0,n=e.geometries,r=-1,i=n.length;while(++r<i)t+=l(n[r]);return t}},0),c=e.centroid=Ur({Feature:function(e){return c(e.geometry)},Polygon:function(e){var t=r(e.coordinates);return[t[0]/t[2],t[1]/t[2]]},MultiPolygon:function(e){var t=0,n=e.coordinates,i,s=0,o=0,u=0,a=-1,f=n.length;while(++a<f)i=r(n[a]),s+=i[0],o+=i[1],u+=i[2];return[s/u,o/u]}});return e.projection=function(t){return u=t,e},e.pointRadius=function(t){return typeof t=="function"?s=t:(s=+t,o=zr(s)),e},e},d3.geo.bounds=function(e){var t=Infinity,n=Infinity,r=-Infinity,i=-Infinity;return Wr(e,function(e,s){e<t&&(t=e),e>r&&(r=e),s<n&&(n=s),s>i&&(i=s)}),[[t,n],[r,i]]};var go={Feature:Xr,FeatureCollection:Vr,GeometryCollection:$r,LineString:Jr,MultiLineString:Kr,MultiPoint:Jr,MultiPolygon:Qr,Point:Gr,Polygon:Yr};d3.geo.circle=function(){function e(){}function t(e){return a.distance(e)<u}function n(e){var t=-1,n=e.length,i=[],s,o,f,l,c;while(++t<n)c=a.distance(f=e[t]),c<u?(o&&i.push(ni(o,f)((l-u)/(l-c))),i.push(f),s=o=null):(o=f,!s&&i.length&&(i.push(ni(i[i.length-1],o)((u-l)/(c-l))),s=o)),l=c;return s=e[0],o=i[0],o&&f[0]===s[0]&&f[1]===s[1]&&(f[0]!==o[0]||f[1]!==o[1])&&i.push(o),r(i)}function r(e){var t=0,n=e.length,r,i,s=n?[e[0]]:e,o,u=a.source();while(++t<n){o=a.source(e[t-1])(e[t]).coordinates;for(r=0,i=o.length;++r<i;)s.push(o[r])}return a.source(u),s}var s=[0,0],o=89.99,u=o*mo,a=d3.geo.greatArc().source(s).target(i);e.clip=function(e){return typeof s=="function"&&a.source(s.apply(this,arguments)),f(e)||null};var f=Ur({FeatureCollection:function(e){var t=e.features.map(f).filter(i);return t&&(e=Object.create(e),e.features=t,e)},Feature:function(e){var t=f(e.geometry);return t&&(e=Object.create(e),e.geometry=t,e)},Point:function(e){return t(e.coordinates)&&e},MultiPoint:function(e){var n=e.coordinates.filter(t);return n.length&&{type:e.type,coordinates:n}},LineString:function(e){var t=n(e.coordinates);return t.length&&(e=Object.create(e),e.coordinates=t,e)},MultiLineString:function(e){var t=e.coordinates.map(n).filter(function(e){return e.length});return t.length&&(e=Object.create(e),e.coordinates=t,e)},Polygon:function(e){var t=e.coordinates.map(n);return t[0].length&&(e=Object.create(e),e.coordinates=t,e)},MultiPolygon:function(e){var t=e.coordinates.map(function(e){return e.map(n)}).filter(function(e){return e[0].length});return t.length&&(e=Object.create(e),e.coordinates=t,e)},GeometryCollection:function(e){var t=e.geometries.map(f).filter(i);return t.length&&(e=Object.create(e),e.geometries=t,e)}});return e.origin=function(t){return arguments.length?(s=t,typeof s!="function"&&a.source(s),e):s},e.angle=function(t){return arguments.length?(u=(o=+t)*mo,e):o},d3.rebind(e,a,"precision")},d3.geo.greatArc=function(){function e(){var t=e.distance.apply(this,arguments),r=0,u=s/t,a=[n];while((r+=u)<1)a.push(o(r));return a.push(i),{type:"LineString",coordinates:a}}var t=Zr,n,r=ei,i,s=6*mo,o=ti();return e.distance=function(){return typeof t=="function"&&o.source(n=t.apply(this,arguments)),typeof r=="function"&&o.target(i=r.apply(this,arguments)),o.distance()},e.source=function(r){return arguments.length?(t=r,typeof t!="function"&&o.source(n=t),e):t},e.target=function(t){return arguments.length?(r=t,typeof r!="function"&&o.target(i=r),e):r},e.precision=function(t){return arguments.length?(s=t*mo,e):s/mo},e},d3.geo.greatCircle=d3.geo.circle,d3.geom={},d3.geom.contour=function(e,t){var n=t||ri(e),r=[],i=n[0],s=n[1],o=0,u=0,a=NaN,f=NaN,l=0;do l=0,e(i-1,s-1)&&(l+=1),e(i,s-1)&&(l+=2),e(i-1,s)&&(l+=4),e(i,s)&&(l+=8),l===6?(o=f===-1?-1:1,u=0):l===9?(o=0,u=a===1?-1:1):(o=yo[l],u=bo[l]),o!=a&&u!=f&&(r.push([i,s]),a=o,f=u),i+=o,s+=u;while(n[0]!=i||n[1]!=s);return r};var yo=[1,0,1,1,-1,0,-1,1,0,0,0,0,-1,0,-1,NaN],bo=[0,-1,0,0,0,-1,0,0,1,-1,1,1,0,-1,0,NaN];d3.geom.hull=function(e){if(e.length<3)return[];var t=e.length,n=t-1,r=[],i=[],s,o,u=0,a,f,l,c,h,p,d,v;for(s=1;s<t;++s)e[s][1]<e[u][1]?u=s:e[s][1]==e[u][1]&&(u=e[s][0]<e[u][0]?s:u);for(s=0;s<t;++s){if(s===u)continue;f=e[s][1]-e[u][1],a=e[s][0]-e[u][0],r.push({angle:Math.atan2(f,a),index:s})}r.sort(function(e,t){return e.angle-t.angle}),d=r[0].angle,p=r[0].index,h=0;for(s=1;s<n;++s)o=r[s].index,d==r[s].angle?(a=e[p][0]-e[u][0],f=e[p][1]-e[u][1],l=e[o][0]-e[u][0],c=e[o][1]-e[u][1],a*a+f*f>=l*l+c*c?r[s].index=-1:(r[h].index=-1,d=r[s].angle,h=s,p=o)):(d=r[s].angle,h=s,p=o);i.push(u);for(s=0,o=0;s<2;++o)r[o].index!==-1&&(i.push(r[o].index),s++);v=i.length;for(;o<n;++o){if(r[o].index===-1)continue;while(!ii(i[v-2],i[v-1],r[o].index,e))--v;i[v++]=r[o].index}var m=[];for(s=0;s<v;++s)m.push(e[i[s]]);return m},d3.geom.polygon=function(e){return e.area=function(){var t=0,n=e.length,r=e[n-1][0]*e[0][1],i=e[n-1][1]*e[0][0];while(++t<n)r+=e[t-1][0]*e[t][1],i+=e[t-1][1]*e[t][0];return(i-r)*.5},e.centroid=function(t){var n=-1,r=e.length,i=0,s=0,o,u=e[r-1],a;arguments.length||(t=-1/(6*e.area()));while(++n<r)o=u,u=e[n],a=o[0]*u[1]-u[0]*o[1],i+=(o[0]+u[0])*a,s+=(o[1]+u[1])*a;return[i*t,s*t]},e.clip=function(t){var n,r=-1,i=e.length,s,o,u=e[i-1],a,f,l;while(++r<i){n=t.slice(),t.length=0,a=e[r],f=n[(o=n.length)-1],s=-1;while(++s<o)l=n[s],si(l,u,a)?(si(f,u,a)||t.push(oi(f,l,u,a)),t.push(l)):si(f,u,a)&&t.push(oi(f,l,u,a)),f=l;u=a}return t},e},d3.geom.voronoi=function(e){var t=e.map(function(){return[]});return ui(e,function(e){var n,r,i,s,o,u;e.a===1&&e.b>=0?(n=e.ep.r,r=e.ep.l):(n=e.ep.l,r=e.ep.r),e.a===1?(o=n?n.y:-1e6,i=e.c-e.b*o,u=r?r.y:1e6,s=e.c-e.b*u):(i=n?n.x:-1e6,o=e.c-e.a*i,s=r?r.x:1e6,u=e.c-e.a*s);var a=[i,o],f=[s,u];t[e.region.l.index].push(a,f),t[e.region.r.index].push(a,f)}),t.map(function(t,n){var r=e[n][0],i=e[n][1];return t.forEach(function(e){e.angle=Math.atan2(e[0]-r,e[1]-i)}),t.sort(function(e,t){return e.angle-t.angle}).filter(function(e,n){return!n||e.angle-t[n-1].angle>1e-10})})};var wo={l:"r",r:"l"};d3.geom.delaunay=function(e){var t=e.map(function(){return[]}),n=[];return ui(e,function(n){t[n.region.l.index].push(e[n.region.r.index])}),t.forEach(function(t,r){var i=e[r],s=i[0],o=i[1];t.forEach(function(e){e.angle=Math.atan2(e[0]-s,e[1]-o)}),t.sort(function(e,t){return e.angle-t.angle});for(var u=0,a=t.length-1;u<a;u++)n.push([i,t[u],t[u+1]])}),n},d3.geom.quadtree=function(e,t,n,r,i){function s(e,t,n,r,i,s){if(isNaN(t.x)||isNaN(t.y))return;if(e.leaf){var u=e.point;u?Math.abs(u.x-t.x)+Math.abs(u.y-t.y)<.01?o(e,t,n,r,i,s):(e.point=null,o(e,u,n,r,i,s),o(e,t,n,r,i,s)):e.point=t}else o(e,t,n,r,i,s)}function o(e,t,n,r,i,o){var u=(n+i)*.5,a=(r+o)*.5,f=t.x>=u,l=t.y>=a,c=(l<<1)+f;e.leaf=!1,e=e.nodes[c]||(e.nodes[c]=ai()),f?n=u:i=u,l?r=a:o=a,s(e,t,n,r,i,o)}var u,a=-1,f=e.length;f&&isNaN(e[0].x)&&(e=e.map(li));if(arguments.length<5)if(arguments.length===3)i=r=n,n=t;else{t=n=Infinity,r=i=-Infinity;while(++a<f)u=e[a],u.x<t&&(t=u.x),u.y<n&&(n=u.y),u.x>r&&(r=u.x),u.y>i&&(i=u.y);var l=r-t,c=i-n;l>c?i=n+l:r=t+c}var h=ai();return h.add=function(e){s(h,e,t,n,r,i)},h.visit=function(e){fi(e,h,t,n,r,i)},e.forEach(h.add),h},d3.time={};var Eo=Date,So=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];ci.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){xo.setUTCDate.apply(this._,arguments)},setDay:function(){xo.setUTCDay.apply(this._,arguments)},setFullYear:function(){xo.setUTCFullYear.apply(this._,arguments)},setHours:function(){xo.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){xo.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){xo.setUTCMinutes.apply(this._,arguments)},setMonth:function(){xo.setUTCMonth.apply(this._,arguments)},setSeconds:function(){xo.setUTCSeconds.apply(this._,arguments)},setTime:function(){xo.setTime.apply(this._,arguments)}};var xo=Date.prototype,To="%a %b %e %H:%M:%S %Y",No="%m/%d/%y",Co="%H:%M:%S",ko=So,Lo=ko.map(hi),Ao=["January","February","March","April","May","June","July","August","September","October","November","December"],Oo=Ao.map(hi);d3.time.format=function(e){function t(t){var r=[],i=-1,s=0,o,u;while(++i<n)e.charCodeAt(i)==37&&(r.push(e.substring(s,i),(u=Ro[o=e.charAt(++i)])?u(t):o),s=i+1);return r.push(e.substring(s,i)),r.join("")}var n=e.length;return t.parse=function(t){var n={y:1900,m:0,d:1,H:0,M:0,S:0,L:0},r=pi(n,e,t,0);if(r!=t.length)return null;"p"in n&&(n.H=n.H%12+n.p*12);var i=new Eo;return i.setFullYear(n.y,n.m,n.d),i.setHours(n.H,n.M,n.S,n.L),i},t.toString=function(){return e},t};var Mo=d3.format("02d"),_o=d3.format("03d"),Do=d3.format("04d"),Po=d3.format("2d"),Ho=di(ko),Bo=di(Lo),jo=di(Ao),Fo=vi(Ao),Io=di(Oo),qo=vi(Oo),Ro={a:function(e){return Lo[e.getDay()]},A:function(e){return ko[e.getDay()]},b:function(e){return Oo[e.getMonth()]},B:function(e){return Ao[e.getMonth()]},c:d3.time.format(To),d:function(e){return Mo(e.getDate())},e:function(e){return Po(e.getDate())},H:function(e){return Mo(e.getHours())},I:function(e){return Mo(e.getHours()%12||12)},j:function(e){return _o(1+d3.time.dayOfYear(e))},L:function(e){return _o(e.getMilliseconds())},m:function(e){return Mo(e.getMonth()+1)},M:function(e){return Mo(e.getMinutes())},p:function(e){return e.getHours()>=12?"PM":"AM"},S:function(e){return Mo(e.getSeconds())},U:function(e){return Mo(d3.time.sundayOfYear(e))},w:function(e){return e.getDay()},W:function(e){return Mo(d3.time.mondayOfYear(e))},x:d3.time.format(No),X:d3.time.format(Co),y:function(e){return Mo(e.getFullYear()%100)},Y:function(e){return Do(e.getFullYear()%1e4)},Z:Di,"%":function(e){return"%"}},Uo={a:mi,A:gi,b:yi,B:bi,c:wi,d:ki,e:ki,H:Li,I:Li,L:Mi,m:Ci,M:Ai,p:_i,S:Oi,x:Ei,X:Si,y:Ti,Y:xi},zo=/^\s*\d+/,Wo=d3.map({am:0,pm:1});d3.time.format.utc=function(e){function t(e){try{Eo=ci;var t=new Eo;return t._=e,n(t)}finally{Eo=Date}}var n=d3.time.format(e);return t.parse=function(e){try{Eo=ci;var t=n.parse(e);return t&&t._}finally{Eo=Date}},t.toString=n.toString,t};var Xo=d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ");d3.time.format.iso=Date.prototype.toISOString?Pi:Xo,Pi.parse=function(e){var t=new Date(e);return isNaN(t)?null:t},Pi.toString=Xo.toString,d3.time.second=Hi(function(e){return new Eo(Math.floor(e/1e3)*1e3)},function(e,t){e.setTime(e.getTime()+Math.floor(t)*1e3)},function(e){return e.getSeconds()}),d3.time.seconds=d3.time.second.range,d3.time.seconds.utc=d3.time.second.utc.range,d3.time.minute=Hi(function(e){return new Eo(Math.floor(e/6e4)*6e4)},function(e,t){e.setTime(e.getTime()+Math.floor(t)*6e4)},function(e){return e.getMinutes()}),d3.time.minutes=d3.time.minute.range,d3.time.minutes.utc=d3.time.minute.utc.range,d3.time.hour=Hi(function(e){var t=e.getTimezoneOffset()/60;return new Eo((Math.floor(e/36e5-t)+t)*36e5)},function(e,t){e.setTime(e.getTime()+Math.floor(t)*36e5)},function(e){return e.getHours()}),d3.time.hours=d3.time.hour.range,d3.time.hours.utc=d3.time.hour.utc.range,d3.time.day=Hi(function(e){var t=new Eo(1970,0);return t.setFullYear(e.getFullYear(),e.getMonth(),e.getDate()),t},function(e,t){e.setDate(e.getDate()+t)},function(e){return e.getDate()-1}),d3.time.days=d3.time.day.range,d3.time.days.utc=d3.time.day.utc.range,d3.time.dayOfYear=function(e){var t=d3.time.year(e);return Math.floor((e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/864e5)},So.forEach(function(e,t){e=e.toLowerCase(),t=7-t;var n=d3.time[e]=Hi(function(e){return(e=d3.time.day(e)).setDate(e.getDate()-(e.getDay()+t)%7),e},function(e,t){e.setDate(e.getDate()+Math.floor(t)*7)},function(e){var n=d3.time.year(e).getDay();return Math.floor((d3.time.dayOfYear(e)+(n+t)%7)/7)-(n!==t)});d3.time[e+"s"]=n.range,d3.time[e+"s"].utc=n.utc.range,d3.time[e+"OfYear"]=function(e){var n=d3.time.year(e).getDay();return Math.floor((d3.time.dayOfYear(e)+(n+t)%7)/7)}}),d3.time.week=d3.time.sunday,d3.time.weeks=d3.time.sunday.range,d3.time.weeks.utc=d3.time.sunday.utc.range,d3.time.weekOfYear=d3.time.sundayOfYear,d3.time.month=Hi(function(e){return e=d3.time.day(e),e.setDate(1),e},function(e,t){e.setMonth(e.getMonth()+t)},function(e){return e.getMonth()}),d3.time.months=d3.time.month.range,d3.time.months.utc=d3.time.month.utc.range,d3.time.year=Hi(function(e){return e=d3.time.day(e),e.setMonth(0,1),e},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e){return e.getFullYear()}),d3.time.years=d3.time.year.range,d3.time.years.utc=d3.time.year.utc.range;var Vo=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],$o=[[d3.time.second,1],[d3.time.second,5],[d3.time.second,15],[d3.time.second,30],[d3.time.minute,1],[d3.time.minute,5],[d3.time.minute,15],[d3.time.minute,30],[d3.time.hour,1],[d3.time.hour,3],[d3.time.hour,6],[d3.time.hour,12],[d3.time.day,1],[d3.time.day,2],[d3.time.week,1],[d3.time.month,1],[d3.time.month,3],[d3.time.year,1]],Jo=[[d3.time.format("%Y"),function(e){return!0}],[d3.time.format("%B"),function(e){return e.getMonth()}],[d3.time.format("%b %d"),function(e){return e.getDate()!=1}],[d3.time.format("%a %d"),function(e){return e.getDay()&&e.getDate()!=1}],[d3.time.format("%I %p"),function(e){return e.getHours()}],[d3.time.format("%I:%M"),function(e){return e.getMinutes()}],[d3.time.format(":%S"),function(e){return e.getSeconds()}],[d3.time.format(".%L"),function(e){return e.getMilliseconds()}]],Ko=d3.scale.linear(),Qo=qi(Jo);$o.year=function(e,t){return Ko.domain(e.map(Ui)).ticks(t).map(Ri)},d3.time.scale=function(){return ji(d3.scale.linear(),$o,Qo)};var Go=$o.map(function(e){return[e[0].utc,e[1]]}),Yo=[[d3.time.format.utc("%Y"),function(e){return!0}],[d3.time.format.utc("%B"),function(e){return e.getUTCMonth()}],[d3.time.format.utc("%b %d"),function(e){return e.getUTCDate()!=1}],[d3.time.format.utc("%a %d"),function(e){return e.getUTCDay()&&e.getUTCDate()!=1}],[d3.time.format.utc("%I %p"),function(e){return e.getUTCHours()}],[d3.time.format.utc("%I:%M"),function(e){return e.getUTCMinutes()}],[d3.time.format.utc(":%S"),function(e){return e.getUTCSeconds()}],[d3.time.format.utc(".%L"),function(e){return e.getUTCMilliseconds()}]],Zo=qi(Yo);Go.year=function(e,t){return Ko.domain(e.map(Wi)).ticks(t).map(zi)},d3.time.scale.utc=function(){return ji(d3.scale.linear(),Go,Zo)}})();
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/images/openBIS_Logo.svg b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/images/openBIS_Logo.svg
deleted file mode 100755
index 811623c73d2..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/images/openBIS_Logo.svg
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="400.023px" height="174.566px" viewBox="0 0 400.023 174.566" enable-background="new 0 0 400.023 174.566"
-	 xml:space="preserve">
-<g id="Layer_1">
-	<g>
-		<text transform="matrix(1 0 0 1 46.4854 154.2764)"><tspan x="0" y="0" fill="#010101" font-family="'HelveticaNeue-Bold'" font-size="93.505" letter-spacing="-4">open</tspan><tspan x="204.679" y="0" fill="#231F20" font-family="'HelveticaNeue'" font-size="93.505">BIS</tspan></text>
-		<rect x="204.234" y="158.748" fill="none" width="192.64" height="14.936"/>
-		<text transform="matrix(1 0 0 1 204.2329 169.876)" fill="#010101" font-family="'HelveticaNeue'" font-size="15.5842">Biology Information System</text>
-		<g>
-			<g>
-				<g>
-					<g>
-						<polygon fill="#068172" points="125.213,81.967 141.416,98.167 147.252,92.333 131.053,76.132 125.213,76.132 						"/>
-					</g>
-					<g>
-						<g>
-							<polygon fill="#068172" points="120.206,81.967 104.005,98.167 98.168,92.333 114.368,76.132 120.206,76.132 							"/>
-						</g>
-						<g>
-							<polygon fill="#068172" points="120.206,65.286 104.005,49.084 98.168,54.92 114.368,71.12 120.206,71.12 							"/>
-						</g>
-					</g>
-				</g>
-				<g>
-					<polygon fill="#068172" points="125.213,65.286 141.416,49.084 147.252,54.92 131.053,71.12 125.213,71.12 					"/>
-				</g>
-			</g>
-			<g>
-				<g>
-					<polygon fill="#A4A4A4" points="76.131,16.201 92.331,0 98.168,5.836 81.969,22.036 76.13,22.036 					"/>
-				</g>
-				<g>
-					<g>
-						<polygon fill="#ADACAF" points="76.131,32.882 92.331,49.084 98.168,43.247 81.969,27.048 76.13,27.048 						"/>
-					</g>
-					<g>
-						<g>
-							<polygon fill="#ADACAF" points="71.122,32.882 54.921,49.084 49.084,43.247 65.283,27.048 71.123,27.048 							"/>
-						</g>
-						<g>
-							<polygon fill="#ADACAF" points="71.122,16.201 54.921,0 49.084,5.836 65.283,22.036 71.123,22.036 							"/>
-						</g>
-					</g>
-				</g>
-			</g>
-			<g>
-				<g>
-					<polygon fill="#ADACAF" points="27.046,65.286 43.247,49.084 49.083,54.92 32.884,71.12 27.045,71.12 					"/>
-				</g>
-				<g>
-					<polygon fill="#ADACAF" points="27.046,81.967 43.247,98.167 49.083,92.333 32.884,76.132 27.045,76.132 					"/>
-				</g>
-				<g>
-					<polygon fill="#ADACAF" points="22.038,81.967 5.837,98.167 0,92.333 16.199,76.132 22.038,76.132 					"/>
-				</g>
-				<g>
-					<polygon fill="#ADACAF" points="22.038,65.286 5.837,49.084 0,54.92 16.199,71.12 22.038,71.12 					"/>
-				</g>
-			</g>
-		</g>
-	</g>
-</g>
-<g id="Layer_2">
-</g>
-</svg>
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/index.html b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/index.html
deleted file mode 100644
index 7288ade93ad..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/index.html
+++ /dev/null
@@ -1,452 +0,0 @@
-<head>
-    <title>Quantitative Genomics Facility</title>
-    <link rel="stylesheet" href="bootstrap3/css/bootstrap.min.css">
-    <script type="text/javascript" src="d3.v2.min.js"></script>
-    <script type="text/javascript" src="jquery-1.8.2.min.js"></script>
-    <script type="text/javascript" src="bootstrap3/js/bootstrap.min.js"></script>
-    <script type="text/javascript" src="spin.min.js"></script>
-    <script type="text/javascript" src="openbis.js"></script>
-    <script type="text/javascript" src="openbis-dsu.js"></script>
-    <!-- To speed development, cache the requests -->
-    <!-- <script type="text/javascript" src="openbis-request-cache.js"></script> -->
-    <script>
-
-        dsu = new openbis_dsu('/openbis/openbis', '/datastore_server');
-        var vis;
-        var didCreateVis = false;
-        var context = new openbisWebAppContext();
-
-        $(document).ready(function () {
-          refresh();
-          setInterval(refresh, 600000);
-        });
-
-        function createVis() {
-            if (didCreateVis) return;
-            vis = d3.select("#main").append("div").attr("id", "vis");
-            didCreateVis = true;
-        }
-
-	function enableSubmission() {
-		$('#submitBtn').prop('disabled', false);
-	}
-
-	function disableSubmission() {
-		$('#submitBtn').prop('disabled', true);
-	}
-
-        function displayReturnedTable(data) {
-            if (data.error) {
-                console.log(data.error);
-                vis.append("p").text("Could not retrieve data.");
-                return;
-            }
-
-            var dataToShow = data.result;
-            //console.log(dataToShow);
-
-            d3.select("#progress").remove()
-            d3.select("#button-group").remove()
-
-            vis.append("p").text("");
-            // Pick all div elements of the visualization
-            vis.selectAll("div").attr("class", "alert")
-                    .data(dataToShow.rows)
-                    .enter()
-                    .append("div")
-                    .attr("class", function (row) {
-                        if (row[0].value == 0 || row[0].value > 99) {
-                            	if(row[0].value == 100) 
-					enableSubmission();
-				if(row[0].value == 101)
-					disableSubmission();
-				return "";
-                        }
-                        return "alert alert-danger";
-                    })
-                    .html(function (row) {
-                        return row[1].value;
-                    })
-
-                  var button = d3.select("#container")
-             .append("div")
-
-             button.selectAll("button")
-             .data(dataToShow.rows)
-             .enter()
-             .append("div")
-             .append("button")
-             .attr("id", function (row) {
-             return row[0].value;
-             })
-             .attr("class", function (row) {
-             if (row[0].value == 0) {
-             return "btn btn-success";
-             }
-             return "btn btn-danger";
-             })
-             //.attr("onclick", function(row) { return "callIngestionSetInvoice('" + row + "');" })
-             .text(function (row) {
-             if (row[0].value == 0) {
-             return "OK" ;
-             }
-             return "Fail";
-             });
-             
-        }
-
-        function hideButtons(data) {
-            var buttonId = data.result.rows[0][0].value;
-            d3.select("#setInvoice").remove()
-            d3.select("#main").append("div").attr("id", "Done").append("p").text("Done " + buttonId);
-            d3.select("button#" + String(buttonId)).remove();
-        }
-
-        function spinner(target) {
-            var opts = {
-                lines: 13, // The number of lines to draw
-                length: 7, // The length of each line
-                width: 4, // The line thickness
-                radius: 10, // The radius of the inner circle
-                corners: 1, // Corner roundness (0..1)
-                rotate: 0, // The rotation offset
-                color: '#000', // #rgb or #rrggbb
-                speed: 1, // Rounds per second
-                trail: 60, // Afterglow percentage
-                shadow: false, // Whether to render a shadow
-                hwaccel: false, // Whether to use hardware acceleration
-                className: 'spinner', // The CSS class to assign to the spinner
-                zIndex: 2e9, // The z-index (defaults to 2000000000)
-                top: 250, // Top position relative to parent in px
-                left: 'auto' // Left position relative to parent in px
-            };
-            var spinner = new Spinner(opts).spin(target);
-        }
-
-
-        function callIngestionSetInvoice(piSampleString) {
-            var sampleIdentifier = context.getEntityIdentifier()
-
-            var piSampleStringList = piSampleString.split("#")
-            var principalInvestigator = piSampleStringList[0]
-            var listOfSamples = piSampleStringList.slice(1, piSampleStringList.length)
-
-            dsu.server.useSession(context.getSessionId());
-            var parameters =
-            {
-                sampleId: sampleIdentifier,
-                pI: principalInvestigator,
-                listOfSamples: listOfSamples
-            };
-
-            d3.select("#main").append("div").attr("id", "setInvoice").append("p").text("Setting 'INVOICE SENT' property of " + listOfSamples + "to TRUE");
-            var target = document.getElementById('setInvoice');
-            spinner(target)
-            dsu.server.createReportFromAggregationService("DSS1", "setInvoiceSent", parameters, hideButtons);
-        }
-
-
-        function callIngestionService(method) {
-            var permIdentifier = context.getEntityIdentifier()
-            //var mySendEmail = $("#sendEmail").is(':checked')
-            var clusteroptions = "brutus"
-            var bowtieParameters = $("#Bowtie2Paramter").val()
-             
-            if ($('#brutus').is(':active')) {
-              clusteroptions = 'brutus';
-            }
-            if ($('#bsseGrid').is(':active')) {
-              clusteroptions = 'bsseGrid';
-            } 
-            
-
-            d3.select("#main").select("#progress").remove()
-            d3.select("#main").select("#vis").remove()
-            didCreateVis = false;
-            dsu.server.useSession(context.getSessionId());
-            createVis()
-
-            myUserId = context.getSessionId().split("-")[0]; 
-
-            var parameters =
-            {
-                permId: permIdentifier,
-                //sendEmail: mySendEmail,
-                bowtieParam: bowtieParameters,
-                clusteroptionsParam : clusteroptions, 
-                userId : myUserId, 
-                method: method
-            };
-            console.log(parameters)
-
-            //d3.select("#main").append("div").attr("id", "progress").append("p").text("Starting Job...");
-            var target = document.getElementById('progress');
-            spinner(target)
-            dsu.server.createReportFromAggregationService("DSS1", "triggergc3pie", parameters, displayReturnedTable);
-        }
-
-	function refresh() {
-        	callIngestionService("pollJob")
-
-	}
-
-
-    </script>
-</head>
-<body>
-<div class="container">
-    <div class="row">
-        <div class="col-lg-12">
-
-            <h2>Bowtie 2
-                <small>Read Alignment</small>
-            </h2>
-        </div>
-    </div>
-</div>
-
-<br>
-
-<p>
-
-
-
-<div class="container">
-    <div class="row">
-        <div class="col-lg-12">
-            <div class="btn-group">
-                <button type="button" class="btn btn-default" id="brutus"> ETHZ Brutus Cluster </button>
-                <button type="button" class="btn btn-default" id="bsseGrid"> BSSE Grid </button>
-
-            </div>
-        </div>
-    </div>
-</div>
-</p>
-
-<p>
-
-<div class="container">
-    <div class="row">
-        <div class="col-lg-12">
-            <form role="form">
-                <div class="form-group">
-                    <label>Parameters</label>
-                    <input type="text" class="form-control" id="Bowtie2Paramter"
-                           placeholder="e.g. --very-sensitive --phred33 -q">
-                </div>
-            </form>
-        </div>
-    </div>
-</div>
-</p>
-
-<p>
-<!--
-<div class="container">
-    <div class="row">
-        <div class="col-lg-12">
-            <div class="checkbox">
-                <label>
-                    <input type="checkbox" id="sendEmail"> Send Email when job finished
-                </label>
-            </div>
-        </div>
-    </div>
-</div>
--->
-</p>
-
-<p>
-
-<div class="container">
-    <div class="row">
-        <div class="col-md-3">
-            <button class="btn btn-default" type="submit"
-            "createInvoice-button"  id="submitBtn" onclick="callIngestionService('startJob');">Start Bowtie2</button>
-        </div>
-        <div class="col-md-3">
-           <button type="button" class="btn btn-default" onclick="refresh();">
-             <span class="glyphicon glyphicon-refresh"></span> Refresh
-           </button>
-        </div>
-    </div>
-</div>
-</p>
-
-<br>
-
-<p>
-
-<div class="container">
-    <div class="row">
-        <div class="col-lg-12">
-            <div class="panel-group" id="accordion">
-                <div class="panel panel-default">
-                    <div class="panel-heading">
-                        <h6 div class="panel-title">
-                            <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion"
-                               href="#collapseOne">
-                                Available Bowtie 2 Parameters
-                            </a>
-                    </div>
-                    </h6>
-                </div>
-                <div id="collapseOne" class="panel-collapse collapse">
-                    <div class="panel-body">
-        <pre>
-Usage:
-  bowtie2 [options]* -x &lt;bt2-idx&gt; {-1 &lt;m1&gt; -2 &lt;m2&gt; | -U &lt;r&gt;} [-S &lt;sam&gt;]
-
-  &lt;bt2-idx&gt;  Index filename prefix (minus trailing .X.bt2).
-             NOTE: Bowtie 1 and Bowtie 2 indexes are not compatible.
-  &lt;m1&gt;       Files with #1 mates, paired with files in &lt;m2&gt;.
-             Could be gzip'ed (extension: .gz) or bzip2'ed (extension: .bz2).
-  &lt;m2&gt;       Files with #2 mates, paired with files in &lt;m1&gt;.
-             Could be gzip'ed (extension: .gz) or bzip2'ed (extension: .bz2).
-  &lt;r&gt;        Files with unpaired reads.
-             Could be gzip'ed (extension: .gz) or bzip2'ed (extension: .bz2).
-  &lt;sam&gt;      File for SAM output (default: stdout)
-
-  &lt;m1&gt;, &lt;m2&gt;, &lt;r&gt; can be comma-separated lists (no whitespace) and can be
-  specified many times.  E.g. '-U file1.fq,file2.fq -U file3.fq'.
-
-Options (defaults in parentheses):
-
- Input:
-  -q                 query input files are FASTQ .fq/.fastq (default)
-  --qseq             query input files are in Illumina's qseq format
-  -f                 query input files are (multi-)FASTA .fa/.mfa
-  -r                 query input files are raw one-sequence-per-line
-  -c                 &lt;m1&gt;, &lt;m2&gt;, &lt;r&gt; are sequences themselves, not files
-  -s/--skip &lt;int&gt;    skip the first &lt;int&gt; reads/pairs in the input (none)
-  -u/--upto &lt;int&gt;    stop after first &lt;int&gt; reads/pairs (no limit)
-  -5/--trim5 &lt;int&gt;   trim &lt;int&gt; bases from 5'/left end of reads (0)
-  -3/--trim3 &lt;int&gt;   trim &lt;int&gt; bases from 3'/right end of reads (0)
-  --phred33          qualities are Phred+33 (default)
-  --phred64          qualities are Phred+64
-  --int-quals        qualities encoded as space-delimited integers
-
- Presets:                 Same as:
-  For --end-to-end:
-   --very-fast            -D 5 -R 1 -N 0 -L 22 -i S,0,2.50
-   --fast                 -D 10 -R 2 -N 0 -L 22 -i S,0,2.50
-   --sensitive            -D 15 -R 2 -N 0 -L 22 -i S,1,1.15 (default)
-   --very-sensitive       -D 20 -R 3 -N 0 -L 20 -i S,1,0.50
-
-  For --local:
-   --very-fast-local      -D 5 -R 1 -N 0 -L 25 -i S,1,2.00
-   --fast-local           -D 10 -R 2 -N 0 -L 22 -i S,1,1.75
-   --sensitive-local      -D 15 -R 2 -N 0 -L 20 -i S,1,0.75 (default)
-   --very-sensitive-local -D 20 -R 3 -N 0 -L 20 -i S,1,0.50
-
- Alignment:
-  -N &lt;int&gt;           max # mismatches in seed alignment; can be 0 or 1 (0)
-  -L &lt;int&gt;           length of seed substrings; must be &gt;3, &lt;32 (22)
-  -i &lt;func&gt;          interval between seed substrings w/r/t read len (S,1,1.15)
-  --n-ceil &lt;func&gt;    func for max # non-A/C/G/Ts permitted in aln (L,0,0.15)
-  --dpad &lt;int&gt;       include &lt;int&gt; extra ref chars on sides of DP table (15)
-  --gbar &lt;int&gt;       disallow gaps within &lt;int&gt; nucs of read extremes (4)
-  --ignore-quals     treat all quality values as 30 on Phred scale (off)
-  --nofw             do not align forward (original) version of read (off)
-  --norc             do not align reverse-complement version of read (off)
-
-  --end-to-end       entire read must align; no clipping (on)
-   OR
-  --local            local alignment; ends might be soft clipped (off)
-
- Scoring:
-  --ma &lt;int&gt;         match bonus (0 for --end-to-end, 2 for --local)
-  --mp &lt;int&gt;         max penalty for mismatch; lower qual = lower penalty (6)
-  --np &lt;int&gt;         penalty for non-A/C/G/Ts in read/ref (1)
-  --rdg &lt;int&gt;,&lt;int&gt;  read gap open, extend penalties (5,3)
-  --rfg &lt;int&gt;,&lt;int&gt;  reference gap open, extend penalties (5,3)
-  --score-min &lt;func&gt; min acceptable alignment score w/r/t read length
-                     (G,20,8 for local, L,-0.6,-0.6 for end-to-end)
-
- Reporting:
-  (default)          look for multiple alignments, report best, with MAPQ
-   OR
-  -k &lt;int&gt;           report up to &lt;int&gt; alns per read; MAPQ not meaningful
-   OR
-  -a/--all           report all alignments; very slow, MAPQ not meaningful
-
- Effort:
-  -D &lt;int&gt;           give up extending after &lt;int&gt; failed extends in a row (15)
-  -R &lt;int&gt;           for reads w/ repetitive seeds, try &lt;int&gt; sets of seeds (2)
-
- Paired-end:
-  -I/--minins &lt;int&gt;  minimum fragment length (0)
-  -X/--maxins &lt;int&gt;  maximum fragment length (500)
-  --fr/--rf/--ff     -1, -2 mates align fw/rev, rev/fw, fw/fw (--fr)
-  --no-mixed         suppress unpaired alignments for paired reads
-  --no-discordant    suppress discordant alignments for paired reads
-  --no-dovetail      not concordant when mates extend past each other
-  --no-contain       not concordant when one mate alignment contains other
-  --no-overlap       not concordant when mates overlap at all
-
- Output:
-  -t/--time          print wall-clock time taken by search phases
-  --un &lt;path&gt;           write unpaired reads that didn't align to &lt;path&gt;
-  --al &lt;path&gt;           write unpaired reads that aligned at least once to &lt;path&gt;
-  --un-conc &lt;path&gt;      write pairs that didn't align concordantly to &lt;path&gt;
-  --al-conc &lt;path&gt;      write pairs that aligned concordantly at least once to &lt;path&gt;
-  (Note: for --un, --al, --un-conc, or --al-conc, add '-gz' to the option name, e.g.
-  --un-gz &lt;path&gt;, to gzip compress output, or add '-bz2' to bzip2 compress output.)
-  --quiet            print nothing to stderr except serious errors
-  --met-file &lt;path&gt;  send metrics to file at &lt;path&gt; (off)
-  --met-stderr       send metrics to stderr (off)
-  --met &lt;int&gt;        report internal counters & metrics every &lt;int&gt; secs (1)
-  --no-head          supppress header lines, i.e. lines starting with @
-  --no-sq            supppress @SQ header lines
-  --rg-id &lt;text&gt;     set read group id, reflected in @RG line and RG:Z: opt field
-  --rg &lt;text&gt;        add &lt;text&gt; ("lab:value") to @RG line of SAM header.
-                     Note: @RG line only printed when --rg-id is set.
-  --omit-sec-seq     put '*' in SEQ and QUAL fields for secondary alignments.
-
- Performance:
-  -o/--offrate &lt;int&gt; override offrate of index; must be &gt;= index's offrate
-  -p/--threads &lt;int&gt; number of alignment threads to launch (1)
-  --reorder          force SAM output order to match order of input reads
-  --mm               use memory-mapped I/O for index; many 'bowtie's can share
-
- Other:
-  --qc-filter        filter out reads that are bad according to QSEQ filter
-  --seed &lt;int&gt;       seed for random number generator (0)
-  --non-deterministic seed rand. gen. arbitrarily instead of using read attributes
-  --version          print version information and quit
-  -h/--help          print this usage message
-</pre>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </div>
-</div>
-</div>
-</div>
-</p>
-</div>
-
-<!-- Placeholder for the output coming back from the server -->
-<div class="container">
-    <div class="row">
-        <div class="col-lg-12">
-            <div id="main">
-            </div>
-        </div>
-    </div>
-</div>
-
-<!-- Footer  ================================================== -->
-
-<footer class="bs-footer" role="contentinfo">
-    <h6 div class="container">
-        <a href="http://bowtie-bio.sourceforge.net/bowtie2/index.shtml" target="_blank">Bowtie 2 Homepage</a>
-        </div>
-    </h6>
-</footer>
-
-
-</body>
-</html>
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/index.html.sv b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/index.html.sv
deleted file mode 100644
index b777734dc4d..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/index.html.sv
+++ /dev/null
@@ -1,314 +0,0 @@
-<head>
-  <title>Quantitative Genomics Facility</title>
-  <link rel="stylesheet" href="bootstrap3/css/bootstrap.min.css">
-  <script type="text/javascript" src="d3.v2.min.js"></script>
-  <script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-  <script type="text/javascript" src="bootstrap3/js/bootstrap.min.js"></script>
-  <script type="text/javascript" src="spin.min.js"></script>
-  <script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-  <script type="text/javascript" src="openbis-dsu.js"></script>
-  <!-- To speed development, cache the requests -->
-  <!-- <script type="text/javascript" src="openbis-request-cache.js"></script> -->
-  <script>
-
-dsu = new openbis_dsu('/openbis/openbis', '/datastore_server');
-var vis;
-var didCreateVis = false;
-var context = new openbisWebAppContext();
-
-$(document).ready(function() {
-});
-
-function createVis()
-{ 
-	if (didCreateVis) return;
-	vis = d3.select("#main").append("div").attr("id", "vis");
-	didCreateVis = true;
-}
-
-function displayReturnedTable(data)
-{
-	if (data.error) {
-		console.log(data.error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	var dataToShow = data.result;
-
-	d3.select("#progress").remove()
-        d3.select("#button-group").remove()
-	
-	vis.append("p").text("");	
-	// Pick all div elements of the visualization
-	vis.selectAll("div")
-           .data(dataToShow.rows)
-	   .enter()
-	   .append("div")
-	   .html(function(row) { return row[1].value;})
-
-	var button = d3.select("#container")
-	               .append("div")
-
-        button.selectAll("button")
-            .data(dataToShow.rows)
-            .enter()
-            .append("div")
-            .append("button")
-            .attr("id", function(row) { return row[0].value; })
-            .attr("class", function(row) { if (row[0].value == 0) {return "btn btn-success";} return "btn btn-danger";})
-            //.attr("onclick", function(row) { return "callIngestionSetInvoice('" + row + "');" })
-            .text(function(row) { if (row[0].value == 0) { return "OK"; } return "Fail";});
-
-//        var invoices = [];
-//        for (var i=0;i<data.result.rows.length;i++) { 
-//           //var val = data.result.rows[i][1].value.split('#')[0]; 
-//           var val = data.result.rows[i][1].value; 
-//           if (val) {
-//             invoices.push(val)
-//           } 
-//        }
-}
-
-function hideButtons(data)
-{
-        var buttonId = data.result.rows[0][0].value;
-	d3.select("#setInvoice").remove()
-        d3.select("#main").append("div").attr("id", "Done").append("p").text("Done " + buttonId);
-        d3.select("button#" + String(buttonId)).remove();
-}
-
-function spinner (target) {
-     var opts = {
-	lines: 13, // The number of lines to draw
-	length: 7, // The length of each line
-	width: 4, // The line thickness
-	radius: 10, // The radius of the inner circle
-	corners: 1, // Corner roundness (0..1)
-	rotate: 0, // The rotation offset
-	color: '#000', // #rgb or #rrggbb
-	speed: 1, // Rounds per second
-	trail: 60, // Afterglow percentage
-	shadow: false, // Whether to render a shadow
-	hwaccel: false, // Whether to use hardware acceleration
-	className: 'spinner', // The CSS class to assign to the spinner
-	zIndex: 2e9, // The z-index (defaults to 2000000000)
-	top: 250, // Top position relative to parent in px
-	left: 'auto' // Left position relative to parent in px
-      };
-      var spinner = new Spinner(opts).spin(target);
-}
-
-
-function callIngestionSetInvoice(piSampleString)
-{
-        var sampleIdentifier = context.getEntityIdentifier()
-
-        var piSampleStringList = piSampleString.split("#")
-        var principalInvestigator = piSampleStringList[0]
-	var listOfSamples = piSampleStringList.slice(1,piSampleStringList.length)
-
-        dsu.server.useSession(context.getSessionId());
-        var parameters = 
-        {
-                sampleId : sampleIdentifier,
-                pI : principalInvestigator,
-                listOfSamples : listOfSamples
-        };
-        
-        d3.select("#main").append("div").attr("id", "setInvoice").append("p").text("Setting 'INVOICE SENT' property of " + listOfSamples + "to TRUE");
-        var target = document.getElementById('setInvoice');
-        spinner(target) 
-        dsu.server.createReportFromAggregationService("DSS1", "setInvoiceSent", parameters, hideButtons);		
-}
-
-
-function callIngestionService()
-{
-        var permIdentifier = context.getEntityIdentifier()
-        var mySendEmail = $("#sendEmail").is(':checked')
-        var bowtieParameters = $("#Bowtie2Paramter").val()
-
-	d3.select("#main").select("#progress").remove()
-	d3.select("#main").select("#vis").remove()
-	didCreateVis = false;
-	dsu.server.useSession(context.getSessionId());
-	createVis()
-	var parameters = 
-	{
-		permId : permIdentifier,
-                sendEmail : mySendEmail,
-                bowtieParam : bowtieParameters
-	};
-        
-	d3.select("#main").append("div").attr("id", "progress").append("p").text("Starting gc3pie Job...");
-        var target = document.getElementById('progress');
-        spinner(target) 
-	dsu.server.createReportFromAggregationService("DSS1", "triggergc3pie", parameters, displayReturnedTable);
-}
-
- </script>
-</head>
-<body>
-<div id="container" class="container">
-<h2>Bowtie 2 Alignment</h2>
-<div id="main">
-
-
-
-<form role="form">
-  <div class="form-group">
-    <label for="Bowtie2ParamterLabel">Parameters</label>
-    <input type="text" class="form-control" id="Bowtie2Paramter" placeholder="e.g. --very-sensitive --phred33 -q">
-  </div>
-  <div class="checkbox">
-    <label>
-      <input type="checkbox" id="sendEmail"> Send Email when job finished
-    </label>
-  </div>
-</form>
-<button  class="btn btn-default btn-default"  type="submit" "createInvoice-button" onclick="callIngestionService();">Start Bowtie2 Alignment</button>
-
-    <div class="panel-group" id="accordion">
-  <div class="panel panel-default">
-    <div class="panel-heading">
-      <h4 class="panel-title">
-        <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
-          Available Bowtie 2 Options
-        </a>
-      </h4>
-    </div>
-    <div id="collapseOne" class="panel-collapse collapse">
-      <div class="panel-body">
-        <pre>
-Usage:
-  bowtie2 [options]* -x &lt;bt2-idx&gt; {-1 &lt;m1&gt; -2 &lt;m2&gt; | -U &lt;r&gt;} [-S &lt;sam&gt;]
-
-  &lt;bt2-idx&gt;  Index filename prefix (minus trailing .X.bt2).
-             NOTE: Bowtie 1 and Bowtie 2 indexes are not compatible.
-  &lt;m1&gt;       Files with #1 mates, paired with files in &lt;m2&gt;.
-             Could be gzip'ed (extension: .gz) or bzip2'ed (extension: .bz2).
-  &lt;m2&gt;       Files with #2 mates, paired with files in &lt;m1&gt;.
-             Could be gzip'ed (extension: .gz) or bzip2'ed (extension: .bz2).
-  &lt;r&gt;        Files with unpaired reads.
-             Could be gzip'ed (extension: .gz) or bzip2'ed (extension: .bz2).
-  &lt;sam&gt;      File for SAM output (default: stdout)
-
-  &lt;m1&gt;, &lt;m2&gt;, &lt;r&gt; can be comma-separated lists (no whitespace) and can be
-  specified many times.  E.g. '-U file1.fq,file2.fq -U file3.fq'.
-
-Options (defaults in parentheses):
-
- Input:
-  -q                 query input files are FASTQ .fq/.fastq (default)
-  --qseq             query input files are in Illumina's qseq format
-  -f                 query input files are (multi-)FASTA .fa/.mfa
-  -r                 query input files are raw one-sequence-per-line
-  -c                 &lt;m1&gt;, &lt;m2&gt;, &lt;r&gt; are sequences themselves, not files
-  -s/--skip &lt;int&gt;    skip the first &lt;int&gt; reads/pairs in the input (none)
-  -u/--upto &lt;int&gt;    stop after first &lt;int&gt; reads/pairs (no limit)
-  -5/--trim5 &lt;int&gt;   trim &lt;int&gt; bases from 5'/left end of reads (0)
-  -3/--trim3 &lt;int&gt;   trim &lt;int&gt; bases from 3'/right end of reads (0)
-  --phred33          qualities are Phred+33 (default)
-  --phred64          qualities are Phred+64
-  --int-quals        qualities encoded as space-delimited integers
-
- Presets:                 Same as:
-  For --end-to-end:
-   --very-fast            -D 5 -R 1 -N 0 -L 22 -i S,0,2.50
-   --fast                 -D 10 -R 2 -N 0 -L 22 -i S,0,2.50
-   --sensitive            -D 15 -R 2 -N 0 -L 22 -i S,1,1.15 (default)
-   --very-sensitive       -D 20 -R 3 -N 0 -L 20 -i S,1,0.50
-
-  For --local:
-   --very-fast-local      -D 5 -R 1 -N 0 -L 25 -i S,1,2.00
-   --fast-local           -D 10 -R 2 -N 0 -L 22 -i S,1,1.75
-   --sensitive-local      -D 15 -R 2 -N 0 -L 20 -i S,1,0.75 (default)
-   --very-sensitive-local -D 20 -R 3 -N 0 -L 20 -i S,1,0.50
-
- Alignment:
-  -N &lt;int&gt;           max # mismatches in seed alignment; can be 0 or 1 (0)
-  -L &lt;int&gt;           length of seed substrings; must be &gt;3, &lt;32 (22)
-  -i &lt;func&gt;          interval between seed substrings w/r/t read len (S,1,1.15)
-  --n-ceil &lt;func&gt;    func for max # non-A/C/G/Ts permitted in aln (L,0,0.15)
-  --dpad &lt;int&gt;       include &lt;int&gt; extra ref chars on sides of DP table (15)
-  --gbar &lt;int&gt;       disallow gaps within &lt;int&gt; nucs of read extremes (4)
-  --ignore-quals     treat all quality values as 30 on Phred scale (off)
-  --nofw             do not align forward (original) version of read (off)
-  --norc             do not align reverse-complement version of read (off)
-
-  --end-to-end       entire read must align; no clipping (on)
-   OR
-  --local            local alignment; ends might be soft clipped (off)
-
- Scoring:
-  --ma &lt;int&gt;         match bonus (0 for --end-to-end, 2 for --local)
-  --mp &lt;int&gt;         max penalty for mismatch; lower qual = lower penalty (6)
-  --np &lt;int&gt;         penalty for non-A/C/G/Ts in read/ref (1)
-  --rdg &lt;int&gt;,&lt;int&gt;  read gap open, extend penalties (5,3)
-  --rfg &lt;int&gt;,&lt;int&gt;  reference gap open, extend penalties (5,3)
-  --score-min &lt;func&gt; min acceptable alignment score w/r/t read length
-                     (G,20,8 for local, L,-0.6,-0.6 for end-to-end)
-
- Reporting:
-  (default)          look for multiple alignments, report best, with MAPQ
-   OR
-  -k &lt;int&gt;           report up to &lt;int&gt; alns per read; MAPQ not meaningful
-   OR
-  -a/--all           report all alignments; very slow, MAPQ not meaningful
-
- Effort:
-  -D &lt;int&gt;           give up extending after &lt;int&gt; failed extends in a row (15)
-  -R &lt;int&gt;           for reads w/ repetitive seeds, try &lt;int&gt; sets of seeds (2)
-
- Paired-end:
-  -I/--minins &lt;int&gt;  minimum fragment length (0)
-  -X/--maxins &lt;int&gt;  maximum fragment length (500)
-  --fr/--rf/--ff     -1, -2 mates align fw/rev, rev/fw, fw/fw (--fr)
-  --no-mixed         suppress unpaired alignments for paired reads
-  --no-discordant    suppress discordant alignments for paired reads
-  --no-dovetail      not concordant when mates extend past each other
-  --no-contain       not concordant when one mate alignment contains other
-  --no-overlap       not concordant when mates overlap at all
-
- Output:
-  -t/--time          print wall-clock time taken by search phases
-  --un &lt;path&gt;           write unpaired reads that didn't align to &lt;path&gt;
-  --al &lt;path&gt;           write unpaired reads that aligned at least once to &lt;path&gt;
-  --un-conc &lt;path&gt;      write pairs that didn't align concordantly to &lt;path&gt;
-  --al-conc &lt;path&gt;      write pairs that aligned concordantly at least once to &lt;path&gt;
-  (Note: for --un, --al, --un-conc, or --al-conc, add '-gz' to the option name, e.g.
-  --un-gz &lt;path&gt;, to gzip compress output, or add '-bz2' to bzip2 compress output.)
-  --quiet            print nothing to stderr except serious errors
-  --met-file &lt;path&gt;  send metrics to file at &lt;path&gt; (off)
-  --met-stderr       send metrics to stderr (off)
-  --met &lt;int&gt;        report internal counters & metrics every &lt;int&gt; secs (1)
-  --no-head          supppress header lines, i.e. lines starting with @
-  --no-sq            supppress @SQ header lines
-  --rg-id &lt;text&gt;     set read group id, reflected in @RG line and RG:Z: opt field
-  --rg &lt;text&gt;        add &lt;text&gt; ("lab:value") to @RG line of SAM header.
-                     Note: @RG line only printed when --rg-id is set.
-  --omit-sec-seq     put '*' in SEQ and QUAL fields for secondary alignments.
-
- Performance:
-  -o/--offrate &lt;int&gt; override offrate of index; must be &gt;= index's offrate
-  -p/--threads &lt;int&gt; number of alignment threads to launch (1)
-  --reorder          force SAM output order to match order of input reads
-  --mm               use memory-mapped I/O for index; many 'bowtie's can share
-
- Other:
-  --qc-filter        filter out reads that are bad according to QSEQ filter
-  --seed &lt;int&gt;       seed for random number generator (0)
-  --non-deterministic seed rand. gen. arbitrarily instead of using read attributes
-  --version          print version information and quit
-  -h/--help          print this usage message
-</pre>
-</div>
-</div>
-</div>
-</div>
-
-</div>
-</div>
-</body>
-</html>
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/index2.html b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/index2.html
deleted file mode 100644
index 1ae95d1251d..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/index2.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<head>
-  <title>Quantitative Genomics Facility</title>
-  <script type="text/css" src="bootstrap3/css/bootstrap.min.css"></script>
-</head>
-<body>
-<div id="main">
-      <button  class="btn btn-default btn-lg"  type="button" "createInvoice-button" onclick="callIngestionService();">Start gc3pie Job</button>
-</div>
-<p>
-  <button type="button" class="btn btn-primary btn-sm">Small button</button>
-  <button type="button" class="btn btn-default btn-sm">Small button</button>
-</p>
-</body>
-</html>
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/jquery-1.8.2.min.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/jquery-1.8.2.min.js
deleted file mode 100644
index bc3fbc81b26..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/jquery-1.8.2.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! jQuery v1.8.2 jquery.com | jquery.org/license */
-(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bY(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bW.length;while(e--){b=bW[e]+c;if(b in a)return b}return d}function bZ(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function b$(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bZ(c)&&(e[f]=p._data(c,"olddisplay",cc(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b_(a,b,c){var d=bP.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function ca(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bV[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bV[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bV[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bV[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bV[e]+"Width"))||0));return f}function cb(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0||d==null){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bQ.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+ca(a,b,c||(f?"border":"content"),e)+"px"}function cc(a){if(bS[a])return bS[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cA(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cv;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cA(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cA(a,c,d,e,"*",g)),h}function cB(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cC(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cD(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cL(){try{return new a.XMLHttpRequest}catch(b){}}function cM(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cU(){return setTimeout(function(){cN=b},0),cN=p.now()}function cV(a,b){p.each(b,function(b,c){var d=(cT[b]||[]).concat(cT["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cW(a,b,c){var d,e=0,f=0,g=cS.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cN||cU(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cN||cU(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cX(k,j.opts.specialEasing);for(;e<g;e++){d=cS[e].call(j,a,k,j.opts);if(d)return d}return cV(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cX(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cY(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bZ(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cc(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cP.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cZ(a,b,c,d,e){return new cZ.prototype.init(a,b,c,d,e)}function c$(a,b){var c,d={height:a},e=0;b=b?1:0;for(;e<4;e+=2-b)c=bV[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function da(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o&&!o.call(" ")?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":(a+"").replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete")setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){var e=p.type(c);e==="function"&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&e!=="string"&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")||(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)d=p._data(g[h],a+"queueHooks"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)f.indexOf(" "+b[g]+" ")<0&&(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},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(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=b+""}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,needsContext:f&&p.expr.match.needsContext.test(f),namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,l,m,n,o=(p._data(this,"events")||{})[c.type]||[],q=o.delegateCount,r=k.call(arguments),s=!c.exclusive&&!c.namespace,t=p.event.special[c.type]||{},u=[];r[0]=c,c.delegateTarget=this;if(t.preDispatch&&t.preDispatch.call(this,c)===!1)return;if(q&&(!c.button||c.type!=="click"))for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){h={},j=[];for(d=0;d<q;d++)l=o[d],m=l.selector,h[m]===b&&(h[m]=l.needsContext?p(m,this).index(f)>=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d<u.length&&!c.isPropagationStopped();d++){i=u[d],c.currentTarget=i.elem;for(e=0;e<i.matches.length&&!c.isImmediatePropagationStopped();e++){l=i.matches[e];if(s||!c.namespace&&!l.namespace||c.namespace_re&&c.namespace_re.test(l.namespace))c.data=l.data,c.handleObj=l,g=((p.event.special[l.origType]||{}).handle||l.handler).apply(i.elem,r),g!==b&&(c.result=g,g===!1&&(c.preventDefault(),c.stopPropagation()))}}return t.postDispatch&&t.postDispatch.call(this,c),c.result},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(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),!V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length===1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.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(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h<i;h++)if(f=a[h])if(!c||c(f,d,e))g.push(f),j&&b.push(h);return g}function bl(a,b,c,d,e,f){return d&&!d[o]&&(d=bl(d)),e&&!e[o]&&(e=bl(e,f)),z(function(f,g,h,i){if(f&&e)return;var j,k,l,m=[],n=[],o=g.length,p=f||bo(b||"*",h.nodeType?[h]:h,[],f),q=a&&(f||!b)?bk(p,m,a,h,i):p,r=c?e||(f?a:o||d)?[]:g:q;c&&c(q,r,h,i);if(d){l=bk(r,n),d(l,[],h,i),j=l.length;while(j--)if(k=l[j])r[n[j]]=!(q[n[j]]=k)}if(f){j=a&&r.length;while(j--)if(k=r[j])f[m[j]]=!(g[m[j]]=k)}else r=bk(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):w.apply(g,r)})}function bm(a){var b,c,d,f=a.length,g=e.relative[a[0].type],h=g||e.relative[" "],i=g?1:0,j=bi(function(a){return a===b},h,!0),k=bi(function(a){return y.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i<f;i++)if(c=e.relative[a[i].type])m=[bi(bj(m),c)];else{c=e.filter[a[i].type].apply(null,a[i].matches);if(c[o]){d=++i;for(;d<f;d++)if(e.relative[a[d].type])break;return bl(i>1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i<d&&bm(a.slice(i,d)),d<f&&bm(a=a.slice(d)),d<f&&a.join(""))}m.push(c)}return bj(m)}function bn(a,b){var d=b.length>0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)bc(a,b[e],c,d);return c}function bp(a,b,c,d,f){var g,h,j,k,l,m=bh(a),n=m.length;if(!d&&m.length===1){h=m[0]=m[0].slice(0);if(h.length>2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;b<c;b++)if(this[b]===a)return b;return-1},z=function(a,b){return a[o]=b==null||b,a},A=function(){var a={},b=[];return z(function(c,d){return b.push(c)>e.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="<a name='"+o+"'></a><div name='"+o+"'></div>",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d<b;d+=2)a.push(d);return a}),odd:bf(function(a,b,c){for(var d=1;d<b;d+=2)a.push(d);return a}),lt:bf(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},j=s.compareDocumentPosition?function(a,b){return a===b?(k=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:function(a,b){if(a===b)return k=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,h=b.parentNode,i=g;if(g===h)return bg(a,b);if(!g)return-1;if(!h)return 1;while(i)e.unshift(i),i=i.parentNode;i=h;while(i)f.unshift(i),i=i.parentNode;c=e.length,d=f.length;for(var j=0;j<c&&j<d;j++)if(e[j]!==f[j])return bg(e[j],f[j]);return j===c?bg(a,f[j],-1):bg(e[j],b,1)},[0,0].sort(j),m=!k,bc.uniqueSort=function(a){var b,c=1;k=m,a.sort(j);if(k)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1);return a},bc.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},i=bc.compile=function(a,b){var c,d=[],e=[],f=D[o][a];if(!f){b||(b=bh(a)),c=b.length;while(c--)f=bm(b[c]),f[o]?d.push(f):e.push(f);f=D(a,bn(e,d))}return f},r.querySelectorAll&&function(){var a,b=bp,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[":focus"],f=[":active",":focus"],h=s.matchesSelector||s.mozMatchesSelector||s.webkitMatchesSelector||s.oMatchesSelector||s.msMatchesSelector;X(function(a){a.innerHTML="<select><option selected=''></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'/>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={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,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cT[c]=cT[c]||[],cT[c].unshift(b)},prefilter:function(a,b){b?cS.unshift(a):cS.push(a)}}),p.Tween=cZ,cZ.prototype={constructor:cZ,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cZ.propHooks[this.prop];return a&&a.get?a.get(this):cZ.propHooks._default.get(this)},run:function(a){var b,c=cZ.propHooks[this.prop];return this.options.duration?this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cZ.propHooks._default.set(this),this}},cZ.prototype.init.prototype=cZ.prototype,cZ.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cZ.propHooks.scrollTop=cZ.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(c$(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bZ).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cW(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cR.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:c$("show"),slideUp:c$("hide"),slideToggle:c$("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cZ.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cO&&(cO=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cO),cO=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c_=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j={top:0,left:0},k=this[0],l=k&&k.ownerDocument;if(!l)return;return(d=l.body)===k?p.offset.bodyOffset(k):(c=l.documentElement,p.contains(c,k)?(typeof k.getBoundingClientRect!="undefined"&&(j=k.getBoundingClientRect()),e=da(l),f=c.clientTop||d.clientTop||0,g=c.clientLeft||d.clientLeft||0,h=e.pageYOffset||c.scrollTop,i=e.pageXOffset||c.scrollLeft,{top:j.top+h-f,left:j.left+i-g}):j)},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window);
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis-action-deferrer.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis-action-deferrer.js
deleted file mode 100644
index ee2e8171738..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis-action-deferrer.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * A utility class for deferring an action until all of some kind of action has completed
- *
- * @argument dependencies An array of the keys for the dependencies.
- */
-
-function openbisActionDeferrer(pendingAction, dependencies) {
-	this.pendingAction = pendingAction;
-	this.dependencies = {};
-	var newme = this;
-	dependencies.forEach(function(key) {
-		newme.dependencies[key] = false;
-	});
-}
-
-/**
- * Note that a dependency completed. Execute the pending action if appropriate.
- */
-openbisActionDeferrer.prototype.dependencyCompleted = function(key) {
-	this.dependencies[key] = true;
-	var shouldExecute = true;
-	for (prop in this.dependencies) {
-		if (false == this.dependencies[prop]) {
-			shouldExecute = false;
-			break;
-		}
-	}
-	if (shouldExecute) {
-		this.pendingAction();
-	}
-}
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis-dsu.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis-dsu.js
deleted file mode 100644
index 52e7336254a..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis-dsu.js
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * openbis-dsu.js
- * OpenBIS-DSU API
- *
- * A DSU-specific API for accessing openBIS. Depends on openbis.js.
- * @author Chandrasekhar Ramakrishnan
- */
-
-/**
- * The openbis_dsu object provides a dsu-specific interface to openbis. 
- * 
- * It creates objects for projects, experiments, samples, and datasets. These objects
- * are designed to be passed on to GUI libraries (like d3). The openbis version of each
- * object is stored in the bis variable.
- * @constructor
- */
-function openbis_dsu(url, dssUrl) {
-	this.server = new openbis(url, dssUrl);
-}
-
-/**
- * Request the sequencing samples for a project
- */
-openbis_dsu.prototype.retrieveSequencingSamples = function(action)
-{	
-	var sampleCriteria = 
-	{
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				attribute : "TYPE",
-				fieldType : "ATTRIBUTE",
-				desiredValue : "ILLUMINA_SEQUENCING" 
-			} ],
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	this.server.searchForSamples(sampleCriteria, action);
-}
-
-/**
- * Get the flow lanes for a sequencing sample.
- */
-openbis_dsu.prototype.retrieveFlowLanesForSequencingSample = function(sample, action)
-{
-	var projectCode = null;
-	
-	if(sample.bis.experimentIdentifierOrNull){
-		var experimentIdentifierRegexp = /\/(.*)\/(.*)\/(.*)/g;
-		var experimentIdentifierMatch = experimentIdentifierRegexp.exec(sample.bis.experimentIdentifierOrNull);
-		projectCode = experimentIdentifierMatch[2];
-	}else{
-		action(null);
-		return;
-	}
-	
-	var experimentCriteria = 
-	{
-		targetEntityKind : "EXPERIMENT",
-		criteria : { 
-			matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				"attribute":"PROJECT",
-				"fieldType":"ATTRIBUTE",
-				"desiredValue": projectCode
-			} ]
-		}
-	};
-	
-	var parentCriteria = 
-	{
-		targetEntityKind : "SAMPLE_PARENT",
-		criteria : { 
-			matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				"attribute":"CODE",
-				"fieldType":"ATTRIBUTE",
-				"desiredValue": sample.bis.code 
-			} ]
-		}
-	};
-	
-	var sampleCriteria = 
-	{
-		subCriterias : [ experimentCriteria, parentCriteria ],
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				attribute : "TYPE",
-				fieldType : "ATTRIBUTE",
-				desiredValue : "ILLUMINA_FLOW_LANE" 
-			} ],
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	this.server.searchForSamples(sampleCriteria, action)
-}
-
-/**
- * Get all data sets connected to a sequencing sample
- */
-openbis_dsu.prototype.retrieveDataSetsForSequencingSample = function(sequencing, action)
-{
-	this.server.listDataSetsForSample(sequencing.bis, false, action);
-}
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis-login.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis-login.js
deleted file mode 100644
index 7d1ece5965c..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis-login.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * A module for configuring the login page to openBIS. It hides and shows
- * the login form and main content as necessary. It invokes a specified
- * function on successful login.
- *
- * This module assumes that the page follows the structure of our standard 
- * login page. This means that the Following elements are defined : 
- *
- *   div#login-form-div
- *     form#login-form
- *       input#username
- *       input#password
- *       button#login-button
- *   div#main
- *     button#logout-button
- * 
- * Assuming these elements are defined, this module configures their appeareance
- * and behavior.The div#main element is initially hidden until the user logs in.
- * Once logged in, the div#login-form-div element is hidden and the div#main 
- * element is made visible.
- *
- * @module openbis-login
- * @requires jquery
- */
-
-
-/**
- * Configure the login page to hide and show the login form and main content
- * as appropriate
- *
- * @param openbis The openbis facade object
- * @param onLogin The function to be called when login succeeds.
- * @function
- */
-
-function openbisLoginPage(openbis, onLogin)
-{
-	this.openbis = openbis;
-	this.onLogin = onLogin;
-}
-
-openbisLoginPage.prototype.configure = function(){
-	var loginPage = this;
-	
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		loginPage.openbis.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 loginPage.openbis.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { loginPage.onLogin(data) })
-	});
-	
-	loginPage.openbis.ifRestoredSessionActive(function(data) { loginPage.onLogin(data) });
-	
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-}
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis-request-cache.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis-request-cache.js
deleted file mode 100644
index 29c57a8145e..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis-request-cache.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Caches openBIS JSON responses into the local browser storage.
- * 
- * Once the local storage is populated with data from real 
- * server interactions, the UI development can be done offline
- * based on the cached server responses.
- * 
- * USAGE : include this script in your app *after* the openbis facade.
- * Be careful not to distribute it to your customers.
- *  
- * <script type="text/javascript" src="openbis-request-cache.js"></script>
- * 
- * To clear the cache, you can call "localStorage.clear()" in a browser console. 
- */
-
-var original_ajax_request_func = _openbisInternal.prototype.ajaxRequest;
-
-_openbisInternal.prototype.ajaxRequest = function(settings) {
-	
-	function getCacheId(settings) {
-		var methodName = settings.data['method']
-		if (methodName.toLowerCase().indexOf('authenticate') != -1) {
-			// do not store sensitive parameters information
-			// for login methods (e.g. username/password)
-			return methodName
-		} else {
-			var params = settings.data['params']
-			return methodName + '-' + JSON.stringify(params)
-		}
-	}
-	
-	var cacheId = getCacheId(settings)
-	var cachedResponse = localStorage.getItem(cacheId)
-	
-	if (cachedResponse == null) {
-		var originalCallback = settings.success
-		settings.success = function(response) {
-			localStorage.setItem(cacheId, JSON.stringify(response))
-			originalCallback(response)
-		}
-		original_ajax_request_func(settings);
-	} else {
-		// async execution after a delay of 100ms 
-		setTimeout(function() {
-			settings.success(JSON.parse(cachedResponse))	
-		}, 100)
-		
-	}
-}
-
-alert("This app includes development code. For production, do not forget to remove the reference to openbis-request-cache.js")
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis-screening.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis-screening.js
deleted file mode 100644
index a39730902bb..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis-screening.js
+++ /dev/null
@@ -1,655 +0,0 @@
-/**
- * =======================================================
- * OpenBIS screening facade internal code (DO NOT USE!!!)
- * =======================================================
- */
-
-if(typeof openbis == 'undefined' || typeof _openbisInternal == 'undefined'){
-    alert('Loading of openbis-screening.js failed - openbis.js is missing');
-}
-
-var _openbisInternalGeneric = _openbisInternal;
-
-var _openbisInternal = function(openbisUrlOrNull){
-    this.init(openbisUrlOrNull);
-}
-
-$.extend(_openbisInternal.prototype, _openbisInternalGeneric.prototype);
-
-_openbisInternal.prototype.init = function(openbisUrlOrNull){
-    _openbisInternalGeneric.prototype.init.call(this, openbisUrlOrNull);
-    this.screeningUrl = this.openbisUrl + "/rmi-screening-api-v1.json"
-}
-
-_openbisInternal.prototype.getScreeningDataStoreApiUrlForDataStoreUrl = function(dataStoreUrl){
-    return dataStoreUrl + "/rmi-datastore-server-screening-api-v1.json"
-}
-
-var _openbisGeneric = openbis;
-
-/**
- * =========================
- * OpenBIS screening facade 
- * =========================
- * 
- * The facade provides access to the following services:
- * 
- * - all services that the generic OpenBIS facade provides (see openbis.js file)
- * - ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.IScreeningApiServer
- * - ch.systemsx.cisd.openbis.dss.screening.shared.api.v1.IDssServiceRpcScreening
- * 
- */
-
-var openbis = function(openbisUrlOrNull){
-	this._internal = new _openbisInternal(openbisUrlOrNull);
-}
-
-$.extend(openbis.prototype, _openbisGeneric.prototype);
-
-/**
- * ====================================================================================
- * ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.IScreeningApiServer methods
- * ====================================================================================
- */
-
-/**
- * @see IScreeningApiServer.listPlates(String)
- * @method
- */
-openbis.prototype.listPlates = function(action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listPlates",
-                    "params" : [ this.getSession() ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listPlates(String, ExperimentIdentifier)
- * @method
- */
-openbis.prototype.listPlatesForExperiment = function(experimentIdentifier, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listPlates",
-                    "params" : [ this.getSession(), experimentIdentifier ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.getPlateMetadataList(String, List<? extends PlateIdentifier>)
- * @method
- */
-openbis.prototype.getPlateMetadataList = function(plateIdentifiers, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "getPlateMetadataList",
-                    "params" : [ this.getSession(), plateIdentifiers ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listExperiments(String)
- * @method
- */
-openbis.prototype.listAllExperiments = function(action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listExperiments",
-                    "params" : [ this.getSession() ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listExperiments(String, String)
- * @method
- */
-openbis.prototype.listExperimentsVisibleToUser = function(userId, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listExperiments",
-                    "params" : [ this.getSession(), userId ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listFeatureVectorDatasets(String, List<? extends PlateIdentifier>)
- * @method
- */
-openbis.prototype.listFeatureVectorDatasets = function(plateIdentifiers, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listFeatureVectorDatasets",
-                    "params" : [ this.getSession(), plateIdentifiers ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listImageDatasets(String, List<? extends PlateIdentifier>)
- * @method
- */
-openbis.prototype.listImageDatasets = function(plateIdentifiers, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listImageDatasets",
-                    "params" : [ this.getSession(), plateIdentifiers ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listRawImageDatasets(String, List<? extends PlateIdentifier>)
- * @method
- */
-openbis.prototype.listRawImageDatasets = function(plateIdentifiers, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listRawImageDatasets",
-                    "params" : [ this.getSession(), plateIdentifiers ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listSegmentationImageDatasets(String, List<? extends PlateIdentifier>)
- * @method
- */
-openbis.prototype.listSegmentationImageDatasets = function(plateIdentifiers, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listSegmentationImageDatasets",
-                    "params" : [ this.getSession(), plateIdentifiers ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.getDatasetIdentifiers(String, List<String>)
- * @method
- */
-openbis.prototype.getDatasetIdentifiers = function(datasetCodes, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "getDatasetIdentifiers",
-                    "params" : [ this.getSession(), datasetCodes ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listPlateWells(String, ExperimentIdentifier, MaterialIdentifier, boolean)
- * @method
- */
-openbis.prototype.listPlateWellsForExperimentAndMaterial = function(experimentIdentifer, materialIdentifier, findDatasets, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listPlateWells",
-                    "params" : [ this.getSession(), experimentIdentifer, materialIdentifier, findDatasets ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listPlateWells(String, MaterialIdentifier, boolean)
- * @method
- */
-openbis.prototype.listPlateWellsForMaterial = function(materialIdentifier, findDatasets, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listPlateWells",
-                    "params" : [ this.getSession(), materialIdentifier, findDatasets ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listPlateWells(String, PlateIdentifier)
- * @method
- */
-openbis.prototype.listPlateWells = function(plateIdentifier, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listPlateWells",
-                    "params" : [ this.getSession(), plateIdentifier ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.getWellSample(String, WellIdentifier)
- * @method
- */
-openbis.prototype.getWellSample = function(wellIdentifier, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "getWellSample",
-                    "params" : [ this.getSession(), wellIdentifier ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.getPlateSample(String, PlateIdentifier)
- * @method
- */
-openbis.prototype.getPlateSample = function(plateIdentifier, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "getPlateSample",
-                    "params" : [ this.getSession(), plateIdentifier ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listPlateMaterialMapping(String, List<PlateIdentifier>, MaterialTypeIdentifier)
- * @method
- */
-openbis.prototype.listPlateMaterialMapping = function(plateIdentifiers, materialTypeIdentifierOrNull, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listPlateMaterialMapping",
-                    "params" : [ this.getSession(), plateIdentifiers, materialTypeIdentifierOrNull ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.getExperimentImageMetadata(String, ExperimentIdentifier)
- * @method
- */
-openbis.prototype.getExperimentImageMetadata = function(experimentIdentifer, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "getExperimentImageMetadata",
-                    "params" : [ this.getSession(), experimentIdentifer ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listAvailableFeatureCodes(String, List<? extends IFeatureVectorDatasetIdentifier>)
- * @method
- */
-openbis.prototype.listAvailableFeatureCodes = function(featureDatasets, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listAvailableFeatureCodes",
-                    "params" : [ this.getSession(), featureDatasets ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listAvailableFeatures(String, List<? extends IFeatureVectorDatasetIdentifier>)
- * @method
- */
-openbis.prototype.listAvailableFeatures = function(featureDatasets, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listAvailableFeatures",
-                    "params" : [ this.getSession(), featureDatasets ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.loadFeatures(String, List<FeatureVectorDatasetReference>, List<String>)
- * @method
- */
-openbis.prototype.loadFeatures = function(featureDatasets, featureCodes, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "loadFeatures",
-                    "params" : [ this.getSession(), featureDatasets, featureCodes ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.loadFeaturesForDatasetWellReferences(String, List<FeatureVectorDatasetWellReference>, List<String>)
- * @method
- */
-openbis.prototype.loadFeaturesForDatasetWellReferences = function(datasetWellReferences, featureCodes, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "loadFeaturesForDatasetWellReferences",
-                    "params" : [ this.getSession(), datasetWellReferences, featureCodes ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.loadImagesBase64(String, List<PlateImageReference>, boolean)
- * @method
- */
-openbis.prototype.loadImagesBase64ForImageReferencesAndImageConversion = function(imageReferences, convertToPng, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "loadImagesBase64",
-                    "params" : {
-                        "sessionToken" : this.getSession(),
-                        "imageReferences" : imageReferences,
-                        "convertToPng" : convertToPng
-                    }
-            },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.loadThumbnailImagesBase64(String, List<PlateImageReference>)
- * @method
- */
-openbis.prototype.loadThumbnailImagesBase64ForImageReferences = function(imageReferences, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "loadThumbnailImagesBase64",
-                    "params" : {
-                        "sessionToken" : this.getSession(), 
-                        "imageReferences" : imageReferences 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.loadImagesBase64(String, List<PlateImageReference>, ImageSize)
- * @method
- */
-openbis.prototype.loadImagesBase64ForImageReferencesAndImageSize = function(imageReferences, size, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "loadImagesBase64",
-                    "params" : {
-                        "sessionToken" : this.getSession(), 
-                        "imageReferences" : imageReferences,
-                        "size" : size 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.loadImagesBase64(String, List<PlateImageReference>)
- * @method
- */
-openbis.prototype.loadImagesBase64ForImageReferences = function(imageReferences, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "loadImagesBase64",
-                    "params" : { 
-                        "sessionToken" : this.getSession(),
-                        "imageReferences" : imageReferences 
-                    }
-            },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.loadImagesBase64(String, List<PlateImageReference>, LoadImageConfiguration)
- * @method
- */
-openbis.prototype.loadImagesBase64ForImageReferencesAndImageConfiguration = function(imageReferences, configuration, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "loadImagesBase64",
-                    "params" : { 
-                        "sessionToken" : this.getSession(), 
-                        "imageReferences" : imageReferences, 
-                        "configuration" : configuration 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.loadImagesBase64(String, List<PlateImageReference>, ImageRepresentationFormat)
- * @method
- */
-openbis.prototype.loadImagesBase64ForImageReferencesAndImageRepresentationFormat = function(imageReferences, format, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "loadImagesBase64",
-                    "params" : {
-                        "sessionToken" : this.getSession(), 
-                        "imageReferences" : imageReferences, 
-                        "format" : format 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.loadImagesBase64(String, List<PlateImageReference>, IImageRepresentationFormatSelectionCriterion...)
- * @method
- */
-openbis.prototype.loadImagesBase64ForImageReferencesAndImageRepresentationFormatCriteria = function(imageReferences, criteria, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "loadImagesBase64",
-                    "params" : { 
-                        "sessionToken" : this.getSession(), 
-                        "imageReferences" : imageReferences, 
-                        "criteria" : criteria 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listImageMetadata(String, List<? extends IImageDatasetIdentifier>)
- * @method
- */
-openbis.prototype.listImageMetadata = function(imageDatasets, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listImageMetadata",
-                    "params" : [ this.getSession(), imageDatasets ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listAvailableImageRepresentationFormats(String, List<? extends IDatasetIdentifier>)
- * @method
- */
-openbis.prototype.listAvailableImageRepresentationFormats = function(imageDatasets, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listAvailableImageRepresentationFormats",
-                    "params" : [ this.getSession(), imageDatasets ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.loadPhysicalThumbnailsBase64(String, List<PlateImageReference>, ImageRepresentationFormat)
- * @method
- */
-openbis.prototype.loadPhysicalThumbnailsBase64ForImageReferencesAndImageRepresentationFormat = function(imageReferences, format, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "loadPhysicalThumbnailsBase64",
-                    "params" : [ this.getSession(), imageReferences, format ] },
-            success: action
-    });
-}
-
-/**
- * =====================================================================================
- * ch.systemsx.cisd.openbis.dss.screening.shared.api.v1.IDssServiceRpcScreening methods
- * =====================================================================================
- */
-
-/**
- * @see IDssServiceRpcScreening.loadImagesBase64(String, IDatasetIdentifier, List<WellPosition>, String, ImageSize)
- * @method
- */
-openbis.prototype.loadImagesBase64ForDataSetIdentifierAndWellPositionsAndChannelAndImageSize = function(dataSetIdentifier, wellPositions, channel, thumbnailSizeOrNull, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.getScreeningDataStoreApiUrlForDataStoreUrl(dataSetIdentifier.datastoreServerUrl),
-            data: { "method" : "loadImagesBase64",
-                    "params" : { 
-                        "sessionToken" : this.getSession(), 
-                        "dataSetIdentifier" : dataSetIdentifier, 
-                        "wellPositions" : wellPositions, 
-                        "channel" : channel, 
-                        "thumbnailSizeOrNull" : thumbnailSizeOrNull 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IDssServiceRpcScreening.loadImagesBase64(String, IDatasetIdentifier, String, ImageSize)
- * @method
- */
-openbis.prototype.loadImagesBase64ForDataSetIdentifierAndChannelAndImageSize = function(dataSetIdentifier, channel, thumbnailSizeOrNull, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.getScreeningDataStoreApiUrlForDataStoreUrl(dataSetIdentifier.datastoreServerUrl),
-            data: { "method" : "loadImagesBase64",
-                    "params" : { 
-                        "sessionToken" : this.getSession(), 
-                        "dataSetIdentifier" : dataSetIdentifier,
-                        "channel" : channel, 
-                        "thumbnailSizeOrNull" : thumbnailSizeOrNull 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IDssServiceRpcScreening.loadThumbnailImagesBase64(String, IDatasetIdentifier, List<String>)
- * @method
- */
-openbis.prototype.loadThumbnailImagesBase64ForDataSetIdentifierAndChannels = function(dataSetIdentifier, channels, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.getScreeningDataStoreApiUrlForDataStoreUrl(dataSetIdentifier.datastoreServerUrl),
-            data: { "method" : "loadThumbnailImagesBase64",
-                    "params" : { 
-                        "sessionToken" : this.getSession(), 
-                        "dataSetIdentifier" : dataSetIdentifier, 
-                        "channels" : channels 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IDssServiceRpcScreening.listPlateImageReferences(String, IDatasetIdentifier, List<WellPosition>, String)
- * @method
- */
-openbis.prototype.listPlateImageReferencesForDataSetIdentifierAndWellPositionsAndChannel = function(dataSetIdentifier, wellPositions, channel, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.getScreeningDataStoreApiUrlForDataStoreUrl(dataSetIdentifier.datastoreServerUrl),
-            data: { "method" : "listPlateImageReferences",
-                    "params" : { 
-                        "sessionToken" : this.getSession(), 
-                        "dataSetIdentifier" : dataSetIdentifier, 
-                        "wellPositions" : wellPositions, 
-                        "channel" : channel 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IDssServiceRpcScreening.listPlateImageReferences(String, IDatasetIdentifier, List<WellPosition>, List<String>)
- * @method
- */
-openbis.prototype.listPlateImageReferencesForDataSetIdentifierAndWellPositionsAndChannels = function(dataSetIdentifier, wellPositions, channels, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.getScreeningDataStoreApiUrlForDataStoreUrl(dataSetIdentifier.datastoreServerUrl),
-            data: { "method" : "listPlateImageReferences",
-                    "params" : { 
-                        "sessionToken" : this.getSession(), 
-                        "dataSetIdentifier" : dataSetIdentifier, 
-                        "wellPositions" : wellPositions, 
-                        "channels" : channels 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IDssServiceRpcScreening.listImageReferences(String, IDatasetIdentifier, String)
- * @method
- */
-openbis.prototype.listImageReferencesForDataSetIdentifierAndChannel = function(dataSetIdentifier, channel, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.getScreeningDataStoreApiUrlForDataStoreUrl(dataSetIdentifier.datastoreServerUrl),
-            data: { "method" : "listImageReferences",
-                    "params" : { 
-                        "sessionToken" : this.getSession(), 
-                        "dataSetIdentifier" : dataSetIdentifier, 
-                        "channel" : channel 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IDssServiceRpcScreening.listImageReferences(String, IDatasetIdentifier, List<String>)
- * @method
- */
-openbis.prototype.listImageReferencesForDataSetIdentifierAndChannels = function(dataSetIdentifier, channels, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.getScreeningDataStoreApiUrlForDataStoreUrl(dataSetIdentifier.datastoreServerUrl),
-            data: { "method" : "listImageReferences",
-                    "params" : {
-                        "sessionToken" : this.getSession(), 
-                        "dataSetIdentifier" : dataSetIdentifier, 
-                        "channels" : channels 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IDssServiceRpcScreening.listAvailableFeatureLists(String, IFeatureVectorDatasetIdentifier)
- * @method
- */
-openbis.prototype.listAvailableFeatureLists = function(featureVectorDataSet, action) {
-	this._internal.ajaxRequest({
-	        url: this._internal.getScreeningDataStoreApiUrlForDataStoreUrl(featureVectorDataSet.datastoreServerUrl),
-	        data: { "method" : "listAvailableFeatureLists",
- 	                params : [this.getSession(), featureVectorDataSet]
-	        },
-	        success: action
-	});
-};
-
-/**
- * @see IDssServiceRpcScreening.getFeatureList(String, IFeatureVectorDatasetIdentifier, String)
- * @method
- */
-openbis.prototype.getFeatureList = function(featureVectorDataSet, featureListCode, action) {
-	this._internal.ajaxRequest({
-	        url: this._internal.getScreeningDataStoreApiUrlForDataStoreUrl(featureVectorDataSet.datastoreServerUrl),
-	        data: { "method" : "getFeatureList",
- 	                params : [this.getSession(), featureVectorDataSet, featureListCode]
-	        },
-	        success: action
-	});
-};
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis.js
deleted file mode 100644
index f5476a74d56..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/openbis.js
+++ /dev/null
@@ -1,1987 +0,0 @@
-/**
- * =============================================
- * OpenBIS facade internal code (DO NOT USE!!!)
- * =============================================
- */
-
-if(typeof $ == 'undefined'){
-	alert('Loading of openbis.js failed - jquery.js is missing');
-}
-
-function _openbisInternal(openbisUrlOrNull){
-	this.init(openbisUrlOrNull);
-}
-
-_openbisInternal.prototype.init = function(openbisUrlOrNull){
-	this.openbisUrl = this.normalizeOpenbisUrl(openbisUrlOrNull);
-	this.generalInfoServiceUrl = this.openbisUrl + "/rmi-general-information-v1.json";
-	this.generalInfoChangingServiceUrl = this.openbisUrl + "/rmi-general-information-changing-v1.json";
-	this.queryServiceUrl = this.openbisUrl + "/rmi-query-v1.json";
-	this.webInfoServiceUrl = this.openbisUrl + "/rmi-web-information-v1.json"
-}
-
-_openbisInternal.prototype.log = function(msg){
-	if(console){
-		console.log(msg);
-	}
-}
-
-_openbisInternal.prototype.normalizeOpenbisUrl = function(openbisUrlOrNull){
-	var parts = this.parseUri(window.location);
-	
-	if(openbisUrlOrNull){
-		var openbisParts = this.parseUri(openbisUrlOrNull);
-		
-		for(openbisPartName in openbisParts){
-			var openbisPartValue = openbisParts[openbisPartName];
-			
-			if(openbisPartValue){
-				parts[openbisPartName] = openbisPartValue;
-			}
-		}
-	}
-	
-	return parts.protocol + "://" + parts.authority + "/openbis/openbis";
-}
-
-_openbisInternal.prototype.jsonRequestData = function(params) {
-	params["id"] = "1";
-	params["jsonrpc"] = "2.0";
-	return JSON.stringify(params)
-}
- 
-_openbisInternal.prototype.ajaxRequest = function(settings) {
-	settings.type = "POST";
-	settings.processData = false;
-	settings.dataType = "json";
-	settings.data = this.jsonRequestData(settings.data);
-	settings.success = this.ajaxRequestSuccess(settings.success);
-	// we call the same settings.success function for backward compatibility
-	settings.error = this.ajaxRequestError(settings.success);
-	$.ajax(settings)
-}
-
-_openbisInternal.prototype.ajaxRequestSuccess = function(action){
-	var openbisObj = this;
-	return function(response){
-		if(response.error){
-			openbisObj.log("Request failed: " + JSON.stringify(response.error));
-		}
-		if(action){
-			action(response);
-		}
-	};
-}
-
-_openbisInternal.prototype.ajaxRequestError = function(action){
-	var openbisObj = this;
-	return function(xhr, status, error){
-		openbisObj.log("Request failed: " + error);
-		if(action){
-			action({
-				"error" : "Request failed: " + error
-			});
-		}
-	};
-}
-
-// Functions for working with cookies (see http://www.quirksmode.org/js/cookies.html)
-
-_openbisInternal.prototype.createCookie = function(name,value,days) {
-	if (days) {
-		var date = new Date();
-		date.setTime(date.getTime()+(days*24*60*60*1000));
-		var expires = "; expires="+date.toGMTString();
-	}
-	else var expires = "";
-	document.cookie = name+"="+value+expires+"; path=/";
-}
-
-_openbisInternal.prototype.readCookie = function(name) {
-	var nameEQ = name + "=";
-	var ca = document.cookie.split(';');
-	for(var i=0;i < ca.length;i++) {
-		var c = ca[i];
-		while (c.charAt(0)==' ') c = c.substring(1,c.length);
-		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
-	}
-	return null;
-}
-
-_openbisInternal.prototype.eraseCookie = function(name) {
-	this.createCookie(name,"",-1);
-}
-
-// parseUri 1.2.2 (c) Steven Levithan <stevenlevithan.com> MIT License (see http://blog.stevenlevithan.com/archives/parseuri)
-
-_openbisInternal.prototype.parseUri = function(str) {
-	var options = {
-		strictMode: false,
-		key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
-		q:   {
-			name:   "queryKey",
-			parser: /(?:^|&)([^&=]*)=?([^&]*)/g
-		},
-		parser: {
-			strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
-			loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
-		}
-	};
-	
-	var	o   = options,
-		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
-		uri = {},
-		i   = 14;
-
-	while (i--) uri[o.key[i]] = m[i] || "";
-
-	uri[o.q.name] = {};
-	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
-		if ($1) uri[o.q.name][$1] = $2;
-	});
-
-	return uri;
-}
-
-_openbisInternal.prototype.listDataStores = function(action){
-	this.ajaxRequest({
-		url: this.generalInfoServiceUrl,
-		data: { "method" : "listDataStores",
-				"params" : [ this.sessionToken ] 
-		},
-		success: action
-	});
-}
-
-_openbisInternal.prototype.initDataStores = function(action){
-	var openbisInternal = this;
-	
-	if(typeof this.dataStores === "undefined"){
-		this.listDataStores(function(response){
-			if(response.result){
-				openbisInternal.dataStores = response.result;
-			}else{
-				openbisInternal.dataStores = [];
-			}
-			action();
-		});
-	}else{
-		action();
-	}
-}
-
-_openbisInternal.prototype.getDataStoreUrlForDataStoreCode = function(dataStoreCodeOrNull, action) {
-	var openbisInternal = this;
-	
-	this.initDataStores(function(){
-		if(openbisInternal.dataStores.length == 0){
-			throw "Couldn't get a data store url as there are no data stores configured.";
-		}else{
-			if(dataStoreCodeOrNull){
-				var dataStoreUrl = null;
-				$.each(openbisInternal.dataStores, function(index, dataStore){
-					if(dataStore.code == dataStoreCodeOrNull){
-						dataStoreUrl = dataStore.downloadUrl;
-					}
-				});
-				if(dataStoreUrl){
-					action(dataStoreUrl);
-				}else{
-					throw "Couldn't get a data store url because data store with " + dataStoreCodeOrNull + " code does not exist.";
-				}
-			}else{
-				if(openbisInternal.dataStores.length == 1){
-					action(openbisInternal.dataStores[0].downloadUrl);
-				}else{
-					throw "There is more than one data store configured. Please specify a data store code to get a data store url.";
-				}
-			}
-		}
-	});
-}
-
-_openbisInternal.prototype.getDataStoreUrlForDataSetCode = function(dataSetCode, action) {
-	var openbisInternal = this;
-	
-	this.initDataStores(function(){
-		if(openbisInternal.dataStores.length == 0){
-			throw "Couldn't get a data store url as there are no data stores configured.";
-		}else if(openbisInternal.dataStores.length == 1){
-			action(openbisInternal.dataStores[0].downloadUrl);
-		}else{
-			openbisInternal.ajaxRequest({
-				url: openbisInternal.generalInfoServiceUrl,
-				data: { "method" : "tryGetDataStoreBaseURL",
-						"params" : [ openbisInternal.sessionToken, dataSetCode ] 
-						},
-				success: function(response){
-					var hostUrl = response.result;
-					
-					if(hostUrl){
-						action(hostUrl + "/datastore_server");
-					}else{
-						throw "Couldn't get a data store url for a data set with " + dataSetCode + " code because the data set does not exist.";
-					}
-				}
-			 });
-		}
-	});
-}
-
-_openbisInternal.prototype.getDataStoreApiUrlForDataStoreCode = function(dataStoreCodeOrNull, action) {
-	this.getDataStoreUrlForDataStoreCode(dataStoreCodeOrNull, function(dataStoreUrl){
-		action(dataStoreUrl + "/rmi-dss-api-v1.json");
-	});
-}
-
-_openbisInternal.prototype.getDataStoreApiUrlForDataSetCode = function(dataSetCode, action) {
-	this.getDataStoreUrlForDataSetCode(dataSetCode, function(dataStoreUrl){
-		action(dataStoreUrl + "/rmi-dss-api-v1.json");
-	});
-}
-
-_openbisInternal.prototype.getDataStoreHostForDataStoreCode = function(dataStoreCodeOrNull, action) {
-	var openbisObj = this;
-	
-	this.getDataStoreUrlForDataStoreCode(dataStoreCodeOrNull, function(dataStoreUrl){
-		var parts = openbisObj.parseUri(dataStoreUrl);
-		action(parts.protocol + "://" + parts.authority);
-	});
-}
-
-/**
- * ===============
- * OpenBIS facade
- * ===============
- * 
- * The facade provides access to the following services:
- * 
- * - ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService
- * - ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationChangingService
- * - ch.systemsx.cisd.openbis.plugin.query.shared.api.v1.IQueryApiServer
- * - ch.systemsx.cisd.openbis.generic.shared.api.v1.IWebInformationService
- * - ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.IDssServiceRpcGeneric
- * 
- * @class
- * 
- */
-
-function openbis(openbisUrlOrNull) {
-	this._internal = new _openbisInternal(openbisUrlOrNull);
-}
-
-/**
- * ==================================================================================
- * ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService methods
- * ==================================================================================
- */
-
-/**
- * Log into openBIS.
- * 
- * @see IGeneralInformationService.tryToAuthenticateForAllServices(String, String)
- * @method
- */
-openbis.prototype.login = function(userId, userPassword, action) {
-	var openbisObj = this
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "tryToAuthenticateForAllServices",
-				"params" : [ userId, userPassword ] 
-				},
-		success: 
-			function(loginResponse) {
-				if(loginResponse.error){
-					alert("Login failed");
-				}else{
-					openbisObj._internal.sessionToken = loginResponse.result;
-					openbisObj.rememberSession();
-				}
-				openbisObj._internal.initDataStores(function(){
-					action(loginResponse);	
-				});
-			}
-	 });
-}
-
-/**
- * Stores the current session in a cookie. 
- *
- * @method
- */
-openbis.prototype.rememberSession = function() {
-	this._internal.createCookie('openbis', this.getSession(), 1);
-}
-
-/**
- * Removes the current session from a cookie. 
- *
- * @method
- */
-openbis.prototype.forgetSession = function() {
-	this._internal.eraseCookie('openbis');
-}
-
-/**
- * Restores the current session from a cookie.
- *
- * @method
- */
-openbis.prototype.restoreSession = function() {
-	this._internal.sessionToken = this._internal.readCookie('openbis');
-}
-
-/**
- * Sets the current session.
- *
- * @method
- */
-openbis.prototype.useSession = function(sessionToken){
-	this._internal.sessionToken = sessionToken;
-}
-
-/**
- * Returns the current session.
- * 
- * @method
- */
-openbis.prototype.getSession = function(){
-	return this._internal.sessionToken;
-}
-
-/**
- * Checks whether the current session is still active.
- *
- * @see IGeneralInformationService.isSessionActive(String)
- * @method
- */
-openbis.prototype.isSessionActive = function(action) {
-	if(this.getSession()){
-		this._internal.ajaxRequest({
-			url: this._internal.generalInfoServiceUrl,
-			data: { "method" : "isSessionActive",
-					"params" : [ this.getSession() ] 
-					},
-			success: action
-		});
-	}else{
-		action({ result : false })
-	}
-}
-
-/**
- * Restores the current session from a cookie and executes 
- * the specified action if the session is still active.
- * 
- * @see restoreSession()
- * @see isSessionActive()
- * @method
- */
-openbis.prototype.ifRestoredSessionActive = function(action) {
-	this.restoreSession();
-	this.isSessionActive(function(data) { if (data.result) action(data) });
-}
-
-/**
- * Log out of openBIS.
- * 
- * @see IGeneralInformationService.logout(String)
- * @method
- */
-openbis.prototype.logout = function(action) {
-	this.forgetSession();
-	
-	if(this.getSession()){
-		this._internal.ajaxRequest({
-			url: this._internal.generalInfoServiceUrl,
-			data: { "method" : "logout",
-					"params" : [ this.getSession() ] 
-				  },
-			success: action
-		});
-	}else if(action){
-		action({ result : null });
-	}
-}
-
-/**
- * @see IGeneralInformationService.listNamedRoleSets(String)
- * @method
- */
-openbis.prototype.listNamedRoleSets = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listNamedRoleSets",
-				"params" : [ this.getSession() ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listSpacesWithProjectsAndRoleAssignments(String, String)
- * @method
- */
-openbis.prototype.listSpacesWithProjectsAndRoleAssignments = function(databaseInstanceCodeOrNull, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listSpacesWithProjectsAndRoleAssignments",
-				"params" : [ this.getSession(),  databaseInstanceCodeOrNull ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.searchForSamples(String, SearchCriteria)
- * @method
- */
-openbis.prototype.searchForSamples = function(searchCriteria, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "searchForSamples",
-				"params" : [ this.getSession(),
-							 searchCriteria ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.searchForSamples(String, SearchCriteria, EnumSet<SampleFetchOption>)
- * @method
- */
-openbis.prototype.searchForSamplesWithFetchOptions = function(searchCriteria, fetchOptions, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { 
-				"method" : "searchForSamples",
-				"params" : [ 
-					this.getSession(),
-					searchCriteria,
-					fetchOptions ] 
-		},
-		success: action
-	 });
-}
-
-/**
- * @see IGeneralInformationService.searchForSamplesOnBehalfOfUser(String, SearchCriteria, EnumSet<SampleFetchOption>, String)
- * @method
- */
-openbis.prototype.searchForSamplesOnBehalfOfUser = function(searchCriteria, fetchOptions, userId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { 
-				"method" : "searchForSamplesOnBehalfOfUser",
-				"params" : [ 
-					this.getSession(),
-					searchCriteria,
-					fetchOptions,
-					userId ] 
-		},
-		success: action
-	 });
-}
-
-/**
- * @see IGeneralInformationService.filterSamplesVisibleToUser(String, List<Sample>, String)
- * @method
- */
-openbis.prototype.filterSamplesVisibleToUser = function(allSamples, userId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { 
-				"method" : "filterSamplesVisibleToUser",
-				"params" : [ 
-					this.getSession(),
-					allSamples,
-					userId ] 
-		},
-		success: action
-	 });
-}
-
-/**
- * @see IGeneralInformationService.listSamplesForExperiment(String, String)
- * @method
- */
-openbis.prototype.listSamplesForExperiment = function(experimentIdentifier, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listSamplesForExperiment",
-				"params" : [ this.getSession(), experimentIdentifier ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listSamplesForExperimentOnBehalfOfUser(String, String, String)
- * @method
- */
-openbis.prototype.listSamplesForExperimentOnBehalfOfUser = function(experimentIdentifier, userId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listSamplesForExperimentOnBehalfOfUser",
-				"params" : [ this.getSession(), experimentIdentifier, userId ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listDataSets(String, List<Sample>)
- * @method
- */
-openbis.prototype.listDataSetsForSamples = function(samples, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listDataSets",
-				"params" : [ this.getSession(), samples ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listExperiments(String, List<Project>, String)
- * @method
- */
-openbis.prototype.listExperiments = function(projects, experimentType, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listExperiments",
-				"params" : [ this.getSession(), projects, experimentType ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listExperimentsHavingSamples(String, List<Project>, String)
- * @method
- */
-openbis.prototype.listExperimentsHavingSamples = function(projects, experimentType, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listExperimentsHavingSamples",
-				"params" : [ this.getSession(), projects, experimentType ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listExperimentsHavingDataSets(String, List<Project>, String)
- * @method
- */
-openbis.prototype.listExperimentsHavingDataSets = function(projects, experimentType, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listExperimentsHavingDataSets",
-				"params" : [ this.getSession(), projects, experimentType ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.filterExperimentsVisibleToUser(String, List<Experiment>, String)
- * @method
- */
-openbis.prototype.filterExperimentsVisibleToUser = function(allExperiments, userId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "filterExperimentsVisibleToUser",
-				"params" : [ this.getSession(), allExperiments, userId ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listDataSetsForSample(String, Sample, boolean)
- * @method
- */
-openbis.prototype.listDataSetsForSample = function(sample, restrictToDirectlyConnected, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listDataSetsForSample",
-				"params" : [ this.getSession(), sample, restrictToDirectlyConnected ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listDataStores(String)
- * @method
- */
-openbis.prototype.listDataStores = function(action) {
-	this._internal.listDataStores(action);
-}
-
-/**
- * @see IGeneralInformationService.getDefaultPutDataStoreBaseURL(String)
- * @method
- */
-openbis.prototype.getDefaultPutDataStoreBaseURL = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "getDefaultPutDataStoreBaseURL",
-				"params" : [ this.getSession() ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.tryGetDataStoreBaseURL(String)
- * @method
- */
-openbis.prototype.tryGetDataStoreBaseURL = function(dataSetCode, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "tryGetDataStoreBaseURL",
-				"params" : [ this.getSession(), dataSetCode ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.getDataStoreBaseURLs(String, List<String>)
- * @method
- */
-openbis.prototype.getDataStoreBaseURLs = function(dataSetCodes, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "getDataStoreBaseURLs",
-				"params" : [ this.getSession(), dataSetCodes ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listDataSetTypes(String)
- * @method
- */
-openbis.prototype.listDataSetTypes = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listDataSetTypes",
-				"params" : [ this.getSession() ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listSampleTypes(String)
- * @method
- */
-openbis.prototype.listSampleTypes = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listSampleTypes",
-				"params" : [ this.getSession() ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listExperimentTypes(String)
- * @method
- */
-openbis.prototype.listExperimentTypes = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listExperimentTypes",
-				"params" : [ this.getSession() ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listVocabularies(String)
- * @method
- */
-openbis.prototype.listVocabularies = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listVocabularies",
-				"params" : [ this.getSession() ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listDataSets(String, List<Sample>, EnumSet<Connections>)
- * @method
- */
-openbis.prototype.listDataSetsForSamplesWithConnections = function(samples, connectionsToGet, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listDataSets",
-				"params" : [ this.getSession(), samples, connectionsToGet ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listDataSetsOnBehalfOfUser(String, List<Sample>, EnumSet<Connections>, String)
- * @method
- */
-openbis.prototype.listDataSetsForSamplesOnBehalfOfUser = function(samples, connectionsToGet, userId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listDataSetsOnBehalfOfUser",
-				"params" : [ this.getSession(), samples, connectionsToGet, userId ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listDataSetsForExperiments(String, List<Experiment>, EnumSet<Connections>)
- * @method
- */
-openbis.prototype.listDataSetsForExperiments = function(experiments, connectionsToGet, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listDataSetsForExperiments",
-				"params" : [ this.getSession(), experiments, connectionsToGet ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listDataSetsForExperimentsOnBehalfOfUser(String, List<Experiment>, EnumSet<Connections>, String)
- * @method
- */
-openbis.prototype.listDataSetsForExperimentsOnBehalfOfUser = function(experiments, connectionsToGet, userId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listDataSetsForExperimentsOnBehalfOfUser",
-				"params" : [ this.getSession(), experiments, connectionsToGet, userId ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.getDataSetMetaData(String, List<String>)
- * @method
- */
-openbis.prototype.getDataSetMetaData = function(dataSetCodes, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "getDataSetMetaData",
-				"params" : [ this.getSession(), dataSetCodes ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.getDataSetMetaData(String, List<String>, EnumSet<DataSetFetchOption>)
- * @method
- */
-openbis.prototype.getDataSetMetaDataWithFetchOptions = function(dataSetCodes, fetchOptions, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "getDataSetMetaData",
-				"params" : [ this.getSession(), dataSetCodes, fetchOptions ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.searchForDataSets(String, SearchCriteria)
- * @method
- */
-openbis.prototype.searchForDataSets = function(searchCriteria, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "searchForDataSets",
-				"params" : [ this.getSession(),
-							 searchCriteria ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.searchForDataSetsOnBehalfOfUser(String, SearchCriteria, String)
- * @method
- */
-openbis.prototype.searchForDataSetsOnBehalfOfUser = function(searchCriteria, userId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "searchForDataSetsOnBehalfOfUser",
-				"params" : [ this.getSession(),
-							 searchCriteria,
-							 userId ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.filterDataSetsVisibleToUser(String, List<DataSet>, String)
- * @method
- */
-openbis.prototype.filterDataSetsVisibleToUser = function(allDataSets, userId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "filterDataSetsVisibleToUser",
-				"params" : [ this.getSession(),
-				             allDataSets,
-							 userId ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listExperiments(String, List<String>)
- * @method
- */
-openbis.prototype.listExperimentsForIdentifiers = function(experimentIdentifiers, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listExperiments",
-				"params" : [ this.getSession(),
-				             experimentIdentifiers ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.searchForExperiments(String, SearchCriteria)
- * @method
- */
-openbis.prototype.searchForExperiments = function(searchCriteria, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "searchForExperiments",
-				"params" : [ this.getSession(),
-				             searchCriteria ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listProjects(String)
- * @method
- */
-openbis.prototype.listProjects = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listProjects",
-				"params" : [ this.getSession() ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listProjectsOnBehalfOfUser(String, String)
- * @method
- */
-openbis.prototype.listProjectsOnBehalfOfUser = function(userId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listProjectsOnBehalfOfUser",
-				"params" : [ this.getSession(), userId ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.getMaterialByCodes(String, List<MaterialIdentifier>)
- * @method
- */
-openbis.prototype.getMaterialByCodes = function(materialIdentifiers, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "getMaterialByCodes",
-				"params" : [ this.getSession(), materialIdentifiers ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.searchForMaterials(String, SearchCriteria)
- * @method
- */
-openbis.prototype.searchForMaterials = function(searchCriteria, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "searchForMaterials",
-				"params" : [ this.getSession(), searchCriteria ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listMetaprojects(String)
- * @method
- */
-openbis.prototype.listMetaprojects = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listMetaprojects",
-				"params" : [ this.getSession() ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listMetaprojectsOnBehalfOfUser(String, String)
- * @method
- */
-openbis.prototype.listMetaprojectsOnBehalfOfUser = function(userId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listMetaprojectsOnBehalfOfUser",
-				"params" : [ this.getSession(), userId ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.getMetaproject(String, IMetaprojectId)
- * @method
- */
-openbis.prototype.getMetaproject = function(metaprojectId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "getMetaproject",
-				"params" : [ this.getSession(), metaprojectId ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.getMetaprojectOnBehalfOfUser(String, IMetaprojectId, String)
- * @method
- */
-openbis.prototype.getMetaprojectOnBehalfOfUser = function(metaprojectId, userId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "getMetaprojectOnBehalfOfUser",
-				"params" : [ this.getSession(), metaprojectId, userId ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listAttachmentsForProject(String, IProjectId, boolean)
- * @method
- */
-openbis.prototype.listAttachmentsForProject = function(projectId, allVersions, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listAttachmentsForProject",
-				"params" : [ this.getSession(), projectId, allVersions ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listAttachmentsForExperiment(String, IExperimentId, boolean)
- * @method
- */
-openbis.prototype.listAttachmentsForExperiment = function(experimentId, allVersions, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listAttachmentsForExperiment",
-				"params" : [ this.getSession(), experimentId, allVersions ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listAttachmentsForSample(String, ISampleId, boolean)
- * @method
- */
-openbis.prototype.listAttachmentsForSample = function(sampleId, allVersions, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listAttachmentsForSample",
-				"params" : [ this.getSession(), sampleId, allVersions ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * ==========================================================================================
- * ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationChangingService methods
- * ==========================================================================================
- */
-
-/**
- * @see IGeneralInformationChangingService.updateSampleProperties(String, long, Map<String,String>)
- * @method
- */
-openbis.prototype.updateSampleProperties = function(sampleId, properties, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoChangingServiceUrl,
-		data: { "method" : "updateSampleProperties",
-				"params" : [ this.getSession(), sampleId, properties ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationChangingService.addUnofficialVocabularyTerm(String, Long, NewVocabularyTerm)
- * @method
- */
-openbis.prototype.addUnofficialVocabularyTerm = function(vocabularyId, term, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoChangingServiceUrl,
-		data: { "method" : "addUnofficialVocabularyTerm",
-				"params" : [ this.getSession(), vocabularyId, term ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationChangingService.getWebAppSettings(String, String)
- * @method
- */
-openbis.prototype.getWebAppSettings = function(webappId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoChangingServiceUrl,
-		data: { "method" : "getWebAppSettings",
-		params : [ this.getSession(), webappId ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationChangingService.setWebAppSettings(String, WebAppSettings)
- * @method
- */
-openbis.prototype.setWebAppSettings = function(webappSettings, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoChangingServiceUrl,
-		data: { "method" : "setWebAppSettings",
-		params : [ this.getSession(), webappSettings ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationChangingService.createMetaproject(String, String, String)
- * @method
- */
-openbis.prototype.createMetaproject = function(name, descriptionOrNull, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoChangingServiceUrl,
-		data: { "method" : "createMetaproject",
-		params : [ this.getSession(), name, descriptionOrNull ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationChangingService.updateMetaproject(String, IMetaprojectId, String, String)
- * @method
- */
-openbis.prototype.updateMetaproject = function(metaprojectId, name, descriptionOrNull, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoChangingServiceUrl,
-		data: { "method" : "updateMetaproject",
-		params : [ this.getSession(), metaprojectId, name, descriptionOrNull ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationChangingService.deleteMetaproject(String, IMetaprojectId)
- * @method
- */
-openbis.prototype.deleteMetaproject = function(metaprojectId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoChangingServiceUrl,
-		data: { "method" : "deleteMetaproject",
-		params : [ this.getSession(), metaprojectId ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationChangingService.addToMetaproject(String, IMetaprojectId, MetaprojectAssignmentsIds)
- * @method
- */
-openbis.prototype.addToMetaproject = function(metaprojectId, assignmentsToAdd, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoChangingServiceUrl,
-		data: { "method" : "addToMetaproject",
-		params : [ this.getSession(), metaprojectId, assignmentsToAdd ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationChangingService.removeFromMetaproject(String, IMetaprojectId, MetaprojectAssignmentsIds)
- * @method
- */
-openbis.prototype.removeFromMetaproject = function(metaprojectId, assignmentsToRemove, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoChangingServiceUrl,
-		data: { "method" : "removeFromMetaproject",
-		params : [ this.getSession(), metaprojectId, assignmentsToRemove ] },
-		success: action
-	});
-}
-
-/**
- * ============================================================================
- * ch.systemsx.cisd.openbis.plugin.query.shared.api.v1.IQueryApiServer methods
- * ============================================================================
- */
-
-/**
- * @see IQueryApiServer.listQueries(String)
- * @method
- */
-openbis.prototype.listQueries = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.queryServiceUrl,
-		data: { "method" : "listQueries",
-				"params" : [ this.getSession() ] },
-		success: action
-	});
-}
-
-/**
- * @see IQueryApiServer.executeQuery(String, long, Map<String, String>)
- * @method
- */
-openbis.prototype.executeQuery = function(queryId, parameterBindings, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.queryServiceUrl,
-		data: { "method" : "executeQuery",
-				"params" : [ this.getSession(), queryId, parameterBindings ] },
-		success: action
-	});
-}
-
-/**
- * @see IQueryApiServer.listTableReportDescriptions(String)
- * @method
- */
-openbis.prototype.listTableReportDescriptions = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.queryServiceUrl,
-		data: { "method" : "listTableReportDescriptions",
-				"params" : [ this.getSession() ] },
-		success: action
-	});
-}
-
-/**
- * @see IQueryApiServer.createReportFromDataSets(String, String, String, List<String>)
- * @method
- */
-openbis.prototype.createReportFromDataSets = function(dataStoreCode, serviceKey, dataSetCodes, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.queryServiceUrl,
-		data: { "method" : "createReportFromDataSets",
-		params : [ this.getSession(), dataStoreCode, serviceKey, dataSetCodes ] },
-		success: action
-	});
-}
-
-/**
- * @see IQueryApiServer.listAggregationServices(String)
- * @method
- */
-openbis.prototype.listAggregationServices = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.queryServiceUrl,
-		data: { "method" : "listAggregationServices",
-		params : [ this.getSession() ] },
-		success: action
-	});
-}
-
-/**
- * @see IQueryApiServer.createReportFromAggregationService(String, String, String, Map<String, Object>)
- * @method
- */
-openbis.prototype.createReportFromAggregationService = function(dataStoreCode, serviceKey, parameters, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.queryServiceUrl,
-		data: { "method" : "createReportFromAggregationService",
-		params : [ this.getSession(), dataStoreCode, serviceKey, parameters ] },
-		success: action
-	});
-}
-
-
-/**
- * ==============================================================================
- * ch.systemsx.cisd.openbis.generic.shared.api.v1.IWebInformationService methods
- * ==============================================================================
- */
-
-/**
- * Returns the current server side session.
- * 
- * @see IWebInformationService.getSessionToken()
- * @method
- */
-openbis.prototype.getSessionTokenFromServer = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.webInfoServiceUrl,
-		data: { "method" : "getSessionToken" },
-		success: action
-	 });
-}
-
-/**
- * =================================================================================
- * ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.IDssServiceRpcGeneric methods
- * =================================================================================
- */
-
-/**
- * @see IDssServiceRpcGeneric.listFilesForDataSet(String, DataSetFileDTO)
- * @method
- */
-openbis.prototype.listFilesForDataSetFile = function(fileOrFolder, action) {
-	var openbisObj = this;
-	this._internal.getDataStoreApiUrlForDataSetCode(fileOrFolder.dataSetCode, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: { "method" : "listFilesForDataSet",
-					"params" : [ openbisObj.getSession(), fileOrFolder ] },
-			success: action
-		});
-	});
-}
-
-/**
- * @see IDssServiceRpcGeneric.getDownloadUrlForFileForDataSet(String, DataSetFileDTO)
- * @method
- */
-openbis.prototype.getDownloadUrlForFileForDataSetFile = function(fileOrFolder, action) {
-	var openbisObj = this;
-	this._internal.getDataStoreApiUrlForDataSetCode(fileOrFolder.dataSetCode, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: { "method" : "getDownloadUrlForFileForDataSet",
-					"params" : [ openbisObj.getSession(), fileOrFolder ] },
-			success: action
-		});
-	});
-}
-
-/**
- * Returns a download url that is valid as long as the user session is valid.
- * @method
- */
-openbis.prototype.getDownloadUrlForFileForDataSetFileInSession = function(fileOrFolder, action) {
-	this.getDownloadUrlForFileForDataSetInSession(fileOrFolder.dataSetCode, fileOrFolder.path, action);
-}
-
-/**
- * @see IDssServiceRpcGeneric.getDownloadUrlForFileForDataSetWithTimeout(String, DataSetFileDTO, long)
- * @method
- */
-openbis.prototype.getDownloadUrlForFileForDataSetFileWithTimeout = function(fileOrFolder, validityDurationInSeconds, action) {
-	var openbisObj = this;
-	this._internal.getDataStoreApiUrlForDataSetCode(fileOrFolder.dataSetCode, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: { "method" : "getDownloadUrlForFileForDataSetWithTimeout",
-					"params" : [ openbisObj.getSession(), fileOrFolder, validityDurationInSeconds ] },
-			success: action
-		});
-	});
-}
-
-/**
- * @see IDssServiceRpcGeneric.listFilesForDataSet(String, String, String, boolean)
- * @method
- */
-openbis.prototype.listFilesForDataSet = function(dataSetCode, path, recursive, action) {
-	var openbisObj = this;
-	this._internal.getDataStoreApiUrlForDataSetCode(dataSetCode, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: { "method" : "listFilesForDataSet",
-					"params" : [ openbisObj.getSession(), dataSetCode, path, recursive ] },
-			success: action
-		});
-	});
-}
-
-/**
- * @see IDssServiceRpcGeneric.getDownloadUrlForFileForDataSet(String, String, String)
- * @method
- */
-openbis.prototype.getDownloadUrlForFileForDataSet = function(dataSetCode, path, action) {
-	var openbisObj = this;
-	this._internal.getDataStoreApiUrlForDataSetCode(dataSetCode, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: { "method" : "getDownloadUrlForFileForDataSet",
-					"params" : [ openbisObj.getSession(), dataSetCode, path ] },
-			success: action
-		});
-	});
-}
-
-/**
- * Returns a download url that is valid as long as the user session is valid.
- * @method
- */
-openbis.prototype.getDownloadUrlForFileForDataSetInSession = function(dataSetCode, path, action) {
-	var openbisObj = this;
-	this._internal.getDataStoreUrlForDataSetCode(dataSetCode, function(dataStoreUrl){
-		var pathWithoutSlash = path.charAt(0) == "/" ? path.substr(1) : path;
-		var url = dataStoreUrl + "/" + dataSetCode + "/" + pathWithoutSlash + "?sessionID=" + openbisObj.getSession();
-		action(url);
-	});
-}
-
-/**
- * @see IDssServiceRpcGeneric.getDownloadUrlForFileForDataSetWithTimeout(String, String, String, long)
- * @method
- */
-openbis.prototype.getDownloadUrlForFileForDataSetWithTimeout = function(dataSetCode, path, validityDurationInSeconds, action) {
-	var openbisObj = this;
-	this._internal.getDataStoreApiUrlForDataSetCode(dataSetCode, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: { "method" : "getDownloadUrlForFileForDataSetWithTimeout",
-					"params" : [ openbisObj.getSession(), dataSetCode, path, validityDurationInSeconds ] },
-			success: action
-		});
-	});
-}
-
-/**
- * Creates a session workspace file uploader inside the specified uploaderContainer element and for the default data store.
- * @method
- */
-openbis.prototype.createSessionWorkspaceUploader = function(uploaderContainer, oncomplete){
-	this.createSessionWorkspaceUploaderForDataStore(uploaderContainer, null, oncomplete);
-}
-
-/**
- * Creates a session workspace file uploader inside the specified uploaderContainer element and for the specified data store.
- * @method
- */
-openbis.prototype.createSessionWorkspaceUploaderForDataStore = function(uploaderContainer, dataStoreCodeOrNull, oncomplete){
-	var uploaderSupported = window.File && window.FileReader && window.XMLHttpRequest;
-
-	if(!uploaderSupported){
-		alert("Uploader is not supported by your browser.");
-		return;
-	}
-	
-	var $this = this;
-	this._internal.getDataStoreUrlForDataStoreCode(dataStoreCodeOrNull, function(dataStoreUrl){
-		// figure out what is the location of the openbis.js script and assume that uploader resources are served by the same server
-		var openbisScriptLocation = $('script[src*=openbis\\.js]').attr('src');
-		var uploaderDirectoryLocation = jsFileLocation = openbisScriptLocation.replace(/js\/openbis\.js/g, 'uploader');
-		
-		$('head').append('<link rel="stylesheet" media="screen" type="text/css" href="' + uploaderDirectoryLocation + '/css/src/upload.css" />');
-		$('head').append('<script charset="utf-8" type="text/javascript" src="' + uploaderDirectoryLocation + '/js/src/upload.js" />');
-		
-		$(uploaderContainer).load(uploaderDirectoryLocation + "/index.html", function(){
-			Uploader.init({
-			       smart_mode: true,
-			       chunk_size: 1000*1024,
-			       file_upload_url: dataStoreUrl + "/session_workspace_file_upload",
-			       form_upload_url: dataStoreUrl + "/session_workspace_form_upload",
-			       file_download_url: dataStoreUrl + "/session_workspace_file_download",
-			       oncomplete: oncomplete,
-			       sessionID: $this.getSession()
-			});
-		});
-	});
-}
-
-/**
- * Creates a session workspace download url for a file with the specified filePath and for the default data store.
- * @method
- */
-openbis.prototype.createSessionWorkspaceDownloadUrl = function(filePath, action){
-	return this.createSessionWorkspaceDownloadUrlForDataStore(filePath, null, action);
-}
-
-/**
- * Creates a session workspace download url for a file with the specified filePath and for the specified data store.
- * @method
- */
-openbis.prototype.createSessionWorkspaceDownloadUrlForDataStore = function(filePath, dataStoreCodeOrNull, action){
-	var openbisObj = this;
-	
-	this._internal.getDataStoreUrlForDataStoreCode(dataStoreCodeOrNull, function(dataStoreUrl){
-		var downloadUrl = dataStoreUrl + "/session_workspace_file_download?sessionID=" + openbisObj.getSession() + "&filePath=" + filePath;
-		action(downloadUrl);
-	});
-}
-
-/**
- * Create a session workspace download link for a file with the specified filePath at the default data store.
- * @method
- */
-openbis.prototype.createSessionWorkspaceDownloadLink = function(filePath, linkText, action){
-	return this.createSessionWorkspaceDownloadLinkForDataStore(filePath, linkText, null, action);
-}
-
-/**
- * Create a session workspace download link for a file with the specified filePath at the specified data store.
- * @method
- */
-openbis.prototype.createSessionWorkspaceDownloadLinkForDataStore = function(filePath, linkText, dataStoreCodeOrNull, action){
-	this.createSessionWorkspaceDownloadUrlForDataStore(filePath, dataStoreCodeOrNull, function(downloadUrl){
-		var link = $("<a href='" + downloadUrl + "'>" + (linkText ? linkText : filePath) + "</a>");
-		action(link);
-	});
-}
-
-/**
- * Downloads a session workspace file with the specified filePath from the default data store.
- * @method
- */
-openbis.prototype.downloadSessionWorkspaceFile = function(filePath, action) {
-	this.downloadSessionWorkspaceFileForDataStore(filePath, null, action);
-}
-
-/**
- * Downloads a session workspace file with the specified filePath from the specified data store.
- * @method
- */
-openbis.prototype.downloadSessionWorkspaceFileForDataStore = function(filePath, dataStoreCodeOrNull, action) {
-	var openbisObj = this;
-	
-	this.createSessionWorkspaceDownloadUrlForDataStore(filePath, dataStoreCodeOrNull, function(downloadUrl){
-		$.ajax({
-			type: "GET",
-			dataType: "text",
-			url: downloadUrl,
-			success: openbisObj._internal.ajaxRequestSuccess(action),
-			error: openbisObj._internal.ajaxRequestError(action)
-		});
-	});
-}
-
-/**
- * Deletes a session workspace file with the specified filePath from the default data store.
- * @method
- */
-openbis.prototype.deleteSessionWorkspaceFile = function(filePath, action) {
-	this.deleteSessionWorkspaceFileForDataStore(filePath, null, action)
-}
-
-/**
- * Deletes a session workspace file with the specified filePath from the specified data store.
- * @method
- */
-openbis.prototype.deleteSessionWorkspaceFileForDataStore = function(filePath, dataStoreCodeOrNull, action) {
-	var openbisObj = this;
-	
-	this._internal.getDataStoreApiUrlForDataStoreCode(dataStoreCodeOrNull, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: {
-				"method" : "deleteSessionWorkspaceFile",
-				"params" : [ openbisObj.getSession(), filePath ]
-			},
-			success: action
-		});
-	});
-}
-
-/**
- * @see IDssServiceRpcGeneric.getPathToDataSet(String, String, String)
- * @method
- */
-openbis.prototype.getPathToDataSet = function(dataSetCode, overrideStoreRootPathOrNull, action) {
-	var openbisObj = this;
-	this._internal.getDataStoreApiUrlForDataSetCode(dataSetCode, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: { "method" : "getPathToDataSet",
-					"params" : [ openbisObj.getSession(), dataSetCode, overrideStoreRootPathOrNull ] },
-			success: action
-		});
-	});
-}
-
-/**
- * @see IDssServiceRpcGeneric.tryGetPathToDataSet(String, String, String)
- * @method
- */
-openbis.prototype.tryGetPathToDataSet = function(dataSetCode, overrideStoreRootPathOrNull, action) {
-	var openbisObj = this;
-	this._internal.getDataStoreApiUrlForDataSetCode(dataSetCode, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: { "method" : "tryGetPathToDataSet",
-					"params" : [ openbisObj.getSession(), dataSetCode, overrideStoreRootPathOrNull ] },
-			success: action
-		});
-	});
-}
-
-/**
- * List shares from the default data store.
- * 
- * @see IDssServiceRpcGeneric.listAllShares(String)
- * @method
- */
-openbis.prototype.listAllShares = function(action) {
-	this.listAllSharesForDataStore(null, action);
-}
-
-/**
- * List shares from the specified data store.
- * 
- * @see IDssServiceRpcGeneric.listAllShares(String)
- * @method
- */
-openbis.prototype.listAllSharesForDataStore = function(dataStoreCodeOrNull, action) {
-	var openbisObj = this;
-	
-	this._internal.getDataStoreApiUrlForDataStoreCode(dataStoreCodeOrNull, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: {
-				"method" : "listAllShares",
-				"params" : [ openbisObj.getSession() ]
-			},
-			success: action
-		});
-	});
-}
-
-/**
- * @see IDssServiceRpcGeneric.shuffleDataSet(String, String, String)
- * @method
- */
-openbis.prototype.shuffleDataSet = function(dataSetCode, shareId, action) {
-	var openbisObj = this;
-	this._internal.getDataStoreApiUrlForDataSetCode(dataSetCode, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: { "method" : "shuffleDataSet",
-					"params" : [ openbisObj.getSession(), dataSetCode, shareId ] },
-			success: action
-		});
-	});
-}
-
-/**
- * Get a validation script from the default data store.
- * 
- * @see IDssServiceRpcGeneric.getValidationScript(String, String)
- * @method
- */
-openbis.prototype.getValidationScript = function(dataSetTypeOrNull, action) {
-	this.getValidationScriptForDataStore(dataSetTypeOrNull, null, action);
-}
-
-/**
- * Get a validation script from the specified data store.
- * 
- * @see IDssServiceRpcGeneric.getValidationScript(String, String)
- * @method
- */
-openbis.prototype.getValidationScriptForDataStore = function(dataSetTypeOrNull, dataStoreCodeOrNull, action) {
-	var openbisObj = this;
-	
-	this._internal.getDataStoreApiUrlForDataStoreCode(dataStoreCodeOrNull, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: {
-				"method" : "getValidationScript",
-				"params" : [ openbisObj.getSession(), dataSetTypeOrNull ]
-			},
-			success: action
-		});
-	});
-}
-
-/**
- * Get a url that will produce a graph with the given configuration at the default data store.
- *
- * @method
- */
-openbis.prototype.getGraphUrl = function(graphConfig, action) {
-	this.getGraphUrlForDataStore(graphConfig, null, action);
-}
-
-/**
- * Get a url that will produce a graph with the given configuration at the specified data store.
- *
- * @method
- */
-openbis.prototype.getGraphUrlForDataStore = function(graphConfig, dataStoreCodeOrNull, action) {
-	var openbisObj = this;
-	
-	this._internal.getDataStoreHostForDataStoreCode(dataStoreCodeOrNull, function(dataStoreHost) {
-		var graphUrl = dataStoreHost + "/graphservice/?sessionID=" + openbisObj.getSession();
-		for (prop in graphConfig) {
-			graphUrl += "&" + prop + "=" + encodeURIComponent(graphConfig[prop]);
-		}
-		action(graphUrl);
-	});
-}
-
-/**
- * =====================
- * OpenBIS graph config
- * =====================
- * 
- * Defines the configuration for a graph generated by the server's graphservice.
- * 
- * To use, set properties on the object with keys that match the name of the servlet
- * parameters of the graphservice and then call the method getGraphUrl on the openbis
- * object. Do *not* set the sessionID paramter -- this will be filled in by the openbis 
- * object.
- *
- * The graphservice is documented here: https://wiki-bsse.ethz.ch/display/openBISDoc/Configuring+Graphs+and+Plots
- * 
- * @class
- * 
- */
-function openbisGraphConfig(filename, graphtype, title) {
-	this.file = filename;
-	this["graph-type"] =  graphtype;
-	this.title = title;
-}
-
-
-/**
- * =====================================================
- * OpenBIS webapp context internal code (DO NOT USE!!!)
- * =====================================================
- */
-
-function _openbisWebAppContextInternal(){
-	this.webappCode = this.getParameter("webapp-code");
-	this.sessionId = this.getParameter("session-id");
-	this.entityKind = this.getParameter("entity-kind");
-	this.entityType = this.getParameter("entity-type");
-	this.entityIdentifier = this.getParameter("entity-identifier");
-	this.entityPermId = this.getParameter("entity-perm-id");
-}
-
-_openbisWebAppContextInternal.prototype.getParameter = function(parameterName){
-	var match = location.search.match(RegExp("[?|&]"+parameterName+'=(.+?)(&|$)'));
-	if(match && match[1]){
-		return decodeURIComponent(match[1].replace(/\+/g,' '));
-	}else{
-		return null;
-	}
-}
-
-/**
- * =======================
- * OpenBIS webapp context 
- * =======================
- * 
- * Provides a context information for webapps that are embedded inside the OpenBIS UI.
- * 
- * @class
- * 
- */
-function openbisWebAppContext(){
-	this._internal = new _openbisWebAppContextInternal();
-}
-
-openbisWebAppContext.prototype.getWebappCode = function(){
-	return this._internal.webappCode;
-}
-
-openbisWebAppContext.prototype.getSessionId = function(){
-	return this._internal.sessionId;
-}
-
-openbisWebAppContext.prototype.getEntityKind = function(){
-	return this._internal.entityKind;
-}
-
-openbisWebAppContext.prototype.getEntityType = function(){
-	return this._internal.entityType;
-}
-
-openbisWebAppContext.prototype.getEntityIdentifier = function(){
-	return this._internal.entityIdentifier;
-}
-
-openbisWebAppContext.prototype.getEntityPermId = function(){
-	return this._internal.entityPermId;
-}
-
-openbisWebAppContext.prototype.getParameter = function(parameterName){
-	return this._internal.getParameter(parameterName);
-}
-
-/**
- * =======================
- * OpenBIS Search Criteria
- * =======================
- *
- * Methods and classes for constructing search criteria objects for use in searches.
- */
-
-/**
- * It is easier to construct instances of match clauses using one of the factory methods:
- *
- * 		createPropertyMatch
- * 		createAttributeMatch
- * 		createTimeAttributeMatch
- * 		createAnyPropertyMatch
- * 		createAnyFieldMatch
- *
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClause
- * @class
- */
-function SearchCriteriaMatchClause(type, fieldType, fieldCode, desiredValue) {
-	this["@type"] = type;
-	this["fieldType"] = fieldType;
-	this["fieldCode"] = fieldCode;
-	this["desiredValue"] = desiredValue;
-	// compareMode should be one of "LESS_THAN_OR_EQUAL", "EQUALS", "GREATER_THAN_OR_EQUAL"
-	this["compareMode"] = "EQUALS";
-}
-
-/**
- * Factory method to create a match for a property.
- * 
- * @param propertyCode The code of the property to compare against
- * @param desiredValue The value used in the comparison
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClause.createPropertyMatch(String, String)
- * @method
- */
-SearchCriteriaMatchClause.createPropertyMatch = function(propertyCode, desiredValue) {
-	var matchClause = new SearchCriteriaMatchClause("PropertyMatchClause", "PROPERTY", propertyCode, desiredValue);
-	matchClause["propertyCode"] = propertyCode;
-	return matchClause;
-}
-
-/**
- * Factory method to create a match for an attribute.
- *
- * @param attribute Should be a valid ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClauseAttribute.
- *   It should come from this list:
- *      // common
- *      "CODE", "TYPE", "PERM_ID",
- *      // for sample or experiment
- *      "SPACE",
- *      // for experiment
- *      "PROJECT",
- *      // for all types of entities
- *      "METAPROJECT"
- * @param desiredValue The value used in the comparison 
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClause.createAttributeMatch(MatchClauseAttribute, String)
- * @method
- */
-SearchCriteriaMatchClause.createAttributeMatch = function(attribute, desiredValue) {
-	var matchClause = new SearchCriteriaMatchClause("AttributeMatchClause", "ATTRIBUTE", attribute, desiredValue);
-	matchClause["attribute"] = attribute;
-	return matchClause;
-}
-
-/**
- * Factory method to create a MatchClause matching against registration or modification
- * date.
- * 
- * @param attribute Should be a valid ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClauseTimeAttribute
- * 	It should come from this list: REGISTRATION_DATE, MODIFICATION_DATE
- *
- * @param mode One of "LESS_THAN_OR_EQUAL", "EQUALS", "GREATER_THAN_OR_EQUAL"
- * @param date The date to compare against, format YYYY-MM-DD
- * @timezone The time zone of the date ("+1", "-5", "0", etc.)
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClause.createAttributeMatch(MatchClauseTimeAttribute, CompareMode, String, String)
- * @method
- */
-SearchCriteriaMatchClause.createTimeAttributeMatch = function(attribute, mode, date, timezone)
-{
-    var matchClause = new SearchCriteriaMatchClause("TimeAttributeMatchClause", "ATTRIBUTE", attribute, date);
-	matchClause["attribute"] = attribute;
-	matchClause["compareMode"] = mode;
-	matchClause["timeZone"] = timezone;
-	return matchClause;
-}
-
-/**
- * Factory method to create a match for against any property.
- * 
- * @param desiredValue The value used in the comparison
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClause.createAnyPropertyMatch(String)
- * @method
- */
-SearchCriteriaMatchClause.createAnyPropertyMatch = function(desiredValue) {
-	var matchClause = new SearchCriteriaMatchClause("AnyPropertyMatchClause", "ANY_PROPERTY", null, desiredValue);
-	return matchClause;
-}
-
-/**
- * Factory method to create a match for against any field (property or attribute).
- * 
- * @param desiredValue The value used in the comparison
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClause.createAnyFieldMatch(String)
- * @method
- */
-SearchCriteriaMatchClause.createAnyFieldMatch = function(desiredValue) {
-	var matchClause = new SearchCriteriaMatchClause("AnyFieldMatchClause", "ANY_FIELD", null, desiredValue);
-	return matchClause;
-}
-
-/**
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria
- * @class
- */
-function SearchCriteria() {
-	this["@type"] =  "SearchCriteria";
-	// operator should be either of "MATCH_ALL_CLAUSES" or "MATCH_ANY_CLAUSES"
-	this["operator"] = "MATCH_ALL_CLAUSES";
-	this["matchClauses"] = [];
-	this["subCriterias"] = [];
-}
-
-/**
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.addMatchClause(MatchClause)
- * @method
- */
-SearchCriteria.prototype.addMatchClause = function(matchClause) {
-	this["matchClauses"].push(matchClause);
-};
-
-/**
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.addSubCriteria(SearchSubCriteria)
- * @method
- */
-SearchCriteria.prototype.addSubCriteria = function(subCriteria) {
-	this["subCriterias"].push(subCriteria);
-};
-
-
-/**
- * It is easier to construct instances of sub criteria using one of the factory methods:
- *
- * 		createSampleParentCriteria
- * 		createSampleChildCriteria
- * 		createSampleContainerCriteria
- * 		createSampleCriteria
- * 		createExperimentCriteria
- * 		createDataSetContainerCriteria
- * 		createDataSetParentCriteria
- * 		createDataSetChildCriteria
- *
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchSubCriteria
- * @class
- */
-function SearchSubCriteria(targetEntityKind, searchCriteria) {
-	this["@type"] = "SearchSubCriteria";
-	this["targetEntityKind"] = targetEntityKind;	
-	this["criteria"] = searchCriteria;
-}
-
-/**
- * Factory method to create a match for a sample parent.
- * 
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchSubCriteria.createSampleParentCriteria(SearchCriteria)
- * @method
- */
-SearchSubCriteria.createSampleParentCriteria = function(searchCriteria) {
-	return new SearchSubCriteria("SAMPLE_PARENT", searchCriteria)
-}
-
-/**
- * Factory method to create a match for a sample child.
- * 
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchSubCriteria.createSampleChildCriteria(SearchCriteria)
- * @method
- */
-SearchSubCriteria.createSampleChildCriteria = function(searchCriteria) {
-	return new SearchSubCriteria("SAMPLE_CHILD", searchCriteria)
-}
-
-/**
- * Factory method to create a match for a sample container.
- * 
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchSubCriteria.createSampleContainerCriteria(SearchCriteria)
- * @method
- */
-SearchSubCriteria.createSampleContainerCriteria = function(searchCriteria) {
-	return new SearchSubCriteria("SAMPLE_CONTAINER", searchCriteria)
-}
-
-/**
- * Factory method to create a match for a sample.
- * 
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchSubCriteria.createSampleCriteria(SearchCriteria)
- * @method
- */
-SearchSubCriteria.createSampleCriteria = function(searchCriteria) {
-	return new SearchSubCriteria("SAMPLE", searchCriteria)
-}
-
-/**
- * Factory method to create a match for an experiment.
- * 
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchSubCriteria.createExperimentCriteria(SearchCriteria)
- * @method
- */
-SearchSubCriteria.createExperimentCriteria = function(searchCriteria) {
-	return new SearchSubCriteria("EXPERIMENT", searchCriteria)
-}
-
-/**
- * Factory method to create a match for a data set container.
- * 
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchSubCriteria.createDataSetContainerCriteria(SearchCriteria)
- * @method
- */
-SearchSubCriteria.createDataSetContainerCriteria = function(searchCriteria) {
-	return new SearchSubCriteria("DATA_SET_CONTAINER", searchCriteria)
-}
-
-/**
- * Factory method to create a match for a data set parent.
- * 
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchSubCriteria.createDataSetParentCriteria(SearchCriteria)
- * @method
- */
-SearchSubCriteria.createDataSetParentCriteria = function(searchCriteria) {
-	return new SearchSubCriteria("DATA_SET_PARENT", searchCriteria)
-}
-
-/**
- * Factory method to create a match for a data set child.
- * 
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchSubCriteria.createDataSetChildCriteria(SearchCriteria)
- * @method
- */
-SearchSubCriteria.createDataSetChildCriteria = function(searchCriteria) {
-	return new SearchSubCriteria("DATA_SET_CHILD", searchCriteria)
-}
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/spin.min.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/spin.min.js
deleted file mode 100644
index 942980c82a0..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/html/spin.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-//fgnass.github.com/spin.js#v1.2.7
-!function(e,t,n){function o(e,n){var r=t.createElement(e||"div"),i;for(i in n)r[i]=n[i];return r}function u(e){for(var t=1,n=arguments.length;t<n;t++)e.appendChild(arguments[t]);return e}function f(e,t,n,r){var o=["opacity",t,~~(e*100),n,r].join("-"),u=.01+n/r*100,f=Math.max(1-(1-e)/t*(100-u),e),l=s.substring(0,s.indexOf("Animation")).toLowerCase(),c=l&&"-"+l+"-"||"";return i[o]||(a.insertRule("@"+c+"keyframes "+o+"{"+"0%{opacity:"+f+"}"+u+"%{opacity:"+e+"}"+(u+.01)+"%{opacity:1}"+(u+t)%100+"%{opacity:"+e+"}"+"100%{opacity:"+f+"}"+"}",a.cssRules.length),i[o]=1),o}function l(e,t){var i=e.style,s,o;if(i[t]!==n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(o=0;o<r.length;o++){s=r[o]+t;if(i[s]!==n)return s}}function c(e,t){for(var n in t)e.style[l(e,n)||n]=t[n];return e}function h(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var i in r)e[i]===n&&(e[i]=r[i])}return e}function p(e){var t={x:e.offsetLeft,y:e.offsetTop};while(e=e.offsetParent)t.x+=e.offsetLeft,t.y+=e.offsetTop;return t}var r=["webkit","Moz","ms","O"],i={},s,a=function(){var e=o("style",{type:"text/css"});return u(t.getElementsByTagName("head")[0],e),e.sheet||e.styleSheet}(),d={lines:12,length:7,width:5,radius:10,rotate:0,corners:1,color:"#000",speed:1,trail:100,opacity:.25,fps:20,zIndex:2e9,className:"spinner",top:"auto",left:"auto",position:"relative"},v=function m(e){if(!this.spin)return new m(e);this.opts=h(e||{},m.defaults,d)};v.defaults={},h(v.prototype,{spin:function(e){this.stop();var t=this,n=t.opts,r=t.el=c(o(0,{className:n.className}),{position:n.position,width:0,zIndex:n.zIndex}),i=n.radius+n.length+n.width,u,a;e&&(e.insertBefore(r,e.firstChild||null),a=p(e),u=p(r),c(r,{left:(n.left=="auto"?a.x-u.x+(e.offsetWidth>>1):parseInt(n.left,10)+i)+"px",top:(n.top=="auto"?a.y-u.y+(e.offsetHeight>>1):parseInt(n.top,10)+i)+"px"})),r.setAttribute("aria-role","progressbar"),t.lines(r,t.opts);if(!s){var f=0,l=n.fps,h=l/n.speed,d=(1-n.opacity)/(h*n.trail/100),v=h/n.lines;(function m(){f++;for(var e=n.lines;e;e--){var i=Math.max(1-(f+e*v)%h*d,n.opacity);t.opacity(r,n.lines-e,i,n)}t.timeout=t.el&&setTimeout(m,~~(1e3/l))})()}return t},stop:function(){var e=this.el;return e&&(clearTimeout(this.timeout),e.parentNode&&e.parentNode.removeChild(e),this.el=n),this},lines:function(e,t){function i(e,r){return c(o(),{position:"absolute",width:t.length+t.width+"px",height:t.width+"px",background:e,boxShadow:r,transformOrigin:"left",transform:"rotate("+~~(360/t.lines*n+t.rotate)+"deg) translate("+t.radius+"px"+",0)",borderRadius:(t.corners*t.width>>1)+"px"})}var n=0,r;for(;n<t.lines;n++)r=c(o(),{position:"absolute",top:1+~(t.width/2)+"px",transform:t.hwaccel?"translate3d(0,0,0)":"",opacity:t.opacity,animation:s&&f(t.opacity,t.trail,n,t.lines)+" "+1/t.speed+"s linear infinite"}),t.shadow&&u(r,c(i("#000","0 0 4px #000"),{top:"2px"})),u(e,u(r,i(t.color,"0 0 1px rgba(0,0,0,.1)")));return e},opacity:function(e,t,n){t<e.childNodes.length&&(e.childNodes[t].style.opacity=n)}}),function(){function e(e,t){return o("<"+e+' xmlns="urn:schemas-microsoft.com:vml" class="spin-vml">',t)}var t=c(o("group"),{behavior:"url(#default#VML)"});!l(t,"transform")&&t.adj?(a.addRule(".spin-vml","behavior:url(#default#VML)"),v.prototype.lines=function(t,n){function s(){return c(e("group",{coordsize:i+" "+i,coordorigin:-r+" "+ -r}),{width:i,height:i})}function l(t,i,o){u(a,u(c(s(),{rotation:360/n.lines*t+"deg",left:~~i}),u(c(e("roundrect",{arcsize:n.corners}),{width:r,height:n.width,left:n.radius,top:-n.width>>1,filter:o}),e("fill",{color:n.color,opacity:n.opacity}),e("stroke",{opacity:0}))))}var r=n.length+n.width,i=2*r,o=-(n.width+n.length)*2+"px",a=c(s(),{position:"absolute",top:o,left:o}),f;if(n.shadow)for(f=1;f<=n.lines;f++)l(f,-2,"progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)");for(f=1;f<=n.lines;f++)l(f);return u(t,a)},v.prototype.opacity=function(e,t,n,r){var i=e.firstChild;r=r.shadow&&r.lines||0,i&&t+r<i.childNodes.length&&(i=i.childNodes[t+r],i=i&&i.firstChild,i=i&&i.firstChild,i&&(i.opacity=n))}):s=l(t,"animation")}(),typeof define=="function"&&define.amd?define(function(){return v}):e.Spinner=v}(window,document);
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/plugin.properties
deleted file mode 100644
index fdd65d79fa0..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/.gc3pie/plugin.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-# The properties file for an example webapps plugin
-# This file has no properties defined because none need to be defined.
-webapp-folder = html
-openbisui-contexts = data-set-details-view
-data-set-entity-types = FASTQ_GZ
-label = Bowtie2 Alignment
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/bee/html/index.html b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/bee/html/index.html
deleted file mode 100644
index 330d7af0d6b..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/bee/html/index.html
+++ /dev/null
@@ -1,428 +0,0 @@
-<head>
-    <title>Quantitative Genomics Facility</title>
-    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <script type="text/javascript" src="/openbis/resources/js/d3.v3.min.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/spin.min.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/openbis-dsu.js"></script>
-    <script type="text/javascript" src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
-    <!-- To speed development, cache the requests -->
-    <!-- <script type="text/javascript" src="openbis-request-cache.js"></script> -->
-    <script>
-
-        dsu = new openbis_dsu('/openbis/openbis', '/datastore_server');
-        var vis;
-        var didCreateVis = false;
-        var context = new openbisWebAppContext();
-
-        $(document).ready(function () {
-          refresh();
-          setInterval(refresh, 600000);
-        });
-
-        function createVis() {
-            if (didCreateVis) return;
-            vis = d3.select("#main").append("div").attr("id", "vis");
-            didCreateVis = true;
-        }
-
-	function enableSubmission() {
-		$('#submitBtn').prop('disabled', false);
-	}
-
-	function disableSubmission() {
-		$('#submitBtn').prop('disabled', true);
-	}
-
-        function displayReturnedTable(data) {
-            if (data.error) {
-                console.log(data.error);
-                vis.append("p").text("Could not retrieve data.");
-                return;
-            }
-
-            var dataToShow = data.result;
-            console.log(dataToShow.rows[0][0].value);
-
-            d3.select("#progress").remove()
-            d3.select("#button-group").remove()
-
-            vis.append("p").text("");
-            // Pick all div elements of the visualization
-            vis.selectAll("div").attr("class", "alert")
-                    .data(dataToShow.rows)
-                    .enter()
-                    .append("div")
-                    .attr("class", function (row) {
-                        if (row[0].value == 0 || row[0].value > 99) {
-                            	if(row[0].value == 100) 
-					enableSubmission();
-				if(row[0].value == 101)
-					disableSubmission();
-				return "alert alert-success";
-                        }
-                        return "alert alert-danger";
-                    })
-                    .html(function (row) {
-                        return row[1].value;
-                    })
-
-             var button = d3.select("#container")
-             .append("div")
-
-             button.selectAll("button")
-             .data(dataToShow.rows)
-             .enter()
-             .append("div")
-             .append("button")
-             .attr("id", function (row) {
-             return row[0].value;
-             })
-             .attr("class", function (row) {
-             if (row[0].value == 100) {
-             return "btn btn-success";
-             }
-             return "btn btn-danger";
-             })
-             //.attr("onclick", function(row) { return "callIngestionSetInvoice('" + row + "');" })
-             .text(function (row) {
-             if (row[0].value == 0) {
-             return "OK" ;
-             }
-             return "Fail";
-             });
-             
-        }
-
-        function hideButtons(data) {
-            var buttonId = data.result.rows[0][0].value;
-            d3.select("#setInvoice").remove()
-            d3.select("#main").append("div").attr("id", "Done").append("p").text("Done " + buttonId);
-            d3.select("button#" + String(buttonId)).remove();
-        }
-
-        function spinner(target) {
-            var opts = {
-                lines: 13, // The number of lines to draw
-                length: 7, // The length of each line
-                width: 4, // The line thickness
-                radius: 10, // The radius of the inner circle
-                corners: 1, // Corner roundness (0..1)
-                rotate: 0, // The rotation offset
-                color: '#000', // #rgb or #rrggbb
-                speed: 1, // Rounds per second
-                trail: 60, // Afterglow percentage
-                shadow: false, // Whether to render a shadow
-                hwaccel: false, // Whether to use hardware acceleration
-                className: 'spinner', // The CSS class to assign to the spinner
-                zIndex: 2e9, // The z-index (defaults to 2000000000)
-                top: 250, // Top position relative to parent in px
-                left: 'auto' // Left position relative to parent in px
-            };
-            var spinner = new Spinner(opts).spin(target);
-        }
-
-
-        function callIngestionService(method) {
-            var permIdentifier = context.getEntityIdentifier()
-            //var mySendEmail = $("#sendEmail").is(':checked')
-            var clusteroptions = "brutus"
-            var bowtieParameters = $("#Bowtie2Paramter").val()
-             
-            if ($('#brutus').is(':active')) {
-              clusteroptions = 'brutus';
-            }
-            if ($('#bsseGrid').is(':active')) {
-              clusteroptions = 'bsseGrid';
-            } 
-            
-
-            d3.select("#main").select("#progress").remove()
-            d3.select("#main").select("#vis").remove()
-            didCreateVis = false;
-            dsu.server.useSession(context.getSessionId());
-            createVis()
-
-            myUserId = context.getSessionId().split("-")[0]; 
-
-            var parameters =
-            {
-                permId: permIdentifier,
-                //sendEmail: mySendEmail,
-                bowtieParam: bowtieParameters,
-                clusteroptionsParam : clusteroptions, 
-                userId : myUserId, 
-                method: method
-            };
-            console.log(parameters)
-
-            //d3.select("#main").append("div").attr("id", "progress").append("p").text("Starting Job...");
-            var target = document.getElementById('progress');
-            spinner(target)
-            dsu.server.createReportFromAggregationService("DSS1", "triggerbee", parameters, displayReturnedTable);
-        }
-
-	function refresh() {
-        	callIngestionService("pollJob")
-
-	}
-
-
-    </script>
-</head>
-<body>
-<div class="container">
-    <div class="row">
-        <div class="col-lg-12">
-
-            <h2>Bowtie 2
-                <small>Read Alignment</small>
-            </h2>
-        </div>
-    </div>
-</div>
-
-<br>
-
-<p>
-
-
-
-<div class="container">
-    <div class="row">
-        <div class="col-lg-12">
-            <div class="btn-group">
-                <button type="button" class="btn btn-default" id="brutus"> ETHZ Brutus Cluster </button>
-                <button type="button" class="btn btn-default" id="bsseGrid"> BSSE Grid </button>
-
-            </div>
-        </div>
-    </div>
-</div>
-</p>
-
-<p>
-
-<div class="container">
-    <div class="row">
-        <div class="col-lg-12">
-            <form role="form">
-                <div class="form-group">
-                    <label>Parameters</label>
-                    <input type="text" class="form-control" id="Bowtie2Paramter"
-                           placeholder="e.g. --very-sensitive --phred33 -q">
-                </div>
-            </form>
-        </div>
-    </div>
-</div>
-</p>
-
-<p>
-<!--
-<div class="container">
-    <div class="row">
-        <div class="col-lg-12">
-            <div class="checkbox">
-                <label>
-                    <input type="checkbox" id="sendEmail"> Send Email when job finished
-                </label>
-            </div>
-        </div>
-    </div>
-</div>
--->
-</p>
-
-<p>
-
-<div class="container">
-    <div class="row">
-        <div class="col-md-3">
-            <button class="btn btn-default" type="submit"
-            "createInvoice-button"  id="submitBtn" onclick="callIngestionService('startJob');">Start Bowtie2</button>
-           <button type="button" class="btn btn-default" onclick="refresh();">
-             <span class="glyphicon glyphicon-refresh"></span> Refresh
-           </button>
-        </div>
-    </div>
-</div>
-</p>
-
-<br>
-
-<p>
-
-<div class="container">
-    <div class="row">
-        <div class="col-lg-12">
-            <div class="panel-group" id="accordion">
-                <div class="panel panel-default">
-                    <div class="panel-heading">
-                        <h6 div class="panel-title">
-                            <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion"
-                               href="#collapseOne">
-                                Available Bowtie 2 Parameters
-                            </a>
-                    </div>
-                    </h6>
-                </div>
-                <div id="collapseOne" class="panel-collapse collapse">
-                    <div class="panel-body">
-        <pre>
-Usage:
-  bowtie2 [options]* -x &lt;bt2-idx&gt; {-1 &lt;m1&gt; -2 &lt;m2&gt; | -U &lt;r&gt;} [-S &lt;sam&gt;]
-
-  &lt;bt2-idx&gt;  Index filename prefix (minus trailing .X.bt2).
-             NOTE: Bowtie 1 and Bowtie 2 indexes are not compatible.
-  &lt;m1&gt;       Files with #1 mates, paired with files in &lt;m2&gt;.
-             Could be gzip'ed (extension: .gz) or bzip2'ed (extension: .bz2).
-  &lt;m2&gt;       Files with #2 mates, paired with files in &lt;m1&gt;.
-             Could be gzip'ed (extension: .gz) or bzip2'ed (extension: .bz2).
-  &lt;r&gt;        Files with unpaired reads.
-             Could be gzip'ed (extension: .gz) or bzip2'ed (extension: .bz2).
-  &lt;sam&gt;      File for SAM output (default: stdout)
-
-  &lt;m1&gt;, &lt;m2&gt;, &lt;r&gt; can be comma-separated lists (no whitespace) and can be
-  specified many times.  E.g. '-U file1.fq,file2.fq -U file3.fq'.
-
-Options (defaults in parentheses):
-
- Input:
-  -q                 query input files are FASTQ .fq/.fastq (default)
-  --qseq             query input files are in Illumina's qseq format
-  -f                 query input files are (multi-)FASTA .fa/.mfa
-  -r                 query input files are raw one-sequence-per-line
-  -c                 &lt;m1&gt;, &lt;m2&gt;, &lt;r&gt; are sequences themselves, not files
-  -s/--skip &lt;int&gt;    skip the first &lt;int&gt; reads/pairs in the input (none)
-  -u/--upto &lt;int&gt;    stop after first &lt;int&gt; reads/pairs (no limit)
-  -5/--trim5 &lt;int&gt;   trim &lt;int&gt; bases from 5'/left end of reads (0)
-  -3/--trim3 &lt;int&gt;   trim &lt;int&gt; bases from 3'/right end of reads (0)
-  --phred33          qualities are Phred+33 (default)
-  --phred64          qualities are Phred+64
-  --int-quals        qualities encoded as space-delimited integers
-
- Presets:                 Same as:
-  For --end-to-end:
-   --very-fast            -D 5 -R 1 -N 0 -L 22 -i S,0,2.50
-   --fast                 -D 10 -R 2 -N 0 -L 22 -i S,0,2.50
-   --sensitive            -D 15 -R 2 -N 0 -L 22 -i S,1,1.15 (default)
-   --very-sensitive       -D 20 -R 3 -N 0 -L 20 -i S,1,0.50
-
-  For --local:
-   --very-fast-local      -D 5 -R 1 -N 0 -L 25 -i S,1,2.00
-   --fast-local           -D 10 -R 2 -N 0 -L 22 -i S,1,1.75
-   --sensitive-local      -D 15 -R 2 -N 0 -L 20 -i S,1,0.75 (default)
-   --very-sensitive-local -D 20 -R 3 -N 0 -L 20 -i S,1,0.50
-
- Alignment:
-  -N &lt;int&gt;           max # mismatches in seed alignment; can be 0 or 1 (0)
-  -L &lt;int&gt;           length of seed substrings; must be &gt;3, &lt;32 (22)
-  -i &lt;func&gt;          interval between seed substrings w/r/t read len (S,1,1.15)
-  --n-ceil &lt;func&gt;    func for max # non-A/C/G/Ts permitted in aln (L,0,0.15)
-  --dpad &lt;int&gt;       include &lt;int&gt; extra ref chars on sides of DP table (15)
-  --gbar &lt;int&gt;       disallow gaps within &lt;int&gt; nucs of read extremes (4)
-  --ignore-quals     treat all quality values as 30 on Phred scale (off)
-  --nofw             do not align forward (original) version of read (off)
-  --norc             do not align reverse-complement version of read (off)
-
-  --end-to-end       entire read must align; no clipping (on)
-   OR
-  --local            local alignment; ends might be soft clipped (off)
-
- Scoring:
-  --ma &lt;int&gt;         match bonus (0 for --end-to-end, 2 for --local)
-  --mp &lt;int&gt;         max penalty for mismatch; lower qual = lower penalty (6)
-  --np &lt;int&gt;         penalty for non-A/C/G/Ts in read/ref (1)
-  --rdg &lt;int&gt;,&lt;int&gt;  read gap open, extend penalties (5,3)
-  --rfg &lt;int&gt;,&lt;int&gt;  reference gap open, extend penalties (5,3)
-  --score-min &lt;func&gt; min acceptable alignment score w/r/t read length
-                     (G,20,8 for local, L,-0.6,-0.6 for end-to-end)
-
- Reporting:
-  (default)          look for multiple alignments, report best, with MAPQ
-   OR
-  -k &lt;int&gt;           report up to &lt;int&gt; alns per read; MAPQ not meaningful
-   OR
-  -a/--all           report all alignments; very slow, MAPQ not meaningful
-
- Effort:
-  -D &lt;int&gt;           give up extending after &lt;int&gt; failed extends in a row (15)
-  -R &lt;int&gt;           for reads w/ repetitive seeds, try &lt;int&gt; sets of seeds (2)
-
- Paired-end:
-  -I/--minins &lt;int&gt;  minimum fragment length (0)
-  -X/--maxins &lt;int&gt;  maximum fragment length (500)
-  --fr/--rf/--ff     -1, -2 mates align fw/rev, rev/fw, fw/fw (--fr)
-  --no-mixed         suppress unpaired alignments for paired reads
-  --no-discordant    suppress discordant alignments for paired reads
-  --no-dovetail      not concordant when mates extend past each other
-  --no-contain       not concordant when one mate alignment contains other
-  --no-overlap       not concordant when mates overlap at all
-
- Output:
-  -t/--time          print wall-clock time taken by search phases
-  --un &lt;path&gt;           write unpaired reads that didn't align to &lt;path&gt;
-  --al &lt;path&gt;           write unpaired reads that aligned at least once to &lt;path&gt;
-  --un-conc &lt;path&gt;      write pairs that didn't align concordantly to &lt;path&gt;
-  --al-conc &lt;path&gt;      write pairs that aligned concordantly at least once to &lt;path&gt;
-  (Note: for --un, --al, --un-conc, or --al-conc, add '-gz' to the option name, e.g.
-  --un-gz &lt;path&gt;, to gzip compress output, or add '-bz2' to bzip2 compress output.)
-  --quiet            print nothing to stderr except serious errors
-  --met-file &lt;path&gt;  send metrics to file at &lt;path&gt; (off)
-  --met-stderr       send metrics to stderr (off)
-  --met &lt;int&gt;        report internal counters & metrics every &lt;int&gt; secs (1)
-  --no-head          supppress header lines, i.e. lines starting with @
-  --no-sq            supppress @SQ header lines
-  --rg-id &lt;text&gt;     set read group id, reflected in @RG line and RG:Z: opt field
-  --rg &lt;text&gt;        add &lt;text&gt; ("lab:value") to @RG line of SAM header.
-                     Note: @RG line only printed when --rg-id is set.
-  --omit-sec-seq     put '*' in SEQ and QUAL fields for secondary alignments.
-
- Performance:
-  -o/--offrate &lt;int&gt; override offrate of index; must be &gt;= index's offrate
-  -p/--threads &lt;int&gt; number of alignment threads to launch (1)
-  --reorder          force SAM output order to match order of input reads
-  --mm               use memory-mapped I/O for index; many 'bowtie's can share
-
- Other:
-  --qc-filter        filter out reads that are bad according to QSEQ filter
-  --seed &lt;int&gt;       seed for random number generator (0)
-  --non-deterministic seed rand. gen. arbitrarily instead of using read attributes
-  --version          print version information and quit
-  -h/--help          print this usage message
-</pre>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </div>
-</div>
-</div>
-</div>
-</p>
-</div>
-
-<!-- Placeholder for the output coming back from the server -->
-<div class="container">
-    <div class="row">
-        <div class="col-lg-12">
-            <div id="main">
-            </div>
-        </div>
-    </div>
-</div>
-
-<!-- Footer  ================================================== -->
-
-<footer class="bs-footer" role="contentinfo">
-    <h6 div class="container">
-        <a href="http://bowtie-bio.sourceforge.net/bowtie2/index.shtml" target="_blank">Bowtie 2 Homepage</a>
-        </div>
-    </h6>
-</footer>
-
-
-</body>
-</html>
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/bee/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/bee/plugin.properties
deleted file mode 100644
index fdd65d79fa0..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/bee/plugin.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-# The properties file for an example webapps plugin
-# This file has no properties defined because none need to be defined.
-webapp-folder = html
-openbisui-contexts = data-set-details-view
-data-set-entity-types = FASTQ_GZ
-label = Bowtie2 Alignment
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/cellStatistics/html/index.html b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/cellStatistics/html/index.html
deleted file mode 100644
index 127a1899a18..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/cellStatistics/html/index.html
+++ /dev/null
@@ -1,324 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>Flowcell Statistics</title>
-    <script type="text/javascript" src="/openbis/resources/js/d3.v3.min.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/d3.layout.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/openbis-dsu.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/openbis-action-deferrer.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/FileSaver.js"></script>
-    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" type="text/css" href="style.css" />
-
-  </head>
-  <body>
-  <div id="container" class="container">
-  <script>
-
-  var formatThousands = d3.format(",");
-  dsu = new openbis_dsu('/openbis/openbis', '/datastore_server');
-  var webAppContext = new openbisWebAppContext();
-  dsu.server.useSession(webAppContext.getSessionId());
-
-  var prop;
-  var flowcellProperties = [];
-  var myArray = [];
-  var sumArray = [];
-  var sumArrayNOINDEX = [];
-  var sumsArray = [] 
-  
-  loadData()
-
-  /* ------- General functions -------------------------------------------*/
-
-  // used for sorting by lane of the final array of objects
-  function compare(a,b) {
-    if (a.lane < b.lane)
-       return -1;
-    if (a.lane > b.lane)
-      return 1;
-    return 0;
-  }
-
-  function isNumber(n) {
-    return !isNaN(parseFloat(n)) && isFinite(n);
-  }
-
-  function roundFloat(myFloat) {
-    return Number(myFloat).toFixed(2); 
-  }
-
-  if (typeof String.prototype.startsWith != 'function') {
-    // see below for better implementation!
-    String.prototype.startsWith = function (str){
-      return this.indexOf(str) === 0;
-    };
-  }
-
-
-  /* -------------------------------------------------------------------*/
-
-function loadData () { 
-  var dataSetProperties;
-  var prop;
-
-  dsu.retrieveSample(webAppContext.getEntityIdentifier(), function(response) {
-
-    flowcellProperties = response.result[0].properties;
-    numberOfLanes = (flowcellProperties.LANECOUNT);
-
-    var sampleCodes = [];
-    for (i = 1; i <= numberOfLanes; i++) {
-      sampleCodes.push(webAppContext.getEntityIdentifier() + ":" + i);
-    }
-
-    var clusters = ""
-    // just take the first lane to read out the BCL version
-    dsu.retrieveSampleWithPropertiesCode(sampleCodes[0], function(laneResponse) {
-      // console.log(laneResponse)
-      bclVersion = laneResponse.result[0].properties.BCL_VERSION
-      if (bclVersion !== undefined) {
-        if (bclVersion.startsWith("bcl2fastq v2")) {
-          clusters = "Clusters";
-        }
-        else {
-          clusters = "Reads";
-        }
-      }
-      else { clusters = "Reads"};
-    });
-
-    var deferrer = new openbisActionDeferrer(function(){
-      sumArray.sort(compare);
-      sumArrayNOINDEX.sort(compare);
-      plotLaneTable (sumArrayNOINDEX, true, clusters);
-      placeholder()
-      plotLaneTable (sumArray, false, clusters);
-      downloadButton ("tableStats");
-      $("#save_as" + "tableStats").click(function() { submit_download_form("html", "tableStats"); });
-    }, sampleCodes, clusters);
-
-    sampleCodes.forEach(function(sampleCode){
-      dsu.retrieveDataSetsForSample(sampleCode, function(response){
-        getProperties(response);
-        //console.log("got response " + sampleCode);
-        var sums = calculateSum(myArray, sampleCode, true);
-        var sumsNOINDEX = calculateSum(myArray, sampleCode, false);
-        sumArray.push(sums[0]);
-        sumArrayNOINDEX.push(sumsNOINDEX[0]);
-        myArray = [];
-        deferrer.dependencyCompleted(sampleCode);  
-      });
-    });
-
-    function getProperties(dataSetProperties) {
-      for (var i = 0; i < dataSetProperties.result.length; i++) {
-        myArray.push({
-                            'externalSampleName' : dataSetProperties.result[i].properties.EXTERNAL_SAMPLE_NAME,
-                            'index1': dataSetProperties.result[i].properties.BARCODE,
-                            'index2': dataSetProperties.result[i].properties.INDEX2,
-                            'percFilteringPass' : parseFloat(dataSetProperties.result[i].properties.PERCENTAGE_PASSED_FILTERING),
-                            'rawReadsSum' : dataSetProperties.result[i].properties.RAW_READS_SUM,
-                            'pfReadsSum' : dataSetProperties.result[i].properties.PF_READS_SUM,
-                            'rawYieldMbases' : dataSetProperties.result[i].properties.RAW_YIELD_MBASES,
-                            'yieldMbases' : dataSetProperties.result[i].properties.YIELD_MBASES,
-                            'percRawClustersPerLane': parseFloat(dataSetProperties.result[i].properties.PERCENTAGE_RAW_CLUSTERS_PER_LANE),
-                            'pfMeanQualityScore' : parseFloat(dataSetProperties.result[i].properties.PFMEANQUALITYSCORE),
-                            'pfYieldq30Percentage' : parseFloat(dataSetProperties.result[i].properties.PFYIELDQ30PERCENTAGE)
-                            }); 
-      };
-    };
-  });
-};
- 
-function plotLaneTable (sumArray, withNOINDEX, clusters) {
-
- //d3.select("body").append("text")
- //   .text("Summary Table")
- //   .attr("class", "h3");
-
-  d3.select("body").append("text")
-    .text(function (){if (withNOINDEX) {return " All " + clusters;} return " Without Undetermined " + clusters;})
-    .attr("class", "h3");
- 
-  d3.select("body")
-              .append("p")
-              ;
-
-  var laneTableStats = d3.select("body")
-    .append("table")
-    .attr("id", "tableStats")
-    .attr("class", "tableStats")
-    ;
-
-  header = {}
-  header["Lane"] = 1
-  header["# of Samples"] = 1
-  header["AVG Passed Filtering (PF)"] = 1
-  header["Sum Raw " + clusters] = 1
-  header["Sum PF " + clusters] = 1
-  header["Sum Raw Bases"] = 1
-  header["Sum PF Bases"] = 1
-  header["AVG Raw Clusters in % per Index"] = 1
-  header["AVG PF Phred Score"] = 1
-  header["AVG > 30 Phred Score"] = 1
-
- // create the table header
-  var thead = laneTableStats.selectAll("th")
-              .data(d3.keys(header))
-              .enter().append("th")
-              .text(function(d){return d})
-              ;
-
-  // create rows
-  // console.log("Sumarray")
-  // console.log(sumArray)
-  //sumArray.splice(1,3)
-
-
-  // litte hack which removes three lanes of the FC view, as the NextSeq has four lanes
-  // as specified by Illumina, but logically it is only one lane
-  // So if the FC has four lanes we assume it is a NextSeq run and therefore we remove the last three
-  // lanes via the splice method
-  if (sumArray.length == 4) {
-      sumArray.splice(1,3)
-  }
-
-  /*
-  for (i=0; i< sumArray.length; i++) {
-      console.log(sumArray[i].numberOfSamples)
-      if (sumArray[i].numberOfSamples == 0) {
-         console.log("NO samples in "+ i) 
-         sumArray.splice(i,1)
-      }
-  }
-  */
-
-  var tr = laneTableStats.selectAll("tr")
-           .data(sumArray).enter().append("tr")
-  // cells
-  var td = tr.selectAll("td")
-    .data(function(d){return d3.values(d)})
-    .enter().append("td")
-    .text(function(d) {if (isNumber(d)) {return formatThousands(d)}; return d;})
-    .style("text-align", function(d){if (isNumber(d)) {return "right"} return "left"})
-    ;
-}
-
-function placeholder() {
-
-var space = d3.select("body")
-              .append("svg")
-              .attr("id", "placeholder")
-              .attr("width", 0)
-              .attr("height", 100)
-              ;
-}
-
-function calculateSum(statisticsArray, sampleCode, withNOINDEX) {
-
-  var sums = []
-  var averagePercFilteringPass = 0;
-  var sumRawReads = 0;
-  var sumPfReads = 0;
-  var sumRawYieldMbases = 0;
-  var sumYieldMbases = 0;
-  var averagePercRawClustersPerLane = 0;
-  var averagePfMeanQualityScore = 0;
-  var averagePfYieldq30Percentage = 0;
-  
-  for (var i = 0; i < statisticsArray.length; i++) {
-    // do not calculate with the NOINDEX reads
-    if ((typeof (statisticsArray[i].externalSampleName) == 'undefined') && withNOINDEX) {
-       continue;
-    }  else {
-
-      averagePercFilteringPass = averagePercFilteringPass + parseFloat(statisticsArray[i].percFilteringPass);
-      sumRawReads = sumRawReads + parseInt(statisticsArray[i].rawReadsSum);
-      sumPfReads = sumPfReads + parseInt(statisticsArray[i].pfReadsSum);
-      sumRawYieldMbases = sumRawYieldMbases + parseInt(statisticsArray[i].rawYieldMbases);
-      sumYieldMbases = sumYieldMbases + parseInt(statisticsArray[i].yieldMbases);
-      averagePercRawClustersPerLane = averagePercRawClustersPerLane + parseInt(statisticsArray[i].percRawClustersPerLane);
-      averagePfMeanQualityScore = averagePfMeanQualityScore + parseInt(statisticsArray[i].pfMeanQualityScore);
-      averagePfYieldq30Percentage = averagePfYieldq30Percentage + parseInt(statisticsArray[i].pfYieldq30Percentage);
-    }
-  }
-  if (withNOINDEX) {penalty = -1} else {penalty = 0} 
- 
-  // added the Math.max function to make sure that there is no division by zero,
-  // can happen when a single sample is on a lane (no multiplexing) 
-  averagePercFilteringPass = roundFloat(averagePercFilteringPass / Math.max((statisticsArray.length + penalty),1));
-  averagePercRawClustersPerLane = roundFloat(averagePercRawClustersPerLane / Math.max((statisticsArray.length + penalty),1));
-  averagePfMeanQualityScore = roundFloat(averagePfMeanQualityScore / Math.max((statisticsArray.length + penalty),1));
-  averagePfYieldq30Percentage = roundFloat(averagePfYieldq30Percentage / Math.max((statisticsArray.length + penalty),1));
-
-  sums.push({
-                            'lane' : sampleCode.split("/")[2].split(":")[1],
-                            'numberOfSamples' : statisticsArray.length,
-                            'averagePercFilteringPass' : averagePercFilteringPass,
-                            'rawReadsSum' : sumRawReads,
-                            'pfReadsSum' : sumPfReads,
-                            'rawYieldMbases' : sumRawYieldMbases,
-                            'yieldMbases' : sumYieldMbases,
-                            'percRawClustersPerLane': averagePercRawClustersPerLane,
-                            'pfMeanQualityScore' : averagePfMeanQualityScore,
-                            'pfYieldq30Percentage' : averagePfYieldq30Percentage
-                            });
-  return sums;
-}
-
-
-  function downloadButton (buttonName) {
-
-    var div = d3.select("body").append("button")
-      .attr("class", "btn btn-default btn-xs")
-      .attr("type", "submit")
-      .attr("id", "save_as" + buttonName)
-      .attr("value", "")
-      .text("Save")
-      ;
-  }
-
-  function submit_download_form(output_format, svgName)
-  {
-    var rawSampleName = webAppContext.entityIdentifier
-    var split = rawSampleName.split(":")
-    var fc = split[0].split("/")[2]
-    var lane = split[1]
-
-    // Get the d3js SVG element
-    var tmp = document.getElementById(svgName);
-
-    if (output_format == "svg") {
-
-      // Extract the data as SVG text string
-      var svg_xml = "<svg  xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">" + (new XMLSerializer).serializeToString(tmp) + "</svg>";
-
-      var blob = new Blob([svg_xml], {type: "image/svg+xml;charset=utf-8"});
-    }
-    if (output_format == "html") {
-      var html = "<html> <head> <title></title> <style type=\"text/css\">" + 
-        "table.tableStats { font-family: sans-serif; font-size: 14px; border-collapse:collapse; }" +
-        ".tableStats th { padding:6px 10px; color:#444; font-weight:bold; text-shadow:1px 1px 1px #fff; border-bottom:2px solid #444; }" +
-        ".tableStats tr:nth-child(even) { background: WhiteSmoke; }" +
-        ".tableStats td { padding:0px 10px 10px 10px; }" +
-        "</style> </head> <body>" +
-        (new XMLSerializer).serializeToString(tmp) +
-        "</body> </html>"
-      var blob = new Blob([html], {type: "image/html;charset=utf-8"});
-    }
-   if (output_format == "png") {
-       console.log("png")
-   }
-
-    saveAs(blob, fc + "_" + svgName + "." + output_format);
-
-  }
-
-  </script>
-  </div>
-  </body>
-</html>
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/cellStatistics/html/style.css b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/cellStatistics/html/style.css
deleted file mode 100644
index 985d8ac6db0..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/cellStatistics/html/style.css
+++ /dev/null
@@ -1,47 +0,0 @@
-        .axis path,
-        .axis line {
-          fill: none;
-          stroke: #000;
-          shape-rendering: crispEdges;
-        }
-
-        .axis text {
-          font-family: sans-serif;
-          font-size: 10px;
-        }
-
-        table.tableStats {
-          font-family: sans-serif;
-          font-size: 14px;
-          border-collapse:collapse;
-        }
-
-        .tableStats th {
-          padding:6px 10px;
-          color:#444;
-          font-weight:bold;
-          text-shadow:1px 1px 1px #fff;
-          border-bottom:2px solid #444;
-        }
-
-        .tableStats tr:nth-child(even) {
-          background: WhiteSmoke;
-        }
-        .tableStats td {
-
-          padding:0px 10px 10px 10px;
-
-       }
-
-        div.tooltip {
-          position: absolute;
-          text-align: center;
-          width: 100px;
-          height: 42px;
-          padding: 2px;
-          font: 12px sans-serif;
-          background: LightSalmon;
-          border: 0px;
-          border-radius: 8px;
-          pointer-events: none;
-        }
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/cellStatistics/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/cellStatistics/plugin.properties
deleted file mode 100644
index 19629033996..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/cellStatistics/plugin.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-# The properties file for an example webapps plugin
-# This file has no properties defined because none need to be defined.
-webapp-folder = html
-openbisui-contexts = sample-details-view
-sample-entity-types = ILLUMINA_FLOW_CELL
-label = Flow Cell Statistics
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap-theme.css b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap-theme.css
deleted file mode 100644
index f860bbc069d..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap-theme.css
+++ /dev/null
@@ -1,442 +0,0 @@
-/*!
- * Bootstrap v3.2.0 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-.btn-default,
-.btn-primary,
-.btn-success,
-.btn-info,
-.btn-warning,
-.btn-danger {
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
-}
-.btn-default:active,
-.btn-primary:active,
-.btn-success:active,
-.btn-info:active,
-.btn-warning:active,
-.btn-danger:active,
-.btn-default.active,
-.btn-primary.active,
-.btn-success.active,
-.btn-info.active,
-.btn-warning.active,
-.btn-danger.active {
-  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn:active,
-.btn.active {
-  background-image: none;
-}
-.btn-default {
-  text-shadow: 0 1px 0 #fff;
-  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
-  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
-  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #dbdbdb;
-  border-color: #ccc;
-}
-.btn-default:hover,
-.btn-default:focus {
-  background-color: #e0e0e0;
-  background-position: 0 -15px;
-}
-.btn-default:active,
-.btn-default.active {
-  background-color: #e0e0e0;
-  border-color: #dbdbdb;
-}
-.btn-default:disabled,
-.btn-default[disabled] {
-  background-color: #e0e0e0;
-  background-image: none;
-}
-.btn-primary {
-  background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
-  background-image:      -o-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#2d6ca2));
-  background-image:         linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #2b669a;
-}
-.btn-primary:hover,
-.btn-primary:focus {
-  background-color: #2d6ca2;
-  background-position: 0 -15px;
-}
-.btn-primary:active,
-.btn-primary.active {
-  background-color: #2d6ca2;
-  border-color: #2b669a;
-}
-.btn-primary:disabled,
-.btn-primary[disabled] {
-  background-color: #2d6ca2;
-  background-image: none;
-}
-.btn-success {
-  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
-  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
-  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #3e8f3e;
-}
-.btn-success:hover,
-.btn-success:focus {
-  background-color: #419641;
-  background-position: 0 -15px;
-}
-.btn-success:active,
-.btn-success.active {
-  background-color: #419641;
-  border-color: #3e8f3e;
-}
-.btn-success:disabled,
-.btn-success[disabled] {
-  background-color: #419641;
-  background-image: none;
-}
-.btn-info {
-  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
-  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
-  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #28a4c9;
-}
-.btn-info:hover,
-.btn-info:focus {
-  background-color: #2aabd2;
-  background-position: 0 -15px;
-}
-.btn-info:active,
-.btn-info.active {
-  background-color: #2aabd2;
-  border-color: #28a4c9;
-}
-.btn-info:disabled,
-.btn-info[disabled] {
-  background-color: #2aabd2;
-  background-image: none;
-}
-.btn-warning {
-  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
-  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
-  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #e38d13;
-}
-.btn-warning:hover,
-.btn-warning:focus {
-  background-color: #eb9316;
-  background-position: 0 -15px;
-}
-.btn-warning:active,
-.btn-warning.active {
-  background-color: #eb9316;
-  border-color: #e38d13;
-}
-.btn-warning:disabled,
-.btn-warning[disabled] {
-  background-color: #eb9316;
-  background-image: none;
-}
-.btn-danger {
-  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
-  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
-  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #b92c28;
-}
-.btn-danger:hover,
-.btn-danger:focus {
-  background-color: #c12e2a;
-  background-position: 0 -15px;
-}
-.btn-danger:active,
-.btn-danger.active {
-  background-color: #c12e2a;
-  border-color: #b92c28;
-}
-.btn-danger:disabled,
-.btn-danger[disabled] {
-  background-color: #c12e2a;
-  background-image: none;
-}
-.thumbnail,
-.img-thumbnail {
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
-  background-color: #e8e8e8;
-  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
-  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
-  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
-  background-repeat: repeat-x;
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
-  background-color: #357ebd;
-  background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
-  background-image:      -o-linear-gradient(top, #428bca 0%, #357ebd 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd));
-  background-image:         linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
-  background-repeat: repeat-x;
-}
-.navbar-default {
-  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
-  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
-  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
-}
-.navbar-default .navbar-nav > .active > a {
-  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
-  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f3f3f3));
-  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);
-  background-repeat: repeat-x;
-  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
-}
-.navbar-brand,
-.navbar-nav > li > a {
-  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
-}
-.navbar-inverse {
-  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
-  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
-  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-}
-.navbar-inverse .navbar-nav > .active > a {
-  background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%);
-  background-image:      -o-linear-gradient(top, #222 0%, #282828 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#222), to(#282828));
-  background-image:         linear-gradient(to bottom, #222 0%, #282828 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);
-  background-repeat: repeat-x;
-  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
-          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
-}
-.navbar-inverse .navbar-brand,
-.navbar-inverse .navbar-nav > li > a {
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
-}
-.navbar-static-top,
-.navbar-fixed-top,
-.navbar-fixed-bottom {
-  border-radius: 0;
-}
-.alert {
-  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
-}
-.alert-success {
-  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
-  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
-  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #b2dba1;
-}
-.alert-info {
-  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
-  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
-  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #9acfea;
-}
-.alert-warning {
-  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
-  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
-  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #f5e79e;
-}
-.alert-danger {
-  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
-  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
-  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #dca7a7;
-}
-.progress {
-  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
-  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
-  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar {
-  background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);
-  background-image:      -o-linear-gradient(top, #428bca 0%, #3071a9 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3071a9));
-  background-image:         linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-success {
-  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
-  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
-  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-info {
-  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
-  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
-  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-warning {
-  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
-  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
-  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-danger {
-  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
-  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
-  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-striped {
-  background-image: -webkit-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-image:      -o-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-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);
-}
-.list-group {
-  border-radius: 4px;
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-}
-.list-group-item.active,
-.list-group-item.active:hover,
-.list-group-item.active:focus {
-  text-shadow: 0 -1px 0 #3071a9;
-  background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);
-  background-image:      -o-linear-gradient(top, #428bca 0%, #3278b3 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3278b3));
-  background-image:         linear-gradient(to bottom, #428bca 0%, #3278b3 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #3278b3;
-}
-.panel {
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
-          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
-}
-.panel-default > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
-  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
-  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-primary > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
-  background-image:      -o-linear-gradient(top, #428bca 0%, #357ebd 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd));
-  background-image:         linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-success > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
-  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
-  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-info > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
-  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
-  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-warning > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
-  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
-  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-danger > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
-  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
-  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
-  background-repeat: repeat-x;
-}
-.well {
-  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
-  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
-  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #dcdcdc;
-  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
-          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
-}
-/*# sourceMappingURL=bootstrap-theme.css.map */
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap-theme.css.map b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap-theme.css.map
deleted file mode 100644
index 4cc41ab001a..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap-theme.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"bootstrap-theme.css","sources":["less/theme.less","less/mixins/vendor-prefixes.less","bootstrap-theme.css","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n  @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n  .box-shadow(@shadow);\n\n  // Reset the shadow\n  &:active,\n  &.active {\n    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n  #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n  .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners\n  background-repeat: repeat-x;\n  border-color: darken(@btn-color, 14%);\n\n  &:hover,\n  &:focus  {\n    background-color: darken(@btn-color, 12%);\n    background-position: 0 -15px;\n  }\n\n  &:active,\n  &.active {\n    background-color: darken(@btn-color, 12%);\n    border-color: darken(@btn-color, 14%);\n  }\n\n  &:disabled,\n  &[disabled] {\n    background-color: darken(@btn-color, 12%);\n    background-image: none;\n  }\n}\n\n// Common styles\n.btn {\n  // Remove the gradient for the pressed/active state\n  &:active,\n  &.active {\n    background-image: none;\n  }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info    { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger  { .btn-styles(@btn-danger-bg); }\n\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n  .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n  background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n  background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n  .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n  border-radius: @navbar-border-radius;\n  @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n  .box-shadow(@shadow);\n\n  .navbar-nav > .active > a {\n    #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%));\n    .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n  }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n  #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n  .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n\n  .navbar-nav > .active > a {\n    #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%));\n    .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n  }\n\n  .navbar-brand,\n  .navbar-nav > li > a {\n    text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n  }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n  text-shadow: 0 1px 0 rgba(255,255,255,.2);\n  @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n  .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n  border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success    { .alert-styles(@alert-success-bg); }\n.alert-info       { .alert-styles(@alert-info-bg); }\n.alert-warning    { .alert-styles(@alert-warning-bg); }\n.alert-danger     { .alert-styles(@alert-danger-bg); }\n\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n  #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar            { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success    { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info       { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning    { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger     { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n  #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n  border-radius: @border-radius-base;\n  .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n  #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n  border-color: darken(@list-group-active-border, 7.5%);\n}\n\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n  .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading   { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading   { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading   { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading      { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading   { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading    { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n  #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n  border-color: darken(@well-bg, 10%);\n  @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n  .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n  -webkit-animation: @animation;\n       -o-animation: @animation;\n          animation: @animation;\n}\n.animation-name(@name) {\n  -webkit-animation-name: @name;\n          animation-name: @name;\n}\n.animation-duration(@duration) {\n  -webkit-animation-duration: @duration;\n          animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n  -webkit-animation-timing-function: @timing-function;\n          animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n  -webkit-animation-delay: @delay;\n          animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n  -webkit-animation-iteration-count: @iteration-count;\n          animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n  -webkit-animation-direction: @direction;\n          animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n  -webkit-animation-fill-mode: @fill-mode;\n          animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n  -webkit-backface-visibility: @visibility;\n     -moz-backface-visibility: @visibility;\n          backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n  -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n          box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n  -webkit-box-sizing: @boxmodel;\n     -moz-box-sizing: @boxmodel;\n          box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n  -webkit-column-count: @column-count;\n     -moz-column-count: @column-count;\n          column-count: @column-count;\n  -webkit-column-gap: @column-gap;\n     -moz-column-gap: @column-gap;\n          column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n  word-wrap: break-word;\n  -webkit-hyphens: @mode;\n     -moz-hyphens: @mode;\n      -ms-hyphens: @mode; // IE10+\n       -o-hyphens: @mode;\n          hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n  &::-moz-placeholder           { color: @color;   // Firefox\n                                  opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n  &:-ms-input-placeholder       { color: @color; } // Internet Explorer 10+\n  &::-webkit-input-placeholder  { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n  -webkit-transform: scale(@ratio);\n      -ms-transform: scale(@ratio); // IE9 only\n       -o-transform: scale(@ratio);\n          transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n  -webkit-transform: scale(@ratioX, @ratioY);\n      -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n       -o-transform: scale(@ratioX, @ratioY);\n          transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n  -webkit-transform: scaleX(@ratio);\n      -ms-transform: scaleX(@ratio); // IE9 only\n       -o-transform: scaleX(@ratio);\n          transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n  -webkit-transform: scaleY(@ratio);\n      -ms-transform: scaleY(@ratio); // IE9 only\n       -o-transform: scaleY(@ratio);\n          transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n  -webkit-transform: skewX(@x) skewY(@y);\n      -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n       -o-transform: skewX(@x) skewY(@y);\n          transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n  -webkit-transform: translate(@x, @y);\n      -ms-transform: translate(@x, @y); // IE9 only\n       -o-transform: translate(@x, @y);\n          transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n  -webkit-transform: translate3d(@x, @y, @z);\n          transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n  -webkit-transform: rotate(@degrees);\n      -ms-transform: rotate(@degrees); // IE9 only\n       -o-transform: rotate(@degrees);\n          transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n  -webkit-transform: rotateX(@degrees);\n      -ms-transform: rotateX(@degrees); // IE9 only\n       -o-transform: rotateX(@degrees);\n          transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n  -webkit-transform: rotateY(@degrees);\n      -ms-transform: rotateY(@degrees); // IE9 only\n       -o-transform: rotateY(@degrees);\n          transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n  -webkit-perspective: @perspective;\n     -moz-perspective: @perspective;\n          perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n  -webkit-perspective-origin: @perspective;\n     -moz-perspective-origin: @perspective;\n          perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n  -webkit-transform-origin: @origin;\n     -moz-transform-origin: @origin;\n      -ms-transform-origin: @origin; // IE9 only\n          transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n  -webkit-transition: @transition;\n       -o-transition: @transition;\n          transition: @transition;\n}\n.transition-property(@transition-property) {\n  -webkit-transition-property: @transition-property;\n          transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n  -webkit-transition-delay: @transition-delay;\n          transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n  -webkit-transition-duration: @transition-duration;\n          transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n  -webkit-transition-timing-function: @timing-function;\n          transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n  -webkit-transition: -webkit-transform @transition;\n     -moz-transition: -moz-transform @transition;\n       -o-transition: -o-transform @transition;\n          transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n  -webkit-user-select: @select;\n     -moz-user-select: @select;\n      -ms-user-select: @select; // IE10+\n          user-select: @select;\n}\n",null,"// Gradients\n\n#gradient {\n\n  // Horizontal gradient, from left to right\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n    background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n    background-repeat: repeat-x;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n  }\n\n  // Vertical gradient, from top to bottom\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent);  // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent);  // Opera 12\n    background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n    background-repeat: repeat-x;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n  }\n\n  .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n    background-repeat: repeat-x;\n    background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n    background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n  }\n  .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n    background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n    background-repeat: no-repeat;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n  }\n  .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-repeat: no-repeat;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n  }\n  .radial(@inner-color: #555; @outer-color: #333) {\n    background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n    background-image: radial-gradient(circle, @inner-color, @outer-color);\n    background-repeat: no-repeat;\n  }\n  .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n    background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n    background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n    background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n  }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n  filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]}
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap-theme.min.css b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap-theme.min.css
deleted file mode 100644
index 2e97597c876..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap-theme.min.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*!
- * Bootstrap v3.2.0 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:-o-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#2d6ca2));background-image:linear-gradient(to bottom,#428bca 0,#2d6ca2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#2b669a}.btn-primary:hover,.btn-primary:focus{background-color:#2d6ca2;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2d6ca2;border-color:#2b669a}.btn-primary:disabled,.btn-primary[disabled]{background-color:#2d6ca2;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#357ebd;background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-o-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#357ebd));background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f3f3f3));background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x}.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:-o-linear-gradient(top,#222 0,#282828 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#222),to(#282828));background-image:linear-gradient(to bottom,#222 0,#282828 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:-o-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#3071a9));background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-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-image:-o-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-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)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:-o-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#3278b3));background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);background-repeat:repeat-x;border-color:#3278b3}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-o-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#357ebd));background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap.css b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap.css
deleted file mode 100644
index 037dd056151..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap.css
+++ /dev/null
@@ -1,6203 +0,0 @@
-/*!
- * Bootstrap v3.2.0 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
-html {
-  font-family: sans-serif;
-  -webkit-text-size-adjust: 100%;
-      -ms-text-size-adjust: 100%;
-}
-body {
-  margin: 0;
-}
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-nav,
-section,
-summary {
-  display: block;
-}
-audio,
-canvas,
-progress,
-video {
-  display: inline-block;
-  vertical-align: baseline;
-}
-audio:not([controls]) {
-  display: none;
-  height: 0;
-}
-[hidden],
-template {
-  display: none;
-}
-a {
-  background: transparent;
-}
-a:active,
-a:hover {
-  outline: 0;
-}
-abbr[title] {
-  border-bottom: 1px dotted;
-}
-b,
-strong {
-  font-weight: bold;
-}
-dfn {
-  font-style: italic;
-}
-h1 {
-  margin: .67em 0;
-  font-size: 2em;
-}
-mark {
-  color: #000;
-  background: #ff0;
-}
-small {
-  font-size: 80%;
-}
-sub,
-sup {
-  position: relative;
-  font-size: 75%;
-  line-height: 0;
-  vertical-align: baseline;
-}
-sup {
-  top: -.5em;
-}
-sub {
-  bottom: -.25em;
-}
-img {
-  border: 0;
-}
-svg:not(:root) {
-  overflow: hidden;
-}
-figure {
-  margin: 1em 40px;
-}
-hr {
-  height: 0;
-  -webkit-box-sizing: content-box;
-     -moz-box-sizing: content-box;
-          box-sizing: content-box;
-}
-pre {
-  overflow: auto;
-}
-code,
-kbd,
-pre,
-samp {
-  font-family: monospace, monospace;
-  font-size: 1em;
-}
-button,
-input,
-optgroup,
-select,
-textarea {
-  margin: 0;
-  font: inherit;
-  color: inherit;
-}
-button {
-  overflow: visible;
-}
-button,
-select {
-  text-transform: none;
-}
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
-  -webkit-appearance: button;
-  cursor: pointer;
-}
-button[disabled],
-html input[disabled] {
-  cursor: default;
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner {
-  padding: 0;
-  border: 0;
-}
-input {
-  line-height: normal;
-}
-input[type="checkbox"],
-input[type="radio"] {
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-  padding: 0;
-}
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
-  height: auto;
-}
-input[type="search"] {
-  -webkit-box-sizing: content-box;
-     -moz-box-sizing: content-box;
-          box-sizing: content-box;
-  -webkit-appearance: textfield;
-}
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
-  -webkit-appearance: none;
-}
-fieldset {
-  padding: .35em .625em .75em;
-  margin: 0 2px;
-  border: 1px solid #c0c0c0;
-}
-legend {
-  padding: 0;
-  border: 0;
-}
-textarea {
-  overflow: auto;
-}
-optgroup {
-  font-weight: bold;
-}
-table {
-  border-spacing: 0;
-  border-collapse: collapse;
-}
-td,
-th {
-  padding: 0;
-}
-@media print {
-  * {
-    color: #000 !important;
-    text-shadow: none !important;
-    background: transparent !important;
-    -webkit-box-shadow: none !important;
-            box-shadow: none !important;
-  }
-  a,
-  a:visited {
-    text-decoration: underline;
-  }
-  a[href]:after {
-    content: " (" attr(href) ")";
-  }
-  abbr[title]:after {
-    content: " (" attr(title) ")";
-  }
-  a[href^="javascript:"]:after,
-  a[href^="#"]:after {
-    content: "";
-  }
-  pre,
-  blockquote {
-    border: 1px solid #999;
-
-    page-break-inside: avoid;
-  }
-  thead {
-    display: table-header-group;
-  }
-  tr,
-  img {
-    page-break-inside: avoid;
-  }
-  img {
-    max-width: 100% !important;
-  }
-  p,
-  h2,
-  h3 {
-    orphans: 3;
-    widows: 3;
-  }
-  h2,
-  h3 {
-    page-break-after: avoid;
-  }
-  select {
-    background: #fff !important;
-  }
-  .navbar {
-    display: none;
-  }
-  .table td,
-  .table th {
-    background-color: #fff !important;
-  }
-  .btn > .caret,
-  .dropup > .btn > .caret {
-    border-top-color: #000 !important;
-  }
-  .label {
-    border: 1px solid #000;
-  }
-  .table {
-    border-collapse: collapse !important;
-  }
-  .table-bordered th,
-  .table-bordered td {
-    border: 1px solid #ddd !important;
-  }
-}
-@font-face {
-  font-family: 'Glyphicons Halflings';
-
-  src: url('../fonts/glyphicons-halflings-regular.eot');
-  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
-}
-.glyphicon {
-  position: relative;
-  top: 1px;
-  display: inline-block;
-  font-family: 'Glyphicons Halflings';
-  font-style: normal;
-  font-weight: normal;
-  line-height: 1;
-
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-.glyphicon-asterisk:before {
-  content: "\2a";
-}
-.glyphicon-plus:before {
-  content: "\2b";
-}
-.glyphicon-euro:before {
-  content: "\20ac";
-}
-.glyphicon-minus:before {
-  content: "\2212";
-}
-.glyphicon-cloud:before {
-  content: "\2601";
-}
-.glyphicon-envelope:before {
-  content: "\2709";
-}
-.glyphicon-pencil:before {
-  content: "\270f";
-}
-.glyphicon-glass:before {
-  content: "\e001";
-}
-.glyphicon-music:before {
-  content: "\e002";
-}
-.glyphicon-search:before {
-  content: "\e003";
-}
-.glyphicon-heart:before {
-  content: "\e005";
-}
-.glyphicon-star:before {
-  content: "\e006";
-}
-.glyphicon-star-empty:before {
-  content: "\e007";
-}
-.glyphicon-user:before {
-  content: "\e008";
-}
-.glyphicon-film:before {
-  content: "\e009";
-}
-.glyphicon-th-large:before {
-  content: "\e010";
-}
-.glyphicon-th:before {
-  content: "\e011";
-}
-.glyphicon-th-list:before {
-  content: "\e012";
-}
-.glyphicon-ok:before {
-  content: "\e013";
-}
-.glyphicon-remove:before {
-  content: "\e014";
-}
-.glyphicon-zoom-in:before {
-  content: "\e015";
-}
-.glyphicon-zoom-out:before {
-  content: "\e016";
-}
-.glyphicon-off:before {
-  content: "\e017";
-}
-.glyphicon-signal:before {
-  content: "\e018";
-}
-.glyphicon-cog:before {
-  content: "\e019";
-}
-.glyphicon-trash:before {
-  content: "\e020";
-}
-.glyphicon-home:before {
-  content: "\e021";
-}
-.glyphicon-file:before {
-  content: "\e022";
-}
-.glyphicon-time:before {
-  content: "\e023";
-}
-.glyphicon-road:before {
-  content: "\e024";
-}
-.glyphicon-download-alt:before {
-  content: "\e025";
-}
-.glyphicon-download:before {
-  content: "\e026";
-}
-.glyphicon-upload:before {
-  content: "\e027";
-}
-.glyphicon-inbox:before {
-  content: "\e028";
-}
-.glyphicon-play-circle:before {
-  content: "\e029";
-}
-.glyphicon-repeat:before {
-  content: "\e030";
-}
-.glyphicon-refresh:before {
-  content: "\e031";
-}
-.glyphicon-list-alt:before {
-  content: "\e032";
-}
-.glyphicon-lock:before {
-  content: "\e033";
-}
-.glyphicon-flag:before {
-  content: "\e034";
-}
-.glyphicon-headphones:before {
-  content: "\e035";
-}
-.glyphicon-volume-off:before {
-  content: "\e036";
-}
-.glyphicon-volume-down:before {
-  content: "\e037";
-}
-.glyphicon-volume-up:before {
-  content: "\e038";
-}
-.glyphicon-qrcode:before {
-  content: "\e039";
-}
-.glyphicon-barcode:before {
-  content: "\e040";
-}
-.glyphicon-tag:before {
-  content: "\e041";
-}
-.glyphicon-tags:before {
-  content: "\e042";
-}
-.glyphicon-book:before {
-  content: "\e043";
-}
-.glyphicon-bookmark:before {
-  content: "\e044";
-}
-.glyphicon-print:before {
-  content: "\e045";
-}
-.glyphicon-camera:before {
-  content: "\e046";
-}
-.glyphicon-font:before {
-  content: "\e047";
-}
-.glyphicon-bold:before {
-  content: "\e048";
-}
-.glyphicon-italic:before {
-  content: "\e049";
-}
-.glyphicon-text-height:before {
-  content: "\e050";
-}
-.glyphicon-text-width:before {
-  content: "\e051";
-}
-.glyphicon-align-left:before {
-  content: "\e052";
-}
-.glyphicon-align-center:before {
-  content: "\e053";
-}
-.glyphicon-align-right:before {
-  content: "\e054";
-}
-.glyphicon-align-justify:before {
-  content: "\e055";
-}
-.glyphicon-list:before {
-  content: "\e056";
-}
-.glyphicon-indent-left:before {
-  content: "\e057";
-}
-.glyphicon-indent-right:before {
-  content: "\e058";
-}
-.glyphicon-facetime-video:before {
-  content: "\e059";
-}
-.glyphicon-picture:before {
-  content: "\e060";
-}
-.glyphicon-map-marker:before {
-  content: "\e062";
-}
-.glyphicon-adjust:before {
-  content: "\e063";
-}
-.glyphicon-tint:before {
-  content: "\e064";
-}
-.glyphicon-edit:before {
-  content: "\e065";
-}
-.glyphicon-share:before {
-  content: "\e066";
-}
-.glyphicon-check:before {
-  content: "\e067";
-}
-.glyphicon-move:before {
-  content: "\e068";
-}
-.glyphicon-step-backward:before {
-  content: "\e069";
-}
-.glyphicon-fast-backward:before {
-  content: "\e070";
-}
-.glyphicon-backward:before {
-  content: "\e071";
-}
-.glyphicon-play:before {
-  content: "\e072";
-}
-.glyphicon-pause:before {
-  content: "\e073";
-}
-.glyphicon-stop:before {
-  content: "\e074";
-}
-.glyphicon-forward:before {
-  content: "\e075";
-}
-.glyphicon-fast-forward:before {
-  content: "\e076";
-}
-.glyphicon-step-forward:before {
-  content: "\e077";
-}
-.glyphicon-eject:before {
-  content: "\e078";
-}
-.glyphicon-chevron-left:before {
-  content: "\e079";
-}
-.glyphicon-chevron-right:before {
-  content: "\e080";
-}
-.glyphicon-plus-sign:before {
-  content: "\e081";
-}
-.glyphicon-minus-sign:before {
-  content: "\e082";
-}
-.glyphicon-remove-sign:before {
-  content: "\e083";
-}
-.glyphicon-ok-sign:before {
-  content: "\e084";
-}
-.glyphicon-question-sign:before {
-  content: "\e085";
-}
-.glyphicon-info-sign:before {
-  content: "\e086";
-}
-.glyphicon-screenshot:before {
-  content: "\e087";
-}
-.glyphicon-remove-circle:before {
-  content: "\e088";
-}
-.glyphicon-ok-circle:before {
-  content: "\e089";
-}
-.glyphicon-ban-circle:before {
-  content: "\e090";
-}
-.glyphicon-arrow-left:before {
-  content: "\e091";
-}
-.glyphicon-arrow-right:before {
-  content: "\e092";
-}
-.glyphicon-arrow-up:before {
-  content: "\e093";
-}
-.glyphicon-arrow-down:before {
-  content: "\e094";
-}
-.glyphicon-share-alt:before {
-  content: "\e095";
-}
-.glyphicon-resize-full:before {
-  content: "\e096";
-}
-.glyphicon-resize-small:before {
-  content: "\e097";
-}
-.glyphicon-exclamation-sign:before {
-  content: "\e101";
-}
-.glyphicon-gift:before {
-  content: "\e102";
-}
-.glyphicon-leaf:before {
-  content: "\e103";
-}
-.glyphicon-fire:before {
-  content: "\e104";
-}
-.glyphicon-eye-open:before {
-  content: "\e105";
-}
-.glyphicon-eye-close:before {
-  content: "\e106";
-}
-.glyphicon-warning-sign:before {
-  content: "\e107";
-}
-.glyphicon-plane:before {
-  content: "\e108";
-}
-.glyphicon-calendar:before {
-  content: "\e109";
-}
-.glyphicon-random:before {
-  content: "\e110";
-}
-.glyphicon-comment:before {
-  content: "\e111";
-}
-.glyphicon-magnet:before {
-  content: "\e112";
-}
-.glyphicon-chevron-up:before {
-  content: "\e113";
-}
-.glyphicon-chevron-down:before {
-  content: "\e114";
-}
-.glyphicon-retweet:before {
-  content: "\e115";
-}
-.glyphicon-shopping-cart:before {
-  content: "\e116";
-}
-.glyphicon-folder-close:before {
-  content: "\e117";
-}
-.glyphicon-folder-open:before {
-  content: "\e118";
-}
-.glyphicon-resize-vertical:before {
-  content: "\e119";
-}
-.glyphicon-resize-horizontal:before {
-  content: "\e120";
-}
-.glyphicon-hdd:before {
-  content: "\e121";
-}
-.glyphicon-bullhorn:before {
-  content: "\e122";
-}
-.glyphicon-bell:before {
-  content: "\e123";
-}
-.glyphicon-certificate:before {
-  content: "\e124";
-}
-.glyphicon-thumbs-up:before {
-  content: "\e125";
-}
-.glyphicon-thumbs-down:before {
-  content: "\e126";
-}
-.glyphicon-hand-right:before {
-  content: "\e127";
-}
-.glyphicon-hand-left:before {
-  content: "\e128";
-}
-.glyphicon-hand-up:before {
-  content: "\e129";
-}
-.glyphicon-hand-down:before {
-  content: "\e130";
-}
-.glyphicon-circle-arrow-right:before {
-  content: "\e131";
-}
-.glyphicon-circle-arrow-left:before {
-  content: "\e132";
-}
-.glyphicon-circle-arrow-up:before {
-  content: "\e133";
-}
-.glyphicon-circle-arrow-down:before {
-  content: "\e134";
-}
-.glyphicon-globe:before {
-  content: "\e135";
-}
-.glyphicon-wrench:before {
-  content: "\e136";
-}
-.glyphicon-tasks:before {
-  content: "\e137";
-}
-.glyphicon-filter:before {
-  content: "\e138";
-}
-.glyphicon-briefcase:before {
-  content: "\e139";
-}
-.glyphicon-fullscreen:before {
-  content: "\e140";
-}
-.glyphicon-dashboard:before {
-  content: "\e141";
-}
-.glyphicon-paperclip:before {
-  content: "\e142";
-}
-.glyphicon-heart-empty:before {
-  content: "\e143";
-}
-.glyphicon-link:before {
-  content: "\e144";
-}
-.glyphicon-phone:before {
-  content: "\e145";
-}
-.glyphicon-pushpin:before {
-  content: "\e146";
-}
-.glyphicon-usd:before {
-  content: "\e148";
-}
-.glyphicon-gbp:before {
-  content: "\e149";
-}
-.glyphicon-sort:before {
-  content: "\e150";
-}
-.glyphicon-sort-by-alphabet:before {
-  content: "\e151";
-}
-.glyphicon-sort-by-alphabet-alt:before {
-  content: "\e152";
-}
-.glyphicon-sort-by-order:before {
-  content: "\e153";
-}
-.glyphicon-sort-by-order-alt:before {
-  content: "\e154";
-}
-.glyphicon-sort-by-attributes:before {
-  content: "\e155";
-}
-.glyphicon-sort-by-attributes-alt:before {
-  content: "\e156";
-}
-.glyphicon-unchecked:before {
-  content: "\e157";
-}
-.glyphicon-expand:before {
-  content: "\e158";
-}
-.glyphicon-collapse-down:before {
-  content: "\e159";
-}
-.glyphicon-collapse-up:before {
-  content: "\e160";
-}
-.glyphicon-log-in:before {
-  content: "\e161";
-}
-.glyphicon-flash:before {
-  content: "\e162";
-}
-.glyphicon-log-out:before {
-  content: "\e163";
-}
-.glyphicon-new-window:before {
-  content: "\e164";
-}
-.glyphicon-record:before {
-  content: "\e165";
-}
-.glyphicon-save:before {
-  content: "\e166";
-}
-.glyphicon-open:before {
-  content: "\e167";
-}
-.glyphicon-saved:before {
-  content: "\e168";
-}
-.glyphicon-import:before {
-  content: "\e169";
-}
-.glyphicon-export:before {
-  content: "\e170";
-}
-.glyphicon-send:before {
-  content: "\e171";
-}
-.glyphicon-floppy-disk:before {
-  content: "\e172";
-}
-.glyphicon-floppy-saved:before {
-  content: "\e173";
-}
-.glyphicon-floppy-remove:before {
-  content: "\e174";
-}
-.glyphicon-floppy-save:before {
-  content: "\e175";
-}
-.glyphicon-floppy-open:before {
-  content: "\e176";
-}
-.glyphicon-credit-card:before {
-  content: "\e177";
-}
-.glyphicon-transfer:before {
-  content: "\e178";
-}
-.glyphicon-cutlery:before {
-  content: "\e179";
-}
-.glyphicon-header:before {
-  content: "\e180";
-}
-.glyphicon-compressed:before {
-  content: "\e181";
-}
-.glyphicon-earphone:before {
-  content: "\e182";
-}
-.glyphicon-phone-alt:before {
-  content: "\e183";
-}
-.glyphicon-tower:before {
-  content: "\e184";
-}
-.glyphicon-stats:before {
-  content: "\e185";
-}
-.glyphicon-sd-video:before {
-  content: "\e186";
-}
-.glyphicon-hd-video:before {
-  content: "\e187";
-}
-.glyphicon-subtitles:before {
-  content: "\e188";
-}
-.glyphicon-sound-stereo:before {
-  content: "\e189";
-}
-.glyphicon-sound-dolby:before {
-  content: "\e190";
-}
-.glyphicon-sound-5-1:before {
-  content: "\e191";
-}
-.glyphicon-sound-6-1:before {
-  content: "\e192";
-}
-.glyphicon-sound-7-1:before {
-  content: "\e193";
-}
-.glyphicon-copyright-mark:before {
-  content: "\e194";
-}
-.glyphicon-registration-mark:before {
-  content: "\e195";
-}
-.glyphicon-cloud-download:before {
-  content: "\e197";
-}
-.glyphicon-cloud-upload:before {
-  content: "\e198";
-}
-.glyphicon-tree-conifer:before {
-  content: "\e199";
-}
-.glyphicon-tree-deciduous:before {
-  content: "\e200";
-}
-* {
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-*:before,
-*:after {
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-html {
-  font-size: 10px;
-
-  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-}
-body {
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-size: 14px;
-  line-height: 1.42857143;
-  color: #333;
-  background-color: #fff;
-}
-input,
-button,
-select,
-textarea {
-  font-family: inherit;
-  font-size: inherit;
-  line-height: inherit;
-}
-a {
-  color: #428bca;
-  text-decoration: none;
-}
-a:hover,
-a:focus {
-  color: #2a6496;
-  text-decoration: underline;
-}
-a:focus {
-  outline: thin dotted;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-figure {
-  margin: 0;
-}
-img {
-  vertical-align: middle;
-}
-.img-responsive,
-.thumbnail > img,
-.thumbnail a > img,
-.carousel-inner > .item > img,
-.carousel-inner > .item > a > img {
-  display: block;
-  width: 100% \9;
-  max-width: 100%;
-  height: auto;
-}
-.img-rounded {
-  border-radius: 6px;
-}
-.img-thumbnail {
-  display: inline-block;
-  width: 100% \9;
-  max-width: 100%;
-  height: auto;
-  padding: 4px;
-  line-height: 1.42857143;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  border-radius: 4px;
-  -webkit-transition: all .2s ease-in-out;
-       -o-transition: all .2s ease-in-out;
-          transition: all .2s ease-in-out;
-}
-.img-circle {
-  border-radius: 50%;
-}
-hr {
-  margin-top: 20px;
-  margin-bottom: 20px;
-  border: 0;
-  border-top: 1px solid #eee;
-}
-.sr-only {
-  position: absolute;
-  width: 1px;
-  height: 1px;
-  padding: 0;
-  margin: -1px;
-  overflow: hidden;
-  clip: rect(0, 0, 0, 0);
-  border: 0;
-}
-.sr-only-focusable:active,
-.sr-only-focusable:focus {
-  position: static;
-  width: auto;
-  height: auto;
-  margin: 0;
-  overflow: visible;
-  clip: auto;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-.h1,
-.h2,
-.h3,
-.h4,
-.h5,
-.h6 {
-  font-family: inherit;
-  font-weight: 500;
-  line-height: 1.1;
-  color: inherit;
-}
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small,
-.h1 small,
-.h2 small,
-.h3 small,
-.h4 small,
-.h5 small,
-.h6 small,
-h1 .small,
-h2 .small,
-h3 .small,
-h4 .small,
-h5 .small,
-h6 .small,
-.h1 .small,
-.h2 .small,
-.h3 .small,
-.h4 .small,
-.h5 .small,
-.h6 .small {
-  font-weight: normal;
-  line-height: 1;
-  color: #777;
-}
-h1,
-.h1,
-h2,
-.h2,
-h3,
-.h3 {
-  margin-top: 20px;
-  margin-bottom: 10px;
-}
-h1 small,
-.h1 small,
-h2 small,
-.h2 small,
-h3 small,
-.h3 small,
-h1 .small,
-.h1 .small,
-h2 .small,
-.h2 .small,
-h3 .small,
-.h3 .small {
-  font-size: 65%;
-}
-h4,
-.h4,
-h5,
-.h5,
-h6,
-.h6 {
-  margin-top: 10px;
-  margin-bottom: 10px;
-}
-h4 small,
-.h4 small,
-h5 small,
-.h5 small,
-h6 small,
-.h6 small,
-h4 .small,
-.h4 .small,
-h5 .small,
-.h5 .small,
-h6 .small,
-.h6 .small {
-  font-size: 75%;
-}
-h1,
-.h1 {
-  font-size: 36px;
-}
-h2,
-.h2 {
-  font-size: 30px;
-}
-h3,
-.h3 {
-  font-size: 24px;
-}
-h4,
-.h4 {
-  font-size: 18px;
-}
-h5,
-.h5 {
-  font-size: 14px;
-}
-h6,
-.h6 {
-  font-size: 12px;
-}
-p {
-  margin: 0 0 10px;
-}
-.lead {
-  margin-bottom: 20px;
-  font-size: 16px;
-  font-weight: 300;
-  line-height: 1.4;
-}
-@media (min-width: 768px) {
-  .lead {
-    font-size: 21px;
-  }
-}
-small,
-.small {
-  font-size: 85%;
-}
-cite {
-  font-style: normal;
-}
-mark,
-.mark {
-  padding: .2em;
-  background-color: #fcf8e3;
-}
-.text-left {
-  text-align: left;
-}
-.text-right {
-  text-align: right;
-}
-.text-center {
-  text-align: center;
-}
-.text-justify {
-  text-align: justify;
-}
-.text-nowrap {
-  white-space: nowrap;
-}
-.text-lowercase {
-  text-transform: lowercase;
-}
-.text-uppercase {
-  text-transform: uppercase;
-}
-.text-capitalize {
-  text-transform: capitalize;
-}
-.text-muted {
-  color: #777;
-}
-.text-primary {
-  color: #428bca;
-}
-a.text-primary:hover {
-  color: #3071a9;
-}
-.text-success {
-  color: #3c763d;
-}
-a.text-success:hover {
-  color: #2b542c;
-}
-.text-info {
-  color: #31708f;
-}
-a.text-info:hover {
-  color: #245269;
-}
-.text-warning {
-  color: #8a6d3b;
-}
-a.text-warning:hover {
-  color: #66512c;
-}
-.text-danger {
-  color: #a94442;
-}
-a.text-danger:hover {
-  color: #843534;
-}
-.bg-primary {
-  color: #fff;
-  background-color: #428bca;
-}
-a.bg-primary:hover {
-  background-color: #3071a9;
-}
-.bg-success {
-  background-color: #dff0d8;
-}
-a.bg-success:hover {
-  background-color: #c1e2b3;
-}
-.bg-info {
-  background-color: #d9edf7;
-}
-a.bg-info:hover {
-  background-color: #afd9ee;
-}
-.bg-warning {
-  background-color: #fcf8e3;
-}
-a.bg-warning:hover {
-  background-color: #f7ecb5;
-}
-.bg-danger {
-  background-color: #f2dede;
-}
-a.bg-danger:hover {
-  background-color: #e4b9b9;
-}
-.page-header {
-  padding-bottom: 9px;
-  margin: 40px 0 20px;
-  border-bottom: 1px solid #eee;
-}
-ul,
-ol {
-  margin-top: 0;
-  margin-bottom: 10px;
-}
-ul ul,
-ol ul,
-ul ol,
-ol ol {
-  margin-bottom: 0;
-}
-.list-unstyled {
-  padding-left: 0;
-  list-style: none;
-}
-.list-inline {
-  padding-left: 0;
-  margin-left: -5px;
-  list-style: none;
-}
-.list-inline > li {
-  display: inline-block;
-  padding-right: 5px;
-  padding-left: 5px;
-}
-dl {
-  margin-top: 0;
-  margin-bottom: 20px;
-}
-dt,
-dd {
-  line-height: 1.42857143;
-}
-dt {
-  font-weight: bold;
-}
-dd {
-  margin-left: 0;
-}
-@media (min-width: 768px) {
-  .dl-horizontal dt {
-    float: left;
-    width: 160px;
-    overflow: hidden;
-    clear: left;
-    text-align: right;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-  }
-  .dl-horizontal dd {
-    margin-left: 180px;
-  }
-}
-abbr[title],
-abbr[data-original-title] {
-  cursor: help;
-  border-bottom: 1px dotted #777;
-}
-.initialism {
-  font-size: 90%;
-  text-transform: uppercase;
-}
-blockquote {
-  padding: 10px 20px;
-  margin: 0 0 20px;
-  font-size: 17.5px;
-  border-left: 5px solid #eee;
-}
-blockquote p:last-child,
-blockquote ul:last-child,
-blockquote ol:last-child {
-  margin-bottom: 0;
-}
-blockquote footer,
-blockquote small,
-blockquote .small {
-  display: block;
-  font-size: 80%;
-  line-height: 1.42857143;
-  color: #777;
-}
-blockquote footer:before,
-blockquote small:before,
-blockquote .small:before {
-  content: '\2014 \00A0';
-}
-.blockquote-reverse,
-blockquote.pull-right {
-  padding-right: 15px;
-  padding-left: 0;
-  text-align: right;
-  border-right: 5px solid #eee;
-  border-left: 0;
-}
-.blockquote-reverse footer:before,
-blockquote.pull-right footer:before,
-.blockquote-reverse small:before,
-blockquote.pull-right small:before,
-.blockquote-reverse .small:before,
-blockquote.pull-right .small:before {
-  content: '';
-}
-.blockquote-reverse footer:after,
-blockquote.pull-right footer:after,
-.blockquote-reverse small:after,
-blockquote.pull-right small:after,
-.blockquote-reverse .small:after,
-blockquote.pull-right .small:after {
-  content: '\00A0 \2014';
-}
-blockquote:before,
-blockquote:after {
-  content: "";
-}
-address {
-  margin-bottom: 20px;
-  font-style: normal;
-  line-height: 1.42857143;
-}
-code,
-kbd,
-pre,
-samp {
-  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
-}
-code {
-  padding: 2px 4px;
-  font-size: 90%;
-  color: #c7254e;
-  background-color: #f9f2f4;
-  border-radius: 4px;
-}
-kbd {
-  padding: 2px 4px;
-  font-size: 90%;
-  color: #fff;
-  background-color: #333;
-  border-radius: 3px;
-  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
-          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
-}
-kbd kbd {
-  padding: 0;
-  font-size: 100%;
-  -webkit-box-shadow: none;
-          box-shadow: none;
-}
-pre {
-  display: block;
-  padding: 9.5px;
-  margin: 0 0 10px;
-  font-size: 13px;
-  line-height: 1.42857143;
-  color: #333;
-  word-break: break-all;
-  word-wrap: break-word;
-  background-color: #f5f5f5;
-  border: 1px solid #ccc;
-  border-radius: 4px;
-}
-pre code {
-  padding: 0;
-  font-size: inherit;
-  color: inherit;
-  white-space: pre-wrap;
-  background-color: transparent;
-  border-radius: 0;
-}
-.pre-scrollable {
-  max-height: 340px;
-  overflow-y: scroll;
-}
-.container {
-  padding-right: 15px;
-  padding-left: 15px;
-  margin-right: auto;
-  margin-left: auto;
-}
-@media (min-width: 768px) {
-  .container {
-    width: 750px;
-  }
-}
-@media (min-width: 992px) {
-  .container {
-    width: 970px;
-  }
-}
-@media (min-width: 1200px) {
-  .container {
-    width: 1170px;
-  }
-}
-.container-fluid {
-  padding-right: 15px;
-  padding-left: 15px;
-  margin-right: auto;
-  margin-left: auto;
-}
-.row {
-  margin-right: -15px;
-  margin-left: -15px;
-}
-.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
-  position: relative;
-  min-height: 1px;
-  padding-right: 15px;
-  padding-left: 15px;
-}
-.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
-  float: left;
-}
-.col-xs-12 {
-  width: 100%;
-}
-.col-xs-11 {
-  width: 91.66666667%;
-}
-.col-xs-10 {
-  width: 83.33333333%;
-}
-.col-xs-9 {
-  width: 75%;
-}
-.col-xs-8 {
-  width: 66.66666667%;
-}
-.col-xs-7 {
-  width: 58.33333333%;
-}
-.col-xs-6 {
-  width: 50%;
-}
-.col-xs-5 {
-  width: 41.66666667%;
-}
-.col-xs-4 {
-  width: 33.33333333%;
-}
-.col-xs-3 {
-  width: 25%;
-}
-.col-xs-2 {
-  width: 16.66666667%;
-}
-.col-xs-1 {
-  width: 8.33333333%;
-}
-.col-xs-pull-12 {
-  right: 100%;
-}
-.col-xs-pull-11 {
-  right: 91.66666667%;
-}
-.col-xs-pull-10 {
-  right: 83.33333333%;
-}
-.col-xs-pull-9 {
-  right: 75%;
-}
-.col-xs-pull-8 {
-  right: 66.66666667%;
-}
-.col-xs-pull-7 {
-  right: 58.33333333%;
-}
-.col-xs-pull-6 {
-  right: 50%;
-}
-.col-xs-pull-5 {
-  right: 41.66666667%;
-}
-.col-xs-pull-4 {
-  right: 33.33333333%;
-}
-.col-xs-pull-3 {
-  right: 25%;
-}
-.col-xs-pull-2 {
-  right: 16.66666667%;
-}
-.col-xs-pull-1 {
-  right: 8.33333333%;
-}
-.col-xs-pull-0 {
-  right: auto;
-}
-.col-xs-push-12 {
-  left: 100%;
-}
-.col-xs-push-11 {
-  left: 91.66666667%;
-}
-.col-xs-push-10 {
-  left: 83.33333333%;
-}
-.col-xs-push-9 {
-  left: 75%;
-}
-.col-xs-push-8 {
-  left: 66.66666667%;
-}
-.col-xs-push-7 {
-  left: 58.33333333%;
-}
-.col-xs-push-6 {
-  left: 50%;
-}
-.col-xs-push-5 {
-  left: 41.66666667%;
-}
-.col-xs-push-4 {
-  left: 33.33333333%;
-}
-.col-xs-push-3 {
-  left: 25%;
-}
-.col-xs-push-2 {
-  left: 16.66666667%;
-}
-.col-xs-push-1 {
-  left: 8.33333333%;
-}
-.col-xs-push-0 {
-  left: auto;
-}
-.col-xs-offset-12 {
-  margin-left: 100%;
-}
-.col-xs-offset-11 {
-  margin-left: 91.66666667%;
-}
-.col-xs-offset-10 {
-  margin-left: 83.33333333%;
-}
-.col-xs-offset-9 {
-  margin-left: 75%;
-}
-.col-xs-offset-8 {
-  margin-left: 66.66666667%;
-}
-.col-xs-offset-7 {
-  margin-left: 58.33333333%;
-}
-.col-xs-offset-6 {
-  margin-left: 50%;
-}
-.col-xs-offset-5 {
-  margin-left: 41.66666667%;
-}
-.col-xs-offset-4 {
-  margin-left: 33.33333333%;
-}
-.col-xs-offset-3 {
-  margin-left: 25%;
-}
-.col-xs-offset-2 {
-  margin-left: 16.66666667%;
-}
-.col-xs-offset-1 {
-  margin-left: 8.33333333%;
-}
-.col-xs-offset-0 {
-  margin-left: 0;
-}
-@media (min-width: 768px) {
-  .col-sm-1, .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-10, .col-sm-11, .col-sm-12 {
-    float: left;
-  }
-  .col-sm-12 {
-    width: 100%;
-  }
-  .col-sm-11 {
-    width: 91.66666667%;
-  }
-  .col-sm-10 {
-    width: 83.33333333%;
-  }
-  .col-sm-9 {
-    width: 75%;
-  }
-  .col-sm-8 {
-    width: 66.66666667%;
-  }
-  .col-sm-7 {
-    width: 58.33333333%;
-  }
-  .col-sm-6 {
-    width: 50%;
-  }
-  .col-sm-5 {
-    width: 41.66666667%;
-  }
-  .col-sm-4 {
-    width: 33.33333333%;
-  }
-  .col-sm-3 {
-    width: 25%;
-  }
-  .col-sm-2 {
-    width: 16.66666667%;
-  }
-  .col-sm-1 {
-    width: 8.33333333%;
-  }
-  .col-sm-pull-12 {
-    right: 100%;
-  }
-  .col-sm-pull-11 {
-    right: 91.66666667%;
-  }
-  .col-sm-pull-10 {
-    right: 83.33333333%;
-  }
-  .col-sm-pull-9 {
-    right: 75%;
-  }
-  .col-sm-pull-8 {
-    right: 66.66666667%;
-  }
-  .col-sm-pull-7 {
-    right: 58.33333333%;
-  }
-  .col-sm-pull-6 {
-    right: 50%;
-  }
-  .col-sm-pull-5 {
-    right: 41.66666667%;
-  }
-  .col-sm-pull-4 {
-    right: 33.33333333%;
-  }
-  .col-sm-pull-3 {
-    right: 25%;
-  }
-  .col-sm-pull-2 {
-    right: 16.66666667%;
-  }
-  .col-sm-pull-1 {
-    right: 8.33333333%;
-  }
-  .col-sm-pull-0 {
-    right: auto;
-  }
-  .col-sm-push-12 {
-    left: 100%;
-  }
-  .col-sm-push-11 {
-    left: 91.66666667%;
-  }
-  .col-sm-push-10 {
-    left: 83.33333333%;
-  }
-  .col-sm-push-9 {
-    left: 75%;
-  }
-  .col-sm-push-8 {
-    left: 66.66666667%;
-  }
-  .col-sm-push-7 {
-    left: 58.33333333%;
-  }
-  .col-sm-push-6 {
-    left: 50%;
-  }
-  .col-sm-push-5 {
-    left: 41.66666667%;
-  }
-  .col-sm-push-4 {
-    left: 33.33333333%;
-  }
-  .col-sm-push-3 {
-    left: 25%;
-  }
-  .col-sm-push-2 {
-    left: 16.66666667%;
-  }
-  .col-sm-push-1 {
-    left: 8.33333333%;
-  }
-  .col-sm-push-0 {
-    left: auto;
-  }
-  .col-sm-offset-12 {
-    margin-left: 100%;
-  }
-  .col-sm-offset-11 {
-    margin-left: 91.66666667%;
-  }
-  .col-sm-offset-10 {
-    margin-left: 83.33333333%;
-  }
-  .col-sm-offset-9 {
-    margin-left: 75%;
-  }
-  .col-sm-offset-8 {
-    margin-left: 66.66666667%;
-  }
-  .col-sm-offset-7 {
-    margin-left: 58.33333333%;
-  }
-  .col-sm-offset-6 {
-    margin-left: 50%;
-  }
-  .col-sm-offset-5 {
-    margin-left: 41.66666667%;
-  }
-  .col-sm-offset-4 {
-    margin-left: 33.33333333%;
-  }
-  .col-sm-offset-3 {
-    margin-left: 25%;
-  }
-  .col-sm-offset-2 {
-    margin-left: 16.66666667%;
-  }
-  .col-sm-offset-1 {
-    margin-left: 8.33333333%;
-  }
-  .col-sm-offset-0 {
-    margin-left: 0;
-  }
-}
-@media (min-width: 992px) {
-  .col-md-1, .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-10, .col-md-11, .col-md-12 {
-    float: left;
-  }
-  .col-md-12 {
-    width: 100%;
-  }
-  .col-md-11 {
-    width: 91.66666667%;
-  }
-  .col-md-10 {
-    width: 83.33333333%;
-  }
-  .col-md-9 {
-    width: 75%;
-  }
-  .col-md-8 {
-    width: 66.66666667%;
-  }
-  .col-md-7 {
-    width: 58.33333333%;
-  }
-  .col-md-6 {
-    width: 50%;
-  }
-  .col-md-5 {
-    width: 41.66666667%;
-  }
-  .col-md-4 {
-    width: 33.33333333%;
-  }
-  .col-md-3 {
-    width: 25%;
-  }
-  .col-md-2 {
-    width: 16.66666667%;
-  }
-  .col-md-1 {
-    width: 8.33333333%;
-  }
-  .col-md-pull-12 {
-    right: 100%;
-  }
-  .col-md-pull-11 {
-    right: 91.66666667%;
-  }
-  .col-md-pull-10 {
-    right: 83.33333333%;
-  }
-  .col-md-pull-9 {
-    right: 75%;
-  }
-  .col-md-pull-8 {
-    right: 66.66666667%;
-  }
-  .col-md-pull-7 {
-    right: 58.33333333%;
-  }
-  .col-md-pull-6 {
-    right: 50%;
-  }
-  .col-md-pull-5 {
-    right: 41.66666667%;
-  }
-  .col-md-pull-4 {
-    right: 33.33333333%;
-  }
-  .col-md-pull-3 {
-    right: 25%;
-  }
-  .col-md-pull-2 {
-    right: 16.66666667%;
-  }
-  .col-md-pull-1 {
-    right: 8.33333333%;
-  }
-  .col-md-pull-0 {
-    right: auto;
-  }
-  .col-md-push-12 {
-    left: 100%;
-  }
-  .col-md-push-11 {
-    left: 91.66666667%;
-  }
-  .col-md-push-10 {
-    left: 83.33333333%;
-  }
-  .col-md-push-9 {
-    left: 75%;
-  }
-  .col-md-push-8 {
-    left: 66.66666667%;
-  }
-  .col-md-push-7 {
-    left: 58.33333333%;
-  }
-  .col-md-push-6 {
-    left: 50%;
-  }
-  .col-md-push-5 {
-    left: 41.66666667%;
-  }
-  .col-md-push-4 {
-    left: 33.33333333%;
-  }
-  .col-md-push-3 {
-    left: 25%;
-  }
-  .col-md-push-2 {
-    left: 16.66666667%;
-  }
-  .col-md-push-1 {
-    left: 8.33333333%;
-  }
-  .col-md-push-0 {
-    left: auto;
-  }
-  .col-md-offset-12 {
-    margin-left: 100%;
-  }
-  .col-md-offset-11 {
-    margin-left: 91.66666667%;
-  }
-  .col-md-offset-10 {
-    margin-left: 83.33333333%;
-  }
-  .col-md-offset-9 {
-    margin-left: 75%;
-  }
-  .col-md-offset-8 {
-    margin-left: 66.66666667%;
-  }
-  .col-md-offset-7 {
-    margin-left: 58.33333333%;
-  }
-  .col-md-offset-6 {
-    margin-left: 50%;
-  }
-  .col-md-offset-5 {
-    margin-left: 41.66666667%;
-  }
-  .col-md-offset-4 {
-    margin-left: 33.33333333%;
-  }
-  .col-md-offset-3 {
-    margin-left: 25%;
-  }
-  .col-md-offset-2 {
-    margin-left: 16.66666667%;
-  }
-  .col-md-offset-1 {
-    margin-left: 8.33333333%;
-  }
-  .col-md-offset-0 {
-    margin-left: 0;
-  }
-}
-@media (min-width: 1200px) {
-  .col-lg-1, .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-10, .col-lg-11, .col-lg-12 {
-    float: left;
-  }
-  .col-lg-12 {
-    width: 100%;
-  }
-  .col-lg-11 {
-    width: 91.66666667%;
-  }
-  .col-lg-10 {
-    width: 83.33333333%;
-  }
-  .col-lg-9 {
-    width: 75%;
-  }
-  .col-lg-8 {
-    width: 66.66666667%;
-  }
-  .col-lg-7 {
-    width: 58.33333333%;
-  }
-  .col-lg-6 {
-    width: 50%;
-  }
-  .col-lg-5 {
-    width: 41.66666667%;
-  }
-  .col-lg-4 {
-    width: 33.33333333%;
-  }
-  .col-lg-3 {
-    width: 25%;
-  }
-  .col-lg-2 {
-    width: 16.66666667%;
-  }
-  .col-lg-1 {
-    width: 8.33333333%;
-  }
-  .col-lg-pull-12 {
-    right: 100%;
-  }
-  .col-lg-pull-11 {
-    right: 91.66666667%;
-  }
-  .col-lg-pull-10 {
-    right: 83.33333333%;
-  }
-  .col-lg-pull-9 {
-    right: 75%;
-  }
-  .col-lg-pull-8 {
-    right: 66.66666667%;
-  }
-  .col-lg-pull-7 {
-    right: 58.33333333%;
-  }
-  .col-lg-pull-6 {
-    right: 50%;
-  }
-  .col-lg-pull-5 {
-    right: 41.66666667%;
-  }
-  .col-lg-pull-4 {
-    right: 33.33333333%;
-  }
-  .col-lg-pull-3 {
-    right: 25%;
-  }
-  .col-lg-pull-2 {
-    right: 16.66666667%;
-  }
-  .col-lg-pull-1 {
-    right: 8.33333333%;
-  }
-  .col-lg-pull-0 {
-    right: auto;
-  }
-  .col-lg-push-12 {
-    left: 100%;
-  }
-  .col-lg-push-11 {
-    left: 91.66666667%;
-  }
-  .col-lg-push-10 {
-    left: 83.33333333%;
-  }
-  .col-lg-push-9 {
-    left: 75%;
-  }
-  .col-lg-push-8 {
-    left: 66.66666667%;
-  }
-  .col-lg-push-7 {
-    left: 58.33333333%;
-  }
-  .col-lg-push-6 {
-    left: 50%;
-  }
-  .col-lg-push-5 {
-    left: 41.66666667%;
-  }
-  .col-lg-push-4 {
-    left: 33.33333333%;
-  }
-  .col-lg-push-3 {
-    left: 25%;
-  }
-  .col-lg-push-2 {
-    left: 16.66666667%;
-  }
-  .col-lg-push-1 {
-    left: 8.33333333%;
-  }
-  .col-lg-push-0 {
-    left: auto;
-  }
-  .col-lg-offset-12 {
-    margin-left: 100%;
-  }
-  .col-lg-offset-11 {
-    margin-left: 91.66666667%;
-  }
-  .col-lg-offset-10 {
-    margin-left: 83.33333333%;
-  }
-  .col-lg-offset-9 {
-    margin-left: 75%;
-  }
-  .col-lg-offset-8 {
-    margin-left: 66.66666667%;
-  }
-  .col-lg-offset-7 {
-    margin-left: 58.33333333%;
-  }
-  .col-lg-offset-6 {
-    margin-left: 50%;
-  }
-  .col-lg-offset-5 {
-    margin-left: 41.66666667%;
-  }
-  .col-lg-offset-4 {
-    margin-left: 33.33333333%;
-  }
-  .col-lg-offset-3 {
-    margin-left: 25%;
-  }
-  .col-lg-offset-2 {
-    margin-left: 16.66666667%;
-  }
-  .col-lg-offset-1 {
-    margin-left: 8.33333333%;
-  }
-  .col-lg-offset-0 {
-    margin-left: 0;
-  }
-}
-table {
-  background-color: transparent;
-}
-th {
-  text-align: left;
-}
-.table {
-  width: 100%;
-  max-width: 100%;
-  margin-bottom: 20px;
-}
-.table > thead > tr > th,
-.table > tbody > tr > th,
-.table > tfoot > tr > th,
-.table > thead > tr > td,
-.table > tbody > tr > td,
-.table > tfoot > tr > td {
-  padding: 8px;
-  line-height: 1.42857143;
-  vertical-align: top;
-  border-top: 1px solid #ddd;
-}
-.table > thead > tr > th {
-  vertical-align: bottom;
-  border-bottom: 2px solid #ddd;
-}
-.table > caption + thead > tr:first-child > th,
-.table > colgroup + thead > tr:first-child > th,
-.table > thead:first-child > tr:first-child > th,
-.table > caption + thead > tr:first-child > td,
-.table > colgroup + thead > tr:first-child > td,
-.table > thead:first-child > tr:first-child > td {
-  border-top: 0;
-}
-.table > tbody + tbody {
-  border-top: 2px solid #ddd;
-}
-.table .table {
-  background-color: #fff;
-}
-.table-condensed > thead > tr > th,
-.table-condensed > tbody > tr > th,
-.table-condensed > tfoot > tr > th,
-.table-condensed > thead > tr > td,
-.table-condensed > tbody > tr > td,
-.table-condensed > tfoot > tr > td {
-  padding: 5px;
-}
-.table-bordered {
-  border: 1px solid #ddd;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > tbody > tr > th,
-.table-bordered > tfoot > tr > th,
-.table-bordered > thead > tr > td,
-.table-bordered > tbody > tr > td,
-.table-bordered > tfoot > tr > td {
-  border: 1px solid #ddd;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > thead > tr > td {
-  border-bottom-width: 2px;
-}
-.table-striped > tbody > tr:nth-child(odd) > td,
-.table-striped > tbody > tr:nth-child(odd) > th {
-  background-color: #f9f9f9;
-}
-.table-hover > tbody > tr:hover > td,
-.table-hover > tbody > tr:hover > th {
-  background-color: #f5f5f5;
-}
-table col[class*="col-"] {
-  position: static;
-  display: table-column;
-  float: none;
-}
-table td[class*="col-"],
-table th[class*="col-"] {
-  position: static;
-  display: table-cell;
-  float: none;
-}
-.table > thead > tr > td.active,
-.table > tbody > tr > td.active,
-.table > tfoot > tr > td.active,
-.table > thead > tr > th.active,
-.table > tbody > tr > th.active,
-.table > tfoot > tr > th.active,
-.table > thead > tr.active > td,
-.table > tbody > tr.active > td,
-.table > tfoot > tr.active > td,
-.table > thead > tr.active > th,
-.table > tbody > tr.active > th,
-.table > tfoot > tr.active > th {
-  background-color: #f5f5f5;
-}
-.table-hover > tbody > tr > td.active:hover,
-.table-hover > tbody > tr > th.active:hover,
-.table-hover > tbody > tr.active:hover > td,
-.table-hover > tbody > tr:hover > .active,
-.table-hover > tbody > tr.active:hover > th {
-  background-color: #e8e8e8;
-}
-.table > thead > tr > td.success,
-.table > tbody > tr > td.success,
-.table > tfoot > tr > td.success,
-.table > thead > tr > th.success,
-.table > tbody > tr > th.success,
-.table > tfoot > tr > th.success,
-.table > thead > tr.success > td,
-.table > tbody > tr.success > td,
-.table > tfoot > tr.success > td,
-.table > thead > tr.success > th,
-.table > tbody > tr.success > th,
-.table > tfoot > tr.success > th {
-  background-color: #dff0d8;
-}
-.table-hover > tbody > tr > td.success:hover,
-.table-hover > tbody > tr > th.success:hover,
-.table-hover > tbody > tr.success:hover > td,
-.table-hover > tbody > tr:hover > .success,
-.table-hover > tbody > tr.success:hover > th {
-  background-color: #d0e9c6;
-}
-.table > thead > tr > td.info,
-.table > tbody > tr > td.info,
-.table > tfoot > tr > td.info,
-.table > thead > tr > th.info,
-.table > tbody > tr > th.info,
-.table > tfoot > tr > th.info,
-.table > thead > tr.info > td,
-.table > tbody > tr.info > td,
-.table > tfoot > tr.info > td,
-.table > thead > tr.info > th,
-.table > tbody > tr.info > th,
-.table > tfoot > tr.info > th {
-  background-color: #d9edf7;
-}
-.table-hover > tbody > tr > td.info:hover,
-.table-hover > tbody > tr > th.info:hover,
-.table-hover > tbody > tr.info:hover > td,
-.table-hover > tbody > tr:hover > .info,
-.table-hover > tbody > tr.info:hover > th {
-  background-color: #c4e3f3;
-}
-.table > thead > tr > td.warning,
-.table > tbody > tr > td.warning,
-.table > tfoot > tr > td.warning,
-.table > thead > tr > th.warning,
-.table > tbody > tr > th.warning,
-.table > tfoot > tr > th.warning,
-.table > thead > tr.warning > td,
-.table > tbody > tr.warning > td,
-.table > tfoot > tr.warning > td,
-.table > thead > tr.warning > th,
-.table > tbody > tr.warning > th,
-.table > tfoot > tr.warning > th {
-  background-color: #fcf8e3;
-}
-.table-hover > tbody > tr > td.warning:hover,
-.table-hover > tbody > tr > th.warning:hover,
-.table-hover > tbody > tr.warning:hover > td,
-.table-hover > tbody > tr:hover > .warning,
-.table-hover > tbody > tr.warning:hover > th {
-  background-color: #faf2cc;
-}
-.table > thead > tr > td.danger,
-.table > tbody > tr > td.danger,
-.table > tfoot > tr > td.danger,
-.table > thead > tr > th.danger,
-.table > tbody > tr > th.danger,
-.table > tfoot > tr > th.danger,
-.table > thead > tr.danger > td,
-.table > tbody > tr.danger > td,
-.table > tfoot > tr.danger > td,
-.table > thead > tr.danger > th,
-.table > tbody > tr.danger > th,
-.table > tfoot > tr.danger > th {
-  background-color: #f2dede;
-}
-.table-hover > tbody > tr > td.danger:hover,
-.table-hover > tbody > tr > th.danger:hover,
-.table-hover > tbody > tr.danger:hover > td,
-.table-hover > tbody > tr:hover > .danger,
-.table-hover > tbody > tr.danger:hover > th {
-  background-color: #ebcccc;
-}
-@media screen and (max-width: 767px) {
-  .table-responsive {
-    width: 100%;
-    margin-bottom: 15px;
-    overflow-x: auto;
-    overflow-y: hidden;
-    -webkit-overflow-scrolling: touch;
-    -ms-overflow-style: -ms-autohiding-scrollbar;
-    border: 1px solid #ddd;
-  }
-  .table-responsive > .table {
-    margin-bottom: 0;
-  }
-  .table-responsive > .table > thead > tr > th,
-  .table-responsive > .table > tbody > tr > th,
-  .table-responsive > .table > tfoot > tr > th,
-  .table-responsive > .table > thead > tr > td,
-  .table-responsive > .table > tbody > tr > td,
-  .table-responsive > .table > tfoot > tr > td {
-    white-space: nowrap;
-  }
-  .table-responsive > .table-bordered {
-    border: 0;
-  }
-  .table-responsive > .table-bordered > thead > tr > th:first-child,
-  .table-responsive > .table-bordered > tbody > tr > th:first-child,
-  .table-responsive > .table-bordered > tfoot > tr > th:first-child,
-  .table-responsive > .table-bordered > thead > tr > td:first-child,
-  .table-responsive > .table-bordered > tbody > tr > td:first-child,
-  .table-responsive > .table-bordered > tfoot > tr > td:first-child {
-    border-left: 0;
-  }
-  .table-responsive > .table-bordered > thead > tr > th:last-child,
-  .table-responsive > .table-bordered > tbody > tr > th:last-child,
-  .table-responsive > .table-bordered > tfoot > tr > th:last-child,
-  .table-responsive > .table-bordered > thead > tr > td:last-child,
-  .table-responsive > .table-bordered > tbody > tr > td:last-child,
-  .table-responsive > .table-bordered > tfoot > tr > td:last-child {
-    border-right: 0;
-  }
-  .table-responsive > .table-bordered > tbody > tr:last-child > th,
-  .table-responsive > .table-bordered > tfoot > tr:last-child > th,
-  .table-responsive > .table-bordered > tbody > tr:last-child > td,
-  .table-responsive > .table-bordered > tfoot > tr:last-child > td {
-    border-bottom: 0;
-  }
-}
-fieldset {
-  min-width: 0;
-  padding: 0;
-  margin: 0;
-  border: 0;
-}
-legend {
-  display: block;
-  width: 100%;
-  padding: 0;
-  margin-bottom: 20px;
-  font-size: 21px;
-  line-height: inherit;
-  color: #333;
-  border: 0;
-  border-bottom: 1px solid #e5e5e5;
-}
-label {
-  display: inline-block;
-  max-width: 100%;
-  margin-bottom: 5px;
-  font-weight: bold;
-}
-input[type="search"] {
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-input[type="radio"],
-input[type="checkbox"] {
-  margin: 4px 0 0;
-  margin-top: 1px \9;
-  line-height: normal;
-}
-input[type="file"] {
-  display: block;
-}
-input[type="range"] {
-  display: block;
-  width: 100%;
-}
-select[multiple],
-select[size] {
-  height: auto;
-}
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
-  outline: thin dotted;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-output {
-  display: block;
-  padding-top: 7px;
-  font-size: 14px;
-  line-height: 1.42857143;
-  color: #555;
-}
-.form-control {
-  display: block;
-  width: 100%;
-  height: 34px;
-  padding: 6px 12px;
-  font-size: 14px;
-  line-height: 1.42857143;
-  color: #555;
-  background-color: #fff;
-  background-image: none;
-  border: 1px solid #ccc;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
-       -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-}
-.form-control:focus {
-  border-color: #66afe9;
-  outline: 0;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
-          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
-}
-.form-control::-moz-placeholder {
-  color: #777;
-  opacity: 1;
-}
-.form-control:-ms-input-placeholder {
-  color: #777;
-}
-.form-control::-webkit-input-placeholder {
-  color: #777;
-}
-.form-control[disabled],
-.form-control[readonly],
-fieldset[disabled] .form-control {
-  cursor: not-allowed;
-  background-color: #eee;
-  opacity: 1;
-}
-textarea.form-control {
-  height: auto;
-}
-input[type="search"] {
-  -webkit-appearance: none;
-}
-input[type="date"],
-input[type="time"],
-input[type="datetime-local"],
-input[type="month"] {
-  line-height: 34px;
-  line-height: 1.42857143 \0;
-}
-input[type="date"].input-sm,
-input[type="time"].input-sm,
-input[type="datetime-local"].input-sm,
-input[type="month"].input-sm {
-  line-height: 30px;
-}
-input[type="date"].input-lg,
-input[type="time"].input-lg,
-input[type="datetime-local"].input-lg,
-input[type="month"].input-lg {
-  line-height: 46px;
-}
-.form-group {
-  margin-bottom: 15px;
-}
-.radio,
-.checkbox {
-  position: relative;
-  display: block;
-  min-height: 20px;
-  margin-top: 10px;
-  margin-bottom: 10px;
-}
-.radio label,
-.checkbox label {
-  padding-left: 20px;
-  margin-bottom: 0;
-  font-weight: normal;
-  cursor: pointer;
-}
-.radio input[type="radio"],
-.radio-inline input[type="radio"],
-.checkbox input[type="checkbox"],
-.checkbox-inline input[type="checkbox"] {
-  position: absolute;
-  margin-top: 4px \9;
-  margin-left: -20px;
-}
-.radio + .radio,
-.checkbox + .checkbox {
-  margin-top: -5px;
-}
-.radio-inline,
-.checkbox-inline {
-  display: inline-block;
-  padding-left: 20px;
-  margin-bottom: 0;
-  font-weight: normal;
-  vertical-align: middle;
-  cursor: pointer;
-}
-.radio-inline + .radio-inline,
-.checkbox-inline + .checkbox-inline {
-  margin-top: 0;
-  margin-left: 10px;
-}
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-input[type="radio"].disabled,
-input[type="checkbox"].disabled,
-fieldset[disabled] input[type="radio"],
-fieldset[disabled] input[type="checkbox"] {
-  cursor: not-allowed;
-}
-.radio-inline.disabled,
-.checkbox-inline.disabled,
-fieldset[disabled] .radio-inline,
-fieldset[disabled] .checkbox-inline {
-  cursor: not-allowed;
-}
-.radio.disabled label,
-.checkbox.disabled label,
-fieldset[disabled] .radio label,
-fieldset[disabled] .checkbox label {
-  cursor: not-allowed;
-}
-.form-control-static {
-  padding-top: 7px;
-  padding-bottom: 7px;
-  margin-bottom: 0;
-}
-.form-control-static.input-lg,
-.form-control-static.input-sm {
-  padding-right: 0;
-  padding-left: 0;
-}
-.input-sm,
-.form-horizontal .form-group-sm .form-control {
-  height: 30px;
-  padding: 5px 10px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px;
-}
-select.input-sm {
-  height: 30px;
-  line-height: 30px;
-}
-textarea.input-sm,
-select[multiple].input-sm {
-  height: auto;
-}
-.input-lg,
-.form-horizontal .form-group-lg .form-control {
-  height: 46px;
-  padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.33;
-  border-radius: 6px;
-}
-select.input-lg {
-  height: 46px;
-  line-height: 46px;
-}
-textarea.input-lg,
-select[multiple].input-lg {
-  height: auto;
-}
-.has-feedback {
-  position: relative;
-}
-.has-feedback .form-control {
-  padding-right: 42.5px;
-}
-.form-control-feedback {
-  position: absolute;
-  top: 25px;
-  right: 0;
-  z-index: 2;
-  display: block;
-  width: 34px;
-  height: 34px;
-  line-height: 34px;
-  text-align: center;
-}
-.input-lg + .form-control-feedback {
-  width: 46px;
-  height: 46px;
-  line-height: 46px;
-}
-.input-sm + .form-control-feedback {
-  width: 30px;
-  height: 30px;
-  line-height: 30px;
-}
-.has-success .help-block,
-.has-success .control-label,
-.has-success .radio,
-.has-success .checkbox,
-.has-success .radio-inline,
-.has-success .checkbox-inline {
-  color: #3c763d;
-}
-.has-success .form-control {
-  border-color: #3c763d;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-success .form-control:focus {
-  border-color: #2b542c;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
-}
-.has-success .input-group-addon {
-  color: #3c763d;
-  background-color: #dff0d8;
-  border-color: #3c763d;
-}
-.has-success .form-control-feedback {
-  color: #3c763d;
-}
-.has-warning .help-block,
-.has-warning .control-label,
-.has-warning .radio,
-.has-warning .checkbox,
-.has-warning .radio-inline,
-.has-warning .checkbox-inline {
-  color: #8a6d3b;
-}
-.has-warning .form-control {
-  border-color: #8a6d3b;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-warning .form-control:focus {
-  border-color: #66512c;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
-}
-.has-warning .input-group-addon {
-  color: #8a6d3b;
-  background-color: #fcf8e3;
-  border-color: #8a6d3b;
-}
-.has-warning .form-control-feedback {
-  color: #8a6d3b;
-}
-.has-error .help-block,
-.has-error .control-label,
-.has-error .radio,
-.has-error .checkbox,
-.has-error .radio-inline,
-.has-error .checkbox-inline {
-  color: #a94442;
-}
-.has-error .form-control {
-  border-color: #a94442;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-error .form-control:focus {
-  border-color: #843534;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
-}
-.has-error .input-group-addon {
-  color: #a94442;
-  background-color: #f2dede;
-  border-color: #a94442;
-}
-.has-error .form-control-feedback {
-  color: #a94442;
-}
-.has-feedback label.sr-only ~ .form-control-feedback {
-  top: 0;
-}
-.help-block {
-  display: block;
-  margin-top: 5px;
-  margin-bottom: 10px;
-  color: #737373;
-}
-@media (min-width: 768px) {
-  .form-inline .form-group {
-    display: inline-block;
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .form-inline .form-control {
-    display: inline-block;
-    width: auto;
-    vertical-align: middle;
-  }
-  .form-inline .input-group {
-    display: inline-table;
-    vertical-align: middle;
-  }
-  .form-inline .input-group .input-group-addon,
-  .form-inline .input-group .input-group-btn,
-  .form-inline .input-group .form-control {
-    width: auto;
-  }
-  .form-inline .input-group > .form-control {
-    width: 100%;
-  }
-  .form-inline .control-label {
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .form-inline .radio,
-  .form-inline .checkbox {
-    display: inline-block;
-    margin-top: 0;
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .form-inline .radio label,
-  .form-inline .checkbox label {
-    padding-left: 0;
-  }
-  .form-inline .radio input[type="radio"],
-  .form-inline .checkbox input[type="checkbox"] {
-    position: relative;
-    margin-left: 0;
-  }
-  .form-inline .has-feedback .form-control-feedback {
-    top: 0;
-  }
-}
-.form-horizontal .radio,
-.form-horizontal .checkbox,
-.form-horizontal .radio-inline,
-.form-horizontal .checkbox-inline {
-  padding-top: 7px;
-  margin-top: 0;
-  margin-bottom: 0;
-}
-.form-horizontal .radio,
-.form-horizontal .checkbox {
-  min-height: 27px;
-}
-.form-horizontal .form-group {
-  margin-right: -15px;
-  margin-left: -15px;
-}
-@media (min-width: 768px) {
-  .form-horizontal .control-label {
-    padding-top: 7px;
-    margin-bottom: 0;
-    text-align: right;
-  }
-}
-.form-horizontal .has-feedback .form-control-feedback {
-  top: 0;
-  right: 15px;
-}
-@media (min-width: 768px) {
-  .form-horizontal .form-group-lg .control-label {
-    padding-top: 14.3px;
-  }
-}
-@media (min-width: 768px) {
-  .form-horizontal .form-group-sm .control-label {
-    padding-top: 6px;
-  }
-}
-.btn {
-  display: inline-block;
-  padding: 6px 12px;
-  margin-bottom: 0;
-  font-size: 14px;
-  font-weight: normal;
-  line-height: 1.42857143;
-  text-align: center;
-  white-space: nowrap;
-  vertical-align: middle;
-  cursor: pointer;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  background-image: none;
-  border: 1px solid transparent;
-  border-radius: 4px;
-}
-.btn:focus,
-.btn:active:focus,
-.btn.active:focus {
-  outline: thin dotted;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-.btn:hover,
-.btn:focus {
-  color: #333;
-  text-decoration: none;
-}
-.btn:active,
-.btn.active {
-  background-image: none;
-  outline: 0;
-  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn.disabled,
-.btn[disabled],
-fieldset[disabled] .btn {
-  pointer-events: none;
-  cursor: not-allowed;
-  filter: alpha(opacity=65);
-  -webkit-box-shadow: none;
-          box-shadow: none;
-  opacity: .65;
-}
-.btn-default {
-  color: #333;
-  background-color: #fff;
-  border-color: #ccc;
-}
-.btn-default:hover,
-.btn-default:focus,
-.btn-default:active,
-.btn-default.active,
-.open > .dropdown-toggle.btn-default {
-  color: #333;
-  background-color: #e6e6e6;
-  border-color: #adadad;
-}
-.btn-default:active,
-.btn-default.active,
-.open > .dropdown-toggle.btn-default {
-  background-image: none;
-}
-.btn-default.disabled,
-.btn-default[disabled],
-fieldset[disabled] .btn-default,
-.btn-default.disabled:hover,
-.btn-default[disabled]:hover,
-fieldset[disabled] .btn-default:hover,
-.btn-default.disabled:focus,
-.btn-default[disabled]:focus,
-fieldset[disabled] .btn-default:focus,
-.btn-default.disabled:active,
-.btn-default[disabled]:active,
-fieldset[disabled] .btn-default:active,
-.btn-default.disabled.active,
-.btn-default[disabled].active,
-fieldset[disabled] .btn-default.active {
-  background-color: #fff;
-  border-color: #ccc;
-}
-.btn-default .badge {
-  color: #fff;
-  background-color: #333;
-}
-.btn-primary {
-  color: #fff;
-  background-color: #428bca;
-  border-color: #357ebd;
-}
-.btn-primary:hover,
-.btn-primary:focus,
-.btn-primary:active,
-.btn-primary.active,
-.open > .dropdown-toggle.btn-primary {
-  color: #fff;
-  background-color: #3071a9;
-  border-color: #285e8e;
-}
-.btn-primary:active,
-.btn-primary.active,
-.open > .dropdown-toggle.btn-primary {
-  background-image: none;
-}
-.btn-primary.disabled,
-.btn-primary[disabled],
-fieldset[disabled] .btn-primary,
-.btn-primary.disabled:hover,
-.btn-primary[disabled]:hover,
-fieldset[disabled] .btn-primary:hover,
-.btn-primary.disabled:focus,
-.btn-primary[disabled]:focus,
-fieldset[disabled] .btn-primary:focus,
-.btn-primary.disabled:active,
-.btn-primary[disabled]:active,
-fieldset[disabled] .btn-primary:active,
-.btn-primary.disabled.active,
-.btn-primary[disabled].active,
-fieldset[disabled] .btn-primary.active {
-  background-color: #428bca;
-  border-color: #357ebd;
-}
-.btn-primary .badge {
-  color: #428bca;
-  background-color: #fff;
-}
-.btn-success {
-  color: #fff;
-  background-color: #5cb85c;
-  border-color: #4cae4c;
-}
-.btn-success:hover,
-.btn-success:focus,
-.btn-success:active,
-.btn-success.active,
-.open > .dropdown-toggle.btn-success {
-  color: #fff;
-  background-color: #449d44;
-  border-color: #398439;
-}
-.btn-success:active,
-.btn-success.active,
-.open > .dropdown-toggle.btn-success {
-  background-image: none;
-}
-.btn-success.disabled,
-.btn-success[disabled],
-fieldset[disabled] .btn-success,
-.btn-success.disabled:hover,
-.btn-success[disabled]:hover,
-fieldset[disabled] .btn-success:hover,
-.btn-success.disabled:focus,
-.btn-success[disabled]:focus,
-fieldset[disabled] .btn-success:focus,
-.btn-success.disabled:active,
-.btn-success[disabled]:active,
-fieldset[disabled] .btn-success:active,
-.btn-success.disabled.active,
-.btn-success[disabled].active,
-fieldset[disabled] .btn-success.active {
-  background-color: #5cb85c;
-  border-color: #4cae4c;
-}
-.btn-success .badge {
-  color: #5cb85c;
-  background-color: #fff;
-}
-.btn-info {
-  color: #fff;
-  background-color: #5bc0de;
-  border-color: #46b8da;
-}
-.btn-info:hover,
-.btn-info:focus,
-.btn-info:active,
-.btn-info.active,
-.open > .dropdown-toggle.btn-info {
-  color: #fff;
-  background-color: #31b0d5;
-  border-color: #269abc;
-}
-.btn-info:active,
-.btn-info.active,
-.open > .dropdown-toggle.btn-info {
-  background-image: none;
-}
-.btn-info.disabled,
-.btn-info[disabled],
-fieldset[disabled] .btn-info,
-.btn-info.disabled:hover,
-.btn-info[disabled]:hover,
-fieldset[disabled] .btn-info:hover,
-.btn-info.disabled:focus,
-.btn-info[disabled]:focus,
-fieldset[disabled] .btn-info:focus,
-.btn-info.disabled:active,
-.btn-info[disabled]:active,
-fieldset[disabled] .btn-info:active,
-.btn-info.disabled.active,
-.btn-info[disabled].active,
-fieldset[disabled] .btn-info.active {
-  background-color: #5bc0de;
-  border-color: #46b8da;
-}
-.btn-info .badge {
-  color: #5bc0de;
-  background-color: #fff;
-}
-.btn-warning {
-  color: #fff;
-  background-color: #f0ad4e;
-  border-color: #eea236;
-}
-.btn-warning:hover,
-.btn-warning:focus,
-.btn-warning:active,
-.btn-warning.active,
-.open > .dropdown-toggle.btn-warning {
-  color: #fff;
-  background-color: #ec971f;
-  border-color: #d58512;
-}
-.btn-warning:active,
-.btn-warning.active,
-.open > .dropdown-toggle.btn-warning {
-  background-image: none;
-}
-.btn-warning.disabled,
-.btn-warning[disabled],
-fieldset[disabled] .btn-warning,
-.btn-warning.disabled:hover,
-.btn-warning[disabled]:hover,
-fieldset[disabled] .btn-warning:hover,
-.btn-warning.disabled:focus,
-.btn-warning[disabled]:focus,
-fieldset[disabled] .btn-warning:focus,
-.btn-warning.disabled:active,
-.btn-warning[disabled]:active,
-fieldset[disabled] .btn-warning:active,
-.btn-warning.disabled.active,
-.btn-warning[disabled].active,
-fieldset[disabled] .btn-warning.active {
-  background-color: #f0ad4e;
-  border-color: #eea236;
-}
-.btn-warning .badge {
-  color: #f0ad4e;
-  background-color: #fff;
-}
-.btn-danger {
-  color: #fff;
-  background-color: #d9534f;
-  border-color: #d43f3a;
-}
-.btn-danger:hover,
-.btn-danger:focus,
-.btn-danger:active,
-.btn-danger.active,
-.open > .dropdown-toggle.btn-danger {
-  color: #fff;
-  background-color: #c9302c;
-  border-color: #ac2925;
-}
-.btn-danger:active,
-.btn-danger.active,
-.open > .dropdown-toggle.btn-danger {
-  background-image: none;
-}
-.btn-danger.disabled,
-.btn-danger[disabled],
-fieldset[disabled] .btn-danger,
-.btn-danger.disabled:hover,
-.btn-danger[disabled]:hover,
-fieldset[disabled] .btn-danger:hover,
-.btn-danger.disabled:focus,
-.btn-danger[disabled]:focus,
-fieldset[disabled] .btn-danger:focus,
-.btn-danger.disabled:active,
-.btn-danger[disabled]:active,
-fieldset[disabled] .btn-danger:active,
-.btn-danger.disabled.active,
-.btn-danger[disabled].active,
-fieldset[disabled] .btn-danger.active {
-  background-color: #d9534f;
-  border-color: #d43f3a;
-}
-.btn-danger .badge {
-  color: #d9534f;
-  background-color: #fff;
-}
-.btn-link {
-  font-weight: normal;
-  color: #428bca;
-  cursor: pointer;
-  border-radius: 0;
-}
-.btn-link,
-.btn-link:active,
-.btn-link[disabled],
-fieldset[disabled] .btn-link {
-  background-color: transparent;
-  -webkit-box-shadow: none;
-          box-shadow: none;
-}
-.btn-link,
-.btn-link:hover,
-.btn-link:focus,
-.btn-link:active {
-  border-color: transparent;
-}
-.btn-link:hover,
-.btn-link:focus {
-  color: #2a6496;
-  text-decoration: underline;
-  background-color: transparent;
-}
-.btn-link[disabled]:hover,
-fieldset[disabled] .btn-link:hover,
-.btn-link[disabled]:focus,
-fieldset[disabled] .btn-link:focus {
-  color: #777;
-  text-decoration: none;
-}
-.btn-lg,
-.btn-group-lg > .btn {
-  padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.33;
-  border-radius: 6px;
-}
-.btn-sm,
-.btn-group-sm > .btn {
-  padding: 5px 10px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px;
-}
-.btn-xs,
-.btn-group-xs > .btn {
-  padding: 1px 5px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px;
-}
-.btn-block {
-  display: block;
-  width: 100%;
-}
-.btn-block + .btn-block {
-  margin-top: 5px;
-}
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
-  width: 100%;
-}
-.fade {
-  opacity: 0;
-  -webkit-transition: opacity .15s linear;
-       -o-transition: opacity .15s linear;
-          transition: opacity .15s linear;
-}
-.fade.in {
-  opacity: 1;
-}
-.collapse {
-  display: none;
-}
-.collapse.in {
-  display: block;
-}
-tr.collapse.in {
-  display: table-row;
-}
-tbody.collapse.in {
-  display: table-row-group;
-}
-.collapsing {
-  position: relative;
-  height: 0;
-  overflow: hidden;
-  -webkit-transition: height .35s ease;
-       -o-transition: height .35s ease;
-          transition: height .35s ease;
-}
-.caret {
-  display: inline-block;
-  width: 0;
-  height: 0;
-  margin-left: 2px;
-  vertical-align: middle;
-  border-top: 4px solid;
-  border-right: 4px solid transparent;
-  border-left: 4px solid transparent;
-}
-.dropdown {
-  position: relative;
-}
-.dropdown-toggle:focus {
-  outline: 0;
-}
-.dropdown-menu {
-  position: absolute;
-  top: 100%;
-  left: 0;
-  z-index: 1000;
-  display: none;
-  float: left;
-  min-width: 160px;
-  padding: 5px 0;
-  margin: 2px 0 0;
-  font-size: 14px;
-  text-align: left;
-  list-style: none;
-  background-color: #fff;
-  -webkit-background-clip: padding-box;
-          background-clip: padding-box;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, .15);
-  border-radius: 4px;
-  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
-          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
-}
-.dropdown-menu.pull-right {
-  right: 0;
-  left: auto;
-}
-.dropdown-menu .divider {
-  height: 1px;
-  margin: 9px 0;
-  overflow: hidden;
-  background-color: #e5e5e5;
-}
-.dropdown-menu > li > a {
-  display: block;
-  padding: 3px 20px;
-  clear: both;
-  font-weight: normal;
-  line-height: 1.42857143;
-  color: #333;
-  white-space: nowrap;
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
-  color: #262626;
-  text-decoration: none;
-  background-color: #f5f5f5;
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
-  color: #fff;
-  text-decoration: none;
-  background-color: #428bca;
-  outline: 0;
-}
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-  color: #777;
-}
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-  text-decoration: none;
-  cursor: not-allowed;
-  background-color: transparent;
-  background-image: none;
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.open > .dropdown-menu {
-  display: block;
-}
-.open > a {
-  outline: 0;
-}
-.dropdown-menu-right {
-  right: 0;
-  left: auto;
-}
-.dropdown-menu-left {
-  right: auto;
-  left: 0;
-}
-.dropdown-header {
-  display: block;
-  padding: 3px 20px;
-  font-size: 12px;
-  line-height: 1.42857143;
-  color: #777;
-  white-space: nowrap;
-}
-.dropdown-backdrop {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 990;
-}
-.pull-right > .dropdown-menu {
-  right: 0;
-  left: auto;
-}
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
-  content: "";
-  border-top: 0;
-  border-bottom: 4px solid;
-}
-.dropup .dropdown-menu,
-.navbar-fixed-bottom .dropdown .dropdown-menu {
-  top: auto;
-  bottom: 100%;
-  margin-bottom: 1px;
-}
-@media (min-width: 768px) {
-  .navbar-right .dropdown-menu {
-    right: 0;
-    left: auto;
-  }
-  .navbar-right .dropdown-menu-left {
-    right: auto;
-    left: 0;
-  }
-}
-.btn-group,
-.btn-group-vertical {
-  position: relative;
-  display: inline-block;
-  vertical-align: middle;
-}
-.btn-group > .btn,
-.btn-group-vertical > .btn {
-  position: relative;
-  float: left;
-}
-.btn-group > .btn:hover,
-.btn-group-vertical > .btn:hover,
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus,
-.btn-group > .btn:active,
-.btn-group-vertical > .btn:active,
-.btn-group > .btn.active,
-.btn-group-vertical > .btn.active {
-  z-index: 2;
-}
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus {
-  outline: 0;
-}
-.btn-group .btn + .btn,
-.btn-group .btn + .btn-group,
-.btn-group .btn-group + .btn,
-.btn-group .btn-group + .btn-group {
-  margin-left: -1px;
-}
-.btn-toolbar {
-  margin-left: -5px;
-}
-.btn-toolbar .btn-group,
-.btn-toolbar .input-group {
-  float: left;
-}
-.btn-toolbar > .btn,
-.btn-toolbar > .btn-group,
-.btn-toolbar > .input-group {
-  margin-left: 5px;
-}
-.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
-  border-radius: 0;
-}
-.btn-group > .btn:first-child {
-  margin-left: 0;
-}
-.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
-  border-top-right-radius: 0;
-  border-bottom-right-radius: 0;
-}
-.btn-group > .btn:last-child:not(:first-child),
-.btn-group > .dropdown-toggle:not(:first-child) {
-  border-top-left-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.btn-group > .btn-group {
-  float: left;
-}
-.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
-  border-radius: 0;
-}
-.btn-group > .btn-group:first-child > .btn:last-child,
-.btn-group > .btn-group:first-child > .dropdown-toggle {
-  border-top-right-radius: 0;
-  border-bottom-right-radius: 0;
-}
-.btn-group > .btn-group:last-child > .btn:first-child {
-  border-top-left-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
-  outline: 0;
-}
-.btn-group > .btn + .dropdown-toggle {
-  padding-right: 8px;
-  padding-left: 8px;
-}
-.btn-group > .btn-lg + .dropdown-toggle {
-  padding-right: 12px;
-  padding-left: 12px;
-}
-.btn-group.open .dropdown-toggle {
-  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn-group.open .dropdown-toggle.btn-link {
-  -webkit-box-shadow: none;
-          box-shadow: none;
-}
-.btn .caret {
-  margin-left: 0;
-}
-.btn-lg .caret {
-  border-width: 5px 5px 0;
-  border-bottom-width: 0;
-}
-.dropup .btn-lg .caret {
-  border-width: 0 5px 5px;
-}
-.btn-group-vertical > .btn,
-.btn-group-vertical > .btn-group,
-.btn-group-vertical > .btn-group > .btn {
-  display: block;
-  float: none;
-  width: 100%;
-  max-width: 100%;
-}
-.btn-group-vertical > .btn-group > .btn {
-  float: none;
-}
-.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:not(:first-child):not(:last-child) {
-  border-radius: 0;
-}
-.btn-group-vertical > .btn:first-child:not(:last-child) {
-  border-top-right-radius: 4px;
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn:last-child:not(:first-child) {
-  border-top-left-radius: 0;
-  border-top-right-radius: 0;
-  border-bottom-left-radius: 4px;
-}
-.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
-  border-radius: 0;
-}
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
-  border-top-left-radius: 0;
-  border-top-right-radius: 0;
-}
-.btn-group-justified {
-  display: table;
-  width: 100%;
-  table-layout: fixed;
-  border-collapse: separate;
-}
-.btn-group-justified > .btn,
-.btn-group-justified > .btn-group {
-  display: table-cell;
-  float: none;
-  width: 1%;
-}
-.btn-group-justified > .btn-group .btn {
-  width: 100%;
-}
-.btn-group-justified > .btn-group .dropdown-menu {
-  left: auto;
-}
-[data-toggle="buttons"] > .btn > input[type="radio"],
-[data-toggle="buttons"] > .btn > input[type="checkbox"] {
-  position: absolute;
-  z-index: -1;
-  filter: alpha(opacity=0);
-  opacity: 0;
-}
-.input-group {
-  position: relative;
-  display: table;
-  border-collapse: separate;
-}
-.input-group[class*="col-"] {
-  float: none;
-  padding-right: 0;
-  padding-left: 0;
-}
-.input-group .form-control {
-  position: relative;
-  z-index: 2;
-  float: left;
-  width: 100%;
-  margin-bottom: 0;
-}
-.input-group-lg > .form-control,
-.input-group-lg > .input-group-addon,
-.input-group-lg > .input-group-btn > .btn {
-  height: 46px;
-  padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.33;
-  border-radius: 6px;
-}
-select.input-group-lg > .form-control,
-select.input-group-lg > .input-group-addon,
-select.input-group-lg > .input-group-btn > .btn {
-  height: 46px;
-  line-height: 46px;
-}
-textarea.input-group-lg > .form-control,
-textarea.input-group-lg > .input-group-addon,
-textarea.input-group-lg > .input-group-btn > .btn,
-select[multiple].input-group-lg > .form-control,
-select[multiple].input-group-lg > .input-group-addon,
-select[multiple].input-group-lg > .input-group-btn > .btn {
-  height: auto;
-}
-.input-group-sm > .form-control,
-.input-group-sm > .input-group-addon,
-.input-group-sm > .input-group-btn > .btn {
-  height: 30px;
-  padding: 5px 10px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px;
-}
-select.input-group-sm > .form-control,
-select.input-group-sm > .input-group-addon,
-select.input-group-sm > .input-group-btn > .btn {
-  height: 30px;
-  line-height: 30px;
-}
-textarea.input-group-sm > .form-control,
-textarea.input-group-sm > .input-group-addon,
-textarea.input-group-sm > .input-group-btn > .btn,
-select[multiple].input-group-sm > .form-control,
-select[multiple].input-group-sm > .input-group-addon,
-select[multiple].input-group-sm > .input-group-btn > .btn {
-  height: auto;
-}
-.input-group-addon,
-.input-group-btn,
-.input-group .form-control {
-  display: table-cell;
-}
-.input-group-addon:not(:first-child):not(:last-child),
-.input-group-btn:not(:first-child):not(:last-child),
-.input-group .form-control:not(:first-child):not(:last-child) {
-  border-radius: 0;
-}
-.input-group-addon,
-.input-group-btn {
-  width: 1%;
-  white-space: nowrap;
-  vertical-align: middle;
-}
-.input-group-addon {
-  padding: 6px 12px;
-  font-size: 14px;
-  font-weight: normal;
-  line-height: 1;
-  color: #555;
-  text-align: center;
-  background-color: #eee;
-  border: 1px solid #ccc;
-  border-radius: 4px;
-}
-.input-group-addon.input-sm {
-  padding: 5px 10px;
-  font-size: 12px;
-  border-radius: 3px;
-}
-.input-group-addon.input-lg {
-  padding: 10px 16px;
-  font-size: 18px;
-  border-radius: 6px;
-}
-.input-group-addon input[type="radio"],
-.input-group-addon input[type="checkbox"] {
-  margin-top: 0;
-}
-.input-group .form-control:first-child,
-.input-group-addon:first-child,
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group > .btn,
-.input-group-btn:first-child > .dropdown-toggle,
-.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
-.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
-  border-top-right-radius: 0;
-  border-bottom-right-radius: 0;
-}
-.input-group-addon:first-child {
-  border-right: 0;
-}
-.input-group .form-control:last-child,
-.input-group-addon:last-child,
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .btn-group > .btn,
-.input-group-btn:last-child > .dropdown-toggle,
-.input-group-btn:first-child > .btn:not(:first-child),
-.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
-  border-top-left-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.input-group-addon:last-child {
-  border-left: 0;
-}
-.input-group-btn {
-  position: relative;
-  font-size: 0;
-  white-space: nowrap;
-}
-.input-group-btn > .btn {
-  position: relative;
-}
-.input-group-btn > .btn + .btn {
-  margin-left: -1px;
-}
-.input-group-btn > .btn:hover,
-.input-group-btn > .btn:focus,
-.input-group-btn > .btn:active {
-  z-index: 2;
-}
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group {
-  margin-right: -1px;
-}
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .btn-group {
-  margin-left: -1px;
-}
-.nav {
-  padding-left: 0;
-  margin-bottom: 0;
-  list-style: none;
-}
-.nav > li {
-  position: relative;
-  display: block;
-}
-.nav > li > a {
-  position: relative;
-  display: block;
-  padding: 10px 15px;
-}
-.nav > li > a:hover,
-.nav > li > a:focus {
-  text-decoration: none;
-  background-color: #eee;
-}
-.nav > li.disabled > a {
-  color: #777;
-}
-.nav > li.disabled > a:hover,
-.nav > li.disabled > a:focus {
-  color: #777;
-  text-decoration: none;
-  cursor: not-allowed;
-  background-color: transparent;
-}
-.nav .open > a,
-.nav .open > a:hover,
-.nav .open > a:focus {
-  background-color: #eee;
-  border-color: #428bca;
-}
-.nav .nav-divider {
-  height: 1px;
-  margin: 9px 0;
-  overflow: hidden;
-  background-color: #e5e5e5;
-}
-.nav > li > a > img {
-  max-width: none;
-}
-.nav-tabs {
-  border-bottom: 1px solid #ddd;
-}
-.nav-tabs > li {
-  float: left;
-  margin-bottom: -1px;
-}
-.nav-tabs > li > a {
-  margin-right: 2px;
-  line-height: 1.42857143;
-  border: 1px solid transparent;
-  border-radius: 4px 4px 0 0;
-}
-.nav-tabs > li > a:hover {
-  border-color: #eee #eee #ddd;
-}
-.nav-tabs > li.active > a,
-.nav-tabs > li.active > a:hover,
-.nav-tabs > li.active > a:focus {
-  color: #555;
-  cursor: default;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  border-bottom-color: transparent;
-}
-.nav-tabs.nav-justified {
-  width: 100%;
-  border-bottom: 0;
-}
-.nav-tabs.nav-justified > li {
-  float: none;
-}
-.nav-tabs.nav-justified > li > a {
-  margin-bottom: 5px;
-  text-align: center;
-}
-.nav-tabs.nav-justified > .dropdown .dropdown-menu {
-  top: auto;
-  left: auto;
-}
-@media (min-width: 768px) {
-  .nav-tabs.nav-justified > li {
-    display: table-cell;
-    width: 1%;
-  }
-  .nav-tabs.nav-justified > li > a {
-    margin-bottom: 0;
-  }
-}
-.nav-tabs.nav-justified > li > a {
-  margin-right: 0;
-  border-radius: 4px;
-}
-.nav-tabs.nav-justified > .active > a,
-.nav-tabs.nav-justified > .active > a:hover,
-.nav-tabs.nav-justified > .active > a:focus {
-  border: 1px solid #ddd;
-}
-@media (min-width: 768px) {
-  .nav-tabs.nav-justified > li > a {
-    border-bottom: 1px solid #ddd;
-    border-radius: 4px 4px 0 0;
-  }
-  .nav-tabs.nav-justified > .active > a,
-  .nav-tabs.nav-justified > .active > a:hover,
-  .nav-tabs.nav-justified > .active > a:focus {
-    border-bottom-color: #fff;
-  }
-}
-.nav-pills > li {
-  float: left;
-}
-.nav-pills > li > a {
-  border-radius: 4px;
-}
-.nav-pills > li + li {
-  margin-left: 2px;
-}
-.nav-pills > li.active > a,
-.nav-pills > li.active > a:hover,
-.nav-pills > li.active > a:focus {
-  color: #fff;
-  background-color: #428bca;
-}
-.nav-stacked > li {
-  float: none;
-}
-.nav-stacked > li + li {
-  margin-top: 2px;
-  margin-left: 0;
-}
-.nav-justified {
-  width: 100%;
-}
-.nav-justified > li {
-  float: none;
-}
-.nav-justified > li > a {
-  margin-bottom: 5px;
-  text-align: center;
-}
-.nav-justified > .dropdown .dropdown-menu {
-  top: auto;
-  left: auto;
-}
-@media (min-width: 768px) {
-  .nav-justified > li {
-    display: table-cell;
-    width: 1%;
-  }
-  .nav-justified > li > a {
-    margin-bottom: 0;
-  }
-}
-.nav-tabs-justified {
-  border-bottom: 0;
-}
-.nav-tabs-justified > li > a {
-  margin-right: 0;
-  border-radius: 4px;
-}
-.nav-tabs-justified > .active > a,
-.nav-tabs-justified > .active > a:hover,
-.nav-tabs-justified > .active > a:focus {
-  border: 1px solid #ddd;
-}
-@media (min-width: 768px) {
-  .nav-tabs-justified > li > a {
-    border-bottom: 1px solid #ddd;
-    border-radius: 4px 4px 0 0;
-  }
-  .nav-tabs-justified > .active > a,
-  .nav-tabs-justified > .active > a:hover,
-  .nav-tabs-justified > .active > a:focus {
-    border-bottom-color: #fff;
-  }
-}
-.tab-content > .tab-pane {
-  display: none;
-}
-.tab-content > .active {
-  display: block;
-}
-.nav-tabs .dropdown-menu {
-  margin-top: -1px;
-  border-top-left-radius: 0;
-  border-top-right-radius: 0;
-}
-.navbar {
-  position: relative;
-  min-height: 50px;
-  margin-bottom: 20px;
-  border: 1px solid transparent;
-}
-@media (min-width: 768px) {
-  .navbar {
-    border-radius: 4px;
-  }
-}
-@media (min-width: 768px) {
-  .navbar-header {
-    float: left;
-  }
-}
-.navbar-collapse {
-  padding-right: 15px;
-  padding-left: 15px;
-  overflow-x: visible;
-  -webkit-overflow-scrolling: touch;
-  border-top: 1px solid transparent;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
-}
-.navbar-collapse.in {
-  overflow-y: auto;
-}
-@media (min-width: 768px) {
-  .navbar-collapse {
-    width: auto;
-    border-top: 0;
-    -webkit-box-shadow: none;
-            box-shadow: none;
-  }
-  .navbar-collapse.collapse {
-    display: block !important;
-    height: auto !important;
-    padding-bottom: 0;
-    overflow: visible !important;
-  }
-  .navbar-collapse.in {
-    overflow-y: visible;
-  }
-  .navbar-fixed-top .navbar-collapse,
-  .navbar-static-top .navbar-collapse,
-  .navbar-fixed-bottom .navbar-collapse {
-    padding-right: 0;
-    padding-left: 0;
-  }
-}
-.navbar-fixed-top .navbar-collapse,
-.navbar-fixed-bottom .navbar-collapse {
-  max-height: 340px;
-}
-@media (max-width: 480px) and (orientation: landscape) {
-  .navbar-fixed-top .navbar-collapse,
-  .navbar-fixed-bottom .navbar-collapse {
-    max-height: 200px;
-  }
-}
-.container > .navbar-header,
-.container-fluid > .navbar-header,
-.container > .navbar-collapse,
-.container-fluid > .navbar-collapse {
-  margin-right: -15px;
-  margin-left: -15px;
-}
-@media (min-width: 768px) {
-  .container > .navbar-header,
-  .container-fluid > .navbar-header,
-  .container > .navbar-collapse,
-  .container-fluid > .navbar-collapse {
-    margin-right: 0;
-    margin-left: 0;
-  }
-}
-.navbar-static-top {
-  z-index: 1000;
-  border-width: 0 0 1px;
-}
-@media (min-width: 768px) {
-  .navbar-static-top {
-    border-radius: 0;
-  }
-}
-.navbar-fixed-top,
-.navbar-fixed-bottom {
-  position: fixed;
-  right: 0;
-  left: 0;
-  z-index: 1030;
-  -webkit-transform: translate3d(0, 0, 0);
-       -o-transform: translate3d(0, 0, 0);
-          transform: translate3d(0, 0, 0);
-}
-@media (min-width: 768px) {
-  .navbar-fixed-top,
-  .navbar-fixed-bottom {
-    border-radius: 0;
-  }
-}
-.navbar-fixed-top {
-  top: 0;
-  border-width: 0 0 1px;
-}
-.navbar-fixed-bottom {
-  bottom: 0;
-  margin-bottom: 0;
-  border-width: 1px 0 0;
-}
-.navbar-brand {
-  float: left;
-  height: 50px;
-  padding: 15px 15px;
-  font-size: 18px;
-  line-height: 20px;
-}
-.navbar-brand:hover,
-.navbar-brand:focus {
-  text-decoration: none;
-}
-@media (min-width: 768px) {
-  .navbar > .container .navbar-brand,
-  .navbar > .container-fluid .navbar-brand {
-    margin-left: -15px;
-  }
-}
-.navbar-toggle {
-  position: relative;
-  float: right;
-  padding: 9px 10px;
-  margin-top: 8px;
-  margin-right: 15px;
-  margin-bottom: 8px;
-  background-color: transparent;
-  background-image: none;
-  border: 1px solid transparent;
-  border-radius: 4px;
-}
-.navbar-toggle:focus {
-  outline: 0;
-}
-.navbar-toggle .icon-bar {
-  display: block;
-  width: 22px;
-  height: 2px;
-  border-radius: 1px;
-}
-.navbar-toggle .icon-bar + .icon-bar {
-  margin-top: 4px;
-}
-@media (min-width: 768px) {
-  .navbar-toggle {
-    display: none;
-  }
-}
-.navbar-nav {
-  margin: 7.5px -15px;
-}
-.navbar-nav > li > a {
-  padding-top: 10px;
-  padding-bottom: 10px;
-  line-height: 20px;
-}
-@media (max-width: 767px) {
-  .navbar-nav .open .dropdown-menu {
-    position: static;
-    float: none;
-    width: auto;
-    margin-top: 0;
-    background-color: transparent;
-    border: 0;
-    -webkit-box-shadow: none;
-            box-shadow: none;
-  }
-  .navbar-nav .open .dropdown-menu > li > a,
-  .navbar-nav .open .dropdown-menu .dropdown-header {
-    padding: 5px 15px 5px 25px;
-  }
-  .navbar-nav .open .dropdown-menu > li > a {
-    line-height: 20px;
-  }
-  .navbar-nav .open .dropdown-menu > li > a:hover,
-  .navbar-nav .open .dropdown-menu > li > a:focus {
-    background-image: none;
-  }
-}
-@media (min-width: 768px) {
-  .navbar-nav {
-    float: left;
-    margin: 0;
-  }
-  .navbar-nav > li {
-    float: left;
-  }
-  .navbar-nav > li > a {
-    padding-top: 15px;
-    padding-bottom: 15px;
-  }
-  .navbar-nav.navbar-right:last-child {
-    margin-right: -15px;
-  }
-}
-@media (min-width: 768px) {
-  .navbar-left {
-    float: left !important;
-  }
-  .navbar-right {
-    float: right !important;
-  }
-}
-.navbar-form {
-  padding: 10px 15px;
-  margin-top: 8px;
-  margin-right: -15px;
-  margin-bottom: 8px;
-  margin-left: -15px;
-  border-top: 1px solid transparent;
-  border-bottom: 1px solid transparent;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
-}
-@media (min-width: 768px) {
-  .navbar-form .form-group {
-    display: inline-block;
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .navbar-form .form-control {
-    display: inline-block;
-    width: auto;
-    vertical-align: middle;
-  }
-  .navbar-form .input-group {
-    display: inline-table;
-    vertical-align: middle;
-  }
-  .navbar-form .input-group .input-group-addon,
-  .navbar-form .input-group .input-group-btn,
-  .navbar-form .input-group .form-control {
-    width: auto;
-  }
-  .navbar-form .input-group > .form-control {
-    width: 100%;
-  }
-  .navbar-form .control-label {
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .navbar-form .radio,
-  .navbar-form .checkbox {
-    display: inline-block;
-    margin-top: 0;
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .navbar-form .radio label,
-  .navbar-form .checkbox label {
-    padding-left: 0;
-  }
-  .navbar-form .radio input[type="radio"],
-  .navbar-form .checkbox input[type="checkbox"] {
-    position: relative;
-    margin-left: 0;
-  }
-  .navbar-form .has-feedback .form-control-feedback {
-    top: 0;
-  }
-}
-@media (max-width: 767px) {
-  .navbar-form .form-group {
-    margin-bottom: 5px;
-  }
-}
-@media (min-width: 768px) {
-  .navbar-form {
-    width: auto;
-    padding-top: 0;
-    padding-bottom: 0;
-    margin-right: 0;
-    margin-left: 0;
-    border: 0;
-    -webkit-box-shadow: none;
-            box-shadow: none;
-  }
-  .navbar-form.navbar-right:last-child {
-    margin-right: -15px;
-  }
-}
-.navbar-nav > li > .dropdown-menu {
-  margin-top: 0;
-  border-top-left-radius: 0;
-  border-top-right-radius: 0;
-}
-.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.navbar-btn {
-  margin-top: 8px;
-  margin-bottom: 8px;
-}
-.navbar-btn.btn-sm {
-  margin-top: 10px;
-  margin-bottom: 10px;
-}
-.navbar-btn.btn-xs {
-  margin-top: 14px;
-  margin-bottom: 14px;
-}
-.navbar-text {
-  margin-top: 15px;
-  margin-bottom: 15px;
-}
-@media (min-width: 768px) {
-  .navbar-text {
-    float: left;
-    margin-right: 15px;
-    margin-left: 15px;
-  }
-  .navbar-text.navbar-right:last-child {
-    margin-right: 0;
-  }
-}
-.navbar-default {
-  background-color: #f8f8f8;
-  border-color: #e7e7e7;
-}
-.navbar-default .navbar-brand {
-  color: #777;
-}
-.navbar-default .navbar-brand:hover,
-.navbar-default .navbar-brand:focus {
-  color: #5e5e5e;
-  background-color: transparent;
-}
-.navbar-default .navbar-text {
-  color: #777;
-}
-.navbar-default .navbar-nav > li > a {
-  color: #777;
-}
-.navbar-default .navbar-nav > li > a:hover,
-.navbar-default .navbar-nav > li > a:focus {
-  color: #333;
-  background-color: transparent;
-}
-.navbar-default .navbar-nav > .active > a,
-.navbar-default .navbar-nav > .active > a:hover,
-.navbar-default .navbar-nav > .active > a:focus {
-  color: #555;
-  background-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .disabled > a,
-.navbar-default .navbar-nav > .disabled > a:hover,
-.navbar-default .navbar-nav > .disabled > a:focus {
-  color: #ccc;
-  background-color: transparent;
-}
-.navbar-default .navbar-toggle {
-  border-color: #ddd;
-}
-.navbar-default .navbar-toggle:hover,
-.navbar-default .navbar-toggle:focus {
-  background-color: #ddd;
-}
-.navbar-default .navbar-toggle .icon-bar {
-  background-color: #888;
-}
-.navbar-default .navbar-collapse,
-.navbar-default .navbar-form {
-  border-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .open > a,
-.navbar-default .navbar-nav > .open > a:hover,
-.navbar-default .navbar-nav > .open > a:focus {
-  color: #555;
-  background-color: #e7e7e7;
-}
-@media (max-width: 767px) {
-  .navbar-default .navbar-nav .open .dropdown-menu > li > a {
-    color: #777;
-  }
-  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
-  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
-    color: #333;
-    background-color: transparent;
-  }
-  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
-  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
-  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
-    color: #555;
-    background-color: #e7e7e7;
-  }
-  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
-  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
-  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
-    color: #ccc;
-    background-color: transparent;
-  }
-}
-.navbar-default .navbar-link {
-  color: #777;
-}
-.navbar-default .navbar-link:hover {
-  color: #333;
-}
-.navbar-default .btn-link {
-  color: #777;
-}
-.navbar-default .btn-link:hover,
-.navbar-default .btn-link:focus {
-  color: #333;
-}
-.navbar-default .btn-link[disabled]:hover,
-fieldset[disabled] .navbar-default .btn-link:hover,
-.navbar-default .btn-link[disabled]:focus,
-fieldset[disabled] .navbar-default .btn-link:focus {
-  color: #ccc;
-}
-.navbar-inverse {
-  background-color: #222;
-  border-color: #080808;
-}
-.navbar-inverse .navbar-brand {
-  color: #777;
-}
-.navbar-inverse .navbar-brand:hover,
-.navbar-inverse .navbar-brand:focus {
-  color: #fff;
-  background-color: transparent;
-}
-.navbar-inverse .navbar-text {
-  color: #777;
-}
-.navbar-inverse .navbar-nav > li > a {
-  color: #777;
-}
-.navbar-inverse .navbar-nav > li > a:hover,
-.navbar-inverse .navbar-nav > li > a:focus {
-  color: #fff;
-  background-color: transparent;
-}
-.navbar-inverse .navbar-nav > .active > a,
-.navbar-inverse .navbar-nav > .active > a:hover,
-.navbar-inverse .navbar-nav > .active > a:focus {
-  color: #fff;
-  background-color: #080808;
-}
-.navbar-inverse .navbar-nav > .disabled > a,
-.navbar-inverse .navbar-nav > .disabled > a:hover,
-.navbar-inverse .navbar-nav > .disabled > a:focus {
-  color: #444;
-  background-color: transparent;
-}
-.navbar-inverse .navbar-toggle {
-  border-color: #333;
-}
-.navbar-inverse .navbar-toggle:hover,
-.navbar-inverse .navbar-toggle:focus {
-  background-color: #333;
-}
-.navbar-inverse .navbar-toggle .icon-bar {
-  background-color: #fff;
-}
-.navbar-inverse .navbar-collapse,
-.navbar-inverse .navbar-form {
-  border-color: #101010;
-}
-.navbar-inverse .navbar-nav > .open > a,
-.navbar-inverse .navbar-nav > .open > a:hover,
-.navbar-inverse .navbar-nav > .open > a:focus {
-  color: #fff;
-  background-color: #080808;
-}
-@media (max-width: 767px) {
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
-    border-color: #080808;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
-    background-color: #080808;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
-    color: #777;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
-    color: #fff;
-    background-color: transparent;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
-    color: #fff;
-    background-color: #080808;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
-    color: #444;
-    background-color: transparent;
-  }
-}
-.navbar-inverse .navbar-link {
-  color: #777;
-}
-.navbar-inverse .navbar-link:hover {
-  color: #fff;
-}
-.navbar-inverse .btn-link {
-  color: #777;
-}
-.navbar-inverse .btn-link:hover,
-.navbar-inverse .btn-link:focus {
-  color: #fff;
-}
-.navbar-inverse .btn-link[disabled]:hover,
-fieldset[disabled] .navbar-inverse .btn-link:hover,
-.navbar-inverse .btn-link[disabled]:focus,
-fieldset[disabled] .navbar-inverse .btn-link:focus {
-  color: #444;
-}
-.breadcrumb {
-  padding: 8px 15px;
-  margin-bottom: 20px;
-  list-style: none;
-  background-color: #f5f5f5;
-  border-radius: 4px;
-}
-.breadcrumb > li {
-  display: inline-block;
-}
-.breadcrumb > li + li:before {
-  padding: 0 5px;
-  color: #ccc;
-  content: "/\00a0";
-}
-.breadcrumb > .active {
-  color: #777;
-}
-.pagination {
-  display: inline-block;
-  padding-left: 0;
-  margin: 20px 0;
-  border-radius: 4px;
-}
-.pagination > li {
-  display: inline;
-}
-.pagination > li > a,
-.pagination > li > span {
-  position: relative;
-  float: left;
-  padding: 6px 12px;
-  margin-left: -1px;
-  line-height: 1.42857143;
-  color: #428bca;
-  text-decoration: none;
-  background-color: #fff;
-  border: 1px solid #ddd;
-}
-.pagination > li:first-child > a,
-.pagination > li:first-child > span {
-  margin-left: 0;
-  border-top-left-radius: 4px;
-  border-bottom-left-radius: 4px;
-}
-.pagination > li:last-child > a,
-.pagination > li:last-child > span {
-  border-top-right-radius: 4px;
-  border-bottom-right-radius: 4px;
-}
-.pagination > li > a:hover,
-.pagination > li > span:hover,
-.pagination > li > a:focus,
-.pagination > li > span:focus {
-  color: #2a6496;
-  background-color: #eee;
-  border-color: #ddd;
-}
-.pagination > .active > a,
-.pagination > .active > span,
-.pagination > .active > a:hover,
-.pagination > .active > span:hover,
-.pagination > .active > a:focus,
-.pagination > .active > span:focus {
-  z-index: 2;
-  color: #fff;
-  cursor: default;
-  background-color: #428bca;
-  border-color: #428bca;
-}
-.pagination > .disabled > span,
-.pagination > .disabled > span:hover,
-.pagination > .disabled > span:focus,
-.pagination > .disabled > a,
-.pagination > .disabled > a:hover,
-.pagination > .disabled > a:focus {
-  color: #777;
-  cursor: not-allowed;
-  background-color: #fff;
-  border-color: #ddd;
-}
-.pagination-lg > li > a,
-.pagination-lg > li > span {
-  padding: 10px 16px;
-  font-size: 18px;
-}
-.pagination-lg > li:first-child > a,
-.pagination-lg > li:first-child > span {
-  border-top-left-radius: 6px;
-  border-bottom-left-radius: 6px;
-}
-.pagination-lg > li:last-child > a,
-.pagination-lg > li:last-child > span {
-  border-top-right-radius: 6px;
-  border-bottom-right-radius: 6px;
-}
-.pagination-sm > li > a,
-.pagination-sm > li > span {
-  padding: 5px 10px;
-  font-size: 12px;
-}
-.pagination-sm > li:first-child > a,
-.pagination-sm > li:first-child > span {
-  border-top-left-radius: 3px;
-  border-bottom-left-radius: 3px;
-}
-.pagination-sm > li:last-child > a,
-.pagination-sm > li:last-child > span {
-  border-top-right-radius: 3px;
-  border-bottom-right-radius: 3px;
-}
-.pager {
-  padding-left: 0;
-  margin: 20px 0;
-  text-align: center;
-  list-style: none;
-}
-.pager li {
-  display: inline;
-}
-.pager li > a,
-.pager li > span {
-  display: inline-block;
-  padding: 5px 14px;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  border-radius: 15px;
-}
-.pager li > a:hover,
-.pager li > a:focus {
-  text-decoration: none;
-  background-color: #eee;
-}
-.pager .next > a,
-.pager .next > span {
-  float: right;
-}
-.pager .previous > a,
-.pager .previous > span {
-  float: left;
-}
-.pager .disabled > a,
-.pager .disabled > a:hover,
-.pager .disabled > a:focus,
-.pager .disabled > span {
-  color: #777;
-  cursor: not-allowed;
-  background-color: #fff;
-}
-.label {
-  display: inline;
-  padding: .2em .6em .3em;
-  font-size: 75%;
-  font-weight: bold;
-  line-height: 1;
-  color: #fff;
-  text-align: center;
-  white-space: nowrap;
-  vertical-align: baseline;
-  border-radius: .25em;
-}
-a.label:hover,
-a.label:focus {
-  color: #fff;
-  text-decoration: none;
-  cursor: pointer;
-}
-.label:empty {
-  display: none;
-}
-.btn .label {
-  position: relative;
-  top: -1px;
-}
-.label-default {
-  background-color: #777;
-}
-.label-default[href]:hover,
-.label-default[href]:focus {
-  background-color: #5e5e5e;
-}
-.label-primary {
-  background-color: #428bca;
-}
-.label-primary[href]:hover,
-.label-primary[href]:focus {
-  background-color: #3071a9;
-}
-.label-success {
-  background-color: #5cb85c;
-}
-.label-success[href]:hover,
-.label-success[href]:focus {
-  background-color: #449d44;
-}
-.label-info {
-  background-color: #5bc0de;
-}
-.label-info[href]:hover,
-.label-info[href]:focus {
-  background-color: #31b0d5;
-}
-.label-warning {
-  background-color: #f0ad4e;
-}
-.label-warning[href]:hover,
-.label-warning[href]:focus {
-  background-color: #ec971f;
-}
-.label-danger {
-  background-color: #d9534f;
-}
-.label-danger[href]:hover,
-.label-danger[href]:focus {
-  background-color: #c9302c;
-}
-.badge {
-  display: inline-block;
-  min-width: 10px;
-  padding: 3px 7px;
-  font-size: 12px;
-  font-weight: bold;
-  line-height: 1;
-  color: #fff;
-  text-align: center;
-  white-space: nowrap;
-  vertical-align: baseline;
-  background-color: #777;
-  border-radius: 10px;
-}
-.badge:empty {
-  display: none;
-}
-.btn .badge {
-  position: relative;
-  top: -1px;
-}
-.btn-xs .badge {
-  top: 0;
-  padding: 1px 5px;
-}
-a.badge:hover,
-a.badge:focus {
-  color: #fff;
-  text-decoration: none;
-  cursor: pointer;
-}
-a.list-group-item.active > .badge,
-.nav-pills > .active > a > .badge {
-  color: #428bca;
-  background-color: #fff;
-}
-.nav-pills > li > a > .badge {
-  margin-left: 3px;
-}
-.jumbotron {
-  padding: 30px;
-  margin-bottom: 30px;
-  color: inherit;
-  background-color: #eee;
-}
-.jumbotron h1,
-.jumbotron .h1 {
-  color: inherit;
-}
-.jumbotron p {
-  margin-bottom: 15px;
-  font-size: 21px;
-  font-weight: 200;
-}
-.jumbotron > hr {
-  border-top-color: #d5d5d5;
-}
-.container .jumbotron {
-  border-radius: 6px;
-}
-.jumbotron .container {
-  max-width: 100%;
-}
-@media screen and (min-width: 768px) {
-  .jumbotron {
-    padding-top: 48px;
-    padding-bottom: 48px;
-  }
-  .container .jumbotron {
-    padding-right: 60px;
-    padding-left: 60px;
-  }
-  .jumbotron h1,
-  .jumbotron .h1 {
-    font-size: 63px;
-  }
-}
-.thumbnail {
-  display: block;
-  padding: 4px;
-  margin-bottom: 20px;
-  line-height: 1.42857143;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  border-radius: 4px;
-  -webkit-transition: all .2s ease-in-out;
-       -o-transition: all .2s ease-in-out;
-          transition: all .2s ease-in-out;
-}
-.thumbnail > img,
-.thumbnail a > img {
-  margin-right: auto;
-  margin-left: auto;
-}
-a.thumbnail:hover,
-a.thumbnail:focus,
-a.thumbnail.active {
-  border-color: #428bca;
-}
-.thumbnail .caption {
-  padding: 9px;
-  color: #333;
-}
-.alert {
-  padding: 15px;
-  margin-bottom: 20px;
-  border: 1px solid transparent;
-  border-radius: 4px;
-}
-.alert h4 {
-  margin-top: 0;
-  color: inherit;
-}
-.alert .alert-link {
-  font-weight: bold;
-}
-.alert > p,
-.alert > ul {
-  margin-bottom: 0;
-}
-.alert > p + p {
-  margin-top: 5px;
-}
-.alert-dismissable,
-.alert-dismissible {
-  padding-right: 35px;
-}
-.alert-dismissable .close,
-.alert-dismissible .close {
-  position: relative;
-  top: -2px;
-  right: -21px;
-  color: inherit;
-}
-.alert-success {
-  color: #3c763d;
-  background-color: #dff0d8;
-  border-color: #d6e9c6;
-}
-.alert-success hr {
-  border-top-color: #c9e2b3;
-}
-.alert-success .alert-link {
-  color: #2b542c;
-}
-.alert-info {
-  color: #31708f;
-  background-color: #d9edf7;
-  border-color: #bce8f1;
-}
-.alert-info hr {
-  border-top-color: #a6e1ec;
-}
-.alert-info .alert-link {
-  color: #245269;
-}
-.alert-warning {
-  color: #8a6d3b;
-  background-color: #fcf8e3;
-  border-color: #faebcc;
-}
-.alert-warning hr {
-  border-top-color: #f7e1b5;
-}
-.alert-warning .alert-link {
-  color: #66512c;
-}
-.alert-danger {
-  color: #a94442;
-  background-color: #f2dede;
-  border-color: #ebccd1;
-}
-.alert-danger hr {
-  border-top-color: #e4b9c0;
-}
-.alert-danger .alert-link {
-  color: #843534;
-}
-@-webkit-keyframes progress-bar-stripes {
-  from {
-    background-position: 40px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-@-o-keyframes progress-bar-stripes {
-  from {
-    background-position: 40px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-@keyframes progress-bar-stripes {
-  from {
-    background-position: 40px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-.progress {
-  height: 20px;
-  margin-bottom: 20px;
-  overflow: hidden;
-  background-color: #f5f5f5;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
-          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
-}
-.progress-bar {
-  float: left;
-  width: 0;
-  height: 100%;
-  font-size: 12px;
-  line-height: 20px;
-  color: #fff;
-  text-align: center;
-  background-color: #428bca;
-  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
-          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
-  -webkit-transition: width .6s ease;
-       -o-transition: width .6s ease;
-          transition: width .6s ease;
-}
-.progress-striped .progress-bar,
-.progress-bar-striped {
-  background-image: -webkit-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-image:      -o-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-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);
-  -webkit-background-size: 40px 40px;
-          background-size: 40px 40px;
-}
-.progress.active .progress-bar,
-.progress-bar.active {
-  -webkit-animation: progress-bar-stripes 2s linear infinite;
-       -o-animation: progress-bar-stripes 2s linear infinite;
-          animation: progress-bar-stripes 2s linear infinite;
-}
-.progress-bar[aria-valuenow="1"],
-.progress-bar[aria-valuenow="2"] {
-  min-width: 30px;
-}
-.progress-bar[aria-valuenow="0"] {
-  min-width: 30px;
-  color: #777;
-  background-color: transparent;
-  background-image: none;
-  -webkit-box-shadow: none;
-          box-shadow: none;
-}
-.progress-bar-success {
-  background-color: #5cb85c;
-}
-.progress-striped .progress-bar-success {
-  background-image: -webkit-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-image:      -o-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-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);
-}
-.progress-bar-info {
-  background-color: #5bc0de;
-}
-.progress-striped .progress-bar-info {
-  background-image: -webkit-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-image:      -o-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-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);
-}
-.progress-bar-warning {
-  background-color: #f0ad4e;
-}
-.progress-striped .progress-bar-warning {
-  background-image: -webkit-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-image:      -o-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-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);
-}
-.progress-bar-danger {
-  background-color: #d9534f;
-}
-.progress-striped .progress-bar-danger {
-  background-image: -webkit-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-image:      -o-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-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);
-}
-.media,
-.media-body {
-  overflow: hidden;
-  zoom: 1;
-}
-.media,
-.media .media {
-  margin-top: 15px;
-}
-.media:first-child {
-  margin-top: 0;
-}
-.media-object {
-  display: block;
-}
-.media-heading {
-  margin: 0 0 5px;
-}
-.media > .pull-left {
-  margin-right: 10px;
-}
-.media > .pull-right {
-  margin-left: 10px;
-}
-.media-list {
-  padding-left: 0;
-  list-style: none;
-}
-.list-group {
-  padding-left: 0;
-  margin-bottom: 20px;
-}
-.list-group-item {
-  position: relative;
-  display: block;
-  padding: 10px 15px;
-  margin-bottom: -1px;
-  background-color: #fff;
-  border: 1px solid #ddd;
-}
-.list-group-item:first-child {
-  border-top-left-radius: 4px;
-  border-top-right-radius: 4px;
-}
-.list-group-item:last-child {
-  margin-bottom: 0;
-  border-bottom-right-radius: 4px;
-  border-bottom-left-radius: 4px;
-}
-.list-group-item > .badge {
-  float: right;
-}
-.list-group-item > .badge + .badge {
-  margin-right: 5px;
-}
-a.list-group-item {
-  color: #555;
-}
-a.list-group-item .list-group-item-heading {
-  color: #333;
-}
-a.list-group-item:hover,
-a.list-group-item:focus {
-  color: #555;
-  text-decoration: none;
-  background-color: #f5f5f5;
-}
-.list-group-item.disabled,
-.list-group-item.disabled:hover,
-.list-group-item.disabled:focus {
-  color: #777;
-  background-color: #eee;
-}
-.list-group-item.disabled .list-group-item-heading,
-.list-group-item.disabled:hover .list-group-item-heading,
-.list-group-item.disabled:focus .list-group-item-heading {
-  color: inherit;
-}
-.list-group-item.disabled .list-group-item-text,
-.list-group-item.disabled:hover .list-group-item-text,
-.list-group-item.disabled:focus .list-group-item-text {
-  color: #777;
-}
-.list-group-item.active,
-.list-group-item.active:hover,
-.list-group-item.active:focus {
-  z-index: 2;
-  color: #fff;
-  background-color: #428bca;
-  border-color: #428bca;
-}
-.list-group-item.active .list-group-item-heading,
-.list-group-item.active:hover .list-group-item-heading,
-.list-group-item.active:focus .list-group-item-heading,
-.list-group-item.active .list-group-item-heading > small,
-.list-group-item.active:hover .list-group-item-heading > small,
-.list-group-item.active:focus .list-group-item-heading > small,
-.list-group-item.active .list-group-item-heading > .small,
-.list-group-item.active:hover .list-group-item-heading > .small,
-.list-group-item.active:focus .list-group-item-heading > .small {
-  color: inherit;
-}
-.list-group-item.active .list-group-item-text,
-.list-group-item.active:hover .list-group-item-text,
-.list-group-item.active:focus .list-group-item-text {
-  color: #e1edf7;
-}
-.list-group-item-success {
-  color: #3c763d;
-  background-color: #dff0d8;
-}
-a.list-group-item-success {
-  color: #3c763d;
-}
-a.list-group-item-success .list-group-item-heading {
-  color: inherit;
-}
-a.list-group-item-success:hover,
-a.list-group-item-success:focus {
-  color: #3c763d;
-  background-color: #d0e9c6;
-}
-a.list-group-item-success.active,
-a.list-group-item-success.active:hover,
-a.list-group-item-success.active:focus {
-  color: #fff;
-  background-color: #3c763d;
-  border-color: #3c763d;
-}
-.list-group-item-info {
-  color: #31708f;
-  background-color: #d9edf7;
-}
-a.list-group-item-info {
-  color: #31708f;
-}
-a.list-group-item-info .list-group-item-heading {
-  color: inherit;
-}
-a.list-group-item-info:hover,
-a.list-group-item-info:focus {
-  color: #31708f;
-  background-color: #c4e3f3;
-}
-a.list-group-item-info.active,
-a.list-group-item-info.active:hover,
-a.list-group-item-info.active:focus {
-  color: #fff;
-  background-color: #31708f;
-  border-color: #31708f;
-}
-.list-group-item-warning {
-  color: #8a6d3b;
-  background-color: #fcf8e3;
-}
-a.list-group-item-warning {
-  color: #8a6d3b;
-}
-a.list-group-item-warning .list-group-item-heading {
-  color: inherit;
-}
-a.list-group-item-warning:hover,
-a.list-group-item-warning:focus {
-  color: #8a6d3b;
-  background-color: #faf2cc;
-}
-a.list-group-item-warning.active,
-a.list-group-item-warning.active:hover,
-a.list-group-item-warning.active:focus {
-  color: #fff;
-  background-color: #8a6d3b;
-  border-color: #8a6d3b;
-}
-.list-group-item-danger {
-  color: #a94442;
-  background-color: #f2dede;
-}
-a.list-group-item-danger {
-  color: #a94442;
-}
-a.list-group-item-danger .list-group-item-heading {
-  color: inherit;
-}
-a.list-group-item-danger:hover,
-a.list-group-item-danger:focus {
-  color: #a94442;
-  background-color: #ebcccc;
-}
-a.list-group-item-danger.active,
-a.list-group-item-danger.active:hover,
-a.list-group-item-danger.active:focus {
-  color: #fff;
-  background-color: #a94442;
-  border-color: #a94442;
-}
-.list-group-item-heading {
-  margin-top: 0;
-  margin-bottom: 5px;
-}
-.list-group-item-text {
-  margin-bottom: 0;
-  line-height: 1.3;
-}
-.panel {
-  margin-bottom: 20px;
-  background-color: #fff;
-  border: 1px solid transparent;
-  border-radius: 4px;
-  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
-          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
-}
-.panel-body {
-  padding: 15px;
-}
-.panel-heading {
-  padding: 10px 15px;
-  border-bottom: 1px solid transparent;
-  border-top-left-radius: 3px;
-  border-top-right-radius: 3px;
-}
-.panel-heading > .dropdown .dropdown-toggle {
-  color: inherit;
-}
-.panel-title {
-  margin-top: 0;
-  margin-bottom: 0;
-  font-size: 16px;
-  color: inherit;
-}
-.panel-title > a {
-  color: inherit;
-}
-.panel-footer {
-  padding: 10px 15px;
-  background-color: #f5f5f5;
-  border-top: 1px solid #ddd;
-  border-bottom-right-radius: 3px;
-  border-bottom-left-radius: 3px;
-}
-.panel > .list-group {
-  margin-bottom: 0;
-}
-.panel > .list-group .list-group-item {
-  border-width: 1px 0;
-  border-radius: 0;
-}
-.panel > .list-group:first-child .list-group-item:first-child {
-  border-top: 0;
-  border-top-left-radius: 3px;
-  border-top-right-radius: 3px;
-}
-.panel > .list-group:last-child .list-group-item:last-child {
-  border-bottom: 0;
-  border-bottom-right-radius: 3px;
-  border-bottom-left-radius: 3px;
-}
-.panel-heading + .list-group .list-group-item:first-child {
-  border-top-width: 0;
-}
-.list-group + .panel-footer {
-  border-top-width: 0;
-}
-.panel > .table,
-.panel > .table-responsive > .table,
-.panel > .panel-collapse > .table {
-  margin-bottom: 0;
-}
-.panel > .table:first-child,
-.panel > .table-responsive:first-child > .table:first-child {
-  border-top-left-radius: 3px;
-  border-top-right-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
-.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
-  border-top-left-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
-.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
-  border-top-right-radius: 3px;
-}
-.panel > .table:last-child,
-.panel > .table-responsive:last-child > .table:last-child {
-  border-bottom-right-radius: 3px;
-  border-bottom-left-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
-.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
-  border-bottom-left-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
-.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
-  border-bottom-right-radius: 3px;
-}
-.panel > .panel-body + .table,
-.panel > .panel-body + .table-responsive {
-  border-top: 1px solid #ddd;
-}
-.panel > .table > tbody:first-child > tr:first-child th,
-.panel > .table > tbody:first-child > tr:first-child td {
-  border-top: 0;
-}
-.panel > .table-bordered,
-.panel > .table-responsive > .table-bordered {
-  border: 0;
-}
-.panel > .table-bordered > thead > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
-.panel > .table-bordered > tbody > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
-.panel > .table-bordered > tfoot > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
-.panel > .table-bordered > thead > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
-.panel > .table-bordered > tbody > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
-.panel > .table-bordered > tfoot > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
-  border-left: 0;
-}
-.panel > .table-bordered > thead > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
-.panel > .table-bordered > tbody > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
-.panel > .table-bordered > tfoot > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
-.panel > .table-bordered > thead > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
-.panel > .table-bordered > tbody > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
-.panel > .table-bordered > tfoot > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
-  border-right: 0;
-}
-.panel > .table-bordered > thead > tr:first-child > td,
-.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
-.panel > .table-bordered > tbody > tr:first-child > td,
-.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
-.panel > .table-bordered > thead > tr:first-child > th,
-.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
-.panel > .table-bordered > tbody > tr:first-child > th,
-.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
-  border-bottom: 0;
-}
-.panel > .table-bordered > tbody > tr:last-child > td,
-.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
-.panel > .table-bordered > tfoot > tr:last-child > td,
-.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
-.panel > .table-bordered > tbody > tr:last-child > th,
-.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
-.panel > .table-bordered > tfoot > tr:last-child > th,
-.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
-  border-bottom: 0;
-}
-.panel > .table-responsive {
-  margin-bottom: 0;
-  border: 0;
-}
-.panel-group {
-  margin-bottom: 20px;
-}
-.panel-group .panel {
-  margin-bottom: 0;
-  border-radius: 4px;
-}
-.panel-group .panel + .panel {
-  margin-top: 5px;
-}
-.panel-group .panel-heading {
-  border-bottom: 0;
-}
-.panel-group .panel-heading + .panel-collapse > .panel-body {
-  border-top: 1px solid #ddd;
-}
-.panel-group .panel-footer {
-  border-top: 0;
-}
-.panel-group .panel-footer + .panel-collapse .panel-body {
-  border-bottom: 1px solid #ddd;
-}
-.panel-default {
-  border-color: #ddd;
-}
-.panel-default > .panel-heading {
-  color: #333;
-  background-color: #f5f5f5;
-  border-color: #ddd;
-}
-.panel-default > .panel-heading + .panel-collapse > .panel-body {
-  border-top-color: #ddd;
-}
-.panel-default > .panel-heading .badge {
-  color: #f5f5f5;
-  background-color: #333;
-}
-.panel-default > .panel-footer + .panel-collapse > .panel-body {
-  border-bottom-color: #ddd;
-}
-.panel-primary {
-  border-color: #428bca;
-}
-.panel-primary > .panel-heading {
-  color: #fff;
-  background-color: #428bca;
-  border-color: #428bca;
-}
-.panel-primary > .panel-heading + .panel-collapse > .panel-body {
-  border-top-color: #428bca;
-}
-.panel-primary > .panel-heading .badge {
-  color: #428bca;
-  background-color: #fff;
-}
-.panel-primary > .panel-footer + .panel-collapse > .panel-body {
-  border-bottom-color: #428bca;
-}
-.panel-success {
-  border-color: #d6e9c6;
-}
-.panel-success > .panel-heading {
-  color: #3c763d;
-  background-color: #dff0d8;
-  border-color: #d6e9c6;
-}
-.panel-success > .panel-heading + .panel-collapse > .panel-body {
-  border-top-color: #d6e9c6;
-}
-.panel-success > .panel-heading .badge {
-  color: #dff0d8;
-  background-color: #3c763d;
-}
-.panel-success > .panel-footer + .panel-collapse > .panel-body {
-  border-bottom-color: #d6e9c6;
-}
-.panel-info {
-  border-color: #bce8f1;
-}
-.panel-info > .panel-heading {
-  color: #31708f;
-  background-color: #d9edf7;
-  border-color: #bce8f1;
-}
-.panel-info > .panel-heading + .panel-collapse > .panel-body {
-  border-top-color: #bce8f1;
-}
-.panel-info > .panel-heading .badge {
-  color: #d9edf7;
-  background-color: #31708f;
-}
-.panel-info > .panel-footer + .panel-collapse > .panel-body {
-  border-bottom-color: #bce8f1;
-}
-.panel-warning {
-  border-color: #faebcc;
-}
-.panel-warning > .panel-heading {
-  color: #8a6d3b;
-  background-color: #fcf8e3;
-  border-color: #faebcc;
-}
-.panel-warning > .panel-heading + .panel-collapse > .panel-body {
-  border-top-color: #faebcc;
-}
-.panel-warning > .panel-heading .badge {
-  color: #fcf8e3;
-  background-color: #8a6d3b;
-}
-.panel-warning > .panel-footer + .panel-collapse > .panel-body {
-  border-bottom-color: #faebcc;
-}
-.panel-danger {
-  border-color: #ebccd1;
-}
-.panel-danger > .panel-heading {
-  color: #a94442;
-  background-color: #f2dede;
-  border-color: #ebccd1;
-}
-.panel-danger > .panel-heading + .panel-collapse > .panel-body {
-  border-top-color: #ebccd1;
-}
-.panel-danger > .panel-heading .badge {
-  color: #f2dede;
-  background-color: #a94442;
-}
-.panel-danger > .panel-footer + .panel-collapse > .panel-body {
-  border-bottom-color: #ebccd1;
-}
-.embed-responsive {
-  position: relative;
-  display: block;
-  height: 0;
-  padding: 0;
-  overflow: hidden;
-}
-.embed-responsive .embed-responsive-item,
-.embed-responsive iframe,
-.embed-responsive embed,
-.embed-responsive object {
-  position: absolute;
-  top: 0;
-  bottom: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  border: 0;
-}
-.embed-responsive.embed-responsive-16by9 {
-  padding-bottom: 56.25%;
-}
-.embed-responsive.embed-responsive-4by3 {
-  padding-bottom: 75%;
-}
-.well {
-  min-height: 20px;
-  padding: 19px;
-  margin-bottom: 20px;
-  background-color: #f5f5f5;
-  border: 1px solid #e3e3e3;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
-}
-.well blockquote {
-  border-color: #ddd;
-  border-color: rgba(0, 0, 0, .15);
-}
-.well-lg {
-  padding: 24px;
-  border-radius: 6px;
-}
-.well-sm {
-  padding: 9px;
-  border-radius: 3px;
-}
-.close {
-  float: right;
-  font-size: 21px;
-  font-weight: bold;
-  line-height: 1;
-  color: #000;
-  text-shadow: 0 1px 0 #fff;
-  filter: alpha(opacity=20);
-  opacity: .2;
-}
-.close:hover,
-.close:focus {
-  color: #000;
-  text-decoration: none;
-  cursor: pointer;
-  filter: alpha(opacity=50);
-  opacity: .5;
-}
-button.close {
-  -webkit-appearance: none;
-  padding: 0;
-  cursor: pointer;
-  background: transparent;
-  border: 0;
-}
-.modal-open {
-  overflow: hidden;
-}
-.modal {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 1050;
-  display: none;
-  overflow: hidden;
-  -webkit-overflow-scrolling: touch;
-  outline: 0;
-}
-.modal.fade .modal-dialog {
-  -webkit-transition: -webkit-transform .3s ease-out;
-       -o-transition:      -o-transform .3s ease-out;
-          transition:         transform .3s ease-out;
-  -webkit-transform: translate3d(0, -25%, 0);
-       -o-transform: translate3d(0, -25%, 0);
-          transform: translate3d(0, -25%, 0);
-}
-.modal.in .modal-dialog {
-  -webkit-transform: translate3d(0, 0, 0);
-       -o-transform: translate3d(0, 0, 0);
-          transform: translate3d(0, 0, 0);
-}
-.modal-open .modal {
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-.modal-dialog {
-  position: relative;
-  width: auto;
-  margin: 10px;
-}
-.modal-content {
-  position: relative;
-  background-color: #fff;
-  -webkit-background-clip: padding-box;
-          background-clip: padding-box;
-  border: 1px solid #999;
-  border: 1px solid rgba(0, 0, 0, .2);
-  border-radius: 6px;
-  outline: 0;
-  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
-          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
-}
-.modal-backdrop {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 1040;
-  background-color: #000;
-}
-.modal-backdrop.fade {
-  filter: alpha(opacity=0);
-  opacity: 0;
-}
-.modal-backdrop.in {
-  filter: alpha(opacity=50);
-  opacity: .5;
-}
-.modal-header {
-  min-height: 16.42857143px;
-  padding: 15px;
-  border-bottom: 1px solid #e5e5e5;
-}
-.modal-header .close {
-  margin-top: -2px;
-}
-.modal-title {
-  margin: 0;
-  line-height: 1.42857143;
-}
-.modal-body {
-  position: relative;
-  padding: 15px;
-}
-.modal-footer {
-  padding: 15px;
-  text-align: right;
-  border-top: 1px solid #e5e5e5;
-}
-.modal-footer .btn + .btn {
-  margin-bottom: 0;
-  margin-left: 5px;
-}
-.modal-footer .btn-group .btn + .btn {
-  margin-left: -1px;
-}
-.modal-footer .btn-block + .btn-block {
-  margin-left: 0;
-}
-.modal-scrollbar-measure {
-  position: absolute;
-  top: -9999px;
-  width: 50px;
-  height: 50px;
-  overflow: scroll;
-}
-@media (min-width: 768px) {
-  .modal-dialog {
-    width: 600px;
-    margin: 30px auto;
-  }
-  .modal-content {
-    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
-            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
-  }
-  .modal-sm {
-    width: 300px;
-  }
-}
-@media (min-width: 992px) {
-  .modal-lg {
-    width: 900px;
-  }
-}
-.tooltip {
-  position: absolute;
-  z-index: 1070;
-  display: block;
-  font-size: 12px;
-  line-height: 1.4;
-  visibility: visible;
-  filter: alpha(opacity=0);
-  opacity: 0;
-}
-.tooltip.in {
-  filter: alpha(opacity=90);
-  opacity: .9;
-}
-.tooltip.top {
-  padding: 5px 0;
-  margin-top: -3px;
-}
-.tooltip.right {
-  padding: 0 5px;
-  margin-left: 3px;
-}
-.tooltip.bottom {
-  padding: 5px 0;
-  margin-top: 3px;
-}
-.tooltip.left {
-  padding: 0 5px;
-  margin-left: -3px;
-}
-.tooltip-inner {
-  max-width: 200px;
-  padding: 3px 8px;
-  color: #fff;
-  text-align: center;
-  text-decoration: none;
-  background-color: #000;
-  border-radius: 4px;
-}
-.tooltip-arrow {
-  position: absolute;
-  width: 0;
-  height: 0;
-  border-color: transparent;
-  border-style: solid;
-}
-.tooltip.top .tooltip-arrow {
-  bottom: 0;
-  left: 50%;
-  margin-left: -5px;
-  border-width: 5px 5px 0;
-  border-top-color: #000;
-}
-.tooltip.top-left .tooltip-arrow {
-  bottom: 0;
-  left: 5px;
-  border-width: 5px 5px 0;
-  border-top-color: #000;
-}
-.tooltip.top-right .tooltip-arrow {
-  right: 5px;
-  bottom: 0;
-  border-width: 5px 5px 0;
-  border-top-color: #000;
-}
-.tooltip.right .tooltip-arrow {
-  top: 50%;
-  left: 0;
-  margin-top: -5px;
-  border-width: 5px 5px 5px 0;
-  border-right-color: #000;
-}
-.tooltip.left .tooltip-arrow {
-  top: 50%;
-  right: 0;
-  margin-top: -5px;
-  border-width: 5px 0 5px 5px;
-  border-left-color: #000;
-}
-.tooltip.bottom .tooltip-arrow {
-  top: 0;
-  left: 50%;
-  margin-left: -5px;
-  border-width: 0 5px 5px;
-  border-bottom-color: #000;
-}
-.tooltip.bottom-left .tooltip-arrow {
-  top: 0;
-  left: 5px;
-  border-width: 0 5px 5px;
-  border-bottom-color: #000;
-}
-.tooltip.bottom-right .tooltip-arrow {
-  top: 0;
-  right: 5px;
-  border-width: 0 5px 5px;
-  border-bottom-color: #000;
-}
-.popover {
-  position: absolute;
-  top: 0;
-  left: 0;
-  z-index: 1060;
-  display: none;
-  max-width: 276px;
-  padding: 1px;
-  text-align: left;
-  white-space: normal;
-  background-color: #fff;
-  -webkit-background-clip: padding-box;
-          background-clip: padding-box;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, .2);
-  border-radius: 6px;
-  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
-          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
-}
-.popover.top {
-  margin-top: -10px;
-}
-.popover.right {
-  margin-left: 10px;
-}
-.popover.bottom {
-  margin-top: 10px;
-}
-.popover.left {
-  margin-left: -10px;
-}
-.popover-title {
-  padding: 8px 14px;
-  margin: 0;
-  font-size: 14px;
-  font-weight: normal;
-  line-height: 18px;
-  background-color: #f7f7f7;
-  border-bottom: 1px solid #ebebeb;
-  border-radius: 5px 5px 0 0;
-}
-.popover-content {
-  padding: 9px 14px;
-}
-.popover > .arrow,
-.popover > .arrow:after {
-  position: absolute;
-  display: block;
-  width: 0;
-  height: 0;
-  border-color: transparent;
-  border-style: solid;
-}
-.popover > .arrow {
-  border-width: 11px;
-}
-.popover > .arrow:after {
-  content: "";
-  border-width: 10px;
-}
-.popover.top > .arrow {
-  bottom: -11px;
-  left: 50%;
-  margin-left: -11px;
-  border-top-color: #999;
-  border-top-color: rgba(0, 0, 0, .25);
-  border-bottom-width: 0;
-}
-.popover.top > .arrow:after {
-  bottom: 1px;
-  margin-left: -10px;
-  content: " ";
-  border-top-color: #fff;
-  border-bottom-width: 0;
-}
-.popover.right > .arrow {
-  top: 50%;
-  left: -11px;
-  margin-top: -11px;
-  border-right-color: #999;
-  border-right-color: rgba(0, 0, 0, .25);
-  border-left-width: 0;
-}
-.popover.right > .arrow:after {
-  bottom: -10px;
-  left: 1px;
-  content: " ";
-  border-right-color: #fff;
-  border-left-width: 0;
-}
-.popover.bottom > .arrow {
-  top: -11px;
-  left: 50%;
-  margin-left: -11px;
-  border-top-width: 0;
-  border-bottom-color: #999;
-  border-bottom-color: rgba(0, 0, 0, .25);
-}
-.popover.bottom > .arrow:after {
-  top: 1px;
-  margin-left: -10px;
-  content: " ";
-  border-top-width: 0;
-  border-bottom-color: #fff;
-}
-.popover.left > .arrow {
-  top: 50%;
-  right: -11px;
-  margin-top: -11px;
-  border-right-width: 0;
-  border-left-color: #999;
-  border-left-color: rgba(0, 0, 0, .25);
-}
-.popover.left > .arrow:after {
-  right: 1px;
-  bottom: -10px;
-  content: " ";
-  border-right-width: 0;
-  border-left-color: #fff;
-}
-.carousel {
-  position: relative;
-}
-.carousel-inner {
-  position: relative;
-  width: 100%;
-  overflow: hidden;
-}
-.carousel-inner > .item {
-  position: relative;
-  display: none;
-  -webkit-transition: .6s ease-in-out left;
-       -o-transition: .6s ease-in-out left;
-          transition: .6s ease-in-out left;
-}
-.carousel-inner > .item > img,
-.carousel-inner > .item > a > img {
-  line-height: 1;
-}
-.carousel-inner > .active,
-.carousel-inner > .next,
-.carousel-inner > .prev {
-  display: block;
-}
-.carousel-inner > .active {
-  left: 0;
-}
-.carousel-inner > .next,
-.carousel-inner > .prev {
-  position: absolute;
-  top: 0;
-  width: 100%;
-}
-.carousel-inner > .next {
-  left: 100%;
-}
-.carousel-inner > .prev {
-  left: -100%;
-}
-.carousel-inner > .next.left,
-.carousel-inner > .prev.right {
-  left: 0;
-}
-.carousel-inner > .active.left {
-  left: -100%;
-}
-.carousel-inner > .active.right {
-  left: 100%;
-}
-.carousel-control {
-  position: absolute;
-  top: 0;
-  bottom: 0;
-  left: 0;
-  width: 15%;
-  font-size: 20px;
-  color: #fff;
-  text-align: center;
-  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
-  filter: alpha(opacity=50);
-  opacity: .5;
-}
-.carousel-control.left {
-  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
-  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
-  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
-  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
-  background-repeat: repeat-x;
-}
-.carousel-control.right {
-  right: 0;
-  left: auto;
-  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
-  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
-  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
-  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
-  background-repeat: repeat-x;
-}
-.carousel-control:hover,
-.carousel-control:focus {
-  color: #fff;
-  text-decoration: none;
-  filter: alpha(opacity=90);
-  outline: 0;
-  opacity: .9;
-}
-.carousel-control .icon-prev,
-.carousel-control .icon-next,
-.carousel-control .glyphicon-chevron-left,
-.carousel-control .glyphicon-chevron-right {
-  position: absolute;
-  top: 50%;
-  z-index: 5;
-  display: inline-block;
-}
-.carousel-control .icon-prev,
-.carousel-control .glyphicon-chevron-left {
-  left: 50%;
-  margin-left: -10px;
-}
-.carousel-control .icon-next,
-.carousel-control .glyphicon-chevron-right {
-  right: 50%;
-  margin-right: -10px;
-}
-.carousel-control .icon-prev,
-.carousel-control .icon-next {
-  width: 20px;
-  height: 20px;
-  margin-top: -10px;
-  font-family: serif;
-}
-.carousel-control .icon-prev:before {
-  content: '\2039';
-}
-.carousel-control .icon-next:before {
-  content: '\203a';
-}
-.carousel-indicators {
-  position: absolute;
-  bottom: 10px;
-  left: 50%;
-  z-index: 15;
-  width: 60%;
-  padding-left: 0;
-  margin-left: -30%;
-  text-align: center;
-  list-style: none;
-}
-.carousel-indicators li {
-  display: inline-block;
-  width: 10px;
-  height: 10px;
-  margin: 1px;
-  text-indent: -999px;
-  cursor: pointer;
-  background-color: #000 \9;
-  background-color: rgba(0, 0, 0, 0);
-  border: 1px solid #fff;
-  border-radius: 10px;
-}
-.carousel-indicators .active {
-  width: 12px;
-  height: 12px;
-  margin: 0;
-  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;
-  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
-}
-.carousel-caption .btn {
-  text-shadow: none;
-}
-@media screen and (min-width: 768px) {
-  .carousel-control .glyphicon-chevron-left,
-  .carousel-control .glyphicon-chevron-right,
-  .carousel-control .icon-prev,
-  .carousel-control .icon-next {
-    width: 30px;
-    height: 30px;
-    margin-top: -15px;
-    font-size: 30px;
-  }
-  .carousel-control .glyphicon-chevron-left,
-  .carousel-control .icon-prev {
-    margin-left: -15px;
-  }
-  .carousel-control .glyphicon-chevron-right,
-  .carousel-control .icon-next {
-    margin-right: -15px;
-  }
-  .carousel-caption {
-    right: 20%;
-    left: 20%;
-    padding-bottom: 30px;
-  }
-  .carousel-indicators {
-    bottom: 20px;
-  }
-}
-.clearfix:before,
-.clearfix:after,
-.dl-horizontal dd:before,
-.dl-horizontal dd:after,
-.container:before,
-.container:after,
-.container-fluid:before,
-.container-fluid:after,
-.row:before,
-.row:after,
-.form-horizontal .form-group:before,
-.form-horizontal .form-group:after,
-.btn-toolbar:before,
-.btn-toolbar:after,
-.btn-group-vertical > .btn-group:before,
-.btn-group-vertical > .btn-group:after,
-.nav:before,
-.nav:after,
-.navbar:before,
-.navbar:after,
-.navbar-header:before,
-.navbar-header:after,
-.navbar-collapse:before,
-.navbar-collapse:after,
-.pager:before,
-.pager:after,
-.panel-body:before,
-.panel-body:after,
-.modal-footer:before,
-.modal-footer:after {
-  display: table;
-  content: " ";
-}
-.clearfix:after,
-.dl-horizontal dd:after,
-.container:after,
-.container-fluid:after,
-.row:after,
-.form-horizontal .form-group:after,
-.btn-toolbar:after,
-.btn-group-vertical > .btn-group:after,
-.nav:after,
-.navbar:after,
-.navbar-header:after,
-.navbar-collapse:after,
-.pager:after,
-.panel-body:after,
-.modal-footer:after {
-  clear: both;
-}
-.center-block {
-  display: block;
-  margin-right: auto;
-  margin-left: auto;
-}
-.pull-right {
-  float: right !important;
-}
-.pull-left {
-  float: left !important;
-}
-.hide {
-  display: none !important;
-}
-.show {
-  display: block !important;
-}
-.invisible {
-  visibility: hidden;
-}
-.text-hide {
-  font: 0/0 a;
-  color: transparent;
-  text-shadow: none;
-  background-color: transparent;
-  border: 0;
-}
-.hidden {
-  display: none !important;
-  visibility: hidden !important;
-}
-.affix {
-  position: fixed;
-  -webkit-transform: translate3d(0, 0, 0);
-       -o-transform: translate3d(0, 0, 0);
-          transform: translate3d(0, 0, 0);
-}
-@-ms-viewport {
-  width: device-width;
-}
-.visible-xs,
-.visible-sm,
-.visible-md,
-.visible-lg {
-  display: none !important;
-}
-.visible-xs-block,
-.visible-xs-inline,
-.visible-xs-inline-block,
-.visible-sm-block,
-.visible-sm-inline,
-.visible-sm-inline-block,
-.visible-md-block,
-.visible-md-inline,
-.visible-md-inline-block,
-.visible-lg-block,
-.visible-lg-inline,
-.visible-lg-inline-block {
-  display: none !important;
-}
-@media (max-width: 767px) {
-  .visible-xs {
-    display: block !important;
-  }
-  table.visible-xs {
-    display: table;
-  }
-  tr.visible-xs {
-    display: table-row !important;
-  }
-  th.visible-xs,
-  td.visible-xs {
-    display: table-cell !important;
-  }
-}
-@media (max-width: 767px) {
-  .visible-xs-block {
-    display: block !important;
-  }
-}
-@media (max-width: 767px) {
-  .visible-xs-inline {
-    display: inline !important;
-  }
-}
-@media (max-width: 767px) {
-  .visible-xs-inline-block {
-    display: inline-block !important;
-  }
-}
-@media (min-width: 768px) and (max-width: 991px) {
-  .visible-sm {
-    display: block !important;
-  }
-  table.visible-sm {
-    display: table;
-  }
-  tr.visible-sm {
-    display: table-row !important;
-  }
-  th.visible-sm,
-  td.visible-sm {
-    display: table-cell !important;
-  }
-}
-@media (min-width: 768px) and (max-width: 991px) {
-  .visible-sm-block {
-    display: block !important;
-  }
-}
-@media (min-width: 768px) and (max-width: 991px) {
-  .visible-sm-inline {
-    display: inline !important;
-  }
-}
-@media (min-width: 768px) and (max-width: 991px) {
-  .visible-sm-inline-block {
-    display: inline-block !important;
-  }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
-  .visible-md {
-    display: block !important;
-  }
-  table.visible-md {
-    display: table;
-  }
-  tr.visible-md {
-    display: table-row !important;
-  }
-  th.visible-md,
-  td.visible-md {
-    display: table-cell !important;
-  }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
-  .visible-md-block {
-    display: block !important;
-  }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
-  .visible-md-inline {
-    display: inline !important;
-  }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
-  .visible-md-inline-block {
-    display: inline-block !important;
-  }
-}
-@media (min-width: 1200px) {
-  .visible-lg {
-    display: block !important;
-  }
-  table.visible-lg {
-    display: table;
-  }
-  tr.visible-lg {
-    display: table-row !important;
-  }
-  th.visible-lg,
-  td.visible-lg {
-    display: table-cell !important;
-  }
-}
-@media (min-width: 1200px) {
-  .visible-lg-block {
-    display: block !important;
-  }
-}
-@media (min-width: 1200px) {
-  .visible-lg-inline {
-    display: inline !important;
-  }
-}
-@media (min-width: 1200px) {
-  .visible-lg-inline-block {
-    display: inline-block !important;
-  }
-}
-@media (max-width: 767px) {
-  .hidden-xs {
-    display: none !important;
-  }
-}
-@media (min-width: 768px) and (max-width: 991px) {
-  .hidden-sm {
-    display: none !important;
-  }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
-  .hidden-md {
-    display: none !important;
-  }
-}
-@media (min-width: 1200px) {
-  .hidden-lg {
-    display: none !important;
-  }
-}
-.visible-print {
-  display: none !important;
-}
-@media print {
-  .visible-print {
-    display: block !important;
-  }
-  table.visible-print {
-    display: table;
-  }
-  tr.visible-print {
-    display: table-row !important;
-  }
-  th.visible-print,
-  td.visible-print {
-    display: table-cell !important;
-  }
-}
-.visible-print-block {
-  display: none !important;
-}
-@media print {
-  .visible-print-block {
-    display: block !important;
-  }
-}
-.visible-print-inline {
-  display: none !important;
-}
-@media print {
-  .visible-print-inline {
-    display: inline !important;
-  }
-}
-.visible-print-inline-block {
-  display: none !important;
-}
-@media print {
-  .visible-print-inline-block {
-    display: inline-block !important;
-  }
-}
-@media print {
-  .hidden-print {
-    display: none !important;
-  }
-}
-/*# sourceMappingURL=bootstrap.css.map */
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap.css.map b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap.css.map
deleted file mode 100644
index bfb5616891b..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"bootstrap.css","sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"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;EAAW,kBAAA;EHoR9C;AGnRmC;EAAW,kBAAA;EHsR9C;AGrRmC;EAAW,kBAAA;EHwR9C;AGvRmC;EAAW,kBAAA;EH0R9C;AGzRmC;EAAW,kBAAA;EH4R9C;AG3RmC;EAAW,kBAAA;EH8R9C;AG7RmC;EAAW,kBAAA;EHgS9C;AG/RmC;EAAW,kBAAA;EHkS9C;AGjSmC;EAAW,kBAAA;EHoS9C;AGnSmC;EAAW,kBAAA;EHsS9C;AGrSmC;EAAW,kBAAA;EHwS9C;AGvSmC;EAAW,kBAAA;EH0S9C;AGzSmC;EAAW,kBAAA;EH4S9C;AG3SmC;EAAW,kBAAA;EH8S9C;AG7SmC;EAAW,kBAAA;EHgT9C;AG/SmC;EAAW,kBAAA;EHkT9C;AGjTmC;EAAW,kBAAA;EHoT9C;AGnTmC;EAAW,kBAAA;EHsT9C;AGrTmC;EAAW,kBAAA;EHwT9C;AGvTmC;EAAW,kBAAA;EH0T9C;AGzTmC;EAAW,kBAAA;EH4T9C;AG3TmC;EAAW,kBAAA;EH8T9C;AG7TmC;EAAW,kBAAA;EHgU9C;AG/TmC;EAAW,kBAAA;EHkU9C;AGjUmC;EAAW,kBAAA;EHoU9C;AGnUmC;EAAW,kBAAA;EHsU9C;AGrUmC;EAAW,kBAAA;EHwU9C;AGvUmC;EAAW,kBAAA;EH0U9C;AGzUmC;EAAW,kBAAA;EH4U9C;AG3UmC;EAAW,kBAAA;EH8U9C;AG7UmC;EAAW,kBAAA;EHgV9C;AG/UmC;EAAW,kBAAA;EHkV9C;AGjVmC;EAAW,kBAAA;EHoV9C;AGnVmC;EAAW,kBAAA;EHsV9C;AGrVmC;EAAW,kBAAA;EHwV9C;AGvVmC;EAAW,kBAAA;EH0V9C;AGzVmC;EAAW,kBAAA;EH4V9C;AG3VmC;EAAW,kBAAA;EH8V9C;AG7VmC;EAAW,kBAAA;EHgW9C;AG/VmC;EAAW,kBAAA;EHkW9C;AGjWmC;EAAW,kBAAA;EHoW9C;AGnWmC;EAAW,kBAAA;EHsW9C;AGrWmC;EAAW,kBAAA;EHwW9C;AGvWmC;EAAW,kBAAA;EH0W9C;AGzWmC;EAAW,kBAAA;EH4W9C;AG3WmC;EAAW,kBAAA;EH8W9C;AG7WmC;EAAW,kBAAA;EHgX9C;AG/WmC;EAAW,kBAAA;EHkX9C;AGjXmC;EAAW,kBAAA;EHoX9C;AGnXmC;EAAW,kBAAA;EHsX9C;AGrXmC;EAAW,kBAAA;EHwX9C;AGvXmC;EAAW,kBAAA;EH0X9C;AGzXmC;EAAW,kBAAA;EH4X9C;AG3XmC;EAAW,kBAAA;EH8X9C;AG7XmC;EAAW,kBAAA;EHgY9C;AG/XmC;EAAW,kBAAA;EHkY9C;AGjYmC;EAAW,kBAAA;EHoY9C;AGnYmC;EAAW,kBAAA;EHsY9C;AGrYmC;EAAW,kBAAA;EHwY9C;AGvYmC;EAAW,kBAAA;EH0Y9C;AGzYmC;EAAW,kBAAA;EH4Y9C;AG3YmC;EAAW,kBAAA;EH8Y9C;AG7YmC;EAAW,kBAAA;EHgZ9C;AG/YmC;EAAW,kBAAA;EHkZ9C;AGjZmC;EAAW,kBAAA;EHoZ9C;AGnZmC;EAAW,kBAAA;EHsZ9C;AGrZmC;EAAW,kBAAA;EHwZ9C;AGvZmC;EAAW,kBAAA;EH0Z9C;AGzZmC;EAAW,kBAAA;EH4Z9C;AG3ZmC;EAAW,kBAAA;EH8Z9C;AG7ZmC;EAAW,kBAAA;EHga9C;AG/ZmC;EAAW,kBAAA;EHka9C;AGjamC;EAAW,kBAAA;EHoa9C;AGnamC;EAAW,kBAAA;EHsa9C;AGramC;EAAW,kBAAA;EHwa9C;AGvamC;EAAW,kBAAA;EH0a9C;AGzamC;EAAW,kBAAA;EH4a9C;AG3amC;EAAW,kBAAA;EH8a9C;AG7amC;EAAW,kBAAA;EHgb9C;AG/amC;EAAW,kBAAA;EHkb9C;AGjbmC;EAAW,kBAAA;EHob9C;AGnbmC;EAAW,kBAAA;EHsb9C;AGrbmC;EAAW,kBAAA;EHwb9C;AGvbmC;EAAW,kBAAA;EH0b9C;AGzbmC;EAAW,kBAAA;EH4b9C;AG3bmC;EAAW,kBAAA;EH8b9C;AG7bmC;EAAW,kBAAA;EHgc9C;AG/bmC;EAAW,kBAAA;EHkc9C;AGjcmC;EAAW,kBAAA;EHoc9C;AGncmC;EAAW,kBAAA;EHsc9C;AGrcmC;EAAW,kBAAA;EHwc9C;AGvcmC;EAAW,kBAAA;EH0c9C;AGzcmC;EAAW,kBAAA;EH4c9C;AG3cmC;EAAW,kBAAA;EH8c9C;AG7cmC;EAAW,kBAAA;EHgd9C;AG/cmC;EAAW,kBAAA;EHkd9C;AGjdmC;EAAW,kBAAA;EHod9C;AGndmC;EAAW,kBAAA;EHsd9C;AGrdmC;EAAW,kBAAA;EHwd9C;AGvdmC;EAAW,kBAAA;EH0d9C;AGzdmC;EAAW,kBAAA;EH4d9C;AG3dmC;EAAW,kBAAA;EH8d9C;AG7dmC;EAAW,kBAAA;EHge9C;AG/dmC;EAAW,kBAAA;EHke9C;AGjemC;EAAW,kBAAA;EHoe9C;AGnemC;EAAW,kBAAA;EHse9C;AGremC;EAAW,kBAAA;EHwe9C;AGvemC;EAAW,kBAAA;EH0e9C;AGzemC;EAAW,kBAAA;EH4e9C;AG3emC;EAAW,kBAAA;EH8e9C;AG7emC;EAAW,kBAAA;EHgf9C;AG/emC;EAAW,kBAAA;EHkf9C;AGjfmC;EAAW,kBAAA;EHof9C;AGnfmC;EAAW,kBAAA;EHsf9C;AGrfmC;EAAW,kBAAA;EHwf9C;AGvfmC;EAAW,kBAAA;EH0f9C;AGzfmC;EAAW,kBAAA;EH4f9C;AG3fmC;EAAW,kBAAA;EH8f9C;AG7fmC;EAAW,kBAAA;EHggB9C;AG/fmC;EAAW,kBAAA;EHkgB9C;AGjgBmC;EAAW,kBAAA;EHogB9C;AGngBmC;EAAW,kBAAA;EHsgB9C;AGrgBmC;EAAW,kBAAA;EHwgB9C;AGvgBmC;EAAW,kBAAA;EH0gB9C;AGzgBmC;EAAW,kBAAA;EH4gB9C;AG3gBmC;EAAW,kBAAA;EH8gB9C;AG7gBmC;EAAW,kBAAA;EHghB9C;AG/gBmC;EAAW,kBAAA;EHkhB9C;AGjhBmC;EAAW,kBAAA;EHohB9C;AGnhBmC;EAAW,kBAAA;EHshB9C;AGrhBmC;EAAW,kBAAA;EHwhB9C;AGvhBmC;EAAW,kBAAA;EH0hB9C;AGzhBmC;EAAW,kBAAA;EH4hB9C;AG3hBmC;EAAW,kBAAA;EH8hB9C;AG7hBmC;EAAW,kBAAA;EHgiB9C;AG/hBmC;EAAW,kBAAA;EHkiB9C;AGjiBmC;EAAW,kBAAA;EHoiB9C;AGniBmC;EAAW,kBAAA;EHsiB9C;AGriBmC;EAAW,kBAAA;EHwiB9C;AGviBmC;EAAW,kBAAA;EH0iB9C;AGziBmC;EAAW,kBAAA;EH4iB9C;AG3iBmC;EAAW,kBAAA;EH8iB9C;AG7iBmC;EA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A;Efk8CH;Ae97CC;EACE,YAAA;Efg8CH;Ael7CC;EACE,mBAAA;Efo7CH;Aer7CC;EACE,2BAAA;Efu7CH;Aex7CC;EACE,2BAAA;Ef07CH;Ae37CC;EACE,kBAAA;Ef67CH;Ae97CC;EACE,2BAAA;Efg8CH;Aej8CC;EACE,2BAAA;Efm8CH;Aep8CC;EACE,kBAAA;Efs8CH;Aev8CC;EACE,2BAAA;Efy8CH;Ae18CC;EACE,2BAAA;Ef48CH;Ae78CC;EACE,kBAAA;Ef+8CH;Aeh9CC;EACE,2BAAA;Efk9CH;Aen9CC;EACE,0BAAA;Efq9CH;Aet9CC;EACE,iBAAA;Efw9CH;Aa59CD;EE9BI;IACE,aAAA;If6/CH;Eet/CD;IACE,aAAA;Ifw/CD;Eez/CD;IACE,qBAAA;If2/CD;Ee5/CD;IACE,qBAAA;If8/CD;Ee//CD;IACE,YAAA;IfigDD;EelgDD;IACE,qBAAA;IfogDD;EergDD;IACE,qBAAA;IfugDD;EexgDD;IACE,YAAA;If0gDD;Ee3gDD;IACE,qBAAA;If6gDD;Ee9gDD;IACE,qBAAA;IfghDD;EejhDD;IACE,YAAA;IfmhDD;EephDD;IACE,qBAAA;IfshDD;EevhDD;IACE,oBAAA;IfyhDD;Ee3gDD;IACE,aAAA;If6gDD;Ee9gDD;IACE,qBAAA;IfghDD;EejhDD;IACE,qBAAA;IfmhDD;EephDD;IACE,YAAA;IfshDD;EevhDD;IACE,qBAAA;IfyhDD;Ee1hDD;IACE,qBAAA;If4hDD;Ee7hDD;IACE,YAAA;If+hDD;EehiDD;IACE,qBAAA;IfkiDD;EeniDD;IACE,qBAAA;IfqiDD;EetiDD;IACE,YAAA;IfwiDD;EeziDD;IACE,qBAAA;If2iDD;Ee5iDD;IACE,oBAAA;If8iDD;Ee1iDD;IACE,aAAA;If4iDD;Ee5jDD;IACE,YAAA;If8jDD;Ee/jDD;IACE,oBAAA;IfikDD;EelkDD;IACE,oBAAA;IfokDD;EerkDD;IACE,WAAA;IfukDD;EexkDD;IACE,oBAAA;If0kDD;Ee3kDD;IACE,oBAAA;If6kDD;Ee9kDD;IACE,WAAA;IfglDD;EejlDD;IACE,oBAAA;IfmlDD;EeplDD;IACE,oBAAA;IfslDD;EevlDD;IACE,WAAA;IfylDD;Ee1lDD;IACE,oBAAA;If4lDD;Ee7lDD;IACE,mBAAA;If+lDD;Ee3lDD;IACE,YAAA;If6lDD;Ee/kDD;IACE,mBAAA;IfilDD;EellDD;IACE,2BAAA;IfolDD;EerlDD;IACE,2BAAA;IfulDD;EexlDD;IACE,kBAAA;If0lDD;Ee3lDD;IACE,2BAAA;If6lDD;Ee9lDD;IACE,2BAAA;IfgmDD;EejmDD;IACE,kBAAA;IfmmDD;EepmDD;IACE,2BAAA;IfsmDD;EevmDD;IACE,2BAAA;IfymDD;Ee1mDD;IACE,kBAAA;If4mDD;Ee7mDD;IACE,2BAAA;If+mDD;EehnDD;IACE,0BAAA;IfknDD;EennDD;IACE,iBAAA;IfqnDD;EACF;AajnDD;EEvCI;IACE,aAAA;If2pDH;EeppDD;IACE,aAAA;IfspDD;EevpDD;IACE,qBAAA;IfypDD;Ee1pDD;IACE,qBAAA;If4pDD;Ee7pDD;IACE,YAAA;If+pDD;EehqDD;IACE,qBAAA;IfkqDD;EenqDD;IACE,qBAAA;IfqqDD;EetqDD;IACE,YAAA;IfwqDD;EezqDD;IACE,qBAAA;If2qDD;Ee5qDD;IACE,qBAAA;If8qDD;Ee/qDD;IACE,YAAA;IfirDD;EelrDD;IACE,qBAAA;IforDD;EerrDD;IACE,oBAAA;IfurDD;EezqDD;IACE,aAAA;If2qDD;Ee5qDD;IACE,qBAAA;If8qDD;Ee/qDD;IACE,qBAAA;IfirDD;EelrDD;IACE,YAAA;IforDD;EerrDD;IACE,qBAAA;IfurDD;EexrDD;IACE,qBAAA;If0rDD;Ee3rDD;IACE,YAAA;If6rDD;Ee9rDD;IACE,qBAAA;IfgsDD;EejsDD;IACE,qBAAA;IfmsDD;EepsDD;IACE,YAAA;IfssDD;EevsDD;IACE,qBAAA;IfysDD;Ee1sDD;IACE,oBAAA;If4sDD;EexsDD;IACE,aAAA;If0sDD;Ee1tDD;IACE,YAAA;If4tDD;Ee7tDD;IACE,oBAAA;If+tDD;EehuDD;IACE,oBAAA;IfkuDD;EenuDD;IACE,WAAA;IfquDD;EetuDD;IACE,oBAAA;IfwuDD;EezuDD;IACE,oBAAA;If2uDD;Ee5uDD;IACE,WAAA;If8uDD;Ee/uDD;IACE,oBAAA;IfivDD;EelvDD;IACE,oBAAA;IfovDD;EervDD;IACE,WAAA;IfuvDD;EexvDD;IACE,oBAAA;If0vDD;Ee3vDD;IACE,mBAAA;If6vDD;EezvDD;IACE,YAAA;If2vDD;Ee7uDD;IACE,mBAAA;If+uDD;EehvDD;IACE,2BAAA;IfkvDD;EenvDD;IACE,2BAAA;IfqvDD;EetvDD;IACE,kBAAA;IfwvDD;EezvDD;IACE,2BAAA;If2vDD;Ee5vDD;IACE,2BAAA;If8vDD;Ee/vDD;IACE,kBAAA;IfiwDD;EelwDD;IACE,2BAAA;IfowDD;EerwDD;IACE,2BAAA;IfuwDD;EexwDD;IACE,kBAAA;If0wDD;Ee3wDD;IACE,2BAAA;If6wDD;Ee9wDD;IACE,0BAAA;IfgxDD;EejxDD;IACE,iBAAA;IfmxDD;EACF;AaxwDD;EE9CI;IACE,aAAA;IfyzDH;EelzDD;IACE,aAAA;IfozDD;EerzDD;IACE,qBAAA;IfuzDD;EexzDD;IACE,qBAAA;If0zDD;Ee3zDD;IACE,YAAA;If6zDD;Ee9zDD;IACE,qBAAA;Ifg0DD;Eej0DD;IACE,qBAAA;Ifm0DD;Eep0DD;IACE,YAAA;Ifs0DD;Eev0DD;IACE,qBAAA;Ify0DD;Ee10DD;IACE,qBAAA;If40DD;Ee70DD;IACE,YAAA;If+0DD;Eeh1DD;IACE,qBAAA;Ifk1DD;Een1DD;IACE,oBAAA;Ifq1DD;Eev0DD;IACE,aAAA;Ify0DD;Ee10DD;IACE,qBAAA;If40DD;Ee70DD;IACE,qBAAA;If+0DD;Eeh1DD;IACE,YAAA;Ifk1DD;Een1DD;IACE,qBAAA;Ifq1DD;Eet1DD;IACE,qBAAA;Ifw1DD;Eez1DD;IACE,YAAA;If21DD;Ee51DD;IACE,qBAAA;If81DD;Ee/1DD;IACE,qBAAA;Ifi2DD;Eel2DD;IACE,YAAA;Ifo2DD;Eer2DD;IACE,qBAAA;Ifu2DD;Eex2DD;IACE,oBAAA;If02DD;Eet2DD;IACE,aAAA;Ifw2DD;Eex3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AAA;EACI,uBAAA;ErBqsFT;AoB9qFD;EClBI,gBAAA;EACA,2BAAA;ErBmsFH;AoB/qFD;ECrDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBuuFD;AqBruFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBuuFP;AqBruFC;;;EAGE,wBAAA;ErBuuFH;AqBluFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErB8uFT;AoBptFD;ECrBI,gBAAA;EACA,2BAAA;ErB4uFH;AoBptFD;ECzDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBgxFD;AqB9wFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBgxFP;AqB9wFC;;;EAGE,wBAAA;ErBgxFH;AqB3wFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBuxFT;AoBzvFD;ECzBI,gBAAA;EACA,2BAAA;ErBqxFH;AoBzvFD;EC7DE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErByzFD;AqBvzFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErByzFP;AqBvzFC;;;EAGE,wBAAA;ErByzFH;AqBpzFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBg0FT;AoB9xFD;EC7BI,gBAAA;EACA,2BAAA;ErB8zFH;AoB9xFD;ECjEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBk2FD;AqBh2FC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBk2FP;AqBh2FC;;;EAGE,wBAAA;ErBk2FH;AqB71FG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBy2FT;AoBn0FD;ECjCI,gBAAA;EACA,2BAAA;ErBu2FH;AoBn0FD;ECrEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB24FD;AqBz4FC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB24FP;AqBz4FC;;;EAGE,wBAAA;ErB24FH;AqBt4FG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBk5FT;AoBx2FD;ECrCI,gBAAA;EACA,2BAAA;ErBg5FH;AoBn2FD;EACE,gBAAA;EACA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","sourcesContent":[null,"/*! normalize.css v3.0.1 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n//    user zoom.\n//\n\nhtml {\n  font-family: sans-serif; // 1\n  -ms-text-size-adjust: 100%; // 2\n  -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n  margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block; // 1\n  vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n  display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n  background: transparent;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n  outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n  font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n  font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n  background: #ff0;\n  color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n  font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n  border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n  margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n  overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n//    Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit; // 1\n  font: inherit; // 2\n  margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n  overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n//    and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n//    `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button; // 2\n  cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n  line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box; // 1\n  padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n//    (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield; // 1\n  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box; // 2\n  box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n  border: 0; // 1\n  padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n  overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n  font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\ntd,\nth {\n  padding: 0;\n}\n","//\n// Basic print styles\n// --------------------------------------------------\n// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css\n\n@media print {\n\n  * {\n    text-shadow: none !important;\n    color: #000 !important; // Black prints faster: h5bp.com/s\n    background: transparent !important;\n    box-shadow: none !important;\n  }\n\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n\n  // Don't show links for images, or javascript/internal links\n  a[href^=\"javascript:\"]:after,\n  a[href^=\"#\"]:after {\n    content: \"\";\n  }\n\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n\n  thead {\n    display: table-header-group; // h5bp.com/t\n  }\n\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n\n  img {\n    max-width: 100% !important;\n  }\n\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n\n  // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\n  // Once fixed, we can just straight up remove this.\n  select {\n    background: #fff !important;\n  }\n\n  // Bootstrap components\n  .navbar {\n    display: none;\n  }\n  .table {\n    td,\n    th {\n      background-color: #fff !important;\n    }\n  }\n  .btn,\n  .dropup > .btn {\n    > .caret {\n      border-top-color: #000 !important;\n    }\n  }\n  .label {\n    border: 1px solid #000;\n  }\n\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table-bordered {\n    th,\n    td {\n      border: 1px solid #ddd !important;\n    }\n  }\n\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// <a href=\"#\"><span class=\"glyphicon glyphicon-star\"></span> Star</a>\n\n// Import the fonts\n@font-face {\n  font-family: 'Glyphicons Halflings';\n  src: url('@{icon-font-path}@{icon-font-name}.eot');\n  src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n       url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n       url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n       url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk               { &:before { content: \"\\2a\"; } }\n.glyphicon-plus                   { &:before { content: \"\\2b\"; } }\n.glyphicon-euro                   { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus                  { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud                  { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope               { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil                 { &:before { content: \"\\270f\"; } }\n.glyphicon-glass                  { &:before { content: \"\\e001\"; } }\n.glyphicon-music                  { &:before { content: \"\\e002\"; } }\n.glyphicon-search                 { &:before { content: \"\\e003\"; } }\n.glyphicon-heart                  { &:before { content: \"\\e005\"; } }\n.glyphicon-star                   { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty             { &:before { content: \"\\e007\"; } }\n.glyphicon-user                   { &:before { content: \"\\e008\"; } }\n.glyphicon-film                   { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large               { &:before { content: \"\\e010\"; } }\n.glyphicon-th                     { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list                { &:before { content: \"\\e012\"; } }\n.glyphicon-ok                     { &:before { content: \"\\e013\"; } }\n.glyphicon-remove                 { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in                { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out               { &:before { content: \"\\e016\"; } }\n.glyphicon-off                    { &:before { content: \"\\e017\"; } }\n.glyphicon-signal                 { &:before { content: \"\\e018\"; } }\n.glyphicon-cog                    { &:before { content: \"\\e019\"; } }\n.glyphicon-trash                  { &:before { content: \"\\e020\"; } }\n.glyphicon-home                   { &:before { content: \"\\e021\"; } }\n.glyphicon-file                   { &:before { content: \"\\e022\"; } }\n.glyphicon-time                   { &:before { content: \"\\e023\"; } }\n.glyphicon-road                   { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt           { &:before { content: \"\\e025\"; } }\n.glyphicon-download               { &:before { content: \"\\e026\"; } }\n.glyphicon-upload                 { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox                  { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle            { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat                 { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh                { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt               { &:before { content: \"\\e032\"; } }\n.glyphicon-lock                   { &:before { content: \"\\e033\"; } }\n.glyphicon-flag                   { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones             { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off             { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down            { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up              { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode                 { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode                { &:before { content: \"\\e040\"; } }\n.glyphicon-tag                    { &:before { content: \"\\e041\"; } }\n.glyphicon-tags                   { &:before { content: \"\\e042\"; } }\n.glyphicon-book                   { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark               { &:before { content: \"\\e044\"; } }\n.glyphicon-print                  { &:before { content: \"\\e045\"; } }\n.glyphicon-camera                 { &:before { content: \"\\e046\"; } }\n.glyphicon-font                   { &:before { content: \"\\e047\"; } }\n.glyphicon-bold                   { &:before { content: \"\\e048\"; } }\n.glyphicon-italic                 { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height            { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width             { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left             { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center           { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right            { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify          { &:before { content: \"\\e055\"; } }\n.glyphicon-list                   { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left            { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right           { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video         { &:before { content: \"\\e059\"; } }\n.glyphicon-picture                { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker             { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust                 { &:before { content: \"\\e063\"; } }\n.glyphicon-tint                   { &:before { content: \"\\e064\"; } }\n.glyphicon-edit                   { &:before { content: \"\\e065\"; } }\n.glyphicon-share                  { &:before { content: \"\\e066\"; } }\n.glyphicon-check                  { &:before { content: \"\\e067\"; } }\n.glyphicon-move                   { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward          { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward          { &:before { content: \"\\e070\"; } }\n.glyphicon-backward               { &:before { content: \"\\e071\"; } }\n.glyphicon-play                   { &:before { content: \"\\e072\"; } }\n.glyphicon-pause                  { &:before { content: \"\\e073\"; } }\n.glyphicon-stop                   { &:before { content: \"\\e074\"; } }\n.glyphicon-forward                { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward           { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward           { &:before { content: \"\\e077\"; } }\n.glyphicon-eject                  { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left           { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right          { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign              { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign             { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign            { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign                { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign          { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign              { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot             { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle          { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle              { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle             { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left             { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right            { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up               { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down             { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt              { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full            { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small           { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign       { &:before { content: \"\\e101\"; } }\n.glyphicon-gift                   { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf                   { &:before { content: \"\\e103\"; } }\n.glyphicon-fire                   { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open               { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close              { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign           { &:before { content: \"\\e107\"; } }\n.glyphicon-plane                  { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar               { &:before { content: \"\\e109\"; } }\n.glyphicon-random                 { &:before { content: \"\\e110\"; } }\n.glyphicon-comment                { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet                 { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up             { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down           { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet                { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart          { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close           { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open            { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical        { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal      { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd                    { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn               { &:before { content: \"\\e122\"; } }\n.glyphicon-bell                   { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate            { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up              { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down            { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right             { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left              { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up                { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down              { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right     { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left      { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up        { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down      { &:before { content: \"\\e134\"; } }\n.glyphicon-globe                  { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench                 { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks                  { &:before { content: \"\\e137\"; } }\n.glyphicon-filter                 { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase              { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen             { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard              { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip              { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty            { &:before { content: \"\\e143\"; } }\n.glyphicon-link                   { &:before { content: \"\\e144\"; } }\n.glyphicon-phone                  { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin                { &:before { content: \"\\e146\"; } }\n.glyphicon-usd                    { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp                    { &:before { content: \"\\e149\"; } }\n.glyphicon-sort                   { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet       { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt   { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order          { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt      { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes     { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked              { &:before { content: \"\\e157\"; } }\n.glyphicon-expand                 { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down          { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up            { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in                 { &:before { content: \"\\e161\"; } }\n.glyphicon-flash                  { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out                { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window             { &:before { content: \"\\e164\"; } }\n.glyphicon-record                 { &:before { content: \"\\e165\"; } }\n.glyphicon-save                   { &:before { content: \"\\e166\"; } }\n.glyphicon-open                   { &:before { content: \"\\e167\"; } }\n.glyphicon-saved                  { &:before { content: \"\\e168\"; } }\n.glyphicon-import                 { &:before { content: \"\\e169\"; } }\n.glyphicon-export                 { &:before { content: \"\\e170\"; } }\n.glyphicon-send                   { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk            { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved           { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove          { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save            { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open            { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card            { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer               { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery                { &:before { content: \"\\e179\"; } }\n.glyphicon-header                 { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed             { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone               { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt              { &:before { content: \"\\e183\"; } }\n.glyphicon-tower                  { &:before { content: \"\\e184\"; } }\n.glyphicon-stats                  { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video               { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video               { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles              { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo           { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby            { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1              { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1              { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1              { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark         { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark      { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download         { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload           { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer           { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous         { &:before { content: \"\\e200\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n  .box-sizing(border-box);\n}\n*:before,\n*:after {\n  .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n  font-size: 10px;\n  -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n  font-family: @font-family-base;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @text-color;\n  background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\n\n// Links\n\na {\n  color: @link-color;\n  text-decoration: none;\n\n  &:hover,\n  &:focus {\n    color: @link-hover-color;\n    text-decoration: underline;\n  }\n\n  &:focus {\n    .tab-focus();\n  }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n  margin: 0;\n}\n\n\n// Images\n\nimg {\n  vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n  .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n  border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n  padding: @thumbnail-padding;\n  line-height: @line-height-base;\n  background-color: @thumbnail-bg;\n  border: 1px solid @thumbnail-border;\n  border-radius: @thumbnail-border-radius;\n  .transition(all .2s ease-in-out);\n\n  // Keep them at most 100% wide\n  .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n  border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n  margin-top:    @line-height-computed;\n  margin-bottom: @line-height-computed;\n  border: 0;\n  border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0,0,0,0);\n  border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n  &:active,\n  &:focus {\n    position: static;\n    width: auto;\n    height: auto;\n    margin: 0;\n    overflow: visible;\n    clip: auto;\n  }\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n  -webkit-animation: @animation;\n       -o-animation: @animation;\n          animation: @animation;\n}\n.animation-name(@name) {\n  -webkit-animation-name: @name;\n          animation-name: @name;\n}\n.animation-duration(@duration) {\n  -webkit-animation-duration: @duration;\n          animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n  -webkit-animation-timing-function: @timing-function;\n          animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n  -webkit-animation-delay: @delay;\n          animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n  -webkit-animation-iteration-count: @iteration-count;\n          animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n  -webkit-animation-direction: @direction;\n          animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n  -webkit-animation-fill-mode: @fill-mode;\n          animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n  -webkit-backface-visibility: @visibility;\n     -moz-backface-visibility: @visibility;\n          backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n  -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n          box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n  -webkit-box-sizing: @boxmodel;\n     -moz-box-sizing: @boxmodel;\n          box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n  -webkit-column-count: @column-count;\n     -moz-column-count: @column-count;\n          column-count: @column-count;\n  -webkit-column-gap: @column-gap;\n     -moz-column-gap: @column-gap;\n          column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n  word-wrap: break-word;\n  -webkit-hyphens: @mode;\n     -moz-hyphens: @mode;\n      -ms-hyphens: @mode; // IE10+\n       -o-hyphens: @mode;\n          hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n  &::-moz-placeholder           { color: @color;   // Firefox\n                                  opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n  &:-ms-input-placeholder       { color: @color; } // Internet Explorer 10+\n  &::-webkit-input-placeholder  { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n  -webkit-transform: scale(@ratio);\n      -ms-transform: scale(@ratio); // IE9 only\n       -o-transform: scale(@ratio);\n          transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n  -webkit-transform: scale(@ratioX, @ratioY);\n      -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n       -o-transform: scale(@ratioX, @ratioY);\n          transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n  -webkit-transform: scaleX(@ratio);\n      -ms-transform: scaleX(@ratio); // IE9 only\n       -o-transform: scaleX(@ratio);\n          transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n  -webkit-transform: scaleY(@ratio);\n      -ms-transform: scaleY(@ratio); // IE9 only\n       -o-transform: scaleY(@ratio);\n          transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n  -webkit-transform: skewX(@x) skewY(@y);\n      -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n       -o-transform: skewX(@x) skewY(@y);\n          transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n  -webkit-transform: translate(@x, @y);\n      -ms-transform: translate(@x, @y); // IE9 only\n       -o-transform: translate(@x, @y);\n          transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n  -webkit-transform: translate3d(@x, @y, @z);\n          transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n  -webkit-transform: rotate(@degrees);\n      -ms-transform: rotate(@degrees); // IE9 only\n       -o-transform: rotate(@degrees);\n          transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n  -webkit-transform: rotateX(@degrees);\n      -ms-transform: rotateX(@degrees); // IE9 only\n       -o-transform: rotateX(@degrees);\n          transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n  -webkit-transform: rotateY(@degrees);\n      -ms-transform: rotateY(@degrees); // IE9 only\n       -o-transform: rotateY(@degrees);\n          transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n  -webkit-perspective: @perspective;\n     -moz-perspective: @perspective;\n          perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n  -webkit-perspective-origin: @perspective;\n     -moz-perspective-origin: @perspective;\n          perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n  -webkit-transform-origin: @origin;\n     -moz-transform-origin: @origin;\n      -ms-transform-origin: @origin; // IE9 only\n          transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n  -webkit-transition: @transition;\n       -o-transition: @transition;\n          transition: @transition;\n}\n.transition-property(@transition-property) {\n  -webkit-transition-property: @transition-property;\n          transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n  -webkit-transition-delay: @transition-delay;\n          transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n  -webkit-transition-duration: @transition-duration;\n          transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n  -webkit-transition-timing-function: @timing-function;\n          transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n  -webkit-transition: -webkit-transform @transition;\n     -moz-transition: -moz-transform @transition;\n       -o-transition: -o-transform @transition;\n          transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n  -webkit-user-select: @select;\n     -moz-user-select: @select;\n      -ms-user-select: @select; // IE10+\n          user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n  // Default\n  outline: thin dotted;\n  // WebKit\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n  display: @display;\n  width: 100% \\9; // Force IE10 and below to size SVG images correctly\n  max-width: 100%; // Part 1: Set a maximum relative to the parent\n  height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n  background-image: url(\"@{file-1x}\");\n\n  @media\n  only screen and (-webkit-min-device-pixel-ratio: 2),\n  only screen and (   min--moz-device-pixel-ratio: 2),\n  only screen and (     -o-min-device-pixel-ratio: 2/1),\n  only screen and (        min-device-pixel-ratio: 2),\n  only screen and (                min-resolution: 192dpi),\n  only screen and (                min-resolution: 2dppx) {\n    background-image: url(\"@{file-2x}\");\n    background-size: @width-1x @height-1x;\n  }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  font-family: @headings-font-family;\n  font-weight: @headings-font-weight;\n  line-height: @headings-line-height;\n  color: @headings-color;\n\n  small,\n  .small {\n    font-weight: normal;\n    line-height: 1;\n    color: @headings-small-color;\n  }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n  margin-top: @line-height-computed;\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 65%;\n  }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n  margin-top: (@line-height-computed / 2);\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 75%;\n  }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n  margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n  margin-bottom: @line-height-computed;\n  font-size: floor((@font-size-base * 1.15));\n  font-weight: 300;\n  line-height: 1.4;\n\n  @media (min-width: @screen-sm-min) {\n    font-size: (@font-size-base * 1.5);\n  }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n  font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\n// Undo browser default styling\ncite {\n  font-style: normal;\n}\n\nmark,\n.mark {\n  background-color: @state-warning-bg;\n  padding: .2em;\n}\n\n// Alignment\n.text-left           { text-align: left; }\n.text-right          { text-align: right; }\n.text-center         { text-align: center; }\n.text-justify        { text-align: justify; }\n.text-nowrap         { white-space: nowrap; }\n\n// Transformation\n.text-lowercase      { text-transform: lowercase; }\n.text-uppercase      { text-transform: uppercase; }\n.text-capitalize     { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n  color: @text-muted;\n}\n.text-primary {\n  .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n  .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n  .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n  .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n  .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n  // Given the contrast here, this is the only class to have its color inverted\n  // automatically.\n  color: #fff;\n  .bg-variant(@brand-primary);\n}\n.bg-success {\n  .bg-variant(@state-success-bg);\n}\n.bg-info {\n  .bg-variant(@state-info-bg);\n}\n.bg-warning {\n  .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n  .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n  padding-bottom: ((@line-height-computed / 2) - 1);\n  margin: (@line-height-computed * 2) 0 @line-height-computed;\n  border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n  margin-top: 0;\n  margin-bottom: (@line-height-computed / 2);\n  ul,\n  ol {\n    margin-bottom: 0;\n  }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n  .list-unstyled();\n  margin-left: -5px;\n\n  > li {\n    display: inline-block;\n    padding-left: 5px;\n    padding-right: 5px;\n  }\n}\n\n// Description Lists\ndl {\n  margin-top: 0; // Remove browser default\n  margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n  line-height: @line-height-base;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n  dd {\n    &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    dt {\n      float: left;\n      width: (@dl-horizontal-offset - 20);\n      clear: left;\n      text-align: right;\n      .text-overflow();\n    }\n    dd {\n      margin-left: @dl-horizontal-offset;\n    }\n  }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\n// Blockquotes\nblockquote {\n  padding: (@line-height-computed / 2) @line-height-computed;\n  margin: 0 0 @line-height-computed;\n  font-size: @blockquote-font-size;\n  border-left: 5px solid @blockquote-border-color;\n\n  p,\n  ul,\n  ol {\n    &:last-child {\n      margin-bottom: 0;\n    }\n  }\n\n  // Note: Deprecated small and .small as of v3.1.0\n  // Context: https://github.com/twbs/bootstrap/issues/11660\n  footer,\n  small,\n  .small {\n    display: block;\n    font-size: 80%; // back to default font-size\n    line-height: @line-height-base;\n    color: @blockquote-small-color;\n\n    &:before {\n      content: '\\2014 \\00A0'; // em dash, nbsp\n    }\n  }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid @blockquote-border-color;\n  border-left: 0;\n  text-align: right;\n\n  // Account for citation\n  footer,\n  small,\n  .small {\n    &:before { content: ''; }\n    &:after {\n      content: '\\00A0 \\2014'; // nbsp, em dash\n    }\n  }\n}\n\n// Quotes\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\n\n// Addresses\naddress {\n  margin-bottom: @line-height-computed;\n  font-style: normal;\n  line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n  color: @color;\n  a&:hover {\n    color: darken(@color, 10%);\n  }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n  background-color: @color;\n  a&:hover {\n    background-color: darken(@color, 10%);\n  }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n  font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @code-color;\n  background-color: @code-bg;\n  border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @kbd-color;\n  background-color: @kbd-bg;\n  border-radius: @border-radius-small;\n  box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n  kbd {\n    padding: 0;\n    font-size: 100%;\n    box-shadow: none;\n  }\n}\n\n// Blocks of code\npre {\n  display: block;\n  padding: ((@line-height-computed - 1) / 2);\n  margin: 0 0 (@line-height-computed / 2);\n  font-size: (@font-size-base - 1); // 14px to 13px\n  line-height: @line-height-base;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: @pre-color;\n  background-color: @pre-bg;\n  border: 1px solid @pre-border-color;\n  border-radius: @border-radius-base;\n\n  // Account for some code outputs that place code tags in pre tags\n  code {\n    padding: 0;\n    font-size: inherit;\n    color: inherit;\n    white-space: pre-wrap;\n    background-color: transparent;\n    border-radius: 0;\n  }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n  max-height: @pre-scrollable-max-height;\n  overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n  .container-fixed();\n\n  @media (min-width: @screen-sm-min) {\n    width: @container-sm;\n  }\n  @media (min-width: @screen-md-min) {\n    width: @container-md;\n  }\n  @media (min-width: @screen-lg-min) {\n    width: @container-lg;\n  }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n  .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n  .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n  .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n  .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n  .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n  &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n  margin-left:  (@gutter / -2);\n  margin-right: (@gutter / -2);\n  &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  float: left;\n  width: percentage((@columns / @grid-columns));\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n  margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n  left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n  right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  @media (min-width: @screen-sm-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-offset(@columns) {\n  @media (min-width: @screen-sm-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-push(@columns) {\n  @media (min-width: @screen-sm-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-pull(@columns) {\n  @media (min-width: @screen-sm-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  @media (min-width: @screen-md-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-offset(@columns) {\n  @media (min-width: @screen-md-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-push(@columns) {\n  @media (min-width: @screen-md-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-pull(@columns) {\n  @media (min-width: @screen-md-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  @media (min-width: @screen-lg-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-offset(@columns) {\n  @media (min-width: @screen-lg-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-push(@columns) {\n  @media (min-width: @screen-lg-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-pull(@columns) {\n  @media (min-width: @screen-lg-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n  // Common styles for all sizes of grid columns, widths 1-12\n  .col(@index) when (@index = 1) { // initial\n    @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n    .col((@index + 1), @item);\n  }\n  .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n    @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n    .col((@index + 1), ~\"@{list}, @{item}\");\n  }\n  .col(@index, @list) when (@index > @grid-columns) { // terminal\n    @{list} {\n      position: relative;\n      // Prevent columns from collapsing when empty\n      min-height: 1px;\n      // Inner gutter via padding\n      padding-left:  (@grid-gutter-width / 2);\n      padding-right: (@grid-gutter-width / 2);\n    }\n  }\n  .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n  .col(@index) when (@index = 1) { // initial\n    @item: ~\".col-@{class}-@{index}\";\n    .col((@index + 1), @item);\n  }\n  .col(@index, @list) when (@index =< @grid-columns) { // general\n    @item: ~\".col-@{class}-@{index}\";\n    .col((@index + 1), ~\"@{list}, @{item}\");\n  }\n  .col(@index, @list) when (@index > @grid-columns) { // terminal\n    @{list} {\n      float: left;\n    }\n  }\n  .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n  .col-@{class}-@{index} {\n    width: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n  .col-@{class}-push-@{index} {\n    left: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n  .col-@{class}-push-0 {\n    left: auto;\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n  .col-@{class}-pull-@{index} {\n    right: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n  .col-@{class}-pull-0 {\n    right: auto;\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n  .col-@{class}-offset-@{index} {\n    margin-left: percentage((@index / @grid-columns));\n  }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n  .calc-grid-column(@index, @class, @type);\n  // next iteration\n  .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n  .float-grid-columns(@class);\n  .loop-grid-columns(@grid-columns, @class, width);\n  .loop-grid-columns(@grid-columns, @class, pull);\n  .loop-grid-columns(@grid-columns, @class, push);\n  .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n  background-color: @table-bg;\n}\nth {\n  text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: @line-height-computed;\n  // Cells\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-cell-padding;\n        line-height: @line-height-base;\n        vertical-align: top;\n        border-top: 1px solid @table-border-color;\n      }\n    }\n  }\n  // Bottom align for column headings\n  > thead > tr > th {\n    vertical-align: bottom;\n    border-bottom: 2px solid @table-border-color;\n  }\n  // Remove top border from thead by default\n  > caption + thead,\n  > colgroup + thead,\n  > thead:first-child {\n    > tr:first-child {\n      > th,\n      > td {\n        border-top: 0;\n      }\n    }\n  }\n  // Account for multiple tbody instances\n  > tbody + tbody {\n    border-top: 2px solid @table-border-color;\n  }\n\n  // Nesting\n  .table {\n    background-color: @body-bg;\n  }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-condensed-cell-padding;\n      }\n    }\n  }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n  border: 1px solid @table-border-color;\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        border: 1px solid @table-border-color;\n      }\n    }\n  }\n  > thead > tr {\n    > th,\n    > td {\n      border-bottom-width: 2px;\n    }\n  }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n  > tbody > tr:nth-child(odd) {\n    > td,\n    > th {\n      background-color: @table-bg-accent;\n    }\n  }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n  > tbody > tr:hover {\n    > td,\n    > th {\n      background-color: @table-bg-hover;\n    }\n  }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n  position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n  float: none;\n  display: table-column;\n}\ntable {\n  td,\n  th {\n    &[class*=\"col-\"] {\n      position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n      float: none;\n      display: table-cell;\n    }\n  }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n  @media screen and (max-width: @screen-xs-max) {\n    width: 100%;\n    margin-bottom: (@line-height-computed * 0.75);\n    overflow-y: hidden;\n    overflow-x: auto;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid @table-border-color;\n    -webkit-overflow-scrolling: touch;\n\n    // Tighten up spacing\n    > .table {\n      margin-bottom: 0;\n\n      // Ensure the content doesn't wrap\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th,\n          > td {\n            white-space: nowrap;\n          }\n        }\n      }\n    }\n\n    // Special overrides for the bordered tables\n    > .table-bordered {\n      border: 0;\n\n      // Nuke the appropriate borders so that the parent can handle them\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th:first-child,\n          > td:first-child {\n            border-left: 0;\n          }\n          > th:last-child,\n          > td:last-child {\n            border-right: 0;\n          }\n        }\n      }\n\n      // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n      // chances are there will be only one `tr` in a `thead` and that would\n      // remove the border altogether.\n      > tbody,\n      > tfoot {\n        > tr:last-child {\n          > th,\n          > td {\n            border-bottom: 0;\n          }\n        }\n      }\n\n    }\n  }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n  // Exact selectors below required to override `.table-striped` and prevent\n  // inheritance to nested tables.\n  .table > thead > tr,\n  .table > tbody > tr,\n  .table > tfoot > tr {\n    > td.@{state},\n    > th.@{state},\n    &.@{state} > td,\n    &.@{state} > th {\n      background-color: @background;\n    }\n  }\n\n  // Hover states for `.table-hover`\n  // Note: this is not available for cells or rows within `thead` or `tfoot`.\n  .table-hover > tbody > tr {\n    > td.@{state}:hover,\n    > th.@{state}:hover,\n    &.@{state}:hover > td,\n    &:hover > .@{state},\n    &.@{state}:hover > th {\n      background-color: darken(@background, 5%);\n    }\n  }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n  // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n  // so we reset that to ensure it behaves more like a standard block element.\n  // See https://github.com/twbs/bootstrap/issues/12359.\n  min-width: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: @line-height-computed;\n  font-size: (@font-size-base * 1.5);\n  line-height: inherit;\n  color: @legend-color;\n  border: 0;\n  border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n  display: inline-block;\n  max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n  .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9; // IE8-9\n  line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n  display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  .tab-focus();\n}\n\n// Adjust output element\noutput {\n  display: block;\n  padding-top: (@padding-base-vertical + 1);\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n  background-color: @input-bg;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid @input-border;\n  border-radius: @input-border-radius;\n  .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n  .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n  // Customize the `:focus` state to imitate native WebKit styles.\n  .form-control-focus();\n\n  // Placeholder\n  .placeholder();\n\n  // Disabled and read-only inputs\n  //\n  // HTML5 says that controls under a fieldset > legend:first-child won't be\n  // disabled if the fieldset is disabled. Due to implementation difficulty, we\n  // don't honor that edge case; we style them as disabled anyway.\n  &[disabled],\n  &[readonly],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    background-color: @input-bg-disabled;\n    opacity: 1; // iOS fix for unreadable disabled content\n  }\n\n  // Reset height for `textarea`s\n  textarea& {\n    height: auto;\n  }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned.\n// As a workaround, we set a pixel line-height that matches the\n// given height of the input. Since this fucks up everything else, we have to\n// appropriately reset it for Internet Explorer and the size variations.\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n  line-height: @input-height-base;\n  // IE8+ misaligns the text within date inputs, so we reset\n  line-height: @line-height-base ~\"\\0\";\n\n  &.input-sm {\n    line-height: @input-height-small;\n  }\n  &.input-lg {\n    line-height: @input-height-large;\n  }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n  margin-bottom: 15px;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  min-height: @line-height-computed; // clear the floating input if there is no label text\n  margin-top: 10px;\n  margin-bottom: 10px;\n\n  label {\n    padding-left: 20px;\n    margin-bottom: 0;\n    font-weight: normal;\n    cursor: pointer;\n  }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-left: -20px;\n  margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  vertical-align: middle;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because <label>s don't inherit their parent's `cursor`.\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  &[disabled],\n  &.disabled,\n  fieldset[disabled] & {\n    cursor: not-allowed;\n  }\n}\n// These classes are used directly on <label>s\n.radio-inline,\n.checkbox-inline {\n  &.disabled,\n  fieldset[disabled] & {\n    cursor: not-allowed;\n  }\n}\n// These classes are used on elements with <label> descendants\n.radio,\n.checkbox {\n  &.disabled,\n  fieldset[disabled] & {\n    label {\n      cursor: not-allowed;\n    }\n  }\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n  // Size it appropriately next to real form controls\n  padding-top: (@padding-base-vertical + 1);\n  padding-bottom: (@padding-base-vertical + 1);\n  // Remove default margin from `p`\n  margin-bottom: 0;\n\n  &.input-lg,\n  &.input-sm {\n    padding-left: 0;\n    padding-right: 0;\n  }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n\n.input-sm {\n  .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n.input-lg {\n  .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n  // Enable absolute positioning\n  position: relative;\n\n  // Ensure icons don't overlap text\n  .form-control {\n    padding-right: (@input-height-base * 1.25);\n  }\n}\n// Feedback icon (requires .glyphicon classes)\n.form-control-feedback {\n  position: absolute;\n  top: (@line-height-computed + 5); // Height of the `label` and its margin\n  right: 0;\n  z-index: 2; // Ensure icon is above input groups\n  display: block;\n  width: @input-height-base;\n  height: @input-height-base;\n  line-height: @input-height-base;\n  text-align: center;\n}\n.input-lg + .form-control-feedback {\n  width: @input-height-large;\n  height: @input-height-large;\n  line-height: @input-height-large;\n}\n.input-sm + .form-control-feedback {\n  width: @input-height-small;\n  height: @input-height-small;\n  line-height: @input-height-small;\n}\n\n// Feedback states\n.has-success {\n  .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n  .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n  .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n\n// Reposition feedback icon if label is hidden with \"screenreader only\" state\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n  display: block; // account for any element using help-block\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n  // Kick in the inline\n  @media (min-width: @screen-sm-min) {\n    // Inline-block all the things for \"inline\"\n    .form-group {\n      display: inline-block;\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // In navbar-form, allow folks to *not* use `.form-group`\n    .form-control {\n      display: inline-block;\n      width: auto; // Prevent labels from stacking above inputs in `.form-group`\n      vertical-align: middle;\n    }\n\n    .input-group {\n      display: inline-table;\n      vertical-align: middle;\n\n      .input-group-addon,\n      .input-group-btn,\n      .form-control {\n        width: auto;\n      }\n    }\n\n    // Input groups need that 100% width though\n    .input-group > .form-control {\n      width: 100%;\n    }\n\n    .control-label {\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // Remove default margin on radios/checkboxes that were used for stacking, and\n    // then undo the floating of radios and checkboxes to match (which also avoids\n    // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).\n    .radio,\n    .checkbox {\n      display: inline-block;\n      margin-top: 0;\n      margin-bottom: 0;\n      vertical-align: middle;\n\n      label {\n        padding-left: 0;\n      }\n    }\n    .radio input[type=\"radio\"],\n    .checkbox input[type=\"checkbox\"] {\n      position: relative;\n      margin-left: 0;\n    }\n\n    // Validation states\n    //\n    // Reposition the icon because it's now within a grid column and columns have\n    // `position: relative;` on them. Also accounts for the grid gutter padding.\n    .has-feedback .form-control-feedback {\n      top: 0;\n    }\n  }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n  // Consistent vertical alignment of radios and checkboxes\n  //\n  // Labels also get some reset styles, but that is scoped to a media query below.\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline {\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n  }\n  // Account for padding we're adding to ensure the alignment and of help text\n  // and other content below items\n  .radio,\n  .checkbox {\n    min-height: (@line-height-computed + (@padding-base-vertical + 1));\n  }\n\n  // Make form groups behave like rows\n  .form-group {\n    .make-row();\n  }\n\n  // Reset spacing and right align labels, but scope to media queries so that\n  // labels on narrow viewports stack the same as a default form example.\n  @media (min-width: @screen-sm-min) {\n    .control-label {\n      text-align: right;\n      margin-bottom: 0;\n      padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n    }\n  }\n\n  // Validation states\n  //\n  // Reposition the icon because it's now within a grid column and columns have\n  // `position: relative;` on them. Also accounts for the grid gutter padding.\n  .has-feedback .form-control-feedback {\n    top: 0;\n    right: (@grid-gutter-width / 2);\n  }\n\n  // Form group sizes\n  //\n  // Quick utility class for applying `.input-lg` and `.input-sm` styles to the\n  // inputs and labels within a `.form-group`.\n  .form-group-lg {\n    @media (min-width: @screen-sm-min) {\n      .control-label {\n        padding-top: ((@padding-large-vertical * @line-height-large) + 1);\n      }\n    }\n    .form-control {\n      &:extend(.input-lg);\n    }\n  }\n  .form-group-sm {\n    @media (min-width: @screen-sm-min) {\n      .control-label {\n        padding-top: (@padding-small-vertical + 1);\n      }\n    }\n    .form-control {\n      &:extend(.input-sm);\n    }\n  }\n}\n","// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n  // Color the label and help text\n  .help-block,\n  .control-label,\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline  {\n    color: @text-color;\n  }\n  // Set the border and box shadow on specific inputs to match\n  .form-control {\n    border-color: @border-color;\n    .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n    &:focus {\n      border-color: darken(@border-color, 10%);\n      @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n      .box-shadow(@shadow);\n    }\n  }\n  // Set validation states also for addons\n  .input-group-addon {\n    color: @text-color;\n    border-color: @border-color;\n    background-color: @background-color;\n  }\n  // Optional feedback icon\n  .form-control-feedback {\n    color: @text-color;\n  }\n}\n\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-border-focus` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n.form-control-focus(@color: @input-border-focus) {\n  @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n  &:focus {\n    border-color: @color;\n    outline: 0;\n    .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n  }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n  height: @input-height;\n  padding: @padding-vertical @padding-horizontal;\n  font-size: @font-size;\n  line-height: @line-height;\n  border-radius: @border-radius;\n\n  select& {\n    height: @input-height;\n    line-height: @input-height;\n  }\n\n  textarea&,\n  select[multiple]& {\n    height: auto;\n  }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n  display: inline-block;\n  margin-bottom: 0; // For input.btn\n  font-weight: @btn-font-weight;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  white-space: nowrap;\n  .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\n  .user-select(none);\n\n  &,\n  &:active,\n  &.active {\n    &:focus {\n      .tab-focus();\n    }\n  }\n\n  &:hover,\n  &:focus {\n    color: @btn-default-color;\n    text-decoration: none;\n  }\n\n  &:active,\n  &.active {\n    outline: 0;\n    background-image: none;\n    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    pointer-events: none; // Future-proof disabling of clicks\n    .opacity(.65);\n    .box-shadow(none);\n  }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n  .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n  .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n  .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n  .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n  .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n  .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n  color: @link-color;\n  font-weight: normal;\n  cursor: pointer;\n  border-radius: 0;\n\n  &,\n  &:active,\n  &[disabled],\n  fieldset[disabled] & {\n    background-color: transparent;\n    .box-shadow(none);\n  }\n  &,\n  &:hover,\n  &:focus,\n  &:active {\n    border-color: transparent;\n  }\n  &:hover,\n  &:focus {\n    color: @link-hover-color;\n    text-decoration: underline;\n    background-color: transparent;\n  }\n  &[disabled],\n  fieldset[disabled] & {\n    &:hover,\n    &:focus {\n      color: @btn-link-disabled-color;\n      text-decoration: none;\n    }\n  }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n  // line-height: ensure even-numbered height of button next to large input\n  .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n.btn-sm {\n  // line-height: ensure proper height of button next to small input\n  .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n.btn-xs {\n  .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n  display: block;\n  width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n  &.btn-block {\n    width: 100%;\n  }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n  color: @color;\n  background-color: @background;\n  border-color: @border;\n\n  &:hover,\n  &:focus,\n  &:active,\n  &.active,\n  .open > .dropdown-toggle& {\n    color: @color;\n    background-color: darken(@background, 10%);\n        border-color: darken(@border, 12%);\n  }\n  &:active,\n  &.active,\n  .open > .dropdown-toggle& {\n    background-image: none;\n  }\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    &,\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      background-color: @background;\n          border-color: @border;\n    }\n  }\n\n  .badge {\n    color: @background;\n    background-color: @color;\n  }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n  padding: @padding-vertical @padding-horizontal;\n  font-size: @font-size;\n  line-height: @line-height;\n  border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n  opacity: @opacity;\n  // IE8 filter\n  @opacity-ie: (@opacity * 100);\n  filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n  opacity: 0;\n  .transition(opacity .15s linear);\n  &.in {\n    opacity: 1;\n  }\n}\n\n.collapse {\n  display: none;\n\n  &.in      { display: block; }\n  tr&.in    { display: table-row; }\n  tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  .transition(height .35s ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top:   @caret-width-base solid;\n  border-right: @caret-width-base solid transparent;\n  border-left:  @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropdown {\n  position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: @zindex-dropdown;\n  display: none; // none by default, but block on \"open\" of the menu\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0; // override default ul\n  list-style: none;\n  font-size: @font-size-base;\n  text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n  background-color: @dropdown-bg;\n  border: 1px solid @dropdown-fallback-border; // IE8 fallback\n  border: 1px solid @dropdown-border;\n  border-radius: @border-radius-base;\n  .box-shadow(0 6px 12px rgba(0,0,0,.175));\n  background-clip: padding-box;\n\n  // Aligns the dropdown menu to right\n  //\n  // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n  &.pull-right {\n    right: 0;\n    left: auto;\n  }\n\n  // Dividers (basically an hr) within the dropdown\n  .divider {\n    .nav-divider(@dropdown-divider-bg);\n  }\n\n  // Links within the dropdown menu\n  > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: @line-height-base;\n    color: @dropdown-link-color;\n    white-space: nowrap; // prevent links from randomly breaking onto new lines\n  }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    color: @dropdown-link-hover-color;\n    background-color: @dropdown-link-hover-bg;\n  }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-active-color;\n    text-decoration: none;\n    outline: 0;\n    background-color: @dropdown-link-active-bg;\n  }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-disabled-color;\n  }\n}\n// Nuke hover/focus effects\n.dropdown-menu > .disabled > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    background-color: transparent;\n    background-image: none; // Remove CSS gradient\n    .reset-filter();\n    cursor: not-allowed;\n  }\n}\n\n// Open state for the dropdown\n.open {\n  // Show the menu\n  > .dropdown-menu {\n    display: block;\n  }\n\n  // Remove the outline when :focus is triggered\n  > a {\n    outline: 0;\n  }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n  left: auto; // Reset the default from `.dropdown-menu`\n  right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n  left: 0;\n  right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: @font-size-small;\n  line-height: @line-height-base;\n  color: @dropdown-header-color;\n  white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n  // Reverse the caret\n  .caret {\n    border-top: 0;\n    border-bottom: @caret-width-base solid;\n    content: \"\";\n  }\n  // Different positioning for bottom up menu\n  .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n    margin-bottom: 1px;\n  }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-right {\n    .dropdown-menu {\n      .dropdown-menu-right();\n    }\n    // Necessary for overrides of the default right aligned menu.\n    // Will remove come v4 in all likelihood.\n    .dropdown-menu-left {\n      .dropdown-menu-left();\n    }\n  }\n}\n\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n  height: 1px;\n  margin: ((@line-height-computed / 2) - 1) 0;\n  overflow: hidden;\n  background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n  filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; // match .btn alignment given font-size hack above\n  > .btn {\n    position: relative;\n    float: left;\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      z-index: 2;\n    }\n    &:focus {\n      // Remove focus outline when dropdown JS adds it after closing the menu\n      outline: 0;\n    }\n  }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n  .btn + .btn,\n  .btn + .btn-group,\n  .btn-group + .btn,\n  .btn-group + .btn-group {\n    margin-left: -1px;\n  }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n  margin-left: -5px; // Offset the first child's margin\n  &:extend(.clearfix all);\n\n  .btn-group,\n  .input-group {\n    float: left;\n  }\n  > .btn,\n  > .btn-group,\n  > .input-group {\n    margin-left: 5px;\n  }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n  margin-left: 0;\n  &:not(:last-child):not(.dropdown-toggle) {\n    .border-right-radius(0);\n  }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-right-radius(0);\n  }\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n  .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n  padding-left: 8px;\n  padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n  .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n  // Show no shadow for `.btn-link` since it has no other button styles.\n  &.btn-link {\n    .box-shadow(none);\n  }\n}\n\n\n// Reposition the caret\n.btn .caret {\n  margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n  border-width: @caret-width-large @caret-width-large 0;\n  border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n  border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n  > .btn,\n  > .btn-group,\n  > .btn-group > .btn {\n    display: block;\n    float: none;\n    width: 100%;\n    max-width: 100%;\n  }\n\n  // Clear floats so dropdown menus can be properly placed\n  > .btn-group {\n    &:extend(.clearfix all);\n    > .btn {\n      float: none;\n    }\n  }\n\n  > .btn + .btn,\n  > .btn + .btn-group,\n  > .btn-group + .btn,\n  > .btn-group + .btn-group {\n    margin-top: -1px;\n    margin-left: 0;\n  }\n}\n\n.btn-group-vertical > .btn {\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n  &:first-child:not(:last-child) {\n    border-top-right-radius: @border-radius-base;\n    .border-bottom-radius(0);\n  }\n  &:last-child:not(:first-child) {\n    border-bottom-left-radius: @border-radius-base;\n    .border-top-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-bottom-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  .border-top-radius(0);\n}\n\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n  > .btn,\n  > .btn-group {\n    float: none;\n    display: table-cell;\n    width: 1%;\n  }\n  > .btn-group .btn {\n    width: 100%;\n  }\n\n  > .btn-group .dropdown-menu {\n    left: auto;\n  }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `opacity`. We cannot\n// use `display: none;` or `visibility: hidden;` as that also hides the popover.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 for more.\n\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  position: absolute;\n  z-index: -1;\n  .opacity(0);\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n  border-top-right-radius: @radius;\n   border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n  border-bottom-right-radius: @radius;\n     border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n  border-bottom-right-radius: @radius;\n   border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n  border-bottom-left-radius: @radius;\n     border-top-left-radius: @radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n  position: relative; // For dropdowns\n  display: table;\n  border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n  // Undo padding and float of grid classes\n  &[class*=\"col-\"] {\n    float: none;\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  .form-control {\n    // Ensure that the input is always above the *appended* addon button for\n    // proper border colors.\n    position: relative;\n    z-index: 2;\n\n    // IE9 fubars the placeholder attribute in text inputs and the arrows on\n    // select elements in input groups. To fix it, we float the input. Details:\n    // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n    float: left;\n\n    width: 100%;\n    margin-bottom: 0;\n  }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  font-weight: normal;\n  line-height: 1;\n  color: @input-color;\n  text-align: center;\n  background-color: @input-group-addon-bg;\n  border: 1px solid @input-group-addon-border-color;\n  border-radius: @border-radius-base;\n\n  // Sizing\n  &.input-sm {\n    padding: @padding-small-vertical @padding-small-horizontal;\n    font-size: @font-size-small;\n    border-radius: @border-radius-small;\n  }\n  &.input-lg {\n    padding: @padding-large-vertical @padding-large-horizontal;\n    font-size: @font-size-large;\n    border-radius: @border-radius-large;\n  }\n\n  // Nuke default margins from checkboxes and radios to vertically center within.\n  input[type=\"radio\"],\n  input[type=\"checkbox\"] {\n    margin-top: 0;\n  }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  .border-right-radius(0);\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  .border-left-radius(0);\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n  position: relative;\n  // Jankily prevent input button groups from wrapping with `white-space` and\n  // `font-size` in combination with `inline-block` on buttons.\n  font-size: 0;\n  white-space: nowrap;\n\n  // Negative margin for spacing, position for bringing hovered/focused/actived\n  // element above the siblings.\n  > .btn {\n    position: relative;\n    + .btn {\n      margin-left: -1px;\n    }\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active {\n      z-index: 2;\n    }\n  }\n\n  // Negative margin to only have a 1px border between the two\n  &:first-child {\n    > .btn,\n    > .btn-group {\n      margin-right: -1px;\n    }\n  }\n  &:last-child {\n    > .btn,\n    > .btn-group {\n      margin-left: -1px;\n    }\n  }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n  margin-bottom: 0;\n  padding-left: 0; // Override default ul/ol\n  list-style: none;\n  &:extend(.clearfix all);\n\n  > li {\n    position: relative;\n    display: block;\n\n    > a {\n      position: relative;\n      display: block;\n      padding: @nav-link-padding;\n      &:hover,\n      &:focus {\n        text-decoration: none;\n        background-color: @nav-link-hover-bg;\n      }\n    }\n\n    // Disabled state sets text to gray and nukes hover/tab effects\n    &.disabled > a {\n      color: @nav-disabled-link-color;\n\n      &:hover,\n      &:focus {\n        color: @nav-disabled-link-hover-color;\n        text-decoration: none;\n        background-color: transparent;\n        cursor: not-allowed;\n      }\n    }\n  }\n\n  // Open dropdowns\n  .open > a {\n    &,\n    &:hover,\n    &:focus {\n      background-color: @nav-link-hover-bg;\n      border-color: @link-color;\n    }\n  }\n\n  // Nav dividers (deprecated with v3.0.1)\n  //\n  // This should have been removed in v3 with the dropping of `.nav-list`, but\n  // we missed it. We don't currently support this anywhere, but in the interest\n  // of maintaining backward compatibility in case you use it, it's deprecated.\n  .nav-divider {\n    .nav-divider();\n  }\n\n  // Prevent IE8 from misplacing imgs\n  //\n  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n  > li > a > img {\n    max-width: none;\n  }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n  border-bottom: 1px solid @nav-tabs-border-color;\n  > li {\n    float: left;\n    // Make the list-items overlay the bottom border\n    margin-bottom: -1px;\n\n    // Actual tabs (as links)\n    > a {\n      margin-right: 2px;\n      line-height: @line-height-base;\n      border: 1px solid transparent;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n      &:hover {\n        border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n      }\n    }\n\n    // Active state, and its :hover to override normal :hover\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-tabs-active-link-hover-color;\n        background-color: @nav-tabs-active-link-hover-bg;\n        border: 1px solid @nav-tabs-active-link-hover-border-color;\n        border-bottom-color: transparent;\n        cursor: default;\n      }\n    }\n  }\n  // pulling this in mainly for less shorthand\n  &.nav-justified {\n    .nav-justified();\n    .nav-tabs-justified();\n  }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n  > li {\n    float: left;\n\n    // Links rendered as pills\n    > a {\n      border-radius: @nav-pills-border-radius;\n    }\n    + li {\n      margin-left: 2px;\n    }\n\n    // Active state\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-pills-active-link-hover-color;\n        background-color: @nav-pills-active-link-hover-bg;\n      }\n    }\n  }\n}\n\n\n// Stacked pills\n.nav-stacked {\n  > li {\n    float: none;\n    + li {\n      margin-top: 2px;\n      margin-left: 0; // no need for this gap between nav items\n    }\n  }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n  width: 100%;\n\n  > li {\n    float: none;\n    > a {\n      text-align: center;\n      margin-bottom: 5px;\n    }\n  }\n\n  > .dropdown .dropdown-menu {\n    top: auto;\n    left: auto;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li {\n      display: table-cell;\n      width: 1%;\n      > a {\n        margin-bottom: 0;\n      }\n    }\n  }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n  border-bottom: 0;\n\n  > li > a {\n    // Override margin from .nav-tabs\n    margin-right: 0;\n    border-radius: @border-radius-base;\n  }\n\n  > .active > a,\n  > .active > a:hover,\n  > .active > a:focus {\n    border: 1px solid @nav-tabs-justified-link-border-color;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li > a {\n      border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n    }\n    > .active > a,\n    > .active > a:hover,\n    > .active > a:focus {\n      border-bottom-color: @nav-tabs-justified-active-link-border-color;\n    }\n  }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n  > .tab-pane {\n    display: none;\n  }\n  > .active {\n    display: block;\n  }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n  // make dropdown border overlap tab border\n  margin-top: -1px;\n  // Remove the top rounded corners here since there is a hard edge above the menu\n  .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n  position: relative;\n  min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n  margin-bottom: @navbar-margin-bottom;\n  border: 1px solid transparent;\n\n  // Prevent floats from breaking the navbar\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: @navbar-border-radius;\n  }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n  }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n  overflow-x: visible;\n  padding-right: @navbar-padding-horizontal;\n  padding-left:  @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n  &:extend(.clearfix all);\n  -webkit-overflow-scrolling: touch;\n\n  &.in {\n    overflow-y: auto;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n\n    &.collapse {\n      display: block !important;\n      height: auto !important;\n      padding-bottom: 0; // Override default setting\n      overflow: visible !important;\n    }\n\n    &.in {\n      overflow-y: visible;\n    }\n\n    // Undo the collapse side padding for navbars with containers to ensure\n    // alignment of right-aligned contents.\n    .navbar-fixed-top &,\n    .navbar-static-top &,\n    .navbar-fixed-bottom & {\n      padding-left: 0;\n      padding-right: 0;\n    }\n  }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  .navbar-collapse {\n    max-height: @navbar-collapse-max-height;\n\n    @media (max-width: @screen-xs-min) and (orientation: landscape) {\n      max-height: 200px;\n    }\n  }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n  > .navbar-header,\n  > .navbar-collapse {\n    margin-right: -@navbar-padding-horizontal;\n    margin-left:  -@navbar-padding-horizontal;\n\n    @media (min-width: @grid-float-breakpoint) {\n      margin-right: 0;\n      margin-left:  0;\n    }\n  }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n  z-index: @zindex-navbar;\n  border-width: 0 0 1px;\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: @zindex-navbar-fixed;\n  .translate3d(0, 0, 0);\n\n  // Undo the rounded corners\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0; // override .navbar defaults\n  border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n  float: left;\n  padding: @navbar-padding-vertical @navbar-padding-horizontal;\n  font-size: @font-size-large;\n  line-height: @line-height-computed;\n  height: @navbar-height;\n\n  &:hover,\n  &:focus {\n    text-decoration: none;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    .navbar > .container &,\n    .navbar > .container-fluid & {\n      margin-left: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: @navbar-padding-horizontal;\n  padding: 9px 10px;\n  .navbar-vertical-align(34px);\n  background-color: transparent;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  border-radius: @border-radius-base;\n\n  // We remove the `outline` here, but later compensate by attaching `:hover`\n  // styles to `:focus`.\n  &:focus {\n    outline: 0;\n  }\n\n  // Bars\n  .icon-bar {\n    display: block;\n    width: 22px;\n    height: 2px;\n    border-radius: 1px;\n  }\n  .icon-bar + .icon-bar {\n    margin-top: 4px;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    display: none;\n  }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n  margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n  > li > a {\n    padding-top:    10px;\n    padding-bottom: 10px;\n    line-height: @line-height-computed;\n  }\n\n  @media (max-width: @grid-float-breakpoint-max) {\n    // Dropdowns get custom display when collapsed\n    .open .dropdown-menu {\n      position: static;\n      float: none;\n      width: auto;\n      margin-top: 0;\n      background-color: transparent;\n      border: 0;\n      box-shadow: none;\n      > li > a,\n      .dropdown-header {\n        padding: 5px 15px 5px 25px;\n      }\n      > li > a {\n        line-height: @line-height-computed;\n        &:hover,\n        &:focus {\n          background-image: none;\n        }\n      }\n    }\n  }\n\n  // Uncollapse the nav\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin: 0;\n\n    > li {\n      float: left;\n      > a {\n        padding-top:    @navbar-padding-vertical;\n        padding-bottom: @navbar-padding-vertical;\n      }\n    }\n\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-left  { .pull-left(); }\n  .navbar-right { .pull-right(); }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n  margin-left: -@navbar-padding-horizontal;\n  margin-right: -@navbar-padding-horizontal;\n  padding: 10px @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n  .box-shadow(@shadow);\n\n  // Mixin behavior for optimum display\n  .form-inline();\n\n  .form-group {\n    @media (max-width: @grid-float-breakpoint-max) {\n      margin-bottom: 5px;\n    }\n  }\n\n  // Vertically center in expanded, horizontal navbar\n  .navbar-vertical-align(@input-height-base);\n\n  // Undo 100% width for pull classes\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border: 0;\n    margin-left: 0;\n    margin-right: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    .box-shadow(none);\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n  .navbar-vertical-align(@input-height-base);\n\n  &.btn-sm {\n    .navbar-vertical-align(@input-height-small);\n  }\n  &.btn-xs {\n    .navbar-vertical-align(22);\n  }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n  .navbar-vertical-align(@line-height-computed);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin-left: @navbar-padding-horizontal;\n    margin-right: @navbar-padding-horizontal;\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: 0;\n    }\n  }\n}\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  background-color: @navbar-default-bg;\n  border-color: @navbar-default-border;\n\n  .navbar-brand {\n    color: @navbar-default-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-default-brand-hover-color;\n      background-color: @navbar-default-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-default-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-default-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-hover-color;\n        background-color: @navbar-default-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-active-color;\n        background-color: @navbar-default-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-disabled-color;\n        background-color: @navbar-default-link-disabled-bg;\n      }\n    }\n  }\n\n  .navbar-toggle {\n    border-color: @navbar-default-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-default-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-default-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: @navbar-default-border;\n  }\n\n  // Dropdown menu items\n  .navbar-nav {\n    // Remove background color from open dropdown\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-default-link-active-bg;\n        color: @navbar-default-link-active-color;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display when collapsed\n      .open .dropdown-menu {\n        > li > a {\n          color: @navbar-default-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-hover-color;\n            background-color: @navbar-default-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-active-color;\n            background-color: @navbar-default-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-disabled-color;\n            background-color: @navbar-default-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n\n  // Links in navbars\n  //\n  // Add a class to ensure links outside the navbar nav are colored correctly.\n\n  .navbar-link {\n    color: @navbar-default-link-color;\n    &:hover {\n      color: @navbar-default-link-hover-color;\n    }\n  }\n\n  .btn-link {\n    color: @navbar-default-link-color;\n    &:hover,\n    &:focus {\n      color: @navbar-default-link-hover-color;\n    }\n    &[disabled],\n    fieldset[disabled] & {\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-disabled-color;\n      }\n    }\n  }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n  background-color: @navbar-inverse-bg;\n  border-color: @navbar-inverse-border;\n\n  .navbar-brand {\n    color: @navbar-inverse-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-inverse-brand-hover-color;\n      background-color: @navbar-inverse-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-inverse-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-inverse-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-hover-color;\n        background-color: @navbar-inverse-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-active-color;\n        background-color: @navbar-inverse-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-disabled-color;\n        background-color: @navbar-inverse-link-disabled-bg;\n      }\n    }\n  }\n\n  // Darken the responsive nav toggle\n  .navbar-toggle {\n    border-color: @navbar-inverse-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-inverse-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-inverse-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: darken(@navbar-inverse-bg, 7%);\n  }\n\n  // Dropdowns\n  .navbar-nav {\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-inverse-link-active-bg;\n        color: @navbar-inverse-link-active-color;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display\n      .open .dropdown-menu {\n        > .dropdown-header {\n          border-color: @navbar-inverse-border;\n        }\n        .divider {\n          background-color: @navbar-inverse-border;\n        }\n        > li > a {\n          color: @navbar-inverse-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-hover-color;\n            background-color: @navbar-inverse-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-active-color;\n            background-color: @navbar-inverse-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-disabled-color;\n            background-color: @navbar-inverse-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n  .navbar-link {\n    color: @navbar-inverse-link-color;\n    &:hover {\n      color: @navbar-inverse-link-hover-color;\n    }\n  }\n\n  .btn-link {\n    color: @navbar-inverse-link-color;\n    &:hover,\n    &:focus {\n      color: @navbar-inverse-link-hover-color;\n    }\n    &[disabled],\n    fieldset[disabled] & {\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-disabled-color;\n      }\n    }\n  }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n  margin-top: ((@navbar-height - @element-height) / 2);\n  margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n  .clearfix();\n}\n.center-block {\n  .center-block();\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n  position: fixed;\n  .translate3d(0, 0, 0);\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n  padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n  margin-bottom: @line-height-computed;\n  list-style: none;\n  background-color: @breadcrumb-bg;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline-block;\n\n    + li:before {\n      content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n      padding: 0 5px;\n      color: @breadcrumb-color;\n    }\n  }\n\n  > .active {\n    color: @breadcrumb-active-color;\n  }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline; // Remove list-style and block-level defaults\n    > a,\n    > span {\n      position: relative;\n      float: left; // Collapse white-space\n      padding: @padding-base-vertical @padding-base-horizontal;\n      line-height: @line-height-base;\n      text-decoration: none;\n      color: @pagination-color;\n      background-color: @pagination-bg;\n      border: 1px solid @pagination-border;\n      margin-left: -1px;\n    }\n    &:first-child {\n      > a,\n      > span {\n        margin-left: 0;\n        .border-left-radius(@border-radius-base);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        .border-right-radius(@border-radius-base);\n      }\n    }\n  }\n\n  > li > a,\n  > li > span {\n    &:hover,\n    &:focus {\n      color: @pagination-hover-color;\n      background-color: @pagination-hover-bg;\n      border-color: @pagination-hover-border;\n    }\n  }\n\n  > .active > a,\n  > .active > span {\n    &,\n    &:hover,\n    &:focus {\n      z-index: 2;\n      color: @pagination-active-color;\n      background-color: @pagination-active-bg;\n      border-color: @pagination-active-border;\n      cursor: default;\n    }\n  }\n\n  > .disabled {\n    > span,\n    > span:hover,\n    > span:focus,\n    > a,\n    > a:hover,\n    > a:focus {\n      color: @pagination-disabled-color;\n      background-color: @pagination-disabled-bg;\n      border-color: @pagination-disabled-border;\n      cursor: not-allowed;\n    }\n  }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n  .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n  .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n  > li {\n    > a,\n    > span {\n      padding: @padding-vertical @padding-horizontal;\n      font-size: @font-size;\n    }\n    &:first-child {\n      > a,\n      > span {\n        .border-left-radius(@border-radius);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        .border-right-radius(@border-radius);\n      }\n    }\n  }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  list-style: none;\n  text-align: center;\n  &:extend(.clearfix all);\n  li {\n    display: inline;\n    > a,\n    > span {\n      display: inline-block;\n      padding: 5px 14px;\n      background-color: @pager-bg;\n      border: 1px solid @pager-border;\n      border-radius: @pager-border-radius;\n    }\n\n    > a:hover,\n    > a:focus {\n      text-decoration: none;\n      background-color: @pager-hover-bg;\n    }\n  }\n\n  .next {\n    > a,\n    > span {\n      float: right;\n    }\n  }\n\n  .previous {\n    > a,\n    > span {\n      float: left;\n    }\n  }\n\n  .disabled {\n    > a,\n    > a:hover,\n    > a:focus,\n    > span {\n      color: @pager-disabled-color;\n      background-color: @pager-bg;\n      cursor: not-allowed;\n    }\n  }\n\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: @label-color;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n\n  // Add hover effects, but only for links\n  a& {\n    &:hover,\n    &:focus {\n      color: @label-link-hover-color;\n      text-decoration: none;\n      cursor: pointer;\n    }\n  }\n\n  // Empty labels collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for labels in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n  .label-variant(@label-default-bg);\n}\n\n.label-primary {\n  .label-variant(@label-primary-bg);\n}\n\n.label-success {\n  .label-variant(@label-success-bg);\n}\n\n.label-info {\n  .label-variant(@label-info-bg);\n}\n\n.label-warning {\n  .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n  .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n  background-color: @color;\n  \n  &[href] {\n    &:hover,\n    &:focus {\n      background-color: darken(@color, 10%);\n    }\n  }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: @font-size-small;\n  font-weight: @badge-font-weight;\n  color: @badge-color;\n  line-height: @badge-line-height;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: @badge-bg;\n  border-radius: @badge-border-radius;\n\n  // Empty badges collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for badges in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n  .btn-xs & {\n    top: 0;\n    padding: 1px 5px;\n  }\n\n  // Hover state, but only for links\n  a& {\n    &:hover,\n    &:focus {\n      color: @badge-link-hover-color;\n      text-decoration: none;\n      cursor: pointer;\n    }\n  }\n\n  // Account for badges in navs\n  a.list-group-item.active > &,\n  .nav-pills > .active > a > & {\n    color: @badge-active-color;\n    background-color: @badge-active-bg;\n  }\n  .nav-pills > li > a > & {\n    margin-left: 3px;\n  }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n  padding: @jumbotron-padding;\n  margin-bottom: @jumbotron-padding;\n  color: @jumbotron-color;\n  background-color: @jumbotron-bg;\n\n  h1,\n  .h1 {\n    color: @jumbotron-heading-color;\n  }\n  p {\n    margin-bottom: (@jumbotron-padding / 2);\n    font-size: @jumbotron-font-size;\n    font-weight: 200;\n  }\n\n  > hr {\n    border-top-color: darken(@jumbotron-bg, 10%);\n  }\n\n  .container & {\n    border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n  }\n\n  .container {\n    max-width: 100%;\n  }\n\n  @media screen and (min-width: @screen-sm-min) {\n    padding-top:    (@jumbotron-padding * 1.6);\n    padding-bottom: (@jumbotron-padding * 1.6);\n\n    .container & {\n      padding-left:  (@jumbotron-padding * 2);\n      padding-right: (@jumbotron-padding * 2);\n    }\n\n    h1,\n    .h1 {\n      font-size: (@font-size-base * 4.5);\n    }\n  }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n  display: block;\n  padding: @thumbnail-padding;\n  margin-bottom: @line-height-computed;\n  line-height: @line-height-base;\n  background-color: @thumbnail-bg;\n  border: 1px solid @thumbnail-border;\n  border-radius: @thumbnail-border-radius;\n  .transition(all .2s ease-in-out);\n\n  > img,\n  a > img {\n    &:extend(.img-responsive);\n    margin-left: auto;\n    margin-right: auto;\n  }\n\n  // Add a hover state for linked versions only\n  a&:hover,\n  a&:focus,\n  a&.active {\n    border-color: @link-color;\n  }\n\n  // Image captions\n  .caption {\n    padding: @thumbnail-caption-padding;\n    color: @thumbnail-caption-color;\n  }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n  padding: @alert-padding;\n  margin-bottom: @line-height-computed;\n  border: 1px solid transparent;\n  border-radius: @alert-border-radius;\n\n  // Headings for larger alerts\n  h4 {\n    margin-top: 0;\n    // Specified for the h4 to prevent conflicts of changing @headings-color\n    color: inherit;\n  }\n  // Provide class for links that match alerts\n  .alert-link {\n    font-weight: @alert-link-font-weight;\n  }\n\n  // Improve alignment and spacing of inner content\n  > p,\n  > ul {\n    margin-bottom: 0;\n  }\n  > p + p {\n    margin-top: 5px;\n  }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n  padding-right: (@alert-padding + 20);\n\n  // Adjust close link position\n  .close {\n    position: relative;\n    top: -2px;\n    right: -21px;\n    color: inherit;\n  }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n  .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n.alert-info {\n  .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n.alert-warning {\n  .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n.alert-danger {\n  .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n  background-color: @background;\n  border-color: @border;\n  color: @text-color;\n\n  hr {\n    border-top-color: darken(@border, 5%);\n  }\n  .alert-link {\n    color: darken(@text-color, 10%);\n  }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n  overflow: hidden;\n  height: @line-height-computed;\n  margin-bottom: @line-height-computed;\n  background-color: @progress-bg;\n  border-radius: @border-radius-base;\n  .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: @font-size-small;\n  line-height: @line-height-computed;\n  color: @progress-bar-color;\n  text-align: center;\n  background-color: @progress-bar-bg;\n  .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n  .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  #gradient > .striped();\n  background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n  .animation(progress-bar-stripes 2s linear infinite);\n}\n\n// Account for lower percentages\n.progress-bar {\n  &[aria-valuenow=\"1\"],\n  &[aria-valuenow=\"2\"] {\n    min-width: 30px;\n  }\n\n  &[aria-valuenow=\"0\"] {\n    color: @gray-light;\n    min-width: 30px;\n    background-color: transparent;\n    background-image: none;\n    box-shadow: none;\n  }\n}\n\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n  .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n  .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n  .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n  .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Gradients\n\n#gradient {\n\n  // Horizontal gradient, from left to right\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n    background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n    background-repeat: repeat-x;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n  }\n\n  // Vertical gradient, from top to bottom\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent);  // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent);  // Opera 12\n    background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n    background-repeat: repeat-x;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n  }\n\n  .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n    background-repeat: repeat-x;\n    background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n    background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n  }\n  .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n    background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n    background-repeat: no-repeat;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n  }\n  .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-repeat: no-repeat;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n  }\n  .radial(@inner-color: #555; @outer-color: #333) {\n    background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n    background-image: radial-gradient(circle, @inner-color, @outer-color);\n    background-repeat: no-repeat;\n  }\n  .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n    background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n    background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n    background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n  }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n  background-color: @color;\n\n  // Deprecated parent class requirement as of v3.2.0\n  .progress-striped & {\n    #gradient > .striped();\n  }\n}\n","// Media objects\n// Source: http://stubbornella.org/content/?p=497\n// --------------------------------------------------\n\n\n// Common styles\n// -------------------------\n\n// Clear the floats\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n\n// Proper spacing between instances of .media\n.media,\n.media .media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n\n// For images and videos, set to block\n.media-object {\n  display: block;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n  margin: 0 0 5px;\n}\n\n\n// Media image alignment\n// -------------------------\n\n.media {\n  > .pull-left {\n    margin-right: 10px;\n  }\n  > .pull-right {\n    margin-left: 10px;\n  }\n}\n\n\n// Media list variation\n// -------------------------\n\n// Undo default ul/ol styles\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n  // No need to set list-style: none; since .list-group-item is block level\n  margin-bottom: 20px;\n  padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  // Place the border on the list items and negative margin up for better styling\n  margin-bottom: -1px;\n  background-color: @list-group-bg;\n  border: 1px solid @list-group-border;\n\n  // Round the first and last items\n  &:first-child {\n    .border-top-radius(@list-group-border-radius);\n  }\n  &:last-child {\n    margin-bottom: 0;\n    .border-bottom-radius(@list-group-border-radius);\n  }\n\n  // Align badges within list items\n  > .badge {\n    float: right;\n  }\n  > .badge + .badge {\n    margin-right: 5px;\n  }\n}\n\n\n// Linked list items\n//\n// Use anchor elements instead of `li`s or `div`s to create linked list items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item {\n  color: @list-group-link-color;\n\n  .list-group-item-heading {\n    color: @list-group-link-heading-color;\n  }\n\n  // Hover state\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    color: @list-group-link-hover-color;\n    background-color: @list-group-hover-bg;\n  }\n}\n\n.list-group-item {\n  // Disabled state\n  &.disabled,\n  &.disabled:hover,\n  &.disabled:focus {\n    background-color: @list-group-disabled-bg;\n    color: @list-group-disabled-color;\n\n    // Force color to inherit for custom content\n    .list-group-item-heading {\n      color: inherit;\n    }\n    .list-group-item-text {\n      color: @list-group-disabled-text-color;\n    }\n  }\n\n  // Active class on item itself, not parent\n  &.active,\n  &.active:hover,\n  &.active:focus {\n    z-index: 2; // Place active items above their siblings for proper border styling\n    color: @list-group-active-color;\n    background-color: @list-group-active-bg;\n    border-color: @list-group-active-border;\n\n    // Force color to inherit for custom content\n    .list-group-item-heading,\n    .list-group-item-heading > small,\n    .list-group-item-heading > .small {\n      color: inherit;\n    }\n    .list-group-item-text {\n      color: @list-group-active-text-color;\n    }\n  }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n","// List Groups\n\n.list-group-item-variant(@state; @background; @color) {\n  .list-group-item-@{state} {\n    color: @color;\n    background-color: @background;\n\n    a& {\n      color: @color;\n\n      .list-group-item-heading {\n        color: inherit;\n      }\n\n      &:hover,\n      &:focus {\n        color: @color;\n        background-color: darken(@background, 5%);\n      }\n      &.active,\n      &.active:hover,\n      &.active:focus {\n        color: #fff;\n        background-color: @color;\n        border-color: @color;\n      }\n    }\n  }\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n  margin-bottom: @line-height-computed;\n  background-color: @panel-bg;\n  border: 1px solid transparent;\n  border-radius: @panel-border-radius;\n  .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n  padding: @panel-body-padding;\n  &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n  padding: @panel-heading-padding;\n  border-bottom: 1px solid transparent;\n  .border-top-radius((@panel-border-radius - 1));\n\n  > .dropdown .dropdown-toggle {\n    color: inherit;\n  }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: ceil((@font-size-base * 1.125));\n  color: inherit;\n\n  > a {\n    color: inherit;\n  }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n  padding: @panel-footer-padding;\n  background-color: @panel-footer-bg;\n  border-top: 1px solid @panel-inner-border;\n  .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n  > .list-group {\n    margin-bottom: 0;\n\n    .list-group-item {\n      border-width: 1px 0;\n      border-radius: 0;\n    }\n\n    // Add border top radius for first one\n    &:first-child {\n      .list-group-item:first-child {\n        border-top: 0;\n        .border-top-radius((@panel-border-radius - 1));\n      }\n    }\n    // Add border bottom radius for last one\n    &:last-child {\n      .list-group-item:last-child {\n        border-bottom: 0;\n        .border-bottom-radius((@panel-border-radius - 1));\n      }\n    }\n  }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n  .list-group-item:first-child {\n    border-top-width: 0;\n  }\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n  > .table,\n  > .table-responsive > .table,\n  > .panel-collapse > .table {\n    margin-bottom: 0;\n  }\n  // Add border top radius for first one\n  > .table:first-child,\n  > .table-responsive:first-child > .table:first-child {\n    .border-top-radius((@panel-border-radius - 1));\n\n    > thead:first-child,\n    > tbody:first-child {\n      > tr:first-child {\n        td:first-child,\n        th:first-child {\n          border-top-left-radius: (@panel-border-radius - 1);\n        }\n        td:last-child,\n        th:last-child {\n          border-top-right-radius: (@panel-border-radius - 1);\n        }\n      }\n    }\n  }\n  // Add border bottom radius for last one\n  > .table:last-child,\n  > .table-responsive:last-child > .table:last-child {\n    .border-bottom-radius((@panel-border-radius - 1));\n\n    > tbody:last-child,\n    > tfoot:last-child {\n      > tr:last-child {\n        td:first-child,\n        th:first-child {\n          border-bottom-left-radius: (@panel-border-radius - 1);\n        }\n        td:last-child,\n        th:last-child {\n          border-bottom-right-radius: (@panel-border-radius - 1);\n        }\n      }\n    }\n  }\n  > .panel-body + .table,\n  > .panel-body + .table-responsive {\n    border-top: 1px solid @table-border-color;\n  }\n  > .table > tbody:first-child > tr:first-child th,\n  > .table > tbody:first-child > tr:first-child td {\n    border-top: 0;\n  }\n  > .table-bordered,\n  > .table-responsive > .table-bordered {\n    border: 0;\n    > thead,\n    > tbody,\n    > tfoot {\n      > tr {\n        > th:first-child,\n        > td:first-child {\n          border-left: 0;\n        }\n        > th:last-child,\n        > td:last-child {\n          border-right: 0;\n        }\n      }\n    }\n    > thead,\n    > tbody {\n      > tr:first-child {\n        > td,\n        > th {\n          border-bottom: 0;\n        }\n      }\n    }\n    > tbody,\n    > tfoot {\n      > tr:last-child {\n        > td,\n        > th {\n          border-bottom: 0;\n        }\n      }\n    }\n  }\n  > .table-responsive {\n    border: 0;\n    margin-bottom: 0;\n  }\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n  margin-bottom: @line-height-computed;\n\n  // Tighten up margin so it's only between panels\n  .panel {\n    margin-bottom: 0;\n    border-radius: @panel-border-radius;\n    + .panel {\n      margin-top: 5px;\n    }\n  }\n\n  .panel-heading {\n    border-bottom: 0;\n    + .panel-collapse > .panel-body {\n      border-top: 1px solid @panel-inner-border;\n    }\n  }\n  .panel-footer {\n    border-top: 0;\n    + .panel-collapse .panel-body {\n      border-bottom: 1px solid @panel-inner-border;\n    }\n  }\n}\n\n\n// Contextual variations\n.panel-default {\n  .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n  .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n  .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n  .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n  .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n  .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","// Panels\n\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n  border-color: @border;\n\n  & > .panel-heading {\n    color: @heading-text-color;\n    background-color: @heading-bg-color;\n    border-color: @heading-border;\n\n    + .panel-collapse > .panel-body {\n      border-top-color: @border;\n    }\n    .badge {\n      color: @heading-bg-color;\n      background-color: @heading-text-color;\n    }\n  }\n  & > .panel-footer {\n    + .panel-collapse > .panel-body {\n      border-bottom-color: @border;\n    }\n  }\n}\n","// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n\n  .embed-responsive-item,\n  iframe,\n  embed,\n  object {\n    position: absolute;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    height: 100%;\n    width: 100%;\n    border: 0;\n  }\n\n  // Modifier class for 16:9 aspect ratio\n  &.embed-responsive-16by9 {\n    padding-bottom: 56.25%;\n  }\n\n  // Modifier class for 4:3 aspect ratio\n  &.embed-responsive-4by3 {\n    padding-bottom: 75%;\n  }\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: @well-bg;\n  border: 1px solid @well-border;\n  border-radius: @border-radius-base;\n  .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n  blockquote {\n    border-color: #ddd;\n    border-color: rgba(0,0,0,.15);\n  }\n}\n\n// Sizes\n.well-lg {\n  padding: 24px;\n  border-radius: @border-radius-large;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n  float: right;\n  font-size: (@font-size-base * 1.5);\n  font-weight: @close-font-weight;\n  line-height: 1;\n  color: @close-color;\n  text-shadow: @close-text-shadow;\n  .opacity(.2);\n\n  &:hover,\n  &:focus {\n    color: @close-color;\n    text-decoration: none;\n    cursor: pointer;\n    .opacity(.5);\n  }\n\n  // Additional properties for button version\n  // iOS requires the button element instead of an anchor tag.\n  // If you want the anchor version, it requires `href=\"#\"`.\n  button& {\n    padding: 0;\n    cursor: pointer;\n    background: transparent;\n    border: 0;\n    -webkit-appearance: none;\n  }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open      - body class for killing the scroll\n// .modal           - container to scroll within\n// .modal-dialog    - positioning shell for the actual modal\n// .modal-content   - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n  overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n  display: none;\n  overflow: hidden;\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: @zindex-modal;\n  -webkit-overflow-scrolling: touch;\n\n  // Prevent Chrome on Windows from adding a focus outline. For details, see\n  // https://github.com/twbs/bootstrap/pull/10951.\n  outline: 0;\n\n  // When fading in the modal, animate it to slide down\n  &.fade .modal-dialog {\n    .translate3d(0, -25%, 0);\n    .transition-transform(~\"0.3s ease-out\");\n  }\n  &.in .modal-dialog { .translate3d(0, 0, 0) }\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n  position: relative;\n  background-color: @modal-content-bg;\n  border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n  border: 1px solid @modal-content-border-color;\n  border-radius: @border-radius-large;\n  .box-shadow(0 3px 9px rgba(0,0,0,.5));\n  background-clip: padding-box;\n  // Remove focus outline from opened modal\n  outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: @zindex-modal-background;\n  background-color: @modal-backdrop-bg;\n  // Fade for backdrop\n  &.fade { .opacity(0); }\n  &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n  padding: @modal-title-padding;\n  border-bottom: 1px solid @modal-header-border-color;\n  min-height: (@modal-title-padding + @modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n  margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n  margin: 0;\n  line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n  position: relative;\n  padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n  padding: @modal-inner-padding;\n  text-align: right; // right align buttons\n  border-top: 1px solid @modal-footer-border-color;\n  &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n  // Properly space out buttons\n  .btn + .btn {\n    margin-left: 5px;\n    margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n  }\n  // but override that for button groups\n  .btn-group .btn + .btn {\n    margin-left: -1px;\n  }\n  // and override it for block buttons as well\n  .btn-block + .btn-block {\n    margin-left: 0;\n  }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n  // Automatically set modal's width for larger viewports\n  .modal-dialog {\n    width: @modal-md;\n    margin: 30px auto;\n  }\n  .modal-content {\n    .box-shadow(0 5px 15px rgba(0,0,0,.5));\n  }\n\n  // Modal sizes\n  .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n  .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n  position: absolute;\n  z-index: @zindex-tooltip;\n  display: block;\n  visibility: visible;\n  font-size: @font-size-small;\n  line-height: 1.4;\n  .opacity(0);\n\n  &.in     { .opacity(@tooltip-opacity); }\n  &.top    { margin-top:  -3px; padding: @tooltip-arrow-width 0; }\n  &.right  { margin-left:  3px; padding: 0 @tooltip-arrow-width; }\n  &.bottom { margin-top:   3px; padding: @tooltip-arrow-width 0; }\n  &.left   { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n  max-width: @tooltip-max-width;\n  padding: 3px 8px;\n  color: @tooltip-color;\n  text-align: center;\n  text-decoration: none;\n  background-color: @tooltip-bg;\n  border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip {\n  &.top .tooltip-arrow {\n    bottom: 0;\n    left: 50%;\n    margin-left: -@tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-top-color: @tooltip-arrow-color;\n  }\n  &.top-left .tooltip-arrow {\n    bottom: 0;\n    left: @tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-top-color: @tooltip-arrow-color;\n  }\n  &.top-right .tooltip-arrow {\n    bottom: 0;\n    right: @tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-top-color: @tooltip-arrow-color;\n  }\n  &.right .tooltip-arrow {\n    top: 50%;\n    left: 0;\n    margin-top: -@tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-right-color: @tooltip-arrow-color;\n  }\n  &.left .tooltip-arrow {\n    top: 50%;\n    right: 0;\n    margin-top: -@tooltip-arrow-width;\n    border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-left-color: @tooltip-arrow-color;\n  }\n  &.bottom .tooltip-arrow {\n    top: 0;\n    left: 50%;\n    margin-left: -@tooltip-arrow-width;\n    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-bottom-color: @tooltip-arrow-color;\n  }\n  &.bottom-left .tooltip-arrow {\n    top: 0;\n    left: @tooltip-arrow-width;\n    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-bottom-color: @tooltip-arrow-color;\n  }\n  &.bottom-right .tooltip-arrow {\n    top: 0;\n    right: @tooltip-arrow-width;\n    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-bottom-color: @tooltip-arrow-color;\n  }\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: @zindex-popover;\n  display: none;\n  max-width: @popover-max-width;\n  padding: 1px;\n  text-align: left; // Reset given new insertion method\n  background-color: @popover-bg;\n  background-clip: padding-box;\n  border: 1px solid @popover-fallback-border-color;\n  border: 1px solid @popover-border-color;\n  border-radius: @border-radius-large;\n  .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n  // Overrides for proper insertion\n  white-space: normal;\n\n  // Offset the popover to account for the popover arrow\n  &.top     { margin-top: -@popover-arrow-width; }\n  &.right   { margin-left: @popover-arrow-width; }\n  &.bottom  { margin-top: @popover-arrow-width; }\n  &.left    { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n  margin: 0; // reset heading margin\n  padding: 8px 14px;\n  font-size: @font-size-base;\n  font-weight: normal;\n  line-height: 18px;\n  background-color: @popover-title-bg;\n  border-bottom: 1px solid darken(@popover-title-bg, 5%);\n  border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0;\n}\n\n.popover-content {\n  padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n  &,\n  &:after {\n    position: absolute;\n    display: block;\n    width: 0;\n    height: 0;\n    border-color: transparent;\n    border-style: solid;\n  }\n}\n.popover > .arrow {\n  border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n  border-width: @popover-arrow-width;\n  content: \"\";\n}\n\n.popover {\n  &.top > .arrow {\n    left: 50%;\n    margin-left: -@popover-arrow-outer-width;\n    border-bottom-width: 0;\n    border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n    border-top-color: @popover-arrow-outer-color;\n    bottom: -@popover-arrow-outer-width;\n    &:after {\n      content: \" \";\n      bottom: 1px;\n      margin-left: -@popover-arrow-width;\n      border-bottom-width: 0;\n      border-top-color: @popover-arrow-color;\n    }\n  }\n  &.right > .arrow {\n    top: 50%;\n    left: -@popover-arrow-outer-width;\n    margin-top: -@popover-arrow-outer-width;\n    border-left-width: 0;\n    border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n    border-right-color: @popover-arrow-outer-color;\n    &:after {\n      content: \" \";\n      left: 1px;\n      bottom: -@popover-arrow-width;\n      border-left-width: 0;\n      border-right-color: @popover-arrow-color;\n    }\n  }\n  &.bottom > .arrow {\n    left: 50%;\n    margin-left: -@popover-arrow-outer-width;\n    border-top-width: 0;\n    border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n    border-bottom-color: @popover-arrow-outer-color;\n    top: -@popover-arrow-outer-width;\n    &:after {\n      content: \" \";\n      top: 1px;\n      margin-left: -@popover-arrow-width;\n      border-top-width: 0;\n      border-bottom-color: @popover-arrow-color;\n    }\n  }\n\n  &.left > .arrow {\n    top: 50%;\n    right: -@popover-arrow-outer-width;\n    margin-top: -@popover-arrow-outer-width;\n    border-right-width: 0;\n    border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n    border-left-color: @popover-arrow-outer-color;\n    &:after {\n      content: \" \";\n      right: 1px;\n      border-right-width: 0;\n      border-left-color: @popover-arrow-color;\n      bottom: -@popover-arrow-width;\n    }\n  }\n\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n\n  > .item {\n    display: none;\n    position: relative;\n    .transition(.6s ease-in-out left);\n\n    // Account for jankitude on images\n    > img,\n    > a > img {\n      &:extend(.img-responsive);\n      line-height: 1;\n    }\n  }\n\n  > .active,\n  > .next,\n  > .prev {\n    display: block;\n  }\n\n  > .active {\n    left: 0;\n  }\n\n  > .next,\n  > .prev {\n    position: absolute;\n    top: 0;\n    width: 100%;\n  }\n\n  > .next {\n    left: 100%;\n  }\n  > .prev {\n    left: -100%;\n  }\n  > .next.left,\n  > .prev.right {\n    left: 0;\n  }\n\n  > .active.left {\n    left: -100%;\n  }\n  > .active.right {\n    left: 100%;\n  }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  width: @carousel-control-width;\n  .opacity(@carousel-control-opacity);\n  font-size: @carousel-control-font-size;\n  color: @carousel-control-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  // We can't have this transition here because WebKit cancels the carousel\n  // animation if you trip this while in the middle of another animation.\n\n  // Set gradients for backgrounds\n  &.left {\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n  }\n  &.right {\n    left: auto;\n    right: 0;\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n  }\n\n  // Hover/focus state\n  &:hover,\n  &:focus {\n    outline: 0;\n    color: @carousel-control-color;\n    text-decoration: none;\n    .opacity(.9);\n  }\n\n  // Toggles\n  .icon-prev,\n  .icon-next,\n  .glyphicon-chevron-left,\n  .glyphicon-chevron-right {\n    position: absolute;\n    top: 50%;\n    z-index: 5;\n    display: inline-block;\n  }\n  .icon-prev,\n  .glyphicon-chevron-left {\n    left: 50%;\n    margin-left: -10px;\n  }\n  .icon-next,\n  .glyphicon-chevron-right {\n    right: 50%;\n    margin-right: -10px;\n  }\n  .icon-prev,\n  .icon-next {\n    width:  20px;\n    height: 20px;\n    margin-top: -10px;\n    font-family: serif;\n  }\n\n\n  .icon-prev {\n    &:before {\n      content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n    }\n  }\n  .icon-next {\n    &:before {\n      content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n    }\n  }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  margin-left: -30%;\n  padding-left: 0;\n  list-style: none;\n  text-align: center;\n\n  li {\n    display: inline-block;\n    width:  10px;\n    height: 10px;\n    margin: 1px;\n    text-indent: -999px;\n    border: 1px solid @carousel-indicator-border-color;\n    border-radius: 10px;\n    cursor: pointer;\n\n    // IE8-9 hack for event handling\n    //\n    // Internet Explorer 8-9 does not support clicks on elements without a set\n    // `background-color`. We cannot use `filter` since that's not viewed as a\n    // background color by the browser. Thus, a hack is needed.\n    //\n    // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n    // set alpha transparency for the best results possible.\n    background-color: #000 \\9; // IE8\n    background-color: rgba(0,0,0,0); // IE9\n  }\n  .active {\n    margin: 0;\n    width:  12px;\n    height: 12px;\n    background-color: @carousel-indicator-active-bg;\n  }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n  position: absolute;\n  left: 15%;\n  right: 15%;\n  bottom: 20px;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: @carousel-caption-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  & .btn {\n    text-shadow: none; // No shadow for button elements in carousel-caption\n  }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n  // Scale up the controls a smidge\n  .carousel-control {\n    .glyphicon-chevron-left,\n    .glyphicon-chevron-right,\n    .icon-prev,\n    .icon-next {\n      width: 30px;\n      height: 30px;\n      margin-top: -15px;\n      font-size: 30px;\n    }\n    .glyphicon-chevron-left,\n    .icon-prev {\n      margin-left: -15px;\n    }\n    .glyphicon-chevron-right,\n    .icon-next {\n      margin-right: -15px;\n    }\n  }\n\n  // Show and left align the captions\n  .carousel-caption {\n    left: 20%;\n    right: 20%;\n    padding-bottom: 30px;\n  }\n\n  // Move up the indicators\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n","// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n//    contenteditable attribute is included anywhere else in the document.\n//    Otherwise it causes space to appear at the top and bottom of elements\n//    that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n//    `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n.clearfix() {\n  &:before,\n  &:after {\n    content: \" \"; // 1\n    display: table; // 2\n  }\n  &:after {\n    clear: both;\n  }\n}\n","// Center-align a block level element\n\n.center-block() {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n","// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n  font: ~\"0/0\" a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n\n// New mixin to use as of v3.0.1\n.text-hide() {\n  .hide-text();\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#support-ie10-width\n// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n  width: device-width;\n}\n\n\n// Visibility utilities\n// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  .responsive-invisibility();\n}\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n\n.visible-xs {\n  @media (max-width: @screen-xs-max) {\n    .responsive-visibility();\n  }\n}\n.visible-xs-block {\n  @media (max-width: @screen-xs-max) {\n    display: block !important;\n  }\n}\n.visible-xs-inline {\n  @media (max-width: @screen-xs-max) {\n    display: inline !important;\n  }\n}\n.visible-xs-inline-block {\n  @media (max-width: @screen-xs-max) {\n    display: inline-block !important;\n  }\n}\n\n.visible-sm {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    .responsive-visibility();\n  }\n}\n.visible-sm-block {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    display: block !important;\n  }\n}\n.visible-sm-inline {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    display: inline !important;\n  }\n}\n.visible-sm-inline-block {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    display: inline-block !important;\n  }\n}\n\n.visible-md {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    .responsive-visibility();\n  }\n}\n.visible-md-block {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    display: block !important;\n  }\n}\n.visible-md-inline {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    display: inline !important;\n  }\n}\n.visible-md-inline-block {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    display: inline-block !important;\n  }\n}\n\n.visible-lg {\n  @media (min-width: @screen-lg-min) {\n    .responsive-visibility();\n  }\n}\n.visible-lg-block {\n  @media (min-width: @screen-lg-min) {\n    display: block !important;\n  }\n}\n.visible-lg-inline {\n  @media (min-width: @screen-lg-min) {\n    display: inline !important;\n  }\n}\n.visible-lg-inline-block {\n  @media (min-width: @screen-lg-min) {\n    display: inline-block !important;\n  }\n}\n\n.hidden-xs {\n  @media (max-width: @screen-xs-max) {\n    .responsive-invisibility();\n  }\n}\n.hidden-sm {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    .responsive-invisibility();\n  }\n}\n.hidden-md {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    .responsive-invisibility();\n  }\n}\n.hidden-lg {\n  @media (min-width: @screen-lg-min) {\n    .responsive-invisibility();\n  }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n// Note: Deprecated .visible-print as of v3.2.0\n.visible-print {\n  .responsive-invisibility();\n\n  @media print {\n    .responsive-visibility();\n  }\n}\n.visible-print-block {\n  display: none !important;\n\n  @media print {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n\n  @media print {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n\n  @media print {\n    display: inline-block !important;\n  }\n}\n\n.hidden-print {\n  @media print {\n    .responsive-invisibility();\n  }\n}\n","// Responsive utilities\n\n//\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n  display: block !important;\n  table&  { display: table; }\n  tr&     { display: table-row !important; }\n  th&,\n  td&     { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n  display: none !important;\n}\n"]}
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap.min.css b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap.min.css
deleted file mode 100644
index a9f35ceedfa..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/css/bootstrap.min.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*!
- * Bootstrap v3.2.0 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;width:100% \9;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.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-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.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-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.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-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-horizontal .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.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:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{position:absolute;z-index:-1;filter:alpha(opacity=0);opacity:0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-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-image:-o-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-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);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{min-width:30px;color:#777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-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-image:-o-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-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)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-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-image:-o-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-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)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-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-image:-o-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-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)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-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-image:-o-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-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)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate3d(0,-25%,0);-o-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.in .modal-dialog{-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;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;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/fonts/glyphicons-halflings-regular.eot b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/fonts/glyphicons-halflings-regular.eot
deleted file mode 100644
index 4a4ca865d67e86f961bc6e2ef00bffa4e34bb9ed..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20335
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

diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/fonts/glyphicons-halflings-regular.svg b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/fonts/glyphicons-halflings-regular.svg
deleted file mode 100644
index e3e2dc739dd..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/fonts/glyphicons-halflings-regular.svg
+++ /dev/null
@@ -1,229 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
-<font-face units-per-em="1200" ascent="960" descent="-240" />
-<missing-glyph horiz-adv-x="500" />
-<glyph />
-<glyph />
-<glyph unicode="&#xd;" />
-<glyph unicode=" " />
-<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" />
-<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" />
-<glyph unicode="&#xa0;" />
-<glyph unicode="&#x2000;" horiz-adv-x="652" />
-<glyph unicode="&#x2001;" horiz-adv-x="1304" />
-<glyph unicode="&#x2002;" horiz-adv-x="652" />
-<glyph unicode="&#x2003;" horiz-adv-x="1304" />
-<glyph unicode="&#x2004;" horiz-adv-x="434" />
-<glyph unicode="&#x2005;" horiz-adv-x="326" />
-<glyph unicode="&#x2006;" horiz-adv-x="217" />
-<glyph unicode="&#x2007;" horiz-adv-x="217" />
-<glyph unicode="&#x2008;" horiz-adv-x="163" />
-<glyph unicode="&#x2009;" horiz-adv-x="260" />
-<glyph unicode="&#x200a;" horiz-adv-x="72" />
-<glyph unicode="&#x202f;" horiz-adv-x="260" />
-<glyph unicode="&#x205f;" horiz-adv-x="326" />
-<glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
-<glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" />
-<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
-<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
-<glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
-<glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
-<glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
-<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
-<glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
-<glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
-<glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
-<glyph unicode="&#xe007;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" />
-<glyph unicode="&#xe008;" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" />
-<glyph unicode="&#xe009;" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" />
-<glyph unicode="&#xe010;" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe011;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe012;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
-<glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
-<glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
-<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
-<glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
-<glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
-<glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
-<glyph unicode="&#xe020;" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" />
-<glyph unicode="&#xe021;" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" />
-<glyph unicode="&#xe022;" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" />
-<glyph unicode="&#xe023;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" />
-<glyph unicode="&#xe024;" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" />
-<glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
-<glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
-<glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
-<glyph unicode="&#xe028;" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
-<glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
-<glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
-<glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
-<glyph unicode="&#xe032;" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" />
-<glyph unicode="&#xe033;" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" />
-<glyph unicode="&#xe034;" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" />
-<glyph unicode="&#xe035;" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" />
-<glyph unicode="&#xe036;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" />
-<glyph unicode="&#xe037;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" />
-<glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
-<glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
-<glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
-<glyph unicode="&#xe041;" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
-<glyph unicode="&#xe042;" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
-<glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
-<glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
-<glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
-<glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
-<glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
-<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
-<glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
-<glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
-<glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
-<glyph unicode="&#xe052;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
-<glyph unicode="&#xe053;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
-<glyph unicode="&#xe054;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe055;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe056;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe057;" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" />
-<glyph unicode="&#xe058;" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" />
-<glyph unicode="&#xe059;" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" />
-<glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
-<glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
-<glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
-<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
-<glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
-<glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
-<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" />
-<glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
-<glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe071;" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" />
-<glyph unicode="&#xe072;" d="M200 0l900 550l-900 550v-1100z" />
-<glyph unicode="&#xe073;" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
-<glyph unicode="&#xe074;" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
-<glyph unicode="&#xe075;" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" />
-<glyph unicode="&#xe076;" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" />
-<glyph unicode="&#xe077;" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" />
-<glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
-<glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
-<glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
-<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
-<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" />
-<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" />
-<glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
-<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" />
-<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
-<glyph unicode="&#xe087;" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" />
-<glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
-<glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
-<glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
-<glyph unicode="&#xe091;" d="M0 547l600 453v-300h600v-300h-600v-301z" />
-<glyph unicode="&#xe092;" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" />
-<glyph unicode="&#xe093;" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" />
-<glyph unicode="&#xe094;" d="M104 600h296v600h300v-600h298l-449 -600z" />
-<glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
-<glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
-<glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
-<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
-<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
-<glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
-<glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
-<glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
-<glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
-<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
-<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
-<glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
-<glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
-<glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
-<glyph unicode="&#xe112;" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" />
-<glyph unicode="&#xe113;" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" />
-<glyph unicode="&#xe114;" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" />
-<glyph unicode="&#xe115;" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" />
-<glyph unicode="&#xe116;" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" />
-<glyph unicode="&#xe117;" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" />
-<glyph unicode="&#xe118;" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" />
-<glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
-<glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
-<glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
-<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
-<glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
-<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
-<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
-<glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
-<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" />
-<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
-<glyph unicode="&#xe130;" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
-<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" />
-<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" />
-<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
-<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
-<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" />
-<glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
-<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
-<glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
-<glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
-<glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
-<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
-<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
-<glyph unicode="&#xe143;" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" />
-<glyph unicode="&#xe144;" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
-<glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
-<glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
-<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
-<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" />
-<glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
-<glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
-<glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
-<glyph unicode="&#xe153;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" />
-<glyph unicode="&#xe154;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" />
-<glyph unicode="&#xe155;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" />
-<glyph unicode="&#xe156;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" />
-<glyph unicode="&#xe157;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" />
-<glyph unicode="&#xe158;" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" />
-<glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
-<glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
-<glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
-<glyph unicode="&#xe162;" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" />
-<glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
-<glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
-<glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
-<glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
-<glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
-<glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
-<glyph unicode="&#xe174;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" />
-<glyph unicode="&#xe175;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" />
-<glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
-<glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
-<glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
-<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" />
-<glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
-<glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
-<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
-<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
-<glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
-<glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
-<glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
-<glyph unicode="&#xe187;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
-<glyph unicode="&#xe188;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" />
-<glyph unicode="&#xe189;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" />
-<glyph unicode="&#xe190;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" />
-<glyph unicode="&#xe191;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
-<glyph unicode="&#xe192;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
-<glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
-<glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
-<glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
-<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" />
-<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
-<glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
-<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
-</font>
-</defs></svg> 
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/fonts/glyphicons-halflings-regular.ttf b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/fonts/glyphicons-halflings-regular.ttf
deleted file mode 100644
index 67fa00bf83801d2fa568546b982c80d27f6ef74e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 41280
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

diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/fonts/glyphicons-halflings-regular.woff b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/fonts/glyphicons-halflings-regular.woff
deleted file mode 100644
index 8c54182aa5d4d1ab3c9171976b615c1dcb1dc187..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 23320
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

diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/js/bootstrap.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/js/bootstrap.js
deleted file mode 100644
index 53da1c77c08..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/js/bootstrap.js
+++ /dev/null
@@ -1,2114 +0,0 @@
-/*!
- * Bootstrap v3.2.0 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') }
-
-/* ========================================================================
- * Bootstrap: transition.js v3.2.0
- * http://getbootstrap.com/javascript/#transitions
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
-  // ============================================================
-
-  function transitionEnd() {
-    var el = document.createElement('bootstrap')
-
-    var transEndEventNames = {
-      WebkitTransition : 'webkitTransitionEnd',
-      MozTransition    : 'transitionend',
-      OTransition      : 'oTransitionEnd otransitionend',
-      transition       : 'transitionend'
-    }
-
-    for (var name in transEndEventNames) {
-      if (el.style[name] !== undefined) {
-        return { end: transEndEventNames[name] }
-      }
-    }
-
-    return false // explicit for ie8 (  ._.)
-  }
-
-  // http://blog.alexmaccaw.com/css-transitions
-  $.fn.emulateTransitionEnd = function (duration) {
-    var called = false
-    var $el = this
-    $(this).one('bsTransitionEnd', function () { called = true })
-    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
-    setTimeout(callback, duration)
-    return this
-  }
-
-  $(function () {
-    $.support.transition = transitionEnd()
-
-    if (!$.support.transition) return
-
-    $.event.special.bsTransitionEnd = {
-      bindType: $.support.transition.end,
-      delegateType: $.support.transition.end,
-      handle: function (e) {
-        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
-      }
-    }
-  })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: alert.js v3.2.0
- * http://getbootstrap.com/javascript/#alerts
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // ALERT CLASS DEFINITION
-  // ======================
-
-  var dismiss = '[data-dismiss="alert"]'
-  var Alert   = function (el) {
-    $(el).on('click', dismiss, this.close)
-  }
-
-  Alert.VERSION = '3.2.0'
-
-  Alert.prototype.close = function (e) {
-    var $this    = $(this)
-    var selector = $this.attr('data-target')
-
-    if (!selector) {
-      selector = $this.attr('href')
-      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
-    }
-
-    var $parent = $(selector)
-
-    if (e) e.preventDefault()
-
-    if (!$parent.length) {
-      $parent = $this.hasClass('alert') ? $this : $this.parent()
-    }
-
-    $parent.trigger(e = $.Event('close.bs.alert'))
-
-    if (e.isDefaultPrevented()) return
-
-    $parent.removeClass('in')
-
-    function removeElement() {
-      // detach from parent, fire event then clean up data
-      $parent.detach().trigger('closed.bs.alert').remove()
-    }
-
-    $.support.transition && $parent.hasClass('fade') ?
-      $parent
-        .one('bsTransitionEnd', removeElement)
-        .emulateTransitionEnd(150) :
-      removeElement()
-  }
-
-
-  // ALERT PLUGIN DEFINITION
-  // =======================
-
-  function Plugin(option) {
-    return this.each(function () {
-      var $this = $(this)
-      var data  = $this.data('bs.alert')
-
-      if (!data) $this.data('bs.alert', (data = new Alert(this)))
-      if (typeof option == 'string') data[option].call($this)
-    })
-  }
-
-  var old = $.fn.alert
-
-  $.fn.alert             = Plugin
-  $.fn.alert.Constructor = Alert
-
-
-  // ALERT NO CONFLICT
-  // =================
-
-  $.fn.alert.noConflict = function () {
-    $.fn.alert = old
-    return this
-  }
-
-
-  // ALERT DATA-API
-  // ==============
-
-  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: button.js v3.2.0
- * http://getbootstrap.com/javascript/#buttons
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // BUTTON PUBLIC CLASS DEFINITION
-  // ==============================
-
-  var Button = function (element, options) {
-    this.$element  = $(element)
-    this.options   = $.extend({}, Button.DEFAULTS, options)
-    this.isLoading = false
-  }
-
-  Button.VERSION  = '3.2.0'
-
-  Button.DEFAULTS = {
-    loadingText: 'loading...'
-  }
-
-  Button.prototype.setState = function (state) {
-    var d    = 'disabled'
-    var $el  = this.$element
-    var val  = $el.is('input') ? 'val' : 'html'
-    var data = $el.data()
-
-    state = state + 'Text'
-
-    if (data.resetText == null) $el.data('resetText', $el[val]())
-
-    $el[val](data[state] == null ? this.options[state] : data[state])
-
-    // push to event loop to allow forms to submit
-    setTimeout($.proxy(function () {
-      if (state == 'loadingText') {
-        this.isLoading = true
-        $el.addClass(d).attr(d, d)
-      } else if (this.isLoading) {
-        this.isLoading = false
-        $el.removeClass(d).removeAttr(d)
-      }
-    }, this), 0)
-  }
-
-  Button.prototype.toggle = function () {
-    var changed = true
-    var $parent = this.$element.closest('[data-toggle="buttons"]')
-
-    if ($parent.length) {
-      var $input = this.$element.find('input')
-      if ($input.prop('type') == 'radio') {
-        if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
-        else $parent.find('.active').removeClass('active')
-      }
-      if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
-    }
-
-    if (changed) this.$element.toggleClass('active')
-  }
-
-
-  // BUTTON PLUGIN DEFINITION
-  // ========================
-
-  function Plugin(option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.button')
-      var options = typeof option == 'object' && option
-
-      if (!data) $this.data('bs.button', (data = new Button(this, options)))
-
-      if (option == 'toggle') data.toggle()
-      else if (option) data.setState(option)
-    })
-  }
-
-  var old = $.fn.button
-
-  $.fn.button             = Plugin
-  $.fn.button.Constructor = Button
-
-
-  // BUTTON NO CONFLICT
-  // ==================
-
-  $.fn.button.noConflict = function () {
-    $.fn.button = old
-    return this
-  }
-
-
-  // BUTTON DATA-API
-  // ===============
-
-  $(document).on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
-    var $btn = $(e.target)
-    if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
-    Plugin.call($btn, 'toggle')
-    e.preventDefault()
-  })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: carousel.js v3.2.0
- * http://getbootstrap.com/javascript/#carousel
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // CAROUSEL CLASS DEFINITION
-  // =========================
-
-  var Carousel = function (element, options) {
-    this.$element    = $(element).on('keydown.bs.carousel', $.proxy(this.keydown, this))
-    this.$indicators = this.$element.find('.carousel-indicators')
-    this.options     = options
-    this.paused      =
-    this.sliding     =
-    this.interval    =
-    this.$active     =
-    this.$items      = null
-
-    this.options.pause == 'hover' && this.$element
-      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
-      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
-  }
-
-  Carousel.VERSION  = '3.2.0'
-
-  Carousel.DEFAULTS = {
-    interval: 5000,
-    pause: 'hover',
-    wrap: true
-  }
-
-  Carousel.prototype.keydown = function (e) {
-    switch (e.which) {
-      case 37: this.prev(); break
-      case 39: this.next(); break
-      default: return
-    }
-
-    e.preventDefault()
-  }
-
-  Carousel.prototype.cycle = function (e) {
-    e || (this.paused = false)
-
-    this.interval && clearInterval(this.interval)
-
-    this.options.interval
-      && !this.paused
-      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
-
-    return this
-  }
-
-  Carousel.prototype.getItemIndex = function (item) {
-    this.$items = item.parent().children('.item')
-    return this.$items.index(item || this.$active)
-  }
-
-  Carousel.prototype.to = function (pos) {
-    var that        = this
-    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
-
-    if (pos > (this.$items.length - 1) || pos < 0) return
-
-    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
-    if (activeIndex == pos) return this.pause().cycle()
-
-    return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
-  }
-
-  Carousel.prototype.pause = function (e) {
-    e || (this.paused = true)
-
-    if (this.$element.find('.next, .prev').length && $.support.transition) {
-      this.$element.trigger($.support.transition.end)
-      this.cycle(true)
-    }
-
-    this.interval = clearInterval(this.interval)
-
-    return this
-  }
-
-  Carousel.prototype.next = function () {
-    if (this.sliding) return
-    return this.slide('next')
-  }
-
-  Carousel.prototype.prev = function () {
-    if (this.sliding) return
-    return this.slide('prev')
-  }
-
-  Carousel.prototype.slide = function (type, next) {
-    var $active   = this.$element.find('.item.active')
-    var $next     = next || $active[type]()
-    var isCycling = this.interval
-    var direction = type == 'next' ? 'left' : 'right'
-    var fallback  = type == 'next' ? 'first' : 'last'
-    var that      = this
-
-    if (!$next.length) {
-      if (!this.options.wrap) return
-      $next = this.$element.find('.item')[fallback]()
-    }
-
-    if ($next.hasClass('active')) return (this.sliding = false)
-
-    var relatedTarget = $next[0]
-    var slideEvent = $.Event('slide.bs.carousel', {
-      relatedTarget: relatedTarget,
-      direction: direction
-    })
-    this.$element.trigger(slideEvent)
-    if (slideEvent.isDefaultPrevented()) return
-
-    this.sliding = true
-
-    isCycling && this.pause()
-
-    if (this.$indicators.length) {
-      this.$indicators.find('.active').removeClass('active')
-      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
-      $nextIndicator && $nextIndicator.addClass('active')
-    }
-
-    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
-    if ($.support.transition && this.$element.hasClass('slide')) {
-      $next.addClass(type)
-      $next[0].offsetWidth // force reflow
-      $active.addClass(direction)
-      $next.addClass(direction)
-      $active
-        .one('bsTransitionEnd', function () {
-          $next.removeClass([type, direction].join(' ')).addClass('active')
-          $active.removeClass(['active', direction].join(' '))
-          that.sliding = false
-          setTimeout(function () {
-            that.$element.trigger(slidEvent)
-          }, 0)
-        })
-        .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
-    } else {
-      $active.removeClass('active')
-      $next.addClass('active')
-      this.sliding = false
-      this.$element.trigger(slidEvent)
-    }
-
-    isCycling && this.cycle()
-
-    return this
-  }
-
-
-  // CAROUSEL PLUGIN DEFINITION
-  // ==========================
-
-  function Plugin(option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.carousel')
-      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
-      var action  = typeof option == 'string' ? option : options.slide
-
-      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
-      if (typeof option == 'number') data.to(option)
-      else if (action) data[action]()
-      else if (options.interval) data.pause().cycle()
-    })
-  }
-
-  var old = $.fn.carousel
-
-  $.fn.carousel             = Plugin
-  $.fn.carousel.Constructor = Carousel
-
-
-  // CAROUSEL NO CONFLICT
-  // ====================
-
-  $.fn.carousel.noConflict = function () {
-    $.fn.carousel = old
-    return this
-  }
-
-
-  // CAROUSEL DATA-API
-  // =================
-
-  $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
-    var href
-    var $this   = $(this)
-    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
-    if (!$target.hasClass('carousel')) return
-    var options = $.extend({}, $target.data(), $this.data())
-    var slideIndex = $this.attr('data-slide-to')
-    if (slideIndex) options.interval = false
-
-    Plugin.call($target, options)
-
-    if (slideIndex) {
-      $target.data('bs.carousel').to(slideIndex)
-    }
-
-    e.preventDefault()
-  })
-
-  $(window).on('load', function () {
-    $('[data-ride="carousel"]').each(function () {
-      var $carousel = $(this)
-      Plugin.call($carousel, $carousel.data())
-    })
-  })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: collapse.js v3.2.0
- * http://getbootstrap.com/javascript/#collapse
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // COLLAPSE PUBLIC CLASS DEFINITION
-  // ================================
-
-  var Collapse = function (element, options) {
-    this.$element      = $(element)
-    this.options       = $.extend({}, Collapse.DEFAULTS, options)
-    this.transitioning = null
-
-    if (this.options.parent) this.$parent = $(this.options.parent)
-    if (this.options.toggle) this.toggle()
-  }
-
-  Collapse.VERSION  = '3.2.0'
-
-  Collapse.DEFAULTS = {
-    toggle: true
-  }
-
-  Collapse.prototype.dimension = function () {
-    var hasWidth = this.$element.hasClass('width')
-    return hasWidth ? 'width' : 'height'
-  }
-
-  Collapse.prototype.show = function () {
-    if (this.transitioning || this.$element.hasClass('in')) return
-
-    var startEvent = $.Event('show.bs.collapse')
-    this.$element.trigger(startEvent)
-    if (startEvent.isDefaultPrevented()) return
-
-    var actives = this.$parent && this.$parent.find('> .panel > .in')
-
-    if (actives && actives.length) {
-      var hasData = actives.data('bs.collapse')
-      if (hasData && hasData.transitioning) return
-      Plugin.call(actives, 'hide')
-      hasData || actives.data('bs.collapse', null)
-    }
-
-    var dimension = this.dimension()
-
-    this.$element
-      .removeClass('collapse')
-      .addClass('collapsing')[dimension](0)
-
-    this.transitioning = 1
-
-    var complete = function () {
-      this.$element
-        .removeClass('collapsing')
-        .addClass('collapse in')[dimension]('')
-      this.transitioning = 0
-      this.$element
-        .trigger('shown.bs.collapse')
-    }
-
-    if (!$.support.transition) return complete.call(this)
-
-    var scrollSize = $.camelCase(['scroll', dimension].join('-'))
-
-    this.$element
-      .one('bsTransitionEnd', $.proxy(complete, this))
-      .emulateTransitionEnd(350)[dimension](this.$element[0][scrollSize])
-  }
-
-  Collapse.prototype.hide = function () {
-    if (this.transitioning || !this.$element.hasClass('in')) return
-
-    var startEvent = $.Event('hide.bs.collapse')
-    this.$element.trigger(startEvent)
-    if (startEvent.isDefaultPrevented()) return
-
-    var dimension = this.dimension()
-
-    this.$element[dimension](this.$element[dimension]())[0].offsetHeight
-
-    this.$element
-      .addClass('collapsing')
-      .removeClass('collapse')
-      .removeClass('in')
-
-    this.transitioning = 1
-
-    var complete = function () {
-      this.transitioning = 0
-      this.$element
-        .trigger('hidden.bs.collapse')
-        .removeClass('collapsing')
-        .addClass('collapse')
-    }
-
-    if (!$.support.transition) return complete.call(this)
-
-    this.$element
-      [dimension](0)
-      .one('bsTransitionEnd', $.proxy(complete, this))
-      .emulateTransitionEnd(350)
-  }
-
-  Collapse.prototype.toggle = function () {
-    this[this.$element.hasClass('in') ? 'hide' : 'show']()
-  }
-
-
-  // COLLAPSE PLUGIN DEFINITION
-  // ==========================
-
-  function Plugin(option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.collapse')
-      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
-
-      if (!data && options.toggle && option == 'show') option = !option
-      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  var old = $.fn.collapse
-
-  $.fn.collapse             = Plugin
-  $.fn.collapse.Constructor = Collapse
-
-
-  // COLLAPSE NO CONFLICT
-  // ====================
-
-  $.fn.collapse.noConflict = function () {
-    $.fn.collapse = old
-    return this
-  }
-
-
-  // COLLAPSE DATA-API
-  // =================
-
-  $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
-    var href
-    var $this   = $(this)
-    var target  = $this.attr('data-target')
-        || e.preventDefault()
-        || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
-    var $target = $(target)
-    var data    = $target.data('bs.collapse')
-    var option  = data ? 'toggle' : $this.data()
-    var parent  = $this.attr('data-parent')
-    var $parent = parent && $(parent)
-
-    if (!data || !data.transitioning) {
-      if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed')
-      $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
-    }
-
-    Plugin.call($target, option)
-  })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: dropdown.js v3.2.0
- * http://getbootstrap.com/javascript/#dropdowns
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // DROPDOWN CLASS DEFINITION
-  // =========================
-
-  var backdrop = '.dropdown-backdrop'
-  var toggle   = '[data-toggle="dropdown"]'
-  var Dropdown = function (element) {
-    $(element).on('click.bs.dropdown', this.toggle)
-  }
-
-  Dropdown.VERSION = '3.2.0'
-
-  Dropdown.prototype.toggle = function (e) {
-    var $this = $(this)
-
-    if ($this.is('.disabled, :disabled')) return
-
-    var $parent  = getParent($this)
-    var isActive = $parent.hasClass('open')
-
-    clearMenus()
-
-    if (!isActive) {
-      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
-        // if mobile we use a backdrop because click events don't delegate
-        $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
-      }
-
-      var relatedTarget = { relatedTarget: this }
-      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
-
-      if (e.isDefaultPrevented()) return
-
-      $this.trigger('focus')
-
-      $parent
-        .toggleClass('open')
-        .trigger('shown.bs.dropdown', relatedTarget)
-    }
-
-    return false
-  }
-
-  Dropdown.prototype.keydown = function (e) {
-    if (!/(38|40|27)/.test(e.keyCode)) return
-
-    var $this = $(this)
-
-    e.preventDefault()
-    e.stopPropagation()
-
-    if ($this.is('.disabled, :disabled')) return
-
-    var $parent  = getParent($this)
-    var isActive = $parent.hasClass('open')
-
-    if (!isActive || (isActive && e.keyCode == 27)) {
-      if (e.which == 27) $parent.find(toggle).trigger('focus')
-      return $this.trigger('click')
-    }
-
-    var desc = ' li:not(.divider):visible a'
-    var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
-
-    if (!$items.length) return
-
-    var index = $items.index($items.filter(':focus'))
-
-    if (e.keyCode == 38 && index > 0)                 index--                        // up
-    if (e.keyCode == 40 && index < $items.length - 1) index++                        // down
-    if (!~index)                                      index = 0
-
-    $items.eq(index).trigger('focus')
-  }
-
-  function clearMenus(e) {
-    if (e && e.which === 3) return
-    $(backdrop).remove()
-    $(toggle).each(function () {
-      var $parent = getParent($(this))
-      var relatedTarget = { relatedTarget: this }
-      if (!$parent.hasClass('open')) return
-      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
-      if (e.isDefaultPrevented()) return
-      $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
-    })
-  }
-
-  function getParent($this) {
-    var selector = $this.attr('data-target')
-
-    if (!selector) {
-      selector = $this.attr('href')
-      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
-    }
-
-    var $parent = selector && $(selector)
-
-    return $parent && $parent.length ? $parent : $this.parent()
-  }
-
-
-  // DROPDOWN PLUGIN DEFINITION
-  // ==========================
-
-  function Plugin(option) {
-    return this.each(function () {
-      var $this = $(this)
-      var data  = $this.data('bs.dropdown')
-
-      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
-      if (typeof option == 'string') data[option].call($this)
-    })
-  }
-
-  var old = $.fn.dropdown
-
-  $.fn.dropdown             = Plugin
-  $.fn.dropdown.Constructor = Dropdown
-
-
-  // DROPDOWN NO CONFLICT
-  // ====================
-
-  $.fn.dropdown.noConflict = function () {
-    $.fn.dropdown = old
-    return this
-  }
-
-
-  // APPLY TO STANDARD DROPDOWN ELEMENTS
-  // ===================================
-
-  $(document)
-    .on('click.bs.dropdown.data-api', clearMenus)
-    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
-    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
-    .on('keydown.bs.dropdown.data-api', toggle + ', [role="menu"], [role="listbox"]', Dropdown.prototype.keydown)
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: modal.js v3.2.0
- * http://getbootstrap.com/javascript/#modals
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // MODAL CLASS DEFINITION
-  // ======================
-
-  var Modal = function (element, options) {
-    this.options        = options
-    this.$body          = $(document.body)
-    this.$element       = $(element)
-    this.$backdrop      =
-    this.isShown        = null
-    this.scrollbarWidth = 0
-
-    if (this.options.remote) {
-      this.$element
-        .find('.modal-content')
-        .load(this.options.remote, $.proxy(function () {
-          this.$element.trigger('loaded.bs.modal')
-        }, this))
-    }
-  }
-
-  Modal.VERSION  = '3.2.0'
-
-  Modal.DEFAULTS = {
-    backdrop: true,
-    keyboard: true,
-    show: true
-  }
-
-  Modal.prototype.toggle = function (_relatedTarget) {
-    return this.isShown ? this.hide() : this.show(_relatedTarget)
-  }
-
-  Modal.prototype.show = function (_relatedTarget) {
-    var that = this
-    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
-
-    this.$element.trigger(e)
-
-    if (this.isShown || e.isDefaultPrevented()) return
-
-    this.isShown = true
-
-    this.checkScrollbar()
-    this.$body.addClass('modal-open')
-
-    this.setScrollbar()
-    this.escape()
-
-    this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
-
-    this.backdrop(function () {
-      var transition = $.support.transition && that.$element.hasClass('fade')
-
-      if (!that.$element.parent().length) {
-        that.$element.appendTo(that.$body) // don't move modals dom position
-      }
-
-      that.$element
-        .show()
-        .scrollTop(0)
-
-      if (transition) {
-        that.$element[0].offsetWidth // force reflow
-      }
-
-      that.$element
-        .addClass('in')
-        .attr('aria-hidden', false)
-
-      that.enforceFocus()
-
-      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
-
-      transition ?
-        that.$element.find('.modal-dialog') // wait for modal to slide in
-          .one('bsTransitionEnd', function () {
-            that.$element.trigger('focus').trigger(e)
-          })
-          .emulateTransitionEnd(300) :
-        that.$element.trigger('focus').trigger(e)
-    })
-  }
-
-  Modal.prototype.hide = function (e) {
-    if (e) e.preventDefault()
-
-    e = $.Event('hide.bs.modal')
-
-    this.$element.trigger(e)
-
-    if (!this.isShown || e.isDefaultPrevented()) return
-
-    this.isShown = false
-
-    this.$body.removeClass('modal-open')
-
-    this.resetScrollbar()
-    this.escape()
-
-    $(document).off('focusin.bs.modal')
-
-    this.$element
-      .removeClass('in')
-      .attr('aria-hidden', true)
-      .off('click.dismiss.bs.modal')
-
-    $.support.transition && this.$element.hasClass('fade') ?
-      this.$element
-        .one('bsTransitionEnd', $.proxy(this.hideModal, this))
-        .emulateTransitionEnd(300) :
-      this.hideModal()
-  }
-
-  Modal.prototype.enforceFocus = function () {
-    $(document)
-      .off('focusin.bs.modal') // guard against infinite focus loop
-      .on('focusin.bs.modal', $.proxy(function (e) {
-        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
-          this.$element.trigger('focus')
-        }
-      }, this))
-  }
-
-  Modal.prototype.escape = function () {
-    if (this.isShown && this.options.keyboard) {
-      this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {
-        e.which == 27 && this.hide()
-      }, this))
-    } else if (!this.isShown) {
-      this.$element.off('keyup.dismiss.bs.modal')
-    }
-  }
-
-  Modal.prototype.hideModal = function () {
-    var that = this
-    this.$element.hide()
-    this.backdrop(function () {
-      that.$element.trigger('hidden.bs.modal')
-    })
-  }
-
-  Modal.prototype.removeBackdrop = function () {
-    this.$backdrop && this.$backdrop.remove()
-    this.$backdrop = null
-  }
-
-  Modal.prototype.backdrop = function (callback) {
-    var that = this
-    var 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(this.$body)
-
-      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
-        if (e.target !== e.currentTarget) return
-        this.options.backdrop == 'static'
-          ? this.$element[0].focus.call(this.$element[0])
-          : this.hide.call(this)
-      }, this))
-
-      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
-
-      this.$backdrop.addClass('in')
-
-      if (!callback) return
-
-      doAnimate ?
-        this.$backdrop
-          .one('bsTransitionEnd', callback)
-          .emulateTransitionEnd(150) :
-        callback()
-
-    } else if (!this.isShown && this.$backdrop) {
-      this.$backdrop.removeClass('in')
-
-      var callbackRemove = function () {
-        that.removeBackdrop()
-        callback && callback()
-      }
-      $.support.transition && this.$element.hasClass('fade') ?
-        this.$backdrop
-          .one('bsTransitionEnd', callbackRemove)
-          .emulateTransitionEnd(150) :
-        callbackRemove()
-
-    } else if (callback) {
-      callback()
-    }
-  }
-
-  Modal.prototype.checkScrollbar = function () {
-    if (document.body.clientWidth >= window.innerWidth) return
-    this.scrollbarWidth = this.scrollbarWidth || this.measureScrollbar()
-  }
-
-  Modal.prototype.setScrollbar = function () {
-    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
-    if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
-  }
-
-  Modal.prototype.resetScrollbar = function () {
-    this.$body.css('padding-right', '')
-  }
-
-  Modal.prototype.measureScrollbar = function () { // thx walsh
-    var scrollDiv = document.createElement('div')
-    scrollDiv.className = 'modal-scrollbar-measure'
-    this.$body.append(scrollDiv)
-    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
-    this.$body[0].removeChild(scrollDiv)
-    return scrollbarWidth
-  }
-
-
-  // MODAL PLUGIN DEFINITION
-  // =======================
-
-  function Plugin(option, _relatedTarget) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.modal')
-      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
-
-      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
-      if (typeof option == 'string') data[option](_relatedTarget)
-      else if (options.show) data.show(_relatedTarget)
-    })
-  }
-
-  var old = $.fn.modal
-
-  $.fn.modal             = Plugin
-  $.fn.modal.Constructor = Modal
-
-
-  // MODAL NO CONFLICT
-  // =================
-
-  $.fn.modal.noConflict = function () {
-    $.fn.modal = old
-    return this
-  }
-
-
-  // MODAL DATA-API
-  // ==============
-
-  $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
-    var $this   = $(this)
-    var href    = $this.attr('href')
-    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
-    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
-
-    if ($this.is('a')) e.preventDefault()
-
-    $target.one('show.bs.modal', function (showEvent) {
-      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
-      $target.one('hidden.bs.modal', function () {
-        $this.is(':visible') && $this.trigger('focus')
-      })
-    })
-    Plugin.call($target, option, this)
-  })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: tooltip.js v3.2.0
- * http://getbootstrap.com/javascript/#tooltip
- * Inspired by the original jQuery.tipsy by Jason Frame
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // TOOLTIP PUBLIC CLASS DEFINITION
-  // ===============================
-
-  var Tooltip = function (element, options) {
-    this.type       =
-    this.options    =
-    this.enabled    =
-    this.timeout    =
-    this.hoverState =
-    this.$element   = null
-
-    this.init('tooltip', element, options)
-  }
-
-  Tooltip.VERSION  = '3.2.0'
-
-  Tooltip.DEFAULTS = {
-    animation: true,
-    placement: 'top',
-    selector: false,
-    template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
-    trigger: 'hover focus',
-    title: '',
-    delay: 0,
-    html: false,
-    container: false,
-    viewport: {
-      selector: 'body',
-      padding: 0
-    }
-  }
-
-  Tooltip.prototype.init = function (type, element, options) {
-    this.enabled   = true
-    this.type      = type
-    this.$element  = $(element)
-    this.options   = this.getOptions(options)
-    this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)
-
-    var triggers = this.options.trigger.split(' ')
-
-    for (var i = triggers.length; i--;) {
-      var trigger = triggers[i]
-
-      if (trigger == 'click') {
-        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
-      } else if (trigger != 'manual') {
-        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'
-        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
-
-        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
-        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
-      }
-    }
-
-    this.options.selector ?
-      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
-      this.fixTitle()
-  }
-
-  Tooltip.prototype.getDefaults = function () {
-    return Tooltip.DEFAULTS
-  }
-
-  Tooltip.prototype.getOptions = function (options) {
-    options = $.extend({}, this.getDefaults(), this.$element.data(), options)
-
-    if (options.delay && typeof options.delay == 'number') {
-      options.delay = {
-        show: options.delay,
-        hide: options.delay
-      }
-    }
-
-    return options
-  }
-
-  Tooltip.prototype.getDelegateOptions = function () {
-    var options  = {}
-    var defaults = this.getDefaults()
-
-    this._options && $.each(this._options, function (key, value) {
-      if (defaults[key] != value) options[key] = value
-    })
-
-    return options
-  }
-
-  Tooltip.prototype.enter = function (obj) {
-    var self = obj instanceof this.constructor ?
-      obj : $(obj.currentTarget).data('bs.' + this.type)
-
-    if (!self) {
-      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
-      $(obj.currentTarget).data('bs.' + this.type, self)
-    }
-
-    clearTimeout(self.timeout)
-
-    self.hoverState = 'in'
-
-    if (!self.options.delay || !self.options.delay.show) return self.show()
-
-    self.timeout = setTimeout(function () {
-      if (self.hoverState == 'in') self.show()
-    }, self.options.delay.show)
-  }
-
-  Tooltip.prototype.leave = function (obj) {
-    var self = obj instanceof this.constructor ?
-      obj : $(obj.currentTarget).data('bs.' + this.type)
-
-    if (!self) {
-      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
-      $(obj.currentTarget).data('bs.' + this.type, self)
-    }
-
-    clearTimeout(self.timeout)
-
-    self.hoverState = 'out'
-
-    if (!self.options.delay || !self.options.delay.hide) return self.hide()
-
-    self.timeout = setTimeout(function () {
-      if (self.hoverState == 'out') self.hide()
-    }, self.options.delay.hide)
-  }
-
-  Tooltip.prototype.show = function () {
-    var e = $.Event('show.bs.' + this.type)
-
-    if (this.hasContent() && this.enabled) {
-      this.$element.trigger(e)
-
-      var inDom = $.contains(document.documentElement, this.$element[0])
-      if (e.isDefaultPrevented() || !inDom) return
-      var that = this
-
-      var $tip = this.tip()
-
-      var tipId = this.getUID(this.type)
-
-      this.setContent()
-      $tip.attr('id', tipId)
-      this.$element.attr('aria-describedby', tipId)
-
-      if (this.options.animation) $tip.addClass('fade')
-
-      var placement = typeof this.options.placement == 'function' ?
-        this.options.placement.call(this, $tip[0], this.$element[0]) :
-        this.options.placement
-
-      var autoToken = /\s?auto?\s?/i
-      var autoPlace = autoToken.test(placement)
-      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
-
-      $tip
-        .detach()
-        .css({ top: 0, left: 0, display: 'block' })
-        .addClass(placement)
-        .data('bs.' + this.type, this)
-
-      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
-
-      var pos          = this.getPosition()
-      var actualWidth  = $tip[0].offsetWidth
-      var actualHeight = $tip[0].offsetHeight
-
-      if (autoPlace) {
-        var orgPlacement = placement
-        var $parent      = this.$element.parent()
-        var parentDim    = this.getPosition($parent)
-
-        placement = placement == 'bottom' && pos.top   + pos.height       + actualHeight - parentDim.scroll > parentDim.height ? 'top'    :
-                    placement == 'top'    && pos.top   - parentDim.scroll - actualHeight < 0                                   ? 'bottom' :
-                    placement == 'right'  && pos.right + actualWidth      > parentDim.width                                    ? 'left'   :
-                    placement == 'left'   && pos.left  - actualWidth      < parentDim.left                                     ? 'right'  :
-                    placement
-
-        $tip
-          .removeClass(orgPlacement)
-          .addClass(placement)
-      }
-
-      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
-
-      this.applyPlacement(calculatedOffset, placement)
-
-      var complete = function () {
-        that.$element.trigger('shown.bs.' + that.type)
-        that.hoverState = null
-      }
-
-      $.support.transition && this.$tip.hasClass('fade') ?
-        $tip
-          .one('bsTransitionEnd', complete)
-          .emulateTransitionEnd(150) :
-        complete()
-    }
-  }
-
-  Tooltip.prototype.applyPlacement = function (offset, placement) {
-    var $tip   = this.tip()
-    var width  = $tip[0].offsetWidth
-    var height = $tip[0].offsetHeight
-
-    // manually read margins because getBoundingClientRect includes difference
-    var marginTop = parseInt($tip.css('margin-top'), 10)
-    var marginLeft = parseInt($tip.css('margin-left'), 10)
-
-    // we must check for NaN for ie 8/9
-    if (isNaN(marginTop))  marginTop  = 0
-    if (isNaN(marginLeft)) marginLeft = 0
-
-    offset.top  = offset.top  + marginTop
-    offset.left = offset.left + marginLeft
-
-    // $.fn.offset doesn't round pixel values
-    // so we use setOffset directly with our own function B-0
-    $.offset.setOffset($tip[0], $.extend({
-      using: function (props) {
-        $tip.css({
-          top: Math.round(props.top),
-          left: Math.round(props.left)
-        })
-      }
-    }, offset), 0)
-
-    $tip.addClass('in')
-
-    // check to see if placing tip in new offset caused the tip to resize itself
-    var actualWidth  = $tip[0].offsetWidth
-    var actualHeight = $tip[0].offsetHeight
-
-    if (placement == 'top' && actualHeight != height) {
-      offset.top = offset.top + height - actualHeight
-    }
-
-    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
-
-    if (delta.left) offset.left += delta.left
-    else offset.top += delta.top
-
-    var arrowDelta          = delta.left ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
-    var arrowPosition       = delta.left ? 'left'        : 'top'
-    var arrowOffsetPosition = delta.left ? 'offsetWidth' : 'offsetHeight'
-
-    $tip.offset(offset)
-    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], arrowPosition)
-  }
-
-  Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
-    this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')
-  }
-
-  Tooltip.prototype.setContent = function () {
-    var $tip  = this.tip()
-    var title = this.getTitle()
-
-    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
-    $tip.removeClass('fade in top bottom left right')
-  }
-
-  Tooltip.prototype.hide = function () {
-    var that = this
-    var $tip = this.tip()
-    var e    = $.Event('hide.bs.' + this.type)
-
-    this.$element.removeAttr('aria-describedby')
-
-    function complete() {
-      if (that.hoverState != 'in') $tip.detach()
-      that.$element.trigger('hidden.bs.' + that.type)
-    }
-
-    this.$element.trigger(e)
-
-    if (e.isDefaultPrevented()) return
-
-    $tip.removeClass('in')
-
-    $.support.transition && this.$tip.hasClass('fade') ?
-      $tip
-        .one('bsTransitionEnd', complete)
-        .emulateTransitionEnd(150) :
-      complete()
-
-    this.hoverState = null
-
-    return this
-  }
-
-  Tooltip.prototype.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') || '').attr('title', '')
-    }
-  }
-
-  Tooltip.prototype.hasContent = function () {
-    return this.getTitle()
-  }
-
-  Tooltip.prototype.getPosition = function ($element) {
-    $element   = $element || this.$element
-    var el     = $element[0]
-    var isBody = el.tagName == 'BODY'
-    return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : null, {
-      scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop(),
-      width:  isBody ? $(window).width()  : $element.outerWidth(),
-      height: isBody ? $(window).height() : $element.outerHeight()
-    }, isBody ? { top: 0, left: 0 } : $element.offset())
-  }
-
-  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
-    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2  } :
-           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2  } :
-           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
-        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width   }
-
-  }
-
-  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
-    var delta = { top: 0, left: 0 }
-    if (!this.$viewport) return delta
-
-    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
-    var viewportDimensions = this.getPosition(this.$viewport)
-
-    if (/right|left/.test(placement)) {
-      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll
-      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
-      if (topEdgeOffset < viewportDimensions.top) { // top overflow
-        delta.top = viewportDimensions.top - topEdgeOffset
-      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
-        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
-      }
-    } else {
-      var leftEdgeOffset  = pos.left - viewportPadding
-      var rightEdgeOffset = pos.left + viewportPadding + actualWidth
-      if (leftEdgeOffset < viewportDimensions.left) { // left overflow
-        delta.left = viewportDimensions.left - leftEdgeOffset
-      } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
-        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
-      }
-    }
-
-    return delta
-  }
-
-  Tooltip.prototype.getTitle = function () {
-    var title
-    var $e = this.$element
-    var o  = this.options
-
-    title = $e.attr('data-original-title')
-      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
-
-    return title
-  }
-
-  Tooltip.prototype.getUID = function (prefix) {
-    do prefix += ~~(Math.random() * 1000000)
-    while (document.getElementById(prefix))
-    return prefix
-  }
-
-  Tooltip.prototype.tip = function () {
-    return (this.$tip = this.$tip || $(this.options.template))
-  }
-
-  Tooltip.prototype.arrow = function () {
-    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
-  }
-
-  Tooltip.prototype.validate = function () {
-    if (!this.$element[0].parentNode) {
-      this.hide()
-      this.$element = null
-      this.options  = null
-    }
-  }
-
-  Tooltip.prototype.enable = function () {
-    this.enabled = true
-  }
-
-  Tooltip.prototype.disable = function () {
-    this.enabled = false
-  }
-
-  Tooltip.prototype.toggleEnabled = function () {
-    this.enabled = !this.enabled
-  }
-
-  Tooltip.prototype.toggle = function (e) {
-    var self = this
-    if (e) {
-      self = $(e.currentTarget).data('bs.' + this.type)
-      if (!self) {
-        self = new this.constructor(e.currentTarget, this.getDelegateOptions())
-        $(e.currentTarget).data('bs.' + this.type, self)
-      }
-    }
-
-    self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
-  }
-
-  Tooltip.prototype.destroy = function () {
-    clearTimeout(this.timeout)
-    this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
-  }
-
-
-  // TOOLTIP PLUGIN DEFINITION
-  // =========================
-
-  function Plugin(option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.tooltip')
-      var options = typeof option == 'object' && option
-
-      if (!data && option == 'destroy') return
-      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  var old = $.fn.tooltip
-
-  $.fn.tooltip             = Plugin
-  $.fn.tooltip.Constructor = Tooltip
-
-
-  // TOOLTIP NO CONFLICT
-  // ===================
-
-  $.fn.tooltip.noConflict = function () {
-    $.fn.tooltip = old
-    return this
-  }
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: popover.js v3.2.0
- * http://getbootstrap.com/javascript/#popovers
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // POPOVER PUBLIC CLASS DEFINITION
-  // ===============================
-
-  var Popover = function (element, options) {
-    this.init('popover', element, options)
-  }
-
-  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
-
-  Popover.VERSION  = '3.2.0'
-
-  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
-    placement: 'right',
-    trigger: 'click',
-    content: '',
-    template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
-  })
-
-
-  // NOTE: POPOVER EXTENDS tooltip.js
-  // ================================
-
-  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
-
-  Popover.prototype.constructor = Popover
-
-  Popover.prototype.getDefaults = function () {
-    return Popover.DEFAULTS
-  }
-
-  Popover.prototype.setContent = function () {
-    var $tip    = this.tip()
-    var title   = this.getTitle()
-    var content = this.getContent()
-
-    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
-    $tip.find('.popover-content').empty()[ // we use append for html objects to maintain js events
-      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
-    ](content)
-
-    $tip.removeClass('fade top bottom left right in')
-
-    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
-    // this manually by checking the contents.
-    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
-  }
-
-  Popover.prototype.hasContent = function () {
-    return this.getTitle() || this.getContent()
-  }
-
-  Popover.prototype.getContent = function () {
-    var $e = this.$element
-    var o  = this.options
-
-    return $e.attr('data-content')
-      || (typeof o.content == 'function' ?
-            o.content.call($e[0]) :
-            o.content)
-  }
-
-  Popover.prototype.arrow = function () {
-    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
-  }
-
-  Popover.prototype.tip = function () {
-    if (!this.$tip) this.$tip = $(this.options.template)
-    return this.$tip
-  }
-
-
-  // POPOVER PLUGIN DEFINITION
-  // =========================
-
-  function Plugin(option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.popover')
-      var options = typeof option == 'object' && option
-
-      if (!data && option == 'destroy') return
-      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  var old = $.fn.popover
-
-  $.fn.popover             = Plugin
-  $.fn.popover.Constructor = Popover
-
-
-  // POPOVER NO CONFLICT
-  // ===================
-
-  $.fn.popover.noConflict = function () {
-    $.fn.popover = old
-    return this
-  }
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: scrollspy.js v3.2.0
- * http://getbootstrap.com/javascript/#scrollspy
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // SCROLLSPY CLASS DEFINITION
-  // ==========================
-
-  function ScrollSpy(element, options) {
-    var process  = $.proxy(this.process, this)
-
-    this.$body          = $('body')
-    this.$scrollElement = $(element).is('body') ? $(window) : $(element)
-    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)
-    this.selector       = (this.options.target || '') + ' .nav li > a'
-    this.offsets        = []
-    this.targets        = []
-    this.activeTarget   = null
-    this.scrollHeight   = 0
-
-    this.$scrollElement.on('scroll.bs.scrollspy', process)
-    this.refresh()
-    this.process()
-  }
-
-  ScrollSpy.VERSION  = '3.2.0'
-
-  ScrollSpy.DEFAULTS = {
-    offset: 10
-  }
-
-  ScrollSpy.prototype.getScrollHeight = function () {
-    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
-  }
-
-  ScrollSpy.prototype.refresh = function () {
-    var offsetMethod = 'offset'
-    var offsetBase   = 0
-
-    if (!$.isWindow(this.$scrollElement[0])) {
-      offsetMethod = 'position'
-      offsetBase   = this.$scrollElement.scrollTop()
-    }
-
-    this.offsets = []
-    this.targets = []
-    this.scrollHeight = this.getScrollHeight()
-
-    var self     = this
-
-    this.$body
-      .find(this.selector)
-      .map(function () {
-        var $el   = $(this)
-        var href  = $el.data('target') || $el.attr('href')
-        var $href = /^#./.test(href) && $(href)
-
-        return ($href
-          && $href.length
-          && $href.is(':visible')
-          && [[$href[offsetMethod]().top + offsetBase, href]]) || null
-      })
-      .sort(function (a, b) { return a[0] - b[0] })
-      .each(function () {
-        self.offsets.push(this[0])
-        self.targets.push(this[1])
-      })
-  }
-
-  ScrollSpy.prototype.process = function () {
-    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset
-    var scrollHeight = this.getScrollHeight()
-    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()
-    var offsets      = this.offsets
-    var targets      = this.targets
-    var activeTarget = this.activeTarget
-    var i
-
-    if (this.scrollHeight != scrollHeight) {
-      this.refresh()
-    }
-
-    if (scrollTop >= maxScroll) {
-      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
-    }
-
-    if (activeTarget && scrollTop <= offsets[0]) {
-      return activeTarget != (i = targets[0]) && this.activate(i)
-    }
-
-    for (i = offsets.length; i--;) {
-      activeTarget != targets[i]
-        && scrollTop >= offsets[i]
-        && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
-        && this.activate(targets[i])
-    }
-  }
-
-  ScrollSpy.prototype.activate = function (target) {
-    this.activeTarget = target
-
-    $(this.selector)
-      .parentsUntil(this.options.target, '.active')
-      .removeClass('active')
-
-    var selector = this.selector +
-        '[data-target="' + target + '"],' +
-        this.selector + '[href="' + target + '"]'
-
-    var active = $(selector)
-      .parents('li')
-      .addClass('active')
-
-    if (active.parent('.dropdown-menu').length) {
-      active = active
-        .closest('li.dropdown')
-        .addClass('active')
-    }
-
-    active.trigger('activate.bs.scrollspy')
-  }
-
-
-  // SCROLLSPY PLUGIN DEFINITION
-  // ===========================
-
-  function Plugin(option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.scrollspy')
-      var options = typeof option == 'object' && option
-
-      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  var old = $.fn.scrollspy
-
-  $.fn.scrollspy             = Plugin
-  $.fn.scrollspy.Constructor = ScrollSpy
-
-
-  // SCROLLSPY NO CONFLICT
-  // =====================
-
-  $.fn.scrollspy.noConflict = function () {
-    $.fn.scrollspy = old
-    return this
-  }
-
-
-  // SCROLLSPY DATA-API
-  // ==================
-
-  $(window).on('load.bs.scrollspy.data-api', function () {
-    $('[data-spy="scroll"]').each(function () {
-      var $spy = $(this)
-      Plugin.call($spy, $spy.data())
-    })
-  })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: tab.js v3.2.0
- * http://getbootstrap.com/javascript/#tabs
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // TAB CLASS DEFINITION
-  // ====================
-
-  var Tab = function (element) {
-    this.element = $(element)
-  }
-
-  Tab.VERSION = '3.2.0'
-
-  Tab.prototype.show = function () {
-    var $this    = this.element
-    var $ul      = $this.closest('ul:not(.dropdown-menu)')
-    var selector = $this.data('target')
-
-    if (!selector) {
-      selector = $this.attr('href')
-      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
-    }
-
-    if ($this.parent('li').hasClass('active')) return
-
-    var previous = $ul.find('.active:last a')[0]
-    var e        = $.Event('show.bs.tab', {
-      relatedTarget: previous
-    })
-
-    $this.trigger(e)
-
-    if (e.isDefaultPrevented()) return
-
-    var $target = $(selector)
-
-    this.activate($this.closest('li'), $ul)
-    this.activate($target, $target.parent(), function () {
-      $this.trigger({
-        type: 'shown.bs.tab',
-        relatedTarget: previous
-      })
-    })
-  }
-
-  Tab.prototype.activate = function (element, container, callback) {
-    var $active    = container.find('> .active')
-    var 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('bsTransitionEnd', next)
-        .emulateTransitionEnd(150) :
-      next()
-
-    $active.removeClass('in')
-  }
-
-
-  // TAB PLUGIN DEFINITION
-  // =====================
-
-  function Plugin(option) {
-    return this.each(function () {
-      var $this = $(this)
-      var data  = $this.data('bs.tab')
-
-      if (!data) $this.data('bs.tab', (data = new Tab(this)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  var old = $.fn.tab
-
-  $.fn.tab             = Plugin
-  $.fn.tab.Constructor = Tab
-
-
-  // TAB NO CONFLICT
-  // ===============
-
-  $.fn.tab.noConflict = function () {
-    $.fn.tab = old
-    return this
-  }
-
-
-  // TAB DATA-API
-  // ============
-
-  $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
-    e.preventDefault()
-    Plugin.call($(this), 'show')
-  })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: affix.js v3.2.0
- * http://getbootstrap.com/javascript/#affix
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // AFFIX CLASS DEFINITION
-  // ======================
-
-  var Affix = function (element, options) {
-    this.options = $.extend({}, Affix.DEFAULTS, options)
-
-    this.$target = $(this.options.target)
-      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
-      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))
-
-    this.$element     = $(element)
-    this.affixed      =
-    this.unpin        =
-    this.pinnedOffset = null
-
-    this.checkPosition()
-  }
-
-  Affix.VERSION  = '3.2.0'
-
-  Affix.RESET    = 'affix affix-top affix-bottom'
-
-  Affix.DEFAULTS = {
-    offset: 0,
-    target: window
-  }
-
-  Affix.prototype.getPinnedOffset = function () {
-    if (this.pinnedOffset) return this.pinnedOffset
-    this.$element.removeClass(Affix.RESET).addClass('affix')
-    var scrollTop = this.$target.scrollTop()
-    var position  = this.$element.offset()
-    return (this.pinnedOffset = position.top - scrollTop)
-  }
-
-  Affix.prototype.checkPositionWithEventLoop = function () {
-    setTimeout($.proxy(this.checkPosition, this), 1)
-  }
-
-  Affix.prototype.checkPosition = function () {
-    if (!this.$element.is(':visible')) return
-
-    var scrollHeight = $(document).height()
-    var scrollTop    = this.$target.scrollTop()
-    var position     = this.$element.offset()
-    var offset       = this.options.offset
-    var offsetTop    = offset.top
-    var offsetBottom = offset.bottom
-
-    if (typeof offset != 'object')         offsetBottom = offsetTop = offset
-    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)
-    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
-
-    var affix = this.unpin   != null && (scrollTop + this.unpin <= position.top) ? false :
-                offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :
-                offsetTop    != null && (scrollTop <= offsetTop) ? 'top' : false
-
-    if (this.affixed === affix) return
-    if (this.unpin != null) this.$element.css('top', '')
-
-    var affixType = 'affix' + (affix ? '-' + affix : '')
-    var e         = $.Event(affixType + '.bs.affix')
-
-    this.$element.trigger(e)
-
-    if (e.isDefaultPrevented()) return
-
-    this.affixed = affix
-    this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
-
-    this.$element
-      .removeClass(Affix.RESET)
-      .addClass(affixType)
-      .trigger($.Event(affixType.replace('affix', 'affixed')))
-
-    if (affix == 'bottom') {
-      this.$element.offset({
-        top: scrollHeight - this.$element.height() - offsetBottom
-      })
-    }
-  }
-
-
-  // AFFIX PLUGIN DEFINITION
-  // =======================
-
-  function Plugin(option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.affix')
-      var options = typeof option == 'object' && option
-
-      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  var old = $.fn.affix
-
-  $.fn.affix             = Plugin
-  $.fn.affix.Constructor = Affix
-
-
-  // AFFIX NO CONFLICT
-  // =================
-
-  $.fn.affix.noConflict = function () {
-    $.fn.affix = old
-    return this
-  }
-
-
-  // AFFIX DATA-API
-  // ==============
-
-  $(window).on('load', function () {
-    $('[data-spy="affix"]').each(function () {
-      var $spy = $(this)
-      var data = $spy.data()
-
-      data.offset = data.offset || {}
-
-      if (data.offsetBottom) data.offset.bottom = data.offsetBottom
-      if (data.offsetTop)    data.offset.top    = data.offsetTop
-
-      Plugin.call($spy, data)
-    })
-  })
-
-}(jQuery);
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/js/bootstrap.min.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/js/bootstrap.min.js
deleted file mode 100644
index 7c1561a8b96..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrap3/js/bootstrap.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- * Bootstrap v3.2.0 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.2.0",c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f+', [role="menu"], [role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one("bsTransitionEnd",function(){c.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(300):c.$element.trigger("focus").trigger(e)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.$body.removeClass("modal-open"),this.resetScrollbar(),this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;if(this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.2.0",c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var c=a.contains(document.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var g="function"==typeof this.options.placement?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:0,left:0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[0].offsetWidth,l=e[0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);g="bottom"==g&&j.top+j.height+l-o.scroll>o.height?"top":"top"==g&&j.top-o.scroll-l<0?"bottom":"right"==g&&j.right+k>o.width?"left":"left"==g&&j.left-k<o.left?"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger("shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass("fade")?e.one("bsTransitionEnd",q).emulateTransitionEnd(150):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=k.left?2*k.left-e+i:2*k.top-f+j,m=k.left?"left":"top",n=k.left?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(l,d[0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.removeAttr("aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one("bsTransitionEnd",b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName;return a.extend({},"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:0,left:0}:b.offset())},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.2.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").empty()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.2.0",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(150):e(),f.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.2.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=b-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrapvalidator/css/bootstrapValidator.min.css b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrapvalidator/css/bootstrapValidator.min.css
deleted file mode 100644
index 70c1136cf5f..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrapvalidator/css/bootstrapValidator.min.css
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * BootstrapValidator (http://bootstrapvalidator.com)
- *
- * A jQuery plugin to validate form fields. Use with Bootstrap 3
- *
- * @version     v0.4.4
- * @author      https://twitter.com/nghuuphuoc
- * @copyright   (c) 2013 - 2014 Nguyen Huu Phuoc
- * @license     MIT
- */
-
-
-.bv-form .help-block{margin-bottom:0}.nav-tabs li.bv-tab-success>a{color:#3c763d}.nav-tabs li.bv-tab-error>a{color:#a94442}
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrapvalidator/js/bootstrapValidator.min.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrapvalidator/js/bootstrapValidator.min.js
deleted file mode 100644
index 08e2906447c..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/bootstrapvalidator/js/bootstrapValidator.min.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * BootstrapValidator (http://bootstrapvalidator.com)
- *
- * A jQuery plugin to validate form fields. Use with Bootstrap 3
- *
- * @version     v0.4.4
- * @author      https://twitter.com/nghuuphuoc
- * @copyright   (c) 2013 - 2014 Nguyen Huu Phuoc
- * @license     MIT
- */
-
-!function(a){var b=function(c,d){this.$form=a(c),this.options=a.extend({},b.DEFAULT_OPTIONS,d),this.$invalidField=null,this.$submitButton=null,this.STATUS_NOT_VALIDATED="NOT_VALIDATED",this.STATUS_VALIDATING="VALIDATING",this.STATUS_INVALID="INVALID",this.STATUS_VALID="VALID";var e=function(){for(var a=3,b=document.createElement("div"),c=b.all||[];b.innerHTML="<!--[if gt IE "+ ++a+"]><br><![endif]-->",c[0];);return a>4?a:!a}(),f=document.createElement("div");this._changeEvent=9!==e&&"oninput"in f?"input":"keyup",this._submitIfValid=null,this._init()};b.DEFAULT_OPTIONS={elementClass:"bv-form",message:"This value is not valid",excluded:[":disabled",":hidden",":not(:visible)"],feedbackIcons:{valid:null,invalid:null,validating:null},submitButtons:'button[type="submit"]',submitHandler:null,live:"enabled",fields:null},b.prototype={constructor:b,_init:function(){var b,c,d,e,f,g,h,i=this,j={excluded:this.$form.attr("data-bv-excluded"),trigger:this.$form.attr("data-bv-trigger"),message:this.$form.attr("data-bv-message"),submitButtons:this.$form.attr("data-bv-submitbuttons"),live:this.$form.attr("data-bv-live"),fields:{},feedbackIcons:{valid:this.$form.attr("data-bv-feedbackicons-valid"),invalid:this.$form.attr("data-bv-feedbackicons-invalid"),validating:this.$form.attr("data-bv-feedbackicons-validating")}};this.$form.attr("novalidate","novalidate").addClass(this.options.elementClass).on("submit.bv",function(a){a.preventDefault(),i.validate()}).on("click",this.options.submitButtons,function(){i.$submitButton=a(this),i._submitIfValid=!0}).find("[name], [data-bv-field]").each(function(){var i=a(this);if("hidden"!=i.attr("type")){var k=i.attr("name")||i.attr("data-bv-field");i.attr("data-bv-field",k),j.fields[k]=a.extend({},{trigger:i.attr("data-bv-trigger"),message:i.attr("data-bv-message"),container:i.attr("data-bv-container"),selector:i.attr("data-bv-selector"),validators:{}},j.fields[k]);for(c in a.fn.bootstrapValidator.validators)if(b=a.fn.bootstrapValidator.validators[c],d=i.attr("data-bv-"+c.toLowerCase())+"",h="function"==typeof b.enableByHtml5?b.enableByHtml5(a(this)):null,h&&"false"!=d||h!==!0&&(""==d||"true"==d)){b.html5Attributes=b.html5Attributes||{message:"message"},j.fields[k].validators[c]=a.extend({},1==h?{}:h,j.fields[k].validators[c]);for(g in b.html5Attributes)e=b.html5Attributes[g],f=i.attr("data-bv-"+c.toLowerCase()+"-"+g),f&&("true"==f?f=!0:"false"==f&&(f=!1),j.fields[k].validators[c][e]=f)}}}),this.options=a.extend(!0,this.options,j),"string"==typeof this.options.excluded&&(this.options.excluded=a.map(this.options.excluded.split(","),function(b){return a.trim(b)}));for(var k in this.options.fields)this._initField(k);this.setLiveMode(this.options.live)},_initField:function(b){if(null!=this.options.fields[b]&&null!=this.options.fields[b].validators){var c=this.getFieldElements(b);if(null==c)return void delete this.options.fields[b];for(var d in this.options.fields[b].validators)a.fn.bootstrapValidator.validators[d]||delete this.options.fields[b].validators[d];for(var e=this,f=c.attr("type"),g="radio"==f||"checkbox"==f||"file"==f||"SELECT"==c[0].tagName?"change":e._changeEvent,h=c.length,i=1==h||"radio"==f||"checkbox"==f,j=0;h>j;j++){var k=a(c[j]),l=k.parents(".form-group"),m=this.options.fields[b].container?l.find(this.options.fields[b].container):this._getMessageContainer(k);this.options.fields[b].selector&&k.attr("data-bv-field",b),k.on(g+".update.bv",function(){e._submitIfValid=!1,i?e.updateStatus(b,e.STATUS_NOT_VALIDATED,null):e.updateElementStatus(a(this),e.STATUS_NOT_VALIDATED,null)}),k.data("bv.messages",m);for(d in this.options.fields[b].validators)k.data("bv.result."+d,this.STATUS_NOT_VALIDATED),i&&j!=h-1||a("<small/>").css("display","none").attr("data-bv-validator",d).attr("data-bv-validator-for",b).html(this.options.fields[b].validators[d].message||this.options.fields[b].message||this.options.message).addClass("help-block").appendTo(m);if(this.options.feedbackIcons&&this.options.feedbackIcons.validating&&this.options.feedbackIcons.invalid&&this.options.feedbackIcons.valid&&(!i||j==h-1)){l.addClass("has-feedback");var n=a("<i/>").css("display","none").addClass("form-control-feedback").attr("data-bv-field",b).insertAfter(k);0==l.find("label").length&&n.css("top",0)}}null==this.options.fields[b].enabled&&(this.options.fields[b].enabled=!0)}},_getMessageContainer:function(a){var b=a.parent();if(b.hasClass("form-group"))return b;var c=b.attr("class");if(!c)return this._getMessageContainer(b);c=c.split(" ");for(var d=c.length,e=0;d>e;e++)if(/^col-(xs|sm|md|lg)-\d+$/.test(c[e])||/^col-(xs|sm|md|lg)-offset-\d+$/.test(c[e]))return b;return this._getMessageContainer(b)},_submit:function(){if(this.isValid())this.options.submitHandler&&"function"==typeof this.options.submitHandler?this.options.submitHandler.call(this,this,this.$form,this.$submitButton):this.disableSubmitButtons(!0).defaultSubmit();else if("submitted"==this.options.live&&this.setLiveMode("enabled"),this.$invalidField){var b,c=this.$invalidField.parents(".tab-pane");c&&(b=c.attr("id"))&&a('a[href="#'+b+'"][data-toggle="tab"]').trigger("click.bs.tab.data-api"),this.$invalidField.focus()}},_isExcluded:function(a){if(this.options.excluded)for(var b in this.options.excluded)if("string"==typeof this.options.excluded[b]&&a.is(this.options.excluded[b])||"function"==typeof this.options.excluded[b]&&1==this.options.excluded[b].call(this,a,this))return!0;return!1},getFieldElements:function(b){var c=this.options.fields[b].selector?a(this.options.fields[b].selector):this.$form.find('[name="'+b+'"]');return 0==c.length?null:c},setLiveMode:function(b){if(this.options.live=b,"submitted"==b)return this;var c=this;for(var d in this.options.fields)!function(e){var f=c.getFieldElements(e);if(f)for(var g=f.attr("type"),h=f.length,i=1==h||"radio"==g||"checkbox"==g,j=c.options.fields[d].trigger||c.options.trigger||("radio"==g||"checkbox"==g||"file"==g||"SELECT"==f[0].tagName?"change":c._changeEvent),k=a.map(j.split(" "),function(a){return a+".live.bv"}).join(" "),l=0;h>l;l++)"enabled"==b?a(f[l]).on(k,function(){i?c.validateField(e):c.validateFieldElement(a(this),!1)}):a(f[l]).off(k)}(d);return this},disableSubmitButtons:function(a){return a?"disabled"!=this.options.live&&this.$form.find(this.options.submitButtons).attr("disabled","disabled"):this.$form.find(this.options.submitButtons).removeAttr("disabled"),this},validate:function(){if(!this.options.fields)return this;this.disableSubmitButtons(!0);for(var a in this.options.fields)this.validateField(a);return this.$submitButton&&this._submit(),this},validateField:function(b){for(var c=this.getFieldElements(b),d=c.attr("type"),e="radio"==d||"checkbox"==d?1:c.length,f=0;e>f;f++)this.validateFieldElement(a(c[f]),1==e);return this},validateFieldElement:function(b,c){var d,e,f=this,g=b.attr("data-bv-field"),h=this.options.fields[g].validators;if(!this.options.fields[g].enabled||this._isExcluded(b))return this;for(d in h){b.data("bv.dfs."+d)&&b.data("bv.dfs."+d).reject();var i=b.data("bv.result."+d);i!=this.STATUS_VALID&&i!=this.STATUS_INVALID&&(b.data("bv.result."+d,this.STATUS_VALIDATING),e=a.fn.bootstrapValidator.validators[d].validate(this,b,h[d]),"object"==typeof e?(c?this.updateStatus(g,this.STATUS_VALIDATING,d):this.updateElementStatus(b,this.STATUS_VALIDATING,d),b.data("bv.dfs."+d,e),e.done(function(a,b,d){a.removeData("bv.dfs."+b),c?f.updateStatus(a.attr("data-bv-field"),d?f.STATUS_VALID:f.STATUS_INVALID,b):f.updateElementStatus(a,d?f.STATUS_VALID:f.STATUS_INVALID,b),d&&1==f._submitIfValid&&f._submit()})):"boolean"==typeof e&&(c?this.updateStatus(g,e?this.STATUS_VALID:this.STATUS_INVALID,d):this.updateElementStatus(b,e?this.STATUS_VALID:this.STATUS_INVALID,d)))}return this},updateStatus:function(b,c,d){for(var e=this.getFieldElements(b),f=e.attr("type"),g="radio"==f||"checkbox"==f?1:e.length,h=0;g>h;h++)this.updateElementStatus(a(e[h]),c,d);return this},updateElementStatus:function(b,c,d){var e=this,f=b.attr("data-bv-field"),g=b.parents(".form-group"),h=b.data("bv.messages"),i=h.find(".help-block[data-bv-validator]"),j=g.find('.form-control-feedback[data-bv-field="'+f+'"]');if(d)b.data("bv.result."+d,c);else for(var k in this.options.fields[f].validators)b.data("bv.result."+k,c);var l,m,n=b.parents(".tab-pane");switch(n&&(l=n.attr("id"))&&(m=a('a[href="#'+l+'"][data-toggle="tab"]').parent()),c){case this.STATUS_VALIDATING:this.disableSubmitButtons(!0),g.removeClass("has-success").removeClass("has-error"),d?i.filter('.help-block[data-bv-validator="'+d+'"]').hide():i.hide(),j&&j.removeClass(this.options.feedbackIcons.valid).removeClass(this.options.feedbackIcons.invalid).addClass(this.options.feedbackIcons.validating).show(),m&&m.removeClass("bv-tab-success").removeClass("bv-tab-error");break;case this.STATUS_INVALID:this.disableSubmitButtons(!0),g.removeClass("has-success").addClass("has-error"),d?i.filter('[data-bv-validator="'+d+'"]').show():i.show(),j&&j.removeClass(this.options.feedbackIcons.valid).removeClass(this.options.feedbackIcons.validating).addClass(this.options.feedbackIcons.invalid).show(),m&&m.removeClass("bv-tab-success").addClass("bv-tab-error");break;case this.STATUS_VALID:d?i.filter('[data-bv-validator="'+d+'"]').hide():i.hide();var o=0==i.filter(function(){var c=a(this).css("display"),d=a(this).attr("data-bv-validator");return"block"==c||b.data("bv.result."+d)!=e.STATUS_VALID}).length;this.disableSubmitButtons(o?!1:!0),j&&j.removeClass(this.options.feedbackIcons.invalid).removeClass(this.options.feedbackIcons.validating).removeClass(this.options.feedbackIcons.valid).addClass(o?this.options.feedbackIcons.valid:this.options.feedbackIcons.invalid).show();var p=function(c){return 0==c.find(".help-block[data-bv-validator]").filter(function(){var c=a(this).css("display"),d=a(this).attr("data-bv-validator");return"block"==c||b.data("bv.result."+d)&&b.data("bv.result."+d)!=e.STATUS_VALID}).length};g.removeClass("has-error has-success").addClass(p(g)?"has-success":"has-error"),m&&m.removeClass("bv-tab-success").removeClass("bv-tab-error").addClass(p(n)?"bv-tab-success":"bv-tab-error");break;case this.STATUS_NOT_VALIDATED:default:this.disableSubmitButtons(!1),g.removeClass("has-success").removeClass("has-error"),d?i.filter('.help-block[data-bv-validator="'+d+'"]').hide():i.hide(),j&&j.removeClass(this.options.feedbackIcons.valid).removeClass(this.options.feedbackIcons.invalid).removeClass(this.options.feedbackIcons.validating).hide(),m&&m.removeClass("bv-tab-success").removeClass("bv-tab-error")}return this},isValid:function(){var b,c,d,e,f,g,h,i;for(c in this.options.fields)if(null!=this.options.fields[c]&&this.options.fields[c].enabled)for(b=this.getFieldElements(c),e=b.attr("type"),h="radio"==e||"checkbox"==e?1:b.length,i=0;h>i;i++)if(d=a(b[i]),!this._isExcluded(d))for(g in this.options.fields[c].validators){if(f=d.data("bv.result."+g),f==this.STATUS_NOT_VALIDATED||f==this.STATUS_VALIDATING)return!1;if(f==this.STATUS_INVALID)return this.$invalidField=d,!1}return!0},defaultSubmit:function(){this.$form.off("submit.bv").submit()},resetForm:function(b){var c,d,e,f,g;for(c in this.options.fields){d=this.getFieldElements(c),e=d.length;for(var h=0;e>h;h++)for(g in this.options.fields[c].validators)a(d[h]).removeData("bv.dfs."+g);this.updateStatus(c,this.STATUS_NOT_VALIDATED,null),b&&(f=d.attr("type"),"radio"==f||"checkbox"==f?d.removeAttr("checked").removeAttr("selected"):d.val(""))}return this.$invalidField=null,this.$submitButton=null,this.disableSubmitButtons(!1),this},enableFieldValidators:function(a,b){return this.options.fields[a].enabled=b,this.updateStatus(a,this.STATUS_NOT_VALIDATED,null),this}},a.fn.bootstrapValidator=function(c,d){return this.each(function(){var e=a(this),f=e.data("bootstrapValidator"),g="object"==typeof c&&c;f||(f=new b(this,g),e.data("bootstrapValidator",f)),"string"==typeof c&&f[c](d)})},a.fn.bootstrapValidator.validators={},a.fn.bootstrapValidator.Constructor=b,a.fn.bootstrapValidator.helpers={luhn:function(a){for(var b=a.length,c=0,d=[[0,1,2,3,4,5,6,7,8,9],[0,2,4,6,8,1,3,5,7,9]],e=0;b--;)e+=d[c][parseInt(a.charAt(b),10)],c^=1;return e%10===0&&e>0},mod_11_10:function(a){for(var b=5,c=a.length,d=0;c>d;d++)b=(2*(b||10)%11+parseInt(a.charAt(d),10))%10;return 1==b},mod_37_36:function(a,b){b=b||"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";for(var c=b.length,d=a.length,e=Math.floor(c/2),f=0;d>f;f++)e=(2*(e||c)%(c+1)+b.indexOf(a.charAt(f)))%c;return 1==e}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.base64={validate:function(a,b){var c=b.val();return""==c?!0:/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/.test(c)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.between={html5Attributes:{message:"message",min:"min",max:"max",inclusive:"inclusive"},enableByHtml5:function(a){return"range"==a.attr("type")?{min:a.attr("min"),max:a.attr("max")}:!1},validate:function(a,b,c){var d=b.val();return""==d?!0:(d=parseFloat(d),c.inclusive===!0?d>c.min&&d<c.max:d>=c.min&&d<=c.max)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.callback={validate:function(b,c,d){var e=c.val();if(d.callback&&"function"==typeof d.callback){var f=new a.Deferred;return f.resolve(c,"callback",d.callback.call(this,e,b)),f}return!0}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.choice={html5Attributes:{message:"message",min:"min",max:"max"},validate:function(a,b,c){var d=b.is("select")?a.getFieldElements(b.attr("data-bv-field")).find("option").filter(":selected").length:a.getFieldElements(b.attr("data-bv-field")).filter(":checked").length;return c.min&&d<c.min||c.max&&d>c.max?!1:!0}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.creditCard={validate:function(b,c){var d=c.val();if(""==d)return!0;if(/[^0-9-\s]+/.test(d))return!1;if(d=d.replace(/\D/g,""),!a.fn.bootstrapValidator.helpers.luhn(d))return!1;var e,f,g={AMERICAN_EXPRESS:{length:[15],prefix:["34","37"]},DINERS_CLUB:{length:[14],prefix:["300","301","302","303","304","305","36"]},DINERS_CLUB_US:{length:[16],prefix:["54","55"]},DISCOVER:{length:[16],prefix:["6011","622126","622127","622128","622129","62213","62214","62215","62216","62217","62218","62219","6222","6223","6224","6225","6226","6227","6228","62290","62291","622920","622921","622922","622923","622924","622925","644","645","646","647","648","649","65"]},JCB:{length:[16],prefix:["3528","3529","353","354","355","356","357","358"]},LASER:{length:[16,17,18,19],prefix:["6304","6706","6771","6709"]},MAESTRO:{length:[12,13,14,15,16,17,18,19],prefix:["5018","5020","5038","6304","6759","6761","6762","6763","6764","6765","6766"]},MASTERCARD:{length:[16],prefix:["51","52","53","54","55"]},SOLO:{length:[16,18,19],prefix:["6334","6767"]},UNIONPAY:{length:[16,17,18,19],prefix:["622126","622127","622128","622129","62213","62214","62215","62216","62217","62218","62219","6222","6223","6224","6225","6226","6227","6228","62290","62291","622920","622921","622922","622923","622924","622925"]},VISA:{length:[16],prefix:["4"]}};for(e in g)for(f in g[e].prefix)if(d.substr(0,g[e].prefix[f].length)==g[e].prefix[f]&&-1!=g[e].length.indexOf(d.length))return!0;return!1}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.cvv={html5Attributes:{message:"message",ccfield:"creditCardField"},validate:function(a,b,c){var d=b.val();if(""==d)return!0;if(!/^[0-9]{3,4}$/.test(d))return!1;if(!c.creditCardField)return!0;var e=a.getFieldElements(c.creditCardField).val();if(""==e)return!0;var f,g,h={AMERICAN_EXPRESS:{length:[15],prefix:["34","37"]},DINERS_CLUB:{length:[14],prefix:["300","301","302","303","304","305","36"]},DINERS_CLUB_US:{length:[16],prefix:["54","55"]},DISCOVER:{length:[16],prefix:["6011","622126","622127","622128","622129","62213","62214","62215","62216","62217","62218","62219","6222","6223","6224","6225","6226","6227","6228","62290","62291","622920","622921","622922","622923","622924","622925","644","645","646","647","648","649","65"]},JCB:{length:[16],prefix:["3528","3529","353","354","355","356","357","358"]},LASER:{length:[16,17,18,19],prefix:["6304","6706","6771","6709"]},MAESTRO:{length:[12,13,14,15,16,17,18,19],prefix:["5018","5020","5038","6304","6759","6761","6762","6763","6764","6765","6766"]},MASTERCARD:{length:[16],prefix:["51","52","53","54","55"]},SOLO:{length:[16,18,19],prefix:["6334","6767"]},UNIONPAY:{length:[16,17,18,19],prefix:["622126","622127","622128","622129","62213","62214","62215","62216","62217","62218","62219","6222","6223","6224","6225","6226","6227","6228","62290","62291","622920","622921","622922","622923","622924","622925"]},VISA:{length:[16],prefix:["4"]}},i=null;for(f in h)for(g in h[f].prefix)if(e.substr(0,h[f].prefix[g].length)==h[f].prefix[g]&&-1!=h[f].length.indexOf(e.length)){i=f;break}return null==i?!1:"AMERICAN_EXPRESS"==i?4==d.length:3==d.length}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.date={html5Attributes:{message:"message",format:"format"},validate:function(a,b,c){var d=b.val();if(""==d)return!0;c.format=c.format||"MM/DD/YYYY";var e=c.format.split(" "),f=e[0],g=e.length>1?e[1]:null,h=e.length>2?e[2]:null,i=d.split(" "),j=i[0],k=i.length>1?i[1]:null;if(e.length!=i.length)return!1;var l=-1!=j.indexOf("/")?"/":-1!=j.indexOf("-")?"-":null;if(null==l)return!1;j=j.split(l),f=f.split(l);var m=j[f.indexOf("YYYY")],n=j[f.indexOf("MM")],o=j[f.indexOf("DD")],p=null,q=null,r=null;if(g){if(g=g.split(":"),k=k.split(":"),g.length!=k.length)return!1;if(q=k.length>0?k[0]:null,p=k.length>1?k[1]:null,r=k.length>2?k[2]:null,r&&(r=parseInt(r,10),0>r||r>60))return!1;if(q&&(q=parseInt(q,10),0>q||q>=24||h&&q>12))return!1;if(p&&(p=parseInt(p,10),0>p||p>59))return!1}if(o=parseInt(o,10),n=parseInt(n,10),m=parseInt(m,10),1e3>m||m>9999||0==n||n>12)return!1;var s=[31,28,31,30,31,30,31,31,30,31,30,31];return(m%400==0||m%100!=0&&m%4==0)&&(s[1]=29),o>0&&o<=s[n-1]}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.different={html5Attributes:{message:"message",field:"field"},validate:function(a,b,c){var d=b.val();if(""==d)return!0;var e=a.getFieldElements(c.field);return null==e?!0:d!=e.val()?(a.updateStatus(c.field,a.STATUS_VALID,"different"),!0):!1}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.digits={validate:function(a,b){var c=b.val();return""==c?!0:/^\d+$/.test(c)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.ean={validate:function(a,b){var c=b.val();if(""==c)return!0;if(!/^(\d{8}|\d{12}|\d{13})$/.test(c))return!1;for(var d=c.length,e=0,f=8==d?[3,1]:[1,3],g=0;d-1>g;g++)e+=parseInt(c.charAt(g))*f[g%2];return e=10-e%10,e==c.charAt(d-1)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.emailAddress={enableByHtml5:function(a){return"email"==a.attr("type")},validate:function(a,b){var c=b.val();if(""==c)return!0;var d=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;return d.test(c)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.file={html5Attributes:{extension:"extension",maxsize:"maxSize",message:"message",type:"type"},validate:function(a,b,c){var d=b.val();if(""==d)return!0;var e,f=c.extension?c.extension.split(","):null,g=c.type?c.type.split(","):null,h=window.File&&window.FileList&&window.FileReader;if(h)for(var i=b.get(0).files,j=i.length,k=0;j>k;k++){if(c.maxSize&&i[k].size>parseInt(c.maxSize))return!1;if(e=i[k].name.substr(i[k].name.lastIndexOf(".")+1),f&&-1==f.indexOf(e))return!1;if(g&&-1==g.indexOf(i[k].type))return!1}else if(e=d.substr(d.lastIndexOf(".")+1),f&&-1==f.indexOf(e))return!1;return!0}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.greaterThan={html5Attributes:{message:"message",value:"value",inclusive:"inclusive"},enableByHtml5:function(a){var b=a.attr("min");return b?{value:b}:!1},validate:function(a,b,c){var d=b.val();return""==d?!0:(d=parseFloat(d),c.inclusive===!0?d>c.value:d>=c.value)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.grid={validate:function(b,c){var d=c.val();return""==d?!0:(d=d.toUpperCase(),/^[GRID:]*([0-9A-Z]{2})[-\s]*([0-9A-Z]{5})[-\s]*([0-9A-Z]{10})[-\s]*([0-9A-Z]{1})$/g.test(d)?(d=d.replace(/\s/g,"").replace(/-/g,""),"GRID:"==d.substr(0,5)&&(d=d.substr(5)),a.fn.bootstrapValidator.helpers.mod_37_36(d)):!1)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.hex={validate:function(a,b){var c=b.val();return""==c?!0:/^[0-9a-fA-F]+$/.test(c)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.hexColor={enableByHtml5:function(a){return"color"==a.attr("type")},validate:function(a,b){var c=b.val();return""==c?!0:/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(c)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.iban={html5Attributes:{message:"message",country:"country"},validate:function(a,b,c){var d=b.val();if(""==d)return!0;var e={AD:"AD[0-9]{2}[0-9]{4}[0-9]{4}[A-Z0-9]{12}",AE:"AE[0-9]{2}[0-9]{3}[0-9]{16}",AL:"AL[0-9]{2}[0-9]{8}[A-Z0-9]{16}",AO:"AO[0-9]{2}[0-9]{21}",AT:"AT[0-9]{2}[0-9]{5}[0-9]{11}",AZ:"AZ[0-9]{2}[A-Z]{4}[A-Z0-9]{20}",BA:"BA[0-9]{2}[0-9]{3}[0-9]{3}[0-9]{8}[0-9]{2}",BE:"BE[0-9]{2}[0-9]{3}[0-9]{7}[0-9]{2}",BF:"BF[0-9]{2}[0-9]{23}",BG:"BG[0-9]{2}[A-Z]{4}[0-9]{4}[0-9]{2}[A-Z0-9]{8}",BH:"BH[0-9]{2}[A-Z]{4}[A-Z0-9]{14}",BI:"BI[0-9]{2}[0-9]{12}",BJ:"BJ[0-9]{2}[A-Z]{1}[0-9]{23}",BR:"BR[0-9]{2}[0-9]{8}[0-9]{5}[0-9]{10}[A-Z][A-Z0-9]",CH:"CH[0-9]{2}[0-9]{5}[A-Z0-9]{12}",CI:"CI[0-9]{2}[A-Z]{1}[0-9]{23}",CM:"CM[0-9]{2}[0-9]{23}",CR:"CR[0-9]{2}[0-9]{3}[0-9]{14}",CV:"CV[0-9]{2}[0-9]{21}",CY:"CY[0-9]{2}[0-9]{3}[0-9]{5}[A-Z0-9]{16}",CZ:"CZ[0-9]{2}[0-9]{20}",DE:"DE[0-9]{2}[0-9]{8}[0-9]{10}",DK:"DK[0-9]{2}[0-9]{14}",DO:"DO[0-9]{2}[A-Z0-9]{4}[0-9]{20}",DZ:"DZ[0-9]{2}[0-9]{20}",EE:"EE[0-9]{2}[0-9]{2}[0-9]{2}[0-9]{11}[0-9]{1}",ES:"ES[0-9]{2}[0-9]{4}[0-9]{4}[0-9]{1}[0-9]{1}[0-9]{10}",FI:"FI[0-9]{2}[0-9]{6}[0-9]{7}[0-9]{1}",FO:"FO[0-9]{2}[0-9]{4}[0-9]{9}[0-9]{1}",FR:"FR[0-9]{2}[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}",GB:"GB[0-9]{2}[A-Z]{4}[0-9]{6}[0-9]{8}",GE:"GE[0-9]{2}[A-Z]{2}[0-9]{16}",GI:"GI[0-9]{2}[A-Z]{4}[A-Z0-9]{15}",GL:"GL[0-9]{2}[0-9]{4}[0-9]{9}[0-9]{1}",GR:"GR[0-9]{2}[0-9]{3}[0-9]{4}[A-Z0-9]{16}",GT:"GT[0-9]{2}[A-Z0-9]{4}[A-Z0-9]{20}",HR:"HR[0-9]{2}[0-9]{7}[0-9]{10}",HU:"HU[0-9]{2}[0-9]{3}[0-9]{4}[0-9]{1}[0-9]{15}[0-9]{1}",IE:"IE[0-9]{2}[A-Z]{4}[0-9]{6}[0-9]{8}",IL:"IL[0-9]{2}[0-9]{3}[0-9]{3}[0-9]{13}",IR:"IR[0-9]{2}[0-9]{22}",IS:"IS[0-9]{2}[0-9]{4}[0-9]{2}[0-9]{6}[0-9]{10}",IT:"IT[0-9]{2}[A-Z]{1}[0-9]{5}[0-9]{5}[A-Z0-9]{12}",JO:"JO[0-9]{2}[A-Z]{4}[0-9]{4}[0]{8}[A-Z0-9]{10}",KW:"KW[0-9]{2}[A-Z]{4}[0-9]{22}",KZ:"KZ[0-9]{2}[0-9]{3}[A-Z0-9]{13}",LB:"LB[0-9]{2}[0-9]{4}[A-Z0-9]{20}",LI:"LI[0-9]{2}[0-9]{5}[A-Z0-9]{12}",LT:"LT[0-9]{2}[0-9]{5}[0-9]{11}",LU:"LU[0-9]{2}[0-9]{3}[A-Z0-9]{13}",LV:"LV[0-9]{2}[A-Z]{4}[A-Z0-9]{13}",MC:"MC[0-9]{2}[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}",MD:"MD[0-9]{2}[A-Z0-9]{20}",ME:"ME[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}",MG:"MG[0-9]{2}[0-9]{23}",MK:"MK[0-9]{2}[0-9]{3}[A-Z0-9]{10}[0-9]{2}",ML:"ML[0-9]{2}[A-Z]{1}[0-9]{23}",MR:"MR13[0-9]{5}[0-9]{5}[0-9]{11}[0-9]{2}",MT:"MT[0-9]{2}[A-Z]{4}[0-9]{5}[A-Z0-9]{18}",MU:"MU[0-9]{2}[A-Z]{4}[0-9]{2}[0-9]{2}[0-9]{12}[0-9]{3}[A-Z]{3}",MZ:"MZ[0-9]{2}[0-9]{21}",NL:"NL[0-9]{2}[A-Z]{4}[0-9]{10}",NO:"NO[0-9]{2}[0-9]{4}[0-9]{6}[0-9]{1}",PK:"PK[0-9]{2}[A-Z]{4}[A-Z0-9]{16}",PL:"PL[0-9]{2}[0-9]{8}[0-9]{16}",PS:"PS[0-9]{2}[A-Z]{4}[A-Z0-9]{21}",PT:"PT[0-9]{2}[0-9]{4}[0-9]{4}[0-9]{11}[0-9]{2}",QA:"QA[0-9]{2}[A-Z]{4}[A-Z0-9]{21}",RO:"RO[0-9]{2}[A-Z]{4}[A-Z0-9]{16}",RS:"RS[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}",SA:"SA[0-9]{2}[0-9]{2}[A-Z0-9]{18}",SE:"SE[0-9]{2}[0-9]{3}[0-9]{16}[0-9]{1}",SI:"SI[0-9]{2}[0-9]{5}[0-9]{8}[0-9]{2}",SK:"SK[0-9]{2}[0-9]{4}[0-9]{6}[0-9]{10}",SM:"SM[0-9]{2}[A-Z]{1}[0-9]{5}[0-9]{5}[A-Z0-9]{12}",SN:"SN[0-9]{2}[A-Z]{1}[0-9]{23}",TN:"TN59[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}",TR:"TR[0-9]{2}[0-9]{5}[A-Z0-9]{1}[A-Z0-9]{16}",VG:"VG[0-9]{2}[A-Z]{4}[0-9]{16}"};d=d.replace(/[^a-zA-Z0-9]/g,"").toUpperCase();var f=c.country||d.substr(0,2);if(!e[f])return!1;if(!new RegExp("^"+e[f]+"$").test(d))return!1;d=d.substr(4)+d.substr(0,4),d=d.split("").map(function(a){var b=a.charCodeAt(0);return b>="A".charCodeAt(0)&&b<="Z".charCodeAt(0)?b-"A".charCodeAt(0)+10:a}).join("");for(var g=parseInt(d.substr(0,1),10),h=d.length,i=1;h>i;++i)g=(10*g+parseInt(d.substr(i,1),10))%97;return 1==g}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.identical={html5Attributes:{message:"message",field:"field"},validate:function(a,b,c){var d=b.val();if(""==d)return!0;var e=a.getFieldElements(c.field);return null==e?!0:d==e.val()?(a.updateStatus(c.field,a.STATUS_VALID,"identical"),!0):!1}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.imei={validate:function(b,c){var d=c.val();if(""==d)return!0;switch(!0){case/^\d{15}$/.test(d):case/^\d{2}-\d{6}-\d{6}-\d{1}$/.test(d):case/^\d{2}\s\d{6}\s\d{6}\s\d{1}$/.test(d):return d=d.replace(/[^0-9]/g,""),a.fn.bootstrapValidator.helpers.luhn(d);case/^\d{14}$/.test(d):case/^\d{16}$/.test(d):case/^\d{2}-\d{6}-\d{6}(|-\d{2})$/.test(d):case/^\d{2}\s\d{6}\s\d{6}(|\s\d{2})$/.test(d):return!0;default:return!1}}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.integer={enableByHtml5:function(a){return"number"==a.attr("type")},validate:function(a,b){var c=b.val();return""==c?!0:/^(?:-?(?:0|[1-9][0-9]*))$/.test(c)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.ip={html5Attributes:{message:"message",ipv4:"ipv4",ipv6:"ipv6"},validate:function(b,c,d){var e=c.val();return""==e?!0:(d=a.extend({},{ipv4:!0,ipv6:!0},d),d.ipv4?/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(e):d.ipv6?/^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/.test(str):!1)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.isbn={validate:function(a,b){var c=b.val();if(""==c)return!0;var d;switch(!0){case/^\d{9}[\dX]$/.test(c):case 13==c.length&&/^(\d+)-(\d+)-(\d+)-([\dX])$/.test(c):case 13==c.length&&/^(\d+)\s(\d+)\s(\d+)\s([\dX])$/.test(c):d="ISBN10";break;case/^(978|979)\d{9}[\dX]$/.test(c):case 17==c.length&&/^(978|979)-(\d+)-(\d+)-(\d+)-([\dX])$/.test(c):case 17==c.length&&/^(978|979)\s(\d+)\s(\d+)\s(\d+)\s([\dX])$/.test(c):d="ISBN13";break;default:return!1}c=c.replace(/[^0-9X]/gi,"");var e,f=c.split(""),g=f.length,h=0;switch(d){case"ISBN10":h=0;for(var i=0;g-1>i;i++)h+=(10-i)*parseInt(f[i]);return e=11-h%11,11==e?e=0:10==e&&(e="X"),e+""==f[g-1];case"ISBN13":h=0;for(var i=0;g-1>i;i++)h+=i%2==0?parseInt(f[i]):3*parseInt(f[i]);return e=10-h%10,10==e&&(e="0"),e+""==f[g-1];default:return!1}}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.ismn={validate:function(a,b){var c=b.val();if(""==c)return!0;var d;switch(!0){case/^M\d{9}$/.test(c):case/^M-\d{4}-\d{4}-\d{1}$/.test(c):case/^M\s\d{4}\s\d{4}\s\d{1}$/.test(c):d="ISMN10";break;case/^9790\d{9}$/.test(c):case/^979-0-\d{4}-\d{4}-\d{1}$/.test(c):case/^979\s0\s\d{4}\s\d{4}\s\d{1}$/.test(c):d="ISMN13";break;default:return!1}"ISMN10"==d&&(c="9790"+c.substr(1)),c=c.replace(/[^0-9]/gi,"");for(var e=c.length,f=0,g=[1,3],h=0;e-1>h;h++)f+=parseInt(c.charAt(h))*g[h%2];return f=10-f%10,f==c.charAt(e-1)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.issn={validate:function(a,b){var c=b.val();if(""==c)return!0;if(!/^\d{4}\-\d{3}[\dX]$/.test(c))return!1;c=c.replace(/[^0-9X]/gi,"");var d=c.split(""),e=d.length,f=0;"X"==d[7]&&(d[7]=10);for(var g=0;e>g;g++)f+=(8-g)*parseInt(d[g]);return f%11==0}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.lessThan={html5Attributes:{message:"message",value:"value",inclusive:"inclusive"},enableByHtml5:function(a){var b=a.attr("max");return b?{value:b}:!1},validate:function(a,b,c){var d=b.val();return""==d?!0:(d=parseFloat(d),c.inclusive===!1?d<=c.value:d<c.value)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.mac={validate:function(a,b){var c=b.val();return""==c?!0:/^([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$/.test(c)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.notEmpty={enableByHtml5:function(a){var b=a.attr("required")+"";return"required"==b||"true"==b},validate:function(b,c){var d=c.attr("type");return"radio"==d||"checkbox"==d?b.getFieldElements(c.attr("data-bv-field")).filter(":checked").length>0:""!=a.trim(c.val())}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.numeric={validate:function(a,b){var c=b.val();return""==c?!0:!isNaN(parseFloat(c))&&isFinite(c)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.phone={html5Attributes:{message:"message",country:"country"},validate:function(a,b,c){var d=b.val();if(""==d)return!0;var e=(c.country||"US").toUpperCase();switch(e){case"US":default:return d=d.replace(/\D/g,""),/^(?:(1\-?)|(\+1 ?))?\(?(\d{3})[\)\-\.]?(\d{3})[\-\.]?(\d{4})$/.test(d)&&10==d.length}}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.regexp={html5Attributes:{message:"message",regexp:"regexp"},enableByHtml5:function(a){var b=a.attr("pattern");return b?{regexp:b}:!1},validate:function(a,b,c){var d=b.val();if(""==d)return!0;var e="string"==typeof c.regexp?new RegExp(c.regexp):c.regexp;return e.test(d)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.remote={html5Attributes:{message:"message",url:"url",name:"name"},validate:function(b,c,d){var e=c.val();if(""==e)return!0;var f=c.attr("data-bv-field"),g=d.data;null==g&&(g={}),"function"==typeof g&&(g=g.call(this,b)),g[d.name||f]=e;var h=new a.Deferred,i=a.ajax({type:"POST",url:d.url,dataType:"json",data:g});return i.then(function(a){h.resolve(c,"remote",a.valid===!0||"true"===a.valid)}),h.fail(function(){i.abort()}),h}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.siren={validate:function(b,c){var d=c.val();return""==d?!0:/^\d{9}$/.test(d)?a.fn.bootstrapValidator.helpers.luhn(d):!1}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.siret={validate:function(a,b){var c=b.val();if(""==c)return!0;for(var d,e=0,f=c.length,g=0;f>g;g++)d=parseInt(c.charAt(g),10),g%2==0&&(d=2*d,d>9&&(d-=9)),e+=d;return e%10==0}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.step={html5Attributes:{message:"message",base:"baseValue",step:"step"},validate:function(b,c,d){var e=c.val();if(""==e)return!0;if(d=a.extend({},{baseValue:0,step:1},d),e=parseFloat(e),isNaN(e)||!isFinite(e))return!1;var f=function(a,b){var c=Math.pow(10,b);a*=c;var d=a>0|-(0>a),e=a%1===.5*d;return e?(Math.floor(a)+(d>0))/c:Math.round(a)/c},g=function(a,b){if(0==b)return 1;var c=(a+"").split("."),d=(b+"").split("."),e=(1==c.length?0:c[1].length)+(1==d.length?0:d[1].length);return f(a-b*Math.floor(a/b),e)},h=g(e-d.baseValue,d.step);return 0==h||h==d.step}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.stringCase={html5Attributes:{message:"message","case":"case"},validate:function(a,b,c){var d=b.val();if(""==d)return!0;var e=(c["case"]||"lower").toLowerCase();switch(e){case"upper":return d===d.toUpperCase();case"lower":default:return d===d.toLowerCase()
-}}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.stringLength={html5Attributes:{message:"message",min:"min",max:"max"},enableByHtml5:function(a){var b=a.attr("maxlength");return b?{max:parseInt(b,10)}:!1},validate:function(b,c,d){var e=c.val();if(""==e)return!0;var f=a.trim(e).length;return d.min&&f<d.min||d.max&&f>d.max?!1:!0}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.uri={enableByHtml5:function(a){return"url"==a.attr("type")},validate:function(a,b){var c=b.val();if(""==c)return!0;var d=new RegExp("^(?:(?:https?|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?!10(?:\\.\\d{1,3}){3})(?!127(?:\\.\\d{1,3}){3})(?!169\\.254(?:\\.\\d{1,3}){2})(?!192\\.168(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))(?::\\d{2,5})?(?:/[^\\s]*)?$","i");return d.test(c)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.uuid={html5Attributes:{message:"message",version:"version"},validate:function(a,b,c){var d=b.val();if(""==d)return!0;var e={3:/^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i,4:/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,5:/^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,all:/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i},f=c.version?c.version+"":"all";return null==e[f]?!0:e[f].test(d)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.vat={html5Attributes:{message:"message",country:"country"},validate:function(a,b,c){var d=b.val();if(""==d)return!0;var e=c.country||d.substr(0,2),f=["_",e.toLowerCase()].join("");return this[f]&&"function"==typeof this[f]?this[f](d):!0},_at:function(a){if(!/^ATU[0-9]{8}$/.test(a))return!1;a=a.substr(3);for(var b=0,c=[1,2,1,2,1,2,1],d=0,e=0;7>e;e++)d=parseInt(a.charAt(e))*c[e],d>9&&(d=Math.floor(d/10)+d%10),b+=d;return b=10-(b+4)%10,10==b&&(b=0),b==a.substr(7,1)},_be:function(a){if(!/^BE[0]{0,1}[0-9]{9}$/.test(a))return!1;if(a=a.substr(2),9==a.length&&(a="0"+a),0==a.substr(1,1))return!1;var b=parseInt(a.substr(0,8),10)+parseInt(a.substr(8,2),10);return b%97==0},_bg:function(a){if(!/^BG[0-9]{9,10}$/.test(a))return!1;a=a.substr(2);var b=0,c=0;if(9==a.length){for(c=0;8>c;c++)b+=parseInt(a.charAt(c))*(c+1);if(b%=11,10==b)for(b=0,c=0;8>c;c++)b+=parseInt(a.charAt(c))*(c+3);return b%=10,b==a.substr(8)}if(10==a.length){var d=function(a){var b=parseInt(a.substr(0,2),10)+1900,c=parseInt(a.substr(2,2),10),d=parseInt(a.substr(4,2),10);c>40?(b+=100,c-=40):c>20&&(b-=100,c-=20);try{{new Date(b,c,d)}}catch(e){return!1}for(var f=0,g=[2,4,8,5,10,9,7,3,6],h=0;9>h;h++)f+=parseInt(a.charAt(h))*g[h];return f=f%11%10,f==a.substr(9,1)},e=function(a){for(var b=0,c=[21,19,17,13,11,9,7,3,1],d=0;9>d;d++)b+=parseInt(a.charAt(d))*c[d];return b%=10,b==a.substr(9,1)},f=function(a){for(var b=0,c=[4,3,2,7,6,5,4,3,2],d=0;9>d;d++)b+=parseInt(a.charAt(d))*c[d];return b=11-b%11,10==b?!1:(11==b&&(b=0),b==a.substr(9,1))};return d(a)||e(a)||f(a)}return!1},_ch:function(a){if(!/^CHE[0-9]{9}(MWST)?$/.test(a))return!1;a=a.substr(3);for(var b=0,c=[5,4,3,2,7,6,5,4],d=0;8>d;d++)b+=parseInt(a.charAt(d),10)*c[d];return b=11-b%11,10==b?!1:(11==b&&(b=0),b==a.substr(8,1))},_cy:function(a){if(!/^CY[0-5|9]{1}[0-9]{7}[A-Z]{1}$/.test(a))return!1;if(a=a.substr(2),"12"==a.substr(0,2))return!1;for(var b=0,c={0:1,1:0,2:5,3:7,4:9,5:13,6:15,7:17,8:19,9:21},d=0;8>d;d++){var e=parseInt(a.charAt(d),10);d%2==0&&(e=c[e+""]),b+=e}return b="ABCDEFGHIJKLMNOPQRSTUVWXYZ"[b%26],b==a.substr(8,1)},_cz:function(a){if(!/^CZ[0-9]{8,10}$/.test(a))return!1;a=a.substr(2);var b=0,c=0;if(8==a.length){if(a.charAt(0)+""=="9")return!1;for(b=0,c=0;7>c;c++)b+=parseInt(a.charAt(c),10)*(8-c);return b=11-b%11,10==b&&(b=0),11==b&&(b=1),b==a.substr(7,1)}if(9==a.length&&a.charAt(0)+""=="6"){for(b=0,c=0;7>c;c++)b+=parseInt(a.charAt(c+1),10)*(8-c);return b=11-b%11,10==b&&(b=0),11==b&&(b=1),b=[8,7,6,5,4,3,2,1,0,9,10][b-1],b==a.substr(8,1)}if(9==a.length||10==a.length){var d=1900+parseInt(a.substr(0,2)),e=parseInt(a.substr(2,2))%50%20,f=parseInt(a.substr(4,2));if(9==a.length){if(d>=1980&&(d-=100),d>1953)return!1}else 1954>d&&(d+=100);try{{new Date(d,e,f)}}catch(g){return!1}if(10==a.length){var h=parseInt(a.substr(0,9),10)%11;return 1985>d&&(h%=10),h==a.substr(9,1)}return!0}return!1},_de:function(b){return/^DE[0-9]{9}$/.test(b)?(b=b.substr(2),a.fn.bootstrapValidator.helpers.mod_11_10(b)):!1},_dk:function(a){if(!/^DK[0-9]{8}$/.test(a))return!1;a=a.substr(2);for(var b=0,c=[2,7,6,5,4,3,2,1],d=0;8>d;d++)b+=parseInt(a.charAt(d),10)*c[d];return b%11==0},_ee:function(a){if(!/^EE[0-9]{9}$/.test(a))return!1;a=a.substr(2);for(var b=0,c=[3,7,1,3,7,1,3,7,1],d=0;9>d;d++)b+=parseInt(a.charAt(d))*c[d];return b%10==0},_es:function(a){if(!/^ES[0-9A-Z][0-9]{7}[0-9A-Z]$/.test(a))return!1;a=a.substr(2);var b=function(a){var b=parseInt(a.substr(0,8),10);return b="TRWAGMYFPDXBNJZSQVHLCKE"[b%23],b==a.substr(8,1)},c=function(a){var b=["XYZ".indexOf(a.charAt(0)),a.substr(1)].join("");return b=parseInt(b,10),b="TRWAGMYFPDXBNJZSQVHLCKE"[b%23],b==a.substr(8,1)},d=function(a){var b,c=a.charAt(0);if(-1!="KLM".indexOf(c))return b=parseInt(a.substr(1,8),10),b="TRWAGMYFPDXBNJZSQVHLCKE"[b%23],b==a.substr(8,1);if(-1!="ABCDEFGHJNPQRSUVW".indexOf(c)){for(var d=0,e=[2,1,2,1,2,1,2],f=0,g=0;7>g;g++)f=parseInt(a.charAt(g+1))*e[g],f>9&&(f=Math.floor(f/10)+f%10),d+=f;return d=10-d%10,d==a.substr(8,1)||"JABCDEFGHI"[d]==a.substr(8,1)}return!1},e=a.charAt(0);return/^[0-9]$/.test(e)?b(a):/^[XYZ]$/.test(e)?c(a):d(a)},_fi:function(a){if(!/^FI[0-9]{8}$/.test(a))return!1;a=a.substr(2);for(var b=0,c=[7,9,10,5,8,4,2,1],d=0;8>d;d++)b+=parseInt(a.charAt(d))*c[d];return b%11==0},_fr:function(b){if(!/^FR[0-9A-Z]{2}[0-9]{9}$/.test(b))return!1;if(b=b.substr(2),!a.fn.bootstrapValidator.helpers.luhn(b.substr(2)))return!1;if(/^[0-9]{2}$/.test(b.substr(0,2)))return b.substr(0,2)==parseInt(b.substr(2)+"12",10)%97;var c,d="0123456789ABCDEFGHJKLMNPQRSTUVWXYZ";return c=/^[0-9]{1}$/.test(b.charAt(0))?24*d.indexOf(b.charAt(0))+d.indexOf(b.charAt(1))-10:34*d.indexOf(b.charAt(0))+d.indexOf(b.charAt(1))-100,(parseInt(b.substr(2),10)+1+Math.floor(c/11))%11==c%11},_gb:function(a){if(!(/^GB[0-9]{9}$/.test(a)||/^GB[0-9]{12}$/.test(a)||/^GBGD[0-9]{3}$/.test(a)||/^GBHA[0-9]{3}$/.test(a)||/^GB(GD|HA)8888[0-9]{5}$/.test(a)))return!1;a=a.substr(2);var b=a.length;if(5==b){var c=a.substr(0,2),d=parseInt(a.substr(2));return"GD"==c&&500>d||"HA"==c&&d>=500}if(11==b&&("GD8888"==a.substr(0,6)||"HA8888"==a.substr(0,6)))return"GD"==a.substr(0,2)&&parseInt(a.substr(6,3))>=500||"HA"==a.substr(0,2)&&parseInt(a.substr(6,3))<500?!1:parseInt(a.substr(6,3))%97==parseInt(a.substr(9,2));if(9==b||12==b){for(var e=0,f=[8,7,6,5,4,3,2,10,1],g=0;9>g;g++)e+=parseInt(a.charAt(g))*f[g];return e%=97,parseInt(a.substr(0,3))>=100?0==e||42==e||55==e:0==e}return!0},_gr:function(a){if(!/^GR[0-9]{9}$/.test(a))return!1;a=a.substr(2),8==a.length&&(a="0"+a);for(var b=0,c=[256,128,64,32,16,8,4,2],d=0;8>d;d++)b+=parseInt(a.charAt(d))*c[d];return b=b%11%10,b==a.substr(8,1)},_el:function(a){return/^EL[0-9]{9}$/.test(a)?(a="GR"+a.substr(2),this._gr(a)):!1},_hu:function(a){if(!/^HU[0-9]{8}$/.test(a))return!1;a=a.substr(2);for(var b=0,c=[9,7,3,1,9,7,3,1],d=0;8>d;d++)b+=parseInt(a.charAt(d))*c[d];return b%10==0},_hr:function(b){return/^HR[0-9]{11}$/.test(b)?(b=b.substr(2),a.fn.bootstrapValidator.helpers.mod_11_10(b)):!1},_ie:function(a){if(!/^IE[0-9]{1}[0-9A-Z\*\+]{1}[0-9]{5}[A-Z]{1,2}$/.test(a))return!1;a=a.substr(2);var b=function(a){for(;a.length<7;)a="0"+a;for(var b="WABCDEFGHIJKLMNOPQRSTUV",c=0,d=0;7>d;d++)c+=parseInt(a.charAt(d))*(8-d);return c+=9*b.indexOf(a.substr(7)),b[c%23]};return/^[0-9]+$/.test(a.substr(0,7))?a.charAt(7)==b(a.substr(0,7)+a.substr(8)+""):-1!="ABCDEFGHIJKLMNOPQRSTUVWXYZ+*".indexOf(a.charAt(1))?a.charAt(7)==b(a.substr(2,5)+a.substr(0,1)+""):!0},_it:function(b){if(!/^IT[0-9]{11}$/.test(b))return!1;if(b=b.substr(2),0==parseInt(b.substr(0,7)))return!1;var c=parseInt(b.substr(7,3));return 1>c||c>201&&999!=c&&888!=c?!1:a.fn.bootstrapValidator.helpers.luhn(b)},_lt:function(a){if(!/^LT([0-9]{7}1[0-9]{1}|[0-9]{10}1[0-9]{1})$/.test(a))return!1;a=a.substr(2);for(var b=a.length,c=0,d=0;b-1>d;d++)c+=parseInt(a.charAt(d))*(1+d%9);var e=c%11;if(10==e){c=0;for(var d=0;b-1>d;d++)c+=parseInt(a.charAt(d))*(1+(d+2)%9)}return e=e%11%10,e==a.charAt(b-1)},_lu:function(a){return/^LU[0-9]{8}$/.test(a)?(a=a.substr(2),a.substr(0,6)%89==a.substr(6,2)):!1},_lv:function(a){if(!/^LV[0-9]{11}$/.test(a))return!1;a=a.substr(2);var b=parseInt(a.charAt(0)),c=0,d=[],e=0,f=a.length;if(b>3){for(c=0,d=[9,1,4,8,3,10,2,5,7,6,1],e=0;f>e;e++)c+=parseInt(a.charAt(e))*d[e];return c%=11,3==c}var g=parseInt(a.substr(0,2)),h=parseInt(a.substr(2,2)),i=parseInt(a.substr(4,2));i=i+1800+100*parseInt(a.charAt(6));try{{new Date(i,h,g)}}catch(j){return!1}for(c=0,d=[10,5,8,4,2,1,6,3,7,9],e=0;f-1>e;e++)c+=parseInt(a.charAt(e))*d[e];return c=(c+1)%11%10,c==a.charAt(f-1)},_mt:function(a){if(!/^MT[0-9]{8}$/.test(a))return!1;a=a.substr(2);for(var b=0,c=[3,4,6,7,8,9,10,1],d=0;8>d;d++)b+=parseInt(a.charAt(d))*c[d];return b%37==0},_nl:function(a){if(!/^NL[0-9]{9}B[0-9]{2}$/.test(a))return!1;a=a.substr(2);for(var b=0,c=[9,8,7,6,5,4,3,2],d=0;8>d;d++)b+=parseInt(a.charAt(d))*c[d];return b%=11,b>9&&(b=0),b==a.substr(8,1)},_no:function(a){if(!/^NO[0-9]{9}$/.test(a))return!1;a=a.substr(2);for(var b=0,c=[3,2,7,6,5,4,3,2],d=0;8>d;d++)b+=parseInt(a.charAt(d))*c[d];return b=11-b%11,11==b&&(b=0),b==a.substr(8,1)},_pl:function(a){if(!/^PL[0-9]{10}$/.test(a))return!1;a=a.substr(2);for(var b=0,c=[6,5,7,2,3,4,5,6,7,-1],d=0;10>d;d++)b+=parseInt(a.charAt(d))*c[d];return b%11==0},_pt:function(a){if(!/^PT[0-9]{9}$/.test(a))return!1;a=a.substr(2);for(var b=0,c=[9,8,7,6,5,4,3,2],d=0;8>d;d++)b+=parseInt(a.charAt(d))*c[d];return b=11-b%11,b>9&&(b=0),b==a.substr(8,1)},_ro:function(a){if(!/^RO[1-9][0-9]{1,9}$/.test(a))return!1;a=a.substr(2);for(var b=a.length,c=[7,5,3,2,1,7,5,3,2].slice(10-b),d=0,e=0;b-1>e;e++)d+=parseInt(a.charAt(e))*c[e];return d=10*d%11%10,d==a.substr(b-1,1)},_ru:function(a){if(!/^RU([0-9]{9}|[0-9]{12})$/.test(a))return!1;if(a=a.substr(2),10==a.length){for(var b=0,c=[2,4,10,3,5,9,4,6,8,0],d=0;10>d;d++)b+=parseInt(a.charAt(d))*c[d];return b%=11,b>9&&(b%=10),b==a.substr(9,1)}if(12==a.length){for(var e=0,f=[7,2,4,10,3,5,9,4,6,8,0],g=0,h=[3,7,2,4,10,3,5,9,4,6,8,0],d=0;11>d;d++)e+=parseInt(a.charAt(d))*f[d],g+=parseInt(a.charAt(d))*h[d];return e%=11,e>9&&(e%=10),g%=11,g>9&&(g%=10),e==a.substr(10,1)&&g==a.substr(11,1)}return!1},_rs:function(a){if(!/^RS[0-9]{9}$/.test(a))return!1;a=a.substr(2);for(var b=10,c=0,d=0;8>d;d++)c=(parseInt(a.charAt(d))+b)%10,0==c&&(c=10),b=2*c%11;return(b+parseInt(a.substr(8,1)))%10==1},_se:function(b){return/^SE[0-9]{10}01$/.test(b)?(b=b.substr(2,10),a.fn.bootstrapValidator.helpers.luhn(b)):!1},_si:function(a){if(!/^SI[0-9]{8}$/.test(a))return!1;a=a.substr(2);for(var b=0,c=[8,7,6,5,4,3,2],d=0;7>d;d++)b+=parseInt(a.charAt(d))*c[d];return b=11-b%11,10==b&&(b=0),b==a.substr(7,1)},_sk:function(a){return/^SK[1-9][0-9][(2-4)|(6-9)][0-9]{7}$/.test(a)?(a=a.substr(2),a%11==0):!1}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.vin={validate:function(a,b){var c=b.val();if(""==c)return!0;if(!/^[a-hj-npr-z0-9]{8}[0-9xX][a-hj-npr-z0-9]{8}$/i.test(c))return!1;c=c.toUpperCase();for(var d={A:1,B:2,C:3,D:4,E:5,F:6,G:7,H:8,J:1,K:2,L:3,M:4,N:5,P:7,R:9,S:2,T:3,U:4,V:5,W:6,X:7,Y:8,Z:9,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,0:0},e=[8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2],f=0,g=c.length,h=0;g>h;h++)f+=d[c.charAt(h)+""]*e[h];var i=f%11;return 10==i&&(i="X"),i==c.charAt(8)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.zipCode={html5Attributes:{message:"message",country:"country"},validate:function(a,b,c){var d=b.val();if(""==d||!c.country)return!0;var e=(c.country||"US").toUpperCase();switch(e){case"CA":return/(?:A|B|C|E|G|J|K|L|M|N|P|R|S|T|V|X|Y){1}[0-9]{1}(?:A|B|C|E|G|J|K|L|M|N|P|R|S|T|V|X|Y){1}\s?[0-9]{1}(?:A|B|C|E|G|J|K|L|M|N|P|R|S|T|V|X|Y){1}[0-9]{1}/i.test(d);case"DK":return/^(DK(-|\s)?)?\d{4}$/i.test(d);case"GB":return this._gb(d);case"SE":return/^(S-)?\d{3}\s?\d{2}$/i.test(d);case"US":default:return/^\d{4,5}([\-]\d{4})?$/.test(d)}},_gb:function(a){for(var b="[ABCDEFGHIJKLMNOPRSTUWYZ]",c="[ABCDEFGHKLMNOPQRSTUVWXY]",d="[ABCDEFGHJKPMNRSTUVWXY]",e="[ABEHMNPRVWXY]",f="[ABDEFGHJLNPQRSTUWXYZ]",g=[new RegExp("^("+b+"{1}"+c+"?[0-9]{1,2})(\\s*)([0-9]{1}"+f+"{2})$","i"),new RegExp("^("+b+"{1}[0-9]{1}"+d+"{1})(\\s*)([0-9]{1}"+f+"{2})$","i"),new RegExp("^("+b+"{1}"+c+"{1}?[0-9]{1}"+e+"{1})(\\s*)([0-9]{1}"+f+"{2})$","i"),new RegExp("^(BF1)(\\s*)([0-6]{1}[ABDEFGHJLNPQRST]{1}[ABDEFGHJLNPQRSTUWZYZ]{1})$","i"),/^(GIR)(\s*)(0AA)$/i,/^(BFPO)(\s*)([0-9]{1,4})$/i,/^(BFPO)(\s*)(c\/o\s*[0-9]{1,3})$/i,/^([A-Z]{4})(\s*)(1ZZ)$/i,/^(AI-2640)$/i],h=0;h<g.length;h++)if(g[h].test(a))return!0;return!1}}}(window.jQuery);
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/css/main.css b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/css/main.css
deleted file mode 100644
index cefa731bec9..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/css/main.css
+++ /dev/null
@@ -1,8 +0,0 @@
-.validatedField {
-	float:left;
-	padding-left:5px;
-}
-
-.fieldLabel {
-	float:left;
-}
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/images/openBIS_Logo.svg b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/images/openBIS_Logo.svg
deleted file mode 100644
index 811623c73d2..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/images/openBIS_Logo.svg
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="400.023px" height="174.566px" viewBox="0 0 400.023 174.566" enable-background="new 0 0 400.023 174.566"
-	 xml:space="preserve">
-<g id="Layer_1">
-	<g>
-		<text transform="matrix(1 0 0 1 46.4854 154.2764)"><tspan x="0" y="0" fill="#010101" font-family="'HelveticaNeue-Bold'" font-size="93.505" letter-spacing="-4">open</tspan><tspan x="204.679" y="0" fill="#231F20" font-family="'HelveticaNeue'" font-size="93.505">BIS</tspan></text>
-		<rect x="204.234" y="158.748" fill="none" width="192.64" height="14.936"/>
-		<text transform="matrix(1 0 0 1 204.2329 169.876)" fill="#010101" font-family="'HelveticaNeue'" font-size="15.5842">Biology Information System</text>
-		<g>
-			<g>
-				<g>
-					<g>
-						<polygon fill="#068172" points="125.213,81.967 141.416,98.167 147.252,92.333 131.053,76.132 125.213,76.132 						"/>
-					</g>
-					<g>
-						<g>
-							<polygon fill="#068172" points="120.206,81.967 104.005,98.167 98.168,92.333 114.368,76.132 120.206,76.132 							"/>
-						</g>
-						<g>
-							<polygon fill="#068172" points="120.206,65.286 104.005,49.084 98.168,54.92 114.368,71.12 120.206,71.12 							"/>
-						</g>
-					</g>
-				</g>
-				<g>
-					<polygon fill="#068172" points="125.213,65.286 141.416,49.084 147.252,54.92 131.053,71.12 125.213,71.12 					"/>
-				</g>
-			</g>
-			<g>
-				<g>
-					<polygon fill="#A4A4A4" points="76.131,16.201 92.331,0 98.168,5.836 81.969,22.036 76.13,22.036 					"/>
-				</g>
-				<g>
-					<g>
-						<polygon fill="#ADACAF" points="76.131,32.882 92.331,49.084 98.168,43.247 81.969,27.048 76.13,27.048 						"/>
-					</g>
-					<g>
-						<g>
-							<polygon fill="#ADACAF" points="71.122,32.882 54.921,49.084 49.084,43.247 65.283,27.048 71.123,27.048 							"/>
-						</g>
-						<g>
-							<polygon fill="#ADACAF" points="71.122,16.201 54.921,0 49.084,5.836 65.283,22.036 71.123,22.036 							"/>
-						</g>
-					</g>
-				</g>
-			</g>
-			<g>
-				<g>
-					<polygon fill="#ADACAF" points="27.046,65.286 43.247,49.084 49.083,54.92 32.884,71.12 27.045,71.12 					"/>
-				</g>
-				<g>
-					<polygon fill="#ADACAF" points="27.046,81.967 43.247,98.167 49.083,92.333 32.884,76.132 27.045,76.132 					"/>
-				</g>
-				<g>
-					<polygon fill="#ADACAF" points="22.038,81.967 5.837,98.167 0,92.333 16.199,76.132 22.038,76.132 					"/>
-				</g>
-				<g>
-					<polygon fill="#ADACAF" points="22.038,65.286 5.837,49.084 0,54.92 16.199,71.12 22.038,71.12 					"/>
-				</g>
-			</g>
-		</g>
-	</g>
-</g>
-<g id="Layer_2">
-</g>
-</svg>
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/index.html b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/index.html
deleted file mode 100644
index fc6ef3a33fe..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/index.html
+++ /dev/null
@@ -1,175 +0,0 @@
-<head>
-<title></title>
-<link rel="stylesheet" href="bootstrap3/css/bootstrap.min.css">
-<link rel="stylesheet"
-	href="bootstrapvalidator/css/bootstrapValidator.min.css">
-<link rel="stylesheet"
-	href="css/main.css">
-<script type="text/javascript" src="js/d3.v2.min.js"></script>
-<script type="text/javascript" src="js/jquery-1.8.2.min.js"></script>
-<script type="text/javascript" src="bootstrap3/js/bootstrap.min.js"></script>
-<script type="text/javascript" src="bootstrapvalidator/js/bootstrapValidator.min.js"></script>
-<script type="text/javascript" src="js/spin.min.js"></script>
-<script type="text/javascript" src="js/openbis.js"></script>
-<script type="text/javascript" src="js/openbis-dsu.js"></script>
-<script type="text/javascript" src="js/main.js"></script>
-
-<!-- To speed development, cache the requests -->
-<!-- <script type="text/javascript" src="openbis-request-cache.js"></script> -->
-<script>
-
-        dsu = new openbis_dsu('/openbis/openbis', '/datastore_server');
-        var vis;
-        var didCreateVis = false;
-        var context = new openbisWebAppContext();
-
-        $(document).ready(function () {
-          setValidators();
-          refresh();
-          setInterval(refresh, 600000);	
-        });
-    </script>
-</head>
-<body>
-	<div class="container">
-		<div class="row">
-			<div class="col-lg-12">
-
-				<h2>
-					Demultiplexing <small>QGF</small>
-				</h2>
-			</div>
-		</div>
-	</div>
-	<br>
- 	<div class="container">
-		<div class="panel panel-default" id="lanePanel">
-			<div class="panel-heading">
-				<h3 class="panel-title">Choose Lane</h3>
-			</div>
-			<div class="panel-body">
-				<div class="container">
-					<div class="row">
-						<div class="col-sm-10">
-							<div class="checkbox">
-								<label> <input type="checkbox" id="allLanes"> Analyze all Lanes</label>
-							</div>
-						</div>
-					</div>
-				</div>
-				<script type="text/javascript">
-					$("#allLanes").change(function() {
-	    				if(this.checked) {
-	     			   		$('#laneRange').prop('disabled', true);
-	    				}else {
-	    					$('#laneRange').prop('disabled', false);	
-	    				}
-					});
-				</script>
-				<form class="form-inline validatedField""  role="form" id="laneRangeForm">
-					<div class="form-group">
-						<div class="input-group">
-							<span class="input-group-addon">Lane Range</span> 
-							<input type="text" class="form-control" id="laneRange"  name="laneRange"
-								placeholder="1-3, 5, 7-8">
-						</div>
-					</div>
-				</form>
-			</div>
-		</div>
-		<script type="text/javascript"> $('#allLanes').prop('checked', true); $('#laneRange').prop('disabled', true);</script>
-					
-		<div class="panel panel-default">
-			<div class="panel-heading">
-				<h3 class="panel-title">Options</h3>
-			</div>
-			<div class="panel-body">
-				<form class="form-horizontal" role="form">
-					<div class="form-group">
-						<div class="col-sm-10">
-							<div class="checkbox">
-								<label> 
-									<input type="checkbox" id="sampleSheet">Recreate Sample Sheet
-									<span class="help-block">uses latest meta data from openBIS</span>
-								</label>
-							</div>
-						</div>
-					</div>
-				</form>
-				<script type="text/javascript"> $('#sampleSheet').prop('checked', true);</script>
-				<form class="form-horizontal" role="form">
-					<div class="form-group">
-						<div class="col-sm-10">
-							<div class="checkbox">
-								<label> 
-									<input type="checkbox" id="failedReads">Include reads which do not pass the Illumina filter
-									<span class="help-block">Non PF reads are also in the FASTQ file</span>
-								</label>
-							</div>
-						</div>
-					</div>
-				</form>
-				<script type="text/javascript"> $('#failedReads').prop('checked', true);</script>
-				
-				<form class="form-inline validatedField"" role="form" id="MismatchesInIndexForm">
-					<div class="form-group">
-						<div class="input-group">
-							<span class="input-group-addon">Allowed Index Mismatch</span> 
-							<input type="text" class="form-control" id="indexMismatch"  name="indexMismatch"
-								placeholder="0" value="0" >
-						</div>
-					</div>
-				</form>
-				
-				
-				<form class="form-horizontal" role="form">
-					<div class="form-group">
-						<div class="col-sm-10">
-							<div class="checkbox">
-								<label> 
-									<input type="checkbox" id="email">Send Email when finished
-									<span class="help-block">	</span>
-								</label>
-							</div>
-						</div>
-					</div>
-				</form>
-					
-			</div>
-		</div>
-		<br>
-		<p>
-		<div class="container">
-			<div class="row">
-				<div class="col-md-3">
-					<button class="btn btn-default" type="submit" id="submitBtn"
-						onclick="callIngestionService('startJob');">Start</button>
-					<button type="button" class="btn btn-default" onclick="refresh();">
-						<span class="glyphicon glyphicon-refresh"></span> Refresh
-					</button>
-				</div>
-			</div>
-		</div>
-		</p>
-		<br>
-		<!-- Placeholder for the output coming back from the server -->
-		<div class="container">
-			<div class="row">
-				<div class="col-lg-12">
-					<div id="main"></div>
-				</div>
-			</div>
-		</div>
-
-		<!-- Footer  ================================================== -->
-
-		<footer class="bs-footer" role="contentinfo">
-			<h6 div class="container">
-				<a href="" target="_blank">Powered by ...</a>
-	</div>
-	</h6>
-	</footer>
-
-
-</body>
-</html>
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/d3.v2.min.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/d3.v2.min.js
deleted file mode 100644
index 0b4ea58fdb3..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/d3.v2.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-(function(){function e(e,t){try{for(var n in t)Object.defineProperty(e.prototype,n,{value:t[n],enumerable:!1})}catch(r){e.prototype=t}}function t(e){var t=-1,n=e.length,r=[];while(++t<n)r.push(e[t]);return r}function n(e){return Array.prototype.slice.call(e)}function r(){}function i(e){return e}function s(){return this}function o(){return!0}function u(e){return typeof e=="function"?e:function(){return e}}function a(e,t,n){return function(){var r=n.apply(t,arguments);return arguments.length?e:r}}function f(e){return e!=null&&!isNaN(e)}function l(e){return e.length}function c(e){return e==null}function h(e){return e.trim().replace(/\s+/g," ")}function p(e){var t=1;while(e*t%1)t*=10;return t}function d(){}function v(e){function t(){var t=n,r=-1,i=t.length,s;while(++r<i)(s=t[r].on)&&s.apply(this,arguments);return e}var n=[],i=new r;return t.on=function(t,r){var s=i.get(t),o;return arguments.length<2?s&&s.on:(s&&(s.on=null,n=n.slice(0,o=n.indexOf(s)).concat(n.slice(o+1)),i.remove(t)),r&&n.push(i.set(t,{on:r})),e)},t}function m(e,t){return t-(e?1+Math.floor(Math.log(e+Math.pow(10,1+Math.floor(Math.log(e)/Math.LN10)-t))/Math.LN10):1)}function g(e){return e+""}function y(e){var t=e.lastIndexOf("."),n=t>=0?e.substring(t):(t=e.length,""),r=[];while(t>0)r.push(e.substring(t-=3,t+3));return r.reverse().join(",")+n}function b(e,t){var n=Math.pow(10,Math.abs(8-t)*3);return{scale:t>8?function(e){return e/n}:function(e){return e*n},symbol:e}}function w(e){return function(t){return t<=0?0:t>=1?1:e(t)}}function E(e){return function(t){return 1-e(1-t)}}function S(e){return function(t){return.5*(t<.5?e(2*t):2-e(2-2*t))}}function x(e){return e}function T(e){return function(t){return Math.pow(t,e)}}function N(e){return 1-Math.cos(e*Math.PI/2)}function C(e){return Math.pow(2,10*(e-1))}function k(e){return 1-Math.sqrt(1-e*e)}function L(e,t){var n;return arguments.length<2&&(t=.45),arguments.length<1?(e=1,n=t/4):n=t/(2*Math.PI)*Math.asin(1/e),function(r){return 1+e*Math.pow(2,10*-r)*Math.sin((r-n)*2*Math.PI/t)}}function A(e){return e||(e=1.70158),function(t){return t*t*((e+1)*t-e)}}function O(e){return e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375}function M(){d3.event.stopPropagation(),d3.event.preventDefault()}function _(){var e=d3.event,t;while(t=e.sourceEvent)e=t;return e}function D(e){var t=new d,n=0,r=arguments.length;while(++n<r)t[arguments[n]]=v(t);return t.of=function(n,r){return function(i){try{var s=i.sourceEvent=d3.event;i.target=e,d3.event=i,t[i.type].apply(n,r)}finally{d3.event=s}}},t}function P(e){var t=[e.a,e.b],n=[e.c,e.d],r=B(t),i=H(t,n),s=B(j(n,t,-i))||0;t[0]*n[1]<n[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-n[0],n[1]))*ls,this.translate=[e.e,e.f],this.scale=[r,s],this.skew=s?Math.atan2(i,s)*ls:0}function H(e,t){return e[0]*t[0]+e[1]*t[1]}function B(e){var t=Math.sqrt(H(e,e));return t&&(e[0]/=t,e[1]/=t),t}function j(e,t,n){return e[0]+=n*t[0],e[1]+=n*t[1],e}function F(e){return e=="transform"?d3.interpolateTransform:d3.interpolate}function I(e,t){return t=t-(e=+e)?1/(t-e):0,function(n){return(n-e)*t}}function q(e,t){return t=t-(e=+e)?1/(t-e):0,function(n){return Math.max(0,Math.min(1,(n-e)*t))}}function R(){}function U(e,t,n){return new z(e,t,n)}function z(e,t,n){this.r=e,this.g=t,this.b=n}function W(e){return e<16?"0"+Math.max(0,e).toString(16):Math.min(255,e).toString(16)}function X(e,t,n){var r=0,i=0,s=0,o,u,a;o=/([a-z]+)\((.*)\)/i.exec(e);if(o){u=o[2].split(",");switch(o[1]){case"hsl":return n(parseFloat(u[0]),parseFloat(u[1])/100,parseFloat(u[2])/100);case"rgb":return t(K(u[0]),K(u[1]),K(u[2]))}}return(a=ds.get(e))?t(a.r,a.g,a.b):(e!=null&&e.charAt(0)==="#"&&(e.length===4?(r=e.charAt(1),r+=r,i=e.charAt(2),i+=i,s=e.charAt(3),s+=s):e.length===7&&(r=e.substring(1,3),i=e.substring(3,5),s=e.substring(5,7)),r=parseInt(r,16),i=parseInt(i,16),s=parseInt(s,16)),t(r,i,s))}function V(e,t,n){var r=Math.min(e/=255,t/=255,n/=255),i=Math.max(e,t,n),s=i-r,o,u,a=(i+r)/2;return s?(u=a<.5?s/(i+r):s/(2-i-r),e==i?o=(t-n)/s+(t<n?6:0):t==i?o=(n-e)/s+2:o=(e-t)/s+4,o*=60):u=o=0,Q(o,u,a)}function $(e,t,n){e=J(e),t=J(t),n=J(n);var r=ut((.4124564*e+.3575761*t+.1804375*n)/ys),i=ut((.2126729*e+.7151522*t+.072175*n)/bs),s=ut((.0193339*e+.119192*t+.9503041*n)/ws);return nt(116*i-16,500*(r-i),200*(i-s))}function J(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function K(e){var t=parseFloat(e);return e.charAt(e.length-1)==="%"?Math.round(t*2.55):t}function Q(e,t,n){return new G(e,t,n)}function G(e,t,n){this.h=e,this.s=t,this.l=n}function Y(e,t,n){function r(e){return e>360?e-=360:e<0&&(e+=360),e<60?s+(o-s)*e/60:e<180?o:e<240?s+(o-s)*(240-e)/60:s}function i(e){return Math.round(r(e)*255)}var s,o;return e%=360,e<0&&(e+=360),t=t<0?0:t>1?1:t,n=n<0?0:n>1?1:n,o=n<=.5?n*(1+t):n+t-n*t,s=2*n-o,U(i(e+120),i(e),i(e-120))}function Z(e,t,n){return new et(e,t,n)}function et(e,t,n){this.h=e,this.c=t,this.l=n}function tt(e,t,n){return nt(n,Math.cos(e*=Math.PI/180)*t,Math.sin(e)*t)}function nt(e,t,n){return new rt(e,t,n)}function rt(e,t,n){this.l=e,this.a=t,this.b=n}function it(e,t,n){var r=(e+16)/116,i=r+t/500,s=r-n/200;return i=ot(i)*ys,r=ot(r)*bs,s=ot(s)*ws,U(at(3.2404542*i-1.5371385*r-.4985314*s),at(-0.969266*i+1.8760108*r+.041556*s),at(.0556434*i-.2040259*r+1.0572252*s))}function st(e,t,n){return Z(Math.atan2(n,t)/Math.PI*180,Math.sqrt(t*t+n*n),e)}function ot(e){return e>.206893034?e*e*e:(e-4/29)/7.787037}function ut(e){return e>.008856?Math.pow(e,1/3):7.787037*e+4/29}function at(e){return Math.round(255*(e<=.00304?12.92*e:1.055*Math.pow(e,1/2.4)-.055))}function ft(e){return Qi(e,ks),e}function lt(e){return function(){return Ss(e,this)}}function ct(e){return function(){return xs(e,this)}}function ht(e,t){function n(){this.removeAttribute(e)}function r(){this.removeAttributeNS(e.space,e.local)}function i(){this.setAttribute(e,t)}function s(){this.setAttributeNS(e.space,e.local,t)}function o(){var n=t.apply(this,arguments);n==null?this.removeAttribute(e):this.setAttribute(e,n)}function u(){var n=t.apply(this,arguments);n==null?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,n)}return e=d3.ns.qualify(e),t==null?e.local?r:n:typeof t=="function"?e.local?u:o:e.local?s:i}function pt(e){return new RegExp("(?:^|\\s+)"+d3.requote(e)+"(?:\\s+|$)","g")}function dt(e,t){function n(){var n=-1;while(++n<i)e[n](this,t)}function r(){var n=-1,r=t.apply(this,arguments);while(++n<i)e[n](this,r)}e=e.trim().split(/\s+/).map(vt);var i=e.length;return typeof t=="function"?r:n}function vt(e){var t=pt(e);return function(n,r){if(i=n.classList)return r?i.add(e):i.remove(e);var i=n.className,s=i.baseVal!=null,o=s?i.baseVal:i;r?(t.lastIndex=0,t.test(o)||(o=h(o+" "+e),s?i.baseVal=o:n.className=o)):o&&(o=h(o.replace(t," ")),s?i.baseVal=o:n.className=o)}}function mt(e,t,n){function r(){this.style.removeProperty(e)}function i(){this.style.setProperty(e,t,n)}function s(){var r=t.apply(this,arguments);r==null?this.style.removeProperty(e):this.style.setProperty(e,r,n)}return t==null?r:typeof t=="function"?s:i}function gt(e,t){function n(){delete this[e]}function r(){this[e]=t}function i(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}return t==null?n:typeof t=="function"?i:r}function yt(e){return{__data__:e}}function bt(e){return function(){return Cs(this,e)}}function wt(e){return arguments.length||(e=d3.ascending),function(t,n){return e(t&&t.__data__,n&&n.__data__)}}function Et(e,t,n){function r(){var t=this[s];t&&(this.removeEventListener(e,t,t.$),delete this[s])}function i(){function i(e){var n=d3.event;d3.event=e,u[0]=o.__data__;try{t.apply(o,u)}finally{d3.event=n}}var o=this,u=arguments;r.call(this),this.addEventListener(e,this[s]=i,i.$=n),i._=t}var s="__on"+e,o=e.indexOf(".");return o>0&&(e=e.substring(0,o)),t?i:r}function St(e,t){for(var n=0,r=e.length;n<r;n++)for(var i=e[n],s=0,o=i.length,u;s<o;s++)(u=i[s])&&t(u,s,n);return e}function xt(e){return Qi(e,As),e}function Tt(e,t,n){Qi(e,Os);var i=new r,s=d3.dispatch("start","end"),o=Fs;return e.id=t,e.time=n,e.tween=function(t,n){return arguments.length<2?i.get(t):(n==null?i.remove(t):i.set(t,n),e)},e.ease=function(t){return arguments.length?(o=typeof t=="function"?t:d3.ease.apply(d3,arguments),e):o},e.each=function(t,n){return arguments.length<2?Nt.call(e,t):(s.on(t,n),e)},d3.timer(function(r){return St(e,function(e,u,a){function f(r){return v.active>t?c():(v.active=t,i.forEach(function(t,n){(n=n.call(e,m,u))&&h.push(n)}),s.start.call(e,m,u),l(r)||d3.timer(l,0,n),1)}function l(n){if(v.active!==t)return c();var r=(n-p)/d,i=o(r),a=h.length;while(a>0)h[--a].call(e,i);if(r>=1)return c(),_s=t,s.end.call(e,m,u),_s=0,1}function c(){return--v.count||delete e.__transition__,1}var h=[],p=e.delay,d=e.duration,v=(e=e.node).__transition__||(e.__transition__={active:0,count:0}),m=e.__data__;++v.count,p<=r?f(r):d3.timer(f,p,n)})},0,n),e}function Nt(e){var t=_s,n=Fs,r=Bs,i=js;return _s=this.id,Fs=this.ease(),St(this,function(t,n,r){Bs=t.delay,js=t.duration,e.call(t=t.node,t.__data__,n,r)}),_s=t,Fs=n,Bs=r,js=i,this}function Ct(e,t,n){return n!=""&&Is}function kt(e,t){return d3.tween(e,F(t))}function Lt(){var e,t=Date.now(),n=Us;while(n)e=t-n.then,e>=n.delay&&(n.flush=n.callback(e)),n=n.next;var r=At()-t;r>24?(isFinite(r)&&(clearTimeout(Ws),Ws=setTimeout(Lt,r)),zs=0):(zs=1,Xs(Lt))}function At(){var e=null,t=Us,n=Infinity;while(t)t.flush?(delete Rs[t.callback.id],t=e?e.next=t.next:Us=t.next):(n=Math.min(n,t.then+t.delay),t=(e=t).next);return n}function Ot(e,t){var n=e.ownerSVGElement||e;if(n.createSVGPoint){var r=n.createSVGPoint();if(Vs<0&&(window.scrollX||window.scrollY)){n=d3.select(document.body).append("svg").style("position","absolute").style("top",0).style("left",0);var i=n[0][0].getScreenCTM();Vs=!i.f&&!i.e,n.remove()}return Vs?(r.x=t.pageX,r.y=t.pageY):(r.x=t.clientX,r.y=t.clientY),r=r.matrixTransform(e.getScreenCTM().inverse()),[r.x,r.y]}var s=e.getBoundingClientRect();return[t.clientX-s.left-e.clientLeft,t.clientY-s.top-e.clientTop]}function Mt(){}function _t(e){var t=e[0],n=e[e.length-1];return t<n?[t,n]:[n,t]}function Dt(e){return e.rangeExtent?e.rangeExtent():_t(e.range())}function Pt(e,t){var n=0,r=e.length-1,i=e[n],s=e[r],o;s<i&&(o=n,n=r,r=o,o=i,i=s,s=o);if(t=t(s-i))e[n]=t.floor(i),e[r]=t.ceil(s);return e}function Ht(){return Math}function Bt(e,t,n,r){function i(){var i=Math.min(e.length,t.length)>2?zt:Ut,a=r?q:I;return o=i(e,t,a,n),u=i(t,e,a,d3.interpolate),s}function s(e){return o(e)}var o,u;return s.invert=function(e){return u(e)},s.domain=function(t){return arguments.length?(e=t.map(Number),i()):e},s.range=function(e){return arguments.length?(t=e,i()):t},s.rangeRound=function(e){return s.range(e).interpolate(d3.interpolateRound)},s.clamp=function(e){return arguments.length?(r=e,i()):r},s.interpolate=function(e){return arguments.length?(n=e,i()):n},s.ticks=function(t){return qt(e,t)},s.tickFormat=function(t){return Rt(e,t)},s.nice=function(){return Pt(e,Ft),i()},s.copy=function(){return Bt(e,t,n,r)},i()}function jt(e,t){return d3.rebind(e,t,"range","rangeRound","interpolate","clamp")}function Ft(e){return e=Math.pow(10,Math.round(Math.log(e)/Math.LN10)-1),e&&{floor:function(t){return Math.floor(t/e)*e},ceil:function(t){return Math.ceil(t/e)*e}}}function It(e,t){var n=_t(e),r=n[1]-n[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),s=t/r*i;return s<=.15?i*=10:s<=.35?i*=5:s<=.75&&(i*=2),n[0]=Math.ceil(n[0]/i)*i,n[1]=Math.floor(n[1]/i)*i+i*.5,n[2]=i,n}function qt(e,t){return d3.range.apply(d3,It(e,t))}function Rt(e,t){return d3.format(",."+Math.max(0,-Math.floor(Math.log(It(e,t)[2])/Math.LN10+.01))+"f")}function Ut(e,t,n,r){var i=n(e[0],e[1]),s=r(t[0],t[1]);return function(e){return s(i(e))}}function zt(e,t,n,r){var i=[],s=[],o=0,u=Math.min(e.length,t.length)-1;e[u]<e[0]&&(e=e.slice().reverse(),t=t.slice().reverse());while(++o<=u)i.push(n(e[o-1],e[o])),s.push(r(t[o-1],t[o]));return function(t){var n=d3.bisect(e,t,1,u)-1;return s[n](i[n](t))}}function Wt(e,t){function n(n){return e(t(n))}var r=t.pow;return n.invert=function(t){return r(e.invert(t))},n.domain=function(i){return arguments.length?(t=i[0]<0?Vt:Xt,r=t.pow,e.domain(i.map(t)),n):e.domain().map(r)},n.nice=function(){return e.domain(Pt(e.domain(),Ht)),n},n.ticks=function(){var n=_t(e.domain()),i=[];if(n.every(isFinite)){var s=Math.floor(n[0]),o=Math.ceil(n[1]),u=r(n[0]),a=r(n[1]);if(t===Vt){i.push(r(s));for(;s++<o;)for(var f=9;f>0;f--)i.push(r(s)*f)}else{for(;s<o;s++)for(var f=1;f<10;f++)i.push(r(s)*f);i.push(r(s))}for(s=0;i[s]<u;s++);for(o=i.length;i[o-1]>a;o--);i=i.slice(s,o)}return i},n.tickFormat=function(e,i){arguments.length<2&&(i=$s);if(arguments.length<1)return i;var s=Math.max(.1,e/n.ticks().length),o=t===Vt?(u=-1e-12,Math.floor):(u=1e-12,Math.ceil),u;return function(e){return e/r(o(t(e)+u))<=s?i(e):""}},n.copy=function(){return Wt(e.copy(),t)},jt(n,e)}function Xt(e){return Math.log(e<0?0:e)/Math.LN10}function Vt(e){return-Math.log(e>0?0:-e)/Math.LN10}function $t(e,t){function n(t){return e(r(t))}var r=Jt(t),i=Jt(1/t);return n.invert=function(t){return i(e.invert(t))},n.domain=function(t){return arguments.length?(e.domain(t.map(r)),n):e.domain().map(i)},n.ticks=function(e){return qt(n.domain(),e)},n.tickFormat=function(e){return Rt(n.domain(),e)},n.nice=function(){return n.domain(Pt(n.domain(),Ft))},n.exponent=function(e){if(!arguments.length)return t;var s=n.domain();return r=Jt(t=e),i=Jt(1/t),n.domain(s)},n.copy=function(){return $t(e.copy(),t)},jt(n,e)}function Jt(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function Kt(e,t){function n(t){return o[((s.get(t)||s.set(t,e.push(t)))-1)%o.length]}function i(t,n){return d3.range(e.length).map(function(e){return t+n*e})}var s,o,u;return n.domain=function(i){if(!arguments.length)return e;e=[],s=new r;var o=-1,u=i.length,a;while(++o<u)s.has(a=i[o])||s.set(a,e.push(a));return n[t.t].apply(n,t.a)},n.range=function(e){return arguments.length?(o=e,u=0,t={t:"range",a:arguments},n):o},n.rangePoints=function(r,s){arguments.length<2&&(s=0);var a=r[0],f=r[1],l=(f-a)/(Math.max(1,e.length-1)+s);return o=i(e.length<2?(a+f)/2:a+l*s/2,l),u=0,t={t:"rangePoints",a:arguments},n},n.rangeBands=function(r,s,a){arguments.length<2&&(s=0),arguments.length<3&&(a=s);var f=r[1]<r[0],l=r[f-0],c=r[1-f],h=(c-l)/(e.length-s+2*a);return o=i(l+h*a,h),f&&o.reverse(),u=h*(1-s),t={t:"rangeBands",a:arguments},n},n.rangeRoundBands=function(r,s,a){arguments.length<2&&(s=0),arguments.length<3&&(a=s);var f=r[1]<r[0],l=r[f-0],c=r[1-f],h=Math.floor((c-l)/(e.length-s+2*a)),p=c-l-(e.length-s)*h;return o=i(l+Math.round(p/2),h),f&&o.reverse(),u=Math.round(h*(1-s)),t={t:"rangeRoundBands",a:arguments},n},n.rangeBand=function(){return u},n.rangeExtent=function(){return _t(t.a[0])},n.copy=function(){return Kt(e,t)},n.domain(e)}function Qt(e,t){function n(){var n=0,s=e.length,o=t.length;i=[];while(++n<o)i[n-1]=d3.quantile(e,n/o);return r}function r(e){return isNaN(e=+e)?NaN:t[d3.bisect(i,e)]}var i;return r.domain=function(t){return arguments.length?(e=t.filter(function(e){return!isNaN(e)}).sort(d3.ascending),n()):e},r.range=function(e){return arguments.length?(t=e,n()):t},r.quantiles=function(){return i},r.copy=function(){return Qt(e,t)},n()}function Gt(e,t,n){function r(t){return n[Math.max(0,Math.min(o,Math.floor(s*(t-e))))]}function i(){return s=n.length/(t-e),o=n.length-1,r}var s,o;return r.domain=function(n){return arguments.length?(e=+n[0],t=+n[n.length-1],i()):[e,t]},r.range=function(e){return arguments.length?(n=e,i()):n},r.copy=function(){return Gt(e,t,n)},i()}function Yt(e,t){function n(n){return t[d3.bisect(e,n)]}return n.domain=function(t){return arguments.length?(e=t,n):e},n.range=function(e){return arguments.length?(t=e,n):t},n.copy=function(){return Yt(e,t)},n}function Zt(e){function t(e){return+e}return t.invert=t,t.domain=t.range=function(n){return arguments.length?(e=n.map(t),t):e},t.ticks=function(t){return qt(e,t)},t.tickFormat=function(t){return Rt(e,t)},t.copy=function(){return Zt(e)},t}function en(e){return e.innerRadius}function tn(e){return e.outerRadius}function nn(e){return e.startAngle}function rn(e){return e.endAngle}function sn(e){function t(t){function o(){a.push("M",s(e(l),f))}var a=[],l=[],c=-1,h=t.length,p,d=u(n),v=u(r);while(++c<h)i.call(this,p=t[c],c)?l.push([+d.call(this,p,c),+v.call(this,p,c)]):l.length&&(o(),l=[]);return l.length&&o(),a.length?a.join(""):null}var n=on,r=un,i=o,s=an,a=s.key,f=.7;return t.x=function(e){return arguments.length?(n=e,t):n},t.y=function(e){return arguments.length?(r=e,t):r},t.defined=function(e){return arguments.length?(i=e,t):i},t.interpolate=function(e){return arguments.length?(typeof e=="function"?a=s=e:a=(s=eo.get(e)||an).key,t):a},t.tension=function(e){return arguments.length?(f=e,t):f},t}function on(e){return e[0]}function un(e){return e[1]}function an(e){return e.join("L")}function fn(e){return an(e)+"Z"}function ln(e){var t=0,n=e.length,r=e[0],i=[r[0],",",r[1]];while(++t<n)i.push("V",(r=e[t])[1],"H",r[0]);return i.join("")}function cn(e){var t=0,n=e.length,r=e[0],i=[r[0],",",r[1]];while(++t<n)i.push("H",(r=e[t])[0],"V",r[1]);return i.join("")}function hn(e,t){return e.length<4?an(e):e[1]+vn(e.slice(1,e.length-1),mn(e,t))}function pn(e,t){return e.length<3?an(e):e[0]+vn((e.push(e[0]),e),mn([e[e.length-2]].concat(e,[e[1]]),t))}function dn(e,t,n){return e.length<3?an(e):e[0]+vn(e,mn(e,t))}function vn(e,t){if(t.length<1||e.length!=t.length&&e.length!=t.length+2)return an(e);var n=e.length!=t.length,r="",i=e[0],s=e[1],o=t[0],u=o,a=1;n&&(r+="Q"+(s[0]-o[0]*2/3)+","+(s[1]-o[1]*2/3)+","+s[0]+","+s[1],i=e[1],a=2);if(t.length>1){u=t[1],s=e[a],a++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(s[0]-u[0])+","+(s[1]-u[1])+","+s[0]+","+s[1];for(var f=2;f<t.length;f++,a++)s=e[a],u=t[f],r+="S"+(s[0]-u[0])+","+(s[1]-u[1])+","+s[0]+","+s[1]}if(n){var l=e[a];r+="Q"+(s[0]+u[0]*2/3)+","+(s[1]+u[1]*2/3)+","+l[0]+","+l[1]}return r}function mn(e,t){var n=[],r=(1-t)/2,i,s=e[0],o=e[1],u=1,a=e.length;while(++u<a)i=s,s=o,o=e[u],n.push([r*(o[0]-i[0]),r*(o[1]-i[1])]);return n}function gn(e){if(e.length<3)return an(e);var t=1,n=e.length,r=e[0],i=r[0],s=r[1],o=[i,i,i,(r=e[1])[0]],u=[s,s,s,r[1]],a=[i,",",s];Sn(a,o,u);while(++t<n)r=e[t],o.shift(),o.push(r[0]),u.shift(),u.push(r[1]),Sn(a,o,u);t=-1;while(++t<2)o.shift(),o.push(r[0]),u.shift(),u.push(r[1]),Sn(a,o,u);return a.join("")}function yn(e){if(e.length<4)return an(e);var t=[],n=-1,r=e.length,i,s=[0],o=[0];while(++n<3)i=e[n],s.push(i[0]),o.push(i[1]);t.push(En(ro,s)+","+En(ro,o)),--n;while(++n<r)i=e[n],s.shift(),s.push(i[0]),o.shift(),o.push(i[1]),Sn(t,s,o);return t.join("")}function bn(e){var t,n=-1,r=e.length,i=r+4,s,o=[],u=[];while(++n<4)s=e[n%r],o.push(s[0]),u.push(s[1]);t=[En(ro,o),",",En(ro,u)],--n;while(++n<i)s=e[n%r],o.shift(),o.push(s[0]),u.shift(),u.push(s[1]),Sn(t,o,u);return t.join("")}function wn(e,t){var n=e.length-1;if(n){var r=e[0][0],i=e[0][1],s=e[n][0]-r,o=e[n][1]-i,u=-1,a,f;while(++u<=n)a=e[u],f=u/n,a[0]=t*a[0]+(1-t)*(r+f*s),a[1]=t*a[1]+(1-t)*(i+f*o)}return gn(e)}function En(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3]}function Sn(e,t,n){e.push("C",En(to,t),",",En(to,n),",",En(no,t),",",En(no,n),",",En(ro,t),",",En(ro,n))}function xn(e,t){return(t[1]-e[1])/(t[0]-e[0])}function Tn(e){var t=0,n=e.length-1,r=[],i=e[0],s=e[1],o=r[0]=xn(i,s);while(++t<n)r[t]=(o+(o=xn(i=s,s=e[t+1])))/2;return r[t]=o,r}function Nn(e){var t=[],n,r,i,s,o=Tn(e),u=-1,a=e.length-1;while(++u<a)n=xn(e[u],e[u+1]),Math.abs(n)<1e-6?o[u]=o[u+1]=0:(r=o[u]/n,i=o[u+1]/n,s=r*r+i*i,s>9&&(s=n*3/Math.sqrt(s),o[u]=s*r,o[u+1]=s*i));u=-1;while(++u<=a)s=(e[Math.min(a,u+1)][0]-e[Math.max(0,u-1)][0])/(6*(1+o[u]*o[u])),t.push([s||0,o[u]*s||0]);return t}function Cn(e){return e.length<3?an(e):e[0]+vn(e,Nn(e))}function kn(e){var t,n=-1,r=e.length,i,s;while(++n<r)t=e[n],i=t[0],s=t[1]+Ys,t[0]=i*Math.cos(s),t[1]=i*Math.sin(s);return e}function Ln(e){function t(t){function o(){l.push("M",f(e(v),p),h,c(e(d.reverse()),p),"Z")}var l=[],d=[],v=[],m=-1,g=t.length,y,b=u(n),w=u(i),E=n===r?function(){return x}:u(r),S=i===s?function(){return T}:u(s),x,T;while(++m<g)a.call(this,y=t[m],m)?(d.push([x=+b.call(this,y,m),T=+w.call(this,y,m)]),v.push([+E.call(this,y,m),+S.call(this,y,m)])):d.length&&(o(),d=[],v=[]);return d.length&&o(),l.length?l.join(""):null}var n=on,r=on,i=0,s=un,a=o,f=an,l=f.key,c=f,h="L",p=.7;return t.x=function(e){return arguments.length?(n=r=e,t):r},t.x0=function(e){return arguments.length?(n=e,t):n},t.x1=function(e){return arguments.length?(r=e,t):r},t.y=function(e){return arguments.length?(i=s=e,t):s},t.y0=function(e){return arguments.length?(i=e,t):i},t.y1=function(e){return arguments.length?(s=e,t):s},t.defined=function(e){return arguments.length?(a=e,t):a},t.interpolate=function(e){return arguments.length?(typeof e=="function"?l=f=e:l=(f=eo.get(e)||an).key,c=f.reverse||f,h=f.closed?"M":"L",t):l},t.tension=function(e){return arguments.length?(p=e,t):p},t}function An(e){return e.source}function On(e){return e.target}function Mn(e){return e.radius}function _n(e){return e.startAngle}function Dn(e){return e.endAngle}function Pn(e){return[e.x,e.y]}function Hn(e){return function(){var t=e.apply(this,arguments),n=t[0],r=t[1]+Ys;return[n*Math.cos(r),n*Math.sin(r)]}}function Bn(){return 64}function jn(){return"circle"}function Fn(e){var t=Math.sqrt(e/Math.PI);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+ -t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function In(e,t){e.attr("transform",function(e){return"translate("+t(e)+",0)"})}function qn(e,t){e.attr("transform",function(e){return"translate(0,"+t(e)+")"})}function Rn(e,t,n){i=[];if(n&&t.length>1){var r=_t(e.domain()),i,s=-1,o=t.length,u=(t[1]-t[0])/++n,a,f;while(++s<o)for(a=n;--a>0;)(f=+t[s]-a*u)>=r[0]&&i.push(f);for(--s,a=0;++a<n&&(f=+t[s]+a*u)<r[1];)i.push(f)}return i}function Un(){fo||(fo=d3.select("body").append("div").style("visibility","hidden").style("top",0).style("height",0).style("width",0).style("overflow-y","scroll").append("div").style("height","2000px").node().parentNode);var e=d3.event,t;try{fo.scrollTop=1e3,fo.dispatchEvent(e),t=1e3-fo.scrollTop}catch(n){t=e.wheelDelta||-e.detail*5}return t}function zn(e){var t=e.source,n=e.target,r=Xn(t,n),i=[t];while(t!==r)t=t.parent,i.push(t);var s=i.length;while(n!==r)i.splice(s,0,n),n=n.parent;return i}function Wn(e){var t=[],n=e.parent;while(n!=null)t.push(e),e=n,n=n.parent;return t.push(e),t}function Xn(e,t){if(e===t)return e;var n=Wn(e),r=Wn(t),i=n.pop(),s=r.pop(),o=null;while(i===s)o=i,i=n.pop(),s=r.pop();return o}function Vn(e){e.fixed|=2}function $n(e){e.fixed&=1}function Jn(e){e.fixed|=4}function Kn(e){e.fixed&=3}function Qn(e,t,n){var r=0,i=0;e.charge=0;if(!e.leaf){var s=e.nodes,o=s.length,u=-1,a;while(++u<o){a=s[u];if(a==null)continue;Qn(a,t,n),e.charge+=a.charge,r+=a.charge*a.cx,i+=a.charge*a.cy}}if(e.point){e.leaf||(e.point.x+=Math.random()-.5,e.point.y+=Math.random()-.5);var f=t*n[e.point.index];e.charge+=e.pointCharge=f,r+=f*e.point.x,i+=f*e.point.y}e.cx=r/e.charge,e.cy=i/e.charge}function Gn(e){return 20}function Yn(e){return 1}function Zn(e){return e.x}function er(e){return e.y}function tr(e,t,n){e.y0=t,e.y=n}function nr(e){return d3.range(e.length)}function rr(e){var t=-1,n=e[0].length,r=[];while(++t<n)r[t]=0;return r}function ir(e){var t=1,n=0,r=e[0][1],i,s=e.length;for(;t<s;++t)(i=e[t][1])>r&&(n=t,r=i);return n}function sr(e){return e.reduce(or,0)}function or(e,t){return e+t[1]}function ur(e,t){return ar(e,Math.ceil(Math.log(t.length)/Math.LN2+1))}function ar(e,t){var n=-1,r=+e[0],i=(e[1]-r)/t,s=[];while(++n<=t)s[n]=i*n+r;return s}function fr(e){return[d3.min(e),d3.max(e)]}function lr(e,t){return d3.rebind(e,t,"sort","children","value"),e.links=dr,e.nodes=function(t){return vo=!0,(e.nodes=e)(t)},e}function cr(e){return e.children}function hr(e){return e.value}function pr(e,t){return t.value-e.value}function dr(e){return d3.merge(e.map(function(e){return(e.children||[]).map(function(t){return{source:e,target:t}})}))}function vr(e,t){return e.value-t.value}function mr(e,t){var n=e._pack_next;e._pack_next=t,t._pack_prev=e,t._pack_next=n,n._pack_prev=t}function gr(e,t){e._pack_next=t,t._pack_prev=e}function yr(e,t){var n=t.x-e.x,r=t.y-e.y,i=e.r+t.r;return i*i-n*n-r*r>.001}function br(e){function t(e){r=Math.min(e.x-e.r,r),i=Math.max(e.x+e.r,i),s=Math.min(e.y-e.r,s),o=Math.max(e.y+e.r,o)}if(!(n=e.children)||!(p=n.length))return;var n,r=Infinity,i=-Infinity,s=Infinity,o=-Infinity,u,a,f,l,c,h,p;n.forEach(wr),u=n[0],u.x=-u.r,u.y=0,t(u);if(p>1){a=n[1],a.x=a.r,a.y=0,t(a);if(p>2){f=n[2],xr(u,a,f),t(f),mr(u,f),u._pack_prev=f,mr(f,a),a=u._pack_next;for(l=3;l<p;l++){xr(u,a,f=n[l]);var d=0,v=1,m=1;for(c=a._pack_next;c!==a;c=c._pack_next,v++)if(yr(c,f)){d=1;break}if(d==1)for(h=u._pack_prev;h!==c._pack_prev;h=h._pack_prev,m++)if(yr(h,f))break;d?(v<m||v==m&&a.r<u.r?gr(u,a=c):gr(u=h,a),l--):(mr(u,f),a=f,t(f))}}}var g=(r+i)/2,y=(s+o)/2,b=0;for(l=0;l<p;l++)f=n[l],f.x-=g,f.y-=y,b=Math.max(b,f.r+Math.sqrt(f.x*f.x+f.y*f.y));e.r=b,n.forEach(Er)}function wr(e){e._pack_next=e._pack_prev=e}function Er(e){delete e._pack_next,delete e._pack_prev}function Sr(e,t,n,r){var i=e.children;e.x=t+=r*e.x,e.y=n+=r*e.y,e.r*=r;if(i){var s=-1,o=i.length;while(++s<o)Sr(i[s],t,n,r)}}function xr(e,t,n){var r=e.r+n.r,i=t.x-e.x,s=t.y-e.y;if(r&&(i||s)){var o=t.r+n.r,u=i*i+s*s;o*=o,r*=r;var a=.5+(r-o)/(2*u),f=Math.sqrt(Math.max(0,2*o*(r+u)-(r-=u)*r-o*o))/(2*u);n.x=e.x+a*i+f*s,n.y=e.y+a*s-f*i}else n.x=e.x+r,n.y=e.y}function Tr(e){return 1+d3.max(e,function(e){return e.y})}function Nr(e){return e.reduce(function(e,t){return e+t.x},0)/e.length}function Cr(e){var t=e.children;return t&&t.length?Cr(t[0]):e}function kr(e){var t=e.children,n;return t&&(n=t.length)?kr(t[n-1]):e}function Lr(e,t){return e.parent==t.parent?1:2}function Ar(e){var t=e.children;return t&&t.length?t[0]:e._tree.thread}function Or(e){var t=e.children,n;return t&&(n=t.length)?t[n-1]:e._tree.thread}function Mr(e,t){var n=e.children;if(n&&(i=n.length)){var r,i,s=-1;while(++s<i)t(r=Mr(n[s],t),e)>0&&(e=r)}return e}function _r(e,t){return e.x-t.x}function Dr(e,t){return t.x-e.x}function Pr(e,t){return e.depth-t.depth}function Hr(e,t){function n(e,r){var i=e.children;if(i&&(a=i.length)){var s,o=null,u=-1,a;while(++u<a)s=i[u],n(s,o),o=s}t(e,r)}n(e,null)}function Br(e){var t=0,n=0,r=e.children,i=r.length,s;while(--i>=0)s=r[i]._tree,s.prelim+=t,s.mod+=t,t+=s.shift+(n+=s.change)}function jr(e,t,n){e=e._tree,t=t._tree;var r=n/(t.number-e.number);e.change+=r,t.change-=r,t.shift+=n,t.prelim+=n,t.mod+=n}function Fr(e,t,n){return e._tree.ancestor.parent==t.parent?e._tree.ancestor:n}function Ir(e){return{x:e.x,y:e.y,dx:e.dx,dy:e.dy}}function qr(e,t){var n=e.x+t[3],r=e.y+t[0],i=e.dx-t[1]-t[3],s=e.dy-t[0]-t[2];return i<0&&(n+=i/2,i=0),s<0&&(r+=s/2,s=0),{x:n,y:r,dx:i,dy:s}}function Rr(e,t){function n(e,r){d3.text(e,t,function(e){r(e&&n.parse(e))})}function r(t){return t.map(i).join(e)}function i(e){return o.test(e)?'"'+e.replace(/\"/g,'""')+'"':e}var s=new RegExp("\r\n|["+e+"\r\n]","g"),o=new RegExp('["'+e+"\n]"),u=e.charCodeAt(0);return n.parse=function(e){var t;return n.parseRows(e,function(e,n){if(n){var r={},i=-1,s=t.length;while(++i<s)r[t[i]]=e[i];return r}return t=e,null})},n.parseRows=function(e,t){function n(){if(s.lastIndex>=e.length)return i;if(l)return l=!1,r;var t=s.lastIndex;if(e.charCodeAt(t)===34){var n=t;while(n++<e.length)if(e.charCodeAt(n)===34){if(e.charCodeAt(n+1)!==34)break;n++}s.lastIndex=n+2;var o=e.charCodeAt(n+1);return o===13?(l=!0,e.charCodeAt(n+2)===10&&s.lastIndex++):o===10&&(l=!0),e.substring(t+1,n).replace(/""/g,'"')}var a=s.exec(e);return a?(l=a[0].charCodeAt(0)!==u,e.substring(t,a.index)):(s.lastIndex=e.length,e.substring(t))}var r={},i={},o=[],a=0,f,l;s.lastIndex=0;while((f=n())!==i){var c=[];while(f!==r&&f!==i)c.push(f),f=n();if(t&&!(c=t(c,a++)))continue;o.push(c)}return o},n.format=function(e){return e.map(r).join("\n")},n}function Ur(e,t){return function(n){return n&&e.hasOwnProperty(n.type)?e[n.type](n):t}}function zr(e){return"m0,"+e+"a"+e+","+e+" 0 1,1 0,"+ -2*e+"a"+e+","+e+" 0 1,1 0,"+2*e+"z"}function Wr(e,t){go.hasOwnProperty(e.type)&&go[e.type](e,t)}function Xr(e,t){Wr(e.geometry,t)}function Vr(e,t){for(var n=e.features,r=0,i=n.length;r<i;r++)Wr(n[r].geometry,t)}function $r(e,t){for(var n=e.geometries,r=0,i=n.length;r<i;r++)Wr(n[r],t)}function Jr(e,t){for(var n=e.coordinates,r=0,i=n.length;r<i;r++)t.apply(null,n[r])}function Kr(e,t){for(var n=e.coordinates,r=0,i=n.length;r<i;r++)for(var s=n[r],o=0,u=s.length;o<u;o++)t.apply(null,s[o])}function Qr(e,t){for(var n=e.coordinates,r=0,i=n.length;r<i;r++)for(var s=n[r][0],o=0,u=s.length;o<u;o++)t.apply(null,s[o])}function Gr(e,t){t.apply(null,e.coordinates)}function Yr(e,t){for(var n=e.coordinates[0],r=0,i=n.length;r<i;r++)t.apply(null,n[r])}function Zr(e){return e.source}function ei(e){return e.target}function ti(){function e(e){var t=Math.sin(e*=p)*d,n=Math.sin(p-e)*d,r=n*s+t*c,u=n*o+t*h,a=n*i+t*l;return[Math.atan2(u,r)/mo,Math.atan2(a,Math.sqrt(r*r+u*u))/mo]}var t,n,r,i,s,o,u,a,f,l,c,h,p,d;return e.distance=function(){return p==null&&(d=1/Math.sin(p=Math.acos(Math.max(-1,Math.min(1,i*l+r*f*Math.cos(u-t)))))),p},e.source=function(u){var a=Math.cos(t=u[0]*mo),f=Math.sin(t);return r=Math.cos(n=u[1]*mo),i=Math.sin(n),s=r*a,o=r*f,p=null,e},e.target=function(t){var n=Math.cos(u=t[0]*mo),r=Math.sin(u);return f=Math.cos(a=t[1]*mo),l=Math.sin(a),c=f*n,h=f*r,p=null,e},e}function ni(e,t){var n=ti().source(e).target(t);return n.distance(),n}function ri(e){var t=0,n=0;for(;;){if(e(t,n))return[t,n];t===0?(t=n+1,n=0):(t-=1,n+=1)}}function ii(e,t,n,r){var i,s,o,u,a,f,l;return i=r[e],s=i[0],o=i[1],i=r[t],u=i[0],a=i[1],i=r[n],f=i[0],l=i[1],(l-o)*(u-s)-(a-o)*(f-s)>0}function si(e,t,n){return(n[0]-t[0])*(e[1]-t[1])<(n[1]-t[1])*(e[0]-t[0])}function oi(e,t,n,r){var i=e[0],s=t[0],o=n[0],u=r[0],a=e[1],f=t[1],l=n[1],c=r[1],h=i-o,p=s-i,d=u-o,v=a-l,m=f-a,g=c-l,y=(d*v-g*h)/(g*p-d*m);return[i+y*p,a+y*m]}function ui(e,t){var n={list:e.map(function(e,t){return{index:t,x:e[0],y:e[1]}}).sort(function(e,t){return e.y<t.y?-1:e.y>t.y?1:e.x<t.x?-1:e.x>t.x?1:0}),bottomSite:null},r={list:[],leftEnd:null,rightEnd:null,init:function(){r.leftEnd=r.createHalfEdge(null,"l"),r.rightEnd=r.createHalfEdge(null,"l"),r.leftEnd.r=r.rightEnd,r.rightEnd.l=r.leftEnd,r.list.unshift(r.leftEnd,r.rightEnd)},createHalfEdge:function(e,t){return{edge:e,side:t,vertex:null,l:null,r:null}},insert:function(e,t){t.l=e,t.r=e.r,e.r.l=t,e.r=t},leftBound:function(e){var t=r.leftEnd;do t=t.r;while(t!=r.rightEnd&&i.rightOf(t,e));return t=t.l,t},del:function(e){e.l.r=e.r,e.r.l=e.l,e.edge=null},right:function(e){return e.r},left:function(e){return e.l},leftRegion:function(e){return e.edge==null?n.bottomSite:e.edge.region[e.side]},rightRegion:function(e){return e.edge==null?n.bottomSite:e.edge.region[wo[e.side]]}},i={bisect:function(e,t){var n={region:{l:e,r:t},ep:{l:null,r:null}},r=t.x-e.x,i=t.y-e.y,s=r>0?r:-r,o=i>0?i:-i;return n.c=e.x*r+e.y*i+(r*r+i*i)*.5,s>o?(n.a=1,n.b=i/r,n.c/=r):(n.b=1,n.a=r/i,n.c/=i),n},intersect:function(e,t){var n=e.edge,r=t.edge;if(!n||!r||n.region.r==r.region.r)return null;var i=n.a*r.b-n.b*r.a;if(Math.abs(i)<1e-10)return null;var s=(n.c*r.b-r.c*n.b)/i,o=(r.c*n.a-n.c*r.a)/i,u=n.region.r,a=r.region.r,f,l;u.y<a.y||u.y==a.y&&u.x<a.x?(f=e,l=n):(f=t,l=r);var c=s>=l.region.r.x;return c&&f.side==="l"||!c&&f.side==="r"?null:{x:s,y:o}},rightOf:function(e,t){var n=e.edge,r=n.region.r,i=t.x>r.x;if(i&&e.side==="l")return 1;if(!i&&e.side==="r")return 0;if(n.a===1){var s=t.y-r.y,o=t.x-r.x,u=0,a=0;!i&&n.b<0||i&&n.b>=0?a=u=s>=n.b*o:(a=t.x+t.y*n.b>n.c,n.b<0&&(a=!a),a||(u=1));if(!u){var f=r.x-n.region.l.x;a=n.b*(o*o-s*s)<f*s*(1+2*o/f+n.b*n.b),n.b<0&&(a=!a)}}else{var l=n.c-n.a*t.x,c=t.y-l,h=t.x-r.x,p=l-r.y;a=c*c>h*h+p*p}return e.side==="l"?a:!a},endPoint:function(e,n,r){e.ep[n]=r;if(!e.ep[wo[n]])return;t(e)},distance:function(e,t){var n=e.x-t.x,r=e.y-t.y;return Math.sqrt(n*n+r*r)}},s={list:[],insert:function(e,t,n){e.vertex=t,e.ystar=t.y+n;for(var r=0,i=s.list,o=i.length;r<o;r++){var u=i[r];if(e.ystar>u.ystar||e.ystar==u.ystar&&t.x>u.vertex.x)continue;break}i.splice(r,0,e)},del:function(e){for(var t=0,n=s.list,r=n.length;t<r&&n[t]!=e;++t);n.splice(t,1)},empty:function(){return s.list.length===0},nextEvent:function(e){for(var t=0,n=s.list,r=n.length;t<r;++t)if(n[t]==e)return n[t+1];return null},min:function(){var e=s.list[0];return{x:e.vertex.x,y:e.ystar}},extractMin:function(){return s.list.shift()}};r.init(),n.bottomSite=n.list.shift();var o=n.list.shift(),u,a,f,l,c,h,p,d,v,m,g,y,b;for(;;){s.empty()||(u=s.min());if(o&&(s.empty()||o.y<u.y||o.y==u.y&&o.x<u.x))a=r.leftBound(o),f=r.right(a),p=r.rightRegion(a),y=i.bisect(p,o),h=r.createHalfEdge(y,"l"),r.insert(a,h),m=i.intersect(a,h),m&&(s.del(a),s.insert(a,m,i.
-distance(m,o))),a=h,h=r.createHalfEdge(y,"r"),r.insert(a,h),m=i.intersect(h,f),m&&s.insert(h,m,i.distance(m,o)),o=n.list.shift();else{if(!!s.empty())break;a=s.extractMin(),l=r.left(a),f=r.right(a),c=r.right(f),p=r.leftRegion(a),d=r.rightRegion(f),g=a.vertex,i.endPoint(a.edge,a.side,g),i.endPoint(f.edge,f.side,g),r.del(a),s.del(f),r.del(f),b="l",p.y>d.y&&(v=p,p=d,d=v,b="r"),y=i.bisect(p,d),h=r.createHalfEdge(y,b),r.insert(l,h),i.endPoint(y,wo[b],g),m=i.intersect(l,h),m&&(s.del(l),s.insert(l,m,i.distance(m,p))),m=i.intersect(h,c),m&&s.insert(h,m,i.distance(m,p))}}for(a=r.right(r.leftEnd);a!=r.rightEnd;a=r.right(a))t(a.edge)}function ai(){return{leaf:!0,nodes:[],point:null}}function fi(e,t,n,r,i,s){if(!e(t,n,r,i,s)){var o=(n+i)*.5,u=(r+s)*.5,a=t.nodes;a[0]&&fi(e,a[0],n,r,o,u),a[1]&&fi(e,a[1],o,r,i,u),a[2]&&fi(e,a[2],n,u,o,s),a[3]&&fi(e,a[3],o,u,i,s)}}function li(e){return{x:e[0],y:e[1]}}function ci(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function hi(e){return e.substring(0,3)}function pi(e,t,n,r){var i,s,o=0,u=t.length,a=n.length;while(o<u){if(r>=a)return-1;i=t.charCodeAt(o++);if(i==37){s=Uo[t.charAt(o++)];if(!s||(r=s(e,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}function di(e){return new RegExp("^(?:"+e.map(d3.requote).join("|")+")","i")}function vi(e){var t=new r,n=-1,i=e.length;while(++n<i)t.set(e[n].toLowerCase(),n);return t}function mi(e,t,n){Bo.lastIndex=0;var r=Bo.exec(t.substring(n));return r?n+=r[0].length:-1}function gi(e,t,n){Ho.lastIndex=0;var r=Ho.exec(t.substring(n));return r?n+=r[0].length:-1}function yi(e,t,n){Io.lastIndex=0;var r=Io.exec(t.substring(n));return r?(e.m=qo.get(r[0].toLowerCase()),n+=r[0].length):-1}function bi(e,t,n){jo.lastIndex=0;var r=jo.exec(t.substring(n));return r?(e.m=Fo.get(r[0].toLowerCase()),n+=r[0].length):-1}function wi(e,t,n){return pi(e,Ro.c.toString(),t,n)}function Ei(e,t,n){return pi(e,Ro.x.toString(),t,n)}function Si(e,t,n){return pi(e,Ro.X.toString(),t,n)}function xi(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+4));return r?(e.y=+r[0],n+=r[0].length):-1}function Ti(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+2));return r?(e.y=Ni(+r[0]),n+=r[0].length):-1}function Ni(e){return e+(e>68?1900:2e3)}function Ci(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+2));return r?(e.m=r[0]-1,n+=r[0].length):-1}function ki(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+2));return r?(e.d=+r[0],n+=r[0].length):-1}function Li(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+2));return r?(e.H=+r[0],n+=r[0].length):-1}function Ai(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+2));return r?(e.M=+r[0],n+=r[0].length):-1}function Oi(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+2));return r?(e.S=+r[0],n+=r[0].length):-1}function Mi(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+3));return r?(e.L=+r[0],n+=r[0].length):-1}function _i(e,t,n){var r=Wo.get(t.substring(n,n+=2).toLowerCase());return r==null?-1:(e.p=r,n)}function Di(e){var t=e.getTimezoneOffset(),n=t>0?"-":"+",r=~~(Math.abs(t)/60),i=Math.abs(t)%60;return n+Mo(r)+Mo(i)}function Pi(e){return e.toISOString()}function Hi(e,t,n){function r(t){var n=e(t),r=s(n,1);return t-n<r-t?n:r}function i(n){return t(n=e(new Eo(n-1)),1),n}function s(e,n){return t(e=new Eo(+e),n),e}function o(e,r,s){var o=i(e),u=[];if(s>1)while(o<r)n(o)%s||u.push(new Date(+o)),t(o,1);else while(o<r)u.push(new Date(+o)),t(o,1);return u}function u(e,t,n){try{Eo=ci;var r=new ci;return r._=e,o(r,t,n)}finally{Eo=Date}}e.floor=e,e.round=r,e.ceil=i,e.offset=s,e.range=o;var a=e.utc=Bi(e);return a.floor=a,a.round=Bi(r),a.ceil=Bi(i),a.offset=Bi(s),a.range=u,e}function Bi(e){return function(t,n){try{Eo=ci;var r=new ci;return r._=t,e(r,n)._}finally{Eo=Date}}}function ji(e,t,n){function r(t){return e(t)}return r.invert=function(t){return Ii(e.invert(t))},r.domain=function(t){return arguments.length?(e.domain(t),r):e.domain().map(Ii)},r.nice=function(e){return r.domain(Pt(r.domain(),function(){return e}))},r.ticks=function(n,i){var s=Fi(r.domain());if(typeof n!="function"){var o=s[1]-s[0],u=o/n,a=d3.bisect(Vo,u);if(a==Vo.length)return t.year(s,n);if(!a)return e.ticks(n).map(Ii);Math.log(u/Vo[a-1])<Math.log(Vo[a]/u)&&--a,n=t[a],i=n[1],n=n[0].range}return n(s[0],new Date(+s[1]+1),i)},r.tickFormat=function(){return n},r.copy=function(){return ji(e.copy(),t,n)},d3.rebind(r,e,"range","rangeRound","interpolate","clamp")}function Fi(e){var t=e[0],n=e[e.length-1];return t<n?[t,n]:[n,t]}function Ii(e){return new Date(e)}function qi(e){return function(t){var n=e.length-1,r=e[n];while(!r[1](t))r=e[--n];return r[0](t)}}function Ri(e){var t=new Date(e,0,1);return t.setFullYear(e),t}function Ui(e){var t=e.getFullYear(),n=Ri(t),r=Ri(t+1);return t+(e-n)/(r-n)}function zi(e){var t=new Date(Date.UTC(e,0,1));return t.setUTCFullYear(e),t}function Wi(e){var t=e.getUTCFullYear(),n=zi(t),r=zi(t+1);return t+(e-n)/(r-n)}Date.now||(Date.now=function(){return+(new Date)});try{document.createElement("div").style.setProperty("opacity",0,"")}catch(Xi){var Vi=CSSStyleDeclaration.prototype,$i=Vi.setProperty;Vi.setProperty=function(e,t,n){$i.call(this,e,t+"",n)}}d3={version:"2.10.3"};var Ji=n;try{Ji(document.documentElement.childNodes)[0].nodeType}catch(Ki){Ji=t}var Qi=[].__proto__?function(e,t){e.__proto__=t}:function(e,t){for(var n in t)e[n]=t[n]};d3.map=function(e){var t=new r;for(var n in e)t.set(n,e[n]);return t},e(r,{has:function(e){return Gi+e in this},get:function(e){return this[Gi+e]},set:function(e,t){return this[Gi+e]=t},remove:function(e){return e=Gi+e,e in this&&delete this[e]},keys:function(){var e=[];return this.forEach(function(t){e.push(t)}),e},values:function(){var e=[];return this.forEach(function(t,n){e.push(n)}),e},entries:function(){var e=[];return this.forEach(function(t,n){e.push({key:t,value:n})}),e},forEach:function(e){for(var t in this)t.charCodeAt(0)===Yi&&e.call(this,t.substring(1),this[t])}});var Gi="\0",Yi=Gi.charCodeAt(0);d3.functor=u,d3.rebind=function(e,t){var n=1,r=arguments.length,i;while(++n<r)e[i=arguments[n]]=a(e,t,t[i]);return e},d3.ascending=function(e,t){return e<t?-1:e>t?1:e>=t?0:NaN},d3.descending=function(e,t){return t<e?-1:t>e?1:t>=e?0:NaN},d3.mean=function(e,t){var n=e.length,r,i=0,s=-1,o=0;if(arguments.length===1)while(++s<n)f(r=e[s])&&(i+=(r-i)/++o);else while(++s<n)f(r=t.call(e,e[s],s))&&(i+=(r-i)/++o);return o?i:undefined},d3.median=function(e,t){return arguments.length>1&&(e=e.map(t)),e=e.filter(f),e.length?d3.quantile(e.sort(d3.ascending),.5):undefined},d3.min=function(e,t){var n=-1,r=e.length,i,s;if(arguments.length===1){while(++n<r&&((i=e[n])==null||i!=i))i=undefined;while(++n<r)(s=e[n])!=null&&i>s&&(i=s)}else{while(++n<r&&((i=t.call(e,e[n],n))==null||i!=i))i=undefined;while(++n<r)(s=t.call(e,e[n],n))!=null&&i>s&&(i=s)}return i},d3.max=function(e,t){var n=-1,r=e.length,i,s;if(arguments.length===1){while(++n<r&&((i=e[n])==null||i!=i))i=undefined;while(++n<r)(s=e[n])!=null&&s>i&&(i=s)}else{while(++n<r&&((i=t.call(e,e[n],n))==null||i!=i))i=undefined;while(++n<r)(s=t.call(e,e[n],n))!=null&&s>i&&(i=s)}return i},d3.extent=function(e,t){var n=-1,r=e.length,i,s,o;if(arguments.length===1){while(++n<r&&((i=o=e[n])==null||i!=i))i=o=undefined;while(++n<r)(s=e[n])!=null&&(i>s&&(i=s),o<s&&(o=s))}else{while(++n<r&&((i=o=t.call(e,e[n],n))==null||i!=i))i=undefined;while(++n<r)(s=t.call(e,e[n],n))!=null&&(i>s&&(i=s),o<s&&(o=s))}return[i,o]},d3.random={normal:function(e,t){var n=arguments.length;return n<2&&(t=1),n<1&&(e=0),function(){var n,r,i;do n=Math.random()*2-1,r=Math.random()*2-1,i=n*n+r*r;while(!i||i>1);return e+t*n*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(e,t){var n=arguments.length;n<2&&(t=1),n<1&&(e=0);var r=d3.random.normal();return function(){return Math.exp(e+t*r())}},irwinHall:function(e){return function(){for(var t=0,n=0;n<e;n++)t+=Math.random();return t/e}}},d3.sum=function(e,t){var n=0,r=e.length,i,s=-1;if(arguments.length===1)while(++s<r)isNaN(i=+e[s])||(n+=i);else while(++s<r)isNaN(i=+t.call(e,e[s],s))||(n+=i);return n},d3.quantile=function(e,t){var n=(e.length-1)*t+1,r=Math.floor(n),i=e[r-1],s=n-r;return s?i+s*(e[r]-i):i},d3.transpose=function(e){return d3.zip.apply(d3,e)},d3.zip=function(){if(!(i=arguments.length))return[];for(var e=-1,t=d3.min(arguments,l),n=new Array(t);++e<t;)for(var r=-1,i,s=n[e]=new Array(i);++r<i;)s[r]=arguments[r][e];return n},d3.bisector=function(e){return{left:function(t,n,r,i){arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);while(r<i){var s=r+i>>>1;e.call(t,t[s],s)<n?r=s+1:i=s}return r},right:function(t,n,r,i){arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);while(r<i){var s=r+i>>>1;n<e.call(t,t[s],s)?i=s:r=s+1}return r}}};var Zi=d3.bisector(function(e){return e});d3.bisectLeft=Zi.left,d3.bisect=d3.bisectRight=Zi.right,d3.first=function(e,t){var n=0,r=e.length,i=e[0],s;arguments.length===1&&(t=d3.ascending);while(++n<r)t.call(e,i,s=e[n])>0&&(i=s);return i},d3.last=function(e,t){var n=0,r=e.length,i=e[0],s;arguments.length===1&&(t=d3.ascending);while(++n<r)t.call(e,i,s=e[n])<=0&&(i=s);return i},d3.nest=function(){function e(t,s){if(s>=i.length)return u?u.call(n,t):o?t.sort(o):t;var a=-1,f=t.length,l=i[s++],c,h,p=new r,d,v={};while(++a<f)(d=p.get(c=l(h=t[a])))?d.push(h):p.set(c,[h]);return p.forEach(function(t,n){v[t]=e(n,s)}),v}function t(e,n){if(n>=i.length)return e;var r=[],o=s[n++],u;for(u in e)r.push({key:u,values:t(e[u],n)});return o&&r.sort(function(e,t){return o(e.key,t.key)}),r}var n={},i=[],s=[],o,u;return n.map=function(t){return e(t,0)},n.entries=function(n){return t(e(n,0),0)},n.key=function(e){return i.push(e),n},n.sortKeys=function(e){return s[i.length-1]=e,n},n.sortValues=function(e){return o=e,n},n.rollup=function(e){return u=e,n},n},d3.keys=function(e){var t=[];for(var n in e)t.push(n);return t},d3.values=function(e){var t=[];for(var n in e)t.push(e[n]);return t},d3.entries=function(e){var t=[];for(var n in e)t.push({key:n,value:e[n]});return t},d3.permute=function(e,t){var n=[],r=-1,i=t.length;while(++r<i)n[r]=e[t[r]];return n},d3.merge=function(e){return Array.prototype.concat.apply([],e)},d3.split=function(e,t){var n=[],r=[],i,s=-1,o=e.length;arguments.length<2&&(t=c);while(++s<o)t.call(r,i=e[s],s)?r=[]:(r.length||n.push(r),r.push(i));return n},d3.range=function(e,t,n){arguments.length<3&&(n=1,arguments.length<2&&(t=e,e=0));if((t-e)/n===Infinity)throw new Error("infinite range");var r=[],i=p(Math.abs(n)),s=-1,o;e*=i,t*=i,n*=i;if(n<0)while((o=e+n*++s)>t)r.push(o/i);else while((o=e+n*++s)<t)r.push(o/i);return r},d3.requote=function(e){return e.replace(es,"\\$&")};var es=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;d3.round=function(e,t){return t?Math.round(e*(t=Math.pow(10,t)))/t:Math.round(e)},d3.xhr=function(e,t,n){var r=new XMLHttpRequest;arguments.length<3?(n=t,t=null):t&&r.overrideMimeType&&r.overrideMimeType(t),r.open("GET",e,!0),t&&r.setRequestHeader("Accept",t),r.onreadystatechange=function(){if(r.readyState===4){var e=r.status;n(!e&&r.response||e>=200&&e<300||e===304?r:null)}},r.send(null)},d3.text=function(e,t,n){function r(e){n(e&&e.responseText)}arguments.length<3&&(n=t,t=null),d3.xhr(e,t,r)},d3.json=function(e,t){d3.text(e,"application/json",function(e){t(e?JSON.parse(e):null)})},d3.html=function(e,t){d3.text(e,"text/html",function(e){if(e!=null){var n=document.createRange();n.selectNode(document.body),e=n.createContextualFragment(e)}t(e)})},d3.xml=function(e,t,n){function r(e){n(e&&e.responseXML)}arguments.length<3&&(n=t,t=null),d3.xhr(e,t,r)};var ts={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};d3.ns={prefix:ts,qualify:function(e){var t=e.indexOf(":"),n=e;return t>=0&&(n=e.substring(0,t),e=e.substring(t+1)),ts.hasOwnProperty(n)?{space:ts[n],local:e}:e}},d3.dispatch=function(){var e=new d,t=-1,n=arguments.length;while(++t<n)e[arguments[t]]=v(e);return e},d.prototype.on=function(e,t){var n=e.indexOf("."),r="";return n>0&&(r=e.substring(n+1),e=e.substring(0,n)),arguments.length<2?this[e].on(r):this[e].on(r,t)},d3.format=function(e){var t=ns.exec(e),n=t[1]||" ",r=t[3]||"",i=t[5],s=+t[6],o=t[7],u=t[8],a=t[9],f=1,l="",c=!1;u&&(u=+u.substring(1)),i&&(n="0",o&&(s-=Math.floor((s-1)/4)));switch(a){case"n":o=!0,a="g";break;case"%":f=100,l="%",a="f";break;case"p":f=100,l="%",a="r";break;case"d":c=!0,u=0;break;case"s":f=-1,a="r"}return a=="r"&&!u&&(a="g"),a=rs.get(a)||g,function(e){if(c&&e%1)return"";var t=e<0&&(e=-e)?"-":r;if(f<0){var h=d3.formatPrefix(e,u);e=h.scale(e),l=h.symbol}else e*=f;e=a(e,u);if(i){var p=e.length+t.length;p<s&&(e=(new Array(s-p+1)).join(n)+e),o&&(e=y(e)),e=t+e}else{o&&(e=y(e)),e=t+e;var p=e.length;p<s&&(e=(new Array(s-p+1)).join(n)+e)}return e+l}};var ns=/(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,rs=d3.map({g:function(e,t){return e.toPrecision(t)},e:function(e,t){return e.toExponential(t)},f:function(e,t){return e.toFixed(t)},r:function(e,t){return d3.round(e,t=m(e,t)).toFixed(Math.max(0,Math.min(20,t)))}}),is=["y","z","a","f","p","n","μ","m","","k","M","G","T","P","E","Z","Y"].map(b);d3.formatPrefix=function(e,t){var n=0;return e&&(e<0&&(e*=-1),t&&(e=d3.round(e,m(e,t))),n=1+Math.floor(1e-12+Math.log(e)/Math.LN10),n=Math.max(-24,Math.min(24,Math.floor((n<=0?n+1:n-1)/3)*3))),is[8+n/3]};var ss=T(2),os=T(3),us=function(){return x},as=d3.map({linear:us,poly:T,quad:function(){return ss},cubic:function(){return os},sin:function(){return N},exp:function(){return C},circle:function(){return k},elastic:L,back:A,bounce:function(){return O}}),fs=d3.map({"in":x,out:E,"in-out":S,"out-in":function(e){return S(E(e))}});d3.ease=function(e){var t=e.indexOf("-"),n=t>=0?e.substring(0,t):e,r=t>=0?e.substring(t+1):"in";return n=as.get(n)||us,r=fs.get(r)||x,w(r(n.apply(null,Array.prototype.slice.call(arguments,1))))},d3.event=null,d3.transform=function(e){var t=document.createElementNS(d3.ns.prefix.svg,"g");return(d3.transform=function(e){t.setAttribute("transform",e);var n=t.transform.baseVal.consolidate();return new P(n?n.matrix:cs)})(e)},P.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var ls=180/Math.PI,cs={a:1,b:0,c:0,d:1,e:0,f:0};d3.interpolate=function(e,t){var n=d3.interpolators.length,r;while(--n>=0&&!(r=d3.interpolators[n](e,t)));return r},d3.interpolateNumber=function(e,t){return t-=e,function(n){return e+t*n}},d3.interpolateRound=function(e,t){return t-=e,function(n){return Math.round(e+t*n)}},d3.interpolateString=function(e,t){var n,r,i,s=0,o=0,u=[],a=[],f,l;hs.lastIndex=0;for(r=0;n=hs.exec(t);++r)n.index&&u.push(t.substring(s,o=n.index)),a.push({i:u.length,x:n[0]}),u.push(null),s=hs.lastIndex;s<t.length&&u.push(t.substring(s));for(r=0,f=a.length;(n=hs.exec(e))&&r<f;++r){l=a[r];if(l.x==n[0]){if(l.i)if(u[l.i+1]==null){u[l.i-1]+=l.x,u.splice(l.i,1);for(i=r+1;i<f;++i)a[i].i--}else{u[l.i-1]+=l.x+u[l.i+1],u.splice(l.i,2);for(i=r+1;i<f;++i)a[i].i-=2}else if(u[l.i+1]==null)u[l.i]=l.x;else{u[l.i]=l.x+u[l.i+1],u.splice(l.i+1,1);for(i=r+1;i<f;++i)a[i].i--}a.splice(r,1),f--,r--}else l.x=d3.interpolateNumber(parseFloat(n[0]),parseFloat(l.x))}while(r<f)l=a.pop(),u[l.i+1]==null?u[l.i]=l.x:(u[l.i]=l.x+u[l.i+1],u.splice(l.i+1,1)),f--;return u.length===1?u[0]==null?a[0].x:function(){return t}:function(e){for(r=0;r<f;++r)u[(l=a[r]).i]=l.x(e);return u.join("")}},d3.interpolateTransform=function(e,t){var n=[],r=[],i,s=d3.transform(e),o=d3.transform(t),u=s.translate,a=o.translate,f=s.rotate,l=o.rotate,c=s.skew,h=o.skew,p=s.scale,d=o.scale;return u[0]!=a[0]||u[1]!=a[1]?(n.push("translate(",null,",",null,")"),r.push({i:1,x:d3.interpolateNumber(u[0],a[0])},{i:3,x:d3.interpolateNumber(u[1],a[1])})):a[0]||a[1]?n.push("translate("+a+")"):n.push(""),f!=l?(f-l>180?l+=360:l-f>180&&(f+=360),r.push({i:n.push(n.pop()+"rotate(",null,")")-2,x:d3.interpolateNumber(f,l)})):l&&n.push(n.pop()+"rotate("+l+")"),c!=h?r.push({i:n.push(n.pop()+"skewX(",null,")")-2,x:d3.interpolateNumber(c,h)}):h&&n.push(n.pop()+"skewX("+h+")"),p[0]!=d[0]||p[1]!=d[1]?(i=n.push(n.pop()+"scale(",null,",",null,")"),r.push({i:i-4,x:d3.interpolateNumber(p[0],d[0])},{i:i-2,x:d3.interpolateNumber(p[1],d[1])})):(d[0]!=1||d[1]!=1)&&n.push(n.pop()+"scale("+d+")"),i=r.length,function(e){var t=-1,s;while(++t<i)n[(s=r[t]).i]=s.x(e);return n.join("")}},d3.interpolateRgb=function(e,t){e=d3.rgb(e),t=d3.rgb(t);var n=e.r,r=e.g,i=e.b,s=t.r-n,o=t.g-r,u=t.b-i;return function(e){return"#"+W(Math.round(n+s*e))+W(Math.round(r+o*e))+W(Math.round(i+u*e))}},d3.interpolateHsl=function(e,t){e=d3.hsl(e),t=d3.hsl(t);var n=e.h,r=e.s,i=e.l,s=t.h-n,o=t.s-r,u=t.l-i;return s>180?s-=360:s<-180&&(s+=360),function(e){return Y(n+s*e,r+o*e,i+u*e)+""}},d3.interpolateLab=function(e,t){e=d3.lab(e),t=d3.lab(t);var n=e.l,r=e.a,i=e.b,s=t.l-n,o=t.a-r,u=t.b-i;return function(e){return it(n+s*e,r+o*e,i+u*e)+""}},d3.interpolateHcl=function(e,t){e=d3.hcl(e),t=d3.hcl(t);var n=e.h,r=e.c,i=e.l,s=t.h-n,o=t.c-r,u=t.l-i;return s>180?s-=360:s<-180&&(s+=360),function(e){return tt(n+s*e,r+o*e,i+u*e)+""}},d3.interpolateArray=function(e,t){var n=[],r=[],i=e.length,s=t.length,o=Math.min(e.length,t.length),u;for(u=0;u<o;++u)n.push(d3.interpolate(e[u],t[u]));for(;u<i;++u)r[u]=e[u];for(;u<s;++u)r[u]=t[u];return function(e){for(u=0;u<o;++u)r[u]=n[u](e);return r}},d3.interpolateObject=function(e,t){var n={},r={},i;for(i in e)i in t?n[i]=F(i)(e[i],t[i]):r[i]=e[i];for(i in t)i in e||(r[i]=t[i]);return function(e){for(i in n)r[i]=n[i](e);return r}};var hs=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;d3.interpolators=[d3.interpolateObject,function(e,t){return t instanceof Array&&d3.interpolateArray(e,t)},function(e,t){return(typeof e=="string"||typeof t=="string")&&d3.interpolateString(e+"",t+"")},function(e,t){return(typeof t=="string"?ds.has(t)||/^(#|rgb\(|hsl\()/.test(t):t instanceof R)&&d3.interpolateRgb(e,t)},function(e,t){return!isNaN(e=+e)&&!isNaN(t=+t)&&d3.interpolateNumber(e,t)}],R.prototype.toString=function(){return this.rgb()+""},d3.rgb=function(e,t,n){return arguments.length===1?e instanceof z?U(e.r,e.g,e.b):X(""+e,U,Y):U(~~e,~~t,~~n)};var ps=z.prototype=new R;ps.brighter=function(e){e=Math.pow(.7,arguments.length?e:1);var t=this.r,n=this.g,r=this.b,i=30;return!t&&!n&&!r?U(i,i,i):(t&&t<i&&(t=i),n&&n<i&&(n=i),r&&r<i&&(r=i),U(Math.min(255,Math.floor(t/e)),Math.min(255,Math.floor(n/e)),Math.min(255,Math.floor(r/e))))},ps.darker=function(e){return e=Math.pow(.7,arguments.length?e:1),U(Math.floor(e*this.r),Math.floor(e*this.g),Math.floor(e*this.b))},ps.hsl=function(){return V(this.r,this.g,this.b)},ps.toString=function(){return"#"+W(this.r)+W(this.g)+W(this.b)};var ds=d3.map({aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"});ds.forEach(function(e,t){ds.set(e,X(t,U,Y))}),d3.hsl=function(e,t,n){return arguments.length===1?e instanceof G?Q(e.h,e.s,e.l):X(""+e,V,Q):Q(+e,+t,+n)};var vs=G.prototype=new R;vs.brighter=function(e){return e=Math.pow(.7,arguments.length?e:1),Q(this.h,this.s,this.l/e)},vs.darker=function(e){return e=Math.pow(.7,arguments.length?e:1),Q(this.h,this.s,e*this.l)},vs.rgb=function(){return Y(this.h,this.s,this.l)},d3.hcl=function(e,t,n){return arguments.length===1?e instanceof et?Z(e.h,e.c,e.l):e instanceof rt?st(e.l,e.a,e.b):st((e=$((e=d3.rgb(e)).r,e.g,e.b)).l,e.a,e.b):Z(+e,+t,+n)};var ms=et.prototype=new R;ms.brighter=function(e){return Z(this.h,this.c,Math.min(100,this.l+gs*(arguments.length?e:1)))},ms.darker=function(e){return Z(this.h,this.c,Math.max(0,this.l-gs*(arguments.length?e:1)))},ms.rgb=function(){return tt(this.h,this.c,this.l).rgb()},d3.lab=function(e,t,n){return arguments.length===1?e instanceof rt?nt(e.l,e.a,e.b):e instanceof et?tt(e.l,e.c,e.h):$((e=d3.rgb(e)).r,e.g,e.b):nt(+e,+t,+n)};var gs=18,ys=.95047,bs=1,ws=1.08883,Es=rt.prototype=new R;Es.brighter=function(e){return nt(Math.min(100,this.l+gs*(arguments.length?e:1)),this.a,this.b)},Es.darker=function(e){return nt(Math.max(0,this.l-gs*(arguments.length?e:1)),this.a,this.b)},Es.rgb=function(){return it(this.l,this.a,this.b)};var Ss=function(e,t){return t.querySelector(e)},xs=function(e,t){return t.querySelectorAll(e)},Ts=document.documentElement,Ns=Ts.matchesSelector||Ts.webkitMatchesSelector||Ts.mozMatchesSelector||Ts.msMatchesSelector||Ts.oMatchesSelector,Cs=function(e,t){return Ns.call(e,t)};typeof Sizzle=="function"&&(Ss=function(e,t){return Sizzle(e,t)[0]||null},xs=function(e,t){return Sizzle.uniqueSort(Sizzle(e,t))},Cs=Sizzle.matchesSelector);var ks=[];d3.selection=function(){return Ls},d3.selection.prototype=ks,ks.select=function(e){var t=[],n,r,i,s;typeof e!="function"&&(e=lt(e));for(var o=-1,u=this.length;++o<u;){t.push(n=[]),n.parentNode=(i=this[o]).parentNode;for(var a=-1,f=i.length;++a<f;)(s=i[a])?(n.push(r=e.call(s,s.__data__,a)),r&&"__data__"in s&&(r.__data__=s.__data__)):n.push(null)}return ft(t)},ks.selectAll=function(e){var t=[],n,r;typeof e!="function"&&(e=ct(e));for(var i=-1,s=this.length;++i<s;)for(var o=this[i],u=-1,a=o.length;++u<a;)if(r=o[u])t.push(n=Ji(e.call(r,r.__data__,u))),n.parentNode=r;return ft(t)},ks.attr=function(e,t){if(arguments.length<2){if(typeof e=="string"){var n=this.node();return e=d3.ns.qualify(e),e.local?n.getAttributeNS(e.space,e.local):n.getAttribute(e)}for(t in e)this.each(ht(t,e[t]));return this}return this.each(ht(e,t))},ks.classed=function(e,t){if(arguments.length<2){if(typeof e=="string"){var n=this.node(),r=(e=e.trim().split(/^|\s+/g)).length,i=-1;if(t=n.classList){while(++i<r)if(!t.contains(e[i]))return!1}else{t=n.className,t.baseVal!=null&&(t=t.baseVal);while(++i<r)if(!pt(e[i]).test(t))return!1}return!0}for(t in e)this.each(dt(t,e[t]));return this}return this.each(dt(e,t))},ks.style=function(e,t,n){var r=arguments.length;if(r<3){if(typeof e!="string"){r<2&&(t="");for(n in e)this.each(mt(n,e[n],t));return this}if(r<2)return window.getComputedStyle(this.node(),null).getPropertyValue(e);n=""}return this.each(mt(e,t,n))},ks.property=function(e,t){if(arguments.length<2){if(typeof e=="string")return this.node()[e];for(t in e)this.each(gt(t,e[t]));return this}return this.each(gt(e,t))},ks.text=function(e){return arguments.length<1?this.node().textContent:this.each(typeof e=="function"?function(){var t=e.apply(this,arguments);this.textContent=t==null?"":t}:e==null?function(){this.textContent=""}:function(){this.textContent=e})},ks.html=function(e){return arguments.length<1?this.node().innerHTML:this.each(typeof e=="function"?function(){var t=e.apply(this,arguments);this.innerHTML=t==null?"":t}:e==null?function(){this.innerHTML=""}:function(){this.innerHTML=e})},ks.append=function(e){function t(){return this.appendChild(document.createElementNS(this.namespaceURI,e))}function n(){return this.appendChild(document.createElementNS(e.space,e.local))}return e=d3.ns.qualify(e),this.select(e.local?n:t)},ks.insert=function(e,t){function n(){return this.insertBefore(document.createElementNS(this.namespaceURI,e),Ss(t,this))}function r(){return this.insertBefore(document.createElementNS(e.space,e.local),Ss(t,this))}return e=d3.ns.qualify(e),this.select(e.local?r:n)},ks.remove=function(){return this.each(function(){var e=this.parentNode;e&&e.removeChild(this)})},ks.data=function(e,t){function n(e,n){var i,s=e.length,o=n.length,u=Math.min(s,o),c=Math.max(s,o),h=[],p=[],d=[],v,m;if(t){var g=new r,y=[],b,w=n.length;for(i=-1;++i<s;)b=t.call(v=e[i],v.__data__,i),g.has(b)?d[w++]=v:g.set(b,v),y.push(b);for(i=-1;++i<o;)b=t.call(n,m=n[i],i),g.has(b)?(h[i]=v=g.get(b),v.__data__=m,p[i]=d[i]=null):(p[i]=yt(m),h[i]=d[i]=null),g.remove(b);for(i=-1;++i<s;)g.has(y[i])&&(d[i]=e[i])}else{for(i=-1;++i<u;)v=e[i],m=n[i],v?(v.__data__=m,h[i]=v,p[i]=d[i]=null):(p[i]=yt(m),h[i]=d[i]=null);for(;i<o;++i)p[i]=yt(n[i]),h[i]=d[i]=null;for(;i<c;++i)d[i]=e[i],p[i]=h[i]=null}p.update=h,p.parentNode=h.parentNode=d.parentNode=e.parentNode,a.push(p),f.push(h),l.push(d)}var i=-1,s=this.length,o,u;if(!arguments.length){e=new Array(s=(o=this[0]).length);while(++i<s)if(u=o[i])e[i]=u.__data__;return e}var a=xt([]),f=ft([]),l=ft([]);if(typeof e=="function")while(++i<s)n(o=this[i],e.call(o,o.parentNode.__data__,i));else while(++i<s)n(o=this[i],e);return f.enter=function(){return a},f.exit=function(){return l},f},ks.datum=ks.map=function(e){return arguments.length<1?this.property("__data__"):this.property("__data__",e)},ks.filter=function(e){var t=[],n,r,i;typeof e!="function"&&(e=bt(e));for(var s=0,o=this.length;s<o;s++){t.push(n=[]),n.parentNode=(r=this[s]).parentNode;for(var u=0,a=r.length;u<a;u++)(i=r[u])&&e.call(i,i.__data__,u)&&n.push(i)}return ft(t)},ks.order=function(){for(var e=-1,t=this.length;++e<t;)for(var n=this[e],r=n.length-1,i=n[r],s;--r>=0;)if(s=n[r])i&&i!==s.nextSibling&&i.parentNode.insertBefore(s,i),i=s;return this},ks.sort=function(e){e=wt.apply(this,arguments);for(var t=-1,n=this.length;++t<n;)this[t].sort(e);return this.order()},ks.on=function(e,t,n){var r=arguments.length;if(r<3){if(typeof e!="string"){r<2&&(t=!1);for(n in e)this.each(Et(n,e[n],t));return this}if(r<2)return(r=this.node()["__on"+e])&&r._;n=!1}return this.each(Et(e,t,n))},ks.each=function(e){return St(this,function(t,n,r){e.call(t,t.__data__,n,r)})},ks.call=function(e){return e.apply(this,(arguments[0]=this,arguments)),this},ks.empty=function(){return!this.node()},ks.node=function(e){for(var t=0,n=this.length;t<n;t++)for(var r=this[t],i=0,s=r.length;i<s;i++){var o=r[i];if(o)return o}return null},ks.transition=function(){var e=[],t,n;for(var r=-1,i=this.length;++r<i;){e.push(t=[]);for(var s=this[r],o=-1,u=s.length;++o<u;)t.push((n=s[o])?{node:n,delay:Bs,duration:js}:null)}return Tt(e,_s||++Ms,Date.now())};var Ls=ft([[document]]);Ls[0].parentNode=Ts,d3.select=function(e){return typeof e=="string"?Ls.select(e):ft([[e]])},d3.selectAll=function(e){return typeof e=="string"?Ls.selectAll(e):ft([Ji(e)])};var As=[];d3.selection.enter=xt,d3.selection.enter.prototype=As,As.append=ks.append,As.insert=ks.insert,As.empty=ks.empty,As.node=ks.node,As.select=function(e){var t=[],n,r,i,s,o;for(var u=-1,a=this.length;++u<a;){i=(s=this[u]).update,t.push(n=[]),n.parentNode=s.parentNode;for(var f=-1,l=s.length;++f<l;)(o=s[f])?(n.push(i[f]=r=e.call(s.parentNode,o.__data__,f)),r.__data__=o.__data__):n.push(null)}return ft(t)};var Os=[],Ms=0,_s=0,Ds=0,Ps=250,Hs=d3.ease("cubic-in-out"),Bs=Ds,js=Ps,Fs=Hs;Os.call=ks.call,d3.transition=function(e){return arguments.length?_s?e.transition():e:Ls.transition()},d3.transition.prototype=Os,Os.select=function(e){var t=[],n,r,i;typeof e!="function"&&(e=lt(e));for(var s=-1,o=this.length;++s<o;){t.push(n=[]);for(var u=this[s],a=-1,f=u.length;++a<f;)(i=u[a])&&(r=e.call(i.node,i.node.__data__,a))?("__data__"in i.node&&(r.__data__=i.node.__data__),n.push({node:r,delay:i.delay,duration:i.duration})):n.push(null)}return Tt(t,this.id,this.time).ease(this.ease())},Os.selectAll=function(e){var t=[],n,r,i;typeof e!="function"&&(e=ct(e));for(var s=-1,o=this.length;++s<o;)for(var u=this[s],a=-1,f=u.length;++a<f;)if(i=u[a]){r=e.call(i.node,i.node.__data__,a),t.push(n=[]);for(var l=-1,c=r.length;++l<c;)n.push({node:r[l],delay:i.delay,duration:i.duration})}return Tt(t,this.id,this.time).ease(this.ease())},Os.filter=function(e){var t=[],n,r,i;typeof e!="function"&&(e=bt(e));for(var s=0,o=this.length;s<o;s++){t.push(n=[]);for(var r=this[s],u=0,a=r.length;u<a;u++)(i=r[u])&&e.call(i.node,i.node.__data__,u)&&n.push(i)}return Tt(t,this.id,this.time).ease(this.ease())},Os.attr=function(e,t){if(arguments.length<2){for(t in e)this.attrTween(t,kt(e[t],t));return this}return this.attrTween(e,kt(t,e))},Os.attrTween=function(e,t){function n(e,n){var r=t.call(this,e,n,this.getAttribute(i));return r===Is?(this.removeAttribute(i),null):r&&function(e){this.setAttribute(i,r(e))}}function r(e,n){var r=t.call(this,e,n,this.getAttributeNS(i.space,i.local));return r===Is?(this.removeAttributeNS(i.space,i.local),null):r&&function(e){this.setAttributeNS(i.space,i.local,r(e))}}var i=d3.ns.qualify(e);return this.tween("attr."+e,i.local?r:n)},Os.style=function(e,t,n){var r=arguments.length;if(r<3){if(typeof e!="string"){r<2&&(t="");for(n in e)this.styleTween(n,kt(e[n],n),t);return this}n=""}return this.styleTween(e,kt(t,e),n)},Os.styleTween=function(e,t,n){return arguments.length<3&&(n=""),this.tween("style."+e,function(r,i){var s=t.call(this,r,i,window.getComputedStyle(this,null).getPropertyValue(e));return s===Is?(this.style.removeProperty(e),null):s&&function(t){this.style.setProperty(e,s(t),n)}})},Os.text=function(e){return this.tween("text",function(t,n){this.textContent=typeof e=="function"?e.call(this,t,n):e})},Os.remove=function(){return this.each("end.transition",function(){var e;!this.__transition__&&(e=this.parentNode)&&e.removeChild(this)})},Os.delay=function(e){return St(this,typeof e=="function"?function(t,n,r){t.delay=e.call(t=t.node,t.__data__,n,r)|0}:(e|=0,function(t){t.delay=e}))},Os.duration=function(e){return St(this,typeof e=="function"?function(t,n,r){t.duration=Math.max(1,e.call(t=t.node,t.__data__,n,r)|0)}:(e=Math.max(1,e|0),function(t){t.duration=e}))},Os.transition=function(){return this.select(s)},d3.tween=function(e,t){function n(n,r,i){var s=e.call(this,n,r);return s==null?i!=""&&Is:i!=s&&t(i,s+"")}function r(n,r,i){return i!=e&&t(i,e)}return typeof e=="function"?n:e==null?Ct:(e+="",r)};var Is={},qs=0,Rs={},Us=null,zs,Ws;d3.timer=function(e,t,n){if(arguments.length<3){if(arguments.length<2)t=0;else if(!isFinite(t))return;n=Date.now()}var r=Rs[e.id];r&&r.callback===e?(r.then=n,r.delay=t):Rs[e.id=++qs]=Us={callback:e,then:n,delay:t,next:Us},zs||(Ws=clearTimeout(Ws),zs=1,Xs(Lt))},d3.timer.flush=function(){var e,t=Date.now(),n=Us;while(n)e=t-n.then,n.delay||(n.flush=n.callback(e)),n=n.next;At()};var Xs=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e){setTimeout
-(e,17)};d3.mouse=function(e){return Ot(e,_())};var Vs=/WebKit/.test(navigator.userAgent)?-1:0;d3.touches=function(e,t){return arguments.length<2&&(t=_().touches),t?Ji(t).map(function(t){var n=Ot(e,t);return n.identifier=t.identifier,n}):[]},d3.scale={},d3.scale.linear=function(){return Bt([0,1],[0,1],d3.interpolate,!1)},d3.scale.log=function(){return Wt(d3.scale.linear(),Xt)};var $s=d3.format(".0e");Xt.pow=function(e){return Math.pow(10,e)},Vt.pow=function(e){return-Math.pow(10,-e)},d3.scale.pow=function(){return $t(d3.scale.linear(),1)},d3.scale.sqrt=function(){return d3.scale.pow().exponent(.5)},d3.scale.ordinal=function(){return Kt([],{t:"range",a:[[]]})},d3.scale.category10=function(){return d3.scale.ordinal().range(Js)},d3.scale.category20=function(){return d3.scale.ordinal().range(Ks)},d3.scale.category20b=function(){return d3.scale.ordinal().range(Qs)},d3.scale.category20c=function(){return d3.scale.ordinal().range(Gs)};var Js=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],Ks=["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"],Qs=["#393b79","#5254a3","#6b6ecf","#9c9ede","#637939","#8ca252","#b5cf6b","#cedb9c","#8c6d31","#bd9e39","#e7ba52","#e7cb94","#843c39","#ad494a","#d6616b","#e7969c","#7b4173","#a55194","#ce6dbd","#de9ed6"],Gs=["#3182bd","#6baed6","#9ecae1","#c6dbef","#e6550d","#fd8d3c","#fdae6b","#fdd0a2","#31a354","#74c476","#a1d99b","#c7e9c0","#756bb1","#9e9ac8","#bcbddc","#dadaeb","#636363","#969696","#bdbdbd","#d9d9d9"];d3.scale.quantile=function(){return Qt([],[])},d3.scale.quantize=function(){return Gt(0,1,[0,1])},d3.scale.threshold=function(){return Yt([.5],[0,1])},d3.scale.identity=function(){return Zt([0,1])},d3.svg={},d3.svg.arc=function(){function e(){var e=t.apply(this,arguments),s=n.apply(this,arguments),o=r.apply(this,arguments)+Ys,u=i.apply(this,arguments)+Ys,a=(u<o&&(a=o,o=u,u=a),u-o),f=a<Math.PI?"0":"1",l=Math.cos(o),c=Math.sin(o),h=Math.cos(u),p=Math.sin(u);return a>=Zs?e?"M0,"+s+"A"+s+","+s+" 0 1,1 0,"+ -s+"A"+s+","+s+" 0 1,1 0,"+s+"M0,"+e+"A"+e+","+e+" 0 1,0 0,"+ -e+"A"+e+","+e+" 0 1,0 0,"+e+"Z":"M0,"+s+"A"+s+","+s+" 0 1,1 0,"+ -s+"A"+s+","+s+" 0 1,1 0,"+s+"Z":e?"M"+s*l+","+s*c+"A"+s+","+s+" 0 "+f+",1 "+s*h+","+s*p+"L"+e*h+","+e*p+"A"+e+","+e+" 0 "+f+",0 "+e*l+","+e*c+"Z":"M"+s*l+","+s*c+"A"+s+","+s+" 0 "+f+",1 "+s*h+","+s*p+"L0,0"+"Z"}var t=en,n=tn,r=nn,i=rn;return e.innerRadius=function(n){return arguments.length?(t=u(n),e):t},e.outerRadius=function(t){return arguments.length?(n=u(t),e):n},e.startAngle=function(t){return arguments.length?(r=u(t),e):r},e.endAngle=function(t){return arguments.length?(i=u(t),e):i},e.centroid=function(){var e=(t.apply(this,arguments)+n.apply(this,arguments))/2,s=(r.apply(this,arguments)+i.apply(this,arguments))/2+Ys;return[Math.cos(s)*e,Math.sin(s)*e]},e};var Ys=-Math.PI/2,Zs=2*Math.PI-1e-6;d3.svg.line=function(){return sn(i)};var eo=d3.map({linear:an,"linear-closed":fn,"step-before":ln,"step-after":cn,basis:gn,"basis-open":yn,"basis-closed":bn,bundle:wn,cardinal:dn,"cardinal-open":hn,"cardinal-closed":pn,monotone:Cn});eo.forEach(function(e,t){t.key=e,t.closed=/-closed$/.test(e)});var to=[0,2/3,1/3,0],no=[0,1/3,2/3,0],ro=[0,1/6,2/3,1/6];d3.svg.line.radial=function(){var e=sn(kn);return e.radius=e.x,delete e.x,e.angle=e.y,delete e.y,e},ln.reverse=cn,cn.reverse=ln,d3.svg.area=function(){return Ln(i)},d3.svg.area.radial=function(){var e=Ln(kn);return e.radius=e.x,delete e.x,e.innerRadius=e.x0,delete e.x0,e.outerRadius=e.x1,delete e.x1,e.angle=e.y,delete e.y,e.startAngle=e.y0,delete e.y0,e.endAngle=e.y1,delete e.y1,e},d3.svg.chord=function(){function e(e,u){var a=t(this,s,e,u),f=t(this,o,e,u);return"M"+a.p0+r(a.r,a.p1,a.a1-a.a0)+(n(a,f)?i(a.r,a.p1,a.r,a.p0):i(a.r,a.p1,f.r,f.p0)+r(f.r,f.p1,f.a1-f.a0)+i(f.r,f.p1,a.r,a.p0))+"Z"}function t(e,t,n,r){var i=t.call(e,n,r),s=a.call(e,i,r),o=f.call(e,i,r)+Ys,u=l.call(e,i,r)+Ys;return{r:s,a0:o,a1:u,p0:[s*Math.cos(o),s*Math.sin(o)],p1:[s*Math.cos(u),s*Math.sin(u)]}}function n(e,t){return e.a0==t.a0&&e.a1==t.a1}function r(e,t,n){return"A"+e+","+e+" 0 "+ +(n>Math.PI)+",1 "+t}function i(e,t,n,r){return"Q 0,0 "+r}var s=An,o=On,a=Mn,f=nn,l=rn;return e.radius=function(t){return arguments.length?(a=u(t),e):a},e.source=function(t){return arguments.length?(s=u(t),e):s},e.target=function(t){return arguments.length?(o=u(t),e):o},e.startAngle=function(t){return arguments.length?(f=u(t),e):f},e.endAngle=function(t){return arguments.length?(l=u(t),e):l},e},d3.svg.diagonal=function(){function e(e,i){var s=t.call(this,e,i),o=n.call(this,e,i),u=(s.y+o.y)/2,a=[s,{x:s.x,y:u},{x:o.x,y:u},o];return a=a.map(r),"M"+a[0]+"C"+a[1]+" "+a[2]+" "+a[3]}var t=An,n=On,r=Pn;return e.source=function(n){return arguments.length?(t=u(n),e):t},e.target=function(t){return arguments.length?(n=u(t),e):n},e.projection=function(t){return arguments.length?(r=t,e):r},e},d3.svg.diagonal.radial=function(){var e=d3.svg.diagonal(),t=Pn,n=e.projection;return e.projection=function(e){return arguments.length?n(Hn(t=e)):t},e},d3.svg.mouse=d3.mouse,d3.svg.touches=d3.touches,d3.svg.symbol=function(){function e(e,r){return(io.get(t.call(this,e,r))||Fn)(n.call(this,e,r))}var t=jn,n=Bn;return e.type=function(n){return arguments.length?(t=u(n),e):t},e.size=function(t){return arguments.length?(n=u(t),e):n},e};var io=d3.map({circle:Fn,cross:function(e){var t=Math.sqrt(e/5)/2;return"M"+ -3*t+","+ -t+"H"+ -t+"V"+ -3*t+"H"+t+"V"+ -t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+ -t+"V"+t+"H"+ -3*t+"Z"},diamond:function(e){var t=Math.sqrt(e/(2*oo)),n=t*oo;return"M0,"+ -t+"L"+n+",0"+" 0,"+t+" "+ -n+",0"+"Z"},square:function(e){var t=Math.sqrt(e)/2;return"M"+ -t+","+ -t+"L"+t+","+ -t+" "+t+","+t+" "+ -t+","+t+"Z"},"triangle-down":function(e){var t=Math.sqrt(e/so),n=t*so/2;return"M0,"+n+"L"+t+","+ -n+" "+ -t+","+ -n+"Z"},"triangle-up":function(e){var t=Math.sqrt(e/so),n=t*so/2;return"M0,"+ -n+"L"+t+","+n+" "+ -t+","+n+"Z"}});d3.svg.symbolTypes=io.keys();var so=Math.sqrt(3),oo=Math.tan(30*Math.PI/180);d3.svg.axis=function(){function e(e){e.each(function(){var e=d3.select(this),c=a==null?t.ticks?t.ticks.apply(t,u):t.domain():a,h=f==null?t.tickFormat?t.tickFormat.apply(t,u):String:f,p=Rn(t,c,l),d=e.selectAll(".minor").data(p,String),v=d.enter().insert("line","g").attr("class","tick minor").style("opacity",1e-6),m=d3.transition(d.exit()).style("opacity",1e-6).remove(),g=d3.transition(d).style("opacity",1),y=e.selectAll("g").data(c,String),b=y.enter().insert("g","path").style("opacity",1e-6),w=d3.transition(y.exit()).style("opacity",1e-6).remove(),E=d3.transition(y).style("opacity",1),S,x=Dt(t),T=e.selectAll(".domain").data([0]),N=T.enter().append("path").attr("class","domain"),C=d3.transition(T),k=t.copy(),L=this.__chart__||k;this.__chart__=k,b.append("line").attr("class","tick"),b.append("text");var A=b.select("line"),O=E.select("line"),M=y.select("text").text(h),_=b.select("text"),D=E.select("text");switch(n){case"bottom":S=In,v.attr("y2",i),g.attr("x2",0).attr("y2",i),A.attr("y2",r),_.attr("y",Math.max(r,0)+o),O.attr("x2",0).attr("y2",r),D.attr("x",0).attr("y",Math.max(r,0)+o),M.attr("dy",".71em").attr("text-anchor","middle"),C.attr("d","M"+x[0]+","+s+"V0H"+x[1]+"V"+s);break;case"top":S=In,v.attr("y2",-i),g.attr("x2",0).attr("y2",-i),A.attr("y2",-r),_.attr("y",-(Math.max(r,0)+o)),O.attr("x2",0).attr("y2",-r),D.attr("x",0).attr("y",-(Math.max(r,0)+o)),M.attr("dy","0em").attr("text-anchor","middle"),C.attr("d","M"+x[0]+","+ -s+"V0H"+x[1]+"V"+ -s);break;case"left":S=qn,v.attr("x2",-i),g.attr("x2",-i).attr("y2",0),A.attr("x2",-r),_.attr("x",-(Math.max(r,0)+o)),O.attr("x2",-r).attr("y2",0),D.attr("x",-(Math.max(r,0)+o)).attr("y",0),M.attr("dy",".32em").attr("text-anchor","end"),C.attr("d","M"+ -s+","+x[0]+"H0V"+x[1]+"H"+ -s);break;case"right":S=qn,v.attr("x2",i),g.attr("x2",i).attr("y2",0),A.attr("x2",r),_.attr("x",Math.max(r,0)+o),O.attr("x2",r).attr("y2",0),D.attr("x",Math.max(r,0)+o).attr("y",0),M.attr("dy",".32em").attr("text-anchor","start"),C.attr("d","M"+s+","+x[0]+"H0V"+x[1]+"H"+s)}if(t.ticks)b.call(S,L),E.call(S,k),w.call(S,k),v.call(S,L),g.call(S,k),m.call(S,k);else{var P=k.rangeBand()/2,H=function(e){return k(e)+P};b.call(S,H),E.call(S,H)}})}var t=d3.scale.linear(),n="bottom",r=6,i=6,s=6,o=3,u=[10],a=null,f,l=0;return e.scale=function(n){return arguments.length?(t=n,e):t},e.orient=function(t){return arguments.length?(n=t,e):n},e.ticks=function(){return arguments.length?(u=arguments,e):u},e.tickValues=function(t){return arguments.length?(a=t,e):a},e.tickFormat=function(t){return arguments.length?(f=t,e):f},e.tickSize=function(t,n,o){if(!arguments.length)return r;var u=arguments.length-1;return r=+t,i=u>1?+n:r,s=u>0?+arguments[u]:r,e},e.tickPadding=function(t){return arguments.length?(o=+t,e):o},e.tickSubdivide=function(t){return arguments.length?(l=+t,e):l},e},d3.svg.brush=function(){function e(s){s.each(function(){var s=d3.select(this),f=s.selectAll(".background").data([0]),l=s.selectAll(".extent").data([0]),c=s.selectAll(".resize").data(a,String),h;s.style("pointer-events","all").on("mousedown.brush",i).on("touchstart.brush",i),f.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),l.enter().append("rect").attr("class","extent").style("cursor","move"),c.enter().append("g").attr("class",function(e){return"resize "+e}).style("cursor",function(e){return uo[e]}).append("rect").attr("x",function(e){return/[ew]$/.test(e)?-3:null}).attr("y",function(e){return/^[ns]/.test(e)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),c.style("display",e.empty()?"none":null),c.exit().remove(),o&&(h=Dt(o),f.attr("x",h[0]).attr("width",h[1]-h[0]),n(s)),u&&(h=Dt(u),f.attr("y",h[0]).attr("height",h[1]-h[0]),r(s)),t(s)})}function t(e){e.selectAll(".resize").attr("transform",function(e){return"translate("+f[+/e$/.test(e)][0]+","+f[+/^s/.test(e)][1]+")"})}function n(e){e.select(".extent").attr("x",f[0][0]),e.selectAll(".extent,.n>rect,.s>rect").attr("width",f[1][0]-f[0][0])}function r(e){e.select(".extent").attr("y",f[0][1]),e.selectAll(".extent,.e>rect,.w>rect").attr("height",f[1][1]-f[0][1])}function i(){function i(){var e=d3.event.changedTouches;return e?d3.touches(v,e)[0]:d3.mouse(v)}function a(){d3.event.keyCode==32&&(S||(x=null,T[0]-=f[1][0],T[1]-=f[1][1],S=2),M())}function c(){d3.event.keyCode==32&&S==2&&(T[0]+=f[1][0],T[1]+=f[1][1],S=0,M())}function h(){var e=i(),s=!1;N&&(e[0]+=N[0],e[1]+=N[1]),S||(d3.event.altKey?(x||(x=[(f[0][0]+f[1][0])/2,(f[0][1]+f[1][1])/2]),T[0]=f[+(e[0]<x[0])][0],T[1]=f[+(e[1]<x[1])][1]):x=null),w&&p(e,o,0)&&(n(y),s=!0),E&&p(e,u,1)&&(r(y),s=!0),s&&(t(y),g({type:"brush",mode:S?"move":"resize"}))}function p(e,t,n){var r=Dt(t),i=r[0],s=r[1],o=T[n],u=f[1][n]-f[0][n],a,c;S&&(i-=o,s-=u+o),a=Math.max(i,Math.min(s,e[n])),S?c=(a+=o)+u:(x&&(o=Math.max(i,Math.min(s,2*x[n]-a))),o<a?(c=a,a=o):c=o);if(f[0][n]!==a||f[1][n]!==c)return l=null,f[0][n]=a,f[1][n]=c,!0}function d(){h(),y.style("pointer-events","all").selectAll(".resize").style("display",e.empty()?"none":null),d3.select("body").style("cursor",null),C.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),g({type:"brushend"}),M()}var v=this,m=d3.select(d3.event.target),g=s.of(v,arguments),y=d3.select(v),b=m.datum(),w=!/^(n|s)$/.test(b)&&o,E=!/^(e|w)$/.test(b)&&u,S=m.classed("extent"),x,T=i(),N,C=d3.select(window).on("mousemove.brush",h).on("mouseup.brush",d).on("touchmove.brush",h).on("touchend.brush",d).on("keydown.brush",a).on("keyup.brush",c);if(S)T[0]=f[0][0]-T[0],T[1]=f[0][1]-T[1];else if(b){var k=+/w$/.test(b),L=+/^n/.test(b);N=[f[1-k][0]-T[0],f[1-L][1]-T[1]],T[0]=f[k][0],T[1]=f[L][1]}else d3.event.altKey&&(x=T.slice());y.style("pointer-events","none").selectAll(".resize").style("display",null),d3.select("body").style("cursor",m.style("cursor")),g({type:"brushstart"}),h(),M()}var s=D(e,"brushstart","brush","brushend"),o=null,u=null,a=ao[0],f=[[0,0],[0,0]],l;return e.x=function(t){return arguments.length?(o=t,a=ao[!o<<1|!u],e):o},e.y=function(t){return arguments.length?(u=t,a=ao[!o<<1|!u],e):u},e.extent=function(t){var n,r,i,s,a;return arguments.length?(l=[[0,0],[0,0]],o&&(n=t[0],r=t[1],u&&(n=n[0],r=r[0]),l[0][0]=n,l[1][0]=r,o.invert&&(n=o(n),r=o(r)),r<n&&(a=n,n=r,r=a),f[0][0]=n|0,f[1][0]=r|0),u&&(i=t[0],s=t[1],o&&(i=i[1],s=s[1]),l[0][1]=i,l[1][1]=s,u.invert&&(i=u(i),s=u(s)),s<i&&(a=i,i=s,s=a),f[0][1]=i|0,f[1][1]=s|0),e):(t=l||f,o&&(n=t[0][0],r=t[1][0],l||(n=f[0][0],r=f[1][0],o.invert&&(n=o.invert(n),r=o.invert(r)),r<n&&(a=n,n=r,r=a))),u&&(i=t[0][1],s=t[1][1],l||(i=f[0][1],s=f[1][1],u.invert&&(i=u.invert(i),s=u.invert(s)),s<i&&(a=i,i=s,s=a))),o&&u?[[n,i],[r,s]]:o?[n,r]:u&&[i,s])},e.clear=function(){return l=null,f[0][0]=f[0][1]=f[1][0]=f[1][1]=0,e},e.empty=function(){return o&&f[0][0]===f[1][0]||u&&f[0][1]===f[1][1]},d3.rebind(e,s,"on")};var uo={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},ao=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]];d3.behavior={},d3.behavior.drag=function(){function e(){this.on("mousedown.drag",t).on("touchstart.drag",t)}function t(){function e(){var e=o.parentNode;return f?d3.touches(e).filter(function(e){return e.identifier===f})[0]:d3.mouse(e)}function t(){if(!o.parentNode)return i();var t=e(),n=t[0]-c[0],r=t[1]-c[1];h|=n|r,c=t,M(),u({type:"drag",x:t[0]+l[0],y:t[1]+l[1],dx:n,dy:r})}function i(){u({type:"dragend"}),h&&(M(),d3.event.target===a&&p.on("click.drag",s,!0)),p.on(f?"touchmove.drag-"+f:"mousemove.drag",null).on(f?"touchend.drag-"+f:"mouseup.drag",null)}function s(){M(),p.on("click.drag",null)}var o=this,u=n.of(o,arguments),a=d3.event.target,f=d3.event.touches&&d3.event.changedTouches[0].identifier,l,c=e(),h=0,p=d3.select(window).on(f?"touchmove.drag-"+f:"mousemove.drag",t).on(f?"touchend.drag-"+f:"mouseup.drag",i,!0);r?(l=r.apply(o,arguments),l=[l.x-c[0],l.y-c[1]]):l=[0,0],f||M(),u({type:"dragstart"})}var n=D(e,"drag","dragstart","dragend"),r=null;return e.origin=function(t){return arguments.length?(r=t,e):r},d3.rebind(e,n,"on")},d3.behavior.zoom=function(){function e(){this.on("mousedown.zoom",o).on("mousewheel.zoom",u).on("mousemove.zoom",a).on("DOMMouseScroll.zoom",u).on("dblclick.zoom",f).on("touchstart.zoom",l).on("touchmove.zoom",c).on("touchend.zoom",l)}function t(e){return[(e[0]-h[0])/d,(e[1]-h[1])/d]}function n(e){return[e[0]*d+h[0],e[1]*d+h[1]]}function r(e){d=Math.max(m[0],Math.min(m[1],e))}function i(e,t){t=n(t),h[0]+=e[0]-t[0],h[1]+=e[1]-t[1]}function s(e){b&&b.domain(y.range().map(function(e){return(e-h[0])/d}).map(y.invert)),E&&E.domain(w.range().map(function(e){return(e-h[1])/d}).map(w.invert)),d3.event.preventDefault(),e({type:"zoom",scale:d,translate:h})}function o(){function e(){f=1,i(d3.mouse(o),c),s(u)}function n(){f&&M(),l.on("mousemove.zoom",null).on("mouseup.zoom",null),f&&d3.event.target===a&&l.on("click.zoom",r,!0)}function r(){M(),l.on("click.zoom",null)}var o=this,u=g.of(o,arguments),a=d3.event.target,f=0,l=d3.select(window).on("mousemove.zoom",e).on("mouseup.zoom",n),c=t(d3.mouse(o));window.focus(),M()}function u(){p||(p=t(d3.mouse(this))),r(Math.pow(2,Un()*.002)*d),i(d3.mouse(this),p),s(g.of(this,arguments))}function a(){p=null}function f(){var e=d3.mouse(this),n=t(e);r(d3.event.shiftKey?d/2:d*2),i(e,n),s(g.of(this,arguments))}function l(){var e=d3.touches(this),n=Date.now();v=d,p={},e.forEach(function(e){p[e.identifier]=t(e)}),M();if(e.length===1){if(n-S<500){var o=e[0],u=t(e[0]);r(d*2),i(o,u),s(g.of(this,arguments))}S=n}}function c(){var e=d3.touches(this),t=e[0],n=p[t.identifier];if(o=e[1]){var o,u=p[o.identifier];t=[(t[0]+o[0])/2,(t[1]+o[1])/2],n=[(n[0]+u[0])/2,(n[1]+u[1])/2],r(d3.event.scale*v)}i(t,n),S=null,s(g.of(this,arguments))}var h=[0,0],p,d=1,v,m=lo,g=D(e,"zoom"),y,b,w,E,S;return e.translate=function(t){return arguments.length?(h=t.map(Number),e):h},e.scale=function(t){return arguments.length?(d=+t,e):d},e.scaleExtent=function(t){return arguments.length?(m=t==null?lo:t.map(Number),e):m},e.x=function(t){return arguments.length?(b=t,y=t.copy(),e):b},e.y=function(t){return arguments.length?(E=t,w=t.copy(),e):E},d3.rebind(e,g,"on")};var fo,lo=[0,Infinity];d3.layout={},d3.layout.bundle=function(){return function(e){var t=[],n=-1,r=e.length;while(++n<r)t.push(zn(e[n]));return t}},d3.layout.chord=function(){function e(){var e={},n=[],c=d3.range(o),h=[],p,d,v,m,g;r=[],i=[],p=0,m=-1;while(++m<o){d=0,g=-1;while(++g<o)d+=s[m][g];n.push(d),h.push(d3.range(o)),p+=d}a&&c.sort(function(e,t){return a(n[e],n[t])}),f&&h.forEach(function(e,t){e.sort(function(e,n){return f(s[t][e],s[t][n])})}),p=(2*Math.PI-u*o)/p,d=0,m=-1;while(++m<o){v=d,g=-1;while(++g<o){var y=c[m],b=h[y][g],w=s[y][b],E=d,S=d+=w*p;e[y+"-"+b]={index:y,subindex:b,startAngle:E,endAngle:S,value:w}}i[y]={index:y,startAngle:v,endAngle:d,value:(d-v)/p},d+=u}m=-1;while(++m<o){g=m-1;while(++g<o){var x=e[m+"-"+g],T=e[g+"-"+m];(x.value||T.value)&&r.push(x.value<T.value?{source:T,target:x}:{source:x,target:T})}}l&&t()}function t(){r.sort(function(e,t){return l((e.source.value+e.target.value)/2,(t.source.value+t.target.value)/2)})}var n={},r,i,s,o,u=0,a,f,l;return n.matrix=function(e){return arguments.length?(o=(s=e)&&s.length,r=i=null,n):s},n.padding=function(e){return arguments.length?(u=e,r=i=null,n):u},n.sortGroups=function(e){return arguments.length?(a=e,r=i=null,n):a},n.sortSubgroups=function(e){return arguments.length?(f=e,r=null,n):f},n.sortChords=function(e){return arguments.length?(l=e,r&&t(),n):l},n.chords=function(){return r||e(),r},n.groups=function(){return i||e(),i},n},d3.layout.force=function(){function e(e){return function(t,n,r,i,s){if(t.point!==e){var o=t.cx-e.x,u=t.cy-e.y,a=1/Math.sqrt(o*o+u*u);if((i-n)*a<d){var f=t.charge*a*a;return e.px-=o*f,e.py-=u*f,!0}if(t.point&&isFinite(a)){var f=t.pointCharge*a*a;e.px-=o*f,e.py-=u*f}}return!t.charge}}function t(e){e.px=d3.event.x,e.py=d3.event.y,n.resume()}var n={},r=d3.dispatch("start","tick","end"),s=[1,1],o,a,f=.9,l=Gn,c=Yn,h=-30,p=.1,d=.8,v,m=[],g=[],y,b,w;return n.tick=function(){if((a*=.99)<.005)return r.end({type:"end",alpha:a=0}),!0;var t=m.length,n=g.length,i,o,u,l,c,d,v,E,S;for(o=0;o<n;++o){u=g[o],l=u.source,c=u.target,E=c.x-l.x,S=c.y-l.y;if(d=E*E+S*S)d=a*b[o]*((d=Math.sqrt(d))-y[o])/d,E*=d,S*=d,c.x-=E*(v=l.weight/(c.weight+l.weight)),c.y-=S*v,l.x+=E*(v=1-v),l.y+=S*v}if(v=a*p){E=s[0]/2,S=s[1]/2,o=-1;if(v)while(++o<t)u=m[o],u.x+=(E-u.x)*v,u.y+=(S-u.y)*v}if(h){Qn(i=d3.geom.quadtree(m),a,w),o=-1;while(++o<t)(u=m[o]).fixed||i.visit(e(u))}o=-1;while(++o<t)u=m[o],u.fixed?(u.x=u.px,u.y=u.py):(u.x-=(u.px-(u.px=u.x))*f,u.y-=(u.py-(u.py=u.y))*f);r.tick({type:"tick",alpha:a})},n.nodes=function(e){return arguments.length?(m=e,n):m},n.links=function(e){return arguments.length?(g=e,n):g},n.size=function(e){return arguments.length?(s=e,n):s},n.linkDistance=function(e){return arguments.length?(l=u(e),n):l},n.distance=n.linkDistance,n.linkStrength=function(e){return arguments.length?(c=u(e),n):c},n.friction=function(e){return arguments.length?(f=e,n):f},n.charge=function(e){return arguments.length?(h=typeof e=="function"?e:+e,n):h},n.gravity=function(e){return arguments.length?(p=e,n):p},n.theta=function(e){return arguments.length?(d=e,n):d},n.alpha=function(e){return arguments.length?(a?e>0?a=e:a=0:e>0&&(r.start({type:"start",alpha:a=e}),d3.timer(n.tick)),n):a},n.start=function(){function e(e,n){var i=t(r),s=-1,o=i.length,u;while(++s<o)if(!isNaN(u=i[s][e]))return u;return Math.random()*n}function t(){if(!p){p=[];for(i=0;i<o;++i)p[i]=[];for(i=0;i<u;++i){var e=g[i];p[e.source.index].push(e.target),p[e.target.index].push(e.source)}}return p[r]}var r,i,o=m.length,u=g.length,a=s[0],f=s[1],p,d;for(r=0;r<o;++r)(d=m[r]).index=r,d.weight=0;y=[],b=[];for(r=0;r<u;++r)d=g[r],typeof d.source=="number"&&(d.source=m[d.source]),typeof d.target=="number"&&(d.target=m[d.target]),y[r]=l.call(this,d,r),b[r]=c.call(this,d,r),++d.source.weight,++d.target.weight;for(r=0;r<o;++r)d=m[r],isNaN(d.x)&&(d.x=e("x",a)),isNaN(d.y)&&(d.y=e("y",f)),isNaN(d.px)&&(d.px=d.x),isNaN(d.py)&&(d.py=d.y);w=[];if(typeof h=="function")for(r=0;r<o;++r)w[r]=+h.call(this,m[r],r);else for(r=0;r<o;++r)w[r]=h;return n.resume()},n.resume=function(){return n.alpha(.1)},n.stop=function(){return n.alpha(0)},n.drag=function(){o||(o=d3.behavior.drag().origin(i).on("dragstart",Vn).on("drag",t).on("dragend",$n)),this.on("mouseover.force",Jn).on("mouseout.force",Kn).call(o)},d3.rebind(n,r,"on")},d3.layout.partition=function(){function e(t,n,r,i){var s=t.children;t.x=n,t.y=t.depth*i,t.dx=r,t.dy=i;if(s&&(u=s.length)){var o=-1,u,a,f;r=t.value?r/t.value:0;while(++o<u)e(a=s[o],n,f=a.value*r,i),n+=f}}function t(e){var n=e.children,r=0;if(n&&(s=n.length)){var i=-1,s;while(++i<s)r=Math.max(r,t(n[i]))}return 1+r}function n(n,s){var o=r.call(this,n,s);return e(o[0],0,i[0],i[1]/t(o[0])),o}var r=d3.layout.hierarchy(),i=[1,1];return n.size=function(e){return arguments.length?(i=e,n):i},lr(n,r)},d3.layout.pie=function(){function e(s,o){var u=s.map(function(n,r){return+t.call(e,n,r)}),a=+(typeof r=="function"?r.apply(this,arguments):r),f=((typeof i=="function"?i.apply(this,arguments):i)-r)/d3.sum(u),l=d3.range(s.length);n!=null&&l.sort(n===co?function(e,t){return u[t]-u[e]}:function(e,t){return n(s[e],s[t])});var c=[];return l.forEach(function(e){var t;c[e]={data:s[e],value:t=u[e],startAngle:a,endAngle:a+=t*f}}),c}var t=Number,n=co,r=0,i=2*Math.PI;return e.value=function(n){return arguments.length?(t=n,e):t},e.sort=function(t){return arguments.length?(n=t,e):n},e.startAngle=function(t){return arguments.length?(r=t,e):r},e.endAngle=function(t){return arguments.length?(i=t,e):i},e};var co={};d3.layout.stack=function(){function e(i,a){var f=i.map(function(n,r){return t.call(e,n,r)}),l=f.map(function(t,n){return t.map(function(t,n){return[o.call(e,t,n),u.call(e,t,n)]})}),c=n.call(e,l,a);f=d3.permute(f,c),l=d3.permute(l,c);var h=r.call(e,l,a),p=f.length,d=f[0].length,v,m,g;for(m=0;m<d;++m){s.call(e,f[0][m],g=h[m],l[0][m][1]);for(v=1;v<p;++v)s.call(e,f[v][m],g+=l[v-1][m][1],l[v][m][1])}return i}var t=i,n=nr,r=rr,s=tr,o=Zn,u=er;return e.values=function(n){return arguments.length?(t=n,e):t},e.order=function(t){return arguments.length?(n=typeof t=="function"?t:ho.get(t)||nr,e):n},e.offset=function(t){return arguments.length?(r=typeof t=="function"?t:po.get(t)||rr,e):r},e.x=function(t){return arguments.length?(o=t,e):o},e.y=function(t){return arguments.length?(u=t,e):u},e.out=function(t){return arguments.length?(s=t,e):s},e};var ho=d3.map({"inside-out":function(e){var t=e.length,n,r,i=e.map(ir),s=e.map(sr),o=d3.range(t).sort(function(e,t){return i[e]-i[t]}),u=0,a=0,f=[],l=[];for(n=0;n<t;++n)r=o[n],u<a?(u+=s[r],f.push(r)):(a+=s[r],l.push(r));return l.reverse().concat(f)},reverse:function(e){return d3.range(e.length).reverse()},"default":nr}),po=d3.map({silhouette:function(e){var t=e.length,n=e[0].length,r=[],i=0,s,o,u,a=[];for(o=0;o<n;++o){for(s=0,u=0;s<t;s++)u+=e[s][o][1];u>i&&(i=u),r.push(u)}for(o=0;o<n;++o)a[o]=(i-r[o])/2;return a},wiggle:function(e){var t=e.length,n=e[0],r=n.length,i=0,s,o,u,a,f,l,c,h,p,d=[];d[0]=h=p=0;for(o=1;o<r;++o){for(s=0,a=0;s<t;++s)a+=e[s][o][1];for(s=0,f=0,c=n[o][0]-n[o-1][0];s<t;++s){for(u=0,l=(e[s][o][1]-e[s][o-1][1])/(2*c);u<s;++u)l+=(e[u][o][1]-e[u][o-1][1])/c;f+=l*e[s][o][1]}d[o]=h-=a?f/a*c:0,h<p&&(p=h)}for(o=0;o<r;++o)d[o]-=p;return d},expand:function(e){var t=e.length,n=e[0].length,r=1/t,i,s,o,u=[];for(s=0;s<n;++s){for(i=0,o=0;i<t;i++)o+=e[i][s][1];if(o)for(i=0;i<t;i++)e[i][s][1]/=o;else for(i=0;i<t;i++)e[i][s][1]=r}for(s=0;s<n;++s)u[s]=0;return u},zero:rr});d3.layout.histogram=function(){function e(e,s){var o=[],u=e.map(n,this),a=r.call(this,u,s),f=i.call(this,a,u,s),l,s=-1,c=u.length,h=f.length-1,p=t?1:1/c,d;while(++s<h)l=o[s]=[],l.dx=f[s+1]-(l.x=f[s]),l.y=0;if(h>0){s=-1;while(++s<c)d=u[s],d>=a[0]&&d<=a[1]&&(l=o[d3.bisect(f,d,1,h)-1],l.y+=p,l.push(e[s]))}return o}var t=!0,n=Number,r=fr,i=ur;return e.value=function(t){return arguments.length?(n=t,e):n},e.range=function(t){return arguments.length?(r=u(t),e):r},e.bins=function(t){return arguments.length?(i=typeof t=="number"?function(e){return ar(e,t)}:u(t),e):i},e.frequency=function(n){return arguments.length?(t=!!n,e):t},e},d3.layout.hierarchy=function(){function e(t,o,u){var a=i.call(n,t,o),f=vo?t:{data:t};f.depth=o,u.push(f);if(a&&(c=a.length)){var l=-1,c,h=f.children=[],p=0,d=o+1,v;while(++l<c)v=e(a[l],d,u),v.parent=f,h.push(v),p+=v.value;r&&h.sort(r),s&&(f.value=p)}else s&&(f.value=+s.call(n,t,o)||0);return f}function t(e,r){var i=e.children,o=0;if(i&&(a=i.length)){var u=-1,a,f=r+1;while(++u<a)o+=t(i[u],f)}else s&&(o=+s.call(n,vo?e:e.data,r)||0);return s&&(e.value=o),o}function n(t){var n=[];return e(t,0,n),n}var r=pr,i=cr,s=hr;return n.sort=function(e){return arguments.length?(r=e,n):r},n.children=function(e){return arguments.length?(i=e,n):i},n.value=function(e){return arguments.length?(s=e,n):s},n.revalue=function(e){return t(e,0),e},n};var vo=!1;d3.layout.pack=function(){function e(e,i){var s=t.call(this,e,i),o=s[0];o.x=0,o.y=0,Hr(o,function(e){e.r=Math.sqrt(e.value)}),Hr(o,br);var u=r[0],a=r[1],f=Math.max(2*o.r/u,2*o.r/a);if(n>0){var l=n*f/2;Hr(o,function(e){e.r+=l}),Hr(o,br),Hr(o,function(e){e.r-=l}),f=Math.max(2*o.r/u,2*o.r/a)}return Sr(o,u/2,a/2,1/f),s}var t=d3.layout.hierarchy().sort(vr),n=0,r=[1,1];return e.size=function(t){return arguments.length?(r=t,e):r},e.padding=function(t){return arguments.length?(n=+t,e):n},lr(e,t)},d3.layout.cluster=function(){function e(e,i){var s=t.call(this,e,i),o=s[0],u,a=0,f,l;Hr(o,function(e){var t=e.children;t&&t.length?(e.x=Nr(t),e.y=Tr(t)):(e.x=u?a+=n(e,u):0,e.y=0,u=e)});var c=Cr(o),h=kr(o),p=c.x-n(c,h)/2,d=h.x+n(h,c)/2;return Hr(o,function(e){e.x=(e.x-p)/(d-p)*r[0],e.y=(1-(o.y?e.y/o.y:1))*r[1]}),s}var t=d3.layout.hierarchy().sort(null).value(null),n=Lr,r=[1,1];return e.separation=function(t){return arguments.length?(n=t,e):n},e.size=function(t){return arguments.length?(r=t,e):r},lr(e,t)},d3.layout.tree=function(){function e(e,i){function s(e,t){var r=e.children,i=e._tree;if(r&&(o=r.length)){var o,a=r[0],f,l=a,c,h=-1;while(++h<o)c=r[h],s(c,f),l=u(c,f,l),f=c;Br(e);var p=.5*(a._tree.prelim+c._tree.prelim);t?(i.prelim=t._tree.prelim+n(e,t),i.mod=i.prelim-p):i.prelim=p}else t&&(i.prelim=t._tree.prelim+n(e,t))}function o(e,t){e.x=e._tree.prelim+t;var n=e.children;if(n&&(i=n.length)){var r=-1,i;t+=e._tree.mod;while(++r<i)o(n[r],t)}}function u(e,t,r){if(t){var i=e,s=e,o=t,u=e.parent.children[0],a=i._tree.mod,f=s._tree.mod,l=o._tree.mod,c=u._tree.mod,h;while(o=Or(o),i=Ar(i),o&&i)u=Ar(u),s=Or(s),s._tree.ancestor=e,h=o._tree.prelim+l-i._tree.prelim-a+n(o,i),h>0&&(jr(Fr(o,e,r),e,h),a+=h,f+=h),l+=o._tree.mod,a+=i._tree.mod,c+=u._tree.mod,f+=s._tree.mod;o&&!Or(s)&&(s._tree.thread=o,s._tree.mod+=l-f),i&&!Ar(u)&&(u._tree.thread=i,u._tree.mod+=a-c,r=e)}return r}var a=t.call(this,e,i),f=a[0];Hr(f,function(e,t){e._tree={ancestor:e,prelim:0,mod:0,change:0,shift:0,number:t?t._tree.number+1:0}}),s(f),o(f,-f._tree.prelim);var l=Mr(f,Dr),c=Mr(f,_r),h=Mr(f,Pr),p=l.x-n(l,c)/2,d=c.x+n(c,l)/2,v=h.depth||1;return Hr(f,function(e){e.x=(e.x-p)/(d-p)*r[0],e.y=e.depth/v*r[1],delete e._tree}),a}var t=d3.layout.hierarchy().sort(null).value(null),n=Lr,r=[1,1];return e.separation=function(t){return arguments.length?(n=t,e):n},e.size=function(t){return arguments.length?(r=t,e):r},lr(e,t)},d3.layout.treemap=function(){function e(e,t){var n=-1,r=e.length,i,s;while(++n<r)s=(i=e[n]).value*(t<0?0:t),i.area=isNaN(s)||s<=0?0:s}function t(n){var s=n.children;if(s&&s.length){var o=l(n),u=[],a=s.slice(),f,c=Infinity,h,p=Math.min(o.dx,o.dy),d;e(a,o.dx*o.dy/n.value),u.area=0;while((d=a.length)>0)u.push(f=a[d-1]),u.area+=f.area,(h=r(u,p))<=c?(a.pop(),c=h):(u.area-=u.pop().area,i(u,p,o,!1),p=Math.min(o.dx,o.dy),u.length=u.area=0,c=Infinity);u.length&&(i(u,p,o,!0),u.length=u.area=0),s.forEach(t)}}function n(t){var r=t.children;if(r&&r.length){var s=l(t),o=r.slice(),u,a=[];e(o,s.dx*s.dy/t.value),a.area=0;while(u=o.pop())a.push(u),a.area+=u.area,u.z!=null&&(i(a,u.z?s.dx:s.dy,s,!o.length),a.length=a.area=0);r.forEach(n)}}function r(e,t){var n=e.area,r,i=0,s=Infinity,o=-1,u=e.length;while(++o<u){if(!(r=e[o].area))continue;r<s&&(s=r),r>i&&(i=r)}return n*=n,t*=t,n?Math.max(t*i*p/n,n/(t*s*p)):Infinity}function i(e,t,n,r){var i=-1,s=e.length,o=n.x,a=n.y,f=t?u(e.area/t):0,l;if(t==n.dx){if(r||f>n.dy)f=n.dy;while(++i<s)l=e[i],l.x=o,l.y=a,l.dy=f,o+=l.dx=Math.min(n.x+n.dx-o,f?u(l.area/f):0);l.z=!0,l.dx+=n.x+n.dx-o,n.y+=f,n.dy-=f}else{if(r||f>n.dx)f=n.dx;while(++i<s)l=e[i],l.x=o,l.y=a,l.dx=f,a+=l.dy=Math.min(n.y+n.dy-a,f?u(l.area/f):0);l.z=!1,l.dy+=n.y+n.dy-a,n.x+=f,n.dx-=f}}function s(r){var i=h||o(r),s=i[0];return s.x=0,s.y=0,s.dx=a[0],s.dy=a[1],h&&o.revalue(s),e([s],s.dx*s.dy/s.value),(h?n:t)(s),c&&(h=i),i}var o=d3.layout.hierarchy(),u=Math.round,a=[1,1],f=null,l=Ir,c=!1,h,p=.5*(1+Math.sqrt(5));return s.size=function(e){return arguments.length?(a=e,s):a},s.padding=function(e){function t(t){var n=e.call(s,t,t.depth);return n==null?Ir(t):qr(t,typeof n=="number"?[n,n,n,n]:n)}function n(t){return qr(t,e)}if(!arguments.length)return f;var r;return l=(f=e)==null?Ir:(r=typeof e)==="function"?t:r==="number"?(e=[e,e,e,e],n):n,s},s.round=function(e){return arguments.length?(u=e?Math.round:Number,s):u!=Number},s.sticky=function(e){return arguments.length?(c=e,h=null,s):c},s.ratio=function(e){return arguments.length?(p=e,s):p},lr(s,o)},d3.csv=Rr(",","text/csv"),d3.tsv=Rr("	","text/tab-separated-values"),d3.geo={};var mo=Math.PI/180;d3.geo.azimuthal=function(){function e(e){var n=e[0]*mo-s,o=e[1]*mo,f=Math.cos(n),l=Math.sin(n),c=Math.cos(o),h=Math.sin(o),p=t!=="orthographic"?a*h+u*c*f:null,d,v=t==="stereographic"?1/(1+p):t==="gnomonic"?1/p:t==="equidistant"?(d=Math.acos(p),d?d/Math.sin(d):0):t==="equalarea"?Math.sqrt(2/(1+p)):1,m=v*c*l,g=v*(a*c*f-u*h);return[r*m+i[0],r*g+i[1]]}var t="orthographic",n,r=200,i=[480,250],s,o,u,a;return e.invert=function(e){var n=(e[0]-i[0])/r,o=(e[1]-i[1])/r,f=Math.sqrt(n*n+o*o),l=t==="stereographic"?2*Math.atan(f):t==="gnomonic"?Math.atan(f):t==="equidistant"?f:t==="equalarea"?2*Math.asin(.5*f):Math.asin(f),c=Math.sin(l),h=Math.cos(l);return[(s+Math.atan2(n*c,f*u*h+o*a*c))/mo,Math.asin(h*a-(f?o*c*u/f:0))/mo]},e.mode=function(n){return arguments.length?(t=n+"",e):t},e.origin=function(t){return arguments.length?(n=t,s=n[0]*mo,o=n[1]*mo,u=Math.cos(o),a=Math.sin(o),e):n},e.scale=function(t){return arguments.length?(r=+t,e):r},e.translate=function(t){return arguments.length?(i=[+t[0],+t[1]],e):i},e.origin([0,0])},d3.geo.albers=function(){function e(e){var t=u*(mo*e[0]-o),n=Math.sqrt(a-2*u*Math.sin(mo*e[1]))/u;return[i*n*Math.sin(t)+s[0],i*(n*Math.cos(t)-f)+s[1]]}function t(){var t=mo*r[0],i=mo*r[1],s=mo*n[1],l=Math.sin(t),c=Math.cos(t);return o=mo*n[0],u=.5*(l+Math.sin(i)),a=c*c+2*u*l,f=Math.sqrt(a-2*u*Math.sin(s))/u,e}var n=[-98,38],r=[29.5,45.5],i=1e3,s=[480,250],o,u,a,f;return e.invert=function(e){var t=(e[0]-s[0])/i,n=(e[1]-s[1])/i,r=f+n,l=Math.atan2(t,r),c=Math.sqrt(t*t+r*r);return[(o+l/u)/mo,Math.asin((a-c*c*u*u)/(2*u))/mo]},e.origin=function(e){return arguments.length?(n=[+e[0],+e[1]],t()):n},e.parallels=function(e){return arguments.length?(r=[+e[0],+e[1]],t()):r},e.scale=function(t){return arguments.length?(i=+t,e):i},e.translate=function(t){return arguments.length?(s=[+t[0],+t[1]],e):s},t()},d3.geo.albersUsa=function(){function e(e){var s=e[0],o=e[1];return(o>50?n:s<-140?r:o<21?i:t)(e)}var t=d3.geo.albers(),n=d3.geo.albers().origin([-160,60]).parallels([55,65]),r=d3.geo.albers().origin([-160,20]).parallels([8,18]),i=d3.geo.albers().origin([-60,10]).parallels([8,18]);return e.scale=function(s){return arguments.length?(t.scale(s),n.scale(s*.6),r.scale(s),i.scale(s*1.5),e.translate(t.translate())):t.scale()},e.translate=function(s){if(!arguments.length)return t.translate();var o=t.scale()/1e3,u=s[0],a=s[1];return t.translate(s),n.translate([u-400*o,a+170*o]),r.translate([u-190*o,a+200*o]),i.translate([u+580*o,a+430*o]),e},e.scale(t.scale())},d3.geo.bonne=function(){function e(e){var u=e[0]*mo-r,a=e[1]*mo-i;if(s){var f=o+s-a,l=u*Math.cos(a)/f;u=f*Math.sin(l),a=f*Math.cos(l)-o}else u*=Math.cos(a),a*=-1;return[t*u+n[0],t*a+n[1]]}var t=200,n=[480,250],r,i,s,o;return e.invert=function(e){var i=(e[0]-n[0])/t,u=(e[1]-n[1])/t;if(s){var a=o+u,f=Math.sqrt(i*i+a*a);u=o+s-f,i=r+f*Math.atan2(i,a)/Math.cos(u)}else u*=-1,i/=Math.cos(u);return[i/mo,u/mo]},e.parallel=function(t){return arguments.length?(o=1/Math.tan(s=t*mo),e):s/mo},e.origin=function(t){return arguments.length?(r=t[0]*mo,i=t[1]*mo,e):[r/mo,i/mo]},e.scale=function(
-n){return arguments.length?(t=+n,e):t},e.translate=function(t){return arguments.length?(n=[+t[0],+t[1]],e):n},e.origin([0,0]).parallel(45)},d3.geo.equirectangular=function(){function e(e){var r=e[0]/360,i=-e[1]/360;return[t*r+n[0],t*i+n[1]]}var t=500,n=[480,250];return e.invert=function(e){var r=(e[0]-n[0])/t,i=(e[1]-n[1])/t;return[360*r,-360*i]},e.scale=function(n){return arguments.length?(t=+n,e):t},e.translate=function(t){return arguments.length?(n=[+t[0],+t[1]],e):n},e},d3.geo.mercator=function(){function e(e){var r=e[0]/360,i=-(Math.log(Math.tan(Math.PI/4+e[1]*mo/2))/mo)/360;return[t*r+n[0],t*Math.max(-0.5,Math.min(.5,i))+n[1]]}var t=500,n=[480,250];return e.invert=function(e){var r=(e[0]-n[0])/t,i=(e[1]-n[1])/t;return[360*r,2*Math.atan(Math.exp(-360*i*mo))/mo-90]},e.scale=function(n){return arguments.length?(t=+n,e):t},e.translate=function(t){return arguments.length?(n=[+t[0],+t[1]],e):n},e},d3.geo.path=function(){function e(e,t){typeof s=="function"&&(o=zr(s.apply(this,arguments))),f(e);var n=a.length?a.join(""):null;return a=[],n}function t(e){return u(e).join(",")}function n(e){var t=i(e[0]),n=0,r=e.length;while(++n<r)t-=i(e[n]);return t}function r(e){var t=d3.geom.polygon(e[0].map(u)),n=t.area(),r=t.centroid(n<0?(n*=-1,1):-1),i=r[0],s=r[1],o=n,a=0,f=e.length;while(++a<f)t=d3.geom.polygon(e[a].map(u)),n=t.area(),r=t.centroid(n<0?(n*=-1,1):-1),i-=r[0],s-=r[1],o-=n;return[i,s,6*o]}function i(e){return Math.abs(d3.geom.polygon(e.map(u)).area())}var s=4.5,o=zr(s),u=d3.geo.albersUsa(),a=[],f=Ur({FeatureCollection:function(e){var t=e.features,n=-1,r=t.length;while(++n<r)a.push(f(t[n].geometry))},Feature:function(e){f(e.geometry)},Point:function(e){a.push("M",t(e.coordinates),o)},MultiPoint:function(e){var n=e.coordinates,r=-1,i=n.length;while(++r<i)a.push("M",t(n[r]),o)},LineString:function(e){var n=e.coordinates,r=-1,i=n.length;a.push("M");while(++r<i)a.push(t(n[r]),"L");a.pop()},MultiLineString:function(e){var n=e.coordinates,r=-1,i=n.length,s,o,u;while(++r<i){s=n[r],o=-1,u=s.length,a.push("M");while(++o<u)a.push(t(s[o]),"L");a.pop()}},Polygon:function(e){var n=e.coordinates,r=-1,i=n.length,s,o,u;while(++r<i){s=n[r],o=-1;if((u=s.length-1)>0){a.push("M");while(++o<u)a.push(t(s[o]),"L");a[a.length-1]="Z"}}},MultiPolygon:function(e){var n=e.coordinates,r=-1,i=n.length,s,o,u,f,l,c;while(++r<i){s=n[r],o=-1,u=s.length;while(++o<u){f=s[o],l=-1;if((c=f.length-1)>0){a.push("M");while(++l<c)a.push(t(f[l]),"L");a[a.length-1]="Z"}}}},GeometryCollection:function(e){var t=e.geometries,n=-1,r=t.length;while(++n<r)a.push(f(t[n]))}}),l=e.area=Ur({FeatureCollection:function(e){var t=0,n=e.features,r=-1,i=n.length;while(++r<i)t+=l(n[r]);return t},Feature:function(e){return l(e.geometry)},Polygon:function(e){return n(e.coordinates)},MultiPolygon:function(e){var t=0,r=e.coordinates,i=-1,s=r.length;while(++i<s)t+=n(r[i]);return t},GeometryCollection:function(e){var t=0,n=e.geometries,r=-1,i=n.length;while(++r<i)t+=l(n[r]);return t}},0),c=e.centroid=Ur({Feature:function(e){return c(e.geometry)},Polygon:function(e){var t=r(e.coordinates);return[t[0]/t[2],t[1]/t[2]]},MultiPolygon:function(e){var t=0,n=e.coordinates,i,s=0,o=0,u=0,a=-1,f=n.length;while(++a<f)i=r(n[a]),s+=i[0],o+=i[1],u+=i[2];return[s/u,o/u]}});return e.projection=function(t){return u=t,e},e.pointRadius=function(t){return typeof t=="function"?s=t:(s=+t,o=zr(s)),e},e},d3.geo.bounds=function(e){var t=Infinity,n=Infinity,r=-Infinity,i=-Infinity;return Wr(e,function(e,s){e<t&&(t=e),e>r&&(r=e),s<n&&(n=s),s>i&&(i=s)}),[[t,n],[r,i]]};var go={Feature:Xr,FeatureCollection:Vr,GeometryCollection:$r,LineString:Jr,MultiLineString:Kr,MultiPoint:Jr,MultiPolygon:Qr,Point:Gr,Polygon:Yr};d3.geo.circle=function(){function e(){}function t(e){return a.distance(e)<u}function n(e){var t=-1,n=e.length,i=[],s,o,f,l,c;while(++t<n)c=a.distance(f=e[t]),c<u?(o&&i.push(ni(o,f)((l-u)/(l-c))),i.push(f),s=o=null):(o=f,!s&&i.length&&(i.push(ni(i[i.length-1],o)((u-l)/(c-l))),s=o)),l=c;return s=e[0],o=i[0],o&&f[0]===s[0]&&f[1]===s[1]&&(f[0]!==o[0]||f[1]!==o[1])&&i.push(o),r(i)}function r(e){var t=0,n=e.length,r,i,s=n?[e[0]]:e,o,u=a.source();while(++t<n){o=a.source(e[t-1])(e[t]).coordinates;for(r=0,i=o.length;++r<i;)s.push(o[r])}return a.source(u),s}var s=[0,0],o=89.99,u=o*mo,a=d3.geo.greatArc().source(s).target(i);e.clip=function(e){return typeof s=="function"&&a.source(s.apply(this,arguments)),f(e)||null};var f=Ur({FeatureCollection:function(e){var t=e.features.map(f).filter(i);return t&&(e=Object.create(e),e.features=t,e)},Feature:function(e){var t=f(e.geometry);return t&&(e=Object.create(e),e.geometry=t,e)},Point:function(e){return t(e.coordinates)&&e},MultiPoint:function(e){var n=e.coordinates.filter(t);return n.length&&{type:e.type,coordinates:n}},LineString:function(e){var t=n(e.coordinates);return t.length&&(e=Object.create(e),e.coordinates=t,e)},MultiLineString:function(e){var t=e.coordinates.map(n).filter(function(e){return e.length});return t.length&&(e=Object.create(e),e.coordinates=t,e)},Polygon:function(e){var t=e.coordinates.map(n);return t[0].length&&(e=Object.create(e),e.coordinates=t,e)},MultiPolygon:function(e){var t=e.coordinates.map(function(e){return e.map(n)}).filter(function(e){return e[0].length});return t.length&&(e=Object.create(e),e.coordinates=t,e)},GeometryCollection:function(e){var t=e.geometries.map(f).filter(i);return t.length&&(e=Object.create(e),e.geometries=t,e)}});return e.origin=function(t){return arguments.length?(s=t,typeof s!="function"&&a.source(s),e):s},e.angle=function(t){return arguments.length?(u=(o=+t)*mo,e):o},d3.rebind(e,a,"precision")},d3.geo.greatArc=function(){function e(){var t=e.distance.apply(this,arguments),r=0,u=s/t,a=[n];while((r+=u)<1)a.push(o(r));return a.push(i),{type:"LineString",coordinates:a}}var t=Zr,n,r=ei,i,s=6*mo,o=ti();return e.distance=function(){return typeof t=="function"&&o.source(n=t.apply(this,arguments)),typeof r=="function"&&o.target(i=r.apply(this,arguments)),o.distance()},e.source=function(r){return arguments.length?(t=r,typeof t!="function"&&o.source(n=t),e):t},e.target=function(t){return arguments.length?(r=t,typeof r!="function"&&o.target(i=r),e):r},e.precision=function(t){return arguments.length?(s=t*mo,e):s/mo},e},d3.geo.greatCircle=d3.geo.circle,d3.geom={},d3.geom.contour=function(e,t){var n=t||ri(e),r=[],i=n[0],s=n[1],o=0,u=0,a=NaN,f=NaN,l=0;do l=0,e(i-1,s-1)&&(l+=1),e(i,s-1)&&(l+=2),e(i-1,s)&&(l+=4),e(i,s)&&(l+=8),l===6?(o=f===-1?-1:1,u=0):l===9?(o=0,u=a===1?-1:1):(o=yo[l],u=bo[l]),o!=a&&u!=f&&(r.push([i,s]),a=o,f=u),i+=o,s+=u;while(n[0]!=i||n[1]!=s);return r};var yo=[1,0,1,1,-1,0,-1,1,0,0,0,0,-1,0,-1,NaN],bo=[0,-1,0,0,0,-1,0,0,1,-1,1,1,0,-1,0,NaN];d3.geom.hull=function(e){if(e.length<3)return[];var t=e.length,n=t-1,r=[],i=[],s,o,u=0,a,f,l,c,h,p,d,v;for(s=1;s<t;++s)e[s][1]<e[u][1]?u=s:e[s][1]==e[u][1]&&(u=e[s][0]<e[u][0]?s:u);for(s=0;s<t;++s){if(s===u)continue;f=e[s][1]-e[u][1],a=e[s][0]-e[u][0],r.push({angle:Math.atan2(f,a),index:s})}r.sort(function(e,t){return e.angle-t.angle}),d=r[0].angle,p=r[0].index,h=0;for(s=1;s<n;++s)o=r[s].index,d==r[s].angle?(a=e[p][0]-e[u][0],f=e[p][1]-e[u][1],l=e[o][0]-e[u][0],c=e[o][1]-e[u][1],a*a+f*f>=l*l+c*c?r[s].index=-1:(r[h].index=-1,d=r[s].angle,h=s,p=o)):(d=r[s].angle,h=s,p=o);i.push(u);for(s=0,o=0;s<2;++o)r[o].index!==-1&&(i.push(r[o].index),s++);v=i.length;for(;o<n;++o){if(r[o].index===-1)continue;while(!ii(i[v-2],i[v-1],r[o].index,e))--v;i[v++]=r[o].index}var m=[];for(s=0;s<v;++s)m.push(e[i[s]]);return m},d3.geom.polygon=function(e){return e.area=function(){var t=0,n=e.length,r=e[n-1][0]*e[0][1],i=e[n-1][1]*e[0][0];while(++t<n)r+=e[t-1][0]*e[t][1],i+=e[t-1][1]*e[t][0];return(i-r)*.5},e.centroid=function(t){var n=-1,r=e.length,i=0,s=0,o,u=e[r-1],a;arguments.length||(t=-1/(6*e.area()));while(++n<r)o=u,u=e[n],a=o[0]*u[1]-u[0]*o[1],i+=(o[0]+u[0])*a,s+=(o[1]+u[1])*a;return[i*t,s*t]},e.clip=function(t){var n,r=-1,i=e.length,s,o,u=e[i-1],a,f,l;while(++r<i){n=t.slice(),t.length=0,a=e[r],f=n[(o=n.length)-1],s=-1;while(++s<o)l=n[s],si(l,u,a)?(si(f,u,a)||t.push(oi(f,l,u,a)),t.push(l)):si(f,u,a)&&t.push(oi(f,l,u,a)),f=l;u=a}return t},e},d3.geom.voronoi=function(e){var t=e.map(function(){return[]});return ui(e,function(e){var n,r,i,s,o,u;e.a===1&&e.b>=0?(n=e.ep.r,r=e.ep.l):(n=e.ep.l,r=e.ep.r),e.a===1?(o=n?n.y:-1e6,i=e.c-e.b*o,u=r?r.y:1e6,s=e.c-e.b*u):(i=n?n.x:-1e6,o=e.c-e.a*i,s=r?r.x:1e6,u=e.c-e.a*s);var a=[i,o],f=[s,u];t[e.region.l.index].push(a,f),t[e.region.r.index].push(a,f)}),t.map(function(t,n){var r=e[n][0],i=e[n][1];return t.forEach(function(e){e.angle=Math.atan2(e[0]-r,e[1]-i)}),t.sort(function(e,t){return e.angle-t.angle}).filter(function(e,n){return!n||e.angle-t[n-1].angle>1e-10})})};var wo={l:"r",r:"l"};d3.geom.delaunay=function(e){var t=e.map(function(){return[]}),n=[];return ui(e,function(n){t[n.region.l.index].push(e[n.region.r.index])}),t.forEach(function(t,r){var i=e[r],s=i[0],o=i[1];t.forEach(function(e){e.angle=Math.atan2(e[0]-s,e[1]-o)}),t.sort(function(e,t){return e.angle-t.angle});for(var u=0,a=t.length-1;u<a;u++)n.push([i,t[u],t[u+1]])}),n},d3.geom.quadtree=function(e,t,n,r,i){function s(e,t,n,r,i,s){if(isNaN(t.x)||isNaN(t.y))return;if(e.leaf){var u=e.point;u?Math.abs(u.x-t.x)+Math.abs(u.y-t.y)<.01?o(e,t,n,r,i,s):(e.point=null,o(e,u,n,r,i,s),o(e,t,n,r,i,s)):e.point=t}else o(e,t,n,r,i,s)}function o(e,t,n,r,i,o){var u=(n+i)*.5,a=(r+o)*.5,f=t.x>=u,l=t.y>=a,c=(l<<1)+f;e.leaf=!1,e=e.nodes[c]||(e.nodes[c]=ai()),f?n=u:i=u,l?r=a:o=a,s(e,t,n,r,i,o)}var u,a=-1,f=e.length;f&&isNaN(e[0].x)&&(e=e.map(li));if(arguments.length<5)if(arguments.length===3)i=r=n,n=t;else{t=n=Infinity,r=i=-Infinity;while(++a<f)u=e[a],u.x<t&&(t=u.x),u.y<n&&(n=u.y),u.x>r&&(r=u.x),u.y>i&&(i=u.y);var l=r-t,c=i-n;l>c?i=n+l:r=t+c}var h=ai();return h.add=function(e){s(h,e,t,n,r,i)},h.visit=function(e){fi(e,h,t,n,r,i)},e.forEach(h.add),h},d3.time={};var Eo=Date,So=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];ci.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){xo.setUTCDate.apply(this._,arguments)},setDay:function(){xo.setUTCDay.apply(this._,arguments)},setFullYear:function(){xo.setUTCFullYear.apply(this._,arguments)},setHours:function(){xo.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){xo.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){xo.setUTCMinutes.apply(this._,arguments)},setMonth:function(){xo.setUTCMonth.apply(this._,arguments)},setSeconds:function(){xo.setUTCSeconds.apply(this._,arguments)},setTime:function(){xo.setTime.apply(this._,arguments)}};var xo=Date.prototype,To="%a %b %e %H:%M:%S %Y",No="%m/%d/%y",Co="%H:%M:%S",ko=So,Lo=ko.map(hi),Ao=["January","February","March","April","May","June","July","August","September","October","November","December"],Oo=Ao.map(hi);d3.time.format=function(e){function t(t){var r=[],i=-1,s=0,o,u;while(++i<n)e.charCodeAt(i)==37&&(r.push(e.substring(s,i),(u=Ro[o=e.charAt(++i)])?u(t):o),s=i+1);return r.push(e.substring(s,i)),r.join("")}var n=e.length;return t.parse=function(t){var n={y:1900,m:0,d:1,H:0,M:0,S:0,L:0},r=pi(n,e,t,0);if(r!=t.length)return null;"p"in n&&(n.H=n.H%12+n.p*12);var i=new Eo;return i.setFullYear(n.y,n.m,n.d),i.setHours(n.H,n.M,n.S,n.L),i},t.toString=function(){return e},t};var Mo=d3.format("02d"),_o=d3.format("03d"),Do=d3.format("04d"),Po=d3.format("2d"),Ho=di(ko),Bo=di(Lo),jo=di(Ao),Fo=vi(Ao),Io=di(Oo),qo=vi(Oo),Ro={a:function(e){return Lo[e.getDay()]},A:function(e){return ko[e.getDay()]},b:function(e){return Oo[e.getMonth()]},B:function(e){return Ao[e.getMonth()]},c:d3.time.format(To),d:function(e){return Mo(e.getDate())},e:function(e){return Po(e.getDate())},H:function(e){return Mo(e.getHours())},I:function(e){return Mo(e.getHours()%12||12)},j:function(e){return _o(1+d3.time.dayOfYear(e))},L:function(e){return _o(e.getMilliseconds())},m:function(e){return Mo(e.getMonth()+1)},M:function(e){return Mo(e.getMinutes())},p:function(e){return e.getHours()>=12?"PM":"AM"},S:function(e){return Mo(e.getSeconds())},U:function(e){return Mo(d3.time.sundayOfYear(e))},w:function(e){return e.getDay()},W:function(e){return Mo(d3.time.mondayOfYear(e))},x:d3.time.format(No),X:d3.time.format(Co),y:function(e){return Mo(e.getFullYear()%100)},Y:function(e){return Do(e.getFullYear()%1e4)},Z:Di,"%":function(e){return"%"}},Uo={a:mi,A:gi,b:yi,B:bi,c:wi,d:ki,e:ki,H:Li,I:Li,L:Mi,m:Ci,M:Ai,p:_i,S:Oi,x:Ei,X:Si,y:Ti,Y:xi},zo=/^\s*\d+/,Wo=d3.map({am:0,pm:1});d3.time.format.utc=function(e){function t(e){try{Eo=ci;var t=new Eo;return t._=e,n(t)}finally{Eo=Date}}var n=d3.time.format(e);return t.parse=function(e){try{Eo=ci;var t=n.parse(e);return t&&t._}finally{Eo=Date}},t.toString=n.toString,t};var Xo=d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ");d3.time.format.iso=Date.prototype.toISOString?Pi:Xo,Pi.parse=function(e){var t=new Date(e);return isNaN(t)?null:t},Pi.toString=Xo.toString,d3.time.second=Hi(function(e){return new Eo(Math.floor(e/1e3)*1e3)},function(e,t){e.setTime(e.getTime()+Math.floor(t)*1e3)},function(e){return e.getSeconds()}),d3.time.seconds=d3.time.second.range,d3.time.seconds.utc=d3.time.second.utc.range,d3.time.minute=Hi(function(e){return new Eo(Math.floor(e/6e4)*6e4)},function(e,t){e.setTime(e.getTime()+Math.floor(t)*6e4)},function(e){return e.getMinutes()}),d3.time.minutes=d3.time.minute.range,d3.time.minutes.utc=d3.time.minute.utc.range,d3.time.hour=Hi(function(e){var t=e.getTimezoneOffset()/60;return new Eo((Math.floor(e/36e5-t)+t)*36e5)},function(e,t){e.setTime(e.getTime()+Math.floor(t)*36e5)},function(e){return e.getHours()}),d3.time.hours=d3.time.hour.range,d3.time.hours.utc=d3.time.hour.utc.range,d3.time.day=Hi(function(e){var t=new Eo(1970,0);return t.setFullYear(e.getFullYear(),e.getMonth(),e.getDate()),t},function(e,t){e.setDate(e.getDate()+t)},function(e){return e.getDate()-1}),d3.time.days=d3.time.day.range,d3.time.days.utc=d3.time.day.utc.range,d3.time.dayOfYear=function(e){var t=d3.time.year(e);return Math.floor((e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/864e5)},So.forEach(function(e,t){e=e.toLowerCase(),t=7-t;var n=d3.time[e]=Hi(function(e){return(e=d3.time.day(e)).setDate(e.getDate()-(e.getDay()+t)%7),e},function(e,t){e.setDate(e.getDate()+Math.floor(t)*7)},function(e){var n=d3.time.year(e).getDay();return Math.floor((d3.time.dayOfYear(e)+(n+t)%7)/7)-(n!==t)});d3.time[e+"s"]=n.range,d3.time[e+"s"].utc=n.utc.range,d3.time[e+"OfYear"]=function(e){var n=d3.time.year(e).getDay();return Math.floor((d3.time.dayOfYear(e)+(n+t)%7)/7)}}),d3.time.week=d3.time.sunday,d3.time.weeks=d3.time.sunday.range,d3.time.weeks.utc=d3.time.sunday.utc.range,d3.time.weekOfYear=d3.time.sundayOfYear,d3.time.month=Hi(function(e){return e=d3.time.day(e),e.setDate(1),e},function(e,t){e.setMonth(e.getMonth()+t)},function(e){return e.getMonth()}),d3.time.months=d3.time.month.range,d3.time.months.utc=d3.time.month.utc.range,d3.time.year=Hi(function(e){return e=d3.time.day(e),e.setMonth(0,1),e},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e){return e.getFullYear()}),d3.time.years=d3.time.year.range,d3.time.years.utc=d3.time.year.utc.range;var Vo=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],$o=[[d3.time.second,1],[d3.time.second,5],[d3.time.second,15],[d3.time.second,30],[d3.time.minute,1],[d3.time.minute,5],[d3.time.minute,15],[d3.time.minute,30],[d3.time.hour,1],[d3.time.hour,3],[d3.time.hour,6],[d3.time.hour,12],[d3.time.day,1],[d3.time.day,2],[d3.time.week,1],[d3.time.month,1],[d3.time.month,3],[d3.time.year,1]],Jo=[[d3.time.format("%Y"),function(e){return!0}],[d3.time.format("%B"),function(e){return e.getMonth()}],[d3.time.format("%b %d"),function(e){return e.getDate()!=1}],[d3.time.format("%a %d"),function(e){return e.getDay()&&e.getDate()!=1}],[d3.time.format("%I %p"),function(e){return e.getHours()}],[d3.time.format("%I:%M"),function(e){return e.getMinutes()}],[d3.time.format(":%S"),function(e){return e.getSeconds()}],[d3.time.format(".%L"),function(e){return e.getMilliseconds()}]],Ko=d3.scale.linear(),Qo=qi(Jo);$o.year=function(e,t){return Ko.domain(e.map(Ui)).ticks(t).map(Ri)},d3.time.scale=function(){return ji(d3.scale.linear(),$o,Qo)};var Go=$o.map(function(e){return[e[0].utc,e[1]]}),Yo=[[d3.time.format.utc("%Y"),function(e){return!0}],[d3.time.format.utc("%B"),function(e){return e.getUTCMonth()}],[d3.time.format.utc("%b %d"),function(e){return e.getUTCDate()!=1}],[d3.time.format.utc("%a %d"),function(e){return e.getUTCDay()&&e.getUTCDate()!=1}],[d3.time.format.utc("%I %p"),function(e){return e.getUTCHours()}],[d3.time.format.utc("%I:%M"),function(e){return e.getUTCMinutes()}],[d3.time.format.utc(":%S"),function(e){return e.getUTCSeconds()}],[d3.time.format.utc(".%L"),function(e){return e.getUTCMilliseconds()}]],Zo=qi(Yo);Go.year=function(e,t){return Ko.domain(e.map(Wi)).ticks(t).map(zi)},d3.time.scale.utc=function(){return ji(d3.scale.linear(),Go,Zo)}})();
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/jquery-1.8.2.min.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/jquery-1.8.2.min.js
deleted file mode 100644
index bc3fbc81b26..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/jquery-1.8.2.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! jQuery v1.8.2 jquery.com | jquery.org/license */
-(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bY(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bW.length;while(e--){b=bW[e]+c;if(b in a)return b}return d}function bZ(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function b$(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bZ(c)&&(e[f]=p._data(c,"olddisplay",cc(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b_(a,b,c){var d=bP.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function ca(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bV[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bV[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bV[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bV[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bV[e]+"Width"))||0));return f}function cb(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0||d==null){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bQ.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+ca(a,b,c||(f?"border":"content"),e)+"px"}function cc(a){if(bS[a])return bS[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cA(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cv;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cA(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cA(a,c,d,e,"*",g)),h}function cB(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cC(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cD(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cL(){try{return new a.XMLHttpRequest}catch(b){}}function cM(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cU(){return setTimeout(function(){cN=b},0),cN=p.now()}function cV(a,b){p.each(b,function(b,c){var d=(cT[b]||[]).concat(cT["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cW(a,b,c){var d,e=0,f=0,g=cS.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cN||cU(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cN||cU(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cX(k,j.opts.specialEasing);for(;e<g;e++){d=cS[e].call(j,a,k,j.opts);if(d)return d}return cV(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cX(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cY(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bZ(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cc(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cP.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cZ(a,b,c,d,e){return new cZ.prototype.init(a,b,c,d,e)}function c$(a,b){var c,d={height:a},e=0;b=b?1:0;for(;e<4;e+=2-b)c=bV[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function da(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o&&!o.call(" ")?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":(a+"").replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete")setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){var e=p.type(c);e==="function"&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&e!=="string"&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")||(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)d=p._data(g[h],a+"queueHooks"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)f.indexOf(" "+b[g]+" ")<0&&(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},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(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=b+""}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,needsContext:f&&p.expr.match.needsContext.test(f),namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,l,m,n,o=(p._data(this,"events")||{})[c.type]||[],q=o.delegateCount,r=k.call(arguments),s=!c.exclusive&&!c.namespace,t=p.event.special[c.type]||{},u=[];r[0]=c,c.delegateTarget=this;if(t.preDispatch&&t.preDispatch.call(this,c)===!1)return;if(q&&(!c.button||c.type!=="click"))for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){h={},j=[];for(d=0;d<q;d++)l=o[d],m=l.selector,h[m]===b&&(h[m]=l.needsContext?p(m,this).index(f)>=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d<u.length&&!c.isPropagationStopped();d++){i=u[d],c.currentTarget=i.elem;for(e=0;e<i.matches.length&&!c.isImmediatePropagationStopped();e++){l=i.matches[e];if(s||!c.namespace&&!l.namespace||c.namespace_re&&c.namespace_re.test(l.namespace))c.data=l.data,c.handleObj=l,g=((p.event.special[l.origType]||{}).handle||l.handler).apply(i.elem,r),g!==b&&(c.result=g,g===!1&&(c.preventDefault(),c.stopPropagation()))}}return t.postDispatch&&t.postDispatch.call(this,c),c.result},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(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),!V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length===1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.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(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h<i;h++)if(f=a[h])if(!c||c(f,d,e))g.push(f),j&&b.push(h);return g}function bl(a,b,c,d,e,f){return d&&!d[o]&&(d=bl(d)),e&&!e[o]&&(e=bl(e,f)),z(function(f,g,h,i){if(f&&e)return;var j,k,l,m=[],n=[],o=g.length,p=f||bo(b||"*",h.nodeType?[h]:h,[],f),q=a&&(f||!b)?bk(p,m,a,h,i):p,r=c?e||(f?a:o||d)?[]:g:q;c&&c(q,r,h,i);if(d){l=bk(r,n),d(l,[],h,i),j=l.length;while(j--)if(k=l[j])r[n[j]]=!(q[n[j]]=k)}if(f){j=a&&r.length;while(j--)if(k=r[j])f[m[j]]=!(g[m[j]]=k)}else r=bk(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):w.apply(g,r)})}function bm(a){var b,c,d,f=a.length,g=e.relative[a[0].type],h=g||e.relative[" "],i=g?1:0,j=bi(function(a){return a===b},h,!0),k=bi(function(a){return y.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i<f;i++)if(c=e.relative[a[i].type])m=[bi(bj(m),c)];else{c=e.filter[a[i].type].apply(null,a[i].matches);if(c[o]){d=++i;for(;d<f;d++)if(e.relative[a[d].type])break;return bl(i>1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i<d&&bm(a.slice(i,d)),d<f&&bm(a=a.slice(d)),d<f&&a.join(""))}m.push(c)}return bj(m)}function bn(a,b){var d=b.length>0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)bc(a,b[e],c,d);return c}function bp(a,b,c,d,f){var g,h,j,k,l,m=bh(a),n=m.length;if(!d&&m.length===1){h=m[0]=m[0].slice(0);if(h.length>2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;b<c;b++)if(this[b]===a)return b;return-1},z=function(a,b){return a[o]=b==null||b,a},A=function(){var a={},b=[];return z(function(c,d){return b.push(c)>e.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="<a name='"+o+"'></a><div name='"+o+"'></div>",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d<b;d+=2)a.push(d);return a}),odd:bf(function(a,b,c){for(var d=1;d<b;d+=2)a.push(d);return a}),lt:bf(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},j=s.compareDocumentPosition?function(a,b){return a===b?(k=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:function(a,b){if(a===b)return k=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,h=b.parentNode,i=g;if(g===h)return bg(a,b);if(!g)return-1;if(!h)return 1;while(i)e.unshift(i),i=i.parentNode;i=h;while(i)f.unshift(i),i=i.parentNode;c=e.length,d=f.length;for(var j=0;j<c&&j<d;j++)if(e[j]!==f[j])return bg(e[j],f[j]);return j===c?bg(a,f[j],-1):bg(e[j],b,1)},[0,0].sort(j),m=!k,bc.uniqueSort=function(a){var b,c=1;k=m,a.sort(j);if(k)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1);return a},bc.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},i=bc.compile=function(a,b){var c,d=[],e=[],f=D[o][a];if(!f){b||(b=bh(a)),c=b.length;while(c--)f=bm(b[c]),f[o]?d.push(f):e.push(f);f=D(a,bn(e,d))}return f},r.querySelectorAll&&function(){var a,b=bp,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[":focus"],f=[":active",":focus"],h=s.matchesSelector||s.mozMatchesSelector||s.webkitMatchesSelector||s.oMatchesSelector||s.msMatchesSelector;X(function(a){a.innerHTML="<select><option selected=''></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'/>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={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,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cT[c]=cT[c]||[],cT[c].unshift(b)},prefilter:function(a,b){b?cS.unshift(a):cS.push(a)}}),p.Tween=cZ,cZ.prototype={constructor:cZ,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cZ.propHooks[this.prop];return a&&a.get?a.get(this):cZ.propHooks._default.get(this)},run:function(a){var b,c=cZ.propHooks[this.prop];return this.options.duration?this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cZ.propHooks._default.set(this),this}},cZ.prototype.init.prototype=cZ.prototype,cZ.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cZ.propHooks.scrollTop=cZ.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(c$(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bZ).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cW(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cR.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:c$("show"),slideUp:c$("hide"),slideToggle:c$("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cZ.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cO&&(cO=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cO),cO=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c_=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j={top:0,left:0},k=this[0],l=k&&k.ownerDocument;if(!l)return;return(d=l.body)===k?p.offset.bodyOffset(k):(c=l.documentElement,p.contains(c,k)?(typeof k.getBoundingClientRect!="undefined"&&(j=k.getBoundingClientRect()),e=da(l),f=c.clientTop||d.clientTop||0,g=c.clientLeft||d.clientLeft||0,h=e.pageYOffset||c.scrollTop,i=e.pageXOffset||c.scrollLeft,{top:j.top+h-f,left:j.left+i-g}):j)},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window);
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/main.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/main.js
deleted file mode 100644
index 328ecd528a9..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/main.js
+++ /dev/null
@@ -1,180 +0,0 @@
-
-function setValidators() {
-	$('#MismatchesInIndexForm').bootstrapValidator({
-		fields: {
-			indexMismatch: {
-				validators: {
-					regexp: {
-						regexp: /^(([0-1]))$/i,
-						message: 'The value is not 0 or 1'
-					}
-				}
-			}
-		}
-	});
-	$('#laneRangeForm').bootstrapValidator({
-		fields: {
-			laneRange: {
-				validators: {
-					regexp: {
-						regexp: /^(([1-8]+)|([1-8]+-[1-8]+))((,(\s*)(([1-8]+)|([1-8]+-[1-8]+)))*)$/i,
-						message: 'The value is not list of valid lanes or intervals.'
-					}
-				}
-			}
-		}
-	});
-}
-
-function createVis() {
-	if (didCreateVis) return;
-	vis = d3.select("#main").append("div").attr("id", "vis");
-	didCreateVis = true;
-}
-
-function enableSubmission() {
-	$('#submitBtn').prop('disabled', false);
-}
-
-function disableSubmission() {
-	$('#submitBtn').prop('disabled', true);
-}
-
-function displayReturnedTable(data) {
-	if (data.error) {
-		console.log(data.error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-
-	var dataToShow = data.result;
-	console.log(dataToShow.rows[0][0].value);
-
-	d3.select("#progress").remove()
-	d3.select("#button-group").remove()
-
-	vis.append("p").text("");
-	// Pick all div elements of the visualization
-	vis.selectAll("div").attr("class", "alert")
-	.data(dataToShow.rows)
-	.enter()
-	.append("div")
-	.attr("class", function (row) {
-		if (row[0].value == 0 || row[0].value > 99) {
-			if(row[0].value == 100) 
-				enableSubmission();
-			if(row[0].value == 101)
-				disableSubmission();
-			return "alert alert-success";
-		}
-		return "alert alert-danger";
-	})
-	.html(function (row) {
-		return row[1].value;
-	})
-
-	var button = d3.select("#container")
-	.append("div")
-
-	button.selectAll("button")
-	.data(dataToShow.rows)
-	.enter()
-	.append("div")
-	.append("button")
-	.attr("id", function (row) {
-		return row[0].value;
-	})
-	.attr("class", function (row) {
-		if (row[0].value == 100) {
-			return "btn btn-success";
-		}
-		return "btn btn-danger";
-	})
-	//.attr("onclick", function(row) { return "callIngestionSetInvoice('" + row + "');" })
-	.text(function (row) {
-		if (row[0].value == 0) {
-			return "OK" ;
-		}
-		return "Fail";
-	});
-
-}
-
-function hideButtons(data) {
-	var buttonId = data.result.rows[0][0].value;
-	d3.select("#setInvoice").remove()
-	d3.select("#main").append("div").attr("id", "Done").append("p").text("Done " + buttonId);
-	d3.select("button#" + String(buttonId)).remove();
-}
-
-function spinner(target) {
-	var opts = {
-			lines: 13, // The number of lines to draw
-			length: 7, // The length of each line
-			width: 4, // The line thickness
-			radius: 10, // The radius of the inner circle
-			corners: 1, // Corner roundness (0..1)
-			rotate: 0, // The rotation offset
-			color: '#000', // #rgb or #rrggbb
-			speed: 1, // Rounds per second
-			trail: 60, // Afterglow percentage
-			shadow: false, // Whether to render a shadow
-			hwaccel: false, // Whether to use hardware acceleration
-			className: 'spinner', // The CSS class to assign to the spinner
-			zIndex: 2e9, // The z-index (defaults to 2000000000)
-			top: 250, // Top position relative to parent in px
-			left: 'auto' // Left position relative to parent in px
-	};
-	var spinner = new Spinner(opts).spin(target);
-}
-
-function callIngestionService(method) {
-	d3.select("#main").select("#progress").remove()
-	d3.select("#main").select("#vis").remove()
-	
-	if(method == 'startJob') {
-		$('#laneRangeForm').data('bootstrapValidator').validate() 
-		if(!$('#laneRangeForm').data('bootstrapValidator').isValid()) {
-			$('#laneRangeForm').focus();
-			return;
-		}
-	}
-	
-	didCreateVis = false;
-	dsu.server.useSession(context.getSessionId());
-	createVis()
-	
-	
-	var permIdentifier = context.getEntityIdentifier()
-	myUserId = context.getSessionId().split("-")[0]; 
-
-	var submissionParameters =
-	{
-			sampleId: permIdentifier,
-			userId : myUserId, 
-			method: method,
-			type : context.getEntityKind()
-	};
-	addProcessingParameters(submissionParameters);
-	
-	console.log(submissionParameters)
-
-	var target = document.getElementById('progress');
-	spinner(target)
-//	dsu.server.createReportFromAggregationService("DSS1", "triggerbee", submissionParameters, displayReturnedTable);
-}
-
-function addProcessingParameters(parameters) {
-	if($('#allLanes').is(':checked'))
-		parameters.laneRange = 'all';
-	else
-		parameters.laneRange = $('#laneRange').val();
-	parameters.sampleSheet = $('#sampleSheet').is(':checked');
-	parameters.failedReads = $('#failedReads').is(':checked');
-	parameters.mismatch = $('#indexMismatch').val();
-	parameters.email =$('#email').is(':checked');
-}
-
-function refresh() {
-	callIngestionService("pollJob")
-}
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis-action-deferrer.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis-action-deferrer.js
deleted file mode 100644
index ee2e8171738..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis-action-deferrer.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * A utility class for deferring an action until all of some kind of action has completed
- *
- * @argument dependencies An array of the keys for the dependencies.
- */
-
-function openbisActionDeferrer(pendingAction, dependencies) {
-	this.pendingAction = pendingAction;
-	this.dependencies = {};
-	var newme = this;
-	dependencies.forEach(function(key) {
-		newme.dependencies[key] = false;
-	});
-}
-
-/**
- * Note that a dependency completed. Execute the pending action if appropriate.
- */
-openbisActionDeferrer.prototype.dependencyCompleted = function(key) {
-	this.dependencies[key] = true;
-	var shouldExecute = true;
-	for (prop in this.dependencies) {
-		if (false == this.dependencies[prop]) {
-			shouldExecute = false;
-			break;
-		}
-	}
-	if (shouldExecute) {
-		this.pendingAction();
-	}
-}
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis-dsu.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis-dsu.js
deleted file mode 100644
index 52e7336254a..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis-dsu.js
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * openbis-dsu.js
- * OpenBIS-DSU API
- *
- * A DSU-specific API for accessing openBIS. Depends on openbis.js.
- * @author Chandrasekhar Ramakrishnan
- */
-
-/**
- * The openbis_dsu object provides a dsu-specific interface to openbis. 
- * 
- * It creates objects for projects, experiments, samples, and datasets. These objects
- * are designed to be passed on to GUI libraries (like d3). The openbis version of each
- * object is stored in the bis variable.
- * @constructor
- */
-function openbis_dsu(url, dssUrl) {
-	this.server = new openbis(url, dssUrl);
-}
-
-/**
- * Request the sequencing samples for a project
- */
-openbis_dsu.prototype.retrieveSequencingSamples = function(action)
-{	
-	var sampleCriteria = 
-	{
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				attribute : "TYPE",
-				fieldType : "ATTRIBUTE",
-				desiredValue : "ILLUMINA_SEQUENCING" 
-			} ],
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	this.server.searchForSamples(sampleCriteria, action);
-}
-
-/**
- * Get the flow lanes for a sequencing sample.
- */
-openbis_dsu.prototype.retrieveFlowLanesForSequencingSample = function(sample, action)
-{
-	var projectCode = null;
-	
-	if(sample.bis.experimentIdentifierOrNull){
-		var experimentIdentifierRegexp = /\/(.*)\/(.*)\/(.*)/g;
-		var experimentIdentifierMatch = experimentIdentifierRegexp.exec(sample.bis.experimentIdentifierOrNull);
-		projectCode = experimentIdentifierMatch[2];
-	}else{
-		action(null);
-		return;
-	}
-	
-	var experimentCriteria = 
-	{
-		targetEntityKind : "EXPERIMENT",
-		criteria : { 
-			matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				"attribute":"PROJECT",
-				"fieldType":"ATTRIBUTE",
-				"desiredValue": projectCode
-			} ]
-		}
-	};
-	
-	var parentCriteria = 
-	{
-		targetEntityKind : "SAMPLE_PARENT",
-		criteria : { 
-			matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				"attribute":"CODE",
-				"fieldType":"ATTRIBUTE",
-				"desiredValue": sample.bis.code 
-			} ]
-		}
-	};
-	
-	var sampleCriteria = 
-	{
-		subCriterias : [ experimentCriteria, parentCriteria ],
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				attribute : "TYPE",
-				fieldType : "ATTRIBUTE",
-				desiredValue : "ILLUMINA_FLOW_LANE" 
-			} ],
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	this.server.searchForSamples(sampleCriteria, action)
-}
-
-/**
- * Get all data sets connected to a sequencing sample
- */
-openbis_dsu.prototype.retrieveDataSetsForSequencingSample = function(sequencing, action)
-{
-	this.server.listDataSetsForSample(sequencing.bis, false, action);
-}
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis-login.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis-login.js
deleted file mode 100644
index 7d1ece5965c..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis-login.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * A module for configuring the login page to openBIS. It hides and shows
- * the login form and main content as necessary. It invokes a specified
- * function on successful login.
- *
- * This module assumes that the page follows the structure of our standard 
- * login page. This means that the Following elements are defined : 
- *
- *   div#login-form-div
- *     form#login-form
- *       input#username
- *       input#password
- *       button#login-button
- *   div#main
- *     button#logout-button
- * 
- * Assuming these elements are defined, this module configures their appeareance
- * and behavior.The div#main element is initially hidden until the user logs in.
- * Once logged in, the div#login-form-div element is hidden and the div#main 
- * element is made visible.
- *
- * @module openbis-login
- * @requires jquery
- */
-
-
-/**
- * Configure the login page to hide and show the login form and main content
- * as appropriate
- *
- * @param openbis The openbis facade object
- * @param onLogin The function to be called when login succeeds.
- * @function
- */
-
-function openbisLoginPage(openbis, onLogin)
-{
-	this.openbis = openbis;
-	this.onLogin = onLogin;
-}
-
-openbisLoginPage.prototype.configure = function(){
-	var loginPage = this;
-	
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		loginPage.openbis.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 loginPage.openbis.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { loginPage.onLogin(data) })
-	});
-	
-	loginPage.openbis.ifRestoredSessionActive(function(data) { loginPage.onLogin(data) });
-	
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-}
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis-request-cache.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis-request-cache.js
deleted file mode 100644
index 29c57a8145e..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis-request-cache.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Caches openBIS JSON responses into the local browser storage.
- * 
- * Once the local storage is populated with data from real 
- * server interactions, the UI development can be done offline
- * based on the cached server responses.
- * 
- * USAGE : include this script in your app *after* the openbis facade.
- * Be careful not to distribute it to your customers.
- *  
- * <script type="text/javascript" src="openbis-request-cache.js"></script>
- * 
- * To clear the cache, you can call "localStorage.clear()" in a browser console. 
- */
-
-var original_ajax_request_func = _openbisInternal.prototype.ajaxRequest;
-
-_openbisInternal.prototype.ajaxRequest = function(settings) {
-	
-	function getCacheId(settings) {
-		var methodName = settings.data['method']
-		if (methodName.toLowerCase().indexOf('authenticate') != -1) {
-			// do not store sensitive parameters information
-			// for login methods (e.g. username/password)
-			return methodName
-		} else {
-			var params = settings.data['params']
-			return methodName + '-' + JSON.stringify(params)
-		}
-	}
-	
-	var cacheId = getCacheId(settings)
-	var cachedResponse = localStorage.getItem(cacheId)
-	
-	if (cachedResponse == null) {
-		var originalCallback = settings.success
-		settings.success = function(response) {
-			localStorage.setItem(cacheId, JSON.stringify(response))
-			originalCallback(response)
-		}
-		original_ajax_request_func(settings);
-	} else {
-		// async execution after a delay of 100ms 
-		setTimeout(function() {
-			settings.success(JSON.parse(cachedResponse))	
-		}, 100)
-		
-	}
-}
-
-alert("This app includes development code. For production, do not forget to remove the reference to openbis-request-cache.js")
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis-screening.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis-screening.js
deleted file mode 100644
index a39730902bb..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis-screening.js
+++ /dev/null
@@ -1,655 +0,0 @@
-/**
- * =======================================================
- * OpenBIS screening facade internal code (DO NOT USE!!!)
- * =======================================================
- */
-
-if(typeof openbis == 'undefined' || typeof _openbisInternal == 'undefined'){
-    alert('Loading of openbis-screening.js failed - openbis.js is missing');
-}
-
-var _openbisInternalGeneric = _openbisInternal;
-
-var _openbisInternal = function(openbisUrlOrNull){
-    this.init(openbisUrlOrNull);
-}
-
-$.extend(_openbisInternal.prototype, _openbisInternalGeneric.prototype);
-
-_openbisInternal.prototype.init = function(openbisUrlOrNull){
-    _openbisInternalGeneric.prototype.init.call(this, openbisUrlOrNull);
-    this.screeningUrl = this.openbisUrl + "/rmi-screening-api-v1.json"
-}
-
-_openbisInternal.prototype.getScreeningDataStoreApiUrlForDataStoreUrl = function(dataStoreUrl){
-    return dataStoreUrl + "/rmi-datastore-server-screening-api-v1.json"
-}
-
-var _openbisGeneric = openbis;
-
-/**
- * =========================
- * OpenBIS screening facade 
- * =========================
- * 
- * The facade provides access to the following services:
- * 
- * - all services that the generic OpenBIS facade provides (see openbis.js file)
- * - ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.IScreeningApiServer
- * - ch.systemsx.cisd.openbis.dss.screening.shared.api.v1.IDssServiceRpcScreening
- * 
- */
-
-var openbis = function(openbisUrlOrNull){
-	this._internal = new _openbisInternal(openbisUrlOrNull);
-}
-
-$.extend(openbis.prototype, _openbisGeneric.prototype);
-
-/**
- * ====================================================================================
- * ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.IScreeningApiServer methods
- * ====================================================================================
- */
-
-/**
- * @see IScreeningApiServer.listPlates(String)
- * @method
- */
-openbis.prototype.listPlates = function(action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listPlates",
-                    "params" : [ this.getSession() ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listPlates(String, ExperimentIdentifier)
- * @method
- */
-openbis.prototype.listPlatesForExperiment = function(experimentIdentifier, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listPlates",
-                    "params" : [ this.getSession(), experimentIdentifier ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.getPlateMetadataList(String, List<? extends PlateIdentifier>)
- * @method
- */
-openbis.prototype.getPlateMetadataList = function(plateIdentifiers, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "getPlateMetadataList",
-                    "params" : [ this.getSession(), plateIdentifiers ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listExperiments(String)
- * @method
- */
-openbis.prototype.listAllExperiments = function(action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listExperiments",
-                    "params" : [ this.getSession() ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listExperiments(String, String)
- * @method
- */
-openbis.prototype.listExperimentsVisibleToUser = function(userId, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listExperiments",
-                    "params" : [ this.getSession(), userId ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listFeatureVectorDatasets(String, List<? extends PlateIdentifier>)
- * @method
- */
-openbis.prototype.listFeatureVectorDatasets = function(plateIdentifiers, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listFeatureVectorDatasets",
-                    "params" : [ this.getSession(), plateIdentifiers ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listImageDatasets(String, List<? extends PlateIdentifier>)
- * @method
- */
-openbis.prototype.listImageDatasets = function(plateIdentifiers, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listImageDatasets",
-                    "params" : [ this.getSession(), plateIdentifiers ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listRawImageDatasets(String, List<? extends PlateIdentifier>)
- * @method
- */
-openbis.prototype.listRawImageDatasets = function(plateIdentifiers, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listRawImageDatasets",
-                    "params" : [ this.getSession(), plateIdentifiers ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listSegmentationImageDatasets(String, List<? extends PlateIdentifier>)
- * @method
- */
-openbis.prototype.listSegmentationImageDatasets = function(plateIdentifiers, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listSegmentationImageDatasets",
-                    "params" : [ this.getSession(), plateIdentifiers ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.getDatasetIdentifiers(String, List<String>)
- * @method
- */
-openbis.prototype.getDatasetIdentifiers = function(datasetCodes, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "getDatasetIdentifiers",
-                    "params" : [ this.getSession(), datasetCodes ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listPlateWells(String, ExperimentIdentifier, MaterialIdentifier, boolean)
- * @method
- */
-openbis.prototype.listPlateWellsForExperimentAndMaterial = function(experimentIdentifer, materialIdentifier, findDatasets, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listPlateWells",
-                    "params" : [ this.getSession(), experimentIdentifer, materialIdentifier, findDatasets ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listPlateWells(String, MaterialIdentifier, boolean)
- * @method
- */
-openbis.prototype.listPlateWellsForMaterial = function(materialIdentifier, findDatasets, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listPlateWells",
-                    "params" : [ this.getSession(), materialIdentifier, findDatasets ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listPlateWells(String, PlateIdentifier)
- * @method
- */
-openbis.prototype.listPlateWells = function(plateIdentifier, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listPlateWells",
-                    "params" : [ this.getSession(), plateIdentifier ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.getWellSample(String, WellIdentifier)
- * @method
- */
-openbis.prototype.getWellSample = function(wellIdentifier, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "getWellSample",
-                    "params" : [ this.getSession(), wellIdentifier ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.getPlateSample(String, PlateIdentifier)
- * @method
- */
-openbis.prototype.getPlateSample = function(plateIdentifier, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "getPlateSample",
-                    "params" : [ this.getSession(), plateIdentifier ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listPlateMaterialMapping(String, List<PlateIdentifier>, MaterialTypeIdentifier)
- * @method
- */
-openbis.prototype.listPlateMaterialMapping = function(plateIdentifiers, materialTypeIdentifierOrNull, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listPlateMaterialMapping",
-                    "params" : [ this.getSession(), plateIdentifiers, materialTypeIdentifierOrNull ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.getExperimentImageMetadata(String, ExperimentIdentifier)
- * @method
- */
-openbis.prototype.getExperimentImageMetadata = function(experimentIdentifer, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "getExperimentImageMetadata",
-                    "params" : [ this.getSession(), experimentIdentifer ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listAvailableFeatureCodes(String, List<? extends IFeatureVectorDatasetIdentifier>)
- * @method
- */
-openbis.prototype.listAvailableFeatureCodes = function(featureDatasets, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listAvailableFeatureCodes",
-                    "params" : [ this.getSession(), featureDatasets ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listAvailableFeatures(String, List<? extends IFeatureVectorDatasetIdentifier>)
- * @method
- */
-openbis.prototype.listAvailableFeatures = function(featureDatasets, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listAvailableFeatures",
-                    "params" : [ this.getSession(), featureDatasets ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.loadFeatures(String, List<FeatureVectorDatasetReference>, List<String>)
- * @method
- */
-openbis.prototype.loadFeatures = function(featureDatasets, featureCodes, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "loadFeatures",
-                    "params" : [ this.getSession(), featureDatasets, featureCodes ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.loadFeaturesForDatasetWellReferences(String, List<FeatureVectorDatasetWellReference>, List<String>)
- * @method
- */
-openbis.prototype.loadFeaturesForDatasetWellReferences = function(datasetWellReferences, featureCodes, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "loadFeaturesForDatasetWellReferences",
-                    "params" : [ this.getSession(), datasetWellReferences, featureCodes ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.loadImagesBase64(String, List<PlateImageReference>, boolean)
- * @method
- */
-openbis.prototype.loadImagesBase64ForImageReferencesAndImageConversion = function(imageReferences, convertToPng, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "loadImagesBase64",
-                    "params" : {
-                        "sessionToken" : this.getSession(),
-                        "imageReferences" : imageReferences,
-                        "convertToPng" : convertToPng
-                    }
-            },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.loadThumbnailImagesBase64(String, List<PlateImageReference>)
- * @method
- */
-openbis.prototype.loadThumbnailImagesBase64ForImageReferences = function(imageReferences, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "loadThumbnailImagesBase64",
-                    "params" : {
-                        "sessionToken" : this.getSession(), 
-                        "imageReferences" : imageReferences 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.loadImagesBase64(String, List<PlateImageReference>, ImageSize)
- * @method
- */
-openbis.prototype.loadImagesBase64ForImageReferencesAndImageSize = function(imageReferences, size, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "loadImagesBase64",
-                    "params" : {
-                        "sessionToken" : this.getSession(), 
-                        "imageReferences" : imageReferences,
-                        "size" : size 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.loadImagesBase64(String, List<PlateImageReference>)
- * @method
- */
-openbis.prototype.loadImagesBase64ForImageReferences = function(imageReferences, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "loadImagesBase64",
-                    "params" : { 
-                        "sessionToken" : this.getSession(),
-                        "imageReferences" : imageReferences 
-                    }
-            },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.loadImagesBase64(String, List<PlateImageReference>, LoadImageConfiguration)
- * @method
- */
-openbis.prototype.loadImagesBase64ForImageReferencesAndImageConfiguration = function(imageReferences, configuration, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "loadImagesBase64",
-                    "params" : { 
-                        "sessionToken" : this.getSession(), 
-                        "imageReferences" : imageReferences, 
-                        "configuration" : configuration 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.loadImagesBase64(String, List<PlateImageReference>, ImageRepresentationFormat)
- * @method
- */
-openbis.prototype.loadImagesBase64ForImageReferencesAndImageRepresentationFormat = function(imageReferences, format, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "loadImagesBase64",
-                    "params" : {
-                        "sessionToken" : this.getSession(), 
-                        "imageReferences" : imageReferences, 
-                        "format" : format 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.loadImagesBase64(String, List<PlateImageReference>, IImageRepresentationFormatSelectionCriterion...)
- * @method
- */
-openbis.prototype.loadImagesBase64ForImageReferencesAndImageRepresentationFormatCriteria = function(imageReferences, criteria, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "loadImagesBase64",
-                    "params" : { 
-                        "sessionToken" : this.getSession(), 
-                        "imageReferences" : imageReferences, 
-                        "criteria" : criteria 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listImageMetadata(String, List<? extends IImageDatasetIdentifier>)
- * @method
- */
-openbis.prototype.listImageMetadata = function(imageDatasets, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listImageMetadata",
-                    "params" : [ this.getSession(), imageDatasets ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.listAvailableImageRepresentationFormats(String, List<? extends IDatasetIdentifier>)
- * @method
- */
-openbis.prototype.listAvailableImageRepresentationFormats = function(imageDatasets, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "listAvailableImageRepresentationFormats",
-                    "params" : [ this.getSession(), imageDatasets ] },
-            success: action
-    });
-}
-
-/**
- * @see IScreeningApiServer.loadPhysicalThumbnailsBase64(String, List<PlateImageReference>, ImageRepresentationFormat)
- * @method
- */
-openbis.prototype.loadPhysicalThumbnailsBase64ForImageReferencesAndImageRepresentationFormat = function(imageReferences, format, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.screeningUrl,
-            data: { "method" : "loadPhysicalThumbnailsBase64",
-                    "params" : [ this.getSession(), imageReferences, format ] },
-            success: action
-    });
-}
-
-/**
- * =====================================================================================
- * ch.systemsx.cisd.openbis.dss.screening.shared.api.v1.IDssServiceRpcScreening methods
- * =====================================================================================
- */
-
-/**
- * @see IDssServiceRpcScreening.loadImagesBase64(String, IDatasetIdentifier, List<WellPosition>, String, ImageSize)
- * @method
- */
-openbis.prototype.loadImagesBase64ForDataSetIdentifierAndWellPositionsAndChannelAndImageSize = function(dataSetIdentifier, wellPositions, channel, thumbnailSizeOrNull, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.getScreeningDataStoreApiUrlForDataStoreUrl(dataSetIdentifier.datastoreServerUrl),
-            data: { "method" : "loadImagesBase64",
-                    "params" : { 
-                        "sessionToken" : this.getSession(), 
-                        "dataSetIdentifier" : dataSetIdentifier, 
-                        "wellPositions" : wellPositions, 
-                        "channel" : channel, 
-                        "thumbnailSizeOrNull" : thumbnailSizeOrNull 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IDssServiceRpcScreening.loadImagesBase64(String, IDatasetIdentifier, String, ImageSize)
- * @method
- */
-openbis.prototype.loadImagesBase64ForDataSetIdentifierAndChannelAndImageSize = function(dataSetIdentifier, channel, thumbnailSizeOrNull, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.getScreeningDataStoreApiUrlForDataStoreUrl(dataSetIdentifier.datastoreServerUrl),
-            data: { "method" : "loadImagesBase64",
-                    "params" : { 
-                        "sessionToken" : this.getSession(), 
-                        "dataSetIdentifier" : dataSetIdentifier,
-                        "channel" : channel, 
-                        "thumbnailSizeOrNull" : thumbnailSizeOrNull 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IDssServiceRpcScreening.loadThumbnailImagesBase64(String, IDatasetIdentifier, List<String>)
- * @method
- */
-openbis.prototype.loadThumbnailImagesBase64ForDataSetIdentifierAndChannels = function(dataSetIdentifier, channels, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.getScreeningDataStoreApiUrlForDataStoreUrl(dataSetIdentifier.datastoreServerUrl),
-            data: { "method" : "loadThumbnailImagesBase64",
-                    "params" : { 
-                        "sessionToken" : this.getSession(), 
-                        "dataSetIdentifier" : dataSetIdentifier, 
-                        "channels" : channels 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IDssServiceRpcScreening.listPlateImageReferences(String, IDatasetIdentifier, List<WellPosition>, String)
- * @method
- */
-openbis.prototype.listPlateImageReferencesForDataSetIdentifierAndWellPositionsAndChannel = function(dataSetIdentifier, wellPositions, channel, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.getScreeningDataStoreApiUrlForDataStoreUrl(dataSetIdentifier.datastoreServerUrl),
-            data: { "method" : "listPlateImageReferences",
-                    "params" : { 
-                        "sessionToken" : this.getSession(), 
-                        "dataSetIdentifier" : dataSetIdentifier, 
-                        "wellPositions" : wellPositions, 
-                        "channel" : channel 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IDssServiceRpcScreening.listPlateImageReferences(String, IDatasetIdentifier, List<WellPosition>, List<String>)
- * @method
- */
-openbis.prototype.listPlateImageReferencesForDataSetIdentifierAndWellPositionsAndChannels = function(dataSetIdentifier, wellPositions, channels, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.getScreeningDataStoreApiUrlForDataStoreUrl(dataSetIdentifier.datastoreServerUrl),
-            data: { "method" : "listPlateImageReferences",
-                    "params" : { 
-                        "sessionToken" : this.getSession(), 
-                        "dataSetIdentifier" : dataSetIdentifier, 
-                        "wellPositions" : wellPositions, 
-                        "channels" : channels 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IDssServiceRpcScreening.listImageReferences(String, IDatasetIdentifier, String)
- * @method
- */
-openbis.prototype.listImageReferencesForDataSetIdentifierAndChannel = function(dataSetIdentifier, channel, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.getScreeningDataStoreApiUrlForDataStoreUrl(dataSetIdentifier.datastoreServerUrl),
-            data: { "method" : "listImageReferences",
-                    "params" : { 
-                        "sessionToken" : this.getSession(), 
-                        "dataSetIdentifier" : dataSetIdentifier, 
-                        "channel" : channel 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IDssServiceRpcScreening.listImageReferences(String, IDatasetIdentifier, List<String>)
- * @method
- */
-openbis.prototype.listImageReferencesForDataSetIdentifierAndChannels = function(dataSetIdentifier, channels, action) {
-    this._internal.ajaxRequest({
-            url: this._internal.getScreeningDataStoreApiUrlForDataStoreUrl(dataSetIdentifier.datastoreServerUrl),
-            data: { "method" : "listImageReferences",
-                    "params" : {
-                        "sessionToken" : this.getSession(), 
-                        "dataSetIdentifier" : dataSetIdentifier, 
-                        "channels" : channels 
-                    } 
-            },
-            success: action
-    });
-}
-
-/**
- * @see IDssServiceRpcScreening.listAvailableFeatureLists(String, IFeatureVectorDatasetIdentifier)
- * @method
- */
-openbis.prototype.listAvailableFeatureLists = function(featureVectorDataSet, action) {
-	this._internal.ajaxRequest({
-	        url: this._internal.getScreeningDataStoreApiUrlForDataStoreUrl(featureVectorDataSet.datastoreServerUrl),
-	        data: { "method" : "listAvailableFeatureLists",
- 	                params : [this.getSession(), featureVectorDataSet]
-	        },
-	        success: action
-	});
-};
-
-/**
- * @see IDssServiceRpcScreening.getFeatureList(String, IFeatureVectorDatasetIdentifier, String)
- * @method
- */
-openbis.prototype.getFeatureList = function(featureVectorDataSet, featureListCode, action) {
-	this._internal.ajaxRequest({
-	        url: this._internal.getScreeningDataStoreApiUrlForDataStoreUrl(featureVectorDataSet.datastoreServerUrl),
-	        data: { "method" : "getFeatureList",
- 	                params : [this.getSession(), featureVectorDataSet, featureListCode]
-	        },
-	        success: action
-	});
-};
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis.js
deleted file mode 100644
index f5476a74d56..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/openbis.js
+++ /dev/null
@@ -1,1987 +0,0 @@
-/**
- * =============================================
- * OpenBIS facade internal code (DO NOT USE!!!)
- * =============================================
- */
-
-if(typeof $ == 'undefined'){
-	alert('Loading of openbis.js failed - jquery.js is missing');
-}
-
-function _openbisInternal(openbisUrlOrNull){
-	this.init(openbisUrlOrNull);
-}
-
-_openbisInternal.prototype.init = function(openbisUrlOrNull){
-	this.openbisUrl = this.normalizeOpenbisUrl(openbisUrlOrNull);
-	this.generalInfoServiceUrl = this.openbisUrl + "/rmi-general-information-v1.json";
-	this.generalInfoChangingServiceUrl = this.openbisUrl + "/rmi-general-information-changing-v1.json";
-	this.queryServiceUrl = this.openbisUrl + "/rmi-query-v1.json";
-	this.webInfoServiceUrl = this.openbisUrl + "/rmi-web-information-v1.json"
-}
-
-_openbisInternal.prototype.log = function(msg){
-	if(console){
-		console.log(msg);
-	}
-}
-
-_openbisInternal.prototype.normalizeOpenbisUrl = function(openbisUrlOrNull){
-	var parts = this.parseUri(window.location);
-	
-	if(openbisUrlOrNull){
-		var openbisParts = this.parseUri(openbisUrlOrNull);
-		
-		for(openbisPartName in openbisParts){
-			var openbisPartValue = openbisParts[openbisPartName];
-			
-			if(openbisPartValue){
-				parts[openbisPartName] = openbisPartValue;
-			}
-		}
-	}
-	
-	return parts.protocol + "://" + parts.authority + "/openbis/openbis";
-}
-
-_openbisInternal.prototype.jsonRequestData = function(params) {
-	params["id"] = "1";
-	params["jsonrpc"] = "2.0";
-	return JSON.stringify(params)
-}
- 
-_openbisInternal.prototype.ajaxRequest = function(settings) {
-	settings.type = "POST";
-	settings.processData = false;
-	settings.dataType = "json";
-	settings.data = this.jsonRequestData(settings.data);
-	settings.success = this.ajaxRequestSuccess(settings.success);
-	// we call the same settings.success function for backward compatibility
-	settings.error = this.ajaxRequestError(settings.success);
-	$.ajax(settings)
-}
-
-_openbisInternal.prototype.ajaxRequestSuccess = function(action){
-	var openbisObj = this;
-	return function(response){
-		if(response.error){
-			openbisObj.log("Request failed: " + JSON.stringify(response.error));
-		}
-		if(action){
-			action(response);
-		}
-	};
-}
-
-_openbisInternal.prototype.ajaxRequestError = function(action){
-	var openbisObj = this;
-	return function(xhr, status, error){
-		openbisObj.log("Request failed: " + error);
-		if(action){
-			action({
-				"error" : "Request failed: " + error
-			});
-		}
-	};
-}
-
-// Functions for working with cookies (see http://www.quirksmode.org/js/cookies.html)
-
-_openbisInternal.prototype.createCookie = function(name,value,days) {
-	if (days) {
-		var date = new Date();
-		date.setTime(date.getTime()+(days*24*60*60*1000));
-		var expires = "; expires="+date.toGMTString();
-	}
-	else var expires = "";
-	document.cookie = name+"="+value+expires+"; path=/";
-}
-
-_openbisInternal.prototype.readCookie = function(name) {
-	var nameEQ = name + "=";
-	var ca = document.cookie.split(';');
-	for(var i=0;i < ca.length;i++) {
-		var c = ca[i];
-		while (c.charAt(0)==' ') c = c.substring(1,c.length);
-		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
-	}
-	return null;
-}
-
-_openbisInternal.prototype.eraseCookie = function(name) {
-	this.createCookie(name,"",-1);
-}
-
-// parseUri 1.2.2 (c) Steven Levithan <stevenlevithan.com> MIT License (see http://blog.stevenlevithan.com/archives/parseuri)
-
-_openbisInternal.prototype.parseUri = function(str) {
-	var options = {
-		strictMode: false,
-		key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
-		q:   {
-			name:   "queryKey",
-			parser: /(?:^|&)([^&=]*)=?([^&]*)/g
-		},
-		parser: {
-			strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
-			loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
-		}
-	};
-	
-	var	o   = options,
-		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
-		uri = {},
-		i   = 14;
-
-	while (i--) uri[o.key[i]] = m[i] || "";
-
-	uri[o.q.name] = {};
-	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
-		if ($1) uri[o.q.name][$1] = $2;
-	});
-
-	return uri;
-}
-
-_openbisInternal.prototype.listDataStores = function(action){
-	this.ajaxRequest({
-		url: this.generalInfoServiceUrl,
-		data: { "method" : "listDataStores",
-				"params" : [ this.sessionToken ] 
-		},
-		success: action
-	});
-}
-
-_openbisInternal.prototype.initDataStores = function(action){
-	var openbisInternal = this;
-	
-	if(typeof this.dataStores === "undefined"){
-		this.listDataStores(function(response){
-			if(response.result){
-				openbisInternal.dataStores = response.result;
-			}else{
-				openbisInternal.dataStores = [];
-			}
-			action();
-		});
-	}else{
-		action();
-	}
-}
-
-_openbisInternal.prototype.getDataStoreUrlForDataStoreCode = function(dataStoreCodeOrNull, action) {
-	var openbisInternal = this;
-	
-	this.initDataStores(function(){
-		if(openbisInternal.dataStores.length == 0){
-			throw "Couldn't get a data store url as there are no data stores configured.";
-		}else{
-			if(dataStoreCodeOrNull){
-				var dataStoreUrl = null;
-				$.each(openbisInternal.dataStores, function(index, dataStore){
-					if(dataStore.code == dataStoreCodeOrNull){
-						dataStoreUrl = dataStore.downloadUrl;
-					}
-				});
-				if(dataStoreUrl){
-					action(dataStoreUrl);
-				}else{
-					throw "Couldn't get a data store url because data store with " + dataStoreCodeOrNull + " code does not exist.";
-				}
-			}else{
-				if(openbisInternal.dataStores.length == 1){
-					action(openbisInternal.dataStores[0].downloadUrl);
-				}else{
-					throw "There is more than one data store configured. Please specify a data store code to get a data store url.";
-				}
-			}
-		}
-	});
-}
-
-_openbisInternal.prototype.getDataStoreUrlForDataSetCode = function(dataSetCode, action) {
-	var openbisInternal = this;
-	
-	this.initDataStores(function(){
-		if(openbisInternal.dataStores.length == 0){
-			throw "Couldn't get a data store url as there are no data stores configured.";
-		}else if(openbisInternal.dataStores.length == 1){
-			action(openbisInternal.dataStores[0].downloadUrl);
-		}else{
-			openbisInternal.ajaxRequest({
-				url: openbisInternal.generalInfoServiceUrl,
-				data: { "method" : "tryGetDataStoreBaseURL",
-						"params" : [ openbisInternal.sessionToken, dataSetCode ] 
-						},
-				success: function(response){
-					var hostUrl = response.result;
-					
-					if(hostUrl){
-						action(hostUrl + "/datastore_server");
-					}else{
-						throw "Couldn't get a data store url for a data set with " + dataSetCode + " code because the data set does not exist.";
-					}
-				}
-			 });
-		}
-	});
-}
-
-_openbisInternal.prototype.getDataStoreApiUrlForDataStoreCode = function(dataStoreCodeOrNull, action) {
-	this.getDataStoreUrlForDataStoreCode(dataStoreCodeOrNull, function(dataStoreUrl){
-		action(dataStoreUrl + "/rmi-dss-api-v1.json");
-	});
-}
-
-_openbisInternal.prototype.getDataStoreApiUrlForDataSetCode = function(dataSetCode, action) {
-	this.getDataStoreUrlForDataSetCode(dataSetCode, function(dataStoreUrl){
-		action(dataStoreUrl + "/rmi-dss-api-v1.json");
-	});
-}
-
-_openbisInternal.prototype.getDataStoreHostForDataStoreCode = function(dataStoreCodeOrNull, action) {
-	var openbisObj = this;
-	
-	this.getDataStoreUrlForDataStoreCode(dataStoreCodeOrNull, function(dataStoreUrl){
-		var parts = openbisObj.parseUri(dataStoreUrl);
-		action(parts.protocol + "://" + parts.authority);
-	});
-}
-
-/**
- * ===============
- * OpenBIS facade
- * ===============
- * 
- * The facade provides access to the following services:
- * 
- * - ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService
- * - ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationChangingService
- * - ch.systemsx.cisd.openbis.plugin.query.shared.api.v1.IQueryApiServer
- * - ch.systemsx.cisd.openbis.generic.shared.api.v1.IWebInformationService
- * - ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.IDssServiceRpcGeneric
- * 
- * @class
- * 
- */
-
-function openbis(openbisUrlOrNull) {
-	this._internal = new _openbisInternal(openbisUrlOrNull);
-}
-
-/**
- * ==================================================================================
- * ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService methods
- * ==================================================================================
- */
-
-/**
- * Log into openBIS.
- * 
- * @see IGeneralInformationService.tryToAuthenticateForAllServices(String, String)
- * @method
- */
-openbis.prototype.login = function(userId, userPassword, action) {
-	var openbisObj = this
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "tryToAuthenticateForAllServices",
-				"params" : [ userId, userPassword ] 
-				},
-		success: 
-			function(loginResponse) {
-				if(loginResponse.error){
-					alert("Login failed");
-				}else{
-					openbisObj._internal.sessionToken = loginResponse.result;
-					openbisObj.rememberSession();
-				}
-				openbisObj._internal.initDataStores(function(){
-					action(loginResponse);	
-				});
-			}
-	 });
-}
-
-/**
- * Stores the current session in a cookie. 
- *
- * @method
- */
-openbis.prototype.rememberSession = function() {
-	this._internal.createCookie('openbis', this.getSession(), 1);
-}
-
-/**
- * Removes the current session from a cookie. 
- *
- * @method
- */
-openbis.prototype.forgetSession = function() {
-	this._internal.eraseCookie('openbis');
-}
-
-/**
- * Restores the current session from a cookie.
- *
- * @method
- */
-openbis.prototype.restoreSession = function() {
-	this._internal.sessionToken = this._internal.readCookie('openbis');
-}
-
-/**
- * Sets the current session.
- *
- * @method
- */
-openbis.prototype.useSession = function(sessionToken){
-	this._internal.sessionToken = sessionToken;
-}
-
-/**
- * Returns the current session.
- * 
- * @method
- */
-openbis.prototype.getSession = function(){
-	return this._internal.sessionToken;
-}
-
-/**
- * Checks whether the current session is still active.
- *
- * @see IGeneralInformationService.isSessionActive(String)
- * @method
- */
-openbis.prototype.isSessionActive = function(action) {
-	if(this.getSession()){
-		this._internal.ajaxRequest({
-			url: this._internal.generalInfoServiceUrl,
-			data: { "method" : "isSessionActive",
-					"params" : [ this.getSession() ] 
-					},
-			success: action
-		});
-	}else{
-		action({ result : false })
-	}
-}
-
-/**
- * Restores the current session from a cookie and executes 
- * the specified action if the session is still active.
- * 
- * @see restoreSession()
- * @see isSessionActive()
- * @method
- */
-openbis.prototype.ifRestoredSessionActive = function(action) {
-	this.restoreSession();
-	this.isSessionActive(function(data) { if (data.result) action(data) });
-}
-
-/**
- * Log out of openBIS.
- * 
- * @see IGeneralInformationService.logout(String)
- * @method
- */
-openbis.prototype.logout = function(action) {
-	this.forgetSession();
-	
-	if(this.getSession()){
-		this._internal.ajaxRequest({
-			url: this._internal.generalInfoServiceUrl,
-			data: { "method" : "logout",
-					"params" : [ this.getSession() ] 
-				  },
-			success: action
-		});
-	}else if(action){
-		action({ result : null });
-	}
-}
-
-/**
- * @see IGeneralInformationService.listNamedRoleSets(String)
- * @method
- */
-openbis.prototype.listNamedRoleSets = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listNamedRoleSets",
-				"params" : [ this.getSession() ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listSpacesWithProjectsAndRoleAssignments(String, String)
- * @method
- */
-openbis.prototype.listSpacesWithProjectsAndRoleAssignments = function(databaseInstanceCodeOrNull, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listSpacesWithProjectsAndRoleAssignments",
-				"params" : [ this.getSession(),  databaseInstanceCodeOrNull ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.searchForSamples(String, SearchCriteria)
- * @method
- */
-openbis.prototype.searchForSamples = function(searchCriteria, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "searchForSamples",
-				"params" : [ this.getSession(),
-							 searchCriteria ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.searchForSamples(String, SearchCriteria, EnumSet<SampleFetchOption>)
- * @method
- */
-openbis.prototype.searchForSamplesWithFetchOptions = function(searchCriteria, fetchOptions, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { 
-				"method" : "searchForSamples",
-				"params" : [ 
-					this.getSession(),
-					searchCriteria,
-					fetchOptions ] 
-		},
-		success: action
-	 });
-}
-
-/**
- * @see IGeneralInformationService.searchForSamplesOnBehalfOfUser(String, SearchCriteria, EnumSet<SampleFetchOption>, String)
- * @method
- */
-openbis.prototype.searchForSamplesOnBehalfOfUser = function(searchCriteria, fetchOptions, userId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { 
-				"method" : "searchForSamplesOnBehalfOfUser",
-				"params" : [ 
-					this.getSession(),
-					searchCriteria,
-					fetchOptions,
-					userId ] 
-		},
-		success: action
-	 });
-}
-
-/**
- * @see IGeneralInformationService.filterSamplesVisibleToUser(String, List<Sample>, String)
- * @method
- */
-openbis.prototype.filterSamplesVisibleToUser = function(allSamples, userId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { 
-				"method" : "filterSamplesVisibleToUser",
-				"params" : [ 
-					this.getSession(),
-					allSamples,
-					userId ] 
-		},
-		success: action
-	 });
-}
-
-/**
- * @see IGeneralInformationService.listSamplesForExperiment(String, String)
- * @method
- */
-openbis.prototype.listSamplesForExperiment = function(experimentIdentifier, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listSamplesForExperiment",
-				"params" : [ this.getSession(), experimentIdentifier ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listSamplesForExperimentOnBehalfOfUser(String, String, String)
- * @method
- */
-openbis.prototype.listSamplesForExperimentOnBehalfOfUser = function(experimentIdentifier, userId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listSamplesForExperimentOnBehalfOfUser",
-				"params" : [ this.getSession(), experimentIdentifier, userId ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listDataSets(String, List<Sample>)
- * @method
- */
-openbis.prototype.listDataSetsForSamples = function(samples, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listDataSets",
-				"params" : [ this.getSession(), samples ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listExperiments(String, List<Project>, String)
- * @method
- */
-openbis.prototype.listExperiments = function(projects, experimentType, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listExperiments",
-				"params" : [ this.getSession(), projects, experimentType ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listExperimentsHavingSamples(String, List<Project>, String)
- * @method
- */
-openbis.prototype.listExperimentsHavingSamples = function(projects, experimentType, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listExperimentsHavingSamples",
-				"params" : [ this.getSession(), projects, experimentType ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listExperimentsHavingDataSets(String, List<Project>, String)
- * @method
- */
-openbis.prototype.listExperimentsHavingDataSets = function(projects, experimentType, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listExperimentsHavingDataSets",
-				"params" : [ this.getSession(), projects, experimentType ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.filterExperimentsVisibleToUser(String, List<Experiment>, String)
- * @method
- */
-openbis.prototype.filterExperimentsVisibleToUser = function(allExperiments, userId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "filterExperimentsVisibleToUser",
-				"params" : [ this.getSession(), allExperiments, userId ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listDataSetsForSample(String, Sample, boolean)
- * @method
- */
-openbis.prototype.listDataSetsForSample = function(sample, restrictToDirectlyConnected, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listDataSetsForSample",
-				"params" : [ this.getSession(), sample, restrictToDirectlyConnected ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listDataStores(String)
- * @method
- */
-openbis.prototype.listDataStores = function(action) {
-	this._internal.listDataStores(action);
-}
-
-/**
- * @see IGeneralInformationService.getDefaultPutDataStoreBaseURL(String)
- * @method
- */
-openbis.prototype.getDefaultPutDataStoreBaseURL = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "getDefaultPutDataStoreBaseURL",
-				"params" : [ this.getSession() ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.tryGetDataStoreBaseURL(String)
- * @method
- */
-openbis.prototype.tryGetDataStoreBaseURL = function(dataSetCode, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "tryGetDataStoreBaseURL",
-				"params" : [ this.getSession(), dataSetCode ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.getDataStoreBaseURLs(String, List<String>)
- * @method
- */
-openbis.prototype.getDataStoreBaseURLs = function(dataSetCodes, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "getDataStoreBaseURLs",
-				"params" : [ this.getSession(), dataSetCodes ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listDataSetTypes(String)
- * @method
- */
-openbis.prototype.listDataSetTypes = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listDataSetTypes",
-				"params" : [ this.getSession() ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listSampleTypes(String)
- * @method
- */
-openbis.prototype.listSampleTypes = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listSampleTypes",
-				"params" : [ this.getSession() ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listExperimentTypes(String)
- * @method
- */
-openbis.prototype.listExperimentTypes = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listExperimentTypes",
-				"params" : [ this.getSession() ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listVocabularies(String)
- * @method
- */
-openbis.prototype.listVocabularies = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listVocabularies",
-				"params" : [ this.getSession() ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listDataSets(String, List<Sample>, EnumSet<Connections>)
- * @method
- */
-openbis.prototype.listDataSetsForSamplesWithConnections = function(samples, connectionsToGet, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listDataSets",
-				"params" : [ this.getSession(), samples, connectionsToGet ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listDataSetsOnBehalfOfUser(String, List<Sample>, EnumSet<Connections>, String)
- * @method
- */
-openbis.prototype.listDataSetsForSamplesOnBehalfOfUser = function(samples, connectionsToGet, userId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listDataSetsOnBehalfOfUser",
-				"params" : [ this.getSession(), samples, connectionsToGet, userId ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listDataSetsForExperiments(String, List<Experiment>, EnumSet<Connections>)
- * @method
- */
-openbis.prototype.listDataSetsForExperiments = function(experiments, connectionsToGet, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listDataSetsForExperiments",
-				"params" : [ this.getSession(), experiments, connectionsToGet ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listDataSetsForExperimentsOnBehalfOfUser(String, List<Experiment>, EnumSet<Connections>, String)
- * @method
- */
-openbis.prototype.listDataSetsForExperimentsOnBehalfOfUser = function(experiments, connectionsToGet, userId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listDataSetsForExperimentsOnBehalfOfUser",
-				"params" : [ this.getSession(), experiments, connectionsToGet, userId ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.getDataSetMetaData(String, List<String>)
- * @method
- */
-openbis.prototype.getDataSetMetaData = function(dataSetCodes, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "getDataSetMetaData",
-				"params" : [ this.getSession(), dataSetCodes ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.getDataSetMetaData(String, List<String>, EnumSet<DataSetFetchOption>)
- * @method
- */
-openbis.prototype.getDataSetMetaDataWithFetchOptions = function(dataSetCodes, fetchOptions, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "getDataSetMetaData",
-				"params" : [ this.getSession(), dataSetCodes, fetchOptions ] 
-		},
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.searchForDataSets(String, SearchCriteria)
- * @method
- */
-openbis.prototype.searchForDataSets = function(searchCriteria, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "searchForDataSets",
-				"params" : [ this.getSession(),
-							 searchCriteria ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.searchForDataSetsOnBehalfOfUser(String, SearchCriteria, String)
- * @method
- */
-openbis.prototype.searchForDataSetsOnBehalfOfUser = function(searchCriteria, userId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "searchForDataSetsOnBehalfOfUser",
-				"params" : [ this.getSession(),
-							 searchCriteria,
-							 userId ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.filterDataSetsVisibleToUser(String, List<DataSet>, String)
- * @method
- */
-openbis.prototype.filterDataSetsVisibleToUser = function(allDataSets, userId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "filterDataSetsVisibleToUser",
-				"params" : [ this.getSession(),
-				             allDataSets,
-							 userId ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listExperiments(String, List<String>)
- * @method
- */
-openbis.prototype.listExperimentsForIdentifiers = function(experimentIdentifiers, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listExperiments",
-				"params" : [ this.getSession(),
-				             experimentIdentifiers ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.searchForExperiments(String, SearchCriteria)
- * @method
- */
-openbis.prototype.searchForExperiments = function(searchCriteria, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "searchForExperiments",
-				"params" : [ this.getSession(),
-				             searchCriteria ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listProjects(String)
- * @method
- */
-openbis.prototype.listProjects = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listProjects",
-				"params" : [ this.getSession() ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listProjectsOnBehalfOfUser(String, String)
- * @method
- */
-openbis.prototype.listProjectsOnBehalfOfUser = function(userId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listProjectsOnBehalfOfUser",
-				"params" : [ this.getSession(), userId ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.getMaterialByCodes(String, List<MaterialIdentifier>)
- * @method
- */
-openbis.prototype.getMaterialByCodes = function(materialIdentifiers, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "getMaterialByCodes",
-				"params" : [ this.getSession(), materialIdentifiers ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.searchForMaterials(String, SearchCriteria)
- * @method
- */
-openbis.prototype.searchForMaterials = function(searchCriteria, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "searchForMaterials",
-				"params" : [ this.getSession(), searchCriteria ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listMetaprojects(String)
- * @method
- */
-openbis.prototype.listMetaprojects = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listMetaprojects",
-				"params" : [ this.getSession() ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listMetaprojectsOnBehalfOfUser(String, String)
- * @method
- */
-openbis.prototype.listMetaprojectsOnBehalfOfUser = function(userId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listMetaprojectsOnBehalfOfUser",
-				"params" : [ this.getSession(), userId ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.getMetaproject(String, IMetaprojectId)
- * @method
- */
-openbis.prototype.getMetaproject = function(metaprojectId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "getMetaproject",
-				"params" : [ this.getSession(), metaprojectId ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.getMetaprojectOnBehalfOfUser(String, IMetaprojectId, String)
- * @method
- */
-openbis.prototype.getMetaprojectOnBehalfOfUser = function(metaprojectId, userId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "getMetaprojectOnBehalfOfUser",
-				"params" : [ this.getSession(), metaprojectId, userId ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listAttachmentsForProject(String, IProjectId, boolean)
- * @method
- */
-openbis.prototype.listAttachmentsForProject = function(projectId, allVersions, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listAttachmentsForProject",
-				"params" : [ this.getSession(), projectId, allVersions ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listAttachmentsForExperiment(String, IExperimentId, boolean)
- * @method
- */
-openbis.prototype.listAttachmentsForExperiment = function(experimentId, allVersions, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listAttachmentsForExperiment",
-				"params" : [ this.getSession(), experimentId, allVersions ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationService.listAttachmentsForSample(String, ISampleId, boolean)
- * @method
- */
-openbis.prototype.listAttachmentsForSample = function(sampleId, allVersions, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "listAttachmentsForSample",
-				"params" : [ this.getSession(), sampleId, allVersions ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * ==========================================================================================
- * ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationChangingService methods
- * ==========================================================================================
- */
-
-/**
- * @see IGeneralInformationChangingService.updateSampleProperties(String, long, Map<String,String>)
- * @method
- */
-openbis.prototype.updateSampleProperties = function(sampleId, properties, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoChangingServiceUrl,
-		data: { "method" : "updateSampleProperties",
-				"params" : [ this.getSession(), sampleId, properties ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationChangingService.addUnofficialVocabularyTerm(String, Long, NewVocabularyTerm)
- * @method
- */
-openbis.prototype.addUnofficialVocabularyTerm = function(vocabularyId, term, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoChangingServiceUrl,
-		data: { "method" : "addUnofficialVocabularyTerm",
-				"params" : [ this.getSession(), vocabularyId, term ] 
-			  },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationChangingService.getWebAppSettings(String, String)
- * @method
- */
-openbis.prototype.getWebAppSettings = function(webappId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoChangingServiceUrl,
-		data: { "method" : "getWebAppSettings",
-		params : [ this.getSession(), webappId ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationChangingService.setWebAppSettings(String, WebAppSettings)
- * @method
- */
-openbis.prototype.setWebAppSettings = function(webappSettings, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoChangingServiceUrl,
-		data: { "method" : "setWebAppSettings",
-		params : [ this.getSession(), webappSettings ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationChangingService.createMetaproject(String, String, String)
- * @method
- */
-openbis.prototype.createMetaproject = function(name, descriptionOrNull, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoChangingServiceUrl,
-		data: { "method" : "createMetaproject",
-		params : [ this.getSession(), name, descriptionOrNull ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationChangingService.updateMetaproject(String, IMetaprojectId, String, String)
- * @method
- */
-openbis.prototype.updateMetaproject = function(metaprojectId, name, descriptionOrNull, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoChangingServiceUrl,
-		data: { "method" : "updateMetaproject",
-		params : [ this.getSession(), metaprojectId, name, descriptionOrNull ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationChangingService.deleteMetaproject(String, IMetaprojectId)
- * @method
- */
-openbis.prototype.deleteMetaproject = function(metaprojectId, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoChangingServiceUrl,
-		data: { "method" : "deleteMetaproject",
-		params : [ this.getSession(), metaprojectId ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationChangingService.addToMetaproject(String, IMetaprojectId, MetaprojectAssignmentsIds)
- * @method
- */
-openbis.prototype.addToMetaproject = function(metaprojectId, assignmentsToAdd, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoChangingServiceUrl,
-		data: { "method" : "addToMetaproject",
-		params : [ this.getSession(), metaprojectId, assignmentsToAdd ] },
-		success: action
-	});
-}
-
-/**
- * @see IGeneralInformationChangingService.removeFromMetaproject(String, IMetaprojectId, MetaprojectAssignmentsIds)
- * @method
- */
-openbis.prototype.removeFromMetaproject = function(metaprojectId, assignmentsToRemove, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.generalInfoChangingServiceUrl,
-		data: { "method" : "removeFromMetaproject",
-		params : [ this.getSession(), metaprojectId, assignmentsToRemove ] },
-		success: action
-	});
-}
-
-/**
- * ============================================================================
- * ch.systemsx.cisd.openbis.plugin.query.shared.api.v1.IQueryApiServer methods
- * ============================================================================
- */
-
-/**
- * @see IQueryApiServer.listQueries(String)
- * @method
- */
-openbis.prototype.listQueries = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.queryServiceUrl,
-		data: { "method" : "listQueries",
-				"params" : [ this.getSession() ] },
-		success: action
-	});
-}
-
-/**
- * @see IQueryApiServer.executeQuery(String, long, Map<String, String>)
- * @method
- */
-openbis.prototype.executeQuery = function(queryId, parameterBindings, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.queryServiceUrl,
-		data: { "method" : "executeQuery",
-				"params" : [ this.getSession(), queryId, parameterBindings ] },
-		success: action
-	});
-}
-
-/**
- * @see IQueryApiServer.listTableReportDescriptions(String)
- * @method
- */
-openbis.prototype.listTableReportDescriptions = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.queryServiceUrl,
-		data: { "method" : "listTableReportDescriptions",
-				"params" : [ this.getSession() ] },
-		success: action
-	});
-}
-
-/**
- * @see IQueryApiServer.createReportFromDataSets(String, String, String, List<String>)
- * @method
- */
-openbis.prototype.createReportFromDataSets = function(dataStoreCode, serviceKey, dataSetCodes, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.queryServiceUrl,
-		data: { "method" : "createReportFromDataSets",
-		params : [ this.getSession(), dataStoreCode, serviceKey, dataSetCodes ] },
-		success: action
-	});
-}
-
-/**
- * @see IQueryApiServer.listAggregationServices(String)
- * @method
- */
-openbis.prototype.listAggregationServices = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.queryServiceUrl,
-		data: { "method" : "listAggregationServices",
-		params : [ this.getSession() ] },
-		success: action
-	});
-}
-
-/**
- * @see IQueryApiServer.createReportFromAggregationService(String, String, String, Map<String, Object>)
- * @method
- */
-openbis.prototype.createReportFromAggregationService = function(dataStoreCode, serviceKey, parameters, action) {
-	this._internal.ajaxRequest({
-		url: this._internal.queryServiceUrl,
-		data: { "method" : "createReportFromAggregationService",
-		params : [ this.getSession(), dataStoreCode, serviceKey, parameters ] },
-		success: action
-	});
-}
-
-
-/**
- * ==============================================================================
- * ch.systemsx.cisd.openbis.generic.shared.api.v1.IWebInformationService methods
- * ==============================================================================
- */
-
-/**
- * Returns the current server side session.
- * 
- * @see IWebInformationService.getSessionToken()
- * @method
- */
-openbis.prototype.getSessionTokenFromServer = function(action) {
-	this._internal.ajaxRequest({
-		url: this._internal.webInfoServiceUrl,
-		data: { "method" : "getSessionToken" },
-		success: action
-	 });
-}
-
-/**
- * =================================================================================
- * ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.IDssServiceRpcGeneric methods
- * =================================================================================
- */
-
-/**
- * @see IDssServiceRpcGeneric.listFilesForDataSet(String, DataSetFileDTO)
- * @method
- */
-openbis.prototype.listFilesForDataSetFile = function(fileOrFolder, action) {
-	var openbisObj = this;
-	this._internal.getDataStoreApiUrlForDataSetCode(fileOrFolder.dataSetCode, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: { "method" : "listFilesForDataSet",
-					"params" : [ openbisObj.getSession(), fileOrFolder ] },
-			success: action
-		});
-	});
-}
-
-/**
- * @see IDssServiceRpcGeneric.getDownloadUrlForFileForDataSet(String, DataSetFileDTO)
- * @method
- */
-openbis.prototype.getDownloadUrlForFileForDataSetFile = function(fileOrFolder, action) {
-	var openbisObj = this;
-	this._internal.getDataStoreApiUrlForDataSetCode(fileOrFolder.dataSetCode, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: { "method" : "getDownloadUrlForFileForDataSet",
-					"params" : [ openbisObj.getSession(), fileOrFolder ] },
-			success: action
-		});
-	});
-}
-
-/**
- * Returns a download url that is valid as long as the user session is valid.
- * @method
- */
-openbis.prototype.getDownloadUrlForFileForDataSetFileInSession = function(fileOrFolder, action) {
-	this.getDownloadUrlForFileForDataSetInSession(fileOrFolder.dataSetCode, fileOrFolder.path, action);
-}
-
-/**
- * @see IDssServiceRpcGeneric.getDownloadUrlForFileForDataSetWithTimeout(String, DataSetFileDTO, long)
- * @method
- */
-openbis.prototype.getDownloadUrlForFileForDataSetFileWithTimeout = function(fileOrFolder, validityDurationInSeconds, action) {
-	var openbisObj = this;
-	this._internal.getDataStoreApiUrlForDataSetCode(fileOrFolder.dataSetCode, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: { "method" : "getDownloadUrlForFileForDataSetWithTimeout",
-					"params" : [ openbisObj.getSession(), fileOrFolder, validityDurationInSeconds ] },
-			success: action
-		});
-	});
-}
-
-/**
- * @see IDssServiceRpcGeneric.listFilesForDataSet(String, String, String, boolean)
- * @method
- */
-openbis.prototype.listFilesForDataSet = function(dataSetCode, path, recursive, action) {
-	var openbisObj = this;
-	this._internal.getDataStoreApiUrlForDataSetCode(dataSetCode, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: { "method" : "listFilesForDataSet",
-					"params" : [ openbisObj.getSession(), dataSetCode, path, recursive ] },
-			success: action
-		});
-	});
-}
-
-/**
- * @see IDssServiceRpcGeneric.getDownloadUrlForFileForDataSet(String, String, String)
- * @method
- */
-openbis.prototype.getDownloadUrlForFileForDataSet = function(dataSetCode, path, action) {
-	var openbisObj = this;
-	this._internal.getDataStoreApiUrlForDataSetCode(dataSetCode, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: { "method" : "getDownloadUrlForFileForDataSet",
-					"params" : [ openbisObj.getSession(), dataSetCode, path ] },
-			success: action
-		});
-	});
-}
-
-/**
- * Returns a download url that is valid as long as the user session is valid.
- * @method
- */
-openbis.prototype.getDownloadUrlForFileForDataSetInSession = function(dataSetCode, path, action) {
-	var openbisObj = this;
-	this._internal.getDataStoreUrlForDataSetCode(dataSetCode, function(dataStoreUrl){
-		var pathWithoutSlash = path.charAt(0) == "/" ? path.substr(1) : path;
-		var url = dataStoreUrl + "/" + dataSetCode + "/" + pathWithoutSlash + "?sessionID=" + openbisObj.getSession();
-		action(url);
-	});
-}
-
-/**
- * @see IDssServiceRpcGeneric.getDownloadUrlForFileForDataSetWithTimeout(String, String, String, long)
- * @method
- */
-openbis.prototype.getDownloadUrlForFileForDataSetWithTimeout = function(dataSetCode, path, validityDurationInSeconds, action) {
-	var openbisObj = this;
-	this._internal.getDataStoreApiUrlForDataSetCode(dataSetCode, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: { "method" : "getDownloadUrlForFileForDataSetWithTimeout",
-					"params" : [ openbisObj.getSession(), dataSetCode, path, validityDurationInSeconds ] },
-			success: action
-		});
-	});
-}
-
-/**
- * Creates a session workspace file uploader inside the specified uploaderContainer element and for the default data store.
- * @method
- */
-openbis.prototype.createSessionWorkspaceUploader = function(uploaderContainer, oncomplete){
-	this.createSessionWorkspaceUploaderForDataStore(uploaderContainer, null, oncomplete);
-}
-
-/**
- * Creates a session workspace file uploader inside the specified uploaderContainer element and for the specified data store.
- * @method
- */
-openbis.prototype.createSessionWorkspaceUploaderForDataStore = function(uploaderContainer, dataStoreCodeOrNull, oncomplete){
-	var uploaderSupported = window.File && window.FileReader && window.XMLHttpRequest;
-
-	if(!uploaderSupported){
-		alert("Uploader is not supported by your browser.");
-		return;
-	}
-	
-	var $this = this;
-	this._internal.getDataStoreUrlForDataStoreCode(dataStoreCodeOrNull, function(dataStoreUrl){
-		// figure out what is the location of the openbis.js script and assume that uploader resources are served by the same server
-		var openbisScriptLocation = $('script[src*=openbis\\.js]').attr('src');
-		var uploaderDirectoryLocation = jsFileLocation = openbisScriptLocation.replace(/js\/openbis\.js/g, 'uploader');
-		
-		$('head').append('<link rel="stylesheet" media="screen" type="text/css" href="' + uploaderDirectoryLocation + '/css/src/upload.css" />');
-		$('head').append('<script charset="utf-8" type="text/javascript" src="' + uploaderDirectoryLocation + '/js/src/upload.js" />');
-		
-		$(uploaderContainer).load(uploaderDirectoryLocation + "/index.html", function(){
-			Uploader.init({
-			       smart_mode: true,
-			       chunk_size: 1000*1024,
-			       file_upload_url: dataStoreUrl + "/session_workspace_file_upload",
-			       form_upload_url: dataStoreUrl + "/session_workspace_form_upload",
-			       file_download_url: dataStoreUrl + "/session_workspace_file_download",
-			       oncomplete: oncomplete,
-			       sessionID: $this.getSession()
-			});
-		});
-	});
-}
-
-/**
- * Creates a session workspace download url for a file with the specified filePath and for the default data store.
- * @method
- */
-openbis.prototype.createSessionWorkspaceDownloadUrl = function(filePath, action){
-	return this.createSessionWorkspaceDownloadUrlForDataStore(filePath, null, action);
-}
-
-/**
- * Creates a session workspace download url for a file with the specified filePath and for the specified data store.
- * @method
- */
-openbis.prototype.createSessionWorkspaceDownloadUrlForDataStore = function(filePath, dataStoreCodeOrNull, action){
-	var openbisObj = this;
-	
-	this._internal.getDataStoreUrlForDataStoreCode(dataStoreCodeOrNull, function(dataStoreUrl){
-		var downloadUrl = dataStoreUrl + "/session_workspace_file_download?sessionID=" + openbisObj.getSession() + "&filePath=" + filePath;
-		action(downloadUrl);
-	});
-}
-
-/**
- * Create a session workspace download link for a file with the specified filePath at the default data store.
- * @method
- */
-openbis.prototype.createSessionWorkspaceDownloadLink = function(filePath, linkText, action){
-	return this.createSessionWorkspaceDownloadLinkForDataStore(filePath, linkText, null, action);
-}
-
-/**
- * Create a session workspace download link for a file with the specified filePath at the specified data store.
- * @method
- */
-openbis.prototype.createSessionWorkspaceDownloadLinkForDataStore = function(filePath, linkText, dataStoreCodeOrNull, action){
-	this.createSessionWorkspaceDownloadUrlForDataStore(filePath, dataStoreCodeOrNull, function(downloadUrl){
-		var link = $("<a href='" + downloadUrl + "'>" + (linkText ? linkText : filePath) + "</a>");
-		action(link);
-	});
-}
-
-/**
- * Downloads a session workspace file with the specified filePath from the default data store.
- * @method
- */
-openbis.prototype.downloadSessionWorkspaceFile = function(filePath, action) {
-	this.downloadSessionWorkspaceFileForDataStore(filePath, null, action);
-}
-
-/**
- * Downloads a session workspace file with the specified filePath from the specified data store.
- * @method
- */
-openbis.prototype.downloadSessionWorkspaceFileForDataStore = function(filePath, dataStoreCodeOrNull, action) {
-	var openbisObj = this;
-	
-	this.createSessionWorkspaceDownloadUrlForDataStore(filePath, dataStoreCodeOrNull, function(downloadUrl){
-		$.ajax({
-			type: "GET",
-			dataType: "text",
-			url: downloadUrl,
-			success: openbisObj._internal.ajaxRequestSuccess(action),
-			error: openbisObj._internal.ajaxRequestError(action)
-		});
-	});
-}
-
-/**
- * Deletes a session workspace file with the specified filePath from the default data store.
- * @method
- */
-openbis.prototype.deleteSessionWorkspaceFile = function(filePath, action) {
-	this.deleteSessionWorkspaceFileForDataStore(filePath, null, action)
-}
-
-/**
- * Deletes a session workspace file with the specified filePath from the specified data store.
- * @method
- */
-openbis.prototype.deleteSessionWorkspaceFileForDataStore = function(filePath, dataStoreCodeOrNull, action) {
-	var openbisObj = this;
-	
-	this._internal.getDataStoreApiUrlForDataStoreCode(dataStoreCodeOrNull, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: {
-				"method" : "deleteSessionWorkspaceFile",
-				"params" : [ openbisObj.getSession(), filePath ]
-			},
-			success: action
-		});
-	});
-}
-
-/**
- * @see IDssServiceRpcGeneric.getPathToDataSet(String, String, String)
- * @method
- */
-openbis.prototype.getPathToDataSet = function(dataSetCode, overrideStoreRootPathOrNull, action) {
-	var openbisObj = this;
-	this._internal.getDataStoreApiUrlForDataSetCode(dataSetCode, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: { "method" : "getPathToDataSet",
-					"params" : [ openbisObj.getSession(), dataSetCode, overrideStoreRootPathOrNull ] },
-			success: action
-		});
-	});
-}
-
-/**
- * @see IDssServiceRpcGeneric.tryGetPathToDataSet(String, String, String)
- * @method
- */
-openbis.prototype.tryGetPathToDataSet = function(dataSetCode, overrideStoreRootPathOrNull, action) {
-	var openbisObj = this;
-	this._internal.getDataStoreApiUrlForDataSetCode(dataSetCode, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: { "method" : "tryGetPathToDataSet",
-					"params" : [ openbisObj.getSession(), dataSetCode, overrideStoreRootPathOrNull ] },
-			success: action
-		});
-	});
-}
-
-/**
- * List shares from the default data store.
- * 
- * @see IDssServiceRpcGeneric.listAllShares(String)
- * @method
- */
-openbis.prototype.listAllShares = function(action) {
-	this.listAllSharesForDataStore(null, action);
-}
-
-/**
- * List shares from the specified data store.
- * 
- * @see IDssServiceRpcGeneric.listAllShares(String)
- * @method
- */
-openbis.prototype.listAllSharesForDataStore = function(dataStoreCodeOrNull, action) {
-	var openbisObj = this;
-	
-	this._internal.getDataStoreApiUrlForDataStoreCode(dataStoreCodeOrNull, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: {
-				"method" : "listAllShares",
-				"params" : [ openbisObj.getSession() ]
-			},
-			success: action
-		});
-	});
-}
-
-/**
- * @see IDssServiceRpcGeneric.shuffleDataSet(String, String, String)
- * @method
- */
-openbis.prototype.shuffleDataSet = function(dataSetCode, shareId, action) {
-	var openbisObj = this;
-	this._internal.getDataStoreApiUrlForDataSetCode(dataSetCode, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: { "method" : "shuffleDataSet",
-					"params" : [ openbisObj.getSession(), dataSetCode, shareId ] },
-			success: action
-		});
-	});
-}
-
-/**
- * Get a validation script from the default data store.
- * 
- * @see IDssServiceRpcGeneric.getValidationScript(String, String)
- * @method
- */
-openbis.prototype.getValidationScript = function(dataSetTypeOrNull, action) {
-	this.getValidationScriptForDataStore(dataSetTypeOrNull, null, action);
-}
-
-/**
- * Get a validation script from the specified data store.
- * 
- * @see IDssServiceRpcGeneric.getValidationScript(String, String)
- * @method
- */
-openbis.prototype.getValidationScriptForDataStore = function(dataSetTypeOrNull, dataStoreCodeOrNull, action) {
-	var openbisObj = this;
-	
-	this._internal.getDataStoreApiUrlForDataStoreCode(dataStoreCodeOrNull, function(dataStoreApiUrl){
-		openbisObj._internal.ajaxRequest({
-			url: dataStoreApiUrl,
-			data: {
-				"method" : "getValidationScript",
-				"params" : [ openbisObj.getSession(), dataSetTypeOrNull ]
-			},
-			success: action
-		});
-	});
-}
-
-/**
- * Get a url that will produce a graph with the given configuration at the default data store.
- *
- * @method
- */
-openbis.prototype.getGraphUrl = function(graphConfig, action) {
-	this.getGraphUrlForDataStore(graphConfig, null, action);
-}
-
-/**
- * Get a url that will produce a graph with the given configuration at the specified data store.
- *
- * @method
- */
-openbis.prototype.getGraphUrlForDataStore = function(graphConfig, dataStoreCodeOrNull, action) {
-	var openbisObj = this;
-	
-	this._internal.getDataStoreHostForDataStoreCode(dataStoreCodeOrNull, function(dataStoreHost) {
-		var graphUrl = dataStoreHost + "/graphservice/?sessionID=" + openbisObj.getSession();
-		for (prop in graphConfig) {
-			graphUrl += "&" + prop + "=" + encodeURIComponent(graphConfig[prop]);
-		}
-		action(graphUrl);
-	});
-}
-
-/**
- * =====================
- * OpenBIS graph config
- * =====================
- * 
- * Defines the configuration for a graph generated by the server's graphservice.
- * 
- * To use, set properties on the object with keys that match the name of the servlet
- * parameters of the graphservice and then call the method getGraphUrl on the openbis
- * object. Do *not* set the sessionID paramter -- this will be filled in by the openbis 
- * object.
- *
- * The graphservice is documented here: https://wiki-bsse.ethz.ch/display/openBISDoc/Configuring+Graphs+and+Plots
- * 
- * @class
- * 
- */
-function openbisGraphConfig(filename, graphtype, title) {
-	this.file = filename;
-	this["graph-type"] =  graphtype;
-	this.title = title;
-}
-
-
-/**
- * =====================================================
- * OpenBIS webapp context internal code (DO NOT USE!!!)
- * =====================================================
- */
-
-function _openbisWebAppContextInternal(){
-	this.webappCode = this.getParameter("webapp-code");
-	this.sessionId = this.getParameter("session-id");
-	this.entityKind = this.getParameter("entity-kind");
-	this.entityType = this.getParameter("entity-type");
-	this.entityIdentifier = this.getParameter("entity-identifier");
-	this.entityPermId = this.getParameter("entity-perm-id");
-}
-
-_openbisWebAppContextInternal.prototype.getParameter = function(parameterName){
-	var match = location.search.match(RegExp("[?|&]"+parameterName+'=(.+?)(&|$)'));
-	if(match && match[1]){
-		return decodeURIComponent(match[1].replace(/\+/g,' '));
-	}else{
-		return null;
-	}
-}
-
-/**
- * =======================
- * OpenBIS webapp context 
- * =======================
- * 
- * Provides a context information for webapps that are embedded inside the OpenBIS UI.
- * 
- * @class
- * 
- */
-function openbisWebAppContext(){
-	this._internal = new _openbisWebAppContextInternal();
-}
-
-openbisWebAppContext.prototype.getWebappCode = function(){
-	return this._internal.webappCode;
-}
-
-openbisWebAppContext.prototype.getSessionId = function(){
-	return this._internal.sessionId;
-}
-
-openbisWebAppContext.prototype.getEntityKind = function(){
-	return this._internal.entityKind;
-}
-
-openbisWebAppContext.prototype.getEntityType = function(){
-	return this._internal.entityType;
-}
-
-openbisWebAppContext.prototype.getEntityIdentifier = function(){
-	return this._internal.entityIdentifier;
-}
-
-openbisWebAppContext.prototype.getEntityPermId = function(){
-	return this._internal.entityPermId;
-}
-
-openbisWebAppContext.prototype.getParameter = function(parameterName){
-	return this._internal.getParameter(parameterName);
-}
-
-/**
- * =======================
- * OpenBIS Search Criteria
- * =======================
- *
- * Methods and classes for constructing search criteria objects for use in searches.
- */
-
-/**
- * It is easier to construct instances of match clauses using one of the factory methods:
- *
- * 		createPropertyMatch
- * 		createAttributeMatch
- * 		createTimeAttributeMatch
- * 		createAnyPropertyMatch
- * 		createAnyFieldMatch
- *
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClause
- * @class
- */
-function SearchCriteriaMatchClause(type, fieldType, fieldCode, desiredValue) {
-	this["@type"] = type;
-	this["fieldType"] = fieldType;
-	this["fieldCode"] = fieldCode;
-	this["desiredValue"] = desiredValue;
-	// compareMode should be one of "LESS_THAN_OR_EQUAL", "EQUALS", "GREATER_THAN_OR_EQUAL"
-	this["compareMode"] = "EQUALS";
-}
-
-/**
- * Factory method to create a match for a property.
- * 
- * @param propertyCode The code of the property to compare against
- * @param desiredValue The value used in the comparison
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClause.createPropertyMatch(String, String)
- * @method
- */
-SearchCriteriaMatchClause.createPropertyMatch = function(propertyCode, desiredValue) {
-	var matchClause = new SearchCriteriaMatchClause("PropertyMatchClause", "PROPERTY", propertyCode, desiredValue);
-	matchClause["propertyCode"] = propertyCode;
-	return matchClause;
-}
-
-/**
- * Factory method to create a match for an attribute.
- *
- * @param attribute Should be a valid ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClauseAttribute.
- *   It should come from this list:
- *      // common
- *      "CODE", "TYPE", "PERM_ID",
- *      // for sample or experiment
- *      "SPACE",
- *      // for experiment
- *      "PROJECT",
- *      // for all types of entities
- *      "METAPROJECT"
- * @param desiredValue The value used in the comparison 
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClause.createAttributeMatch(MatchClauseAttribute, String)
- * @method
- */
-SearchCriteriaMatchClause.createAttributeMatch = function(attribute, desiredValue) {
-	var matchClause = new SearchCriteriaMatchClause("AttributeMatchClause", "ATTRIBUTE", attribute, desiredValue);
-	matchClause["attribute"] = attribute;
-	return matchClause;
-}
-
-/**
- * Factory method to create a MatchClause matching against registration or modification
- * date.
- * 
- * @param attribute Should be a valid ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClauseTimeAttribute
- * 	It should come from this list: REGISTRATION_DATE, MODIFICATION_DATE
- *
- * @param mode One of "LESS_THAN_OR_EQUAL", "EQUALS", "GREATER_THAN_OR_EQUAL"
- * @param date The date to compare against, format YYYY-MM-DD
- * @timezone The time zone of the date ("+1", "-5", "0", etc.)
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClause.createAttributeMatch(MatchClauseTimeAttribute, CompareMode, String, String)
- * @method
- */
-SearchCriteriaMatchClause.createTimeAttributeMatch = function(attribute, mode, date, timezone)
-{
-    var matchClause = new SearchCriteriaMatchClause("TimeAttributeMatchClause", "ATTRIBUTE", attribute, date);
-	matchClause["attribute"] = attribute;
-	matchClause["compareMode"] = mode;
-	matchClause["timeZone"] = timezone;
-	return matchClause;
-}
-
-/**
- * Factory method to create a match for against any property.
- * 
- * @param desiredValue The value used in the comparison
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClause.createAnyPropertyMatch(String)
- * @method
- */
-SearchCriteriaMatchClause.createAnyPropertyMatch = function(desiredValue) {
-	var matchClause = new SearchCriteriaMatchClause("AnyPropertyMatchClause", "ANY_PROPERTY", null, desiredValue);
-	return matchClause;
-}
-
-/**
- * Factory method to create a match for against any field (property or attribute).
- * 
- * @param desiredValue The value used in the comparison
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClause.createAnyFieldMatch(String)
- * @method
- */
-SearchCriteriaMatchClause.createAnyFieldMatch = function(desiredValue) {
-	var matchClause = new SearchCriteriaMatchClause("AnyFieldMatchClause", "ANY_FIELD", null, desiredValue);
-	return matchClause;
-}
-
-/**
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria
- * @class
- */
-function SearchCriteria() {
-	this["@type"] =  "SearchCriteria";
-	// operator should be either of "MATCH_ALL_CLAUSES" or "MATCH_ANY_CLAUSES"
-	this["operator"] = "MATCH_ALL_CLAUSES";
-	this["matchClauses"] = [];
-	this["subCriterias"] = [];
-}
-
-/**
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.addMatchClause(MatchClause)
- * @method
- */
-SearchCriteria.prototype.addMatchClause = function(matchClause) {
-	this["matchClauses"].push(matchClause);
-};
-
-/**
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.addSubCriteria(SearchSubCriteria)
- * @method
- */
-SearchCriteria.prototype.addSubCriteria = function(subCriteria) {
-	this["subCriterias"].push(subCriteria);
-};
-
-
-/**
- * It is easier to construct instances of sub criteria using one of the factory methods:
- *
- * 		createSampleParentCriteria
- * 		createSampleChildCriteria
- * 		createSampleContainerCriteria
- * 		createSampleCriteria
- * 		createExperimentCriteria
- * 		createDataSetContainerCriteria
- * 		createDataSetParentCriteria
- * 		createDataSetChildCriteria
- *
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchSubCriteria
- * @class
- */
-function SearchSubCriteria(targetEntityKind, searchCriteria) {
-	this["@type"] = "SearchSubCriteria";
-	this["targetEntityKind"] = targetEntityKind;	
-	this["criteria"] = searchCriteria;
-}
-
-/**
- * Factory method to create a match for a sample parent.
- * 
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchSubCriteria.createSampleParentCriteria(SearchCriteria)
- * @method
- */
-SearchSubCriteria.createSampleParentCriteria = function(searchCriteria) {
-	return new SearchSubCriteria("SAMPLE_PARENT", searchCriteria)
-}
-
-/**
- * Factory method to create a match for a sample child.
- * 
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchSubCriteria.createSampleChildCriteria(SearchCriteria)
- * @method
- */
-SearchSubCriteria.createSampleChildCriteria = function(searchCriteria) {
-	return new SearchSubCriteria("SAMPLE_CHILD", searchCriteria)
-}
-
-/**
- * Factory method to create a match for a sample container.
- * 
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchSubCriteria.createSampleContainerCriteria(SearchCriteria)
- * @method
- */
-SearchSubCriteria.createSampleContainerCriteria = function(searchCriteria) {
-	return new SearchSubCriteria("SAMPLE_CONTAINER", searchCriteria)
-}
-
-/**
- * Factory method to create a match for a sample.
- * 
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchSubCriteria.createSampleCriteria(SearchCriteria)
- * @method
- */
-SearchSubCriteria.createSampleCriteria = function(searchCriteria) {
-	return new SearchSubCriteria("SAMPLE", searchCriteria)
-}
-
-/**
- * Factory method to create a match for an experiment.
- * 
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchSubCriteria.createExperimentCriteria(SearchCriteria)
- * @method
- */
-SearchSubCriteria.createExperimentCriteria = function(searchCriteria) {
-	return new SearchSubCriteria("EXPERIMENT", searchCriteria)
-}
-
-/**
- * Factory method to create a match for a data set container.
- * 
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchSubCriteria.createDataSetContainerCriteria(SearchCriteria)
- * @method
- */
-SearchSubCriteria.createDataSetContainerCriteria = function(searchCriteria) {
-	return new SearchSubCriteria("DATA_SET_CONTAINER", searchCriteria)
-}
-
-/**
- * Factory method to create a match for a data set parent.
- * 
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchSubCriteria.createDataSetParentCriteria(SearchCriteria)
- * @method
- */
-SearchSubCriteria.createDataSetParentCriteria = function(searchCriteria) {
-	return new SearchSubCriteria("DATA_SET_PARENT", searchCriteria)
-}
-
-/**
- * Factory method to create a match for a data set child.
- * 
- * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchSubCriteria.createDataSetChildCriteria(SearchCriteria)
- * @method
- */
-SearchSubCriteria.createDataSetChildCriteria = function(searchCriteria) {
-	return new SearchSubCriteria("DATA_SET_CHILD", searchCriteria)
-}
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/spin.min.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/spin.min.js
deleted file mode 100644
index 942980c82a0..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/html/js/spin.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-//fgnass.github.com/spin.js#v1.2.7
-!function(e,t,n){function o(e,n){var r=t.createElement(e||"div"),i;for(i in n)r[i]=n[i];return r}function u(e){for(var t=1,n=arguments.length;t<n;t++)e.appendChild(arguments[t]);return e}function f(e,t,n,r){var o=["opacity",t,~~(e*100),n,r].join("-"),u=.01+n/r*100,f=Math.max(1-(1-e)/t*(100-u),e),l=s.substring(0,s.indexOf("Animation")).toLowerCase(),c=l&&"-"+l+"-"||"";return i[o]||(a.insertRule("@"+c+"keyframes "+o+"{"+"0%{opacity:"+f+"}"+u+"%{opacity:"+e+"}"+(u+.01)+"%{opacity:1}"+(u+t)%100+"%{opacity:"+e+"}"+"100%{opacity:"+f+"}"+"}",a.cssRules.length),i[o]=1),o}function l(e,t){var i=e.style,s,o;if(i[t]!==n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(o=0;o<r.length;o++){s=r[o]+t;if(i[s]!==n)return s}}function c(e,t){for(var n in t)e.style[l(e,n)||n]=t[n];return e}function h(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var i in r)e[i]===n&&(e[i]=r[i])}return e}function p(e){var t={x:e.offsetLeft,y:e.offsetTop};while(e=e.offsetParent)t.x+=e.offsetLeft,t.y+=e.offsetTop;return t}var r=["webkit","Moz","ms","O"],i={},s,a=function(){var e=o("style",{type:"text/css"});return u(t.getElementsByTagName("head")[0],e),e.sheet||e.styleSheet}(),d={lines:12,length:7,width:5,radius:10,rotate:0,corners:1,color:"#000",speed:1,trail:100,opacity:.25,fps:20,zIndex:2e9,className:"spinner",top:"auto",left:"auto",position:"relative"},v=function m(e){if(!this.spin)return new m(e);this.opts=h(e||{},m.defaults,d)};v.defaults={},h(v.prototype,{spin:function(e){this.stop();var t=this,n=t.opts,r=t.el=c(o(0,{className:n.className}),{position:n.position,width:0,zIndex:n.zIndex}),i=n.radius+n.length+n.width,u,a;e&&(e.insertBefore(r,e.firstChild||null),a=p(e),u=p(r),c(r,{left:(n.left=="auto"?a.x-u.x+(e.offsetWidth>>1):parseInt(n.left,10)+i)+"px",top:(n.top=="auto"?a.y-u.y+(e.offsetHeight>>1):parseInt(n.top,10)+i)+"px"})),r.setAttribute("aria-role","progressbar"),t.lines(r,t.opts);if(!s){var f=0,l=n.fps,h=l/n.speed,d=(1-n.opacity)/(h*n.trail/100),v=h/n.lines;(function m(){f++;for(var e=n.lines;e;e--){var i=Math.max(1-(f+e*v)%h*d,n.opacity);t.opacity(r,n.lines-e,i,n)}t.timeout=t.el&&setTimeout(m,~~(1e3/l))})()}return t},stop:function(){var e=this.el;return e&&(clearTimeout(this.timeout),e.parentNode&&e.parentNode.removeChild(e),this.el=n),this},lines:function(e,t){function i(e,r){return c(o(),{position:"absolute",width:t.length+t.width+"px",height:t.width+"px",background:e,boxShadow:r,transformOrigin:"left",transform:"rotate("+~~(360/t.lines*n+t.rotate)+"deg) translate("+t.radius+"px"+",0)",borderRadius:(t.corners*t.width>>1)+"px"})}var n=0,r;for(;n<t.lines;n++)r=c(o(),{position:"absolute",top:1+~(t.width/2)+"px",transform:t.hwaccel?"translate3d(0,0,0)":"",opacity:t.opacity,animation:s&&f(t.opacity,t.trail,n,t.lines)+" "+1/t.speed+"s linear infinite"}),t.shadow&&u(r,c(i("#000","0 0 4px #000"),{top:"2px"})),u(e,u(r,i(t.color,"0 0 1px rgba(0,0,0,.1)")));return e},opacity:function(e,t,n){t<e.childNodes.length&&(e.childNodes[t].style.opacity=n)}}),function(){function e(e,t){return o("<"+e+' xmlns="urn:schemas-microsoft.com:vml" class="spin-vml">',t)}var t=c(o("group"),{behavior:"url(#default#VML)"});!l(t,"transform")&&t.adj?(a.addRule(".spin-vml","behavior:url(#default#VML)"),v.prototype.lines=function(t,n){function s(){return c(e("group",{coordsize:i+" "+i,coordorigin:-r+" "+ -r}),{width:i,height:i})}function l(t,i,o){u(a,u(c(s(),{rotation:360/n.lines*t+"deg",left:~~i}),u(c(e("roundrect",{arcsize:n.corners}),{width:r,height:n.width,left:n.radius,top:-n.width>>1,filter:o}),e("fill",{color:n.color,opacity:n.opacity}),e("stroke",{opacity:0}))))}var r=n.length+n.width,i=2*r,o=-(n.width+n.length)*2+"px",a=c(s(),{position:"absolute",top:o,left:o}),f;if(n.shadow)for(f=1;f<=n.lines;f++)l(f,-2,"progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)");for(f=1;f<=n.lines;f++)l(f);return u(t,a)},v.prototype.opacity=function(e,t,n,r){var i=e.firstChild;r=r.shadow&&r.lines||0,i&&t+r<i.childNodes.length&&(i=i.childNodes[t+r],i=i&&i.firstChild,i=i&&i.firstChild,i&&(i.opacity=n))}):s=l(t,"animation")}(),typeof define=="function"&&define.amd?define(function(){return v}):e.Spinner=v}(window,document);
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/plugin.properties
deleted file mode 100644
index 26b2c9b16e7..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/demultiplexing/plugin.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-# The properties file for an example webapps plugin
-# This file has no properties defined because none need to be defined.
-webapp-folder = html
-openbisui-contexts = sample-details-view
-sample-entity-types = ILLUMINA_FLOW_CELL
-label = Demultiplex
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/body-style.css b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/body-style.css
deleted file mode 100644
index 31d71932834..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/body-style.css
+++ /dev/null
@@ -1,60 +0,0 @@
-
-input {
-border: 0px solid;
-height: 25px;
-border-color:#000000;
-outline: none;
-font: 18px "Trebuchet MS";
-}
-
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { 
-font: 10px;
-color:#999999;
- }
-h3 { font: 12px; }
-
-.greytext {font: 18px "Trebuchet MS";}
-.greytext:link {color:#BDBDBD; text-decoration:none}
-.greytext:visited {color:#BDBDBD; text-decoration:none}
-.greytext:active {color:#BDBDBD; text-decoration:none}
-.greytext:hover {color:#000000; text-decoration:none}
-.greytext input {color:#999999; text-decoration:none}
-
-
-.box {
-background-color: white;
-text-rendering: optimizeLegibility;
--webkit-border-radius: 6px;
-height: 50px;
-width: 480px;
-margin-top: 30px;
-padding: 8px 8px 8px 50px;
-border: 3px solid #999999;
-box-sizing: border-box;
--webkit-box-sizing: border-box;
--moz-box-sizing: border-box;
-border-radius: 6px 6px 6px 6px;
-}
-
-.loginname {
-background-image: url(images/sprite.png);
-background-repeat: no-repeat;
-background-position: 5px 10px; 
-}
-
-.password {
-background-image: url(images/sprite.png);
-background-repeat: no-repeat;
-background-position: 5px -30px; 
-}
-
-.loginbutton {
-margin-top: 30px;
-}
-
-div
-{
-}
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/button.css b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/button.css
deleted file mode 100644
index 37c8cbc7bef..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/button.css
+++ /dev/null
@@ -1,39 +0,0 @@
-button {
-  font: 18px "Trebuchet MS";
-  background-color: #222;
-  background-image: -moz-linear-gradient(top, rgba(255,255,255,.25), rgba(255,255,255,.11));
-  background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, rgba(255,255,255,.25)),color-stop(1, rgba(255,255,255,.11)));
-  background-image: -webkit-linear-gradient(rgba(255,255,255,.25), rgba(255,255,255,.11));
-  color: #fff;
-  text-rendering: optimizeLegibility;
-  text-shadow: 0 -1px 1px #222;
-  padding: 3px 5px 3px 5px;
-  border: 0;
-  border-radius: 6px;
-  border-bottom: 1px solid #222;
-  margin: 0;
-  -moz-box-shadow: 0 1px 3px #999;
-  -webkit-box-shadow: 0 1px 3px #999;
-  box-shadow: 0 1px 3px #999;
-  width: 150px;
-}
-
-button.first {
-  border-top-left-radius: 6px;
-  border-bottom-left-radius: 6px;
-}
-
-button.last {
-  border-top-right-radius: 6px;
-  border-bottom-right-radius: 6px;
-}
-
-button.active {
-  background-color:red;
-}
-
-button:hover {
-  background-color: grey;
-  cursor: pointer;
-}
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/d3.time.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/d3.time.js
deleted file mode 100644
index e1c0831c88e..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/d3.time.js
+++ /dev/null
@@ -1,692 +0,0 @@
-(function(){d3.time = {};
-
-var d3_time = Date;
-d3.time.format = function(template) {
-  var n = template.length;
-
-  function format(date) {
-    var string = [],
-        i = -1,
-        j = 0,
-        c,
-        f;
-    while (++i < n) {
-      if (template.charCodeAt(i) == 37) {
-        string.push(
-            template.substring(j, i),
-            (f = d3_time_formats[c = template.charAt(++i)])
-            ? f(date) : c);
-        j = i + 1;
-      }
-    }
-    string.push(template.substring(j, i));
-    return string.join("");
-  }
-
-  format.parse = function(string) {
-    var date = new d3_time(1900, 0, 1),
-        i = d3_time_parse(date, template, string, 0);
-    if (i != string.length) return null;
-    if (date.hour12) {
-      var hours = date.getHours() % 12;
-      date.setHours(date.hour12pm ? hours + 12 : hours);
-    }
-    delete date.hour12;
-    delete date.hour12pm;
-    return date;
-  };
-
-  format.toString = function() {
-    return template;
-  };
-
-  return format;
-};
-
-function d3_time_parse(date, template, string, j) {
-  var c,
-      p,
-      i = 0,
-      n = template.length,
-      m = string.length;
-  while (i < n) {
-    if (j >= m) return -1;
-    c = template.charCodeAt(i++);
-    if (c == 37) {
-      p = d3_time_parsers[template.charAt(i++)];
-      if (!p || ((j = p(date, string, j)) < 0)) return -1;
-    } else if (c != string.charCodeAt(j++)) {
-      return -1;
-    }
-  }
-  return j;
-}
-
-var d3_time_zfill2 = d3.format("02d"),
-    d3_time_zfill3 = d3.format("03d"),
-    d3_time_zfill4 = d3.format("04d"),
-    d3_time_sfill2 = d3.format("2d");
-
-var d3_time_formats = {
-  a: function(d) { return d3_time_weekdays[d.getDay()].substring(0, 3); },
-  A: function(d) { return d3_time_weekdays[d.getDay()]; },
-  b: function(d) { return d3_time_months[d.getMonth()].substring(0, 3); },
-  B: function(d) { return d3_time_months[d.getMonth()]; },
-  c: d3.time.format("%a %b %e %H:%M:%S %Y"),
-  d: function(d) { return d3_time_zfill2(d.getDate()); },
-  e: function(d) { return d3_time_sfill2(d.getDate()); },
-  H: function(d) { return d3_time_zfill2(d.getHours()); },
-  I: function(d) { return d3_time_zfill2(d.getHours() % 12 || 12); },
-  j: d3_time_dayOfYear,
-  L: function(d) { return d3_time_zfill3(d.getMilliseconds()); },
-  m: function(d) { return d3_time_zfill2(d.getMonth() + 1); },
-  M: function(d) { return d3_time_zfill2(d.getMinutes()); },
-  p: function(d) { return d.getHours() >= 12 ? "PM" : "AM"; },
-  S: function(d) { return d3_time_zfill2(d.getSeconds()); },
-  U: d3_time_weekNumberSunday,
-  w: function(d) { return d.getDay(); },
-  W: d3_time_weekNumberMonday,
-  x: d3.time.format("%m/%d/%y"),
-  X: d3.time.format("%H:%M:%S"),
-  y: function(d) { return d3_time_zfill2(d.getFullYear() % 100); },
-  Y: function(d) { return d3_time_zfill4(d.getFullYear() % 10000); },
-  Z: d3_time_zone,
-  "%": function(d) { return "%"; }
-};
-
-var d3_time_parsers = {
-  a: d3_time_parseWeekdayAbbrev,
-  A: d3_time_parseWeekday,
-  b: d3_time_parseMonthAbbrev,
-  B: d3_time_parseMonth,
-  c: d3_time_parseLocaleFull,
-  d: d3_time_parseDay,
-  e: d3_time_parseDay,
-  H: d3_time_parseHour24,
-  I: d3_time_parseHour12,
-  // j: function(d, s, i) { /*TODO day of year [001,366] */ return i; },
-  L: d3_time_parseMilliseconds,
-  m: d3_time_parseMonthNumber,
-  M: d3_time_parseMinutes,
-  p: d3_time_parseAmPm,
-  S: d3_time_parseSeconds,
-  // U: function(d, s, i) { /*TODO week number (sunday) [00,53] */ return i; },
-  // w: function(d, s, i) { /*TODO weekday [0,6] */ return i; },
-  // W: function(d, s, i) { /*TODO week number (monday) [00,53] */ return i; },
-  x: d3_time_parseLocaleDate,
-  X: d3_time_parseLocaleTime,
-  y: d3_time_parseYear,
-  Y: d3_time_parseFullYear
-  // ,
-  // Z: function(d, s, i) { /*TODO time zone */ return i; },
-  // "%": function(d, s, i) { /*TODO literal % */ return i; }
-};
-
-// Note: weekday is validated, but does not set the date.
-function d3_time_parseWeekdayAbbrev(date, string, i) {
-  return string.substring(i, i += 3).toLowerCase() in d3_time_weekdayAbbrevLookup ? i : -1;
-}
-
-var d3_time_weekdayAbbrevLookup = {
-  sun: 3,
-  mon: 3,
-  tue: 3,
-  wed: 3,
-  thu: 3,
-  fri: 3,
-  sat: 3
-};
-
-// Note: weekday is validated, but does not set the date.
-function d3_time_parseWeekday(date, string, i) {
-  d3_time_weekdayRe.lastIndex = 0;
-  var n = d3_time_weekdayRe.exec(string.substring(i, i + 10));
-  return n ? i += n[0].length : -1;
-}
-
-var d3_time_weekdayRe = /^(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)/ig;
-
-var d3_time_weekdays = [
-  "Sunday",
-  "Monday",
-  "Tuesday",
-  "Wednesday",
-  "Thursday",
-  "Friday",
-  "Saturday"
-];
-
-function d3_time_parseMonthAbbrev(date, string, i) {
-  var n = d3_time_monthAbbrevLookup[string.substring(i, i += 3).toLowerCase()];
-  return n == null ? -1 : (date.setMonth(n), i);
-}
-
-var d3_time_monthAbbrevLookup = {
-  jan: 0,
-  feb: 1,
-  mar: 2,
-  apr: 3,
-  may: 4,
-  jun: 5,
-  jul: 6,
-  aug: 7,
-  sep: 8,
-  oct: 9,
-  nov: 10,
-  dec: 11
-};
-
-function d3_time_parseMonth(date, string, i) {
-  d3_time_monthRe.lastIndex = 0;
-  var n = d3_time_monthRe.exec(string.substring(i, i + 12));
-  return n ? (date.setMonth(d3_time_monthLookup[n[0].toLowerCase()]), i += n[0].length) : -1;
-}
-
-var d3_time_monthRe = /^(?:January|February|March|April|May|June|July|August|September|October|November|December)/ig;
-
-var d3_time_monthLookup = {
-  january: 0,
-  february: 1,
-  march: 2,
-  april: 3,
-  may: 4,
-  june: 5,
-  july: 6,
-  august: 7,
-  september: 8,
-  october: 9,
-  november: 10,
-  december: 11
-};
-
-var d3_time_months = [
-  "January",
-  "February",
-  "March",
-  "April",
-  "May",
-  "June",
-  "July",
-  "August",
-  "September",
-  "October",
-  "November",
-  "December"
-];
-
-function d3_time_parseLocaleFull(date, string, i) {
-  return d3_time_parse(date, d3_time_formats.c.toString(), string, i);
-}
-
-function d3_time_parseLocaleDate(date, string, i) {
-  return d3_time_parse(date, d3_time_formats.x.toString(), string, i);
-}
-
-function d3_time_parseLocaleTime(date, string, i) {
-  return d3_time_parse(date, d3_time_formats.X.toString(), string, i);
-}
-
-function d3_time_parseFullYear(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 4));
-  return n ? (date.setFullYear(n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_parseYear(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setFullYear(d3_time_century() + +n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_century() {
-  return ~~(new Date().getFullYear() / 1000) * 1000;
-}
-
-function d3_time_parseMonthNumber(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setMonth(n[0] - 1), i += n[0].length) : -1;
-}
-
-function d3_time_parseDay(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setDate(+n[0]), i += n[0].length) : -1;
-}
-
-// Note: we don't validate that the hour is in the range [0,23].
-function d3_time_parseHour24(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setHours(+n[0]), i += n[0].length) : -1;
-}
-
-// Note: we don't validate that the hour is in the range [1,12].
-function d3_time_parseHour12(date, string, i) {
-  date.hour12 = true;
-  return d3_time_parseHour24(date, string, i);
-}
-
-function d3_time_parseMinutes(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setMinutes(+n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_parseSeconds(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setSeconds(+n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_parseMilliseconds(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 3));
-  return n ? (date.setMilliseconds(+n[0]), i += n[0].length) : -1;
-}
-
-// Note: we don't look at the next directive.
-var d3_time_numberRe = /\s*\d+/;
-
-function d3_time_parseAmPm(date, string, i) {
-  var n = d3_time_amPmLookup[string.substring(i, i += 2).toLowerCase()];
-  return n == null ? -1 : (date.hour12pm = n, i);
-}
-
-var d3_time_amPmLookup = {
-  am: 0,
-  pm: 1
-};
-
-function d3_time_year(d) {
-  return new d3_time(d.getFullYear(), 0, 1);
-}
-
-function d3_time_daysElapsed(d0, d1) {
-  return ~~((d1 - d0) / 864e5 - (d1.getTimezoneOffset() - d0.getTimezoneOffset()) / 1440);
-}
-
-function d3_time_dayOfYear(d) {
-  return d3_time_zfill3(1 + d3_time_daysElapsed(d3_time_year(d), d));
-}
-
-function d3_time_weekNumberSunday(d) {
-  var d0 = d3_time_year(d);
-  return d3_time_zfill2(~~((d3_time_daysElapsed(d0, d) + d0.getDay()) / 7));
-}
-
-function d3_time_weekNumberMonday(d) {
-  var d0 = d3_time_year(d);
-  return d3_time_zfill2(~~((d3_time_daysElapsed(d0, d) + (d0.getDay() + 6) % 7) / 7));
-}
-
-// TODO table of time zone offset names?
-function d3_time_zone(d) {
-  var z = d.getTimezoneOffset(),
-      zs = z > 0 ? "-" : "+",
-      zh = ~~(Math.abs(z) / 60),
-      zm = Math.abs(z) % 60;
-  return zs + d3_time_zfill2(zh) + d3_time_zfill2(zm);
-}
-d3.time.format.utc = function(template) {
-  var local = d3.time.format(template);
-
-  function format(date) {
-    try {
-      d3_time = d3_time_format_utc;
-      var utc = new d3_time();
-      utc._ = date;
-      return local(utc);
-    } finally {
-      d3_time = Date;
-    }
-  }
-
-  format.parse = function(string) {
-    try {
-      d3_time = d3_time_format_utc;
-      var date = local.parse(string);
-      return date && date._;
-    } finally {
-      d3_time = Date;
-    }
-  };
-
-  format.toString = local.toString;
-
-  return format;
-};
-
-function d3_time_format_utc() {
-  this._ = new Date(Date.UTC.apply(this, arguments));
-}
-
-d3_time_format_utc.prototype = {
-  getDate: function() { return this._.getUTCDate(); },
-  getDay: function() { return this._.getUTCDay(); },
-  getFullYear: function() { return this._.getUTCFullYear(); },
-  getHours: function() { return this._.getUTCHours(); },
-  getMilliseconds: function() { return this._.getUTCMilliseconds(); },
-  getMinutes: function() { return this._.getUTCMinutes(); },
-  getMonth: function() { return this._.getUTCMonth(); },
-  getSeconds: function() { return this._.getUTCSeconds(); },
-  getTimezoneOffset: function() { return 0; },
-  valueOf: function() { return this._.getTime(); },
-  setDate: function(x) { this._.setUTCDate(x); },
-  setDay: function(x) { this._.setUTCDay(x); },
-  setFullYear: function(x) { this._.setUTCFullYear(x); },
-  setHours: function(x) { this._.setUTCHours(x); },
-  setMilliseconds: function(x) { this._.setUTCMilliseconds(x); },
-  setMinutes: function(x) { this._.setUTCMinutes(x); },
-  setMonth: function(x) { this._.setUTCMonth(x); },
-  setSeconds: function(x) { this._.setUTCSeconds(x); }
-};
-var d3_time_formatIso = d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ");
-
-d3.time.format.iso = Date.prototype.toISOString ? d3_time_formatIsoNative : d3_time_formatIso;
-
-function d3_time_formatIsoNative(date) {
-  return date.toISOString();
-}
-
-d3_time_formatIsoNative.parse = function(string) {
-  return new Date(string);
-};
-
-d3_time_formatIsoNative.toString = d3_time_formatIso.toString;
-function d3_time_range(floor, step, number) {
-  return function(t0, t1, dt) {
-    var time = floor(t0), times = [];
-    if (time < t0) step(time);
-    if (dt > 1) {
-      while (time < t1) {
-        var date = new Date(+time);
-        if (!(number(date) % dt)) times.push(date);
-        step(time);
-      }
-    } else {
-      while (time < t1) times.push(new Date(+time)), step(time);
-    }
-    return times;
-  };
-}
-d3.time.second = function(date) {
-  return new Date(~~(date / 1e3) * 1e3);
-};
-
-d3.time.second.utc = d3.time.second;
-d3.time.seconds = d3_time_range(d3.time.second, function(date) {
-  date.setTime(date.getTime() + 1e3);
-}, function(date) {
-  return date.getSeconds();
-});
-
-d3.time.seconds.utc = d3.time.seconds;
-d3.time.minute = function(date) {
-  return new Date(~~(date / 6e4) * 6e4);
-};
-
-d3.time.minute.utc = d3.time.minute;d3.time.minutes = d3_time_range(d3.time.minute, d3_time_minutesStep, function(date) {
-  return date.getMinutes();
-});
-
-d3.time.minutes.utc = d3_time_range(d3.time.minute, d3_time_minutesStep, function(date) {
-  return date.getUTCMinutes();
-});
-
-function d3_time_minutesStep(date) {
-  date.setTime(date.getTime() + 6e4); // assumes no leap seconds
-}
-d3.time.hour = function(date) {
-  var offset = date.getTimezoneOffset() / 60;
-  return new Date((~~(date / 36e5 - offset) + offset) * 36e5);
-};
-
-d3.time.hour.utc = function(date) {
-  return new Date(~~(date / 36e5) * 36e5);
-};
-d3.time.hours = d3_time_range(d3.time.hour, d3_time_hoursStep, function(date) {
-  return date.getHours();
-});
-
-d3.time.hours.utc = d3_time_range(d3.time.hour.utc, d3_time_hoursStep, function(date) {
-  return date.getUTCHours();
-});
-
-function d3_time_hoursStep(date) {
-  date.setTime(date.getTime() + 36e5);
-}
-d3.time.day = function(date) {
-  return new Date(date.getFullYear(), date.getMonth(), date.getDate());
-};
-
-d3.time.day.utc = function(date) {
-  return new Date(~~(date / 864e5) * 864e5);
-};
-d3.time.days = d3_time_range(d3.time.day, function(date) {
-  date.setDate(date.getDate() + 1);
-}, function(date) {
-  return date.getDate() - 1;
-});
-
-d3.time.days.utc = d3_time_range(d3.time.day.utc, function(date) {
-  date.setUTCDate(date.getUTCDate() + 1);
-}, function(date) {
-  return date.getUTCDate() - 1;
-});
-d3.time.week = function(date) {
-  (date = d3.time.day(date)).setDate(date.getDate() - date.getDay());
-  return date;
-};
-
-d3.time.week.utc = function(date) {
-  (date = d3.time.day.utc(date)).setUTCDate(date.getUTCDate() - date.getUTCDay());
-  return date;
-};
-d3.time.weeks = d3_time_range(d3.time.week, function(date) {
-  date.setDate(date.getDate() + 7);
-}, function(date) {
-  return ~~((date - new Date(date.getFullYear(), 0, 1)) / 6048e5);
-});
-
-d3.time.weeks.utc = d3_time_range(d3.time.week.utc, function(date) {
-  date.setUTCDate(date.getUTCDate() + 7);
-}, function(date) {
-  return ~~((date - Date.UTC(date.getUTCFullYear(), 0, 1)) / 6048e5);
-});
-d3.time.month = function(date) {
-  return new Date(date.getFullYear(), date.getMonth(), 1);
-};
-
-d3.time.month.utc = function(date) {
-  return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), 1));
-};
-d3.time.months = d3_time_range(d3.time.month, function(date) {
-  date.setMonth(date.getMonth() + 1);
-}, function(date) {
-  return date.getMonth();
-});
-
-d3.time.months.utc = d3_time_range(d3.time.month.utc, function(date) {
-  date.setUTCMonth(date.getUTCMonth() + 1);
-}, function(date) {
-  return date.getUTCMonth();
-});
-d3.time.year = function(date) {
-  return new Date(date.getFullYear(), 0, 1);
-};
-
-d3.time.year.utc = function(date) {
-  return new Date(Date.UTC(date.getUTCFullYear(), 0, 1));
-};
-d3.time.years = d3_time_range(d3.time.year, function(date) {
-  date.setFullYear(date.getFullYear() + 1);
-}, function(date) {
-  return date.getFullYear();
-});
-
-d3.time.years.utc = d3_time_range(d3.time.year.utc, function(date) {
-  date.setUTCFullYear(date.getUTCFullYear() + 1);
-}, function(date) {
-  return date.getUTCFullYear();
-});
-// TODO nice
-function d3_time_scale(linear, methods, format) {
-
-  function scale(x) {
-    return linear(x);
-  }
-
-  scale.invert = function(x) {
-    return d3_time_scaleDate(linear.invert(x));
-  };
-
-  scale.domain = function(x) {
-    if (!arguments.length) return linear.domain().map(d3_time_scaleDate);
-    linear.domain(x);
-    return scale;
-  };
-
-  scale.ticks = function(m, k) {
-    var extent = d3_time_scaleExtent(scale.domain());
-    if (typeof m !== "function") {
-      var span = extent[1] - extent[0],
-          target = span / m,
-          i = d3.bisect(d3_time_scaleSteps, target, 1, d3_time_scaleSteps.length - 1);
-      if (Math.log(target / d3_time_scaleSteps[i - 1]) < Math.log(d3_time_scaleSteps[i] / target)) --i;
-      m = methods[i];
-      k = m[1];
-      m = m[0];
-    }
-    return m(extent[0], extent[1], k);
-  };
-
-  scale.tickFormat = function() {
-    return format;
-  };
-
-  scale.copy = function() {
-    return d3_time_scale(linear.copy(), methods, format);
-  };
-
-  // TOOD expose d3_scale_linear_rebind?
-  scale.range = d3.rebind(scale, linear.range);
-  scale.rangeRound = d3.rebind(scale, linear.rangeRound);
-  scale.interpolate = d3.rebind(scale, linear.interpolate);
-  scale.clamp = d3.rebind(scale, linear.clamp);
-
-  return scale;
-}
-
-// TODO expose d3_scaleExtent?
-function d3_time_scaleExtent(domain) {
-  var start = domain[0], stop = domain[domain.length - 1];
-  return start < stop ? [start, stop] : [stop, start];
-}
-
-function d3_time_scaleDate(t) {
-  return new Date(t);
-}
-
-function d3_time_scaleFormat(formats) {
-  return function(date) {
-    var i = formats.length - 1, f = formats[i];
-    while (!f[1](date)) f = formats[--i];
-    return f[0](date);
-  };
-}
-
-var d3_time_scaleSteps = [
-  1e3,    // 1-second
-  5e3,    // 5-second
-  15e3,   // 15-second
-  3e4,    // 30-second
-  6e4,    // 1-minute
-  3e5,    // 5-minute
-  9e5,    // 15-minute
-  18e5,   // 30-minute
-  36e5,   // 1-hour
-  108e5,  // 3-hour
-  216e5,  // 6-hour
-  432e5,  // 12-hour
-  864e5,  // 1-day
-  1728e5, // 2-day
-  6048e5, // 1-week
-  1728e6, // 1-month
-  7776e6, // 3-month
-  31536e6 // 1-year
-];
-
-var d3_time_scaleLocalMethods = [
-  [d3.time.seconds, 1],
-  [d3.time.seconds, 5],
-  [d3.time.seconds, 15],
-  [d3.time.seconds, 30],
-  [d3.time.minutes, 1],
-  [d3.time.minutes, 5],
-  [d3.time.minutes, 15],
-  [d3.time.minutes, 30],
-  [d3.time.hours, 1],
-  [d3.time.hours, 3],
-  [d3.time.hours, 6],
-  [d3.time.hours, 12],
-  [d3.time.days, 1],
-  [d3.time.days, 2],
-  [d3.time.weeks, 1],
-  [d3.time.months, 1],
-  [d3.time.months, 3],
-  [d3.time.years, 1]
-];
-
-var d3_time_scaleLocalFormats = [
-  [d3.time.format("%Y"), function(d) { return true; }],
-  [d3.time.format("%B"), function(d) { return d.getMonth(); }],
-  [d3.time.format("%b %d"), function(d) { return d.getDate() != 1; }],
-  [d3.time.format("%a %d"), function(d) { return d.getDay() && d.getDate() != 1; }],
-  [d3.time.format("%I %p"), function(d) { return d.getHours(); }],
-  [d3.time.format("%I:%M"), function(d) { return d.getMinutes(); }],
-  [d3.time.format(":%S"), function(d) { return d.getSeconds() || d.getMilliseconds(); }]
-];
-
-var d3_time_scaleLocalFormat = d3_time_scaleFormat(d3_time_scaleLocalFormats);
-
-d3.time.scale = function() {
-  return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);
-};
-var d3_time_scaleUTCMethods = [
-  [d3.time.seconds.utc, 1],
-  [d3.time.seconds.utc, 5],
-  [d3.time.seconds.utc, 15],
-  [d3.time.seconds.utc, 30],
-  [d3.time.minutes.utc, 1],
-  [d3.time.minutes.utc, 5],
-  [d3.time.minutes.utc, 15],
-  [d3.time.minutes.utc, 30],
-  [d3.time.hours.utc, 1],
-  [d3.time.hours.utc, 3],
-  [d3.time.hours.utc, 6],
-  [d3.time.hours.utc, 12],
-  [d3.time.days.utc, 1],
-  [d3.time.days.utc, 2],
-  [d3.time.weeks.utc, 1],
-  [d3.time.months.utc, 1],
-  [d3.time.months.utc, 3],
-  [d3.time.years.utc, 1]
-];
-
-var d3_time_scaleUTCFormats = [
-  [d3.time.format.utc("%Y"), function(d) { return true; }],
-  [d3.time.format.utc("%B"), function(d) { return d.getUTCMonth(); }],
-  [d3.time.format.utc("%b %d"), function(d) { return d.getUTCDate() != 1; }],
-  [d3.time.format.utc("%a %d"), function(d) { return d.getUTCDay() && d.getUTCDate() != 1; }],
-  [d3.time.format.utc("%I %p"), function(d) { return d.getUTCHours(); }],
-  [d3.time.format.utc("%I:%M"), function(d) { return d.getUTCMinutes(); }],
-  [d3.time.format.utc(":%S"), function(d) { return d.getUTCSeconds() || d.getUTCMilliseconds(); }]
-];
-
-var d3_time_scaleUTCFormat = d3_time_scaleFormat(d3_time_scaleUTCFormats);
-
-d3.time.scale.utc = function() {
-  return d3_time_scale(d3.scale.linear(), d3_time_scaleUTCMethods, d3_time_scaleUTCFormat);
-};
-})();
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/images/openBIS_Logo.svg b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/images/openBIS_Logo.svg
deleted file mode 100755
index 70ac6c77f27..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/images/openBIS_Logo.svg
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="400.023px" height="174.566px" viewBox="0 0 400.023 174.566" enable-background="new 0 0 400.023 174.566"
-	 xml:space="preserve">
-<g id="Layer_1">
-	<g>
-		<text transform="matrix(1 0 0 1 46.4854 154.2764)"><tspan x="0" y="0" fill="#010101" font-family="'HelveticaNeue-Bold'" font-size="93.505" letter-spacing="-4">open</tspan><tspan x="204.679" y="0" fill="#231F20" font-family="'HelveticaNeue'" font-size="93.505">BIS</tspan></text>
-		<rect x="204.234" y="158.748" fill="none" width="192.64" height="14.936"/>
-		<text transform="matrix(1 0 0 1 204.2329 169.876)" fill="#010101" font-family="'HelveticaNeue'" font-size="15.5842">Biology Information System</text>
-		<g>
-			<g>
-				<g>
-					<g>
-						<polygon fill="#068172" points="125.213,81.967 141.416,98.167 147.252,92.333 131.053,76.132 125.213,76.132 						"/>
-					</g>
-					<g>
-						<g>
-							<polygon fill="#068172" points="120.206,81.967 104.005,98.167 98.168,92.333 114.368,76.132 120.206,76.132 							"/>
-						</g>
-						<g>
-							<polygon fill="#068172" points="120.206,65.286 104.005,49.084 98.168,54.92 114.368,71.12 120.206,71.12 							"/>
-						</g>
-					</g>
-				</g>
-				<g>
-					<polygon fill="#068172" points="125.213,65.286 141.416,49.084 147.252,54.92 131.053,71.12 125.213,71.12 					"/>
-				</g>
-			</g>
-			<g>
-				<g>
-					<polygon fill="#A4A4A4" points="76.131,16.201 92.331,0 98.168,5.836 81.969,22.036 76.13,22.036 					"/>
-				</g>
-				<g>
-					<g>
-						<polygon fill="#ADACAF" points="76.131,32.882 92.331,49.084 98.168,43.247 81.969,27.048 76.13,27.048 						"/>
-					</g>
-					<g>
-						<g>
-							<polygon fill="#ADACAF" points="71.122,32.882 54.921,49.084 49.084,43.247 65.283,27.048 71.123,27.048 							"/>
-						</g>
-						<g>
-							<polygon fill="#ADACAF" points="71.122,16.201 54.921,0 49.084,5.836 65.283,22.036 71.123,22.036 							"/>
-						</g>
-					</g>
-				</g>
-			</g>
-			<g>
-				<g>
-					<polygon fill="#ADACAF" points="27.046,65.286 43.247,49.084 49.083,54.92 32.884,71.12 27.045,71.12 					"/>
-				</g>
-				<g>
-					<polygon fill="#ADACAF" points="27.046,81.967 43.247,98.167 49.083,92.333 32.884,76.132 27.045,76.132 					"/>
-				</g>
-				<g>
-					<polygon fill="#ADACAF" points="22.038,81.967 5.837,98.167 0,92.333 16.199,76.132 22.038,76.132 					"/>
-				</g>
-				<g>
-					<polygon fill="#ADACAF" points="22.038,65.286 5.837,49.084 0,54.92 16.199,71.12 22.038,71.12 					"/>
-				</g>
-			</g>
-		</g>
-	</g>
-</g>
-<g id="Layer_2">
-</g>
-</svg>
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/images/sprite.png b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/images/sprite.png
deleted file mode 100644
index b9e19ef18acf68223cf6878c397ffa47ae933478..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 748
zcmV<I0u%j-P)<h;3K|Lk000e1NJLTq0015U0027(1^@s6Y*9KV0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!j!8s8RCwC#na@ibK@`Vl6BD5ZHtofu
z7QO2^C$YDj(pzsvXmj$QAhd`2qop?wrpKf`M0zSH_$MgX9Bm3YDws=KDWofGL4_p!
zzWTPTVSmhKC*(2@-p(-l-h6i6&b-~7HF~|C7=?_<8dj^-X%q!kk_NO~DwQq<0UI(S
z2DC^JsOfR~J>aX#!GO-A_!`pB8sOz9;Dm(Dwj!Iz-~|aAlOv-PY)bZ(RSmw9?8{OO
zK9sO&VRAKwF}cD<T~t1~I6=?^Yk8cuq06v28cG6jt?7Q_XMlblO6KBJN#S1dF*&C5
zQAZsJ29#3auB)jHedJLm*@Ld)0<2i~7|>cDR50i_^s)~sI3h=}CKsTEfY3gKPWqgi
zgKv4DP{WZj&_#rd<t2~99+zGtF2saNJv98laiuT_ctHW!<XaZ$)u$oU$aGL&#;9KQ
z5@JN6!5XZ=8mz$@tic+r!5XYy#(cgOU!$0HHJ#xj?43&Ry%%}_*HFCl`3(I7-M|Ix
zDg^_&iQ<if&lccsm4E?#j{1iPelGz3sA6)h+`AgX=!E#K#2#^_Qkmi%0FljRZ}a(l
zI+MwWdcA(zY&O#Yz8$`BBLc6>KIe3J>a;pgl3XsAHcitG=p-2tN^;HR{{MBHOeSv}
zs3WOV%7_uoUmk4_XmwzIydv<Ae{t({#womxg>BoS-ENOd0M5kS9+#uE|3!OUJJ3&D
zr(1c+_NVSy{nJ^y6kd!zVOdtX+wJ=OETLO)z)P#umwfUl*3rJ`TBhG=6`;N^?tY-0
zIN+M_-`DbzJvbLtB@hbPjD*iQptC9;5>KFCLhQe>o!VT@Bd07zVWgiM6P%-I_ofy%
eTe;=000RI_wd#yk{QvO)0000<MNUMnLSTaTC|&6Q

diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/index.html b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/index.html
deleted file mode 120000
index 3391e4bfcde..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/index.html
+++ /dev/null
@@ -1 +0,0 @@
-openbis-dsu-downloader.html
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/openbis-dsu-downloader.html b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/openbis-dsu-downloader.html
deleted file mode 100644
index 941a6fb603d..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/openbis-dsu-downloader.html
+++ /dev/null
@@ -1,836 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-  <title>Quantitative Genomics Facility</title>
-
-  <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
-  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-  <meta name="google" value="notranslate">
-
-  <link type="text/css" rel="stylesheet" href="body-style.css" />
-  <link type="text/css" rel="stylesheet" href="button.css" />
-  <link type="text/css" rel="stylesheet" href="tree.css" />
-  <script type="text/javascript" src="/openbis/resources/js/d3.v3.min.js"></script>
-  <script type="text/javascript" src="/openbis/resources/js/d3.layout.js"></script>
-  <script type="text/javascript" src="d3.time.js"></script>
-  <script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-  <script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-  <script type="text/javascript" src="/openbis/resources/js/openbis-dsu.js"></script>
-  <!-- To speed development, cache the requests -->
-  <!-- <script type="text/javascript" src="openbis-request-cache.js"></script> -->
-  <script>
-
-dsu = new openbis_dsu('https://openbis-dsu.ethz.ch/openbis/openbis', 'https://openbis-dsu.ethz.ch/datastore_server');
-
-//After logout the URL redirected to, just go to current URL in this case
-var logouturl = $(location).attr('href');
-
-// A helper function for drawing the lines between nodes
-var diagonal = d3.svg.diagonal().projection(function(d) { return [d.y, d.x] });	
-
-// The tree visualization
-var vis;
-
-// The node inspectors
-var inspectors;
-
-var inspectorsWidth = 600;
-
-// The root of the tree
-var root = { code : "QGF", label: "QGF", children : [], type: 'ROOT' };
-
-// The inspected elements
-var inspected = [];
-
-// A date formatter for grouping samples by registration year / month
-var yearmonthformat = d3.time.format("%Y-%m");
-
-///
-/// FUNCTIONS FOR PUTTING DATA INTO THE TREE
-///
-
-function initTree(){
-	 dsu.retrieveSequencingSamples(function(data){
-		 addSamplesToTree(data.result);
-		 showSpaces();
-		 updateDiagram(500);
-	 });
-}
-
-function addSamplesToTree(samples)
-{
-	if (samples == null){
-		return;
-	}
-	
-	// Create sample nodes 
-	samples = samples.map(function(sample) {
-		return {
-			code : sample.permId,
-			label: sample.properties["EXTERNAL_SAMPLE_NAME"] + " [" +   sample.code + "]",
-			bis: sample,
-			type: 'SAMPLE' 
-    }
-	});
-	
-	sortArray(samples, 'code', false);
-	
-	// Create sample group nodes (group by registration date) 
-	var sampleGroupsMap = [];
-	var sampleGroups = [];
-	
-	samples.forEach(function(sample) {
-		var date = yearmonthformat(new Date(sample.bis.registrationDetails.registrationDate));
-		var sampleGroup = sampleGroupsMap[date];
-		
-		if (undefined === sampleGroup) {
-			sampleGroup = {
-					code: date,
-					label: date,
-					samples: [],
-					type: 'SAMPLE_GROUP'
-			};
-			sampleGroupsMap[date] = sampleGroup;
-			sampleGroups.push(sampleGroup);
-		}
-		sampleGroup.samples.push(sample);
-	});
-
-	// Sort sample groups from newest to oldest
-	sortArray(sampleGroups, 'code', false);
-	
-	// Create space nodes
-	var isFirstSampleGroup = true;
-	sampleGroups.forEach(function(sampleGroup){
-		var spacesMap = [];
-		var spaces = [];
-		
-    sampleGroup.samples.forEach(function(sample){
-	    	var spaceCode = sample.bis.spaceCode;
-    	  var space = spacesMap[spaceCode];
-    	  
-    	  if(undefined == space){
-    	     space = {
-    	    		  code: sampleGroup.code + "#" + spaceCode,
-    	    		  label: spaceCode,
-    	    		  _children: [],
-    	    		  type: 'SPACE'
-    	     }
-    	     spacesMap[spaceCode] = space;
-    	     spaces.push(space);
-    	  }
-    	  space._children.push(sample);
-    });
-
-		// Sort spacees
-		spaces.sort(function(space1, space2) {
-			    if (space1.label == space2.label) return 0;
-			    return (space1.label < space2.label) ? -1 : 1;
-	  });
-    
-    if(spaces.length > 1){
-    	sortArray(spaces, 'label', true);
-    	sampleGroup._children = spaces;
-    }else{
-      sampleGroup._children = sampleGroup.samples;
-    }
-    
-    if(isFirstSampleGroup){
-    	openAllForNode(sampleGroup);
-    	isFirstSampleGroup = false;
-    }
-	});
-	
-	if (samples.length > 0){
-		root.children = sampleGroups;
-	}
-		
-}
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 20);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-function closeAll(){
-	  root.children.forEach(function(sampleGroup){
-		  closeAllForNode(sampleGroup);
-	  });
-	  
-	  if(inspected.length > 0){
-		  var inspectedCopy = inspected.slice(0);
-		  inspectedCopy.forEach(function(elem){
-			  if(elem.inspected){
-			    toggle_inspected(elem);
-			  }
-		  });
-	  }else{
-	    updateDiagram(500);
-	  }
-}
-
-function closeAllForNode(node){
-	  closeChildren(node);
-	  getChildren(node).forEach(function(child){
-	    closeAllForNode(child);
-	  });
-}
-
-function openAllForNode(node){
-	openChildren(node);
-	getChildren(node).forEach(function(child){
-		openAllForNode(child);
-	});
-}
-
-function getVisibleLeafsCountForNode(node){
-	if(node.children){
-			var count = 0;
-			node.children.forEach(function(child){
-				count += getVisibleLeafsCountForNode(child);
-			});
-			return count;
-	}else{
-		return 1;
-	}
-}
-
-function getVisibleLabelsMaxLength(node){
-	if(node.children){
-		var length = 0;
-		node.children.forEach(function(child){
-			var childLength = getVisibleLabelsMaxLength(child);
-			if(childLength > length){
-				length = childLength;
-			}
-		});
-		return length;
-	}else{
-		  return node.label.length * 13;		
-	}
-}
-
-function showSpaces()
-{	
-	// Don't show anything yet, just initialize the visualization
-	createVis();
-}
-
-
-var didCreateVis = false;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{	
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	visgroup = d3.select("#main").append("div");
-
-	// An svg element for the tree visualization
-	vis = visgroup.append("svg:svg")
-	  .attr("id","mainVis")
-  	.append("svg:g")
-		.attr("transform", "translate(40, 0)");
-
-	  var legend = vis.append("svg:g")
-	  .attr("class","legend")
-	  .attr("transform", "translate(-30, 0)");
-	  
-	  var legendSeq = legend.append("svg:g").attr("class","sequenced").attr("transform","translate(0, 20)");
-	  legendSeq.append("svg:circle").attr("r", 5.5);
-	  legendSeq.append("svg:text").text("Sequenced").attr("dx", 10).attr("dy",4);
-
-	  var legendNotSeq = legend.append("svg:g").attr("class","notsequenced").attr("transform","translate(0, 40)");
-	    legendNotSeq.append("svg:circle").attr("r", 5.5);
-	    legendNotSeq.append("svg:text").text("Not Sequenced").attr("dx", 10).attr("dy",4);
-	  
-	// An element for the inspectors.
-	inspectors = visgroup.append("span")
-	  .attr("id","inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "relative")
-		.style("overflow", "auto")
-		.style("float", "right")
-	  .style("top", "20px")
-	  .style("display", "none");
-
-	didCreateVis = true;
-}
-
-
-/**
- * Draw / update the tree
- */
-function updateDiagram(duration)
-{	
-  log('Updating diagram');
-	
-  var inspectorsSize = inspected.length > 0 ? inspectorsWidth : 0;
-  var labelsSize = getVisibleLabelsMaxLength(root);
-  
-  var treeWidth = Math.max(300, getAppWidth() - inspectorsSize - labelsSize);
-  var treeHeight = Math.max(100, getAppHeight());
-  
-  var visWidth = treeWidth + labelsSize - 20;
-  var visHeight = treeHeight;
-  
-  var mainWidth = visWidth + inspectorsSize;
-  var mainHeight = visHeight;
-  
-	// Adjust a size of the vis 
-	d3.select("#mainVis")
-	  .attr("width", visWidth)
-    .attr("height", visHeight);
-    
-  d3.select("#main")
-    .style("width", mainWidth)
-    .style("height", mainHeight);
-	
-	// Adjust a size of the tree 
-  tree = d3.layout.tree().size([treeHeight, treeWidth])	
-	
-	// Update the root and compute the new layout 
-	var nodes = tree.nodes(root);
-
-	// Draw / update the links	
-	var link = vis.selectAll("path.link").data(tree.links(nodes), function(d) { return d.code });
-	
-	link.enter().append("svg:path")
-			.attr("class", "link")
-			.attr("d", function(d) {
-				var y0 = (null != d.source.y0) ? d.source.y0 : d.source.y; 
-				var x0 = (null != d.source.x0) ? d.source.x0 : d.source.x;
-				var o = {x: x0, y: y0};
-				return diagonal({source: o, target: o});
-			})
-		.transition()
-			.duration(duration)
-			.attr("d", diagonal);
-		
-	link.transition()
-		.duration(duration)
-		.attr("d", diagonal);
-		
-	link.exit().transition()
-		.duration(duration)
-		.attr("d", function(d) {
-				var y0 = (null != d.source.y0) ? d.source.y0 : d.source.y; 
-				var x0 = (null != d.source.x0) ? d.source.x0 : d.source.x;
-				var o = {x: x0, y: y0};
-				return diagonal({source: o, target: o});
-			})
-		.remove();
-
-	// Draw / update the nodes
-	var node = vis.selectAll("g.node").data(nodes, function(d) { return d.code });
-	
-	var nodeEnter = 
-		node.enter().append("svg:g")
-			.attr("class", classForNode)
-			.attr("transform", translateSrc)
-			.on("click", toggle_open);
-
-	nodeEnter.append("svg:circle")
-		.attr("r", 5.5);
-
-	nodeEnter.append("svg:text")
-		.attr("dx", function(d) { return hasChildren(d) ? -8 : 8 })
-		.attr("dy", 3)
-		.attr("text-anchor", function(d) { return getTextAnchorType(d) })
-		.text(function(d) { return d.label });
-
-	nodeEnter
-		.transition()
-			.duration(duration)
-			.attr("transform", translateDst);
-		
-	
-	// Transition nodes to their new position.
-	node.transition()
-		.duration(duration)
-		.attr("class", classForNode)
-		.attr("transform", translateDst);
-
-	// Move the text elements to the appropriate position
-	node.selectAll("text").transition()
-		.duration(duration)
-		.attr("dx", function(d) { return hasChildren(d) ? -8 : 8 })
-		.attr("text-anchor", function(d) { return getTextAnchorType(d) });
-		
-	node.exit().transition()
-		.duration(duration)
-		.attr("transform", translateSrc)
-		.remove();
-}
-
-function classForNode(d) { 
-	// Use whether the node has open children or not to compute the class
-	var cssClass = "node " + d.type;
-	if (d.inspected) cssClass = cssClass + " inspected";
-	if(d.hasFilesLoaded){
-		if (d.hasFiles) {
-	    cssClass = cssClass + " sequenced";
-	  } else {
-		  cssClass = cssClass + " notsequenced";
-		}
-	}
-	return cssClass;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =  "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-function getChildren(d){
-	if(d.children != null){
-		return d.children;
-	}else if(d._children != null){
-		return d._children;
-	}else{
-		return [];
-	}
-}
-
-function hasChildren(d)
-{
-	return d.children != null || d._children != null;
-}
-
-function hasChildrenOpen(d){
-	return d.children != null;
-}
-
-function hasChildrenClosed(d){
-	return d._children != null;
-}
-
-function closeChildren(d){
-	  if(hasChildrenOpen(d)){
-	    d._children = d.children;
-	    d.children = null;
-	  }
-}
-
-function openChildren(d){
-	  if(hasChildrenClosed(d)){
-		    d.children = d._children;
-		    d._children = null;
-    
-		    var hasSampleChildren = d.children && d.children[0].type == 'SAMPLE';
-		    
-	      if(hasSampleChildren && !d.hasFilesLoaded && !d.hasFilesLoading){
-		    	  d.hasFilesLoading = true; 
-	    	  
-	    	    // Get datasets for each sequencing sample 
-		    	  var sampleDeferrer = 
-		    	    new actionDeferrer(
-		    	        function() {
-		    	        	log("Loaded HAS_FILES for all samples");
-		    	        	d.hasFilesLoaded = true; 
-		    	        	d.hasFilesLoading = false;
-		    	        	updateDiagram(500);
-		    	        }, 
-		    	        d.children.map(function(samp) { return samp.bis.code; }));
-		    	        
-		    	  d.children.forEach(function(sample) {
-		    		   loadHasFilesForSample(sample, function(){
-		    			   sampleDeferrer.dependencyCompleted(sample.bis.code);
-		    		   });
-		    		});
-			  }
-    }
-}
-
-function loadHasFilesForSample(sample, callback){
-	 dsu.retrieveDataSetsForSequencingSample(sample, function(data) {
-		      var datasets = data.result;
-		      
-	        log("Got " + (datasets ? datasets.length : 0) + " datasets for sample: " + sample.bis.code);
-
-	        if (!datasets || datasets.length == 0){
-	          sample.hasFiles = false;
-	          sample.hasFilesLoaded = true;
-	        	callback();
-	        }else{
-	            var listFiles = function(dataset){
-	                dsu.server.listFilesForDataSet(dataset.code, "/", true, function(data) {
-	                	  var files = data.result;
-	                	
-	                    log("Got " + (files ? files.length : 0) + " files for sample: " + sample.bis.code + " dataset: " + dataset.code);
-	                    
-	                    if (!files || files.length == 0) {
-	                      if(datasets.length > 0){
-	                    	  log("Sample: " + sample.bis.code + " no files found yet - will try in the next dataset");
-	                        listFilesFunction(datasets.pop());
-	                      }else{
-	                    	  log("Sample: " + sample.bis.code + " HAS_NO_FILES");
-	                    	  sample.hasFiles = false;
-	                    	  sample.hasFilesLoaded = true;
-	                    	  callback();
-	                      }
-	                    }else{
-	                    	 log("Sample: " + sample.bis.code + " HAS_FILES");
-	                    	 sample.hasFiles = true;
-	                    	 sample.hasFilesLoaded = true;
-	                    	 callback();
-	                    }
-	                });
-	            };
-	            listFiles(datasets.pop());
-	        }
-	    });	
-}
-
-function loadFilesForSample(sample, callback){
-    dsu.retrieveDataSetsForSequencingSample(sample, function(data) {
-    	  var datasets = data.result;
-    	
-        log("Got " + (datasets ? datasets.length : 0) + " datasets for sample: " + sample.bis.code);
-        
-        if (!datasets || datasets.length == 0){
-        	sample.files = [];
-        	sample.filesLoaded = true;
-          callback();      
-        }else{
-            sample.datasets = data.result.map(function(bisds) { return {bis : bisds} });
-            sample.files = [];
-            sample.filesLoaded = false;
-                  
-            // Get all the files from the sequencing sample's datasets 
-            var datasetDeferrer = 
-              new actionDeferrer(
-                function() {
-                   log("Loaded ALL datasets' files for sample: " + sample.bis.code);
-                   sortArray(sample.files, 'label', true);
-                   sample.filesLoaded = true; 
-                   callback();
-                }, 
-                sample.datasets.map(function(ds) { return ds.bis.code; }));
-              
-            sample.datasets.forEach(function(ds) { 
-              dsu.server.listFilesForDataSet(ds.bis.code, "/", true, function(data) {         
-                log("Got " + (data.result ? data.result.length : 0) + " files for sample: " + sample.bis.code + " dataset: " + ds.bis.code);
-                
-                if (!data.result || data.result.length == 0) {
-                  datasetDeferrer.dependencyCompleted(ds.bis.code);
-                  return;
-                }
-                data.result.forEach(function (file) {
-                  file.dataset = ds;
-                  file.label = file.pathInListing.split("/").pop();
-                });
-
-                data.result = data.result.filter(function(file) { 
-                  var regex= (/gz$|tsv$/);
-                  return (regex.test(file.pathInListing) & !file.isDirectory); });
-                sample.files = sample.files.concat(data.result);
-                datasetDeferrer.dependencyCompleted(ds.bis.code);
-              })
-            });
-        }
-    });
-}
-	  
-function getTextAnchorType(d){
-	return d.type == 'SAMPLE' ? 'start' : 'end'; 	
-}
-
-// Toggle children on click.
-function toggle_open(d) {
-	if (!hasChildren(d)) {
-		d.svgNode = this;
-		return toggle_inspected.call(this, d);
-	}
-	
-  if (hasChildrenOpen(d)) {
-	  closeChildren(d);
-  } else {
-	  openChildren(d);
-  }
-  updateDiagram(500);
-}
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{	
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspected, function (d) { return d.code });
-	var box = inspector.enter().append("div")
-		.attr("class", "inspector")
-		.text(function(d) { return d.label });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", toggle_inspected)
-		.text("x");
-		
-	var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs(d.bis.properties) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.style("opacity", "1");
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-			
-	// Add a caption, but make sure there is just one (this does not work with select())
-	downloadTable.selectAll("caption")
-			.data(downloadTableCaption)
-		.enter()
-			.append("caption").text(function(d) { return d; });
-			
-	// We just want to see non-directories here
-	var downloadTableRow = downloadTable.selectAll("tr").data(filesForSequencingSample, function(d) { return d.pathInDataSet });
-	downloadTableRow
-		.enter()
-			.append("tr")
-				.append("td")
-				.style("text-align", "left")
-				.on("click", downloadTableFile)
-				.text(function(d) { return d.label; });
-	downloadTableRow
-		.exit()
-			.transition()
-				.duration(duration)
-				.style("opacity", "0")
-				.remove();
-	
-	inspector.exit().transition()
-		.duration(duration)
-		.style("opacity", "0")
-		.remove();
-}
-
-// Toggle children on click.
-function toggle_inspected(d) {
-	var count = inspected.length;
-	
-	if (d.inspected) {
-		var index = inspected.indexOf(d) 
-		if (index > -1)	inspected.splice(index, 1);
-		d.inspected = false;
-		d3.select(d.svgNode).attr("class", classForNode(d))
-	} else {
-		d.inspected = true;
-		inspected.push(d);
-		d3.select(d.svgNode).attr("class", classForNode(d))
-		if(!d.filesLoaded){
-			loadFilesForSample(d, function(){
-				updateInspectors(500);
-			});
-		}
-	}
-
-	if(inspected.length > 0){
-		$("#inspectorsContainer").show();	
-	}else{
-		$("#inspectorsContainer").hide(); 
-	}
-
-	if(count == 0 && inspected.length > 0 || count > 0 && inspected.length == 0){
-		updateDiagram(500);
-		setTimeout(function(){
-			updateInspectors(500);
-		}, 500);
-	}else{
-		updateInspectors(500);
-	}
-}
-
-function sortArray(array, sortingFieldName, ascending){
-	 array.sort(function(item1, item2){
-		 var value1 = item1[sortingFieldName];
-		 var value2 = item2[sortingFieldName];
-		 
-		 if(value1){
-			  value1 = new String(value1).toLowerCase(); 
-		 }
-		 if(value2){
-		    value2 = new String(value2).toLowerCase();
-		 }
-		 
-		 if(ascending){
-			 return (value1 >= value2) ? 1: -1;			 
-		 }else{
-			 return (value1 <= value2) ? 1: -1;
-		 }
-	});
-}
-	 
-/**
- * Convert properties to pairs
- */
-function props_to_pairs(d)
-{
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	pairs.sort(function(a, b) { 
-		if (a[0] == b[0]) return 0;
-		// Sort in reverse lexicographical
-		return (a[0] < b[0]) ? -1 : 1;
-	});
-	return pairs;
-}
-
-
-function downloadTableCaption(d)
-{	
-	if(d.filesLoaded){
-		if(d.files && d.files.length > 0){
-			return ["Files"]
-		}else{
-			return ["Not Yet Sequenced"];
-		}
-	}
-}
-
-function downloadTableFile(d)
-{
-	// If there is no dataset, this is just a marker for loading
-	if (!d.dataset) return;
-	
-	var action = function(data) { 
-		try {
-			document.location.href = data.result
-		} catch (err) {
-			// just ignore errors		
-		} 
-	};
-	dsu.server.getDownloadUrlForFileForDataSet(d.dataset.bis.code, d.pathInDataSet, action);
-}
-
-function filesForSequencingSample(d)
-{
-	return d.filesLoaded ? d.files : [{ label : "Loading..." }];
-}
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#loginname").focus();
-                $('#login-button').html('Login');
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	initTree();
-	
-	$('#openbis-logo').height(30);
-        $('#openbis-logo').hide();
-        
-}
-
-
-$(document).ready(function() {
-	//if ( $.browser.msie ) {
-        //  alert("Currently no Internet Explorer is supported!");
-        //}
-        $('#main').hide()
-	
-	$('#logout-button').click(function() { 
-           dsu.server.logout(function(data) {$(location).attr('href',logouturl)});
-         });
-	
-	dsu.server.ifRestoredSessionActive(function(data) { enterApp(data) });
-	$('#login-form').submit(function() {
-                 $('#login-button').html('Logging in...');
-		 dsu.server.login( $.trim($('#loginname').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-});
-
-// set the focus 
-function onPageLoad(){
-          if(loginname.value.length==0) {
-            $("#loginname").focus();
-          }
-          else {
-            $("#login-button").focus();
-          }
-}
-
-function log(msg){
-	
-	if(console){
-		console.log(msg);
-	}
-	
-}
-
-
- </script>
-</head>
-<body onload="onPageLoad()">
-<img id="openbis-logo" src="images/openBIS_Logo.svg" alt="openBIS" style="position: absolute; left: 330px; top: 230px; height: 70px;"/>
-<link rel="shortcut icon" href="../images/favicon.ico" /> 
-<link rel="icon" type="image/png" href="../images/favicon.png" /> 
-
-<div id="login-form-div">
-  <h1>BSSE - Quantitative Genomics Facility</h1>
-  <form id="login-form" action="javascript:">
-    <div class="box greytext loginname">
-      <input value="Login Name" type="text" required="required" maxlength="40" size="40" onfocus="this.value=(this.value=='Login Name') ? '' : this.value;" onblur="this.value=(this.value=='') ? 'Login Name' : this.value;" id="loginname"> </input>
-    </div>
-    <div class="box greytext password">
-      <input value="Password" id="password" type="password" required="required" size="40" onfocus="this.value=(this.value=='Password') ? '' : this.value;" onblur="this.value=(this.value=='') ? 'Password' : this.value;" id="password"> </input>
-    </div>
-    <div class="loginbutton">
-      <button id="login-button">Login</button>
-    </div>
-    <br>
-    <a href="https://crowd-bsse.ethz.ch/crowd/console/forgottenlogindetails!default.action" id="resetpassword" class="greytext">Reset password</a>
-  </form>
-</div>
-
-<div id="main">
-  <div id="button-group">
-    <button id="logout-button">Logout</button>
-    <button id="close-all-button" onclick="closeAll();">Close All</button>
-  </div>
-</div>
-</body>
-</html>
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/tree.css b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/tree.css
deleted file mode 100644
index e54d6d1d5d3..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/html/tree.css
+++ /dev/null
@@ -1,138 +0,0 @@
-.node circle {
-	 fill: #fff;
-	 stroke: #444444; 
-	 stroke-width: 1.5px;
-}
-
-.node {
-	font: 14px "Verdana", sans-serif;
-	z-index: 1;
-	cursor: pointer;
-	left: -15px;
-}
-
-.node:hover circle{
-    fill: #444444;
-}
-
-.node:hover{
-  font-weight: bold;  
-}
-
-.link {
-	 fill: none;
-	 stroke: #ccc;
-	 stroke-width: 1.5px;
-	 z-index: -1;
-}
-
-.SAMPLE.inspected {
-  font-weight: bold
-}
-
-.SAMPLE.sequenced circle {
-	stroke: DarkGreen;
-}
-
-.SAMPLE.sequenced:hover circle {
-  fill: DarkGreen;
-}
-
-.SAMPLE.notsequenced circle {
-	stroke: DarkRed;
-}
-
-.SAMPLE.notsequenced:hover circle {
-  fill: DarkRed;
-}
-
-/* Inspector */
-
-div.inspector {
-	font: 14px "Verdana", sans-serif;
-	padding: 10px;
-	border: 1px solid gray;
-	margin: 10px 2px;
-	font-weight: bold;
-}
-
-.property {
-  font-size: 10px;
-}
-
-.properties {
-	width: 100%;	
-}
-
-.properties tr:nth-child(odd) {
-  background-color:#eee;
-}
-
-.properties tr:nth-child(even) {
-  background-color:#fff;
-}
-
-.close {
-	float: right;
-}
-
-.close:hover {
-	opacity: 0.5;
-	color: #AAA;
-	cursor: pointer;
-}
-
-.downloads {
-	color: black;
-	background-color: #E3E3E3;
-}
-
-table.downloads {
-  font-family: "Trebuchet MS", sans-serif;
-	font-size: 10px;
-	table-layout: fixed;
-	border-collapse: collapse;
-	margin: 0px;
-	padding: 0px;
-}
-
-/*
-.downloads caption {
-	text-align: left;
-}
-*/
-
-.downloads tr {
-	padding: 0px;
-}
-
-.downloads td {
-	border: 2px solid #FFFFFF;	
-	padding: 2px;
-}
-
-.downloads td:hover {
-	cursor: pointer;
-	text-decoration: underline
-}
-
-input:focus{
-background-color: white;
-}
-
-/* Legend */
-
-.legend .sequenced circle {
-   font: 14px "Verdana", sans-serif;
-   stroke-width: 1.5px;
-   fill: white;
-   stroke: DarkGreen;
-}
-
-.legend .notsequenced circle {
-   font: 14px "Verdana", sans-serif;
-   stroke-width: 1.5px;
-   fill: white;
-   stroke: DarkRed;
-}
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/plugin.properties
deleted file mode 100644
index cb40f34f644..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/downloader/plugin.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-# The properties file for an example webapps plugin
-# This file has no properties defined because none need to be defined.
-webapp-folder = html
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/invoicing/html/index.html b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/invoicing/html/index.html
deleted file mode 100644
index 435b335ce8c..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/invoicing/html/index.html
+++ /dev/null
@@ -1,179 +0,0 @@
-<head>
-  <title>Quantitative Genomics Facility Invoice Generator</title>
-  <script type="text/javascript" src="/openbis/resources/js/d3.v3.min.js"></script>
-  <script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-  <script type="text/javascript" src="/openbis/resources/js/spin.min.js"></script>
-  <script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-  <script type="text/javascript" src="/openbis/resources/js/openbis-dsu.js"></script>
-  <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0-rc1/css/bootstrap.min.css">
-  <!-- To speed development, cache the requests -->
-  <!-- <script type="text/javascript" src="openbis-request-cache.js"></script> -->
-  <script>
-
-dsu = new openbis_dsu('/openbis/openbis', '/datastore_server');
-var vis;
-var didCreateVis = false;
-
-$(document).ready(function() {
-});
-
-function createVis()
-{ 
-	if (didCreateVis) return;
-	vis = d3.select("#main").append("div").attr("id", "vis");
-	didCreateVis = true;
-}
-
-function displayReturnedTable(data)
-{
-	if (data.error) {
-		console.log(data.error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	//console.log(data.result);
-	var dataToShow = data.result;
-
-	d3.select("#progress").remove()
-        d3.select("#button-group").remove()
-	
-	vis.append("p").text("");	
-	// Pick all div elements of the visualization
-	vis.selectAll("div")
-           .data(dataToShow.rows)
-	   .enter()
-	   .append("div")
-	   .html(function(row) { return row[0].value })
-
-	var button = d3.select("body")
-	               .append("div")
-
-        var invoices = [];
-        for (var i=0;i<data.result.rows.length;i++) { 
-           var val = data.result.rows[i][1].value; 
-           if (val) {
-             invoices.push(val)
-           } 
-        }
-
-        //console.log(invoices)
-
-	button.selectAll("button")
-	      .data(invoices)
-	      .enter()
-              .append("div")
-	      .append("button")
-              .attr("class", "btn btn-default btn-xs")
-              .attr("id", function(row) { return row; })
-              .attr("onclick", function(row) { return "callIngestionSetInvoice('" + row + "');" })
-	      .text(function(row) { return "Set Invoice sent: " + row;});
- 
-              /*.attr("id", function(row) { return row[1].value.split(' ')[3].split('.')[0] })
-              .attr("onclick", function(row) { return "callIngestionSetInvoice('" + row[1].value.split(' ')[3].split('.')[0] + "');" })
-	      .text(function(row) { return row[1].value.split(' ')[3].split('.')[0];}); */
-}
-
-function hideButtons(data)
-{
-        var buttonId = data.result.rows[0][0].value;
-	d3.select("#setInvoice").remove()
-        d3.select("#main").append("div").attr("id", "Done").append("p").text("Done " + buttonId);
-        //console.log(buttonId);
-        d3.select("button#" + String(buttonId)).remove();
-}
-
-
-/**
- * See ch.systemsx.cisd.openbis.plugin.query.shared.api.v1.IQueryApiServer.createReportFromAggregationService(String, String, String, Map<String, Object>)
-openbis.prototype.createReportFromAggregationService = function(dataStoreCode, serviceKey, parameters, action) {
-	ajaxRequest({
-		url: this.queryServiceUrl,
-		data: { "method" : "createReportFromAggregationService",
-		params : [ this.sessionToken, dataStoreCode, serviceKey, parameters ] },
-		success: action
-	});
-}
-
-*/
-
-function spinner (target) {
-     var opts = {
-	lines: 13, // The number of lines to draw
-	length: 7, // The length of each line
-	width: 4, // The line thickness
-	radius: 10, // The radius of the inner circle
-	corners: 1, // Corner roundness (0..1)
-	rotate: 0, // The rotation offset
-	color: '#000', // #rgb or #rrggbb
-	speed: 1, // Rounds per second
-	trail: 60, // Afterglow percentage
-	shadow: false, // Whether to render a shadow
-	hwaccel: false, // Whether to use hardware acceleration
-	className: 'spinner', // The CSS class to assign to the spinner
-	zIndex: 2e9, // The z-index (defaults to 2000000000)
-	top: 250, // Top position relative to parent in px
-	left: 'auto' // Left position relative to parent in px
-      };
-      var spinner = new Spinner(opts).spin(target);
-}
-
-
-function callIngestionSetInvoice(piFile)
-{
-        var context = new openbisWebAppContext();
-        var sampleIdentifier = context.getEntityIdentifier()
-        var principalInvestigator = piFile.split(".")[0]
-        console.log('principalInvestigator:')
-        console.log(principalInvestigator)
-
-        dsu.server.useSession(context.getSessionId());
-        var parameters = 
-        {
-                sampleId : sampleIdentifier,
-                pI : principalInvestigator
-        };
-        
-        d3.select("#main").append("div").attr("id", "setInvoice").append("p").text("Setting Invoice Sent Property of " + piFile);
-        var target = document.getElementById('setInvoice');
-        spinner(target) 
-        dsu.server.createReportFromAggregationService("DSS1", "setInvoiceSent", parameters, hideButtons);		
-}
-
-
-function callIngestionService()
-{
-	var context = new openbisWebAppContext();
-        var sampleIdentifier = context.getEntityIdentifier()
-        var mySendEmail = $('input[name=sendEmail]').is(':checked')
-
-	d3.select("#main").select("#progress").remove()
-	d3.select("#main").select("#vis").remove()
-	didCreateVis = false;
-	dsu.server.useSession(context.getSessionId());
-	createVis()
-	var parameters = 
-	{
-		sampleId : sampleIdentifier,
-                sendEmail : mySendEmail 
-	};
-        
-	d3.select("#main").append("div").attr("id", "progress").append("p").text("Creating invoices...");
-        var target = document.getElementById('progress');
-        spinner(target) 
-	dsu.server.createReportFromAggregationService("DSS1", "triggerInvoice", parameters, displayReturnedTable);
-}
-
- </script>
-</head>
-<body>
-<div id="main">
-    <div id="checkbox-group">
-      <br>
-    </div>
-    <div id="button-group">
-      <button class="btn btn-default btn-xs" id="createInvoice-button" onclick="callIngestionService();">Create Invoices</button>
-    </div>
-</div>
-</body>
-</html>
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/invoicing/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/invoicing/plugin.properties
deleted file mode 100644
index e88648bf0ec..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/invoicing/plugin.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-# The properties file for an example webapps plugin
-# This file has no properties defined because none need to be defined.
-webapp-folder = html
-openbisui-contexts = sample-details-view
-sample-entity-types = ILLUMINA_FLOW_CELL
-label = Invoices
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/laneStatistics/html/index.html b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/laneStatistics/html/index.html
deleted file mode 100644
index bc7cc543b84..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/laneStatistics/html/index.html
+++ /dev/null
@@ -1,1037 +0,0 @@
-	<!DOCTYPE html>
-<html>
-  <head>
-    <title>Lane Statistics</title>
-    <script type="text/javascript" src="/openbis/resources/js/d3.v3.min.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/d3.layout.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/pie.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/openbis-dsu.js"></script>
-    <script type="text/javascript" src="/openbis/resources/js/FileSaver.js"></script>
-    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-    <link rel="stylesheet" type="text/css" href="style.css" />
-  </head>
-  <body>
-  <script>
- 
-  dsu = new openbis_dsu('/openbis/openbis', '/datastore_server');
-  var webAppContext = new openbisWebAppContext();
-  dsu.server.useSession(webAppContext.getSessionId());
-
-  globalWidthBar = 80
-
-  var div = d3.select("body").append("div")
-    .attr("class", "tooltip")
-    .style("opacity", 0);
-
-  // used for sorting by of the final array of objects
-  function compare(a,b) {
-    if (a.externalSampleName < b.externalSampleName)
-       return -1;
-    if (a.externalSampleName > b.externalSampleName)
-      return 1;
-    return 0;
-  }
-
-  if (typeof String.prototype.startsWith != 'function') {
-  // see below for better implementation!
-  String.prototype.startsWith = function (str){
-    return this.indexOf(str) === 0;
-  };
-}
-
-
-	/*
-	 * Natural Sort algorithm for Javascript - Version 0.6 - Released under MIT license
-	 * Author: Jim Palmer (based on chunking idea from Dave Koelle)
-	 * Contributors: Mike Grier (mgrier.com), Clint Priest, Kyle Adams, guillermo
-	 */
-	function naturalSort (a, b) {
-		var re = /(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi,
-			sre = /(^[ ]*|[ ]*$)/g,
-			dre = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,
-			hre = /^0x[0-9a-f]+$/i,
-			ore = /^0/,
-			// convert all to strings and trim()
-			x = a.externalSampleName.toString().replace(sre, '') || '',
-			y = b.externalSampleName.toString().replace(sre, '') || '',
-			// chunk/tokenize
-			xN = x.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'),
-			yN = y.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'),
-			// numeric, hex or date detection
-			xD = parseInt(x.match(hre)) || (xN.length != 1 && x.match(dre) && Date.parse(x)),
-			yD = parseInt(y.match(hre)) || xD && y.match(dre) && Date.parse(y) || null;
-		// first try and sort Hex codes or Dates
-		if (yD)
-			if ( xD < yD ) return -1;
-			else if ( xD > yD )	return 1;
-		// natural sorting through split numeric strings and default strings
-		for(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) {
-			// find floats not starting with '0', string or 0 if not defined (Clint Priest)
-			oFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0;
-			oFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0;
-			// handle numeric vs string comparison - number < string - (Kyle Adams)
-			if (isNaN(oFxNcL) !== isNaN(oFyNcL)) return (isNaN(oFxNcL)) ? 1 : -1; 
-			// rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'
-			else if (typeof oFxNcL !== typeof oFyNcL) {
-				oFxNcL += ''; 
-				oFyNcL += ''; 
-			}
-			if (oFxNcL < oFyNcL) return -1;
-			if (oFxNcL > oFyNcL) return 1;
-		}
-		return 0;
-	}
-
-
-  loadData()
-  
-function loadData () { 
-
-  sampleToParentsMap = {};
-  dataSetToParentMap = {};
-  dataSetMap = {};
-  parentToDataSets = {};
-  realValueMap = {};
-  bclVersion = "";
-
-  d3.select("body")
-    .append("text")
-    .attr("id", "generating")
-    .text("Generating graphics...")
-
-  dsu.retrieveSampleParents(webAppContext.getEntityPermId(), function(parentResponse){
-	 //console.log("Got parents: " + parentResponse.result.length);
-	 var parentPermIds = [];
-	 
-	 parentResponse.result.forEach(function(parent){
-		parentPermIds.push(parent.permId);	 
-	 });
-	 
-	 dsu.retrieveSampleChildren(parentPermIds, function(childrenResponse){
-		// console.log("Got children: " + childrenResponse.result.length);
-		
-                var childrenPermIds = [];
-		
-		childrenResponse.result.forEach(function(child){
-		       childrenPermIds.push(child.permId);
-                       sampleToParentsMap[child.identifier] = child.parents;
-		});
-
-		dsu.retrieveDataSetsForSampleWithPermIds(childrenPermIds, function(dataSetResponse){
-			// console.log("Got datasets: " + dataSetResponse.result.length);
-
-                        dataSetResponse.result.forEach(function(dataSet){
-                              var index1 = dataSet.properties['BARCODE'];
-                              var index2 = dataSet.properties['INDEX2'];
-                              var parents = sampleToParentsMap[dataSet.sampleIdentifierOrNull];
-                              
-                              dataSetMap[dataSet.code] = dataSet
-
-                              // console.log("DATA Set:")
-                              // console.log(index1)
-                              //console.log(index2)
-
-                              parents.forEach(function(parent){
-                                 var parentIndex1 = parent.properties['BARCODE'];
-                                 var parentIndex2 = parent.properties['INDEX2'];
-
-                                 // console.log("PARENT SAMPLE:")
-                                 // console.log(parentIndex1)
-                                 // console.log(parentIndex2)
-
-                                 if(index1 == parentIndex1 && (!index2 || !parentIndex2 || index2 == parentIndex2 || index2 == "NOINDEX")){
-                                     dataSetToParentMap[dataSet.code] = parent;
-                                     if (!(parent.code in parentToDataSets)) {
-                                         parentToDataSets[parent.code] = [dataSet]
-                                     }
-                                     else {
-                                         // key already exists
-                                         parentToDataSets[parent.code].push(dataSet)
-                                     }
-                                 }
-                                 // non-multiplexed run, so no index set
-                                 if (parentIndex1 == undefined && parentIndex2 == undefined) {                                     
-                                 	dataSetToParentMap[dataSet.code] = parent;
-                                 	parentToDataSets[parent.code] = [dataSet]
-								 }
-								 if (parentIndex2 == undefined) {
-
-								 }
-
-
-                              });
-                        });
-                        // console.log("SampleToParentsMap: ");
-                        // console.log(sampleToParentsMap);
-                        // console.log("DataSetToParentMap: ");
-                        // console.log(dataSetToParentMap);
-                        // console.log("DataSets: ");
-                        // console.log(dataSetMap) 
-                        // console.log("parentToDataSets: ");
-                        // console.log(parentToDataSets)
-
-                        $.each( parentToDataSets, function( key, value ) {
-                        	var cumSumYieldMbases = 0;
-                        	var cumSumPfReadsSum = 0;
-  			  			  	// console.log( key );
-                          	$.each (value, function (index, dataset) {
-
-    	                        cumSumYieldMbases += parseInt(dataset.properties['YIELD_MBASES']);
-	                            cumSumPfReadsSum += parseInt(dataset.properties['PF_READS_SUM']);
-                          	});
-                          realValueMap[key] = [cumSumYieldMbases, cumSumPfReadsSum]
-						});
-                        //console.log(realValueMap)
-
-
-						statisticsArray = [];
-						targetedArray = [];
-						noIndex = false;
-						 
-						var dataSetProperties;
-						dsu.retrieveDataSetsForSample(webAppContext.getEntityIdentifier(), getProperties);
-
-						function getProperties(dataSetProperties) {
-
-						    dsu.retrieveSampleParents(webAppContext.getEntityPermId(), getParentProperties);
-
-						    function getParentProperties (sampleProperties) {
-						    	
-						    	// d3.select("body").append("text").text("Loading...") 
-
-						    	for (var i = 0; i < sampleProperties.result.length; i++) {
-						        	targetedArray.push ({
-						                           'targeted_yield_in_gigabases_pf' : sampleProperties.result[i].properties.TARGETED_YIELD_IN_GIGABASES_PF,
-						                           'targeted_read_count_in_million_pf' : sampleProperties.result[i].properties.TARGETED_READ_COUNT_IN_MILLION_PF,
-						                           'externalSampleName' : sampleProperties.result[i].properties.EXTERNAL_SAMPLE_NAME,
-						                           'parentSampleCode' : sampleProperties.result[i].code
-						        	});
-        						}
-		    					// console.log("targetedArray:");
-		    					// console.log(targetedArray);
-		    					// console.log(dataSetProperties)
-		    					// console.log("realValueMap:")
-		    					// console.log(realValueMap)
-    
-	    						for (var i = 0; i < dataSetProperties.result.length; i++) {
-	      							for (var j = 0; j < targetedArray.length; j++) {
-	        							if (targetedArray[j]['externalSampleName'] == dataSetProperties.result[i].properties.EXTERNAL_SAMPLE_NAME){
-
-	        								//console.log(targetedArray[j]['externalSampleName'])
-
-	        								//console.log(realValueMap)
-	        								//console.log(targetedArray[j])
-	          								statisticsArray.push({
-					                            'qgfName' : targetedArray[j]['parentSampleCode'],
-   					                            'externalSampleName' : dataSetProperties.result[i].properties.EXTERNAL_SAMPLE_NAME,
-					                            'index1': dataSetProperties.result[i].properties.BARCODE,
-					                            'index2': dataSetProperties.result[i].properties.INDEX2,
-					                            'percFilteringPass' : parseFloat(dataSetProperties.result[i].properties.PERCENTAGE_PASSED_FILTERING).toFixed(2),
-					                            'rawReadsSum' : dataSetProperties.result[i].properties.RAW_READS_SUM,
-					                            'pfReadsSum' : dataSetProperties.result[i].properties.PF_READS_SUM,
-					                            'rawYieldMbases' : dataSetProperties.result[i].properties.RAW_YIELD_MBASES,
-					                            'yieldMbases' : dataSetProperties.result[i].properties.YIELD_MBASES,
-					                            'percRawClustersPerLane': parseFloat(dataSetProperties.result[i].properties.PERCENTAGE_RAW_CLUSTERS_PER_LANE).toFixed(2),
-					                            'pfMeanQualityScore' : parseFloat(dataSetProperties.result[i].properties.PFMEANQUALITYSCORE).toFixed(2),
-					                            'pfYieldq30Percentage' : parseFloat(dataSetProperties.result[i].properties.PFYIELDQ30PERCENTAGE).toFixed(2),
-					                            'real_yield_in_gigabases_pf' : realValueMap[targetedArray[j]['parentSampleCode']][0],
-					                            'real_read_count_in_million_pf' : realValueMap[targetedArray[j]['parentSampleCode']][1],
-					                            'targeted_yield_in_gigabases_pf' : parseFloat(targetedArray[j]['targeted_yield_in_gigabases_pf']),
-					                            'targeted_read_count_in_million_pf' : targetedArray[j]['targeted_read_count_in_million_pf']
-					                        }); 
-	        							} 
-	        							else if (dataSetProperties.result[i].properties.BARCODE == 'NOINDEX' && noIndex == false) {
-	          								noIndex = true; 
-	          								statisticsArray.push({
-	          									'qgfName' : 'NA',
-					                            'externalSampleName' : "NOINDEX",
-					                            'index1': dataSetProperties.result[i].properties.BARCODE,
-					                            'index2': dataSetProperties.result[i].properties.INDEX2,
-					                            'percFilteringPass' : parseFloat(dataSetProperties.result[i].properties.PERCENTAGE_PASSED_FILTERING).toFixed(2),
-					                            'rawReadsSum' : dataSetProperties.result[i].properties.RAW_READS_SUM,
-					                            'pfReadsSum' : dataSetProperties.result[i].properties.PF_READS_SUM,
-					                            'rawYieldMbases' : dataSetProperties.result[i].properties.RAW_YIELD_MBASES,
-					                            'yieldMbases' : dataSetProperties.result[i].properties.YIELD_MBASES,
-					                            'percRawClustersPerLane': parseFloat(dataSetProperties.result[i].properties.PERCENTAGE_RAW_CLUSTERS_PER_LANE).toFixed(2),
-					                            'pfMeanQualityScore' : parseFloat(dataSetProperties.result[i].properties.PFMEANQUALITYSCORE).toFixed(2),
-					                            'pfYieldq30Percentage' : parseFloat(dataSetProperties.result[i].properties.PFYIELDQ30PERCENTAGE).toFixed(2),
-					                            'real_yield_in_gigabases_pf' : 0,
-					                            'real_read_count_in_million_pf' : 0,
-					                            'targeted_yield_in_gigabases_pf' : parseFloat(0.0),
-					                            'targeted_read_count_in_million_pf' : 0
-	                           				});
-	        							} // else if
-	      							}  // for
-	    						} // for
-
-                                //   console.log("statisticsArray")
-							    // console.log(statisticsArray)
-
-							    statisticsArray.sort(naturalSort);
-							    var sums = calculateSum(statisticsArray, true)
-							    var sumsWithNOINDEX = calculateSum(statisticsArray, false)
-								d3.select("#generating").remove();
-                                                            
-                                dsu.retrieveSampleWithProperties(webAppContext.getEntityPermId(), function(laneResponse){
-                                	bclVersion = laneResponse.result[0].properties.BCL_VERSION
-                                        if (bclVersion !== undefined) {
-					  if (bclVersion.startsWith("bcl2fastq v2")) {
-						  clusters = "Clusters";
-					  }
-					  else {
-						  clusters = "Reads";
-					  }
-                                        }
-                                        else {clusters = "Reads"};
-								    if (! isNaN(statisticsArray[0].percFilteringPass)) {
-								    	plotLaneTable(sumsWithNOINDEX, false)
-										// TODO: removed for now, as there is a bug 
-								    	// placeholder();									
-								    	// plotLaneTable(sums, true)
-								    	placeholder();
-								    	plotTable (statisticsArray, clusters);
-								    	downloadButton ("tableStats");
-								    	placeholder();
-								    	plotPercFilteringPass (statisticsArray);
-								    	downloadButton ("filteredChart");
-								    	plotReadsSum (statisticsArray, sums, clusters);
-								    	downloadButton ("unfilteredReads");
-								    	plotPFReads (statisticsArray, sums, clusters);
-								    	downloadButton ("PFReads");
-								    	plotPercRawClustersPerLane (statisticsArray);
-								    	downloadButton ("percRawClusters");
-
-								    	$("#save_as" + "tableStats").click(function() { submit_download_form("html", "tableStats"); });
-								    	$("#save_as" + "filteredChart").click(function() { submit_download_form("svg", "filteredChart"); });
-								    	$("#save_as" + "unfilteredReads").click(function() { submit_download_form("svg", "unfilteredReads"); });
-								    	$("#save_as" + "PFReads").click(function() { submit_download_form("svg", "PFReads"); });
-								    	$("#save_as" + "percRawClusters").click(function() { submit_download_form("svg", "percRawClusters"); });
-							    	}
-
-							    	else {
-							    		d3.select("body").append("text").text("No data available!") 
-							    	}
-							    }); //retrieveSampleWithProperties
-        		} // function getParentProperties (sampleProperties)
-        	} // function getProperties(dataSetProperties) 
- 		});
-	 });
-  });
-
-}
- 
-colors = ["#FED976", "#FEB24C", "#FD8D3C", "#FC4E2A", "#E31A1C", "#800026", "#610B5E", "#4C0B5F",
-          "#0B0B61", "#0B4C5F", "#0B5F48","#0B5F1E", "#4C5F0B", "#5F480B", "#5F1E0B", "#5F0B22",
-           ]
-var formatThousands = d3.format(",");
-
-function isNumber(n) {
-  return !isNaN(parseFloat(n)) && isFinite(n);
-}
-
-function plotLaneTable (sums, withNOINDEX) {
-
-  //d3.select("body").append("text")
-  //  .text("Lane Based Summary Table") 
-  //  .attr("class", "h5");
-  
-  d3.select("body").append("text")
-    .text(function (){if (withNOINDEX) {return "Lane without reads which failed demultiplexing (NOINDEX)";} return " Total Lane";}) 
-    .attr("class", "h6");
-
-
-  var laneTableStats = d3.select("body")
-    .append("table")
-    .attr("id", "tableLaneStats")
-    .attr("class", "tableStats")
-    ;
-
-  headerplotLaneTable = {};
-  headerplotLaneTable ["Average Passed Filtering (PF)"] = 1
-  headerplotLaneTable ["Sum Raw " + clusters] = 1
-  headerplotLaneTable ["Sum PF " + clusters] = 1
-  headerplotLaneTable ["Sum Raw Bases"] = 1
-  headerplotLaneTable ["Sum PF Bases"] = 1
-  headerplotLaneTable ["Average Raw " + clusters + " in % per Index"] = 1
-  headerplotLaneTable ["Average PF Phred Score"] = 1
-  headerplotLaneTable ["Average > 30 Phred Score"] = 1
-
-  // create the table header
-  var thead = laneTableStats.selectAll("th")
-              .data(d3.keys(headerplotLaneTable))
-              .enter().append("th")
-              .text(function(d){return d})
-              ;
-
-  // fill the table
-  // create rows
-  var tr = laneTableStats.selectAll("tr")
-           .data(sums).enter().append("tr")
-
-  // cells
-  var td = tr.selectAll("td")
-    .data(function(d){return d3.values(d)})
-    .enter().append("td")
-    .text(function(d) {if (isNumber(d)) {return formatThousands(d)}; return d;})
-    .style("text-align", function(d){if (isNumber(d)) {return "right"} return "left"})
-    ;
-}
-
-function plotTable (statisticsArray, clusters) {
-  
-  /*
-  d3.select("body").append("text")
-    .text("Index Based Summary Table") 
-    .attr("class", "h4");
-  */
-
-  var tableStats = d3.select("body")
-    .append("table")
-    .attr("id", "tableStats")
-    .attr("class", "tableStats")
-    ;
-
-  header = {};
-
-  header["Sample ID"] = "Unique Genomics Facility Identifier of sample"
-  header["Sample Name"] = "Sample name given by customer"
-  header["Index1"] = "First Index"
-  header["Index2"] = "Second Index"
-  header["% PF " + clusters] = "High quality reads passing Illumina filtering criteria"
-  header["Raw " + clusters] = "Number of all " + clusters
-  header["PF " + clusters] = "Number of " + clusters + " which passed the Illumina Filter"
-  header["Raw Bases"] = "Number of all Bases"
-  header["PF Bases"] = "Number of all Bases which passed the Illumina Filter"
-  header["% in Lane"] = "Percentage of this Index within the Lane"
-  header["Mean Phred Score"] = "Mean Phred Score (0-40)"
-  header["% of >= Q30 Bases (PF)"] = ""
-  header["Total Yield"] = "Total yield (bases) over all lanes the sample was sequenced"
-  header["Total " + clusters + " #"] = "Total " + clusters + " count over all lanes the sample was sequenced"
-  header["Targeted Yield"] = "Targeted yield inheader"
-  header["Targeted " + clusters + " #"] = "Targeted " + clusters + " Count in million (PF)"
-  
-  // create the table header
-  var thead = tableStats.selectAll("th")
-              //.data(d3.keys(statisticsArray[0])) // got replaced with more readable names
-              .data(d3.keys(header))
-              .enter().append("th")
-              .text(function(d){return d})
-              .data(d3.values(header))
-              .on("mouseover", function(d) {
-                  div.transition()
-                    .duration(200)
-                    .style("opacity", .9);
-                 div.style("width", "140px")
-                 div.html(d)
-                .style("left", (d3.event.pageX - 70) +"px")
-                .style("top", (d3.event.pageY + 42) + "px");
-              })
-             .on("mouseout", function(d) {
-                 div.transition()
-                    .duration(500)
-                    .style("opacity", 0);
-              })
-              ;
-
-  // fill the table
-  // create rows
-  var tr = tableStats.selectAll("tr")
-           .data(statisticsArray).enter().append("tr")
-
-  // cells
-  var td = tr.selectAll("td")
-    .data(function(d){return d3.values(d)})
-    .enter().append("td")
-    .text(function(d) {if (isNumber(d)) {return formatThousands(d)}; return d;})
-    //.on("mouseover", function(){d3.select(this).style("background-color", "aliceblue")})
-    //.on("mouseout", function(){d3.select(this).style("background-color", "white")})
-    .style("text-align", function(d){if (isNumber(d)) {return "right"} return "left"})
-    .attr('class', function(d,i){ return "col_" + i; })
-    /*.style("background", function(d,i){ if (d3.values(statisticsArray)[i] != undefined) {
-                                console.log(d3.values(statisticsArray)[i]);
-                               // if (parseInt(d3.values(statisticsArray)[i].pfReadsSum) >= 1000000 )
-                                if (parseInt(d3.values(statisticsArray)[i].pfReadsSum) >= 1000000 * parseInt(d3.values(statisticsArray)[i].targeted_read_count_in_million_pf))
-                                   {return "lightgreen";} return "red"
-                                   ;}
-                                });
-  */
-
-  realValue = 0;
-  realValueBases = 0;
-  var td = d3.selectAll("#tableStats tr").selectAll("td")
-  td.style("color", function(d, i) { 
-                          if (i==13) {realValue = d;}
-                          if (i==12) {realValueBases = d;}
-                          if (d != undefined) {
-                             if (i==15) {
-                               // console.log(parseInt(d) * 1000000 + ">= " + realValue);
-                               if ( parseInt(d) * 1000000 >= realValue)  {return "red"; } 
-                             else { return "green";}
-                             } 
-                             if (i==14) {
-                               // console.log(realValueBases + " >= " + parseFloat(d) * 1000000000);
-                               if ( realValueBases >= parseFloat(d) * 1000000000 )  {return "green"; } 
-                             else { return "red";}
-                             } 
-                          }
-  });
-
-  //console.log(statisticsArray)
-}
-
-
-function placeholder() {
-
-var space = d3.select("body")
-              .append("svg")
-              .attr("id", "placeholder")
-              .attr("width", 1000)
-              .attr("height", 30)
-              ;
-}
-
-function plotPercFilteringPass (statisticsArray) {
-
-  if (statisticsArray.length > 60) {var svgWidth = 7000;}
-  else if (statisticsArray.length > 10) {var svgWidth = 5000;}
-  else {var svgWidth = 3000;}
-
-  svgWidth = statisticsArray.length * globalWidthBar
-  if (svgWidth < 200) {svgWidth = 400;}
-
-
-  var barPadding = 1;
-  var valuePadding = 0.02;
-  var agenda = [100,90,80,70,60,50,40,30,20,10,0]
-  var agendaWidth = 100
-  var AgendaWidthOffset = 30
-
-  var margin = {top: 20, right: 20, bottom: 40, left: 40},
-    svgWidth = svgWidth - margin.left - margin.right,
-    svgHeight = 250 - margin.top - margin.bottom;
-
- //  var svgFilteredChartAgenda = d3.select("body")
- //                           .append("svg")
- //                           .attr("id", "chartAgenda")
- //                           .attr("width", agendaWidth )
- //                           .attr("height", svgHeight + margin.top + margin.bottom)
- //                           ;  
-
- // var filteredChartAgenda = svgFilteredChartAgenda.selectAll("percFilteringPassChartAgenda")
- //                                      .data(agenda)
- //                                      .enter()
- //                                      .append("rect")
- //                                      .attr("rx", 3)
- //                                      .attr("y", function(d, i) { return i * (svgHeight / agenda.length) ;})
- //                                      .attr("x", function(d) { return 0; })
- //                                      .attr("width", function (d) { return agendaWidth - AgendaWidthOffset })
- //                                      .attr("height", function (d) { return  svgHeight / agenda.length - barPadding;})
- //                                      .attr("fill", function (d) { return "hsla("+ Math.round(d)*1.2 +", 40%, 30%, 1)"});
-  
- //  svgFilteredChartAgenda.selectAll("agendaText")
- //   		  .data(agenda)
- //   		  .enter()
- //   		  .append("text")
- //   		  .text(function(d) { return d + " %"; })
- //                  .attr("fill", function(d) { return "white";})
- //   		  .attr("x", function(d) { return (agendaWidth - AgendaWidthOffset)/2 ; })
- //   		  .attr("y", function(d, i) { return i *  (svgHeight / agenda.length) +  (svgHeight / agenda.length - barPadding) / 2 + 3;}) 
- //   		  .attr("font-family", "sans-serif")
-	//           .attr("font-size", "10px")
-	//           .attr("text-anchor", "middle")
-	//           ;
-  
-  var svgFilteredChart = d3.select("body")
-                           .append("svg")
-                           .attr("id", "filteredChart")
-			   .attr("width", svgWidth + margin.left + margin.right)
-    	    		   .attr("height", svgHeight + margin.top + margin.bottom)
-                           .append("g")
-                           .attr("transform", "translate(" + margin.left + "," + margin.top + ")")
-                           ;
-
-  svgFilteredChart.append('text')
-                  .text("% passes Illumina Filtering (PF)")
-                  .attr("transform", "translate(" + (svgWidth/2) + "," + (svgHeight - 200) + ")")
-                  .attr("font-family", "sans-serif")
-                  .attr("font-size", "14px")
-                  .attr("text-anchor", "middle")
-                  ;
-
-  var x = d3.scale.ordinal()
-    .rangeRoundBands([0, svgWidth], valuePadding);
-    //.rangeRoundBands([0, svgWidth], .001);
-
-  var y = d3.scale.linear()
-    .range([svgHeight, 0]);
- 
-  var xAxis = d3.svg.axis()
-    .scale(x)
-    .orient("bottom")
-    //.tickPadding(25);
-
-  var yAxis = d3.svg.axis()
-    .scale(y)
-    .orient("left");
-    //.tickFormat(formatPercent);
- 
-  //x.domain(statisticsArray.map(function(d) { return d.externalSampleName+":  "+d.index1;} ));
-  x.domain(statisticsArray.map(function(d) { if (d.externalSampleName == undefined ) {return d.index1}; return d.externalSampleName; }));
-  //y.domain([0, d3.max(statisticsArray, function(d) { return d.percFilteringPass; })]);
-  y.domain([0, 100]);
-
-  svgFilteredChart.append("g")
-      .attr("class", "axis")
-      .attr("transform", "translate(0," + svgHeight + ")")
-      .call(xAxis);
-
-  var filteredChart = svgFilteredChart.selectAll("percFilteringPassChart")
-                                      .data(statisticsArray)
-                                      .enter()
-                                      .append("rect")
-                                      .attr("rx", 3)
-                                      .attr ("x", function (d) {return x(d.externalSampleName+d.index1);})
-                                      .attr ("width", x.rangeBand())
-                                      .attr ("y", function (d,i) {return y(d.percFilteringPass);})
-                                      .attr("height", function (d,i) {return svgHeight - y(d.percFilteringPass);})
-                                      .attr("fill", function (d) { return "hsla("+ Math.round(d.percFilteringPass)*1.2 +", 40%, 30%, 1)"});
-
-  svgFilteredChart.selectAll(".axis text")  // select all the text elements for the xaxis
-    .data(statisticsArray)
-    .attr ("y", function(d, i) {if (i%2 == 0) {return 8} return 22}); // if index is even then put the text up, else further down
-
-  svgFilteredChart.append("g")
-      .attr("class", "y axis")
-      .call(yAxis)
-      .append("text")
-      .attr("transform", "rotate(0)")
-      .attr("x", 16)
-      .attr("dy", ".71em")
-      .style("text-anchor", "end")
-      .text("%");
-
-
-  svgFilteredChart.selectAll("svgFilteredChartText")
-     .data(statisticsArray)
-     .enter()
-     .append("text")
-     .text(function(d) { return d.percFilteringPass + " %"; })
-     //.attr("x", function(d, i) { return i * 1/(1+valuePadding)*(svgWidth / statisticsArray.length) + ((svgWidth /statisticsArray.length ) /2) -15; })
-     //.attr("x", function(d, i) { return i * 1/(1+0.007)*(svgWidth / statisticsArray.length) + ((svgWidth /statisticsArray.length ) /2) ; })
-     .attr ("x", function (d) {return x(d.externalSampleName+d.index1) + 15;})
-     .attr("y", function(d) {
-                   if (d.percFilteringPass < 40) { return svgHeight - d.percFilteringPass - margin.top - margin.bottom; }
-                   return (svgHeight - d.percFilteringPass  - margin.bottom) ;
-                  })
-     .attr("font-family", "sans-serif")
-     .attr("font-size", "12px")
-     .attr("fill", function(d) { if (d.percFilteringPass < 60) { return "black";}
-                             return "white";})
-}
-
-
-function plotReadsSum (statisticsArray, sums, clusters){
-
-  svgWidth = statisticsArray.length * globalWidthBar
-  if (svgWidth < 200) {svgWidth = 300;}
-
-  var formatThousands = d3.format(",");
-  var colorRange = d3.scale.ordinal()
-      .range(colors);
-
-
- 
-  var margin = {top: 50, right: 20, bottom: 30, left: 40},
-    svgWidth = svgWidth - margin.left - margin.right,
-    svgHeight = 250 - margin.top - margin.bottom;
-
-  var barPadding = 1;
-  var valuePadding = 0.01;
-
-  var svgReadsSum = d3.select("body")
-                           .append("svg")
-                           .attr("id", "unfilteredReads")
-                           .attr("width", svgWidth + margin.left + margin.right)
-                           .attr("height", svgHeight + margin.top + margin.bottom)
-                           .append("g")
-                           .attr("transform", "translate(" + margin.left + "," + margin.top + ")")
-                           ;
-
-  var rawReadsSum = 0;
-  rawReadsSum = sums[0].rawReadsSum
-
-  svgReadsSum.append('text')
-                  .text("Number of raw " + clusters + ": " +  formatThousands(rawReadsSum))
-                  .attr("transform", "translate(" + (svgWidth/2) + "," + (svgHeight - 200) + ")")
-                  .attr("font-family", "sans-serif")
-                  .attr("font-size", "14px")
-                  .attr("text-anchor", "middle")
-                  ;
-
-
-  var x = d3.scale.ordinal()
-    .rangeRoundBands([0, svgWidth], valuePadding);
-
-  var y = d3.scale.linear()
-    .range([svgHeight, 0]);
- 
-  var xAxis = d3.svg.axis()
-    .scale(x)
-    .orient("bottom");
-
-  var yAxis = d3.svg.axis()
-    .scale(y)
-    .orient("left");
- 
-  x.domain(statisticsArray.map(function(d) { if (d.externalSampleName == undefined ) {return d.index1}; return d.externalSampleName; }));
-  y.domain([0, d3.max(statisticsArray, function(d) { return d.rawReadsSum - 20; })]);
-
-  svgReadsSum.append("g")
-      .attr("class", "axis")
-      .attr("transform", "translate(0," + svgHeight + ")")
-      .call(xAxis);
-
-  // alternate between minimal padding and high padding of the tick names
-  svgReadsSum.selectAll(".axis text")  // select all the text elements for the xaxis
-    .data(statisticsArray)
-    .attr ("y", function(d, i) {if (i%2 == 0) {return 8} return 22}); // if index is even the put the text up, else further down
-
-
-  var ReadsSum = svgReadsSum.selectAll("ReadsSum")
-                                      .data(statisticsArray)
-                                      .enter()
-                                      .append("rect")
-                                      .attr("rx", 3)
-                                      .attr ("x", function (d) {return x(d.externalSampleName+d.index1);})
-                                      .attr ("width", x.rangeBand())
-                                      .attr ("y", function (d,i) {return y(d.rawReadsSum) ;})
-                                      .attr("height", function (d,i) {return svgHeight - y(d.rawReadsSum);})
-                                      //  .attr("fill", function (d) { return "hsla("+ Math.round(d.rawReadsSum)*1.2 +", 40%, 30%, 1)"});
-                                      .attr("fill", function(d) { return colorRange(d.rawReadsSum); })
-                                      ;
-
-  svgReadsSum.selectAll("svgReadsSumText")
-     .data(statisticsArray)
-     .enter()
-     .append("text")
-     .text(function(d) { return formatThousands(d.rawReadsSum); })
-     //.attr("x", function(d, i) { return i * 1/(1+valuePadding)*(svgWidth / statisticsArray.length) + ((svgWidth /statisticsArray.length ) /2) -10; })
-     .attr ("x", function (d) {return x(d.externalSampleName+d.index1) + 10;})
-     // .attr("y", function(d) {
-     //               return (svgHeight - margin.top - margin.bottom + 20) ;
-     //              })
-   	 .attr("y", function(d) {return y(d.rawReadsSum) - 8;})
-     .attr("font-family", "sans-serif")
-     .attr("font-size", "10px")
-     .attr("fill", function(d) { if (d.rawReadsSum < 30000000) { return "black";}
-                             return "black";})
-
-     ;
-
-}
-
-
-
-function plotPFReads (statisticsArray, sums, clusters){
-
-  svgWidth = statisticsArray.length * globalWidthBar
-  if (svgWidth < 200) {svgWidth = 300;}
-
-  var formatThousands = d3.format(",");
-  var colorRange = d3.scale.ordinal()
-      .range(colors);
-
-
-
-  var margin = {top: 50, right: 20, bottom: 30, left: 40},
-    svgWidth = svgWidth - margin.left - margin.right,
-    svgHeight = 250 - margin.top - margin.bottom;
-
-  var barPadding = 1;
-  var valuePadding = 0.01;
-
-  var svgPFReads = d3.select("body")
-                           .append("svg")
-                           .attr("id", "PFReads")
-                           .attr("width", svgWidth + margin.left + margin.right)
-                           .attr("height", svgHeight + margin.top + margin.bottom)
-                           .append("g")
-                           .attr("transform", "translate(" + margin.left + "," + margin.top + ")")
-                           ;
-
-  var pfReadsSum = 0;
-  pfReadsSum = sums[0].pfReadsSum
-
-  svgPFReads.append('text')
-                  .text("Number of PF " + clusters + ": " +  formatThousands(pfReadsSum))
-                  .attr("transform", "translate(" + (svgWidth/2) + "," + (svgHeight - 200) + ")")
-                  .attr("font-family", "sans-serif")
-                  .attr("font-size", "14px")
-                  .attr("text-anchor", "middle")
-                  ;
-
-
-  var x = d3.scale.ordinal()
-    .rangeRoundBands([0, svgWidth], valuePadding);
-
-  var y = d3.scale.linear()
-    .range([svgHeight, 0]);
-
-  var xAxis = d3.svg.axis()
-    .scale(x)
-    .orient("bottom");
-
-  var yAxis = d3.svg.axis()
-    .scale(y)
-    .orient("left");
-
-  x.domain(statisticsArray.map(function(d) { if (d.externalSampleName == undefined ) {return d.index1}; return d.externalSampleName; }));
-  y.domain([0, d3.max(statisticsArray, function(d) { return d.pfReadsSum - 20; })]);
-
-  svgPFReads.append("g")
-      .attr("class", "axis")
-      .attr("transform", "translate(0," + svgHeight + ")")
-      .call(xAxis);
-
-  // alternate between minimal padding and high padding of the tick names
-  svgPFReads.selectAll(".axis text")  // select all the text elements for the xaxis
-    .data(statisticsArray)
-    .attr ("y", function(d, i) {if (i%2 == 0) {return 8} return 22}); // if index is even the put the text up, else further down
-
-
-  var ReadsSum = svgPFReads.selectAll("ReadsSum")
-                                      .data(statisticsArray)
-                                      .enter()
-                                      .append("rect")
-                                      .attr("rx", 3)
-                                      .attr ("x", function (d) {return x(d.externalSampleName+d.index1);})
-                                      .attr ("width", x.rangeBand())
-                                      .attr ("y", function (d,i) {return y(d.pfReadsSum) ;})
-                                      .attr("height", function (d,i) {return svgHeight - y(d.pfReadsSum);})
-                                      //  .attr("fill", function (d) { return "hsla("+ Math.round(d.pfReadsSum)*1.2 +", 40%, 30%, 1)"});
-                                      .attr("fill", function(d) { return colorRange(d.pfReadsSum); })
-                                      ;
-
-  svgPFReads.selectAll("svgPFReadsText")
-     .data(statisticsArray)
-     .enter()
-     .append("text")
-     .text(function(d) { return formatThousands(d.pfReadsSum); })
-     //.attr("x", function(d, i) { return i * 1/(1+valuePadding)*(svgWidth / statisticsArray.length) + ((svgWidth /statisticsArray.length ) /2) -10; })
-     .attr ("x", function (d) {return x(d.externalSampleName+d.index1) + 10;})
-     // .attr("y", function(d) {
-     //               return (svgHeight - margin.top - margin.bottom + 20) ;
-     //              })
-	 .attr("y", function(d) {return y(d.pfReadsSum) - 8;})
-     .attr("font-family", "sans-serif")
-     .attr("font-size", "10px")
-     .attr("fill", function(d) { if (d.pfReadsSum < 30000000) { return "black";}
-                             return "black";})
-
-     ;
-
-}
-
-
-function roundFloat(myFloat) {
-  return Number(myFloat).toFixed(2); 
-}
-
-
-function calculateSum(statisticsArray, withNOINDEX) {
-
-  var sums = []
-  var averagePercFilteringPass = 0;
-  var sumRawReads = 0;
-  var sumPfReads = 0;
-  var sumRawYieldMbases = 0;
-  var sumYieldMbases = 0;
-  var averagePercRawClustersPerLane = 0;
-  var averagePfMeanQualityScore = 0;
-  var averagePfYieldq30Percentage = 0;
-  
-  for (var i = 0; i < statisticsArray.length; i++) {
-    // do not calculate with the NOINDEX reads
-    if ((typeof (statisticsArray[i].externalSampleName) == 'undefined') && withNOINDEX) {
-       continue;
-    }  else {
-
-      averagePercFilteringPass = averagePercFilteringPass + parseFloat(statisticsArray[i].percFilteringPass);
-      sumRawReads = sumRawReads + parseInt(statisticsArray[i].rawReadsSum);
-      sumPfReads = sumPfReads + parseInt(statisticsArray[i].pfReadsSum);
-      sumRawYieldMbases = sumRawYieldMbases + parseInt(statisticsArray[i].rawYieldMbases);
-      sumYieldMbases = sumYieldMbases + parseInt(statisticsArray[i].yieldMbases);
-      averagePercRawClustersPerLane = averagePercRawClustersPerLane + parseInt(statisticsArray[i].percRawClustersPerLane);
-      averagePfMeanQualityScore = averagePfMeanQualityScore + parseInt(statisticsArray[i].pfMeanQualityScore);
-      averagePfYieldq30Percentage = averagePfYieldq30Percentage + parseInt(statisticsArray[i].pfYieldq30Percentage);
-    }
-  }
-  if (withNOINDEX) {penalty = -1} else {penalty = 0} 
- 
-  // added the Math.max function to make sure that there is no division by zero,
-  // can happen when a single sample is on a lane (no multiplexing) 
-  averagePercFilteringPass = roundFloat(averagePercFilteringPass / Math.max((statisticsArray.length + penalty),1));
-  averagePercRawClustersPerLane = roundFloat(averagePercRawClustersPerLane /Math.max((statisticsArray.length + penalty),1));
-  averagePfMeanQualityScore = roundFloat(averagePfMeanQualityScore / Math.max((statisticsArray.length + penalty),1));
-  averagePfYieldq30Percentage = roundFloat(averagePfYieldq30Percentage / Math.max((statisticsArray.length + penalty),1));
-
-  sums.push({
-                            'averagePercFilteringPass' : averagePercFilteringPass,
-                            'rawReadsSum' : sumRawReads,
-                            'pfReadsSum' : sumPfReads,
-                            'rawYieldMbases' : sumRawYieldMbases,
-                            'yieldMbases' : sumYieldMbases,
-                            'percRawClustersPerLane': averagePercRawClustersPerLane,
-                            'pfMeanQualityScore' : averagePfMeanQualityScore,
-                            'pfYieldq30Percentage' : averagePfYieldq30Percentage 
-                            });
-
-  //console.log(sums);
-  return sums;
-
-}
-
-
-function plotPercRawClustersPerLane (percRawClustersPerLaneArray) {
-
-  var colorRange = d3.scale.ordinal()
-      .range(colors)
-
-  var margin = {top: 60, right: 20, bottom: 40, left: 40},
-    width = 500 - margin.left - margin.right,
-    height = 500 - margin.top - margin.bottom;
-  
-  var  radius = Math.min(width, height) / 2;
-
-  var arc = d3.svg.arc()
-      .outerRadius(radius - 50)
-      .innerRadius(radius - 90);
-
-  var pie = d3.layout.pie()
-      .sort(null)
-      .value(function(d) { return d.percRawClustersPerLane; });
-
-  var svgPercRawClustersPerLaneChart = d3.select("body").append("svg")
-      .attr("id", "percRawClusters")
-      .attr("width", width)
-      .attr("height", height)
-      .append("g")
-      .attr("transform", "translate(" + width / 2 + "," + height / 2+ ")");
-
-  percRawClustersPerLaneArray.forEach(function(d) {
-      d.percRawClustersPerLane = +d.percRawClustersPerLane;
-    });
-
-  var g = svgPercRawClustersPerLaneChart.selectAll(".arc")
-      .data(pie(percRawClustersPerLaneArray))
-      .enter().append("g")
-      .attr("class", "arc");
-
-  g.append("path")
-      .attr("d", arc)
-      .style("fill", function(d) { return colorRange(d.data.index1); });
-
-  g.append("text")
-      .attr("transform", function(d) { return "translate(" + arc.centroid(d) + ")"; })
-      .attr("dy", ".35em")
-      .style("text-anchor", "middle")
-      .attr("font-family", "sans-serif")
-      .attr("font-size", "10px")
-      .attr("text-anchor", "middle")
-      .text(function (d) {
-       var perc = d.data.percRawClustersPerLane + " %";
-       if (d.data.externalSampleName == undefined || d.data.externalSampleName.length > 10) {return d.data.index1 + "  " + perc}
-               return d.data.externalSampleName + "  " + perc })
-      .on("mouseover", function(d) {      
-            div.transition()        
-                .duration(200)      
-                .style("opacity", .9);      
-            div.style("width", Math.max(d.data.externalSampleName.length, d.data.index1.length) * 8 + "px")
-            div.html(d.data.externalSampleName + "<br/>" + d.data.index1 + "<br/>" + d.data.percRawClustersPerLane + " %")  
-                .style("left", (d3.event.pageX) + "px")     
-                .style("top", (d3.event.pageY - 42) + "px");    
-            })                  
-        .on("mouseout", function(d) {       
-            div.transition()        
-                .duration(500)      
-                .style("opacity", 0);   
-        });
-
-
-  svgPercRawClustersPerLaneChart.append('text')
-                   .text("% in Lane")
-                   .attr("fill", "black")
-                   .attr("transform", "translate(" + "0" + "," + (height -220) + ")")
-                   .attr("font-family", "sans-serif")
-                   .attr("font-size", "14px")
-                   .attr("text-anchor", "middle")
-                   ;
-
-}
-
-
-function downloadButton (buttonName) {
-
-
-  var div = d3.select("body").append("button")
-    .attr("class", "btn-xs")
-    .attr("type", "submit")
-    .attr("id", "save_as" + buttonName)
-    .attr("value", "")
-    .text("Save")
-    ;
-}
-
-  function submit_download_form(output_format, svgName)
-  {
-    var rawSampleName = webAppContext.getEntityIdentifier()
-    var split = rawSampleName.split(":")
-    var fc = split[0].split("/")[2]
-    var lane = split[1]
-
-    // Get the d3js SVG element
-    var tmp = document.getElementById(svgName);
-
-    if (output_format == "svg") {
-
-      // Extract the data as SVG text string
-      var svg_xml = "<svg  xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"> <style>" +
-      	".axis path,"+
-        ".axis line {"+
-        "  fill: none;"+
-        "  stroke: #000;"+
-        "  shape-rendering: crispEdges;"+
-        "}"+
-
-        ".axis text {"+
-        "  font-family: sans-serif;"+
-        "  font-size: 10px;"+
-        "}"+
-      "</style>" + (new XMLSerializer).serializeToString(tmp) + "</svg>";
-
-      var blob = new Blob([svg_xml], {type: "image/svg+xml;charset=utf-8"});
-    }
-    if (output_format == "html") {
-      var html = "<html> <head> <title></title> <style type=\"text/css\">" + 
-        "table.tableStats { font-family: sans-serif; font-size: 14px; border-collapse:collapse; }" +
-        ".tableStats th { padding:6px 10px; color:#444; font-weight:bold; text-shadow:1px 1px 1px #fff; border-bottom:2px solid #444; }" +
-        ".tableStats tr:nth-child(even) { background: WhiteSmoke; }" +
-        ".tableStats td { padding:0px 10px 10px 10px; }" +
-        "</style> </head> <body>" +
-        (new XMLSerializer).serializeToString(tmp) +
-        "</body> </html>"
-      var blob = new Blob([html], {type: "image/html;charset=utf-8"});
-    }
-   if (output_format == "png") {
-       console.log("png")
-   }
-
-    saveAs(blob, fc + "_Lane_" + lane + "_" + svgName + "." + output_format);
-
-  }
-
-  </script>
-  </body>
-</html>
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/laneStatistics/html/style.css b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/laneStatistics/html/style.css
deleted file mode 100644
index a2f1db8832b..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/laneStatistics/html/style.css
+++ /dev/null
@@ -1,52 +0,0 @@
-        .axis path,
-        .axis line {
-          fill: none;
-          stroke: #000;
-          shape-rendering: crispEdges;
-        }
-
-        .axis text {
-          font-family: sans-serif;
-          font-size: 10px;
-        }
-
-        table.tableStats {
-          width:100%;
-          font-family: sans-serif;
-          font-size: 12px;
-          border-collapse:collapse;
-        }
-
-        .tableStats th {
-          padding: 0.5rem;
-          text-align: right;
-          color:#444;
-          font-weight:bold;
-          /*text-shadow:1px 1px 1px #fff;*/
-          border-bottom:1px solid #444;
-          background: #D9D9D9;
-        }
-
-        .tableStats tr:nth-child(even) {
-          background: WhiteSmoke;
-        }
-        .tableStats td {
-          /*border: 1px solid #999;*/
-          padding-left: 0.5rem;
-          padding-right: 0.5rem;
-          /*padding:0px 10px 10px 10px;*/
-
-       }
-
-        div.tooltip {
-          position: absolute;
-          text-align: center;
-          width: 100px;
-          height: 42px;
-          padding: 2px;
-          font: 12px sans-serif;
-          background: LightSalmon;
-          border: 0px;
-          border-radius: 8px;
-          pointer-events: none;
-        }
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/laneStatistics/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/laneStatistics/plugin.properties
deleted file mode 100644
index 0508c9d2785..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/laneStatistics/plugin.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-# The properties file for an example webapps plugin
-# This file has no properties defined because none need to be defined.
-webapp-folder = html
-openbisui-contexts = sample-details-view
-sample-entity-types = ILLUMINA_FLOW_LANE
-label = Lane Statistics
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/openbis-dsu.js b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/openbis-dsu.js
deleted file mode 100644
index a1cc807e5a8..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/openbis-dsu.js
+++ /dev/null
@@ -1,358 +0,0 @@
-/**
- * openbis-dsu.js
- * OpenBIS-DSU API
- *
- * A DSU-specific API for accessing openBIS. Depends on openbis.js.
- * @author Chandrasekhar Ramakrishnan
- */
-
-/**
- * The openbis_dsu object provides a dsu-specific interface to openbis. 
- * 
- * It creates objects for projects, experiments, samples, and datasets. These objects
- * are designed to be passed on to GUI libraries (like d3). The openbis version of each
- * object is stored in the bis variable.
- * @constructor
- */
-function openbis_dsu(url, dssUrl) {
-	this.server = new openbis(url, dssUrl);
-}
-
-/**
- * Request the sequencing samples for a project
- */
-openbis_dsu.prototype.retrieveSequencingSamples = function(action)
-{	
-	var sampleCriteria = 
-	{
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				attribute : "TYPE",
-				fieldType : "ATTRIBUTE",
-				desiredValue : "ILLUMINA_SEQUENCING" 
-			} ],
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	this.server.searchForSamples(sampleCriteria, action);
-}
-
-
-/**
- * Request a Sample using the code
- */
-openbis_dsu.prototype.retrieveSample = function(sampleIdentifier, action)
-{
-        var sampleCriteria =
-        {
-                matchClauses :
-                        [ {"@type":"AttributeMatchClause",
-                                attribute : "CODE",
-                                fieldType : "ATTRIBUTE",
-                                desiredValue : sampleIdentifier
-                        } ],
-                operator : "MATCH_ALL_CLAUSES"
-        };
-
-        this.server.searchForSamples(sampleCriteria, action);
-}
-
-
-/**
- * Request a Sample with Properties using the code
- */
-openbis_dsu.prototype.retrieveSampleWithPropertiesCode = function(sampleIdentifier, action)
-{
-        var sampleCriteria =
-        {
-                matchClauses :
-                        [ {"@type":"AttributeMatchClause",
-                                attribute : "CODE",
-                                fieldType : "ATTRIBUTE",
-                                desiredValue : sampleIdentifier
-                        } ],
-                operator : "MATCH_ALL_CLAUSES"
-        };
-
-        var fetchOptions = ["PROPERTIES"];
-
-        var thisDsu = this;
-        this.server.searchForSamplesWithFetchOptions(sampleCriteria, fetchOptions, function(response){
-                response.result = thisDsu.getInitializedSamples(response.result);
-                action(response);
-        });
-}
-
-
-/**
- * Request a Sample with Properties using the permID
- */
-openbis_dsu.prototype.retrieveSampleWithProperties = function(samplePermId, action)
-{
-        var sampleCriteria =
-        {
-                matchClauses :
-                        [ {"@type":"AttributeMatchClause",
-                                attribute : "PERM_ID",
-                                fieldType : "ATTRIBUTE",
-                                desiredValue : samplePermId
-                        } ],
-                operator : "MATCH_ALL_CLAUSES"
-        };
-
-        var fetchOptions = ["PROPERTIES"];
-
-        var thisDsu = this;
-        this.server.searchForSamplesWithFetchOptions(sampleCriteria, fetchOptions, function(response){
-                response.result = thisDsu.getInitializedSamples(response.result);
-                action(response);
-        });
-}
-
-
-
-/**
- * Request Parent Samples including properties
- */
-
-openbis_dsu.prototype.retrieveSampleParents = function(samplePermId, action)
-{
-    var sampleCriteria =
-    {
-        targetEntityKind : "SAMPLE_CHILD",
-        criteria : {
-            matchClauses :
-            [ {"@type":"AttributeMatchClause",
-               "attribute":"PERM_ID",
-               "fieldType":"ATTRIBUTE",
-               "desiredValue": samplePermId
-                }]
-        }
-    };
-
-    var parentCriteria =
-    {
-        subCriterias : [ sampleCriteria ],
-        matchClauses :
-        [ 
-             ],
-        operator : "MATCH_ALL_CLAUSES"
-    };
-
-    var fetchOptions = ["PROPERTIES"];
-
-    var thisDsu = this;
-    this.server.searchForSamplesWithFetchOptions(parentCriteria, fetchOptions, function(response){
-      response.result = thisDsu.getInitializedSamples(response.result);
-      action(response);
-    });
-}
-
-
-/**
- * Request Child Samples including properties
- */
-
-openbis_dsu.prototype.retrieveSampleChildren = function(samplePermIds, action)
-{
-	var permIdClauses = [];
-	  
-	  samplePermIds.forEach(function(samplePermId){
-		var clause = {"@type":"AttributeMatchClause",
-	               "attribute":"PERM_ID",
-	               "fieldType":"ATTRIBUTE",
-	               "desiredValue": samplePermId
-	                }
-		permIdClauses.push(clause)
-	});
-	
-    var sampleCriteria =
-    {
-        targetEntityKind : "SAMPLE_PARENT",
-        criteria : {
-            matchClauses : permIdClauses,
-            operator : "MATCH_ANY_CLAUSES"
-        }
-    };
-
-    var childCriteria =
-    {
-        subCriterias : [ sampleCriteria ],
-        matchClauses :
-        [
-             ],
-        operator : "MATCH_ALL_CLAUSES"
-    };
-
-    var fetchOptions = ["PROPERTIES", "PARENTS"];
-
-    var thisDsu = this;
-    this.server.searchForSamplesWithFetchOptions(childCriteria, fetchOptions, function(response){
-      response.result = thisDsu.getInitializedSamples(response.result);
-      action(response);
-    });
-}
-
-/**
- * Get the data sets for a sample specified by sample permId
- */
-openbis_dsu.prototype.retrieveDataSetsForSampleWithPermIds = function(samplePermIds, action)
-{
-    var clauses = [];
-
-    samplePermIds.forEach(function(samplePermId){
-      var clause = {"@type":"AttributeMatchClause",
-               "attribute":"PERM_ID",
-               "fieldType":"ATTRIBUTE",
-               "desiredValue": samplePermId
-                }
-       clauses.push(clause)
-    });
-
-    var sampleCriteria =
-    {
-        targetEntityKind : "SAMPLE",
-        criteria : {
-            matchClauses : clauses,
-            operator: "MATCH_ANY_CLAUSES"
-        }
-    };
-
-    var dataSetCriteria =
-    {
-        subCriterias : [ sampleCriteria ],
-        matchClauses :
-        [ {"@type":"AttributeMatchClause",
-           attribute : "TYPE",
-           fieldType : "ATTRIBUTE",
-           desiredValue : "FASTQ_GZ"
-            } ],
-        operator : "MATCH_ALL_CLAUSES"
-    };
-
-    this.server.searchForDataSets(dataSetCriteria, action)
-}
-
-
-
-/**
- * Get the data sets for a sample specified by sample identifier
- */
-openbis_dsu.prototype.retrieveDataSetsForSample = function(sampleIdentifier, action)
-{
-    var sampleIdentifierTokens = sampleIdentifier.split("/");
-    var sampleCriteria = 
-    {
-	targetEntityKind : "SAMPLE",
-	criteria : { 
-	    matchClauses : 
-	    [ {"@type":"AttributeMatchClause",
-	       "attribute":"CODE",
-	       "fieldType":"ATTRIBUTE",
-	       "desiredValue": sampleIdentifierTokens[2]
-		}]
-	}
-    };
-	
-    var dataSetCriteria = 
-    {
-	subCriterias : [ sampleCriteria ],
-	matchClauses : 
-	[ {"@type":"AttributeMatchClause",
-	   attribute : "TYPE",
-	   fieldType : "ATTRIBUTE",
-	   desiredValue : "FASTQ_GZ" 
-	    } ],
-	operator : "MATCH_ALL_CLAUSES"
-    };
-
-    this.server.searchForDataSets(dataSetCriteria, action)
-}
-
-/**
- * Get all data sets connected to a sequencing sample
- */
-openbis_dsu.prototype.retrieveDataSetsForSequencingSample = function(sequencing, action)
-{
-	this.server.listDataSetsForSample(sequencing.bis, false, action);
-}
-
-openbis_dsu.prototype.getInitializedSamples = function(result) {
-  //
-  // Fill Map that uses as key the sample @id and value the sample object 
-  //
-  var samplesById = {};
-
-  function storeSamplesById(originalSample)
-  {
-  var stack = [originalSample];
-
-  var referredSample = null;
-  while (referredSample = stack.pop()) {
-  if (isNaN(referredSample)) {
-  samplesById[referredSample["@id"]] = referredSample;
-  if (referredSample.parents) {
-  for(var i = 0, len = referredSample.parents.length; i < len; ++i) {
-  stack.push(referredSample.parents[i]);
-  }
-  }
-  if (referredSample.children) {
-  for(var i = 0, len = referredSample.children.length; i < len; ++i) {
-  stack.push(referredSample.children[i]);
-  }
-  }
-  }
-  }
-  }
-
-  for(var i = 0; i < result.length; i++) {
-  var sampleOrId = result[i];
-  storeSamplesById(sampleOrId);
-  }
-
-  //
-  // Fix Result List
-  //
-  function fixSamples(result)
-  {
-  for(var i = 0; i < result.length; i++)
-  {
-  var sampleOrId = result[i];
-  if (isNaN(sampleOrId))
-  {
-  sampleOrId = samplesById[sampleOrId["@id"]];
-  } else
-  {
-  sampleOrId = samplesById[sampleOrId];
-  }
-  result[i] = sampleOrId; 
-  
-
-  //Fill Parents
-  if(sampleOrId.parents) {
-  for(var j = 0; j < sampleOrId.parents.length; j++) {
-  var parentOrId = sampleOrId.parents[j];
-  if(!isNaN(parentOrId)) { //If is an Id get the reference
-  sampleOrId.parents[j] = samplesById[parentOrId];
-  }
-  }
-  fixSamples(sampleOrId.parents);
-  }
-
-  //Fill Children
-  if(sampleOrId.children) {
-  for(var j = 0; j < sampleOrId.children.length; j++) {
-  var childOrId = sampleOrId.children[j];
-  if(!isNaN(childOrId)) { //If is an Id get the reference
-  sampleOrId.children[j] = samplesById[childOrId];
-  }
-  }
-  fixSamples(sampleOrId.children);
-  }
-  }
-  }
-
-  fixSamples(result);
-
-  return result;
-  }
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/sampleSheet/html/body-style.css b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/sampleSheet/html/body-style.css
deleted file mode 100644
index 629f097de8b..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/sampleSheet/html/body-style.css
+++ /dev/null
@@ -1,4 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/sampleSheet/html/button.css b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/sampleSheet/html/button.css
deleted file mode 100644
index 6b1dccf1a62..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/sampleSheet/html/button.css
+++ /dev/null
@@ -1,54 +0,0 @@
-button {
-  font: 14px "Trebuchet MS";
-  background-color: #222;
-  background-image: -moz-linear-gradient(top, rgba(255,255,255,.25), rgba(255,255,255,.11));
-  background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, rgba(255,255,255,.25)),color-stop(1, rgba(255,255,255,.11)));
-  background-image: -webkit-linear-gradient(rgba(255,255,255,.25), rgba(255,255,255,.11));
-  color: #fff;
-  text-rendering: optimizeLegibility;
-  text-shadow: 0 -1px 1px #222;
-  padding: 3px 5px 3px 5px;
-  border: 0;
-  border-radius: 0;
-  border-bottom: 1px solid #222;
-  margin: 0;
-  -moz-box-shadow: 0 1px 3px #999;
-  -webkit-box-shadow: 0 1px 3px #999;
-  box-shadow: 0 1px 3px #999;
-}
-
-button.first {
-  border-top-left-radius: 5px;
-  border-bottom-left-radius: 5px;
-}
-
-button.last {
-  border-top-right-radius: 5px;
-  border-bottom-right-radius: 5px;
-}
-
-button.active {
-  background-color: rgb(65,102,133);
-}
-
-button:hover {
-  background-color: grey;
-  cursor: pointer;
-}
-
-input {
-  font: 14px "Trebuchet MS";
-  background-image: -moz-linear-gradient(top, rgba(255,255,255,.25), rgba(255,255,255,.11));
-  background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, rgba(255,255,255,.25)),color-stop(1, rgba(255,255,255,.11)));
-  background-image: -webkit-linear-gradient(rgba(255,255,255,.5), rgba(255,255,255,.1));
-  color: #000;
-  text-rendering: optimizeLegibility;
-  padding: 3px 5px 3px 5px;
-  border: 0;
-  border-radius: 0;
-  margin: 0;
-  -moz-box-shadow: 0 1px 3px #999;
-  -webkit-box-shadow: 0 1px 3px #999;
-  box-shadow: 0 1px 3px #999;
-}
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/sampleSheet/html/index.html b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/sampleSheet/html/index.html
deleted file mode 100644
index 06d4e850cd4..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/sampleSheet/html/index.html
+++ /dev/null
@@ -1,155 +0,0 @@
-<head>
-  <title>Quantitative Genomics Facility Sample Sheet Generator</title>
-  <link type="text/css" rel="stylesheet" href="button.css" />
-  <link type="text/css" rel="stylesheet" href="body-style.css" />
-  <script type="text/javascript" src="/openbis/resources/js/d3.v3.min.js"></script>
-  <script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-  <script type="text/javascript" src="/openbis/resources/js/spin.min.js"></script>
-  <script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-  <script type="text/javascript" src="/openbis/resources/js/openbis-dsu.js"></script>
-  <script type="text/javascript" src="/openbis/resources/js/openbis-action-deferrer.js"></script>
-  <!-- To speed development, cache the requests -->
-  <!-- <script type="text/javascript" src="openbis-request-cache.js"></script> -->
-  <script>
-
-dsu = new openbis_dsu('/openbis/openbis', '/datastore_server');
-console.log(openbis_dsu)
-var context = new openbisWebAppContext();
-dsu.server.useSession(context.getSessionId());
-var vis;
-var didCreateVis = false;
-
-$(document).ready(function() {
-});
-
-function createVis()
-{ 
-	if (didCreateVis) return;
-	vis = d3.select("#main").append("div").attr("id", "vis");
-	didCreateVis = true;
-}
-
-function displayReturnedTable(data)
-{
-	if (data.error) {
-		console.log(data.error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	var dataToShow = data.result;
-	
-	vis.append("p").text("");	
-	// Pick all div elements of the visualization
-	vis.selectAll("div").data(dataToShow.rows)
-		// Code under enter is run if there is no HTML element for a data element
-		.enter()
-	.append("div")
-		.text(function(row) { return row[0].value })
-	d3.select("#progress").remove()
-	d3.select("#runType").remove()
-	//console.log(data);
-}
-
-
-function spinner (target) {
-     var opts = {
-	lines: 13, // The number of lines to draw
-	length: 7, // The length of each line
-	width: 4, // The line thickness
-	radius: 10, // The radius of the inner circle
-	corners: 1, // Corner roundness (0..1)
-	rotate: 0, // The rotation offset
-	color: '#000', // #rgb or #rrggbb
-	speed: 1, // Rounds per second
-	trail: 60, // Afterglow percentage
-	shadow: false, // Whether to render a shadow
-	hwaccel: false, // Whether to use hardware acceleration
-	className: 'spinner', // The CSS class to assign to the spinner
-	zIndex: 2e9, // The z-index (defaults to 2000000000)
-	top: 'auto', // Top position relative to parent in px
-	left: 'auto' // Left position relative to parent in px
-      };
-      var spinner = new Spinner(opts).spin(target);
-}
-
-function loadProperties () { 
-
-  var sampleCodes = [];
-  var miSeqRun = false;
-
-  sampleCodes.push(context.getEntityIdentifier());
-  
-  var deferrer = new openbisActionDeferrer(function(){
-    d3.select("#main").select("#progress").remove();
-    d3.select("#main").select("#vis").remove();
-    if (miSeqRun == true) {
-      d3.select("#main").append("div").attr("id", "runType").append("p").text("Detected MiSeq Run.");
-    }
-    else {
-      d3.select("#main").append("div").attr("id", "runType").append("p").text("Detected HiSeq Run.");
-    }
-    d3.select("#main").append("div").attr("id", "progress").append("p").text("Creating sample sheet...");
-    var target = document.getElementById('progress');
-    spinner(target);
-  }, sampleCodes);
-
-  sampleCodes.forEach(function(sampleCode){ 
-    dsu.retrieveSample(sampleCode, function(response) {
-      getProperties(response);
-      //console.log("got response " + sampleCode);
-      deferrer.dependencyCompleted(sampleCode);
-      callAggregationService(miSeqRun)
-      });
-   });
-
-  function getProperties(response) {
-     flowcellProperties = response.result[0].properties;
-     numberOfLanes = (flowcellProperties.LANECOUNT);
-     sequencer = (flowcellProperties.SEQUENCER);
-     if (sequencer == "M01761") {
-        miSeqRun = true;
-     }
-     else {
-        miSeqRun = false;
-     }
-  }
-}
-
-
-function callAggregationService(miSeqRun)
-{
-        var sampleCode = context.getEntityIdentifier();
-        var mySendEmail = $('input[name=sendEmail]').is(':checked');
-
-	didCreateVis = false;
-	createVis()
-        
-	var parameters =
-	{
-	   sampleId : sampleCode,
-	   sendEmail : mySendEmail,
-	   miSeqRun : miSeqRun
-	};
-	console.log(parameters)
- 
-	dsu.server.createReportFromAggregationService("DSS1", "triggerCreateSampleSheet", parameters, displayReturnedTable);
-}
-
- </script>
-</head>
-<body>
-<div id="main">
-    <div id="checkbox-group">
-      <input type="checkbox" name="sendEmail" value="mail">  Send Sample Sheet By Mail? <br>
-      <!--<input type="checkbox" name="singlelane" value="singlelane">  Single Lane Mode? <br> -->
-      <br>
-    </div>
-    <div id="button-group">
-      <button id="createSampleSheet-button" onclick="loadProperties();">Create Sample Sheet</button>
-    </div>
-</div>
-</body>
-</html>
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/sampleSheet/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/sampleSheet/plugin.properties
deleted file mode 100644
index a8230cd14ee..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/as/webapps/sampleSheet/plugin.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-# The properties file for an example webapps plugin
-# This file has no properties defined because none need to be defined.
-webapp-folder = html
-openbisui-contexts = sample-details-view
-sample-entity-types = ILLUMINA_FLOW_CELL
-label = Sample Sheet Creator
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-hiseq/create-flowcell-hiseq.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-hiseq/create-flowcell-hiseq.py
deleted file mode 100644
index 8fd666f38f2..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-hiseq/create-flowcell-hiseq.py
+++ /dev/null
@@ -1,221 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Parses the two Illumina provided files 'runParameters.xml' and 'RunInfo.xml'
-and creates one Sample of type 'ILLUMINA_FLOW_CELL' and sets Sample properties 
-from those two XML files. Additionally the number of lanes are read out and
-are created as contained samples of type 'ILLUMINA_FLOW_LANE'.
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for HiSeq runs: 110715_SN792_0054_BC035RACXX
-expected incoming Name for GAII runs: 110812_6353WAAXX
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import shutil
-import  re
-from time import *
-from datetime import *
-import xml.etree.ElementTree as etree
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-IS_HISEQ_RUN=False
-RUNPARAMETERS = 'runParameters.xml'
-RUNINFO = 'RunInfo.xml'
-FLOWCELL_SPACE='BSSE_FLOWCELLS'
-FLOWCELL_PROJECT='FLOWCELLS'
-EXPERIMENT_TYPE_CODE='HT_SEQUENCING'
-
-FLOWCELL_PROJECT_ID = "/%(FLOWCELL_SPACE)s/%(FLOWCELL_PROJECT)s/" % vars()
-
-# Mapping between XML file naming and used in here
-RUNPARAMETERS_XML = {'FLOWCELL':'Flowcell', 'RTAVERSION':'RTAVersion',
-  'CONTROLLANE':'ControlLane', 'SBS':'Sbs', 'INDEX':'Index',
-  'CYCLES_REQUESTED_BY_CUSTOMER':'Read1', 'PE':'Pe', 'RUN_MODE': 'RunMode'}
-RUNINFO_XML = {'LANECOUNT':'LaneCount', 'SURFACECOUNT':'SurfaceCount',
-   'SWATHCOUNT':'SwathCount', 'TILECOUNT':'TileCount'}
-
-class parseXmlFile: 
-    
-  def __init__(self, xmlFile):
-    self.xmlFile = xmlFile
-    self.tree = etree.parse(self.xmlFile)
-    self.root = self.tree.getroot()
-
-  def getXmlElement (self, elementName):
-    '''
-    Returns the text value of a given XML element
-    '''
-    for e in self.root.getchildren():
-      element = e.find(elementName)
-      if element is None:
-        return 'None'
-      else:
-        return element.text
-
-  def getAllchildren (self, elementName):
-    '''
-    finds all children of a given XML Element and returns them as list
-    '''
-    for e in self.root.getchildren():
-      # the '//' means look recursively for all children not only direct ones
-      childList  = self.tree.findall('//' + elementName)
-    return childList 
-
-# -----------------------------------------------------------------------------
-
-def create_openbis_timestamp ():
-    ''' 
-    Create an openBIS conform timestamp
-    '''
-    tz=localtime()[3]-gmtime()[3]
-    d=datetime.now()
-    return d.strftime("%Y-%m-%d %H:%M:%S GMT"+"%+.2d" % tz+":00")
-
-# -----------------------------------------------------------------------------
-
-def createOpenbisTimeStamp(file):
-    '''
-    Creates a openBIS compatible time stamp of a file time stamp
-    '''
-    mtime = os.path.getmtime(file)
-    lt = localtime(mtime)
-    tz = localtime().tm_hour - gmtime().tm_hour
-    return (strftime("%Y-%m-%d %H:%M:%S GMT" + "%+.2d" % tz + ":00", lt))
-
-# -----------------------------------------------------------------------------
-
-def registerFlowLane(transaction, a_lane, name, newFlowCell):
-    '''
-    Registers a new Flow lane 
-    '''
-    newFlowLane = transaction.createNewSample('/' + FLOWCELL_SPACE + '/' + name + ':' + str(a_lane), "ILLUMINA_FLOW_LANE")
-    newFlowLane.setContainer(newFlowCell)
-    newFlowLane.setPropertyValue('CONCENTRATION_FLOWLANE', str(0))
-
-# -----------------------------------------------------------------------------
-
-def addVocabularyTerm(transaction, vocabularyName, vocabularyCode):
-    modifiableVocabulary = transaction.getVocabularyForUpdate(vocabularyName)
-    if not (modifiableVocabulary.containsTerm(vocabularyCode)):
-        ordinals = []
-        terms = modifiableVocabulary.getTerms()
-        for term in terms:
-            ordinals.append(term.getOrdinal())
-            
-        newOrdinal = max(ordinals)+1;
-        newTerm = transaction.createNewVocabularyTerm();
-        newTerm.setCode(vocabularyCode)
-        newTerm.setOrdinal(newOrdinal)
-        modifiableVocabulary.addTerm(newTerm)
-
-# -----------------------------------------------------------------------------
-
-def sanitizeString(myString):
-    return re.sub('[^A-Za-z0-9]+', '_', myString)
-
-# -----------------------------------------------------------------------------
-
-def setFcProperty(searchId, dict, newFlowCell, runInfo):
-    children = runInfo.getAllchildren(searchId) 
-    for element in (dict):
-        if (element <> '') and (dict[element] <> ''):
-            newFlowCell.setPropertyValue(element, children[0].attrib[dict[element]])
-
-# -----------------------------------------------------------------------------
-
-def process(transaction):
-    incoming = transaction.getIncoming()
-    incomingPath = incoming.getAbsolutePath()
-    space = None
-
-    # Get the incoming name 
-    name = incoming.getName()
-    split=name.split("_")
-
-    # Parse the RunInfo.xml file
-    runInfo = parseXmlFile(incomingPath + '/' + RUNINFO) 
-    maxLanes = runInfo.getAllchildren('FlowcellLayout')[0].attrib[RUNINFO_XML['LANECOUNT']]
-
-    # Search for the sample and check if there is already sample with this name
-    search_service = transaction.getSearchService()
-    sc = SearchCriteria()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, name));
-    foundSamples = search_service.searchForSamples(sc)
-    if foundSamples.size() > 0:
-        print('Already found a Flow Cell with the following name: '+ name + ". Will re-set the properties...")
-        newFlowCell = transaction.getSampleForUpdate(foundSamples[0].getSampleIdentifier())
-    else:
-        # Create a new Flow Cell and set the experiment
-        print ("Creating new Flow Cell " + name)
-        
-        newFlowCell = transaction.createNewSample('/' + FLOWCELL_SPACE + '/' + name, "ILLUMINA_FLOW_CELL")
-        exp = transaction.getExperiment(FLOWCELL_PROJECT_ID + datetime.now().strftime("%Y.%m"))
-        if exp == None:
-            exp = transaction.createNewExperiment(FLOWCELL_PROJECT_ID + datetime.now().strftime("%Y.%m"),
-                                                  EXPERIMENT_TYPE_CODE)
-        newFlowCell.setExperiment(exp)
-        [registerFlowLane(transaction, lane, name, newFlowCell) for lane in range(1,int(maxLanes)+1)]
-
-    run = runInfo.getAllchildren('Run')[0].attrib
-    if (run['Id'] != name):
-      raise NameError('Flowcell names do not match between directory name '+ name +
-            ' and ' + RUNINFO + ' property file: ' + run['Id'])
-
-    # The HiSeq is providing more infos, which we will parse here:
-    runParameters = parseXmlFile(incomingPath + '/' + RUNPARAMETERS)
-    addVocabularyTerm(transaction, "PIPELINE_VERSION", runParameters.getXmlElement(RUNPARAMETERS_XML['RTAVERSION']))
-    
-    newFlowCell.setPropertyValue("ILLUMINA_PIPELINE_VERSION", runParameters.getXmlElement(RUNPARAMETERS_XML['RTAVERSION']))
-    newFlowCell.setPropertyValue("FLOWCELLTYPE", runParameters.getXmlElement(RUNPARAMETERS_XML['FLOWCELL']))
-    newFlowCell.setPropertyValue("CONTROL_LANE", runParameters.getXmlElement(RUNPARAMETERS_XML['CONTROLLANE']))
-    newFlowCell.setPropertyValue("SBS_KIT", runParameters.getXmlElement(RUNPARAMETERS_XML['SBS']))
-    
-    runMode = sanitizeString(runParameters.getXmlElement(RUNPARAMETERS_XML['RUN_MODE']))
-    addVocabularyTerm(transaction, "RUN_MODE_VOCABULARY", runMode)
-    
-    newFlowCell.setPropertyValue("RUN_MODE", runMode)
-    newFlowCell.setPropertyValue("RUN_NAME_FOLDER", name)
-
-    numberOfCycles = runParameters.getAllchildren('Read1')[0].text
-    cyclesVocabularyName = "CYCLES" 
-    addVocabularyTerm(transaction, cyclesVocabularyName, numberOfCycles)
-    newFlowCell.setPropertyValue("CYCLES_REQUESTED_BY_CUSTOMER", numberOfCycles)
-    
-    read2 = runParameters.getAllchildren('Read2')
-    if (str(read2[0].text) == '0'):
-      newFlowCell.setPropertyValue("END_TYPE", "SINGLE_READ") 
-    else:
-      newFlowCell.setPropertyValue("END_TYPE", "PAIRED_END") 
-      newFlowCell.setPropertyValue("PAIRED_END_KIT", runParameters.getXmlElement(RUNPARAMETERS_XML['PE']))
-    
-    indexRead1 = runParameters.getAllchildren('IndexRead1')
-    newFlowCell.setPropertyValue("INDEXREAD", indexRead1[0].text) 
-    
-    indexRead2 = runParameters.getAllchildren('IndexRead2')
-    newFlowCell.setPropertyValue("INDEXREAD2", indexRead2[0].text) 
-  
-    setFcProperty('FlowcellLayout', RUNINFO_XML, newFlowCell, runInfo)
-
-    sequencer = runInfo.getAllchildren('Instrument')
-    newFlowCell.setPropertyValue("SEQUENCER", sequencer[0].text)
-    newFlowCell.setPropertyValue("FLOW_CELL_SEQUENCED_ON", createOpenbisTimeStamp(incomingPath + '/' + RUNPARAMETERS))
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-hiseq/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-hiseq/plugin.properties
deleted file mode 100644
index 5c56666b206..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-hiseq/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for creating a flow cell based on runParameters.xml and RunInfo.xml created by an 
-# Illumina HiSeq 
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/create-flowcell-hiseq
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = create-flowcell-hiseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-miseq/create-flow-cell-miseq.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-miseq/create-flow-cell-miseq.py
deleted file mode 100755
index cfde834eb21..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-miseq/create-flow-cell-miseq.py
+++ /dev/null
@@ -1,251 +0,0 @@
-'''
-@copyright:
-2012, 2013 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Parses the two Illumina provided files 'RunParameters.xml' and 'RunInfo.xml'
-and creates one Sample of type 'ILLUMINA_FLOW_CELL' and sets Sample properties 
-from those two XML files. Additionally the number of lanes are read out and
-are created as contained samples of type 'ILLUMINA_FLOW_LANE'.
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for MiSeq runs: 120726_M00721_0011_A000000000-A1FVF
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import shutil
-from time import *
-from datetime import *
-import xml.etree.ElementTree as etree
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.common.mail import EMailAddress
-
-#RUNPARAMETERS = 'RunParameters.xml'
-RUNPARAMETERS = 'runParameters.xml'
-RUNINFO = 'RunInfo.xml'
-FLOWCELL_SPACE='/BSSE_FLOWCELLS/'
-FLOWCELL_PROJECT='FLOWCELLS/'
-EXPERIMENT_TYPE_CODE='HT_SEQUENCING'
-
-# Mapping between XML file naming and openBIS properties
-
-RUNINFO_XML = {'LANECOUNT':'LaneCount', 'SURFACECOUNT':'SurfaceCount',
-   'SWATHCOUNT':'SwathCount', 'TILECOUNT':'TileCount'}
-
-#------------------------------------------------------------------------------
-
-class parseXmlFile: 
-    
-  def __init__(self, xmlFile):
-    self.xmlFile = xmlFile
-    self.tree = etree.parse(self.xmlFile)
-    self.root = self.tree.getroot()
-
-  def getXmlElement (self, elementName):
-    '''
-    Returns the text value of a given XML element
-    '''
-    for e in self.root.getchildren():
-      element = e.find(elementName)
-      if element is None:
-          return 'None'
-      else:
-          return element.text
-
-  def getAllchildren (self, elementName):
-    '''
-    finds all children of a given XML Element and returns them as list
-    '''
-    for e in self.root.getchildren():
-      # the '//' means look recursively for all children not only direct ones
-      childList  = self.tree.findall('//' + elementName)
-    return childList 
-
-# -----------------------------------------------------------------------------
-
-def create_openbis_timestamp (): 
-  ''' 
-  Create an openBIS conform timestamp
-  '''
-  tz=localtime()[3]-gmtime()[3]
-  d=datetime.now()
-  return d.strftime("%Y-%m-%d %H:%M:%S GMT"+"%+.2d" % tz+":00")
-
-# -----------------------------------------------------------------------------
-
-def createOpenbisTimeStamp(file):
-  '''
-  Creates a openBIS compatible time stamp of a file time stamp
-  '''
-  mtime = os.path.getmtime(file)
-  lt = localtime(mtime)
-  tz = localtime().tm_hour - gmtime().tm_hour
-  return (strftime("%Y-%m-%d %H:%M:%S GMT" + "%+.2d" % tz + ":00", lt))
-
-# -----------------------------------------------------------------------------
-
-def registerFlowLane(a_lane, transaction, name, newFlowCell):
-  '''
-  Registers a new Flow lane 
-  '''
-  newFlowLane = transaction.createNewSample(FLOWCELL_SPACE + name + ':' + str(a_lane), "ILLUMINA_FLOW_LANE")
-  newFlowLane.setPropertyValue('CONCENTRATION_FLOWLANE', str(0))
-  newFlowLane.setContainer(newFlowCell)
-  
-# -----------------------------------------------------------------------------
-
-def addVocabularyTerm(transaction, vocabularyName, vocabularyCode):
-  modifiableVocabulary = transaction.getVocabularyForUpdate(vocabularyName)
-  if not (modifiableVocabulary.containsTerm(vocabularyCode)):
-    ordinals = []
-    terms = modifiableVocabulary.getTerms()
-    for term in terms:
-      ordinals.append(term.getOrdinal())
-            
-    newOrdinal = max(ordinals)+1;
-
-    newTerm = transaction.createNewVocabularyTerm();
-    newTerm.setCode(vocabularyCode)
-    newTerm.setOrdinal(newOrdinal)
-    modifiableVocabulary.addTerm(newTerm)
-
-# -----------------------------------------------------------------------------
-
-def process(transaction):
-
-  incoming = transaction.getIncoming()
-  incomingPath = incoming.getAbsolutePath()
-
-  name = incoming.getName()
-  # ['120726', 'M00721', '0011', 'A000000000-A1FVF']
-  runDate, MiseqID, runningNumber, trayAndFcId = name.split("_")
-  tray = trayAndFcId[0]
-  fcId = trayAndFcId[1:]
-
-  # -----------------------------------------------------------------------------
-
-  # Search for the sample and check if there is already sample with this name
-  search_service = transaction.getSearchService()
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, name));
-  foundSamples = search_service.searchForSamples(sc)
-  if foundSamples.size() > 0:
-    raise NameError('Already found a Flow Cell with the following name: '+ name)  
-
-  # Parse the RunInfo.xml file
-  runInfo = parseXmlFile(incomingPath + '/' + RUNINFO) 
-
-  # Create a new Flow Cell and set the experiment
-  newFlowCell = transaction.createNewSample(FLOWCELL_SPACE + name, "ILLUMINA_FLOW_CELL")
-  exp = transaction.getExperiment(FLOWCELL_SPACE + FLOWCELL_PROJECT + datetime.now().strftime("%Y.%m"))
-  if exp == None:
-    exp = transaction.createNewExperiment(FLOWCELL_SPACE + FLOWCELL_PROJECT + datetime.now().strftime("%Y.%m"),
-	       EXPERIMENT_TYPE_CODE)
-  newFlowCell.setExperiment(exp)
-   
-  run = runInfo.getAllchildren('Run')[0].attrib
-  if (run['Id'] != name):
-    raise NameError('Flowcell names do not match between directory name '+ name +
-	  ' and ' + RUNINFO + 'property file: ' + run['Id'])
-
-  runParameters = parseXmlFile(incomingPath + '/' + RUNPARAMETERS)
-  RTAversion = (runParameters.getAllchildren('RTAVersion'))[0].text
-  ReagentKitBarcode = (runParameters.getAllchildren('ReagentKitBarcode'))[0].text
-  print RTAversion
-  addVocabularyTerm(transaction, "PIPELINE_VERSION", RTAversion)
-  newFlowCell.setPropertyValue("ILLUMINA_PIPELINE_VERSION", RTAversion)
-  newFlowCell.setPropertyValue("SBS_KIT", ReagentKitBarcode)
-    
-  def setFcProperty(searchId, dict):
-    children = runInfo.getAllchildren(searchId) 
-    for element in (dict):
-      if (element <> '') and (dict[element] <> ''):
-          newFlowCell.setPropertyValue(element, children[0].attrib[dict[element]])
-  
-  # Reading out <FlowcellLayout LaneCount="1" SurfaceCount="1" SwathCount="1" TileCount="12" />
-  setFcProperty('FlowcellLayout', RUNINFO_XML)
-
-  sequencer = runInfo.getAllchildren('Instrument')
-  newFlowCell.setPropertyValue("SEQUENCER", sequencer[0].text)
-
-  readMap = {}
-  reads = runInfo.getAllchildren('Reads')
-  read = reads[0].findall('Read')
-
-  for r in read:
-    cycles = r.get('NumCycles', 'str')
-    number = r.get('Number', 'str')
-    isIndexed = r.get('IsIndexedRead', 'str')
-    readMap[number] = [cycles, isIndexed]
-
-    # example of readMap: {'1': ['151', 'N'], '2': ['8', 'Y'], '3': ['8', 'Y'], '4': ['151', 'N']}
-    numberOfCycles = readMap['1'][0]   
-    cyclesVocabularyName = "CYCLES" 
-
-    addVocabularyTerm(transaction, cyclesVocabularyName, numberOfCycles)
-         
-    newFlowCell.setPropertyValue("CYCLES_REQUESTED_BY_CUSTOMER", numberOfCycles)
-   
-    indexCount = 0
-    readCount = 0
-
-    for e in readMap:
-      if readMap[e][1] == 'Y':
-	indexCount += 1
-      else:
-	readCount += 1
-
-    if readCount == 2:
-      newFlowCell.setPropertyValue("END_TYPE", "PAIRED_END")
-    else:
-      newFlowCell.setPropertyValue("END_TYPE", "SINGLE_READ")
-
-    try:
-      newFlowCell.setPropertyValue("INDEXREAD", readMap['2'][0])
-    except:
-      newFlowCell.setPropertyValue("INDEXREAD", '0') 
-
-    try:
-      if indexCount == 2:
-        newFlowCell.setPropertyValue("INDEXREAD2", readMap['3'][0])
-      else:
-        newFlowCell.setPropertyValue("INDEXREAD2", '0')
-    except:
-      newFlowCell.setPropertyValue("INDEXREAD2", '0')
-
-  newFlowCell.setPropertyValue("FLOW_CELL_SEQUENCED_ON", createOpenbisTimeStamp(incomingPath + '/' + RUNPARAMETERS))
-  newFlowCell.setPropertyValue("RUN_NAME_FOLDER", name)
-
-  # get the number of lanes
-  maxLanes = runInfo.getAllchildren('FlowcellLayout')[0].attrib[RUNINFO_XML['LANECOUNT']]
-
-  [registerFlowLane(lane, transaction, name, newFlowCell) for lane in range(1,int(maxLanes)+1)]
-
-  replyTo = EMailAddress("manuel.kohler@bsse.ethz.ch")
-  fromAddress = replyTo
-  manuel = EMailAddress("manuel.kohler@bsse.ethz.ch")
-  ina = EMailAddress("ina.nissen@bsse.ethz.ch")
-  christian = EMailAddress("christian.beisel@bsse.ethz.ch")
-  katja = EMailAddress("katja.eschbach@bsse.ethz.ch")
-
-  transaction.getGlobalState().getMailClient().sendEmailMessage("Automatically created new flow cell " + name + " in openBIS", \
-                "A new sequencing run got started using flow cell " + name, replyTo, fromAddress, ina, katja, christian, manuel);
-
-  shutil.rmtree(incomingPath)
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-miseq/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-miseq/plugin.properties
deleted file mode 100644
index 27b2927d980..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-miseq/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for creating  a flow cell 
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/create-flowcell-miseq
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = create-flow-cell-miseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-nextseq/create-flow-cell-nextseq.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-nextseq/create-flow-cell-nextseq.py
deleted file mode 100755
index 981db5dd2ab..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-nextseq/create-flow-cell-nextseq.py
+++ /dev/null
@@ -1,290 +0,0 @@
-'''
-@copyright:
-2014 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Parses the two Illumina provided files 'RunParameters.xml' and 'RunInfo.xml'
-and creates one Sample of type 'ILLUMINA_FLOW_CELL' and sets Sample properties 
-from those two XML files. Additionally the number of lanes are read out and
-are created as contained samples of type 'ILLUMINA_FLOW_LANE'.
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for NextSeq runs: 140729_NS500318_0002_AH0T25AGXX
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import shutil
-import re
-from time import *
-from datetime import *
-import xml.etree.ElementTree as etree
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.common.mail import EMailAddress
-
-RUNPARAMETERS = 'RunParameters.xml'
-RUNINFO = 'RunInfo.xml'
-FLOWCELL_SPACE='/BSSE_FLOWCELLS/'
-FLOWCELL_PROJECT='FLOWCELLS/'
-EXPERIMENT_TYPE_CODE='HT_SEQUENCING'
-CYCLES_VOCABULARY_NAME = "CYCLES" 
-
-# Mapping between XML file naming and openBIS properties
-
-RUNINFO_XML = {'LANECOUNT':'LaneCount', 'SURFACECOUNT':'SurfaceCount',
-   'SWATHCOUNT':'SwathCount', 'TILECOUNT':'TileCount'}
-
-PERSISTANT_KEY_MAP = "persistant_key_map"
-
-#------------------------------------------------------------------------------
-
-class parseXmlFile: 
-    
-  def __init__(self, xmlFile):
-    self.xmlFile = xmlFile
-    self.tree = etree.parse(self.xmlFile)
-    self.root = self.tree.getroot()
-
-  def getXmlElement (self, elementName):
-    '''
-    Returns the text value of a given XML element
-    '''
-    for e in self.root.getchildren():
-      element = e.find(elementName)
-      if element is None:
-	return 'None'
-      else:
-	return element.text
-
-  def getAllchildren (self, elementName):
-    '''
-    finds all children of a given XML Element and returns them as list
-    '''
-    for e in self.root.getchildren():
-      # the '//' means look recursively for all children not only direct ones
-      childList  = self.tree.findall('//' + elementName)
-    return childList 
-
-# -----------------------------------------------------------------------------
-
-def createOpenbisTimeStamp(file):
-  '''
-  Creates a openBIS compatible time stamp of a file time stamp
-  '''
-  mtime = os.path.getmtime(file)
-  lt = localtime(mtime)
-  tz = localtime().tm_hour - gmtime().tm_hour
-  return (strftime("%Y-%m-%d %H:%M:%S GMT" + "%+.2d" % tz + ":00", lt))
-
-# -----------------------------------------------------------------------------
-
-def registerFlowLane(a_lane, transaction, name, newFlowCell):
-  '''
-  Registers a new Flow lane 
-  '''
-  newFlowLane = transaction.createNewSample(FLOWCELL_SPACE + name + ':' + str(a_lane), "ILLUMINA_FLOW_LANE")
-  newFlowLane.setPropertyValue('CONCENTRATION_FLOWLANE', str(0))
-  newFlowLane.setContainer(newFlowCell)
-  
-# -----------------------------------------------------------------------------
-
-def addVocabularyTerm(transaction, vocabularyName, vocabularyCode):
-  modifiableVocabulary = transaction.getVocabularyForUpdate(vocabularyName)
-  if not (modifiableVocabulary.containsTerm(vocabularyCode)):
-    ordinals = []
-    terms = modifiableVocabulary.getTerms()
-    for term in terms:
-      ordinals.append(term.getOrdinal())
-            
-    newOrdinal = max(ordinals)+1;
-
-    newTerm = transaction.createNewVocabularyTerm();
-    newTerm.setCode(vocabularyCode)
-    newTerm.setOrdinal(newOrdinal)
-    modifiableVocabulary.addTerm(newTerm)
-
-# -----------------------------------------------------------------------------
-
-def sendEmail(mailClient, fcId):
-
-  replyTo = EMailAddress("manuel.kohler@bsse.ethz.ch")
-  fromAddress = replyTo
-  manuel = EMailAddress("manuel.kohler@bsse.ethz.ch")
-  ina = EMailAddress("ina.nissen@bsse.ethz.ch")
-  christian = EMailAddress("christian.beisel@bsse.ethz.ch")
-  katja = EMailAddress("katja.eschbach@bsse.ethz.ch")
-  philippe = EMailAddress("philippe.demougin@unibas.ch")
-  elodie = EMailAddress("belodie@ethz.ch")
-
-  mailClient.sendEmailMessage("Automatically created new NextSeq flow cell " + fcId  + " in openBIS", \
-                "A new NextSeq run got started with flow cell: " + fcId , replyTo, fromAddress, ina, katja, christian, philippe, manuel, elodie);
-
-# -----------------------------------------------------------------------------
-
-def post_storage(context):
-  mailClient = context.getGlobalState().getMailClient()
-  results = context.getPersistentMap().get(PERSISTANT_KEY_MAP)
-  sendEmail(mailClient, results[0]) 
-
-# -----------------------------------------------------------------------------
-
-def searchSample(transaction, sampleName):
-
-  # Search for the sample and check if there is already sample with this fcId
-  search_service = transaction.getSearchService()
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleName));
-  foundSamples = search_service.searchForSamples(sc)
-  return foundSamples
-
-# -----------------------------------------------------------------------------
-
-def setFcProperty(searchId, dict, runInfo, newFlowCell):
-  children = runInfo.getAllchildren(searchId)
-  for element in (dict):
-    if (element <> '') and (dict[element] <> ''):
-      newFlowCell.setPropertyValue(element, children[0].attrib[dict[element]])
-
-# -----------------------------------------------------------------------------
-
-def setIndexLengths (readMap, newFlowCell):
-
-  indexCount = 0
-  readCount = 0
-
-  print(readMap)
-  for entry in readMap:
-    if readMap[entry][1] == 'Y':
-      indexCount += 1
-    else:
-      readCount += 1
-
-  if readCount == 2:
-    newFlowCell.setPropertyValue("END_TYPE", "PAIRED_END")
-  else:
-    newFlowCell.setPropertyValue("END_TYPE", "SINGLE_READ")
-
-  try:
-    if indexCount == 1:
-      newFlowCell.setPropertyValue("INDEXREAD", readMap['2'][0])
-    else:
-      newFlowCell.setPropertyValue("INDEXREAD", '0')
-  except:
-    newFlowCell.setPropertyValue("INDEXREAD", '0') 
-
-  try:
-    if indexCount == 2:
-      newFlowCell.setPropertyValue("INDEXREAD2", readMap['3'][0])
-      newFlowCell.setPropertyValue("INDEXREAD", readMap['2'][0])
-    else:
-      newFlowCell.setPropertyValue("INDEXREAD2", '0')
-  except:
-    newFlowCell.setPropertyValue("INDEXREAD2", '0')
-
-# -----------------------------------------------------------------------------
-
-def sanitizeString(myString):
-    return re.sub('[^A-Za-z0-9]+', '_', myString)
-
-# -----------------------------------------------------------------------------
-
-def get_version(my_path):
-  return my_path[-4:-2]
-
-# -----------------------------------------------------------------------------
-
-def process(transaction):
-
-  incoming = transaction.getIncoming()
-  incomingPath = incoming.getAbsolutePath()
-
-  name = incoming.getName()
-  # ['120726', 'M00721', '0011', 'A000000000-A1FVF']
-  # NextSeq: 140729_NS500318_0002_AH0T25AGXX
-  
-  runDate, MiseqID, runningNumber, trayAndFcId = name.split("_")
-  tray = trayAndFcId[0]
-  fcId = trayAndFcId[1:]
-  transaction.getRegistrationContext().getPersistentMap().put(PERSISTANT_KEY_MAP, [fcId])
-
-  # Parse the RunInfo.xml and RunParameters.xml
-  runInfo = parseXmlFile(incomingPath + '/' + RUNINFO) 
-  runParameters = parseXmlFile(incomingPath + '/' + RUNPARAMETERS)
-  
-  # get the number of lanes
-  maxLanes = runInfo.getAllchildren('FlowcellLayout')[0].attrib[RUNINFO_XML['LANECOUNT']]
-
-  foundSamples = searchSample(transaction, fcId)
-  # if flow cell already exists then just get it for an update
-  if foundSamples.size() > 0:
-    print('Already found a Flow Cell with the following name: '+ name + ". Will re-set the properties...")
-    newFlowCell = transaction.getSampleForUpdate(foundSamples[0].getSampleIdentifier())
-  else:
-  # Create a new Flow Cell
-    newFlowCell = transaction.createNewSample(FLOWCELL_SPACE + fcId, "ILLUMINA_FLOW_CELL")
-    
-  exp = transaction.getExperiment(FLOWCELL_SPACE + FLOWCELL_PROJECT + datetime.now().strftime("%Y.%m"))
-  if exp == None:
-    exp = transaction.createNewExperiment(FLOWCELL_SPACE + FLOWCELL_PROJECT + datetime.now().strftime("%Y.%m"),
-	  EXPERIMENT_TYPE_CODE)
-  newFlowCell.setExperiment(exp)
-
-  foundLanes = searchSample(transaction, fcId + ":1")
-  if not foundLanes:
-    # Create flow lanes, but we ignore the maxLanes, as we have 4 physical lanes but only one logical lane
-    [registerFlowLane(lane, transaction, fcId, newFlowCell) for lane in range(1,int(1)+1)]
-
-  run = runInfo.getAllchildren('Run')[0].attrib
-  RTAversion = (runParameters.getAllchildren('RTAVersion'))[0].text
-  addVocabularyTerm(transaction, "PIPELINE_VERSION", RTAversion)
-  newFlowCell.setPropertyValue("ILLUMINA_PIPELINE_VERSION", RTAversion)
-  
-  runMode = sanitizeString(runParameters.getAllchildren('Chemistry')[0].text)
-  addVocabularyTerm(transaction, "RUN_MODE_VOCABULARY", runMode)
-  newFlowCell.setPropertyValue("RUN_MODE", runMode)
-
-  recipe_folder = (runParameters.getAllchildren('RecipeFolder'))[0].text
-  major_version = get_version(recipe_folder)
-    
-  # Reading out <FlowcellLayout LaneCount="1" SurfaceCount="1" SwathCount="1" TileCount="12" />
-  setFcProperty('FlowcellLayout', RUNINFO_XML, runInfo, newFlowCell)
-
-  sequencer = runInfo.getAllchildren('Instrument')
-  newFlowCell.setPropertyValue("SEQUENCER", sequencer[0].text)
-  newFlowCell.setPropertyValue("FLOW_CELL_SEQUENCED_ON", createOpenbisTimeStamp(incomingPath + '/' + RUNPARAMETERS))
-  newFlowCell.setPropertyValue("RUN_NAME_FOLDER", name)
-  newFlowCell.setPropertyValue("SBS_KIT", major_version)
-
-  readMap = {}
-  reads = runInfo.getAllchildren('Reads')
-  read = reads[0].findall('Read')
-
-  for r in read:
-    cycles = r.get('NumCycles', 'str')
-    number = r.get('Number', 'str')
-    isIndexed = r.get('IsIndexedRead', 'str')
-    readMap[number] = [cycles, isIndexed]
-
-  # example of readMap: {'1': ['151', 'N'], '2': ['8', 'Y'], '3': ['8', 'Y'], '4': ['151', 'N']}
-  numberOfCycles = readMap['1'][0]   
-  addVocabularyTerm(transaction, CYCLES_VOCABULARY_NAME, numberOfCycles)
-  newFlowCell.setPropertyValue("CYCLES_REQUESTED_BY_CUSTOMER", numberOfCycles)
-
-  setIndexLengths (readMap, newFlowCell)
-  
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-nextseq/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-nextseq/plugin.properties
deleted file mode 100644
index 8131d29f94d..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell-nextseq/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for creating  a flow cell 
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/create-flowcell-nextseq
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = create-flow-cell-nextseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell/create-flowcell.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell/create-flowcell.py
deleted file mode 100644
index 9ab05190fe8..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell/create-flowcell.py
+++ /dev/null
@@ -1,309 +0,0 @@
-'''
-@copyright:
-2015 ETH Zuerich, SIS
-    
-@license: 
-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.
-
-@description:
-Parses the two Illumina provided files 'RunParameters.xml' / 'runParameters.xml
-'and 'RunInfo.xml' and creates one Sample of type 'ILLUMINA_FLOW_CELL'
-and sets Sample properties from those two XML files. Additionally the
-number of lanes are read out and are created as contained samples of
-type 'ILLUMINA_FLOW_LANE'.
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import shutil
-import re
-from time import *
-from datetime import *
-import xml.etree.ElementTree as etree
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.common.mail import EMailAddress
-
-# The following module is located in the path defined in the datastore_server.conf
-# Look for: -Dpython.path}
-from gfb_utils import *
-
-RUNPARAMETERS = 'RunParameters.xml'
-ALTERNATIVE_RUNPARAMETERS = 'runParameters.xml'
-RUNINFO = 'RunInfo.xml'
-FLOWCELL_SPACE='/BSSE_FLOWCELLS/'
-FLOWCELL_PROJECT='FLOWCELLS/'
-EXPERIMENT_TYPE_CODE='HT_SEQUENCING'
-CYCLES_VOCABULARY_NAME = "CYCLES" 
-
-# Mapping between XML file naming and openBIS properties
-
-RUNINFO_XML = {'LANECOUNT':'LaneCount', 'SURFACECOUNT':'SurfaceCount',
-   'SWATHCOUNT':'SwathCount', 'TILECOUNT':'TileCount'}
-RUNPARAMETERS_XML = {'FLOWCELL':'Flowcell', 'RTAVERSION':'RTAVersion',
-  'CONTROLLANE':'ControlLane', 'SBS':'Sbs', 'INDEX':'Index',
-  'CYCLES_REQUESTED_BY_CUSTOMER':'Read1', 'PE':'Pe', 'RUN_MODE': 'RunMode',
-  'CONTROL_SOFTWARE_VERSION': 'ApplicationVersion'}
-
-PERSISTENT_KEY_MAP = "persistent_key_map"
-
-
-class parseXmlFile: 
-    
-    def __init__(self, xmlFile):
-        self.xmlFile = xmlFile
-        self.tree = etree.parse(self.xmlFile)
-        self.root = self.tree.getroot()
-
-
-    def getXmlElement (self, elementName):
-        '''
-        Returns the text value of a given XML element
-        '''
-        for e in self.root.getchildren():
-            element = e.find(elementName)
-            if element is None:
-                return 'None'
-            else:
-                return element.text
-
-
-    def getAllchildren (self, elementName):
-        '''
-        finds all children of a given XML Element and returns them as list
-        '''
-        for e in self.root.getchildren():
-            # the '//' means look recursively for all children not only direct ones
-            childList  = self.tree.findall('.//' + elementName)
-            return childList 
-
-
-def registerFlowLane(a_lane, transaction, name, newFlowCell):
-  '''
-  Registers a new Flow lane 
-  '''
-  newFlowLane = transaction.createNewSample(FLOWCELL_SPACE + name + ':' + str(a_lane), "ILLUMINA_FLOW_LANE")
-  newFlowLane.setPropertyValue('CONCENTRATION_FLOWLANE', str(0))
-  newFlowLane.setContainer(newFlowCell)
-
-
-def addVocabularyTerm(transaction, vocabularyName, vocabularyCode):
-  modifiableVocabulary = transaction.getVocabularyForUpdate(vocabularyName)
-  if not (modifiableVocabulary.containsTerm(vocabularyCode)):
-    ordinals = []
-    terms = modifiableVocabulary.getTerms()
-    for term in terms:
-      ordinals.append(term.getOrdinal())
-            
-    newOrdinal = max(ordinals)+1;
-
-    newTerm = transaction.createNewVocabularyTerm();
-    newTerm.setCode(vocabularyCode)
-    newTerm.setOrdinal(newOrdinal)
-    modifiableVocabulary.addTerm(newTerm)
-
-
-def send_email(mailClient, persistent_map):
-
-    replyTo = EMailAddress("no-reply@bsse.ethz.ch")
-    fromAddress = replyTo
-    manuel = EMailAddress("manuel.kohler@id.ethz.ch")
-    ina = EMailAddress("ina.nissen@bsse.ethz.ch")
-    christian = EMailAddress("christian.beisel@bsse.ethz.ch")
-    katja = EMailAddress("katja.eschbach@bsse.ethz.ch")
-    philippe = EMailAddress("philippe.demougin@unibas.ch")
-    elodie = EMailAddress("belodie@ethz.ch")
-
-    subject = "Automatically created new " + persistent_map[1] + " flow cell " + persistent_map[0]  + " in openBIS"
-    body = "A new run got started with flow cell: " + persistent_map [0] + "\nHave a good day!"
-    mailClient.sendEmailMessage(subject, body, replyTo, fromAddress, ina, katja, christian,
-                                 philippe, manuel, elodie);
-
-
-def post_storage(context):
-    mailClient = context.getGlobalState().getMailClient()
-    persistent_map = context.getPersistentMap().get(PERSISTENT_KEY_MAP)
-    send_email(mailClient, persistent_map) 
-
-
-def searchSample(transaction, sampleName):
-
-    search_service = transaction.getSearchService()
-    sc = SearchCriteria()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleName));
-    foundSamples = search_service.searchForSamples(sc)
-    return foundSamples
-
-
-def setFcProperty(searchId, my_dict, runInfo, newFlowCell):
-    children = runInfo.getAllchildren(searchId)
-    for element in (my_dict):
-        if (element != '') and (my_dict[element] != ''):
-            newFlowCell.setPropertyValue(element, children[0].attrib[my_dict[element]])
-
-
-def set_index_lengths (readMap, newFlowCell):
-
-    indexCount = 0
-    readCount = 0
-
-    for entry in readMap:
-        if readMap[entry][1] == 'Y':
-            indexCount += 1
-        else:
-            readCount += 1
-
-    if readCount == 2:
-        newFlowCell.setPropertyValue("END_TYPE", "PAIRED_END")
-    else:
-        newFlowCell.setPropertyValue("END_TYPE", "SINGLE_READ")
-
-    try:
-        if indexCount == 1:
-            newFlowCell.setPropertyValue("INDEXREAD", readMap['2'][0])
-        else:
-            newFlowCell.setPropertyValue("INDEXREAD", '0')
-    except:
-        newFlowCell.setPropertyValue("INDEXREAD", '0') 
-
-    try:
-        if indexCount == 2:
-            newFlowCell.setPropertyValue("INDEXREAD2", readMap['3'][0])
-            newFlowCell.setPropertyValue("INDEXREAD", readMap['2'][0])
-        else:
-            newFlowCell.setPropertyValue("INDEXREAD2", '0')
-    except:
-        newFlowCell.setPropertyValue("INDEXREAD2", '0')
-
-
-def sanitizeString(myString):
-    return re.sub('[^A-Za-z0-9]+', '_', myString)
-
-
-def get_version(my_path):
-    return my_path[-4:-2]
-
-
-def create_or_update_flowcell(transaction, fcId):
-
-    found_samples = searchSample(transaction, fcId)
-    # if flow cell already exists then just get it for an update
-    if found_samples.size() > 0:
-        print('Already found a Flow Cell with the following name: ' + fcId + ". Will re-set the properties...")
-        new_flowcell = transaction.getSampleForUpdate(found_samples[0].getSampleIdentifier())
-    else:
-        new_flowcell = transaction.createNewSample(FLOWCELL_SPACE + fcId, "ILLUMINA_FLOW_CELL")
-    exp = transaction.getExperiment(FLOWCELL_SPACE + FLOWCELL_PROJECT + datetime.now().strftime("%Y.%m"))
-    if exp is None:
-        exp = transaction.createNewExperiment(FLOWCELL_SPACE + FLOWCELL_PROJECT +
-                                              datetime.now().strftime("%Y.%m"), EXPERIMENT_TYPE_CODE)
-    new_flowcell.setExperiment(exp)
-    return new_flowcell
-
-
-def set_run_mode(transaction, new_flowcell, run_mode):
-    addVocabularyTerm(transaction, "RUN_MODE_VOCABULARY", run_mode)
-    new_flowcell.setPropertyValue("RUN_MODE", run_mode)
-
-def process(transaction):
-
-    incoming = transaction.getIncoming()
-    incomingPath = incoming.getAbsolutePath()
-
-    run_id = incoming.getName()
-    model = get_model(run_id)
-    print("Auto-detected Illumina model: " + model)
-
-    run_date, sequencer_id, running_number, tray_and_fcId = run_id.split("_")
-    tray = tray_and_fcId[0]
-    if model in [Sequencers.MISEQ]:
-        fc_id = tray_and_fcId
-    else:
-        fc_id = tray_and_fcId[1:]
-    transaction.getRegistrationContext().getPersistentMap().put(PERSISTENT_KEY_MAP, [fc_id, model])
-
-    # Parse the RunInfo.xml and RunParameters.xml
-    runInfo = parseXmlFile(os.path.join(incomingPath, RUNINFO)) 
-    try:
-        runParameters = parseXmlFile(os.path.join(incomingPath, RUNPARAMETERS))
-    except:
-        runParameters = parseXmlFile(os.path.join(incomingPath, ALTERNATIVE_RUNPARAMETERS))
-  
-    # get the number of lanes
-    max_lanes = runInfo.getAllchildren('FlowcellLayout')[0].attrib[RUNINFO_XML['LANECOUNT']]
-    new_flowcell = create_or_update_flowcell(transaction, fc_id)
-
-    flow_lanes = new_flowcell.getContainedSamples()
-    if len(flow_lanes) is 0:
-        if model in [Sequencers.NEXTSEQ_500]:
-            max_lanes = 1
-        [registerFlowLane(lane, transaction, fc_id, new_flowcell) for lane in range(1,int(max_lanes)+1)]
-
-    # NextSeq specific
-    if model in [Sequencers.NEXTSEQ_500]:
-        run_mode = sanitizeString(runParameters.getAllchildren('Chemistry')[0].text)
-        set_run_mode(transaction, new_flowcell, run_mode)
-        recipe_folder = (runParameters.getAllchildren('RecipeFolder'))[0].text
-        major_version = get_version(recipe_folder)
-        new_flowcell.setPropertyValue("SBS_KIT", major_version)
-        new_flowcell.setPropertyValue("CONTROL_SOFTWARE_VERSION", runParameters.getAllchildren('ApplicationVersion')[0].text)
-
-    # MiSeq specific
-    if model in [Sequencers.MISEQ]:
-        ReagentKitBarcode = (runParameters.getAllchildren('ReagentKitBarcode'))[0].text
-        new_flowcell.setPropertyValue("SBS_KIT", ReagentKitBarcode)
-        new_flowcell.setPropertyValue("CONTROL_SOFTWARE_VERSION", runParameters.getAllchildren('ApplicationVersion')[0].text)
-
-    # HiSeq specific
-    if model in HISEQ_LIST:
-        run_mode = sanitizeString(runParameters.getXmlElement(RUNPARAMETERS_XML['RUN_MODE']))
-        new_flowcell.setPropertyValue("FLOWCELLTYPE", runParameters.getXmlElement(RUNPARAMETERS_XML['FLOWCELL']))
-        new_flowcell.setPropertyValue("SBS_KIT", runParameters.getXmlElement(RUNPARAMETERS_XML['SBS']))
-        new_flowcell.setPropertyValue("CONTROL_SOFTWARE_VERSION", runParameters.getXmlElement(RUNPARAMETERS_XML['CONTROL_SOFTWARE_VERSION']))
-        if (new_flowcell.getPropertyValue("END_TYPE")) == "PAIRED_END":
-            new_flowcell.setPropertyValue("PAIRED_END_KIT", runParameters.getXmlElement(RUNPARAMETERS_XML['PE']))
-        set_run_mode(transaction, new_flowcell, run_mode)
-
-    rta_version = (runParameters.getAllchildren('RTAVersion'))[0].text
-    addVocabularyTerm(transaction, "PIPELINE_VERSION", rta_version)
-    new_flowcell.setPropertyValue("ILLUMINA_PIPELINE_VERSION", rta_version)
-
-    # Reading out <FlowcellLayout LaneCount="1" SurfaceCount="1" SwathCount="1" TileCount="12" />
-    setFcProperty('FlowcellLayout', RUNINFO_XML, runInfo, new_flowcell)
-
-    sequencer = runInfo.getAllchildren('Instrument')
-    addVocabularyTerm(transaction, "SEQUENCER", sequencer[0].text)
-    new_flowcell.setPropertyValue("SEQUENCER", sequencer[0].text)
-    new_flowcell.setPropertyValue("FLOW_CELL_SEQUENCED_ON", create_openbis_timestamp(os.path.join(incomingPath, RUNINFO)))
-    new_flowcell.setPropertyValue("RUN_NAME_FOLDER", run_id)
-
-    readMap = {}
-    reads = runInfo.getAllchildren('Reads')
-    read = reads[0].findall('Read')
-
-    for r in read:
-        cycles = r.get('NumCycles', 'str')
-        number = r.get('Number', 'str')
-        is_indexed = r.get('IsIndexedRead', 'str')
-        readMap[number] = [cycles, is_indexed]
-
-    # example of readMap: {'1': ['151', 'N'], '2': ['8', 'Y'], '3': ['8', 'Y'], '4': ['151', 'N']}
-    number_of_cycles = readMap['1'][0]
-    addVocabularyTerm(transaction, CYCLES_VOCABULARY_NAME, number_of_cycles)
-    new_flowcell.setPropertyValue("CYCLES_REQUESTED_BY_CUSTOMER", number_of_cycles)
-
-    set_index_lengths(readMap, new_flowcell)
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell/plugin.properties
deleted file mode 100644
index dd75e75ff45..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/create-flowcell/plugin.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-# 
-# Drop box for creating  a flow cell 
-#
-incoming-dir = ${incoming-root-dir}/create-flowcell
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = create-flowcell.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-jython-version=2.7
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/export-meta-data/export-meta-data.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/export-meta-data/export-meta-data.py
deleted file mode 100644
index f5253bc0874..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/export-meta-data/export-meta-data.py
+++ /dev/null
@@ -1,464 +0,0 @@
-'''
-Processes each flow lane of a Sequencing run
-
-Expects as incoming folder:
-BSSE_QGF_22266_H0W8YBGXX_1
-or
-Undetermined_H0W8YBGXX
-
-Note: 
-print statements go to: ~openbis/sprint/datastore_server/log/startup_log.txt
-'''
-
-import os
-import fnmatch
-import time
-import shutil
-import re
-import subprocess
-from time import *
-from datetime import *
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.dss.generic.shared import DataSourceQueryService
-
-FASTQ_GZ_PATTERN = "*.fastq.gz"
-METADATA_FILE_SUFFIX = "_metadata.tsv"
-AFFILIATION= {'FMI': '/links/shared/dsu/dss/customers/fmi/drop-box/',
-              'BIOCENTER_BASEL': '/links/shared/dsu/dss/customers/biozentrum/drop-box/',
-              'NEUROSTEMX': '/links/shared/dsu/dss/customers/biozentrum/drop-box/',
-              'SWISS_TPH' : '/links/shared/dsu/dss/customers/biozentrum/drop-box/'}
-AFFILIATION_PROPERTY_NAME='AFFILIATION'
-INDEX1='BARCODE'
-INDEX2='INDEX2'
-EXTERNAL_SAMPLE_NAME='EXTERNAL_SAMPLE_NAME'
-INDEXREAD1='INDEXREAD'
-INDEXREAD2='INDEXREAD2'
-SAMPLE_TYPE = 'SAMPLE_TYPE'
-SAMPLE_CODE = 'SAMPLE_CODE'
-NCBI_ORGANISM_TAXONOMY='NCBI_ORGANISM_TAXONOMY'
-PHIX_TAXONOMY_ID='10847'
-DEFAULT_INDEX='NoIndex'
-CRC32_PATH='lib/crc32'
-
-# -------------------------------------------------------------------------------
-
-def getThreadProperties(transaction):
-  threadPropertyDict = {}
-  threadProperties = transaction.getGlobalState().getThreadParameters().getThreadProperties()
-  for key in threadProperties:
-    try:
-      threadPropertyDict[key] = threadProperties.getProperty(key)
-    except:
-      pass
-  return threadPropertyDict
-
-def CRC32_from_file(filename, transaction):
-    threadPropertyDict = getThreadProperties(transaction)
-    absolutePath = os.path.dirname(os.path.realpath(threadPropertyDict['script-path']))
-    fullPathCrc32 = (os.path.join(absolutePath, CRC32_PATH))
-    if os.path.exists(fullPathCrc32):
-        args = [fullPathCrc32, filename]
-        p = subprocess.Popen(args, stdout=subprocess.PIPE)
-        cksum = (p.communicate()[0])
-        print("Calculated crc32 checksum for: "+ os.path.basename(filename) + " " + cksum)
-    else:
-        cksum = 0 & 0xFFFFFFFF
-    return cksum
-
-def getFileNames(path):
-  '''
-  Gets all files matching a PATTERN in a path recursively
-  and returns the result as a list
-  '''
-  matches = []
-  for root, dirnames, filenames in os.walk(path):
-    for filename in fnmatch.filter(filenames, FASTQ_GZ_PATTERN):
-        matches.append(os.path.join(root, filename))
-  matches.sort()
-  return(matches)
-
-def writeMetadataFile(transaction, folder_name, meta_data_file_name, sequencing_sample_properties_dict,
-                      fcMetaDataDict, experiment, affiliation_name, fastqFileList, flowLane):
-  '''
-  Writes a file of meta data related to one sample
-  '''
-
-  sequencing_sample_properties_list = sequencing_sample_properties_dict.keys()
-  sequencing_sample_properties_list.sort()
-
-  expId = experiment.getExperimentIdentifier()
-  try:
-    meta_data_file = open(meta_data_file_name,'w')
-    for propertyType in sequencing_sample_properties_list:
-      if (propertyType in [u'FLOW_CELL_PROPERTIES']):
-        continue
-      if propertyType in [SAMPLE_TYPE] or propertyType in [SAMPLE_CODE]:
-         meta_data_file.write(propertyType.encode('utf-8') + "\t" +
-                         str(sequencing_sample_properties_dict[propertyType])+ "\n")
-      else:
-        meta_data_file.write(propertyType.encode('utf-8') + "\t" +
-                         sequencing_sample_properties_dict[propertyType].encode('utf-8').replace('\n',',') + "\n")
-
-    meta_data_file.write("EXPERIMENT\t" + expId + "\n".encode('utf-8'))
-    meta_data_file.write("\nFLOWCELL PROPERTIES\n".encode('utf-8'))
-    fcMetaDataDict["LANE_NUMBER"] = flowLane
-    keys = fcMetaDataDict.keys()
-    keys.sort()
-    
-    sequencer_vocabulary_description = get_vocabulary_descriptions(transaction, 'SEQUENCER')    
-    meta_data_file.write('SEQUENCER_MODEL' + "\t" + sequencer_vocabulary_description[fcMetaDataDict['SEQUENCER']].encode('utf-8') + "\n")
-    
-    for k in keys:
-      meta_data_file.write(k.encode('utf-8') + "\t" + fcMetaDataDict[k].encode('utf-8') + "\n")
-  
-    meta_data_file.write("\nFASTQ_FILES\n".encode('utf-8'))
-    for file in fastqFileList:
-        meta_data_file.write(os.path.basename(file) + "\t" + str(CRC32_from_file(file, transaction)) + "\n")
-
-  except IOError:
-    print ('File error, could not write '+ file)
-  finally:
-    meta_data_file.close()
-  
-  destinationFolder = folder_name
-  #extraCopy (affiliation_name, meta_data_file_name)
-  #extraCopySciCore (affiliation_name, meta_data_file_name, destinationFolder)
-
-def create_openbis_timestamp ():
-  '''
-  Create an openBIS conform timestamp
-  '''
-  tz=localtime()[3]-gmtime()[3]
-  d=datetime.now()
-  return d.strftime("%Y-%m-%d %H:%M:%S GMT"+"%+.2d" % tz+":00")
-
-# -------------------------------------------------------------------------------
-
-  def sortedDictValues(adict):
-    '''
-    Given a dictionary it returns the values of this dict sorted 
-    by the keys
-    d = {2:1, 4:1, 1:1, 100:3, 3:5}
-    sortedDictValues(d)
-    [1, 1, 5, 1, 3]
-    '''
-    keys = adict.keys()
-    keys.sort()
-    return map(adict.get, keys)
-
-# -------------------------------------------------------------------------------
-
-def extraCopy (affiliation_name, path):
-  '''
-  @deprecated: replaced with extraCopySciCore
-  Handles the extra copies of the data for transfer with datamover via the
-  bc2 network to the FMI and BIOCENTER
-  For the BIOCENTER there is a folder created in which all data gets into
-  '''
-  if (affiliation_name in AFFILIATION):
-    if (affiliation_name == 'BIOCENTER_BASEL' or affiliation_name == 'NEUROSTEMX' ):
-      dirname = AFFILIATION[affiliation_name] + datetime.now().strftime("%Y-%m-%d")
-      if not os.path.exists(dirname):
-        os.mkdir(dirname)
-      shutil.copy(path, dirname)
-    else:
-      shutil.copy(path, AFFILIATION[affiliation_name])
-
-# -------------------------------------------------------------------------------
-
-def extraCopySciCore (affiliation_name, filePath, destinationFolder=""):
-    '''
-    Handles the extra copies of the data for transfer with datamover for SCICORE
-    '''
-    
-    #dropBoxFolder = '/tmp/scicore'
-    dropBoxFolder = '/links/shared/dsu/dss/customers/biozentrum_scicore/drop-box'
-    basename = os.path.basename(filePath)
-    
-    print("extraCopySciCore")
-    print basename
-    print affiliation_name
- 
-    if (affiliation_name in ['BIOCENTER_BASEL', 'NEUROSTEMX', 'SWISS_TPH']):
-        dirname = os.path.join(dropBoxFolder, destinationFolder)
-        if not os.path.exists(dirname):
-            os.mkdir(dirname)
-        print("COPYING " + filePath + " TO " + dirname)
-        shutil.copy(filePath, dirname)
-
-# -------------------------------------------------------------------------------
-
-def get_sample_properties (transaction, sample): 
-  
-  sample_properties_dict = {}
-  # returns Map<String, String>
-  sample_properties = sample.getSample().getProperties()
-  sequencing_sample_type = sample.getSampleType()
-  sequencing_sample_code = sample.getCode()
-  sample_properties_dict[SAMPLE_TYPE] = sequencing_sample_type
-  sample_properties_dict[SAMPLE_CODE] = sequencing_sample_code
-
-  for property in sample_properties:
-      code = property.getPropertyType().getSimpleCode()
-      sample_properties_dict[code] = property.tryGetAsString()
-  
-  return sample_properties_dict
-
-# -------------------------------------------------------------------------------
-
-def searchParents (search_service, parents):
-
-  # search for the parents
-  sc = SearchCriteria()
-  # set the Search Criteria to an OR condition, default is AND
-  sc.setOperator(SearchCriteria.SearchOperator.MATCH_ANY_CLAUSES)
-  # Get the codes for all parents
-  for parent in parents:
-    parentSubCode = parent.getSubCode()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, parentSubCode));
-  # all parents of the flow lane
-  foundParents = search_service.searchForSamples(sc)
-
-  return foundParents
-
-# -------------------------------------------------------------------------------
-
-def sanitizeString(myString):
-  return re.sub('[^A-Za-z0-9]+', '_', myString)
-
-# -------------------------------------------------------------------------------
-
-def searchSample (sample_code, search_service):
-  sc = SearchCriteria()
-  print('Searching sample: '+ str(sample_code))
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sample_code));
-  foundSamples = search_service.searchForSamples(sc)
-  return foundSamples
-
-
-def renameFiles (fastq_files, undetermined, flow_cell_id):
-    
-    newFastqFileList = []
-    for file in fastq_files:
-        if undetermined:
-            folder = os.path.dirname(file)
-            fileName = os.path.basename(file)
-            filepart, suffix = fileName.split('.',1)
-            new_file =  folder + "/" + flow_cell_id + '_' + filepart + "." + suffix
-            print ("Renaming file " + file + " to " + new_file)
-            os.rename(file, new_file)
-        else:
-            new_file = file
-        newFastqFileList.append(new_file)
-    return newFastqFileList
-
-# -------------------------------------------------------------------------------
-
-def put_files_to_dataset (transaction, dataSet, fastq_files, folder_name, flow_cell_id, affiliation_name, undetermined):
-
-    for file in fastq_files:
-        extraCopySciCore (affiliation_name, file, folder_name)
-        transaction.moveFile(file, dataSet, folder_name)
-
-# -------------------------------------------------------------------------------
-
-def split_incoming_folder_name (name):
-  split=name.split("_")
-
-  # expected incoming Name, e.g.: BSSE_QGF_22266_H0W8YBGXX_1
-  if (len(split) == 5):
-    sample_code = '-'.join([split[0], split[1], split[2]])
-    flowCellId = split[3]
-    flowLane = split[-1]
-    undetermined = False
-
-  # expected Undetermined_H0W8YBGXX
-  if (len(split) == 2):
-    sample_code = ''
-    flowCellId = split[-1]
-    flowLane = "1"
-    undetermined = True
-  
-  incoming_sample = flowCellId + ':' + flowLane
-  return sample_code, flowCellId, flowLane, incoming_sample, undetermined
-
-# -------------------------------------------------------------------------------
-
-def get_vocabulary_descriptions (transaction, vocabulary_name):
-  vocabulary_descriptions_dict = {}
-  vocabulary = transaction.getVocabulary(vocabulary_name)
-  vocabulary_terms = vocabulary.getTerms()
-  for term in vocabulary_terms:
-    vocabulary_descriptions_dict[term.getCode()] = term.getDescription()
-  return vocabulary_descriptions_dict
-
-# -------------------------------------------------------------------------------
-
-def process(transaction):
-
-  undetermined = False
-
-  print("\n" + str(datetime.now()))
-
-  incomingPath = transaction.getIncoming().getAbsolutePath()
-  name = transaction.getIncoming().getName()
-  # Get the search service
-  search_service = transaction.getSearchService()
-  
-  def searchSampleInSpace (type, search_service):
-      
-      spaceCode = "UNI_BASEL_GAGNEUX"
-      sc = SearchCriteria()
-#       print('Searching sample: '+ str(code))
-      sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.SPACE, spaceCode));
-      sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, type));
-      foundSamples = search_service.searchForSamples(sc)
-      return foundSamples
-  
-  samples = searchSampleInSpace("ILLUMINA_SEQUENCING", search_service)
-  print(samples.size())
-  
-  
-  
-  
-  for sample in samples[0:5]:
-  
-      sequencing_sample_properties_dict = get_sample_properties (transaction, sample)
-      meta_data_file_name =  sequencing_sample_properties_dict["SAMPLE_CODE"] +  METADATA_FILE_SUFFIX
-      
-      sampleName = sequencing_sample_properties_dict["SAMPLE_CODE"]
-      
-      print(meta_data_file_name)
-      print(sequencing_sample_properties_dict)
-      
-      flowCellId = "150109_D00535_0042_AHB2K0ADXX"
-      
-      flowcell_sample_immutable = searchSample (flowCellId, search_service)
-      fcMetaDataDict = get_sample_properties(transaction, flowcell_sample_immutable[0])
-    
-      experiment = sample.getExperiment()
-      affiliation_name = "dummy"
-      flowLane = "1"
-      newFastqFiles = ["/tmp/hello.txt", "/tmp/bio.txt"]
-      
-      meta_data_file_path = '/tmp/metadata_'+ sampleName
-      
-      DATA_SOURCE = "pathinfo_dev"
-      QUERY = """
-      SELECT ds.code as "data_set_code", dsf.*
-      FROM data_sets ds, data_set_files dsf
-      WHERE ds.code = ?{1} AND dsf.dase_id = ds.id
-      """
-      
-      dsqs = DataSourceQueryService()
-     
-      dsqs.select(DATA_SOURCE, QUERY)
-      #results = queryService.select(DATA_SOURCE, QUERY, ['20150108225105804-60446532'])
-      print(results)
-      
-      
-      writeMetadataFile(transaction, sampleName, meta_data_file_path, sequencing_sample_properties_dict,
-                        fcMetaDataDict, experiment, affiliation_name, newFastqFiles, flowLane)
-      
-#   sample_code, flowCellId, flowLane, incoming_sample, undetermined =  split_incoming_folder_name (name)
-# 
-#   # get all fastqs
-#   fastq_files=getFileNames(incomingPath)
-# 
-#   # BSSE-QGF-22266-H0W8YBGXX-1-654-BC3-TTAGGC_S1_L001_R1_001.fastq.gz
-#   # BSSE-QGF-22051-H0T25AGXX-1-1-1-TAAGGCGA-CTCTCTAT_S46_L001_R1_001.fastq.gz
-#   first_fastq_file = os.path.basename(fastq_files[0])
-# 
-#   flowcell_sample_immutable = searchSample (flowCellId, search_service)
-#   fcMetaDataDict = get_sample_properties(transaction, flowcell_sample_immutable[0])
-#   foundLane = searchSample (incoming_sample, search_service)
-# 
-#   # there should be only one sample because it is unique within one Flow Cell 
-#   if (len(foundLane) > 1):
-#     raise Exception("More than one sample found! No unique code: " + incoming_sample)
-#   elif (len(foundLane) == 0):
-#     raise Exception("No matching sample found for: " + incoming_sample)
-#   else :
-#     sample = foundLane[0].getSample()
-#     parents = sample.getParents()
-# 
-#   # Create a data set and set type
-#   dataSet = transaction.createNewDataSet("FASTQ_GZ")
-#   dataSet.setMeasuredData(False)
-#   dataSet.setPropertyValue(INDEX1, DEFAULT_INDEX)
-#   dataSet.setPropertyValue(INDEX2, DEFAULT_INDEX)
-#   dirName = transaction.createNewDirectory(dataSet,name)
-# 
-#   if not undetermined:
-#     newFastqFiles = fastq_files
-#     foundSample = searchSample (sample_code, search_service)
-#     sequencing_sample = foundSample[0].getSample()
-#     experiment = sequencing_sample.getExperiment()
-#     sequencing_sample_code = sequencing_sample.getCode()
-#     print("sequencing_sample_code: "+ sequencing_sample_code) 
-# 
-#     sequencing_sample_properties_dict = get_sample_properties (transaction, foundSample[0])
-#     
-#     if (INDEX1 in sequencing_sample_properties_dict) and (fcMetaDataDict[INDEXREAD1] > 0):
-#       #print(sequencing_sample_properties_dict[INDEX1])
-#       dataSet.setPropertyValue(INDEX1, sequencing_sample_properties_dict[INDEX1])
-#     if (INDEX2 in sequencing_sample_properties_dict) and (fcMetaDataDict[INDEXREAD2] > 0):
-#       dataSet.setPropertyValue(INDEX2, sequencing_sample_properties_dict[INDEX2])
-#     dataSet.setPropertyValue(EXTERNAL_SAMPLE_NAME, sequencing_sample_properties_dict[EXTERNAL_SAMPLE_NAME])
-#   
-#     if (AFFILIATION_PROPERTY_NAME in sequencing_sample_properties_dict):
-#       affiliation_name = sequencing_sample_properties_dict[AFFILIATION_PROPERTY_NAME]
-# 
-#     filepart, suffix = first_fastq_file.split('.',1)
-#     meta_data_file_name = filepart.rsplit('_',2)[0] +  METADATA_FILE_SUFFIX
-#     # get a file from the IDataSetRegistrationTransaction so it is automatically part of the data set
-#     meta_data_file_path = transaction.createNewFile(dataSet, name, meta_data_file_name)
-#     writeMetadataFile(transaction, name, meta_data_file_path, sequencing_sample_properties_dict,
-#                       fcMetaDataDict, experiment, affiliation_name, fastq_files, flowLane)
-#   
-#   # Undetermined Files
-#   else:
-#     affiliation_name = ""
-#     affiliation_for_Undetermined = ""
-#     newFastqFiles = []
-#     lane_parents = searchParents (search_service, parents)
-#     newFastqFiles = renameFiles(fastq_files, undetermined, flowCellId)
-#     for parent in lane_parents:
-#       sequencing_sample_properties_dict = get_sample_properties (transaction, parent)
-#       parent_sample = parent.getSample()
-#       sample_code = parent_sample.getCode()
-#       experiment = parent_sample.getExperiment()
-#       if (AFFILIATION_PROPERTY_NAME in sequencing_sample_properties_dict):
-#         affiliation_name = sequencing_sample_properties_dict[AFFILIATION_PROPERTY_NAME]
-#      
-#         # Special Sample Types without index (e.g. ILLUMINA_SEQUENCING_NEUROSTEMX_SINGLECELL) are caught here.
-#         # as those samples do not have a NCBI ORGANISM TAXONOMY    
-#         if NCBI_ORGANISM_TAXONOMY not in sequencing_sample_properties_dict:
-#             print(sample_code + ": Processing Sample without NCBI ORGANISM TAXONOMY: ILLUMINA_SEQUENCING_NEUROSTEMX_SINGLECELL")
-#             meta_data_file_path = transaction.createNewFile(dataSet, name, sample_code + '_' + flowCellId + '_' + first_fastq_file.split('.')[0] + METADATA_FILE_SUFFIX)
-#             writeMetadataFile(transaction, name, meta_data_file_path, sequencing_sample_properties_dict,
-#                        fcMetaDataDict, experiment, affiliation_name, newFastqFiles, flowLane)
-#             affiliation_for_Undetermined = affiliation_name
-#         
-#         elif (INDEX1 not in sequencing_sample_properties_dict) and (INDEX2 not in sequencing_sample_properties_dict) and \
-#               (sequencing_sample_properties_dict[NCBI_ORGANISM_TAXONOMY] != PHIX_TAXONOMY_ID):
-#           print('NONINDEXED sample and Taxonomy id is NOT' + PHIX_TAXONOMY_ID +', probably a pool: ' + sample_code)
-#           meta_data_file_path = transaction.createNewFile(dataSet, name, sample_code + '_' + flowCellId + '_' + first_fastq_file.split('.')[0] + METADATA_FILE_SUFFIX)
-#           writeMetadataFile(transaction, name, meta_data_file_path, sequencing_sample_properties_dict,
-#                          fcMetaDataDict, experiment, affiliation_name, newFastqFiles, flowLane)
-#           affiliation_for_Undetermined = affiliation_name
-#         # PARENTS:
-#         else:
-#           # Create Parent Meta data
-#           print(sample_code + ": Create parent meta data file")
-#           meta_data_file_path = transaction.createNewFile(dataSet, name, 'PARENT_' + sample_code + '_' + flowCellId + METADATA_FILE_SUFFIX)
-#           writeMetadataFile(transaction, name, meta_data_file_path, sequencing_sample_properties_dict,
-#                          fcMetaDataDict, experiment, affiliation_name, [], flowLane)
-#           continue
-#       
-#   put_files_to_dataset (transaction, dataSet, newFastqFiles, name, flowCellId, affiliation_for_Undetermined, undetermined)
-# 
-#   if foundLane.size() > 0:
-#     sa = transaction.getSampleForUpdate(foundLane[0].getSampleIdentifier())
-#     sa.setPropertyValue("DATA_TRANSFERRED", create_openbis_timestamp())
-#     dataSet.setSample(foundLane[0])
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/export-meta-data/lib/crc32 b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/export-meta-data/lib/crc32
deleted file mode 100755
index ffaf277227c6dfb0dae3fbe751d9db158bd5ae29..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 13196
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

diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/export-meta-data/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/export-meta-data/plugin.properties
deleted file mode 100644
index 6e3d93e5e91..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/export-meta-data/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/export-meta-data
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = export-meta-data.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-miseq/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-miseq/plugin.properties
deleted file mode 100644
index 2fcbb9bec08..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-miseq/plugin.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-# 
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${root}/dss/read-demultiplex-stats-miseq
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = read-demultiplex-stats-miseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-miseq/read-demultiplex-stats-miseq.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-miseq/read-demultiplex-stats-miseq.py
deleted file mode 100755
index 51e976dcc2e..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-miseq/read-demultiplex-stats-miseq.py
+++ /dev/null
@@ -1,594 +0,0 @@
-'''
-  @copyright: 2012 ETH Zuerich, CISD
-  
-  @license: 
-  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.
-
-
-@author: Manuel Kohler
-
-XML Structur which is processed:
-
-<?xml version="1.0"?>
-<Summary>
-  <Lane index="8">
-    <Sample index="lane8">
-      <Barcode index="Undetermined">
-        <Tile index="1101">
-          <Read index="1">
-            <Raw>
-              <Yield>1921250</Yield>
-              <YieldQ30>949680</YieldQ30>
-              <ClusterCount>38425</ClusterCount>
-              <ClusterCount0MismatchBarcode>0</ClusterCount0MismatchBarcode>
-              <ClusterCount1MismatchBarcode>0</ClusterCount1MismatchBarcode>
-              <QualityScoreSum>40995660</QualityScoreSum>
-            </Raw>
-            <Pf>
-              <Yield>945450</Yield>
-              <YieldQ30>854815</YieldQ30>
-              <ClusterCount>18909</ClusterCount>
-              <ClusterCount0MismatchBarcode>0</ClusterCount0MismatchBarcode>
-              <ClusterCount1MismatchBarcode>0</ClusterCount1MismatchBarcode>
-              <QualityScoreSum>33815505</QualityScoreSum>
-            </Pf>
-          </Read>
-        </Tile>
-        [...]
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-'''
-
-import time
-import os
-import fnmatch
-import xml.etree.ElementTree as etree
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-
-class parseXmlFile:
-
-  def __init__(self, xmlFile):
-    self.xmlFile = xmlFile
-    self.tree = etree.parse(self.xmlFile)
-    self.root = self.tree.getroot()
-
-# -----------------------------------------------------------------------------
-
-class qcValues(object):
-  def __init__(self, Yield = 0, YieldQ30 = 0, ClusterCount = 0,
-               ClusterCount0MismatchBarcode = 0, ClusterCount1MismatchBarcode = 0,
-               QualityScoreSum = 0, *args, **kwargs):
-    self.Yield = Yield
-    self.YieldQ30 = YieldQ30
-    self.ClusterCount = ClusterCount 
-    self.ClusterCount0MismatchBarcode = ClusterCount0MismatchBarcode
-    self.ClusterCount1MismatchBarcode = ClusterCount1MismatchBarcode
-    self.QualityScoreSum = QualityScoreSum
-    
-  def __str__(self):
-        return "Yield: %s, YieldQ30: %s, ClusterCount: %s, ClusterCount0MismatchBarcode: %s," \
-          " CusterCount1MismatchBarcode: %s, QualityScoreSum: %s" \
-          % (self.Yield, self.YieldQ30, self.ClusterCount, self.ClusterCount0MismatchBarcode,
-          self.ClusterCount1MismatchBarcode, self.QualityScoreSum)    
-
-class sample:
-  def __init__(self, Lane = 0, Sample = '', Barcode = '', Tile = '', Read = '', rawqc = qcValues([]),
-                pfqc = qcValues([]), *args, **kwargs):
-    self.Lane = Lane
-    self.Sample = Sample
-    self.Barcode = Barcode
-    self.Tile = Tile
-    self.Read = Read
-    self.rawqc = rawqc
-    self.pfqc = pfqc
-    
-  def __str__(self):
-    return "Lane: %s, Sample: %s, Barcode: %s, Tile: %s, Read: %s, rawqc: %s, pfqc: %s" \
-      % (self.Lane, self.Sample, self.Barcode, self.Tile, self.Read, self.rawqc, self.pfqc)
-
-# -----------------------------------------------------------------------------
-
-class Statistics:
-  def __init__(self, lane = 0, sampleName = "", index1 = "NoIndex", index2 = "NoIndex", pfYieldSum = 0,
-                 rawYieldSum = 0, pfPercentage = 0.0, rawReadsSum = 0, pfReadsSum = 0,
-                 pfYieldQ30Sum = 0, qualityScoreSum = 0, rawPercentageReadsPerLane = 0.0,
-                 pfYieldQ30Percentage = 0.0, pfsumQualityScore = 0, pfmeanQualityScore = 0.0,
-                 pfReadsSumWithoutUndetermined = 0):
-      self.lane = lane
-      self.sampleName = sampleName
-      self.index1 = index1
-      self.index2 = index2
-      self.pfYieldSum = pfYieldSum
-      self.rawYieldSum = rawYieldSum
-      self.pfPercentage = pfPercentage
-      self.rawReadsSum = rawReadsSum
-      self.pfReadsSum = pfReadsSum
-      self.pfYieldQ30Sum = pfYieldQ30Sum
-      self.qualityScoreSum = qualityScoreSum
-      self.rawPercentageReadsPerLane = rawPercentageReadsPerLane
-      self.pfYieldQ30Percentage = pfYieldQ30Percentage
-      self.pfsumQualityScore = pfsumQualityScore
-      self.pfmeanQualityScore = pfmeanQualityScore
-      self.pfReadsSumWithoutUndetermined = pfReadsSumWithoutUndetermined
-      
-  def __str__(self):
-    return "lane: %s, sampleName: %s, index1: %s, index2: %s, pfYieldSum: %s, pfPercentage: %s," \
-           " rawReadsSum: %s, pfReadsSum: %s," \
-           " rawPercentageReadsPerLane: %s, pfYieldQ30Percentage: %s," \
-           " pfmeanQualityScore: %s" \
-        % (self.lane, self.sampleName, self.index1, self.index2, self.pfYieldSum, self.pfPercentage,
-           self.rawReadsSum, self.pfReadsSum,
-           self.rawPercentageReadsPerLane, self.pfYieldQ30Percentage, self.pfmeanQualityScore)
-         
-  def calculatePercentagePF (self, rawYield = 0, pfYield = 1):
-    try:
-      return round(float(pfYield) / float(rawYield) * 100, 2)
-    except:
-      return 0.0
-  
-  def calulateMeanQualityScore (self, pfqualityScoreSum = 0, pfYield = 1):
-    try:
-      return round (float(pfqualityScoreSum) / float(pfYield), 2)
-    except:
-      return 0.0
-    
-  def calculateYieldQ30Percentage (self, pfYieldQ30 = 0, pfYield = 1):
-    try:
-      return round (float(pfYieldQ30) / float(pfYield) * 100, 2)
-    except:
-      return 0.0
-
-class lane_statistics:
-    def __init__(self):
-        self.complete_lane_statistic = Statistics()
-        
-    def calculate_complete_lane_statistic(self, list_of_statistics):
-        
-        sample_number = len(list_of_statistics)
-        
-        for stat in list_of_statistics:
-            self.complete_lane_statistic.lane = stat.lane
-            self.complete_lane_statistic.pfYieldSum += stat.pfYieldSum
-            self.complete_lane_statistic.rawYieldSum += stat.rawYieldSum
-            self.complete_lane_statistic.pfReadsSum += stat.pfReadsSum
-            self.complete_lane_statistic.rawReadsSum += stat.rawReadsSum
-            self.complete_lane_statistic.pfPercentage += stat.pfPercentage
-            self.complete_lane_statistic.pfYieldQ30Percentage += stat.pfYieldQ30Percentage
-            self.complete_lane_statistic.pfmeanQualityScore += stat.pfmeanQualityScore
-            
-            if stat.index1 != "Undetermined":
-                self.complete_lane_statistic.pfReadsSumWithoutUndetermined += stat.pfReadsSum
-            
-        self.complete_lane_statistic.pfPercentage = self.complete_lane_statistic.pfPercentage / sample_number
-        self.complete_lane_statistic.pfYieldQ30Percentage = self.complete_lane_statistic.pfYieldQ30Percentage / sample_number
-        self.complete_lane_statistic.pfmeanQualityScore = self.complete_lane_statistic.pfmeanQualityScore/ sample_number
-        
-        return self.complete_lane_statistic
-
-
-# -----------------------------------------------------------------------------
-
-def xml2Memory(DEMULTIPLEX_XML):
-  '''
-  Parse the XML file and put all values in a memory structure:
-  List of: 
-  lane, sample, barcode, tile, read, qcRawList, qcPfList
-  '''
-
-  RAW_TAG = "Raw"
-  PF_TAG = "Pf"
-
-  sampleList = []
-  
-  xml = parseXmlFile(DEMULTIPLEX_XML)
-  r = xml.tree.getroot()
-
-  for lane in r.getchildren():
-    for mysample in lane:  
-      for barcode in mysample:       
-        for tile in barcode:
-          for read in tile:
-            
-            qcRaw = qcValues()
-            qcPf = qcValues()  
-            qcRawList = []
-            qcPfList = []
-
-            # Read out the Raw fields
-            raw = read.find(RAW_TAG) 
-            for child in raw.getchildren():
-              # equivalent to a Java reflection
-              setattr(qcRaw, child.tag, int(child.text))
-              
-            # Read out the Pf fields
-            pf = read.find(PF_TAG)
-            for child in pf.getchildren():
-              # equivalent to a Java reflection
-              setattr(qcPf, child.tag, int(child.text))
-
-            qcRawList.append(qcRaw)
-            qcPfList.append(qcPf)
-            
-            singleElement = sample ()
-            
-            setattr(singleElement, lane.tag, lane.attrib)
-            setattr(singleElement, mysample.tag, mysample.attrib)
-            setattr(singleElement, barcode.tag, barcode.attrib)
-            setattr(singleElement, tile.tag, tile.attrib)
-            setattr(singleElement, read.tag, read.attrib)
-            singleElement.rawqc = qcRawList
-            singleElement.pfqc = qcPfList
-            
-            sampleList.append(singleElement)
-  return sampleList
-
-# -----------------------------------------------------------------------------
-
-def calculateStatistics(listofSamples):
-  '''
-  Structure of 'listofSamples'
-  Lane: {'index': '6'}, Sample: {'index': 'BSSE-QGF-3524_C0NKPACXX'}, Barcode: {'index': 'TGACCA'},
-  Tile: {'index': '2307'}, Read: {'index': '1'}, rawqc:<mem>, pfqc:<mem> 
-  '''
-
-  numberOfTiles = len(listofSamples)
-  
-  tile = sample()
-  raw = qcValues ()
-  pf = qcValues ()
-  stats = Statistics()
- 
-  for tile in listofSamples:
-    raw = tile.rawqc[0]
-    pf = tile.pfqc[0]
-    
-    stats.pfYieldSum += pf.Yield
-    stats.rawYieldSum += raw.Yield
-    stats.rawReadsSum += raw.ClusterCount 
-    stats.pfReadsSum += pf.ClusterCount
-    stats.pfYieldQ30Sum += pf.YieldQ30
-    stats.qualityScoreSum += pf.QualityScoreSum
-     
-  # Can not be set here, needs to be calculated later   
-  #stats.rawPercentageReadsPerLane = rawPercentageReadsPerLane
-  stats.pfPercentage = stats.calculatePercentagePF(stats.rawYieldSum, stats.pfYieldSum)
-  stats.pfYieldQ30Percentage = stats.calculateYieldQ30Percentage(stats.pfYieldQ30Sum, stats.pfYieldSum)
-  stats.pfmeanQualityScore = stats.calulateMeanQualityScore(stats.qualityScoreSum, stats.pfYieldSum)
-  stats.lane = listofSamples[0].Lane.values()[0]
-  stats.sampleName = listofSamples[0].Sample.values()[0]
-  index = listofSamples[0].Barcode.values()[0]
-  try:
-    stats.index1, stats.index2 = index.split("-")
-  except:
-    stats.index1 = index
-  return stats
-
-# -----------------------------------------------------------------------------
-
-
-def rawReadSumPerSamples(stat):
-  '''
-  Creates a dictionary with the lanes as keys
-  The values are a list where the elements are a dictionary again.
-  This dictionary has the sample names as key and the RawReadSum as value.  
-  
-  Example:
-  {4': [{'BSSE-QGF-3434_C0NKPACXX': 248999502}], '7': [{'lane7': 123921974}, 
-  {'BSSE-QGF-3527_C0NKPACXX': 38587703}, {'BSSE-QGF-3529_C0NKPACXX': 30130893},
-  {'BSSE-QGF-3528_C0NKPACXX': 34519296}, {'BSSE-QGF-3526_C0NKPACXX': 34980179}]}
-  '''
-  
-  laneDict = {}
-  for e in stat:
-    if e.lane not in laneDict:
-      laneDict[e.lane] = [{e.sampleName:e.rawReadsSum}]
-    else:
-      laneDict[e.lane].append({e.sampleName:e.rawReadsSum})
-  return laneDict
-
-# -----------------------------------------------------------------------------
-
-def createSumRawReadsPerLane(laneDict):
-  '''
-  Creates a dictionary with lane as key and sum of Raw Reads as value:
-  {'1': 183180877, '3': 244968562, '2': 191496395, '5': 193466239, '4': 248999502, 
-  '7': 262140045, '6': 257136830, '8': 209948449}
-  '''
-  sumRawReadsDict = {}
-  for lane in laneDict:
-    sumRawReads = 0
-    for sampleNameDict in laneDict[lane]:
-      sumRawReads += sampleNameDict.values()[0]
-    
-    sumRawReadsDict[lane] = sumRawReads 
-  return sumRawReadsDict
-
-# -----------------------------------------------------------------------------
-
-def createPercentagePerLane(laneDict, sumRawReadsDict):
-  '''
-  Creates a dictionary with the sample Name as key and the percentage of raw reads related to 
-  all reads in the same lane
-  {'lane7': 47.27, 'BSSE-QGF-3433_C0NKPACXX': 100.0, 'BSSE-QGF-3666_C0NKPACXX': 54.12}
-  '''
-  
-  relRawReadsDict = {}
-  for lane in laneDict:
-    for sampleName in laneDict[lane]:
-      relRawReadsDict[sampleName.keys()[0]] = round(float(sampleName.values()[0]) / 
-                                                    float(sumRawReadsDict[lane]) * 100, 2)
-  return relRawReadsDict
-
-# -----------------------------------------------------------------------------
-
-def locate(pattern, root):
-    '''Locate all files matching supplied filename pattern in and below
-    supplied root directory.'''
-    for path, dirs, files in os.walk(os.path.abspath(root)):
-        for filename in fnmatch.filter(files, pattern):
-            yield os.path.join(path, filename)
-
-# -----------------------------------------------------------------------------
-
-def getVocabulary(transaction, vocabularyCode):
- 
-  vocabularyTermList = [] 
-  vocabulary = transaction.getSearchService().searchForVocabulary(vocabularyCode)
-  if (vocabulary is None):
-    print 'VOCABULARY %s does not exist' % (vocabularyCode)
-  else:
-    print "Getting VOCABULARY: " + vocabulary.getCode() 
-    for term in vocabulary.getTerms():
-            vocabularyTermList.append(term.getCode())           
-  vocabularyTermList.sort()
-  return vocabularyTermList
-
-# -----------------------------------------------------------------------------
-
-def getFlowCellMetaData (transaction,flowCellId):
-
-  def sortedDictValues(adict):
-    keys = adict.keys()
-    keys.sort()
-    return map(adict.get, keys)
-
-  search = transaction.getSearchService()
-  sc = SearchCriteria()
-  print('Searching FlowCell: '+ str(flowCellId))
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCellId));
-  foundFlowCells = search.searchForSamples(sc)
-
-  try:
-    assert foundFlowCells.size() == 1
-  except AssertionError:
-    print (str(foundFlowCells.size()) + \
-          ' flow cells found which match the criterias: '+ flowCellId)
-
-  fcPropertiesDict = {}
-  fcPropertyTypes = []
-
-  fcProperties = foundFlowCells[0].getSample().getProperties()
-  for property in fcProperties:
-      code = property.getPropertyType().getSimpleCode()
-      fcPropertyTypes.append(code)
-      fcPropertiesDict[code] = property.getValue()
-
-  fcPropertyTypes.sort()
-  return fcPropertiesDict, fcPropertyTypes
-
-# -----------------------------------------------------------------------------
-
-def sampleSearch(transaction, code=''):
-    sc = SearchCriteria()
-    numberOfLanes = 0
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, code));
-    search_service = transaction.getSearchService()
-    foundSample = search_service.searchForSamples(sc)
-    if foundSample.size() > 0:
-      # Search for contained samples
-      sampleSc = SearchCriteria()
-      sampleSc.addSubCriteria(SearchSubCriteria.createSampleContainerCriteria(sc))
-      foundContainedSamples = search_service.searchForSamples(sampleSc)
-      numberOfLanes = foundContainedSamples.size()
-    return foundSample, foundContainedSamples, numberOfLanes
-
-#--------------------------------------------------------------------------------------------------------------------------------------
-
-def searchDataSetsofSample(transaction, sample, index1, index2, DATA_SET_TYPE):
-    sc = SearchCriteria()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sample));
-    search_service = transaction.getSearchService()
-    foundSample = search_service.searchForSamples(sc)
-
-    dataSetSc = SearchCriteria()
-    # set the Search Criteria to an OR condition, default is AND
-    #dataSetSc.setOperator(SearchCriteria.SearchOperator.MATCH_ANY_CLAUSES)
-    dataSetSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, DATA_SET_TYPE))
-    dataSetSc.addMatchClause(SearchCriteria.MatchClause.createPropertyMatch("BARCODE", index1 ))
-    dataSetSc.addMatchClause(SearchCriteria.MatchClause.createPropertyMatch("INDEX2", index2))
-    dataSetSc.addSubCriteria(SearchSubCriteria.createSampleCriteria(sc))
-    foundDataSets = search_service.searchForDataSets(dataSetSc)
-    print "foundDataSets.size() "+ str(foundDataSets.size())
-    for ds in foundDataSets:
-      print "Index1 for found Data Set" + ds.getDataSetCode() + " " + ds.getPropertyValue('BARCODE')
-      print "Index2 for found Data Set" + ds.getDataSetCode() + " " + ds.getPropertyValue('INDEX2')
-      
-    return foundDataSets
-
-#--------------------------------------------------------------------------------------------------------------------------------------
-
-def getIndexesofDataSetsofSample(transaction, sample, DATA_SET_TYPE):
-
-    index1List = []
-    index2List = []
-    sc = SearchCriteria()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sample));
-    search_service = transaction.getSearchService()
-    foundSample = search_service.searchForSamples(sc)
-
-    dataSetSc = SearchCriteria()
-    dataSetSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, DATA_SET_TYPE))
-    dataSetSc.addSubCriteria(SearchSubCriteria.createSampleCriteria(sc))
-    foundDataSets = search_service.searchForDataSets(dataSetSc)
-    for ds in foundDataSets:
-      index1List.append(ds.getPropertyValue('BARCODE'))
-      index2List.append(ds.getPropertyValue('INDEX2'))
-    return index1List, index2List  
-
-# -----------------------------------------------------------------------------
-
-def process(transaction):
-  '''
-  Main
-  '''
-
-  FASTQ_DATA_SET_TYPE='FASTQ_GZ'
-  DEMUX_FILE='Flowcell_demux_summary.xml'
-  NO_INDEX='NOINDEX'
-  UNDETERMINED='UNDETERMINED'
-  laneNumber = 1
-
-  incomingPath = transaction.getIncoming().getPath()
-  name = transaction.getIncoming().getName()
-
-  print('\n'+time.ctime())
-
-  fcPropertiesDict, fcPropertyTypes = getFlowCellMetaData(transaction, name)
-  print fcPropertiesDict
-  print fcPropertyTypes
-
-  search_service = transaction.getSearchService()
-
-  FileGenerator= locate(DEMUX_FILE, incomingPath)
-  DEMULTIPLEX_XML = FileGenerator.next()
-
-  sampleList = xml2Memory(DEMULTIPLEX_XML)
-
-  sa = sample()
-  sampleDict = {}
-
-  # key = sample name, value = sample()  
-  for element in range(0, len(sampleList)):
-    sa = sampleList[element]
-    # Check if new sample 
-    if (sa.Sample is not sampleList[element - 1].Sample):
-      sampleName = sa.Sample.values()[0]
-      sampleDict[sampleName] = [sa]
-    else:
-      sampleDict[sampleName].append(sa)
-      
-  stat = [calculateStatistics(sampleDict[mysample]) for mysample in sampleDict]
-
-  flowcell, lanes, numberOfLanes  = sampleSearch(transaction, name)
-
-  full_lane_statistics = lane_statistics()
-  complete_lane_statistic = full_lane_statistics.calculate_complete_lane_statistic(stat)
-  
-  for lane in lanes:
-      if str(laneNumber) == lane.getSampleIdentifier().split(":")[-1]:
-            mutable_lane = transaction.getSampleForUpdate(lane.getSampleIdentifier())
-            print("Setting Complete Lanes Statistics For: " + lane.getSampleIdentifier())
-            break
-      
-  mutable_lane.setPropertyValue("YIELD_MBASES", str(complete_lane_statistic.pfYieldSum))
-  mutable_lane.setPropertyValue('RAW_YIELD_MBASES', str(complete_lane_statistic.rawYieldSum))
-  mutable_lane.setPropertyValue('PERCENTAGE_PASSED_FILTERING',str(complete_lane_statistic.pfPercentage))
-  mutable_lane.setPropertyValue('PF_READS_SUM',str(complete_lane_statistic.pfReadsSum))
-  mutable_lane.setPropertyValue('RAW_READS_SUM',str(complete_lane_statistic.rawReadsSum))
-  mutable_lane.setPropertyValue('PFYIELDQ30PERCENTAGE', str(complete_lane_statistic.pfYieldQ30Percentage))
-  mutable_lane.setPropertyValue('PFMEANQUALITYSCORE', str(complete_lane_statistic.pfmeanQualityScore))
-  mutable_lane.setPropertyValue('CLUSTERS_PF_WITHOUT_NOINDEX', str(complete_lane_statistic.pfReadsSumWithoutUndetermined))
-
-  # calculate the relative amount of reads per index
-  laneDict = rawReadSumPerSamples(stat)
-  sumRawReadsDict = createSumRawReadsPerLane(laneDict)
-  relRawReadsDict = createPercentagePerLane(laneDict, sumRawReadsDict)
-
-  # set the values in the object
-  for mye in stat:
-    mye.rawPercentageReadsPerLane = relRawReadsDict[mye.sampleName]
-   
-  index1Length = fcPropertiesDict['INDEXREAD']
-  index2Length = fcPropertiesDict['INDEXREAD2']
-
-  for mystat in stat:
-    laneCode = flowcell[0].getCode() + ":" + mystat.lane
-    searchIndex1 = mystat.index1.upper()
-    searchIndex2 = mystat.index2.upper()
-    print '\n'
-    print mystat
-    
-    index1List, index2List = getIndexesofDataSetsofSample(transaction, laneCode, FASTQ_DATA_SET_TYPE)
-    print "Searching for "+ searchIndex1 + " in " + str(index1List)
-    print "Searching for "+ searchIndex2 + " in " + str(index2List)
-   
-    if searchIndex1 not in (NO_INDEX): 
-      if searchIndex1 not in (UNDETERMINED):
-        if index1Length > 7:
-          searchIndex1List = [ index1 for index1 in index1List if searchIndex1 in index1]
-        else:
-          searchIndex1List = [ index1 for index1 in index1List if searchIndex1 in index1[:-2]]
-        try:
-            if len(searchIndex1List) > 1:
-              if searchIndex1List[0].startswith(searchIndex1):
-                searchIndex1 = searchIndex1List[0]
-              else:
-                searchIndex1 = searchIndex1List[1]
-            else:
-              searchIndex1 = searchIndex1List[0]
-            print searchIndex1
-        except:
-          searchIndex1 = 'MISSING'
-      else:
-        searchIndex1 = NO_INDEX
-    if searchIndex2 not in (NO_INDEX):
-      if searchIndex2 not in (UNDETERMINED):
-        if index2Length > 7:
-          searchIndex2 = [ index2 for index2 in index2List if searchIndex2 in index2]
-        else:
-          searchIndex2 = [ index2 for index2 in index2List if searchIndex2 in index2[:-2]]
-        try:
-          searchIndex2 = searchIndex2[0]
-        except:
-          searchIndex1 = 'MISSING'
-      else:
-        searchIndex2 = NO_INDEX
-    
-    print "searchIndex1 " + str(searchIndex1)
-    print "searchIndex2 " + str(searchIndex2)
-
-    # Search for a data set with those two indices
-    DataSet = searchDataSetsofSample(transaction, laneCode, searchIndex1, searchIndex2, FASTQ_DATA_SET_TYPE)
-    try:
-      assert DataSet.size() == 1
-    except AssertionError:
-      print (str(DataSet.size()) + ' data sets found which match the criterias: '+ 
-	      str(laneCode), searchIndex1, searchIndex2)
-      continue
-
-    sa = transaction.getDataSetForUpdate(DataSet[0].getDataSetCode())
-    sa.setPropertyValue('YIELD_MBASES', str(mystat.pfYieldSum))
-    sa.setPropertyValue('RAW_YIELD_MBASES', str(mystat.rawYieldSum))
-    sa.setPropertyValue('PERCENTAGE_PASSED_FILTERING',str(mystat.pfPercentage))
-    sa.setPropertyValue('PF_READS_SUM',str(mystat.pfReadsSum))
-    sa.setPropertyValue('RAW_READS_SUM',str(mystat.rawReadsSum))
-    sa.setPropertyValue('PERCENTAGE_RAW_CLUSTERS_PER_LANE', str(mystat.rawPercentageReadsPerLane))
-    sa.setPropertyValue('PFYIELDQ30PERCENTAGE', str(mystat.pfYieldQ30Percentage))
-    sa.setPropertyValue('PFMEANQUALITYSCORE', str(mystat.pfmeanQualityScore))
-
-    print "Modified data sets properties of: " + DataSet[0].getDataSetCode()
-
-  print "DONE"
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-nextseq/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-nextseq/plugin.properties
deleted file mode 100644
index 102a5fe3f83..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-nextseq/plugin.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-# 
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/read-demultiplex-stats-nextseq
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = read-demultiplex-stats-nextseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-nextseq/read-demultiplex-stats-nextseq.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-nextseq/read-demultiplex-stats-nextseq.py
deleted file mode 100755
index 787e008d89c..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-nextseq/read-demultiplex-stats-nextseq.py
+++ /dev/null
@@ -1,364 +0,0 @@
-'''
-@copyright: 2012 ETH Zuerich, CISD
-
-@license:
-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.
-
-@author: Fabian Gemperle
-
-@note: print statements go to ~/openbis/servers/datastore_server/log/startup_log.txt
-
-'''
-
-import time
-import math
-import os
-import fnmatch
-# Load Java-Library to import XML data:
-import read_demultiplex_stats
-# Load openBIS-Libraries:
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-
-def process(transaction):
-  '''
-  Main method in corresponding openBIS dropbox
-  '''
-
-  # Constants:
-  XML_FILENAME = 'ConversionStats.xml'
-  TYPE_DATASET = 'FASTQ_GZ'
-  INDEX_NO = 'NOINDEX'
-  INDEX_UNKNOWN = 'UNKNOWN'
-  INDEX_EMPTY = ''
-  CODE_INDEX1 = 'BARCODE'
-  CODE_INDEX2 = 'INDEX2'
-  CODE_INDEX1LENGTH = 'INDEXREAD'
-  CODE_INDEX2LENGTH = 'INDEXREAD2'
-  BARCODE_SPLIT_CHAR = "+"
-
-
-  ##########################################################
-  def locate(pattern, root):
-    '''Locate all files matching supplied filename pattern in and below supplied root directory.'''
-    for path, dirs, files in os.walk(os.path.abspath(root)):
-      for filename in fnmatch.filter(files, pattern):
-        yield os.path.join(path, filename)
-
-  ##########################################################
-  def getInfoVocabularyTerms(vocabularyCode):
-    '''
-    Get information about Terms of certain Vocabulary in openBIS.
-    Input: 
-    - vocabularyCode: code of Vocabulary to be investigated
-    Output: 
-    - vocabularyTerms: list of Terms in Vocabulary
-    '''
-    vocabulary = transaction.getSearchService().searchForVocabulary(vocabularyCode)
-
-    vocabularyTerms = []
-    if (vocabulary is None):
-      print '\nOCCURRED EXCEPTION: Vocabulary %s does not exist' % (vocabularyCode)
-    else:
-      for term in vocabulary.getTerms():
-        vocabularyTerms.append(term.getCode())           
-      vocabularyTerms.sort()
-
-    return vocabularyTerms
-
-  ##########################################################
-  def getInfoSampleProperties(sampleCode):
-    '''
-    Get information about Properties of certain Sample in openBIS.
-    Input: 
-    - sampleCode: code of Sample to be investigated
-    Outputs: 
-    - propertiesCode: list of Properties' codes
-    - propertiesCodeValue: dictionary of Properties' codes and values
-    '''
-    ss = transaction.getSearchService()
-
-    scSample = SearchCriteria()
-    scSample.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleCode));
-    foundSamples = ss.searchForSamples(scSample)
-
-    propertiesCode = []
-    propertiesCodeValue = {}
-    try:
-      assert foundSamples.size() == 1
-      properties = foundSamples[0].getSample().getProperties()
-      for p in properties:
-        codeProperty = p.getPropertyType().getSimpleCode()
-        propertiesCode.append(codeProperty)
-        propertiesCodeValue[codeProperty] = p.getValue()
-      propertiesCode.sort()
-    except AssertionError:
-      print ('\nOCCURRED EXCEPTION: ' + str(foundSamples.size()) + ' Samples found which match the criteria code \"' + sampleCode + '\".')
-
-    return propertiesCode, propertiesCodeValue
-
-  ##########################################################
-  def getInfoDataSetPropertiesOfSample(sampleCode):
-    '''
-    Get information about Properties of some DataSet of certain Sample in openBIS.
-    Input: 
-    - sampleCode: code of DataSet's Sample to be investigated
-    Outputs: 
-    - propertiesCode: list of Properties' codes
-    - propertiesCodeValue: dictionary of Properties' codes and values
-    '''
-    ss = transaction.getSearchService()
-
-    scSample = SearchCriteria()
-    scSample.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleCode));
-    #foundSamples = ss.searchForSamples(scSample)
-
-    scDataSet = SearchCriteria()
-    scDataSet.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, TYPE_DATASET))
-    scDataSet.addSubCriteria(SearchSubCriteria.createSampleCriteria(scSample))
-    foundDataSets = ss.searchForDataSets(scDataSet)
-
-    propertiesCode = []
-    propertiesCodeValue = {}
-    try:
-      assert foundDataSets.size() > 0
-      codeProperties = foundDataSets[0].getAllPropertyCodes()
-      for cp in codeProperties:
-        propertiesCode.append(cp)
-        propertiesCodeValue[cp] = foundDataSets[0].getPropertyValue(cp)
-      propertiesCode.sort()
-    except AssertionError:
-      print ('\nOCCURRED EXCEPTION: ' + str(foundDataSets.size()) + ' DataSets found which Sample match the criteria code \"' + sampleCode + '\" and type \"' + TYPE_DATASET + '\".')
-
-    return propertiesCode, propertiesCodeValue
-
-  ##########################################################
-  def getIndexesOfDataSetsOfSample(sampleFlowLaneCode):
-    '''
-    Get both indexes (parts of barcode) of all DataSets of certain FlowLane-Sample in openBIS.
-    Inputs: 
-    - sampleFlowLaneCode: code of DataSet's Sample
-    Outputs: 
-    - indexes1: list of first index of DataSets
-    - indexes2: list of second index of DataSets
-    '''
-    ss = transaction.getSearchService()
-
-    scSample = SearchCriteria()
-    scSample.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleFlowLaneCode));
-    #foundSamples = ss.searchForSamples(scSample)
-
-    scDataSet = SearchCriteria()
-    scDataSet.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, TYPE_DATASET))
-    scDataSet.addSubCriteria(SearchSubCriteria.createSampleCriteria(scSample))
-    foundDataSets = ss.searchForDataSets(scDataSet)
-    
-    indexes1 = []
-    indexes2 = []
-    try: 
-      assert foundDataSets.size() > 0
-    except AssertionError:
-      print ('\nOCCURRED EXCEPTION: ' + str(foundDataSets.size()) + ' DataSets found which Sample match the criteria code \"' + sampleFlowLaneCode + '\" and type \"' + TYPE_DATASET + '\".')
-    for ds in foundDataSets:
-      indexes1.append(ds.getPropertyValue(CODE_INDEX1))
-      indexes2.append(ds.getPropertyValue(CODE_INDEX2))
-
-    return indexes1, indexes2
-
-  ##########################################################
-  def searchDataSetsOfSample(sampleFlowLaneCode, index1, index2):
-    '''
-    Search DataSets by corresponding indexes (parts of barcode) of certain FlowLane-Sample in openBIS.
-    Inputs: 
-    - sampleFlowLaneCode: code of DataSet's Sample
-    - index1: first index of DataSet
-    - index2: second index of DataSet
-    Output: 
-    - foundDataSets: DataSets corresponding to inputs and constant TYPE_DATASET
-    '''
-    ss = transaction.getSearchService()
-
-    scSample = SearchCriteria()
-    scSample.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleFlowLaneCode));
-    #foundSample = ss.searchForSamples(scSample)
-
-    scDataSet = SearchCriteria()
-    scDataSet.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, TYPE_DATASET))
-    scDataSet.addMatchClause(SearchCriteria.MatchClause.createPropertyMatch(CODE_INDEX1, index1))
-    scDataSet.addMatchClause(SearchCriteria.MatchClause.createPropertyMatch(CODE_INDEX2, index2))
-    scDataSet.addSubCriteria(SearchSubCriteria.createSampleCriteria(scSample))
-    foundDataSets = ss.searchForDataSets(scDataSet)
-    for ds in foundDataSets:
-      print "Index1 of found DataSet " + ds.getDataSetCode() + ": " + ds.getPropertyValue(CODE_INDEX1)
-      print "Index2 of found DataSet " + ds.getDataSetCode() + ": " + ds.getPropertyValue(CODE_INDEX2)
-
-    return foundDataSets
-
-  ##########################################################
-  def reversecomplement(sequence):
-    '''
-    Reverse sequence and replace each nucleotide by its complement.
-    Input: 
-    - sequence: sequence of nucleotides
-    Output: 
-    - reverse_complement_sequence: reversed and complemented sequence
-    '''
-    lookup_table = {'A': 'T', 'T': 'A', 'G': 'C', 'C': 'G'}
-    reverse_complement_sequence = ''
-    for nucleotide in reversed(sequence):
-        reverse_complement_sequence += lookup_table[nucleotide]
-    return reverse_complement_sequence
-
-  ##########################################################
-  
-  def sampleSearch(transaction, code=''):
-    sc = SearchCriteria()
-    numberOfLanes = 0
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, code));
-    search_service = transaction.getSearchService()
-    flowcell = search_service.searchForSamples(sc)
-    if flowcell.size() > 0:
-      # Search for contained samples
-      sampleSc = SearchCriteria()
-      sampleSc.addSubCriteria(SearchSubCriteria.createSampleContainerCriteria(sc))
-      lanes = search_service.searchForSamples(sampleSc)
-      numberOfLanes = lanes.size()
-    return flowcell, lanes, numberOfLanes
-  
-  ##########################################################
-  
-  def updateLane(transaction, codeSampleFlowCell, totalLaneStatistics):
-    
-    print("Setting Complete Lanes Statistics For: " + lane.getSampleIdentifier())
-    mutable_lane = transaction.getSampleForUpdate(lane.getSampleIdentifier())
-    mutable_lane.setPropertyValue("YIELD_MBASES", str(int(totalLaneStatistics.get(lane_in_int).Sum_PfYield)))
-    mutable_lane.setPropertyValue('RAW_YIELD_MBASES', str(int(totalLaneStatistics.get(lane_in_int).Sum_RawYield)))
-    mutable_lane.setPropertyValue('PERCENTAGE_PASSED_FILTERING',str(int(totalLaneStatistics.get(lane_in_int).Percentage_PfClusterCount_RawClusterCount)))
-    mutable_lane.setPropertyValue('PF_READS_SUM',str(int(totalLaneStatistics.get(lane_in_int).Sum_PfClusterCount)))
-    mutable_lane.setPropertyValue('RAW_READS_SUM',str(int(totalLaneStatistics.get(lane_in_int).Sum_RawClusterCount)))
-    mutable_lane.setPropertyValue('PFYIELDQ30PERCENTAGE', str(int(totalLaneStatistics.get(lane_in_int).Percentage_PfYieldQ30_PfYield)))
-    mutable_lane.setPropertyValue('PFMEANQUALITYSCORE', str(totalLaneStatistics.get(lane_in_int).Fraction_PfQualityScoreSum_PfYield))
-    mutable_lane.setPropertyValue('CLUSTERS_PF_WITHOUT_NOINDEX', str(int(totalLaneStatistics.get(lane_in_int).Clusters_PfWithoutNoindex)))
-
-  ##########################################################
-
-  def update_datatsets(transaction, samplestatisticslist, codeSampleFlowLane, codeSampleFlowCell):
-    # Prepare links between XML and openBIS w.r.t to indexes in DataSet (openBIS):
-    print(codeSampleFlowLane)
-    index1list, index2list = getIndexesOfDataSetsOfSample(codeSampleFlowLane)
-    print(index1list)
-    
-    propertiesCode, propertiesCodeValue = getInfoSampleProperties(codeSampleFlowCell)
-    index1length = int(propertiesCodeValue[CODE_INDEX1LENGTH])
-    index2length = int(propertiesCodeValue[CODE_INDEX2LENGTH])
-    
-    nprocessedDataSets = 0
-    for s in samplestatisticslist:
-        print "\nContent in XML file:\n", s
-    
-        # Prepare link between XML and openBIS w.r.t to indexes in Barcode (XML):
-        indexes = s.Barcode.split(BARCODE_SPLIT_CHAR)
-        if len(indexes) == 1: # only first part in Barcode
-            index1search = indexes[0].upper()
-            index2search = INDEX_EMPTY
-        elif len(indexes) == 2: # both parts in Barcode
-            index1search = indexes[0].upper()
-            index2search = indexes[1].upper()
-        else:
-            index1search = INDEX_EMPTY
-            index2search = INDEX_EMPTY
-    
-        # Set link between XML and openBIS w.r.t to indexes in DataSet (openBIS):
-        if index1search == INDEX_EMPTY or index1search == INDEX_UNKNOWN: 
-            index1 = INDEX_NO
-        else: # Hint: just two cases were known about index1length, that is 8 or 6
-            if index1length > 7:
-                index1 = [ index1 for index1 in index1list if index1search == index1 ]
-            else: # for smaller indexlength, the index is by 1 shorter in XML-file than in openBIS
-                index1 = [ index1 for index1 in index1list if index1search == index1[:index1length] ]
-            try:
-                index1 = index1[0]
-            except: 
-                print '\nOCCURRED EXCEPTION: First index \"' + index1search + '\" of Barcode in XML file has no corresponding DataSet in openBIS!'
-                index1 = 'MISSING'
-        if index2search == INDEX_EMPTY or index2search == INDEX_UNKNOWN:
-            index2 = INDEX_NO
-        else: # Hint: just one case was known about index2length, that is 8
-            if index2length > 7: # second and larger index must be reversed and complemented in contrast to first or smaller index
-                index2 = [ index2 for index2 in index2list if reversecomplement(index2search) == index2 ]
-            else: # second and smaller index is unknown how to handle
-                index2 = [ index2 for index2 in index2list if reversecomplement(index2search) == index2 ]
-            try:
-                index2 = index2[0]
-            except: 
-                print '\nOCCURRED EXCEPTION: Second index \"' + index2search + '\" of Barcode in XML file has no corresponding DataSet in openBIS!'
-                index2 = 'MISSING'
-    
-        # Get DataSet of openBIS corresponding to Project/Sample/Barcode of XML file:
-        correspondingDataSet = searchDataSetsOfSample(codeSampleFlowLane, index1, index2)
-        try:
-            assert correspondingDataSet.size() == 1
-        except AssertionError: 
-            print ('\nOCCURRED EXCEPTION: ' + str(correspondingDataSet.size()) + ' DataSets found which Sample match the criteria index1 \"' + str(index1) + '\" and index2 \"' + str(index2) + '\" and code \"' + codeSampleFlowLane + '\" and type \"' + TYPE_DATASET + '\".')
-            continue 
-        
-        # Modify Properties of corresponding DataSet:
-        # (method setPropertyValue requires Strings as Input, but Number format must fit to Properties already defined in openBIS)
-        ds = transaction.getDataSetForUpdate(correspondingDataSet[0].getDataSetCode())
-        ds.setPropertyValue('YIELD_MBASES', str(int(s.Mega_PfYield)))
-        ds.setPropertyValue('RAW_YIELD_MBASES', str(int(s.Mega_RawYield)))
-        ds.setPropertyValue('PERCENTAGE_PASSED_FILTERING',str(s.Percentage_PfClusterCount_RawClusterCount))
-        ds.setPropertyValue('PF_READS_SUM',str(int(s.Sum_PfClusterCount))) # convert first to Integer, then to String
-        ds.setPropertyValue('RAW_READS_SUM',str(int(s.Sum_RawClusterCount))) # convert first to Integer, then to String
-        ds.setPropertyValue('PERCENTAGE_RAW_CLUSTERS_PER_LANE', str(s.Percentage_RawClusterCount_AllRawClusterCounts))
-        ds.setPropertyValue('PFYIELDQ30PERCENTAGE', str(s.Percentage_PfYieldQ30_PfYield))
-        ds.setPropertyValue('PFMEANQUALITYSCORE', str(s.Fraction_PfQualityScoreSum_PfYield))
-        print "Properties in DataSet \"" + correspondingDataSet[0].getDataSetCode() + "\" are modified."
-        nprocessedDataSets += 1
-        
-    return nprocessedDataSets
-
-
-  ##########################################################
-  
-  print('\nPROCESS RUNNING '+time.ctime())
-  incomingPath = transaction.getIncoming().getPath()  
-  FileGenerator= locate(XML_FILENAME, incomingPath)
-  xmlfile = FileGenerator.next()
-  print "File: " + xmlfile
-  
-  # Import data of XML file (independent of openBIS data):
-  JavaClassToProcessXML = read_demultiplex_stats() # this function is implemented as Class in Java:
-  samplestatisticslist = JavaClassToProcessXML.importXmlAndCalculateStatistics(xmlfile)
-  totalLaneStatistics = JavaClassToProcessXML.calculateTotalLaneStatistics(samplestatisticslist)
-  
-  if len(samplestatisticslist) == 0:
-    print "\nNo Projects/Samples/Barcodes are contained in XML-file " + xmlfile + "!"
-    return
-
-  print(samplestatisticslist[0].Flowcell)
-  codeSampleFlowCell = samplestatisticslist[0].Flowcell # expect just one equal FlowCell
-  flowcell, lanes, numberOfLanes = sampleSearch(transaction, codeSampleFlowCell)
-  
-  for lane in lanes:
-    lane_in_int = int(lane.getCode().split(":")[-1])
-    if (lane_in_int in totalLaneStatistics.keySet()):
-        updateLane(transaction, codeSampleFlowCell, totalLaneStatistics)
-        
-        codeSampleFlowLane = ":".join([codeSampleFlowCell, str(lane_in_int)])
-        nprocessedDataSets = update_datatsets(transaction, samplestatisticslist, codeSampleFlowLane, codeSampleFlowCell)
-
-  print "\n", nprocessedDataSets, " openBIS-DataSets were processed." 
-  print len(samplestatisticslist), " XML-Projects/-Samples/-Barcodes were processed."
-  print("PROCESS DONE "+time.ctime())
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-nextseq/read_demultiplex_stats.java b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-nextseq/read_demultiplex_stats.java
deleted file mode 100644
index 385601962cd..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-nextseq/read_demultiplex_stats.java
+++ /dev/null
@@ -1,736 +0,0 @@
-/*
-@copyright: 2015 ETH Zuerich, CISD
-
-@license:
-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.
-
-@author: Fabian Gemperle
-@autor: Manuel Kohler
-
-@note: This Class is in Jython importable as Java-Library after compiling it.
-       In compilation 4 Class files arise:
-       - read_demultiplex_stats.class
-       - read_demultiplex_stats$SampleItem.class
-       - read_demultiplex_stats$Sample.class
-       - read_demultiplex_stats$Statistics.class
- */
-
-
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamConstants;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-//##########################################################
-
-public final class read_demultiplex_stats
-{
-
-    public static ArrayList<Statistics> importXmlAndCalculateStatistics(String XMLFile) throws Exception {
-
-        ArrayList<Statistics> stats = executeImportXmlAndCalculateStatistics(XMLFile);
-        HashMap<Integer, ArrayList<Statistics>> groupedList = groupByLane(stats);
-
-        for (Statistics s : stats)
-            s.adaptStatisticsWithRespectToAllSamples(stats, groupedList);
-        return stats;
-    }
-
-    /**
-     *
-     * Streams through a given XML file, parses the data and writes it into a Statistics object
-     *
-     * @param XMLfile: ConversionStats.xml
-     * @return a ArrayList of <Statistics>
-     */
-    private static  ArrayList<Statistics> executeImportXmlAndCalculateStatistics(String XMLfile) throws Exception {
-        ArrayList<Statistics> sampleStatisticsList = new ArrayList<>();
-
-        /*Parse corresponding XML file, put all values into a memory structure, calculate statistics overall samples.
-          Output: sampleStatisticsList (list of Sample-Statistics-Objects)
-          Input:  XMLfile having structure of file ConversionStats.xml (Example of 1.10.2014):
-                  <?xml version="1.0" encoding="utf-8"?>                             => Assumptions about XML structure:
-                  <Stats>                                                            => Element is singlechild
-                    <Flowcell flowcell-id="H0YVKBGXX">                               => Element is singlechild
-                      <Project name="BSSE_QGF_23096_H0YVKBGXX_1">  => Element is one of many children, additionally there is summary-element with attribute name="all"
-                        <Sample name="BSSE_QGF_23096_H0YVKBGXX_1_PZ27_PZ33_CelSEQ_"> => Element is singlechild except second summary-element with attribute name="all"
-                          <Barcode name="unknown">                                   => Element is singlechild except second summary-element with attribute name="all"
-                            <Lane number="1">                                        => Element is one of several children
-                              <Tile number="11101">                                  => Element is one of many children
-                                <Raw>                                                => Element is singlechild
-                                  <ClusterCount>328653</ClusterCount>                => Element is singlechild
-                                  <Read number="1">                                  => Element is one of several children
-                                    <Yield>24977628</Yield>                          => Element is singlechild
-                                    <YieldQ30>16162292</YieldQ30>                    => Element is singlechild
-                                    <QualityScoreSum>703070796</QualityScoreSum>     => Element is singlechild
-                                  </Read>
-                                  <Read number="2">                                  => Element is one of several children
-                                    <Yield>24977628</Yield>                          => Element is singlechild
-                                    <YieldQ30>16233173</YieldQ30>                    => Element is singlechild
-                                    <QualityScoreSum>699507245</QualityScoreSum>     => Element is singlechild
-                                  </Read>
-                                </Raw>
-                                <Pf>                                                 => Element is singlechild
-                                  <ClusterCount>302121</ClusterCount>                => Element is singlechild
-                                  <Read number="1">                                  => Element is one of several children
-                                    <Yield>22961196</Yield>                          => Element is singlechild
-                                    <YieldQ30>15842531</YieldQ30>                    => Element is singlechild
-                                    <QualityScoreSum>686898532</QualityScoreSum>     => Element is singlechild
-                                  </Read>
-                                  <Read number="2">                                  => Element is one of several children
-                                    <Yield>22961196</Yield>                          => Element is singlechild
-                                    <YieldQ30>16233173</YieldQ30>                    => Element is singlechild
-                                    <QualityScoreSum>699507245</QualityScoreSum>     => Element is singlechild
-                                  </Read>
-                                </Pf>
-                              </Tile>
-                              <Tile number="11102">
-                              [...]
-
-                      </Project>
-                      <Lane number="2">
-                        <TopUnknownBarcodes>
-                          <Barcode count="150988002" sequence="NNNNNNN"/>
-                          <Barcode count="167095" sequence="CCCCCCC"/>
-                          <Barcode count="57859" sequence="CCCGTCC"/>
-                          <Barcode count="49993" sequence="CCGATGT"/>
-                          <Barcode count="42981" sequence="GTCCCGC"/>
-                          <Barcode count="40446" sequence="TAAAATT"/>
-                          <Barcode count="39962" sequence="CCAGATC"/>
-                          <Barcode count="34688" sequence="GATGTAT"/>
-                          <Barcode count="32013" sequence="AAAAAGT"/>
-                          <Barcode count="30501" sequence="AGATCAT"/>
-                        </TopUnknownBarcodes>
-                      </Lane>
-                      [...]
-        */
-
-//        Map<Integer, Map<String, Integer>> barcodesPerLane = null;
-
-        try {
-            String errorMessage;
-            int event;
-            int skip;
-            String flowcellName = "";
-            String projectName = "";
-            String sampleName = "";
-            String barcodeName = "";
-            int laneNumber = 0;
-            int tileNumber;
-            Sample currentSample = null;
-            Statistics statistics;
-            SampleItem rawItem;
-            SampleItem pfItem;
-            Map<String, Integer> barcodesMap = new HashMap<>();
-            Map<Integer, Map<String, Integer>> barcodesPerLane = new HashMap<>();
-
-                    InputStream xmlFile = new FileInputStream(XMLfile);
-            XMLInputFactory xmlFactory = XMLInputFactory.newInstance();
-            XMLStreamReader xmlParser = xmlFactory.createXMLStreamReader(xmlFile);
-
-            // Start-Tag "Stats":
-            event = xmlParser.nextTag(); // Assumption: just white space or comments are aside explicit start-tag
-            if (event != XMLStreamConstants.START_ELEMENT || !xmlParser.getLocalName().equals("Stats")) {
-                errorMessage =
-                        "STRANGE ERROR IN METHOD importXmlAndCalculateStatistics WHEN READING IN XMLFILE. => CHECK CODE AND XMLFILE-STRUCTURE! Got " + event;
-                throw new Exception(errorMessage);
-            }
-
-            // Loop over potential Tags "Flowcell":
-            event = xmlParser.nextTag(); // Assumption: just white spaces or comments are aside start- or end-tag
-            //            List<Statistics> samplestatistics = new ArrayList<Statistics>();
-            boolean doimport = true;
-            while (doimport) {
-                // concerning tag Flowcell:
-                if (event == XMLStreamConstants.START_ELEMENT && xmlParser.getLocalName().equals("Flowcell")) {
-                    flowcellName = xmlParser.getAttributeValue(0);
-                    event = xmlParser.nextTag();
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlParser.getLocalName().equals("Flowcell")) {
-                    flowcellName = "";
-                    event = xmlParser.nextTag();
-
-                    // concerning tag Project:
-                } else if (event == XMLStreamConstants.START_ELEMENT && xmlParser.getLocalName().equals("Project")) {
-                    if (xmlParser.getAttributeValue(0).equals("all")) {
-                        //skip the current XML element and all of its following subelements:
-                        skip = 1;
-                        while (skip > 0) {
-                            event = xmlParser.next();
-                            switch (event) {
-                                case XMLStreamConstants.END_ELEMENT:
-                                    skip -= 1;
-                                    break;
-                                case XMLStreamConstants.START_ELEMENT:
-                                    skip += 1;
-                                    break;
-                                default:
-                                    skip += 0; // text elements, spaces, ...
-                                    break;
-                            }
-                        }
-                    } else {
-                    projectName = xmlParser.getAttributeValue(0);
-
-                    }
-                    event = xmlParser.nextTag();
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlParser.getLocalName().equals("Project")) {
-                    projectName = "";
-                    event = xmlParser.nextTag();
-
-                    // concerning tag Sample:
-                } else if (event == XMLStreamConstants.START_ELEMENT && xmlParser.getLocalName().equals("Sample")) {
-                    if (xmlParser.getAttributeValue(0).equals("all")) {
-                        // skip the current XML element and all of its following subelements:
-                        skip = 1;
-                        while (skip > 0) {
-                            event = xmlParser.next();
-                            switch (event) {
-                                case XMLStreamConstants.END_ELEMENT:
-                                    skip -= 1;
-                                    break;
-                                case XMLStreamConstants.START_ELEMENT:
-                                    skip += 1;
-                                    break;
-                                default:
-                                    skip += 0; // text elements, spaces, ...
-                                    break;
-                            }
-                        }
-                    } else {
-                        sampleName = xmlParser.getAttributeValue(0);
-                    }
-                    event = xmlParser.nextTag();
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlParser.getLocalName().equals("Sample")) {
-                    sampleName = "";
-                    event = xmlParser.nextTag();
-
-                    // concerning tag Barcode (which is as well the start/end of Project-/Sample-Entry):
-                } else if (event == XMLStreamConstants.START_ELEMENT && xmlParser.getLocalName().equals("Barcode")) {
-                    if (xmlParser.getAttributeValue(0).equals("all")) {
-                        // skip the current XML element and all of its following subelements:
-                        skip = 1;
-                        while (skip > 0) {
-                            event = xmlParser.next();
-                            switch (event) {
-                                case XMLStreamConstants.END_ELEMENT:
-                                    skip -= 1;
-                                    break;
-                                case XMLStreamConstants.START_ELEMENT:
-                                    skip += 1;
-                                    break;
-                                default:
-                                    skip += 0; // text elements, spaces, ...
-                                    break;
-                            }
-                        }
-                    } else {
-                        barcodeName = xmlParser.getAttributeValue(0);
-                    }
-                    event = xmlParser.nextTag();
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlParser.getLocalName().equals("Barcode")) {
-                    barcodeName = "";
-                    event = xmlParser.nextTag();
-
-
-                    // concerning Lane:
-                } else if (event == XMLStreamConstants.START_ELEMENT && xmlParser.getLocalName().equals("Lane")) {
-//                    System.out.println("\nStart-Element with tag " + xmlparser.getLocalName() + " with " + xmlparser.getAttributeCount() + " attributes with first attribute: " + xmlparser.getAttributeLocalName(0) +" = " + xmlparser.getAttributeValue(0));
-                    laneNumber = Integer.parseInt(xmlParser.getAttributeValue(0));
-
-                    // Now we have everything we need, we put it into a Sample
-                    currentSample = new Sample();
-
-                    if (sampleName.startsWith("Undetermined")) {
-                        currentSample.Sample = sampleName + "_" + flowcellName + "_" + laneNumber;
-                    } else {
-                        currentSample.Sample = sampleName;
-                    }
-
-                    currentSample.Flowcell = flowcellName;
-                    currentSample.Lane = laneNumber;
-                    currentSample.Project = projectName;
-                    currentSample.Barcode = barcodeName;
-                    event = xmlParser.nextTag();
-//                    System.out.println(currentSample.Sample);
-
-
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlParser.getLocalName().equals("Lane")) {
-                    // Statistics 1st step: calculate individual statistics per sample:
-                    statistics = new Statistics(currentSample);
-                    if (!currentSample.Project.equals("")) {
-                        sampleStatisticsList.add(statistics);
-                    }
-                    currentSample = null;
-                    statistics = null;
-
-//                    laneNumber = Double.NaN;
-                    event = xmlParser.nextTag();
-
-                    // concerning Tile with all its sub-elements:
-                } else if (event == XMLStreamConstants.START_ELEMENT && xmlParser.getLocalName().equals("Tile")) {
-                    tileNumber = Integer.parseInt(xmlParser.getAttributeValue(0));
-                    // concerning Raw with Assumption: Raw-element is singlechild:
-                    xmlParser.nextTag();
-                    rawItem = new SampleItem();
-                    rawItem.Type = "Raw";
-                    rawItem.Lane = laneNumber;
-                    rawItem.Tile = tileNumber;
-                    xmlParser.nextTag();
-                    rawItem.ClusterCount = Integer.parseInt(xmlParser.getElementText()); // Assumption: ClusterCount-element is numeric singlechild
-                    //System.out.println("\nValue: ClusterCount=" + rawItem.ClusterCount);
-                    xmlParser.nextTag();
-                    while (event == XMLStreamConstants.START_ELEMENT && xmlParser.getLocalName().equals("Read")) {
-                        //System.out.println("\nStart-Element with tag " + xmlparser.getLocalName() + " with " + xmlparser.getAttributeCount() + " attributes with first attribute: " + xmlparser.getAttributeLocalName(0) +" = " + xmlparser.getAttributeValue(0));
-                        xmlParser.nextTag();
-                        rawItem.YieldList.add(Double.parseDouble(xmlParser.getElementText()));
-                        xmlParser.nextTag();
-                        rawItem.YieldQ30List.add(Double.parseDouble(xmlParser.getElementText()));
-                        xmlParser.nextTag();
-                        rawItem.QualityScoreSumList.add(Double.parseDouble(xmlParser.getElementText()));
-                        xmlParser.nextTag();
-                        xmlParser.nextTag();
-                        //System.out.println("Values in Read: Yield=" + rawItem.YieldList.get(rawItem.YieldList.size()-1) + ", YieldQ30=" + rawItem.YieldQ30List.get(rawItem.YieldQ30List.size()-1) + ", QualityScoreSum=" + rawItem.QualityScoreSumList.get(rawItem.QualityScoreSumList.size()-1));
-                    }
-                    //System.out.println("\nRaw-SampleItem  " + rawItem);
-                    currentSample.RawList.add(rawItem);
-
-
-                    rawItem = null;
-                    // concerning Pf with Assumption that entire Pf-element is structured same as Raw:
-                    xmlParser.nextTag();
-                    //System.out.println("\nStart-Element with tag " + xmlparser.getLocalName());
-                    pfItem = new SampleItem();
-                    pfItem.Type = "Pf";
-                    pfItem.Lane = laneNumber;
-                    pfItem.Tile = tileNumber;
-                    xmlParser.nextTag();
-                    pfItem.ClusterCount = Integer.parseInt(xmlParser.getElementText());
-                    //System.out.println("\nValue: ClusterCount=" + pfItem.ClusterCount);
-                    xmlParser.nextTag();
-                    while (event == XMLStreamConstants.START_ELEMENT && xmlParser.getLocalName().equals("Read")) {
-                        //System.out.println("\nStart-Element with tag " + xmlparser.getLocalName() + " with " + xmlparser.getAttributeCount() + " attributes with first attribute: " + xmlparser.getAttributeLocalName(0) +" = " + xmlparser.getAttributeValue(0));
-                        xmlParser.nextTag();
-                        pfItem.YieldList.add(Double.parseDouble(xmlParser.getElementText()));
-                        xmlParser.nextTag();
-                        pfItem.YieldQ30List.add(Double.parseDouble(xmlParser.getElementText()));
-                        xmlParser.nextTag();
-                        pfItem.QualityScoreSumList.add(Double.parseDouble(xmlParser.getElementText()));
-                        xmlParser.nextTag();
-                        xmlParser.nextTag();
-                        //System.out.println("Values in Read: Yield=" + pfItem.YieldList.get(pfItem.YieldList.size()-1) + ", YieldQ30=" + pfItem.YieldQ30List.get(pfItem.YieldQ30List.size()-1) + ", QualityScoreSum=" + pfItem.QualityScoreSumList.get(pfItem.QualityScoreSumList.size()-1));
-                    }
-                    //System.out.println("\nPf-SampleItem  " + pfItem);
-                    currentSample.PfList.add(pfItem);
-                    pfItem = null;
-                    // attain end of current Tile and afterwards continue in next Tile/Lane/Barcode/Sample/Project:
-                    event = xmlParser.nextTag();
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlParser.getLocalName().equals("Tile")) {
-                    tileNumber = 0;
-                    event = xmlParser.nextTag();
-
-
-                } else if (event == XMLStreamConstants.START_ELEMENT && xmlParser.getLocalName().equals("TopUnknownBarcodes")) {
-
-                    event = xmlParser.nextTag();
-                    while (event == XMLStreamConstants.START_ELEMENT && xmlParser.getLocalName().equals("Barcode")) {
-                        Integer numberOfBarcodes = Integer.valueOf((xmlParser.getAttributeValue(0)));
-                        String barcode = xmlParser.getAttributeValue(1);
-                        barcodesMap.put(barcode, numberOfBarcodes);
-                        xmlParser.nextTag();
-                        event = xmlParser.nextTag();
-                    }
-
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlParser.getLocalName().equals("TopUnknownBarcodes")) {
-
-                    barcodesPerLane.put(laneNumber, barcodesMap);
-                    event = xmlParser.nextTag();
-
-                    //  concerning finish of reading in XML or hit upon error due XML content:
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlParser.getLocalName().equals("Stats")) {
-                    // this final part of while loop is just for analyzing potential errors, but
-                    // could be removed and changed in:  while xmlparser.getLocalName() != 'Stats'
-                    doimport = false;
-                } else {
-                    doimport = false;
-                    System.out.println("Warning: Different XML structure than expectet. Got event: " + event);
-                }
-            }
-            xmlParser.close();
-
-        } catch (FileNotFoundException | XMLStreamException | IllegalArgumentException e) {
-            System.out.println("OCCURRED EXCEPTION " + e.toString());
-            e.printStackTrace();
-        }
-        return sampleStatisticsList;
-    }
-
-    public static HashMap<Integer, LaneStatistics> calculateTotalLaneStatistics(ArrayList<Statistics> samplestatisticslist)
-    {
-        HashMap<Integer, LaneStatistics> listOfLaneStatistics= new HashMap<Integer, LaneStatistics>();
-
-        HashMap<Integer, ArrayList<Statistics>> groupedList = groupByLane(samplestatisticslist);
-
-        for (Integer key : groupedList.keySet()) {
-
-            LaneStatistics laneStats = new LaneStatistics(groupedList.get(key));
-            laneStats.calculateOverallStats(key);
-            listOfLaneStatistics.put(key, laneStats);
-        }
-        return listOfLaneStatistics;
-    }
-
-
-    private static HashMap<Integer, ArrayList<Statistics>> groupByLane(ArrayList<Statistics> samplestatisticslist) {
-        // Group ArrayList by Lane
-        HashMap<Integer, ArrayList<Statistics>> groupedList = new HashMap <Integer, ArrayList<Statistics>>();
-        for (Statistics s : samplestatisticslist) {
-
-            if (groupedList.containsKey(s.Lane)) {
-                groupedList.get(s.Lane).add(s);
-            }
-            else {
-                ArrayList <Statistics> newEntry = new ArrayList<Statistics>();
-                newEntry.add(s);
-                groupedList.put(s.Lane, newEntry);
-            }
-        }
-        return groupedList;
-    }
-
-
-    // ##########################################################
-
-    private static class SampleItem
-    {
-        /*
-         * Object of an item in sample including - the corresponding type Raw or Pf - the index of corresponding Lane, Tile - measured value of
-         * ClusterCount and values in Lists (w.r.t. Read) of Yield, YieldQ30, QualityScoreSum
-         */
-
-        public String Type = "";
-
-        public Integer Lane = 0;
-
-        public Integer Tile = 0;
-
-        public Integer ClusterCount = 0;
-
-        // Define unknown ArrayList of numerical values with changeable List size. Type Double(object) instead of double(primitive) is necessary in
-        // Lists.
-        public List<Double> YieldList = new ArrayList<>();
-
-        public List<Double> YieldQ30List = new ArrayList<>();
-
-        public List<Double> QualityScoreSumList = new ArrayList<>();
-
-        public String toString()
-        {
-            return "Type: " + this.Type + ", Lane: " + (long) this.Lane + ", Tile: " + (long) this.Tile
-                    + ", ClusterCount: " + (long) this.ClusterCount + ", YieldList: " + this.YieldList
-                    + ", YieldQ30List: " + this.YieldQ30List + ", QualityScoreSumList: " + this.QualityScoreSumList;
-        }
-
-    }
-
-    // ##########################################################
-
-    public static class Sample
-    {
-        /*
-         * Object of an entire sample including - the name of Flowcell, Project, Sample, Barcode - the list of Raw and Pf SampleItem-Objects
-         */
-
-        public String Flowcell = "";
-        
-        public Integer Lane = 0;
-
-        public String Project = "";
-
-        public String Sample = "";
-
-        public String Barcode = "";
-
-        // Define unknown ArrayList of SampleItems:
-        public List<SampleItem> RawList = new ArrayList<>();
-
-        public List<SampleItem> PfList = new ArrayList<>();
-
-        public String toString()
-        {
-            return "Flowcell: " + this.Flowcell + ", Lane: " + this.Lane + ", Project: " + this.Project + ", Sample: " + this.Sample + ", Barcode: " + this.Barcode
-                    + ", RawList: " + this.RawList + ", PfList: " + this.PfList;
-        }
-
-    }
-
-    // ##########################################################
-
-    public static class Statistics extends Sample
-    {
-        /*
-         * Object of Statistics within one single sample inherited from Sample-Object
-         */
-
-        public Integer Sum_RawClusterCount = 0;
-
-        public Integer Sum_PfClusterCount = 0;
-
-        public double Sum_RawYield = Double.NaN;
-
-        public double Sum_PfYield = Double.NaN;
-
-        public double Sum_RawYieldQ30 = Double.NaN;
-
-        public double Sum_PfYieldQ30 = Double.NaN;
-
-        public double Sum_RawQualityScoreSum = Double.NaN;
-
-        public double Sum_PfQualityScoreSum = Double.NaN;
-
-        public double Mega_RawYield = Double.NaN; // obvious double, but could be turned into int
-
-        public double Mega_PfYield = Double.NaN; // obvious double, but could be turned into int
-
-        public double Percentage_PfYield_RawYield = Double.NaN;
-
-        public double Percentage_PfYieldQ30_PfYield = Double.NaN;
-
-        public double Fraction_PfQualityScoreSum_PfYield = Double.NaN;
-
-        public double Percentage_PfClusterCount_RawClusterCount = Double.NaN;
-
-        public double Percentage_RawClusterCount_AllRawClusterCounts = Double.NaN;
-
-        public Statistics(Sample sample)
-        {
-            /*
-             * Constructor of derived class Initialization: Already initialized Sample-Object is necessary argument.
-             */
-
-            super();
-            Flowcell = sample.Flowcell;
-            Lane = sample.Lane;
-            Project = sample.Project;
-            Sample = sample.Sample;
-            Barcode = sample.Barcode;
-            RawList = sample.RawList;
-            PfList = sample.PfList;
-
-            if (RawList.size() > 0)
-                Sum_RawClusterCount = 0;
-            for (SampleItem s : RawList)
-                Sum_RawClusterCount += s.ClusterCount;
-            if (PfList.size() > 0)
-                Sum_PfClusterCount = 0;
-            for (SampleItem s : PfList)
-                Sum_PfClusterCount += s.ClusterCount;
-            if (RawList.size() > 0)
-                Sum_RawYield = 0;
-            for (SampleItem s : RawList)
-                for (double d : s.YieldList)
-                    Sum_RawYield += d;
-            if (PfList.size() > 0)
-                Sum_PfYield = 0;
-            for (SampleItem s : PfList)
-                for (double d : s.YieldList)
-                    Sum_PfYield += d;
-            if (RawList.size() > 0)
-                Sum_RawYieldQ30 = 0;
-            for (SampleItem s : RawList)
-                for (double d : s.YieldQ30List)
-                    Sum_RawYieldQ30 += d;
-            if (PfList.size() > 0)
-                Sum_PfYieldQ30 = 0;
-            for (SampleItem s : PfList)
-                for (double d : s.YieldQ30List)
-                    Sum_PfYieldQ30 += d;
-            if (RawList.size() > 0)
-                Sum_RawQualityScoreSum = 0;
-            for (SampleItem s : RawList)
-                for (double d : s.QualityScoreSumList)
-                    Sum_RawQualityScoreSum += d;
-            if (PfList.size() > 0)
-                Sum_PfQualityScoreSum = 0;
-            for (SampleItem s : PfList)
-                for (double d : s.QualityScoreSumList)
-                    Sum_PfQualityScoreSum += d;
-            // Mega_RawYield = calculate_MegaUnit(Sum_RawYield);
-            // Mega_PfYield = calculate_MegaUnit(Sum_PfYield);
-
-            Mega_RawYield = Sum_RawYield;
-            Mega_PfYield = Sum_PfYield;
-
-            Percentage_PfYield_RawYield = calculate_Percentage(Sum_PfYield, Sum_RawYield);
-            Percentage_PfYieldQ30_PfYield = calculate_Percentage(Sum_PfYieldQ30, Sum_PfYield);
-            Fraction_PfQualityScoreSum_PfYield = calculate_Fraction(Sum_PfQualityScoreSum, Sum_PfYield);
-            Percentage_PfClusterCount_RawClusterCount = calculate_Percentage(Sum_PfClusterCount, Sum_RawClusterCount);
-            // Calculation of attribute "Percentage_RawClusterCount_AllRawClusterCounts" needs statistics of all other included samples. => After
-            // initializing this object, apply method: adaptStatisticsWithRespectToAllSamples(statisticslist)
-        }
-
-        public String toString()
-        {
-            return "Flowcell: " + this.Flowcell + ", Lane: "+ this.Lane + ", Project: " + this.Project + ", Sample: " + this.Sample + ", Barcode: " + this.Barcode
-                    + ", Raw Clusters: " + (long) this.Sum_RawClusterCount + ", Mbases Raw Yield: " + this.Mega_RawYield
-                    + ", % Raw Clusters overall: " + this.Percentage_RawClusterCount_AllRawClusterCounts
-                    + ", Pf Clusters: " + (long) this.Sum_PfClusterCount + ", Mbases Pf Yield: " + this.Mega_PfYield
-                    + ", % PfYield/RawYield: " + this.Percentage_PfYield_RawYield
-                    + ", % PfYieldQ30/PfYield: " + this.Percentage_PfYieldQ30_PfYield
-                    + ", Mean Pf Quality Score: " + this.Fraction_PfQualityScoreSum_PfYield
-                    + ", % Passes Filtering: " + this.Percentage_PfClusterCount_RawClusterCount + "\n";
-        }
-
-        public void adaptStatisticsWithRespectToAllSamples(ArrayList<Statistics> statisticslist, HashMap<Integer, ArrayList<Statistics>>  groupedList)
-        {
-            /*
-             * This Statistics-Object (corresponding to one sample) is adapted by employing a list of Statistics-Objects corresponding to all samples
-             * influencing the statistics of single sample. Input: statisticslist contains all Statistics-Objects
-             */
-            if (statisticslist.size() == 0)
-            { // here it additionally should be checked, if calling object is included ...
-                Percentage_RawClusterCount_AllRawClusterCounts = Double.NaN;
-                String errormessage =
-                        "INPUT ARGUMENT statisticslist MUST BE LIST OF Statistics OBJECTS INCLUDING THE CALLING OBJECT" +
-                                " IN METHOD adaptStatisticsWithRespectToAllSamples!";
-                throw new IllegalArgumentException(errormessage); // Exception reasonable since otherwise wrong results.
-            } else
-            {
-                for (Integer key : groupedList.keySet()) {
-                    double sumAllRawClusterCounts = 0;
-                    ArrayList<Statistics> groupList = groupedList.get(key);
-                    for (Statistics element : groupList) {
-                        sumAllRawClusterCounts += element.Sum_RawClusterCount;
-                    }
-                    for (Statistics element : groupList) {
-                        element.Percentage_RawClusterCount_AllRawClusterCounts =
-                                calculate_Percentage(element.Sum_RawClusterCount, sumAllRawClusterCounts);
-                    }
-                }
-            }
-        }
-
-
-        public double calculate_Percentage(double x, double y)
-        {
-            double z = x / y;
-            if (z == Double.POSITIVE_INFINITY || z == Double.NEGATIVE_INFINITY || Double.isNaN(z))
-            {
-                z = Double.NaN;
-            } else
-            {
-                z = 100 * z;
-            }
-            return z;
-        }
-
-        public double calculate_Fraction(double x, double y)
-        {
-            double z = x / y;
-            if (z == Double.POSITIVE_INFINITY || z == Double.NEGATIVE_INFINITY || Double.isNaN(z))
-            {
-                z = Double.NaN;
-            }
-            return z;
-        }
-    }
-
-    public static class LaneStatistics
-    {
-        /*
-         * Total Lane Statistics
-         */
-        public ArrayList<Statistics> statisticsList;
-
-        public Integer Lane = 0;
-
-        public double Sum_RawClusterCount = 0.0;
-
-        public Integer Sum_PfClusterCount = 0;
-
-        public double Sum_RawYield = 0.0;
-
-        public double Sum_PfYield = 0.0;
-
-        public double Sum_RawYieldQ30 = 0.0;
-
-        public double Sum_PfYieldQ30 = 0.0;
-
-        public double Sum_RawQualityScoreSum = 0.0;
-
-        public double Sum_PfQualityScoreSum = 0.0;
-
-        public double Percentage_PfYield_RawYield = 0.0;
-
-        public double Percentage_PfYieldQ30_PfYield = 0.0;
-
-        public double Fraction_PfQualityScoreSum_PfYield = 0.0;
-
-        public double Percentage_PfClusterCount_RawClusterCount = 0.0;
-
-        public double Percentage_RawClusterCount_AllRawClusterCounts = 0.0;
-
-        public double Clusters_PfWithoutNoindex = 0.0;
-
-        public LaneStatistics(ArrayList<Statistics> statisticsList)
-        {
-            this.statisticsList = statisticsList;
-        }
-
-        public void calculateOverallStats(Integer key)
-        {
-            int sampleNumber = statisticsList.size();
-            for (Statistics s : statisticsList) {
-                if (!s.Barcode.equals("") || s.Barcode.equals("unknown")) {
-                    this.Clusters_PfWithoutNoindex += s.Sum_PfClusterCount;
-                }
-
-                this.Sum_RawClusterCount += s.Sum_RawClusterCount;
-                this.Sum_PfClusterCount += s.Sum_PfClusterCount;
-                this.Sum_RawYield += s.Sum_RawYield;
-                this.Sum_PfYield += s.Sum_PfYield;
-                this.Sum_RawYieldQ30 += s.Sum_RawYieldQ30;
-                this.Sum_PfYieldQ30 += s.Sum_PfYieldQ30;
-                this.Sum_RawQualityScoreSum += s.Sum_RawQualityScoreSum;
-                this.Sum_PfQualityScoreSum += s.Sum_PfQualityScoreSum;
-                this.Percentage_PfYield_RawYield += s.Percentage_PfYield_RawYield;
-                if (!Double.isNaN(s.Percentage_PfYieldQ30_PfYield)) {
-                    this.Percentage_PfYieldQ30_PfYield += s.Percentage_PfYieldQ30_PfYield;
-                }
-                this.Percentage_PfClusterCount_RawClusterCount += s.Percentage_PfClusterCount_RawClusterCount;
-                this.Fraction_PfQualityScoreSum_PfYield += s.Fraction_PfQualityScoreSum_PfYield;
-            }
-
-            this.Lane = key;
-            this.Sum_RawQualityScoreSum = this.Sum_RawQualityScoreSum / sampleNumber;
-            this.Sum_PfQualityScoreSum = this.Sum_PfQualityScoreSum / sampleNumber;
-            this.Percentage_PfYield_RawYield = this.Percentage_PfYield_RawYield / sampleNumber;
-            this.Percentage_PfYieldQ30_PfYield = this.Percentage_PfYieldQ30_PfYield / (double) sampleNumber;
-            this.Percentage_PfClusterCount_RawClusterCount = this.Percentage_PfClusterCount_RawClusterCount / (double) sampleNumber;
-            this.Fraction_PfQualityScoreSum_PfYield = this.Fraction_PfQualityScoreSum_PfYield / (double) sampleNumber;
-        }
-
-        public String toString()
-        {
-            return "Lane " + this.Lane + " Sum_RawClusterCount " + this.Sum_RawClusterCount + " Sum_PfClusterCount " + this.Sum_PfClusterCount +
-                    " Percentage_PfYieldQ30_PfYield " + this.Percentage_PfYieldQ30_PfYield +
-                    " Percentage_PfClusterCount_RawClusterCount " + this.Percentage_PfClusterCount_RawClusterCount;
-        }
-    }
-}
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-nextseq/read_demultiplex_statsTest.java b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-nextseq/read_demultiplex_statsTest.java
deleted file mode 100644
index bc409770abf..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-nextseq/read_demultiplex_statsTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import static org.testng.AssertJUnit.assertEquals;
-
-public class read_demultiplex_statsTest {
-
-    private String XMLfile =
-            "/Users/kohleman/Documents/workspace/datastore_server/targets/read-demultiplex-stats-nextseq/" +
-                    "150724_J00121_0017_AH2VYMBBXX.sv/ConversionStats.xml";
-
-
-    @org.testng.annotations.BeforeMethod
-    public void setUp() throws Exception {
-    }
-
-    @org.testng.annotations.AfterMethod
-    public void tearDown() throws Exception {
-
-    }
-
-    @org.testng.annotations.Test
-    public void testImportXmlAndCalculateStatistics() throws Exception {
-        ArrayList<read_demultiplex_stats.Statistics> stat = read_demultiplex_stats.importXmlAndCalculateStatistics(XMLfile);
-        assertEquals(stat.size(), 39);
-        read_demultiplex_stats.Statistics eigth_element = stat.get(8);
-        assertEquals(eigth_element.Flowcell, "H2VYMBBXX");
-        assertEquals(eigth_element.Barcode, "GCCAATA");
-        assertEquals(eigth_element.Sum_RawClusterCount.intValue(), 27850973);
-        assertEquals(eigth_element.Sum_RawYield, 8.410993846E9);
-        assertEquals(eigth_element.Percentage_PfYieldQ30_PfYield, 87.6792784423112);
-        assertEquals(eigth_element.Fraction_PfQualityScoreSum_PfYield, 37.40267477898711);
-        assertEquals(eigth_element.Percentage_RawClusterCount_AllRawClusterCounts, 5.770060255141701);
-    }
-
-    @org.testng.annotations.Test
-    public void testImportXmlAndCalculateStatistics_overall() throws Exception {
-        ArrayList<read_demultiplex_stats.Statistics> stat = read_demultiplex_stats.importXmlAndCalculateStatistics(XMLfile);
-
-        Double percentage = 0.0;
-        for (read_demultiplex_stats.Statistics element : stat) {
-            if (element.Lane.equals(6)) {
-                percentage += element.Percentage_RawClusterCount_AllRawClusterCounts;
-            }
-        }
-        assertEquals(100.0, (double)Math.round(percentage * 1000) / 1000);
-
-    }
-
-    @org.testng.annotations.Test
-    public void testCalculateTotalLaneStatistics() throws Exception {
-        ArrayList<read_demultiplex_stats.Statistics> stat =
-                read_demultiplex_stats.importXmlAndCalculateStatistics(XMLfile);
-
-        HashMap<Integer, read_demultiplex_stats.LaneStatistics> lanesStatistics =
-                read_demultiplex_stats.calculateTotalLaneStatistics(stat);
-
-        read_demultiplex_stats.LaneStatistics lane2 = lanesStatistics.get(2);
-        assertEquals(lane2.Sum_RawClusterCount, 4.826808E8);
-        assertEquals(lane2.Sum_PfClusterCount.intValue(), 332293484);
-        assertEquals(lane2.Percentage_PfYieldQ30_PfYield, 86.14969791102051);
-        assertEquals(lane2.Percentage_PfClusterCount_RawClusterCount, 92.63902299583091);
-    }
-}
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-nextseq/start_read_demultiplex_stats.java b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-nextseq/start_read_demultiplex_stats.java
deleted file mode 100644
index be097bcc3ed..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats-nextseq/start_read_demultiplex_stats.java
+++ /dev/null
@@ -1,21 +0,0 @@
-import java.util.ArrayList;
-import java.util.HashMap;
-
-public class start_read_demultiplex_stats {
-
-    public static void main(String[] args) {
-
-        String XMLfile =
-                "/Users/kohleman/Documents/workspace/datastore_server/targets/read-demultiplex-stats-nextseq/" +
-                        "150724_J00121_0017_AH2VYMBBXX.sv/ConversionStats.xml";
-        ArrayList<read_demultiplex_stats.Statistics> stat = null;
-        try {
-            stat = read_demultiplex_stats.importXmlAndCalculateStatistics(XMLfile);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        HashMap<Integer, read_demultiplex_stats.LaneStatistics> ls = read_demultiplex_stats.calculateTotalLaneStatistics(stat);
-//        System.out.println(stat);
-//        System.out.println(ls);
-    }
-}
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats/plugin.properties
deleted file mode 100644
index 1337bde948b..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats/plugin.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-# 
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/read-demultiplex-stats
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = read-demultiplex-stats.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats/read-demultiplex-stats.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats/read-demultiplex-stats.py
deleted file mode 100755
index 5695473fe03..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-demultiplex-stats/read-demultiplex-stats.py
+++ /dev/null
@@ -1,595 +0,0 @@
-'''
-  @copyright: 2012 ETH Zuerich, CISD
-  
-  @license: 
-  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.
-
-
-@author: Manuel Kohler
-
-XML Structur which is processed:
-
-<?xml version="1.0"?>
-<Summary>
-  <Lane index="8">
-    <Sample index="lane8">
-      <Barcode index="Undetermined">
-        <Tile index="1101">
-          <Read index="1">
-            <Raw>
-              <Yield>1921250</Yield>
-              <YieldQ30>949680</YieldQ30>
-              <ClusterCount>38425</ClusterCount>
-              <ClusterCount0MismatchBarcode>0</ClusterCount0MismatchBarcode>
-              <ClusterCount1MismatchBarcode>0</ClusterCount1MismatchBarcode>
-              <QualityScoreSum>40995660</QualityScoreSum>
-            </Raw>
-            <Pf>
-              <Yield>945450</Yield>
-              <YieldQ30>854815</YieldQ30>
-              <ClusterCount>18909</ClusterCount>
-              <ClusterCount0MismatchBarcode>0</ClusterCount0MismatchBarcode>
-              <ClusterCount1MismatchBarcode>0</ClusterCount1MismatchBarcode>
-              <QualityScoreSum>33815505</QualityScoreSum>
-            </Pf>
-          </Read>
-        </Tile>
-        [...]
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-'''
-
-import time
-import os
-import fnmatch
-import xml.etree.ElementTree as etree
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-
-class parseXmlFile:
-
-  def __init__(self, xmlFile):
-    self.xmlFile = xmlFile
-    self.tree = etree.parse(self.xmlFile)
-    self.root = self.tree.getroot()
-
-# -----------------------------------------------------------------------------
-
-class qcValues(object):
-  def __init__(self, Yield = 0, YieldQ30 = 0, ClusterCount = 0,
-               ClusterCount0MismatchBarcode = 0, ClusterCount1MismatchBarcode = 0,
-               QualityScoreSum = 0, *args, **kwargs):
-    self.Yield = Yield
-    self.YieldQ30 = YieldQ30
-    self.ClusterCount = ClusterCount 
-    self.ClusterCount0MismatchBarcode = ClusterCount0MismatchBarcode
-    self.ClusterCount1MismatchBarcode = ClusterCount1MismatchBarcode
-    self.QualityScoreSum = QualityScoreSum
-    
-  def __str__(self):
-        return "Yield: %s, YieldQ30: %s, ClusterCount: %s, ClusterCount0MismatchBarcode: %s," \
-          " CusterCount1MismatchBarcode: %s, QualityScoreSum: %s" \
-          % (self.Yield, self.YieldQ30, self.ClusterCount, self.ClusterCount0MismatchBarcode,
-          self.ClusterCount1MismatchBarcode, self.QualityScoreSum)    
-
-class sample:
-  def __init__(self, Lane = 0, Sample = '', Barcode = '', Tile = '', Read = '', rawqc = qcValues([]),
-                pfqc = qcValues([]), *args, **kwargs):
-    self.Lane = Lane
-    self.Sample = Sample
-    self.Barcode = Barcode
-    self.Tile = Tile
-    self.Read = Read
-    self.rawqc = rawqc
-    self.pfqc = pfqc
-    
-  def __str__(self):
-    return "Lane: %s, Sample: %s, Barcode: %s, Tile: %s, Read: %s, rawqc: %s, pfqc: %s" \
-      % (self.Lane, self.Sample, self.Barcode, self.Tile, self.Read, self.rawqc, self.pfqc)
-
-# -----------------------------------------------------------------------------
-
-class Statistics:
-  def __init__(self, lane = 0, sampleName = "", index1 = "NoIndex", index2 = "NoIndex", pfYieldSum = 0,
-                 rawYieldSum = 0, pfPercentage = 0.0, rawReadsSum = 0, pfReadsSum = 0,
-                 pfYieldQ30Sum = 0, qualityScoreSum = 0, rawPercentageReadsPerLane = 0.0,
-                 pfYieldQ30Percentage = 0.0, pfsumQualityScore = 0, pfmeanQualityScore = 0.0,
-                 pfReadsSumWithoutUndetermined = 0):
-      self.lane = lane
-      self.sampleName = sampleName
-      self.index1 = index1
-      self.index2 = index2
-      self.pfYieldSum = pfYieldSum
-      self.rawYieldSum = rawYieldSum
-      self.pfPercentage = pfPercentage
-      self.rawReadsSum = rawReadsSum
-      self.pfReadsSum = pfReadsSum
-      self.pfYieldQ30Sum = pfYieldQ30Sum
-      self.qualityScoreSum = qualityScoreSum
-      self.rawPercentageReadsPerLane = rawPercentageReadsPerLane
-      self.pfYieldQ30Percentage = pfYieldQ30Percentage
-      self.pfsumQualityScore = pfsumQualityScore
-      self.pfmeanQualityScore = pfmeanQualityScore
-      self.pfReadsSumWithoutUndetermined = pfReadsSumWithoutUndetermined
-      
-  def __str__(self):
-    return "lane: %s, sampleName: %s, index1: %s, index2: %s, pfYieldSum: %s, pfPercentage: %s," \
-           " rawReadsSum: %s, pfReadsSum: %s," \
-           " rawPercentageReadsPerLane: %s, pfYieldQ30Percentage: %s," \
-           " pfmeanQualityScore: %s" \
-        % (self.lane, self.sampleName, self.index1, self.index2, self.pfYieldSum, self.pfPercentage,
-           self.rawReadsSum, self.pfReadsSum,
-           self.rawPercentageReadsPerLane, self.pfYieldQ30Percentage, self.pfmeanQualityScore)
-         
-  def calculatePercentagePF (self, rawYield = 0, pfYield = 1):
-    try:
-      return round(float(pfYield) / float(rawYield) * 100, 2)
-    except:
-      return 0.0
-  
-  def calulateMeanQualityScore (self, pfqualityScoreSum = 0, pfYield = 1):
-    try:
-      return round (float(pfqualityScoreSum) / float(pfYield), 2)
-    except:
-      return 0.0
-    
-  def calculateYieldQ30Percentage (self, pfYieldQ30 = 0, pfYield = 1):
-    try:
-      return round (float(pfYieldQ30) / float(pfYield) * 100, 2)
-    except:
-      return 0.0
-  
-
-class lane_statistics:
-    def __init__(self):
-        self.complete_lane_statistic = Statistics()
-        
-    def caluclate_complete_lane_statistic(self, list_of_statistics):
-        
-        sample_number = len(list_of_statistics)
-        
-        for stat in list_of_statistics:
-            self.complete_lane_statistic.lane = stat.lane
-            self.complete_lane_statistic.pfYieldSum += stat.pfYieldSum
-            self.complete_lane_statistic.rawYieldSum += stat.rawYieldSum
-            self.complete_lane_statistic.pfReadsSum += stat.pfReadsSum
-            self.complete_lane_statistic.rawReadsSum += stat.rawReadsSum
-            self.complete_lane_statistic.pfPercentage += stat.pfPercentage
-            self.complete_lane_statistic.pfYieldQ30Percentage += stat.pfYieldQ30Percentage
-            self.complete_lane_statistic.pfmeanQualityScore += stat.pfmeanQualityScore
-            
-            if stat.index1 != "Undetermined":
-                self.complete_lane_statistic.pfReadsSumWithoutUndetermined += stat.pfReadsSum
-            
-        self.complete_lane_statistic.pfPercentage = self.complete_lane_statistic.pfPercentage / sample_number
-        self.complete_lane_statistic.pfYieldQ30Percentage = self.complete_lane_statistic.pfYieldQ30Percentage / sample_number
-        self.complete_lane_statistic.pfmeanQualityScore = self.complete_lane_statistic.pfmeanQualityScore/ sample_number
-        
-        return self.complete_lane_statistic
-
-# -----------------------------------------------------------------------------
-
-def xml2Memory(DEMULTIPLEX_XML):
-  '''
-  Parse the XML file and put all values in a memory structure:
-  List of: 
-  lane, sample, barcode, tile, read, qcRawList, qcPfList
-  '''
-
-  RAW_TAG = "Raw"
-  PF_TAG = "Pf"
-
-  sampleList = []
-  
-  xml = parseXmlFile(DEMULTIPLEX_XML)
-  r = xml.tree.getroot()
-
-  for lane in r.getchildren():
-    for mysample in lane:  
-      for barcode in mysample:       
-        for tile in barcode:
-          for read in tile:
-            
-            qcRaw = qcValues()
-            qcPf = qcValues()  
-            qcRawList = []
-            qcPfList = []
-
-            # Read out the Raw fields
-            raw = read.find(RAW_TAG) 
-            for child in raw.getchildren():
-              # equivalent to a Java reflection
-              setattr(qcRaw, child.tag, int(child.text))
-              
-            # Read out the Pf fields
-            pf = read.find(PF_TAG)
-            for child in pf.getchildren():
-              # equivalent to a Java reflection
-              setattr(qcPf, child.tag, int(child.text))
-
-            qcRawList.append(qcRaw)
-            qcPfList.append(qcPf)
-            
-            singleElement = sample ()
-            
-            setattr(singleElement, lane.tag, lane.attrib)
-            setattr(singleElement, mysample.tag, mysample.attrib)
-            setattr(singleElement, barcode.tag, barcode.attrib)
-            setattr(singleElement, tile.tag, tile.attrib)
-            setattr(singleElement, read.tag, read.attrib)
-            singleElement.rawqc = qcRawList
-            singleElement.pfqc = qcPfList
-            
-            sampleList.append(singleElement)
-  return sampleList
-
-# -----------------------------------------------------------------------------
-
-def calculateStatistics(listofSamples):
-  '''
-  Structure of 'listofSamples'
-  Lane: {'index': '6'}, Sample: {'index': 'BSSE-QGF-3524_C0NKPACXX'}, Barcode: {'index': 'TGACCA'},
-  Tile: {'index': '2307'}, Read: {'index': '1'}, rawqc:<mem>, pfqc:<mem> 
-  '''
-
-  numberOfTiles = len(listofSamples)
-  
-  tile = sample()
-  raw = qcValues ()
-  pf = qcValues ()
-  stats = Statistics()
- 
-  for tile in listofSamples:
-    raw = tile.rawqc[0]
-    pf = tile.pfqc[0]
-    
-    stats.pfYieldSum += pf.Yield
-    stats.rawYieldSum += raw.Yield
-    stats.rawReadsSum += raw.ClusterCount 
-    stats.pfReadsSum += pf.ClusterCount
-    stats.pfYieldQ30Sum += pf.YieldQ30
-    stats.qualityScoreSum += pf.QualityScoreSum
-     
-  # Can not be set here, needs to be calculated later   
-  #stats.rawPercentageReadsPerLane = rawPercentageReadsPerLane
-  stats.pfPercentage = stats.calculatePercentagePF(stats.rawYieldSum, stats.pfYieldSum)
-  stats.pfYieldQ30Percentage = stats.calculateYieldQ30Percentage(stats.pfYieldQ30Sum, stats.pfYieldSum)
-  stats.pfmeanQualityScore = stats.calulateMeanQualityScore(stats.qualityScoreSum, stats.pfYieldSum)
-  stats.lane = listofSamples[0].Lane.values()[0]
-  stats.sampleName = listofSamples[0].Sample.values()[0]
-  index = listofSamples[0].Barcode.values()[0]
-  try:
-    stats.index1, stats.index2 = index.split("-")
-  except:
-    stats.index1 = index
-  return stats
-
-# -----------------------------------------------------------------------------
-
-
-def rawReadSumPerSamples(stat):
-  '''
-  Creates a dictionary with the lanes as keys
-  The values are a list where the elements are a dictionary again.
-  This dictionary has the sample names as key and the RawReadSum as value.  
-  
-  Example:
-  {4': [{'BSSE-QGF-3434_C0NKPACXX': 248999502}], '7': [{'lane7': 123921974}, 
-  {'BSSE-QGF-3527_C0NKPACXX': 38587703}, {'BSSE-QGF-3529_C0NKPACXX': 30130893},
-  {'BSSE-QGF-3528_C0NKPACXX': 34519296}, {'BSSE-QGF-3526_C0NKPACXX': 34980179}]}
-  '''
-  
-  laneDict = {}
-  for e in stat:
-    if e.lane not in laneDict:
-      laneDict[e.lane] = [{e.sampleName:e.rawReadsSum}]
-    else:
-      laneDict[e.lane].append({e.sampleName:e.rawReadsSum})
-  return laneDict
-
-# -----------------------------------------------------------------------------
-
-def createSumRawReadsPerLane(laneDict):
-  '''
-  Creates a dictionary with lane as key and sum of Raw Reads as value:
-  {'1': 183180877, '3': 244968562, '2': 191496395, '5': 193466239, '4': 248999502, 
-  '7': 262140045, '6': 257136830, '8': 209948449}
-  '''
-  sumRawReadsDict = {}
-  for lane in laneDict:
-    sumRawReads = 0
-    for sampleNameDict in laneDict[lane]:
-      sumRawReads += sampleNameDict.values()[0]
-    
-    sumRawReadsDict[lane] = sumRawReads 
-  return sumRawReadsDict
-
-# -----------------------------------------------------------------------------
-
-def createPercentagePerLane(laneDict, sumRawReadsDict):
-  '''
-  Creates a dictionary with the sample Name as key and the percentage of raw reads related to 
-  all reads in the same lane
-  {'lane7': 47.27, 'BSSE-QGF-3433_C0NKPACXX': 100.0, 'BSSE-QGF-3666_C0NKPACXX': 54.12}
-  '''
-  
-  relRawReadsDict = {}
-  for lane in laneDict:
-    for sampleName in laneDict[lane]:
-      relRawReadsDict[sampleName.keys()[0]] = round(float(sampleName.values()[0]) / 
-                                                    float(sumRawReadsDict[lane]) * 100, 2)
-  return relRawReadsDict
-
-# -----------------------------------------------------------------------------
-
-def locate(pattern, root):
-    '''Locate all files matching supplied filename pattern in and below
-    supplied root directory.'''
-    for path, dirs, files in os.walk(os.path.abspath(root)):
-        for filename in fnmatch.filter(files, pattern):
-            yield os.path.join(path, filename)
-
-# -----------------------------------------------------------------------------
-
-def getVocabulary(transaction, vocabularyCode):
- 
-  vocabularyTermList = [] 
-  vocabulary = transaction.getSearchService().searchForVocabulary(vocabularyCode)
-  if (vocabulary is None):
-    print 'VOCABULARY %s does not exist' % (vocabularyCode)
-  else:
-    print "Getting VOCABULARY: " + vocabulary.getCode() 
-    for term in vocabulary.getTerms():
-            vocabularyTermList.append(term.getCode())           
-  vocabularyTermList.sort()
-  return vocabularyTermList
-
-# -----------------------------------------------------------------------------
-
-def getFlowCellMetaData (transaction,flowCellId):
-
-  def sortedDictValues(adict):
-    keys = adict.keys()
-    keys.sort()
-    return map(adict.get, keys)
-
-  search = transaction.getSearchService()
-  sc = SearchCriteria()
-  print('Searching FlowCell: '+ str(flowCellId))
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCellId));
-  foundFlowCells = search.searchForSamples(sc)
-
-  try:
-    assert foundFlowCells.size() == 1
-  except AssertionError:
-    print (str(foundFlowCells.size()) + \
-          ' flow cells found which match the criterias: '+ flowCellId)
-
-  fcPropertiesDict = {}
-  fcPropertyTypes = []
-
-  fcProperties = foundFlowCells[0].getSample().getProperties()
-  for property in fcProperties:
-      code = property.getPropertyType().getSimpleCode()
-      fcPropertyTypes.append(code)
-      fcPropertiesDict[code] = property.getValue()
-
-  fcPropertyTypes.sort()
-  return fcPropertiesDict, fcPropertyTypes
-
-def getIndexesofDataSetsofSample(transaction, sample, DATA_SET_TYPE):
-
-    index1List = []
-    index2List = []
-    sc = SearchCriteria()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sample));
-    search_service = transaction.getSearchService()
-    foundSample = search_service.searchForSamples(sc)
-
-    dataSetSc = SearchCriteria()
-    dataSetSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, DATA_SET_TYPE))
-    dataSetSc.addSubCriteria(SearchSubCriteria.createSampleCriteria(sc))
-    foundDataSets = search_service.searchForDataSets(dataSetSc)
-    for ds in foundDataSets:
-      index1List.append(ds.getPropertyValue('BARCODE'))
-      index2List.append(ds.getPropertyValue('INDEX2'))
-    return index1List, index2List  
-
-def searchDataSetsofSample(transaction, sample, index1, index2, DATA_SET_TYPE):
-    sc = SearchCriteria()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sample));
-    search_service = transaction.getSearchService()
-    foundSample = search_service.searchForSamples(sc)
-
-    dataSetSc = SearchCriteria()
-    # set the Search Criteria to an OR condition, default is AND
-    #dataSetSc.setOperator(SearchCriteria.SearchOperator.MATCH_ANY_CLAUSES)
-    dataSetSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, DATA_SET_TYPE))
-    dataSetSc.addMatchClause(SearchCriteria.MatchClause.createPropertyMatch("BARCODE", index1 ))
-    dataSetSc.addMatchClause(SearchCriteria.MatchClause.createPropertyMatch("INDEX2", index2))
-    dataSetSc.addSubCriteria(SearchSubCriteria.createSampleCriteria(sc))
-    foundDataSets = search_service.searchForDataSets(dataSetSc)
-    print "foundDataSets.size() "+ str(foundDataSets.size())
-    for ds in foundDataSets:
-      print "Index1 for found Data Set" + ds.getDataSetCode() + " " + ds.getPropertyValue('BARCODE')
-      print "Index2 for found Data Set" + ds.getDataSetCode() + " " + ds.getPropertyValue('INDEX2')
-      
-    return foundDataSets
-
-def sampleSearch(transaction, code=''):
-    sc = SearchCriteria()
-    numberOfLanes = 0
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, code));
-    search_service = transaction.getSearchService()
-    foundSample = search_service.searchForSamples(sc)
-    if foundSample.size() > 0:
-      # Search for contained samples
-      sampleSc = SearchCriteria()
-      sampleSc.addSubCriteria(SearchSubCriteria.createSampleContainerCriteria(sc))
-      foundContainedSamples = search_service.searchForSamples(sampleSc)
-      numberOfLanes = foundContainedSamples.size()
-    return foundSample, foundContainedSamples, numberOfLanes
-
-# -----------------------------------------------------------------------------
-
-def process(transaction):
-  '''
-  Main
-  '''
-
-  FASTQ_DATA_SET_TYPE='FASTQ_GZ'
-  DEMUX_FILE='Flowcell_demux_summary.xml'
-  NO_INDEX='NOINDEX'
-  UNDETERMINED='UNDETERMINED'
-
-  incomingPath = transaction.getIncoming().getPath()
-  name, laneNumber = transaction.getIncoming().getName().split('-')
-
-  print('\n'+time.ctime())
-
-  fcPropertiesDict, fcPropertyTypes = getFlowCellMetaData(transaction, name)
-  print fcPropertiesDict
-  print fcPropertyTypes
-
-  search_service = transaction.getSearchService()
-
-  FileGenerator= locate(DEMUX_FILE, incomingPath)
-  DEMULTIPLEX_XML = FileGenerator.next()
-
-  sampleList = xml2Memory(DEMULTIPLEX_XML)    
-
-  sa = sample()
-  sampleDict = {}
-  print ("Length List samples x tiles x surface: " + str(len(sampleList)))
-
-  # key = sample name, value = sample()  
-  for element in range(0, len(sampleList)):
-    sa = sampleList[element]
-    # Check if new sample 
-    if (sa.Sample is not sampleList[element - 1].Sample):
-      sampleName = sa.Sample.values()[0]
-      sampleDict[sampleName] = [sa]
-      print(sampleName)
-    else:
-      try:
-        sampleDict[sampleName].append(sa)
-      except:
-        sampleName = sa.Sample.values()[0]
-        sampleDict[sampleName] = [sa]
-
-  stat = [calculateStatistics(sampleDict[mysample]) for mysample in sampleDict]
-  
-  # calculate the relative amount of reads per index
-  laneDict = rawReadSumPerSamples(stat)
-  sumRawReadsDict = createSumRawReadsPerLane(laneDict)
-  relRawReadsDict = createPercentagePerLane(laneDict, sumRawReadsDict)
-
-  # set the values in the object
-  for mye in stat:
-    mye.rawPercentageReadsPerLane = relRawReadsDict[mye.sampleName]
-   
-  flowcell, lanes, numberOfLanes  = sampleSearch(transaction, name)
-
-  index1Length = fcPropertiesDict['INDEXREAD']
-  index2Length = fcPropertiesDict['INDEXREAD2']
-
-  full_lane_statistics = lane_statistics()
-  complete_lane_statistic = full_lane_statistics.caluclate_complete_lane_statistic(stat)
-  
-  for lane in lanes:
-      if laneNumber == lane.getSampleIdentifier().split(":")[-1]:
-            mutable_lane = transaction.getSampleForUpdate(lane.getSampleIdentifier())
-            print("Setting Complete Lanes Statistics For: " + lane.getSampleIdentifier())
-            break
-      
-  mutable_lane.setPropertyValue("YIELD_MBASES", str(complete_lane_statistic.pfYieldSum))
-  mutable_lane.setPropertyValue('RAW_YIELD_MBASES', str(complete_lane_statistic.rawYieldSum))
-  mutable_lane.setPropertyValue('PERCENTAGE_PASSED_FILTERING',str(complete_lane_statistic.pfPercentage))
-  mutable_lane.setPropertyValue('PF_READS_SUM',str(complete_lane_statistic.pfReadsSum))
-  mutable_lane.setPropertyValue('RAW_READS_SUM',str(complete_lane_statistic.rawReadsSum))
-  mutable_lane.setPropertyValue('PFYIELDQ30PERCENTAGE', str(complete_lane_statistic.pfYieldQ30Percentage))
-  mutable_lane.setPropertyValue('PFMEANQUALITYSCORE', str(complete_lane_statistic.pfmeanQualityScore))
-  mutable_lane.setPropertyValue('CLUSTERS_PF_WITHOUT_NOINDEX', str(complete_lane_statistic.pfReadsSumWithoutUndetermined))
-  
-  for mystat in stat:
-    laneCode = flowcell[0].getCode() + ":" + mystat.lane
-    searchIndex1 = mystat.index1.upper()
-    searchIndex2 = mystat.index2.upper()
-    print '\n'
-    print mystat
-    
-    index1List, index2List = getIndexesofDataSetsofSample(transaction, laneCode, FASTQ_DATA_SET_TYPE)
-    print "Searching for "+ searchIndex1 + " in " + str(index1List)
-    print "Searching for "+ searchIndex2 + " in " + str(index2List)
-   
-    if searchIndex1 not in (NO_INDEX): 
-      if searchIndex1 not in (UNDETERMINED):
-        if index1Length > 7:
-          searchIndex1 = [ index1 for index1 in index1List if searchIndex1 in index1]
-        else:
-          searchIndex1 = [ index1 for index1 in index1List if searchIndex1 in index1[:-1]]
-        try:
-          if len(searchIndex1) > 1:
-            print("AMBIGIOUS INDEX FOUND!")
-            print(searchIndex1)
-            if searchIndex1[0].startswith(mystat.index1.upper()):
-              searchIndex1 = searchIndex1[0]
-            else:
-              searchIndex1 = searchIndex1[1]
-          else:
-            searchIndex1 = searchIndex1[0]
-
-        except:
-          searchIndex1 = 'MISSING'
-      else:
-        searchIndex1 = NO_INDEX
-    if searchIndex2 not in (NO_INDEX):
-      if searchIndex2 not in (UNDETERMINED):
-        if index2Length > 7:
-          searchIndex2 = [ index2 for index2 in index2List if searchIndex2 in index2]
-        else:
-          searchIndex2 = [ index2 for index2 in index2List if searchIndex2 in index2[:-1]]
-        try:
-          searchIndex2 = searchIndex2[0]
-        except:
-          searchIndex1 = 'MISSING'
-      else:
-        searchIndex2 = NO_INDEX
-    
-    print "searchIndex1 " + str(searchIndex1)
-    print "searchIndex2 " + str(searchIndex2)
-
-    # Search for a data set with those two indices
-    DataSet = searchDataSetsofSample(transaction, laneCode, searchIndex1, searchIndex2, FASTQ_DATA_SET_TYPE)
-    try:
-      assert DataSet.size() == 1
-    except AssertionError:
-      print (str(DataSet.size()) + ' data sets found which match the criterias: '+ 
-	      str(laneCode), searchIndex1, searchIndex2)
-      continue
-
-    sa = transaction.getDataSetForUpdate(DataSet[0].getDataSetCode())
-    sa.setPropertyValue('YIELD_MBASES', str(mystat.pfYieldSum))
-    sa.setPropertyValue('RAW_YIELD_MBASES', str(mystat.rawYieldSum))
-    sa.setPropertyValue('PERCENTAGE_PASSED_FILTERING',str(mystat.pfPercentage))
-    sa.setPropertyValue('PF_READS_SUM',str(mystat.pfReadsSum))
-    sa.setPropertyValue('RAW_READS_SUM',str(mystat.rawReadsSum))
-    sa.setPropertyValue('PERCENTAGE_RAW_CLUSTERS_PER_LANE', str(mystat.rawPercentageReadsPerLane))
-    sa.setPropertyValue('PFYIELDQ30PERCENTAGE', str(mystat.pfYieldQ30Percentage))
-    sa.setPropertyValue('PFMEANQUALITYSCORE', str(mystat.pfmeanQualityScore))
-
-    print "Modified data sets properties of: " + DataSet[0].getDataSetCode()
-
-  print "DONE"
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-rta-timestamp/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-rta-timestamp/plugin.properties
deleted file mode 100644
index 2c8f40225a2..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-rta-timestamp/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/read-rta-timestamp
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = read-rta-timestamp.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-jython-version=2.7
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-rta-timestamp/read-rta-timestamp.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-rta-timestamp/read-rta-timestamp.py
deleted file mode 100644
index c701f27f3d6..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/read-rta-timestamp/read-rta-timestamp.py
+++ /dev/null
@@ -1,49 +0,0 @@
-import os
-import shutil
-from time import *
-from datetime import *
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-MarkerGAComplete = 'RTAComplete.txt'  
-MarkerHiSeqComplete = 'RTAComplete.txt'
-MarkerNextSeqComplete = 'RTAComplete.txt'
-
-def createOpenbisTimeStamp(file):
-  '''
-  Creates a openBIS compatible time stamp of a file time stamp
-  '''
-  mtime = os.path.getmtime(file)
-  lt = localtime(mtime)
-  tz = localtime().tm_hour - gmtime().tm_hour
-  return (strftime("%Y-%m-%d %H:%M:%S GMT" + "%+.2d" % tz + ":00", lt))
-
-# -----------------------------------------------------------------------------
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getAbsolutePath()
-  # Get the incoming name 
-  name = transaction.getIncoming().getName()
-
-  split=name.split("_")
-  if (len(split) == 4):
-    if (split[1].startswith("NS")):
-      Markerfile = incomingPath + "/" + MarkerNextSeqComplete
-      name = split[-1][1:]
-    else:
-      IS_HISEQ_RUN=True
-      Markerfile = incomingPath + "/" + MarkerHiSeqComplete
-  if (len(split) == 2):
-    Markerfile = incomingPath + "/" + MarkerGAComplete 
-
-  # Search for the sample and check if there is already sample with this name
-  search_service = transaction.getSearchService()
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, name));
-  foundSamples = search_service.searchForSamples(sc)
-
-  if foundSamples.size() > 0:
-      sa = transaction.getSampleForUpdate(foundSamples[0].getSampleIdentifier())
-      sa.setPropertyValue("SEQUENCER_FINISHED", createOpenbisTimeStamp(Markerfile))
-
-  shutil.rmtree(incomingPath)
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-basecall-stats/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-basecall-stats/plugin.properties
deleted file mode 100644
index d6e67945db5..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-basecall-stats/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-basecall-stats
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-basecall-stats.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-basecall-stats/register-basecall-stats.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-basecall-stats/register-basecall-stats.py
deleted file mode 100644
index 34ff5e55af1..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-basecall-stats/register-basecall-stats.py
+++ /dev/null
@@ -1,51 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-
-@author:
-Manuel Kohler
-'''
-
-import os
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getPath()
-  runFolder = transaction.getIncoming().getName()
-  flowCellId = runFolder.split("_")[-1][1:]
-  
-  # Create a data set and set type
-  dataSet = transaction.createNewDataSet("NEXTSEQ_BASECALL_STATS")
-  dataSet.setMeasuredData(False)
-
-  # Get the search service
-  search_service = transaction.getSearchService()
-   
-  # Add the incoming file into the data set
-  transaction.moveFile(incomingPath, dataSet)
-    
-  # Search for the sample
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCellId))
-  foundSamples = search_service.searchForSamples(sc)
-
-  if foundSamples.size() > 0:
-    dataSet.setSample(foundSamples[0])
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bee/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bee/plugin.properties
deleted file mode 100644
index 2ee11974590..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bee/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${root}/dss/register-bee
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-bee.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bee/register-bee.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bee/register-bee.py
deleted file mode 100644
index 65def2a0afb..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bee/register-bee.py
+++ /dev/null
@@ -1,64 +0,0 @@
-from __future__ import with_statement  
-import os
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.common.mail import EMailAddress
-
-def process (transaction):
-
-
-    DATA_SET_TYPE_ALIGNMENT = "ALIGNMENT"
-    ETHZ_DOMAIN = "@ethz.ch"
-    METADATA_FILE='metadata.properties'
-
-    def searchDs(transaction, dscode):
-        # search for the data set
-        search_service = transaction.getSearchService();
-        sc = SearchCriteria();
-        sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, dscode));
-        myds = search_service.searchForDataSets(sc);
-        assert (myds.size() == 1);
-        return myds;
-
-    # Search for parent data set of the same sample
-    #dataSetSc = SearchCriteria()
-    #dataSetSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, 'FASTQ_GZ'))
-    #dataSetSc.addSubCriteria(SearchSubCriteria.createSampleCriteria(sc))
-    #foundDataSets = search_service.searchForDataSets(dataSetSc)
-    #if foundDataSets.size() > 0:
-    #  dataSet.setParentDatasets([ds.getDataSetCode() for ds in foundDataSets])
-
-    path = transaction.getIncoming().getAbsolutePath()
-
-    myvars = {}
-    with open(os.path.join(path, METADATA_FILE)) as myfile:
-        for line in myfile:
-            name, var = line.partition("=")[::2]
-            myvars[name.strip()] = var
-    print myvars
-    userId = myvars['analysis_procedure'].split()[-1][1:-1]
-    dsCode = myvars['storage_provider.parent.dataset.id']
-    print userId
-    print dsCode
-
-    if (not "@" in userId):
-	userId = userId + ETHZ_DOMAIN;
-
-    userMail = EMailAddress(userId)
-
-    existingDs = searchDs(transaction, dsCode);
-    print existingDs
-    firstDs = existingDs.get(0);
-
-    newDataSet = transaction.createNewDataSet(DATA_SET_TYPE_ALIGNMENT);
-    experiment = firstDs.getExperiment();
-
-    newDataSet.setParentDatasets([ds.getDataSetCode() for ds in existingDs])
-    newDataSet.setExperiment(experiment);
-    transaction.moveFile(transaction.getIncoming().getAbsolutePath(), newDataSet);
-
-    replyTo = EMailAddress("no-reply@bsse.ethz.ch")
-    fromAddress = replyTo
-
-    # transaction.getGlobalState().getMailClient().sendEmailMessage(subject, content, replyToOrNull, fromOrNull, recipients)
-    transaction.getGlobalState().getMailClient().sendEmailMessage("openBIS Bee cluster job finished",
-	    "Result data for " + dsCode + " got registered in openBIS.", replyTo, fromAddress, userMail);
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bigwig/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bigwig/plugin.properties
deleted file mode 100644
index 26d6bb1da8d..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bigwig/plugin.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-# 
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-bigwig/
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-bigwig.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bigwig/register-bigwig.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bigwig/register-bigwig.py
deleted file mode 100755
index 31a0863709f..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bigwig/register-bigwig.py
+++ /dev/null
@@ -1,140 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for HiSeq runs: 110715_SN792_0054_BC035RACXX
-expected incoming Name for GAII runs: 110812_6353WAAXX
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import fnmatch
-import re
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-FOLDER='/links/shared/dsu/dss/register-bigwig/'
-BIGWIGINFO='/links/application/dsu/bigWig/bigWigInfo '
-BW_PATTERN='*.bw'
-
-matches = []
-
-# -----------------------------------------------------------------------------
-
-def listSearch (myList, searchString):
-  '''
-  Searches for a given String in a list.
-  Only lines matching  the start of a line a considerd as a match
-  '''
-  matches = []
-  for i in range (0, len(myList)):
-    if(re.match(searchString, myList[i])):
-      matches.append(myList[i])
-  return (matches)
-
-# -----------------------------------------------------------------------------
-
-def translateBoolean (value):
-  if (value.lower() == 'yes') | (value.lower() =='y'):
-    return True
-  else:
-    return False
-
-def sanitizeInt (intNumber):
-   return intNumber.replace(',','')
-
-# -----------------------------------------------------------------------------
-
-def convertListToDict(prop):
-  d={}
-  for i in range(0,len(prop)-1):
-    lineSplit = prop[i].split(':')
-    d[lineSplit[0].strip()] = lineSplit[1].strip()
-  return(d)
-
-# -----------------------------------------------------------------------------
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getPath()
-  name = transaction.getIncoming().getName()
-
-  # Create a data set and set type
-  dataSet = transaction.createNewDataSet("BIGWIGGLE")
-  dataSet.setMeasuredData(False)
-
-  # expected: 
-  # Project_110907_SN792_0059_AC012FACXX_3/BSSE-DSU-1662_CGATGTA_L003_R1_001_sorted.bw
-  split=name.split('_')
-  if (len(split) == 6):
-    incoming_sample=split[1]+ '_'+ split[2] + '_' + split[3] + '_' + split[4]+ ':' + split[-1]
-  if (len(split) ==4):
-    incoming_sample=split[1]+ '_'+ split[2] + ':' + split[-1]
-
-  # Looking for BWs:
-  for root, dirnames, filenames in os.walk(FOLDER + name):
-    for filename in fnmatch.filter(filenames, BW_PATTERN):
-	matches.append(os.path.join(root, filename))
-
-  # Extract values from a samtools view and set the results as DataSet properties 
-  # Command: samtools view -H ETHZ_BSSE_110429_63558AAXX_1_sorted.bam
-
-  arguments = BIGWIGINFO + matches[0]
-  #print('Arguments: '+ arguments)
-  cmdResult=os.popen(arguments).read()
-
-  properties=cmdResult.split("\n")
-  dictProp = convertListToDict(properties)
-  #print(dictProp)
-
-  dataSet.setPropertyValue("VERSION", dictProp['version'])
-  dataSet.setPropertyValue("ISCOMPRESSED", str(translateBoolean(dictProp['isCompressed'])))
-  dataSet.setPropertyValue("ISSWAPPED", dictProp['isSwapped'])
-  dataSet.setPropertyValue("PRIMARYDATASIZE", sanitizeInt(dictProp['primaryDataSize']))
-  dataSet.setPropertyValue("PRIMARYINDEXSIZE", sanitizeInt(dictProp['primaryIndexSize']))
-  dataSet.setPropertyValue("ZOOMLEVELS", dictProp['zoomLevels'])
-  dataSet.setPropertyValue("CHROMCOUNT", dictProp['chromCount'])
-  dataSet.setPropertyValue("BASESCOVERED", sanitizeInt(dictProp['basesCovered']))
-  dataSet.setPropertyValue("MEAN", dictProp['mean'])
-  dataSet.setPropertyValue("MIN", dictProp['min'])
-  dataSet.setPropertyValue("MAX", dictProp['max'])
-  dataSet.setPropertyValue("STD", dictProp['std'])
-
-  # Add the incoming file into the data set
-  transaction.moveFile(incomingPath, dataSet)
-
-  # Get the search service
-  search_service = transaction.getSearchService()
-
-  # Search for the sample
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, incoming_sample));
-  foundSamples = search_service.searchForSamples(sc)
-
-  if foundSamples.size() > 0:
-    dataSet.setSample(foundSamples[0])
-    
-    # Search for parent data set of the same sample
-    dataSetSc = SearchCriteria()
-    dataSetSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, 'FASTQ_GZ'))
-    dataSetSc.addSubCriteria(SearchSubCriteria.createSampleCriteria(sc))
-    foundDataSets = search_service.searchForDataSets(dataSetSc)
-    if foundDataSets.size() > 0:
-      dataSet.setParentDatasets([ds.getDataSetCode() for ds in foundDataSets])
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bowtie/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bowtie/plugin.properties
deleted file mode 100644
index f0fac2c142a..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bowtie/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-bowtie
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-bowtie.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bowtie/register-bowtie.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bowtie/register-bowtie.py
deleted file mode 100644
index 0e8f218b29b..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-bowtie/register-bowtie.py
+++ /dev/null
@@ -1,40 +0,0 @@
-'''
-This is handling bowtie-BAM files and extracts some properties from the BAM header and
-the samtools flagstat command. The results are formatted and attached  as a property
-to the openBIS DataSet.
-Prerequisites are the DataSetType: ALIGNMENT and
-the following properties assigned to the DataSetType mentioned above:
-ALIGNMENT_SOFTWARE, ISSUED_COMMAND, SAMTOOLS_FLAGSTAT,
-TOTAL_READS, MAPPED_READS
-
-Obviously you need a working samtools binary
-
-Uses 'flagstat' and 'view -H'
-'''
-
-import os
-import fnmatch
-import re
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-FOLDER='/links/shared/dsu/dss/register-bowtie/'
-SAMTOOLS='/links/application/dsu/samtools/samtools'
-BAM_PATTERN='*.bam'
-
-matches = []
-searchStrings = ['@PG']
-programList = []
-
-# -----------------------------------------------------------------------------
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getName()
-
-  dataSet = transaction.createNewDataSet("ALIGNMENT")
-  dataSet.setMeasuredData(False)
-
-  matches.append(incomingPath)
-  # Add the incoming file into the data set
-  transaction.moveFile(incomingPath, dataSet)
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-cluster-alignment-java/lib/AlignmentJavaDataSetRegistrationDropboxV2.jar b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-cluster-alignment-java/lib/AlignmentJavaDataSetRegistrationDropboxV2.jar
deleted file mode 100644
index 6b0737361eb622ffefb0267e2fa778eadb2bea9d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3750
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
Br8xiq

diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-cluster-alignment-java/lib/alignment.jar.sv b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-cluster-alignment-java/lib/alignment.jar.sv
deleted file mode 100644
index 118b26512a0893928a450b3b6e90e475ad11ff84..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2103
zcmcJQcTf}97REy$AX24>(xiz52@#^86eW~U0-7a3h%S*9F-r+4G!<MB6@>*vAPA`R
zPN*V;fOJHWCJQPpp=>BZ1i?@QAHJFQ*7s)KpYJ<!=H5H!%=gXx>xV+}3&;TW?G-q{
z(E{+3WB>vH2P+I5VtXC|b%39@MOdLRx(<ll*8sp5hn_d~NQmx$7!so0+tXL=cwz{~
znw^>j0#HbyeO0%B%L;o|hxZ!w?*R4x3UJ+<dR~K4LMc?dA0-6pNuYQ^@l;<5o*aZH
zL&<n=0)<L;rxM9f_W%MkNFNIKC3yS$;r*$0?m_OB?o@X)p6d9oH3HG!l1vQnAckDj
z*Y)&ur%*ba3C_~qGT{@Fhinjd5)v6)e7_J~86#DLFzcvFRw?w$Yx9a4@X~zp7&X_#
z-NubR4gWNv%jtLQC2SWR*%I0EF$tTnJ%P%0iY<7m{y3D=*w@Ib=QZ*gZ@GS3Hv}kc
zAmBD`W2wW;Gku1XiPEbsI0S5`)SCgzFRA}4X?ByoY)sGRK>YG8koYpNvG>PaQW%0e
z5N7JPrH&lc=~^Z|`IZYa9?nwHIT7>+>k+wS<AQGl#I$H&$dVCE^;jDU;93^H<j%3o
zxU51m%J(yNKG^Z6gM&>zAJDcDf#Y#Yn~bIS`45rUc)^IfczuW;!@49_yu535t-JK`
z0m%Z;LPKmR{_-w7A}z$jUS({_t7o75Kxw9}n*|mdoT8$Asp1zmO6Qu+NKbBx+q<S^
zIVNC+%3lY!68Pmc?{e)KmsbvH%Y~TZOTnV1#`z5?H=z)E4wDpa)<>IIWB_y23gIOW
z(ktTbZoWGxo3Zc`zM>Jc{<Nr}lPdA2%+yF>K{@biVacd++gt0Y^0>>{b(qg(rNbA%
zY5fWL^|^ybg>UU1F`$+W&(ApA7+kH1<q**MevFi?(04{{N3?2vC#im>4P%i_ztUN6
zP?{2&IoH|@K*1uSP9KzHM-Rwd%h2DUO4gsO)VVz*)+s&0>DtfCjZ^{_y#ZbXq<_f4
z-?Tp7N^Llp1u=~jxTH`ak`_6h{GjVOuvTpD>}1vT78v?0zY+GcgDlT2-sF{qX(R9$
zw686YV2h}b<ALj(-7<^iF=O#U0tWK*qHTOwi+DuGe(!9fU5t^ulT&gMd$K%R+Jv*X
zZh!TIVZ=ji;}rW?D-u9L+l_Dz*I1o7CFuxs=x_{eCn4`8o%&)a`>Ttqbj}>2JW`ol
zyBhOA{q$=SUTHy3=E@p)PWt_&xaqv*p+!cVLW^F_e#;%Q@PUxJg`+8Nk53==%|2OY
zGZ^&(ld@HUO%gDFs@m@g8tnG)*KLzDpfB5`JAYlQ|K`{?Obp>jqE_jismc(AvT#_^
zv0SkNOh%`Ak4VtNv!elIlPwK3oSo&HfjAdzXvmSas7M%aVKq=T-lE`%jPel03qPI6
zTD6m6|M3b%Qt+qAgQ*7{tt;Eb(k`Uf<0IS4i$z_Nr(3!!F&S;4%JE>~m*9yPV~nhB
zN<O=~VU~_*ACY2eRRv&XRs^^~m~rFu0w(irw++slsCzs4krf{$H!mXrJn|>U>mq`c
z?UV+~nX)}xyneF4%YUVK(c^pvIwVb_QVW@Q5uJ2esiQgs*FpjE${~u{xaJr*d+pvl
zP3aIDbf^00F4yxI`U{p>Iwi}r6KqTt#TE6_lbhR9dp?giF;#6pnkAktJ&g_ObRU0~
zLfB4u@M1-r*nP&kGpQaLkZ;bQpSpZpF+DRWNGR{5N3UaI%qm&AlBV=H%*W{!`o=KX
z^op9eQ+*Ifkj8J|xDzsP{Tz+f-5R@8p0F|Yu&`$0d73wtpiU@Y$>-HAH!TzqUI=(P
ze5#%|KcSkI3u8?ER$Vz5CK6nsIUI0ag2XJbQkqO+l{Jw{6qPm=5vG{ZY1;Zt<Mu0?
z<we*Y&o+=2n=47*6iyFkd5G11CPqy)mnq`7?ZW`k=#^U#^99x326BQ<7D18^w-on`
z^hKftcONCEGa+wN(jiuNhs%PM7zU3Y_|ymkY^Gmd+_+H}#urSQbFrKn>bu4j?P@*e
z!RfuyuNNQI;K2q_@APB0)eT&m|8iLZidVD4W9HQ2NZ(f`J)chsE!&Cs@0Wb>DE9OY
zi}}0K`@2CVuPWh}0xJqDy^?QU-?tNycTcaGsA{LF7p?knI9gnE+FgyP-n(yb?P|>o
zmNYBitYNXJs{6WOiVq}w$M1HVaAyqW{%AC&&y+JiYa0=2VpNe6#xc<p8cko6OUUwJ
zyPgtB6=zF$8T;hjW?}<}A+32g!V9F(Gne46d*ixV_3(UsQO)-lAf}A@w$x{z#9~9A
z6FBktWfkeK`Zc`l`;S`QzPBcSrL^0w66MN&7n)muXK27Vsp^T@53}oOT1Hp0wSY=o
zL77vPvoEcUev3AY<*o36KgKEFjE=X7Zr?rhEPxX(wE;e>o|jnrmZot5Rkg812^V3<
zsDPW=LAwTD2vB~W>`X4LdE}nQ_kZG!A9J_WOAr7^l=^`?KA;TXZ=(K;!XHHaPyH{x
m{_OGtn?EP~z~<j_-@E=_A&NqR_Pz!H0QYKO??egxc>M$0vcSOr

diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-cluster-alignment-java/lib/alignment.jar.sv2 b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-cluster-alignment-java/lib/alignment.jar.sv2
deleted file mode 100644
index 118b26512a0893928a450b3b6e90e475ad11ff84..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2103
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

diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-cluster-alignment-java/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-cluster-alignment-java/plugin.properties
deleted file mode 100644
index 35b2b5253d0..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-cluster-alignment-java/plugin.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-incoming-dir = ${root}/dss/register-cluster-alignment-java
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JavaTopLevelDataSetHandlerV2
-program-class = ch.systemsx.cisd.etlserver.registrator.api.v2.AlignmentJavaDataSetRegistrationDropboxV2
-#program-class = AlignmentJavaDataSetRegistrationDropboxV2
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-incoming-dir-create = true
-incoming-data-completeness-condition = auto-detection
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-dummy/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-dummy/plugin.properties
deleted file mode 100644
index ad9cc236b38..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-dummy/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-dummy
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-dummy.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-dummy/register-dummy.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-dummy/register-dummy.py
deleted file mode 100644
index 01a2eec1e4f..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-dummy/register-dummy.py
+++ /dev/null
@@ -1,56 +0,0 @@
-'''
-@copyright:
-2014 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import shutil
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-
-def splitFolderName (folderName):
-    runFolder, lane = folderName.rsplit("_", 1)
-    return runFolder + ":" + lane
-
-def searchSample (transaction, sampleCode):
-    # Get the search service
-    search_service = transaction.getSearchService()
-
-    print("Searching for " + sampleCode)
-    # Search for the sample
-    sc = SearchCriteria()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleCode))
-    foundSamples = search_service.searchForSamples(sc)
-    assert(len(foundSamples), 1)
-    return foundSamples[0]
-
-def process(transaction):
-
-    # expected incoming folder names:
-    # 120917_SN792_0158_AC125KACXX_4
-
-    incomingFolder = transaction.getIncoming().getName()
-    flowLaneName = splitFolderName(incomingFolder) 
-    flowLane = searchSample(transaction, flowLaneName)
-
-    dataSet = transaction.createNewDataSet("ALIGNMENT")
-    dataSet.setMeasuredData(False)
-    dataSet.setSample(flowLane)
-    transaction.moveFile(transaction.getIncoming().getPath(), dataSet)
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-fastqc/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-fastqc/plugin.properties
deleted file mode 100644
index 353a2b7aa8a..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-fastqc/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-fastqc
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-fastqc.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-fastqc/register-fastqc.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-fastqc/register-fastqc.py
deleted file mode 100644
index d538798b932..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-fastqc/register-fastqc.py
+++ /dev/null
@@ -1,82 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@note
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-Expects as incoming folder: Project_120427_SN792_0110_AD0YCGACXX_1
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import shutil
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-def renameFiles(dir, flowcellName):
-  print dir 
-  print flowcellName
-  for root, dirs, files in os.walk(dir):
-    for file in files:
-      print root + file
-      os.rename(root + '/' + file, root + "/" + flowcellName + "_" + file)
-
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getPath()
-  incomingFolder = transaction.getIncoming().getName()
-
-  if (len(incomingFolder.split("_")) == 2):
-    flowCell, flowLane = incomingFolder.split("_")
-  else:
-    fcAndLane = incomingFolder.split("_",1)[-1]
-    flowCell, flowLane = fcAndLane.rsplit("_",1)
-
-    nameLength = len(flowCell.split('_'))
-    if nameLength == 5:
-      flowCell = '-'.join(flowCell.rsplit('_',1))    
-
-  print flowCell
-  print flowLane
-
-  # Get the search service
-  search_service = transaction.getSearchService()
-
-  # Search for the sample
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCell))
-  foundSamples = search_service.searchForSamples(sc)
-
-  if foundSamples.size() > 0:
-
-    # Search for another data set of the same sample and make it a child of it 
-    sampleSc = SearchCriteria()
-    sampleSc.addSubCriteria(SearchSubCriteria.createSampleContainerCriteria(sc))
-    foundContainedSamples = search_service.searchForSamples(sampleSc)
-    if foundContainedSamples.size() > 0:
-      dataSet = transaction.createNewDataSet("FASTQC")
-      dataSet.setMeasuredData(False)
-      for indx in range(0, len(foundContainedSamples)):
-	lane = foundContainedSamples[indx].getCode().split(':')[-1]
-	print lane
-	if (flowLane == lane):
-	  dataSet.setSample(foundContainedSamples[indx])
-	  # Add the incoming file into the data set
-	  transaction.moveFile(incomingPath + "/fastqc/", dataSet)
-	  break
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-hiseq/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-hiseq/plugin.properties
deleted file mode 100644
index 8730e628162..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-hiseq/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-flowcell-hiseq
-#incoming-dir = /links/sonas/cisd/store/incoming-flowCell
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-flowcell-hiseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-hiseq/register-flowcell-hiseq.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-hiseq/register-flowcell-hiseq.py
deleted file mode 100644
index 62ab3d79aa3..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-hiseq/register-flowcell-hiseq.py
+++ /dev/null
@@ -1,61 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Registers an incoming directory as a data set in openBIS. The name of the directory is used to
-search for the matching sample. 
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for HiSeq runs: 110715_SN792_0054_BC035RACXX
-expected incoming Name for GAII runs: 110812_6353WAAXX
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import subprocess
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-def process(transaction):
-
-    args = ['/links/application/dsu/export_QGF_master_data/export_QGF_master_data.sh']
-
-    try:
-        p = subprocess.Popen(args, stdout=subprocess.PIPE)
-        print(p.communicate()[0])
-    except:
-        print("Could not run: " + str(args))
-
-    incomingPath = transaction.getIncoming().getPath()
-    name = transaction.getIncoming().getName()
-
-    split=name.split("_")
-    if (len(split) == 4):
-        dataSet = transaction.createNewDataSet("ILLUMINA_HISEQ_OUTPUT")
-
-    dataSet.setMeasuredData(False)
-  
-    search_service = transaction.getSearchService()  
-    sc = SearchCriteria()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, name));
-    foundSamples = search_service.searchForSamples(sc)
-
-    if foundSamples.size() > 0:
-        transaction.moveFile(incomingPath, dataSet)
-        dataSet.setSample(foundSamples[0])
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-miseq/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-miseq/plugin.properties
deleted file mode 100644
index 7f274a70db5..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-miseq/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-flowcell-miseq
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-flowcell-miseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-miseq/register-flowcell-miseq.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-miseq/register-flowcell-miseq.py
deleted file mode 100644
index c9321e6c87e..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-miseq/register-flowcell-miseq.py
+++ /dev/null
@@ -1,60 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Registers an incoming directory as a data set in openBIS. The name of the directory is used to
-search for the matching sample. 
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for MiSeq runs: 120726_M00721_0011_A000000000-A1FVF
-
-@author:
-Manuel Kohler
-'''
-
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-DATASET_TYPE_MISEQ = "ILLUMINA_MISEQ_OUTPUT"
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getAbsolutePath()
-  flowCellId = transaction.getIncoming().getName()
-  dataSet = transaction.createNewDataSet(DATASET_TYPE_MISEQ)
-
-  # Create a data set and set type
-  dataSet.setMeasuredData(False)
-  
-  # Get the search service
-  search_service = transaction.getSearchService()
- 
-  # Search for the sample
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCellId));
-  foundFlowCells = search_service.searchForSamples(sc)
-
-  # Make sure there is only one Flow cell registered with this Flow Cell Name / ID
-  try:
-    assert foundFlowCells.size() == 1
-  except AssertionError:
-    print (str(foundFlowCells.size()) + ' flow cells found which match the criterias: '+ flowCellId)
-
-  print (foundFlowCells)
-  # Add the incoming file into the data set
-  transaction.moveFile(incomingPath, dataSet)
-  dataSet.setSample(foundFlowCells[0])
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-nextseq/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-nextseq/plugin.properties
deleted file mode 100644
index 29183e5d548..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-nextseq/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-flowcell-nextseq
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-flowcell-nextseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-nextseq/register-flowcell-nextseq.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-nextseq/register-flowcell-nextseq.py
deleted file mode 100644
index 8f70c8c817e..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell-nextseq/register-flowcell-nextseq.py
+++ /dev/null
@@ -1,62 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Registers an incoming directory as a data set in openBIS. The name of the directory is used to
-search for the matching sample. 
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for MiSeq runs: 120726_M00721_0011_A000000000-A1FVF
-
-@author:
-Manuel Kohler
-'''
-
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-DATASET_TYPE_MISEQ = "ILLUMINA_NEXTSEQ_OUTPUT"
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getAbsolutePath()
-  runFolder = transaction.getIncoming().getName()
-  flowCellId = runFolder.split("_")[-1][1:]
-  dataSet = transaction.createNewDataSet(DATASET_TYPE_MISEQ)
-
-  # Create a data set and set type
-  dataSet.setMeasuredData(False)
-  
-  # Get the search service
-  search_service = transaction.getSearchService()
- 
-  # Search for the sample
-  print("Searching for flowcell: " + flowCellId)
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCellId));
-  foundFlowCells = search_service.searchForSamples(sc)
-
-  # Make sure there is only one Flow cell registered with this Flow Cell Name / ID
-  try:
-    assert foundFlowCells.size() == 1
-  except AssertionError:
-    print (str(foundFlowCells.size()) + ' flow cells found which match the criterias: '+ flowCellId)
-
-  print (foundFlowCells)
-  # Add the incoming file into the data set
-  transaction.moveFile(incomingPath, dataSet)
-  dataSet.setSample(foundFlowCells[0])
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell/plugin.properties
deleted file mode 100644
index 82d34c7fd9f..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell/plugin.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-incoming-dir = ${incoming-root-dir}/register-flowcell
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-flowcell.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-jython-version=2.7
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell/register-flowcell.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell/register-flowcell.py
deleted file mode 100644
index 2f712bfd794..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowcell/register-flowcell.py
+++ /dev/null
@@ -1,106 +0,0 @@
-'''
-@copyright:
-2015 ETH Zuerich, SIS
-    
-@license: 
-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.
-
-@description:
-Registers an incoming directory as a data set in openBIS. The name of the directory is used to
-search for the matching sample. 
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-
-@author:
-Manuel Kohler
-'''
-
-import re
-import glob
-import os
-from itertools import islice
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-# The following module is located in the path defined in the datastore_server.conf
-# Look for: -Dpython.path}
-from gfb_utils import *
-
-ILLUMINA_HISEQ_OUTPUT_DS_TYPE = "ILLUMINA_HISEQ_OUTPUT"
-ILLUMINA_MISEQ_OUTPUT_DS_TYPE = "ILLUMINA_MISEQ_OUTPUT"
-ILLUMINA_NEXTSEQ_OUTPUT_DS_TYPE = "ILLUMINA_NEXTSEQ_OUTPUT"
-
-
-def get_bcl_version(file):
-    pattern = re.compile("bcl2fastq")
-    matching_line_list = []
-    bcl_version = "Not specified"
-    number_of_lines_to_read = 3
-
-    if file:
-        with open(file[0]) as nohup:
-            head = list(islice(nohup, number_of_lines_to_read))
-        for line in head:
-            if re.search(pattern, line):
-                matching_line_list.append(line)
-    else:
-        print("File " + str(file) + " not found!")
-
-    if matching_line_list:
-        bcl_version = matching_line_list[0].strip()
-    return bcl_version
-
-
-def process(transaction):
-    incoming = transaction.getIncoming()
-    incoming_path = incoming.getAbsolutePath()
-    run_id = incoming.getName()
-    model = get_model(run_id)
-    
-    if model in HISEQ_LIST:
-        DATASET_TYPE = ILLUMINA_HISEQ_OUTPUT_DS_TYPE
-    elif model in [Sequencers.NEXTSEQ_500]:
-        DATASET_TYPE = ILLUMINA_NEXTSEQ_OUTPUT_DS_TYPE
-    elif model in [Sequencers.MISEQ]:
-        DATASET_TYPE = ILLUMINA_MISEQ_OUTPUT_DS_TYPE
-    else:
-        print("Could set a data set type for flowcell data!")
-    
-    thread_property_dict = get_thread_properties(transaction)
-    absolutePath = os.path.dirname(os.path.realpath(thread_property_dict['script-path']))
-    print(os.path.basename(absolutePath) + ": Auto-detected Illumina model: " + model)
-    
-    run_date, sequencer_id, running_number, tray_and_fcId = run_id.split("_")
-    tray = tray_and_fcId[0]
-    if model in [Sequencers.MISEQ]:
-        fc_id = tray_and_fcId
-    else:
-        fc_id = tray_and_fcId[1:]
-
-    file = glob.glob(os.path.join(incoming_path, "nohup*"))
-    bcl_version = get_bcl_version(file)
-
-    found_flow_cell = search_unique_sample(transaction, fc_id)
-    
-    search_service = transaction.getSearchService()
-    get_flowcell_with_contained_samples = search_service.getSample(found_flow_cell[0].getSampleIdentifier())
-    flowlanes = get_flowcell_with_contained_samples.getContainedSamples()
-    
-    for lane in flowlanes:
-        mutable_lane = transaction.getSampleForUpdate(lane.getSampleIdentifier())
-        mutable_lane.setPropertyValue("BCL_VERSION", bcl_version)
-    
-    dataSet = transaction.createNewDataSet(DATASET_TYPE)
-    dataSet.setMeasuredData(False)
-    transaction.moveFile(incoming_path, dataSet)
-    dataSet.setSample(found_flow_cell[0])
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowlane/lib/crc32_v2.c b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowlane/lib/crc32_v2.c
deleted file mode 100644
index b38d22d40f6..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowlane/lib/crc32_v2.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/*----------------------------------------------------------------------------*\
- *  CRC-32 version 2.0.0 by Craig Bruce, 2006-04-29.
- *
- *  This program generates the CRC-32 values for the files named in the
- *  command-line arguments.  These are the same CRC-32 values used by GZIP,
- *  PKZIP, and ZMODEM.  The Crc32_ComputeBuf() can also be detached and
- *  used independently.
- *
- *  THIS PROGRAM IS PUBLIC-DOMAIN SOFTWARE.
- *
- *  Based on the byte-oriented implementation "File Verification Using CRC"
- *  by Mark R. Nelson in Dr. Dobb's Journal, May 1992, pp. 64-67.
- *
- *  v1.0.0: original release.
- *  v1.0.1: fixed printf formats.
- *  v1.0.2: fixed something else.
- *  v1.0.3: replaced CRC constant table by generator function.
- *  v1.0.4: reformatted code, made ANSI C.  1994-12-05.
- *  v2.0.0: rewrote to use memory buffer & static table, 2006-04-29.
-\*----------------------------------------------------------------------------*/
-
-#include <stdio.h>
-#include <stdlib.h>
-
-/*----------------------------------------------------------------------------*\
- *  Local functions
-\*----------------------------------------------------------------------------*/
-
-static int Crc32_ComputeFile( FILE *file, unsigned long *outCrc32 );
-
-static unsigned long Crc32_ComputeBuf( unsigned long inCrc32, const void *buf,
-                                       size_t bufLen );
-
-/*----------------------------------------------------------------------------*\
- *  NAME:
- *     main() - main function for CRC-32 generation
- *  DESCRIPTION:
- *     Computes the CRC-32 value for the set of files named in the command-
- *     line arguments.
- *  ARGUMENTS:
- *     argc - command-line-argument count
- *     argv - command-line-argument strings
- *  RETURNS:
- *     err - 0 on success or executes exit(1) on error
- *  ERRORS:
- *     - file errors
-\*----------------------------------------------------------------------------*/
-
-int main( int argc, const char *argv[] )
-{
-    FILE *file = NULL;
-    const char *filename;
-    unsigned long argIdx;
-    unsigned long crc32;
-    int err;
-
-    /** compute crcs **/
-    if (argc < 2) {
-        /** read from 'stdin' if no arguments given **/
-        err = Crc32_ComputeFile( stdin, &crc32 );
-        if (err == -1) goto ERR_EXIT;
-        printf("crc32 = 0x%08lX for (stdin)\n", crc32 );
-    } else {
-        /** report named files in sequence **/
-        for (argIdx=1; argIdx < argc; argIdx++) {
-            filename = argv[argIdx];
-            file = fopen( filename, "rb" );
-            if (file == NULL) {
-                fprintf( stderr, "error opening file \"%s\"!\n", filename );
-                goto ERR_EXIT;
-            }
-            err = Crc32_ComputeFile( file, &crc32 );
-            if (err == -1) goto ERR_EXIT;
-            /*printf("crc32 = 0x%08lX for \"%s\"\n", crc32, filename );*/
-            printf("%08lX", crc32);
-            err = fclose( file );
-            file = NULL;
-            if (err == EOF) {
-                fprintf( stderr, "error closing file \"%s\"!\n", filename );
-                goto ERR_EXIT;
-            }
-        }
-    }
-    return( 0 );
-
-    /** error exit **/
-ERR_EXIT:
-    if (file != NULL) fclose( file );
-    exit( 1 );
-}
-
-/*----------------------------------------------------------------------------*\
- *  NAME:
- *     Crc32_ComputeFile() - compute CRC-32 value for a file
- *  DESCRIPTION:
- *     Computes the CRC-32 value for an opened file.
- *  ARGUMENTS:
- *     file - file pointer
- *     outCrc32 - (out) result CRC-32 value
- *  RETURNS:
- *     err - 0 on success or -1 on error
- *  ERRORS:
- *     - file errors
-\*----------------------------------------------------------------------------*/
-
-static int Crc32_ComputeFile( FILE *file, unsigned long *outCrc32 )
-{
-#   define CRC_BUFFER_SIZE  8192
-    unsigned char buf[CRC_BUFFER_SIZE];
-    size_t bufLen;
-
-    /** accumulate crc32 from file **/
-    *outCrc32 = 0;
-    while (1) {
-        bufLen = fread( buf, 1, CRC_BUFFER_SIZE, file );
-        if (bufLen == 0) {
-            if (ferror(file)) {
-                fprintf( stderr, "error reading file\n" );
-                goto ERR_EXIT;
-            }
-            break;
-        }
-        *outCrc32 = Crc32_ComputeBuf( *outCrc32, buf, bufLen );
-    }
-    return( 0 );
-
-    /** error exit **/
-ERR_EXIT:
-    return( -1 );
-}
-
-/*----------------------------------------------------------------------------*\
- *  NAME:
- *     Crc32_ComputeBuf() - computes the CRC-32 value of a memory buffer
- *  DESCRIPTION:
- *     Computes or accumulates the CRC-32 value for a memory buffer.
- *     The 'inCrc32' gives a previously accumulated CRC-32 value to allow
- *     a CRC to be generated for multiple sequential buffer-fuls of data.
- *     The 'inCrc32' for the first buffer must be zero.
- *  ARGUMENTS:
- *     inCrc32 - accumulated CRC-32 value, must be 0 on first call
- *     buf     - buffer to compute CRC-32 value for
- *     bufLen  - number of bytes in buffer
- *  RETURNS:
- *     crc32 - computed CRC-32 value
- *  ERRORS:
- *     (no errors are possible)
-\*----------------------------------------------------------------------------*/
-
-static unsigned long Crc32_ComputeBuf( unsigned long inCrc32, const void *buf,
-                                       size_t bufLen )
-{
-    static const unsigned long crcTable[256] = {
-   0x00000000,0x77073096,0xEE0E612C,0x990951BA,0x076DC419,0x706AF48F,0xE963A535,
-   0x9E6495A3,0x0EDB8832,0x79DCB8A4,0xE0D5E91E,0x97D2D988,0x09B64C2B,0x7EB17CBD,
-   0xE7B82D07,0x90BF1D91,0x1DB71064,0x6AB020F2,0xF3B97148,0x84BE41DE,0x1ADAD47D,
-   0x6DDDE4EB,0xF4D4B551,0x83D385C7,0x136C9856,0x646BA8C0,0xFD62F97A,0x8A65C9EC,
-   0x14015C4F,0x63066CD9,0xFA0F3D63,0x8D080DF5,0x3B6E20C8,0x4C69105E,0xD56041E4,
-   0xA2677172,0x3C03E4D1,0x4B04D447,0xD20D85FD,0xA50AB56B,0x35B5A8FA,0x42B2986C,
-   0xDBBBC9D6,0xACBCF940,0x32D86CE3,0x45DF5C75,0xDCD60DCF,0xABD13D59,0x26D930AC,
-   0x51DE003A,0xC8D75180,0xBFD06116,0x21B4F4B5,0x56B3C423,0xCFBA9599,0xB8BDA50F,
-   0x2802B89E,0x5F058808,0xC60CD9B2,0xB10BE924,0x2F6F7C87,0x58684C11,0xC1611DAB,
-   0xB6662D3D,0x76DC4190,0x01DB7106,0x98D220BC,0xEFD5102A,0x71B18589,0x06B6B51F,
-   0x9FBFE4A5,0xE8B8D433,0x7807C9A2,0x0F00F934,0x9609A88E,0xE10E9818,0x7F6A0DBB,
-   0x086D3D2D,0x91646C97,0xE6635C01,0x6B6B51F4,0x1C6C6162,0x856530D8,0xF262004E,
-   0x6C0695ED,0x1B01A57B,0x8208F4C1,0xF50FC457,0x65B0D9C6,0x12B7E950,0x8BBEB8EA,
-   0xFCB9887C,0x62DD1DDF,0x15DA2D49,0x8CD37CF3,0xFBD44C65,0x4DB26158,0x3AB551CE,
-   0xA3BC0074,0xD4BB30E2,0x4ADFA541,0x3DD895D7,0xA4D1C46D,0xD3D6F4FB,0x4369E96A,
-   0x346ED9FC,0xAD678846,0xDA60B8D0,0x44042D73,0x33031DE5,0xAA0A4C5F,0xDD0D7CC9,
-   0x5005713C,0x270241AA,0xBE0B1010,0xC90C2086,0x5768B525,0x206F85B3,0xB966D409,
-   0xCE61E49F,0x5EDEF90E,0x29D9C998,0xB0D09822,0xC7D7A8B4,0x59B33D17,0x2EB40D81,
-   0xB7BD5C3B,0xC0BA6CAD,0xEDB88320,0x9ABFB3B6,0x03B6E20C,0x74B1D29A,0xEAD54739,
-   0x9DD277AF,0x04DB2615,0x73DC1683,0xE3630B12,0x94643B84,0x0D6D6A3E,0x7A6A5AA8,
-   0xE40ECF0B,0x9309FF9D,0x0A00AE27,0x7D079EB1,0xF00F9344,0x8708A3D2,0x1E01F268,
-   0x6906C2FE,0xF762575D,0x806567CB,0x196C3671,0x6E6B06E7,0xFED41B76,0x89D32BE0,
-   0x10DA7A5A,0x67DD4ACC,0xF9B9DF6F,0x8EBEEFF9,0x17B7BE43,0x60B08ED5,0xD6D6A3E8,
-   0xA1D1937E,0x38D8C2C4,0x4FDFF252,0xD1BB67F1,0xA6BC5767,0x3FB506DD,0x48B2364B,
-   0xD80D2BDA,0xAF0A1B4C,0x36034AF6,0x41047A60,0xDF60EFC3,0xA867DF55,0x316E8EEF,
-   0x4669BE79,0xCB61B38C,0xBC66831A,0x256FD2A0,0x5268E236,0xCC0C7795,0xBB0B4703,
-   0x220216B9,0x5505262F,0xC5BA3BBE,0xB2BD0B28,0x2BB45A92,0x5CB36A04,0xC2D7FFA7,
-   0xB5D0CF31,0x2CD99E8B,0x5BDEAE1D,0x9B64C2B0,0xEC63F226,0x756AA39C,0x026D930A,
-   0x9C0906A9,0xEB0E363F,0x72076785,0x05005713,0x95BF4A82,0xE2B87A14,0x7BB12BAE,
-   0x0CB61B38,0x92D28E9B,0xE5D5BE0D,0x7CDCEFB7,0x0BDBDF21,0x86D3D2D4,0xF1D4E242,
-   0x68DDB3F8,0x1FDA836E,0x81BE16CD,0xF6B9265B,0x6FB077E1,0x18B74777,0x88085AE6,
-   0xFF0F6A70,0x66063BCA,0x11010B5C,0x8F659EFF,0xF862AE69,0x616BFFD3,0x166CCF45,
-   0xA00AE278,0xD70DD2EE,0x4E048354,0x3903B3C2,0xA7672661,0xD06016F7,0x4969474D,
-   0x3E6E77DB,0xAED16A4A,0xD9D65ADC,0x40DF0B66,0x37D83BF0,0xA9BCAE53,0xDEBB9EC5,
-   0x47B2CF7F,0x30B5FFE9,0xBDBDF21C,0xCABAC28A,0x53B39330,0x24B4A3A6,0xBAD03605,
-   0xCDD70693,0x54DE5729,0x23D967BF,0xB3667A2E,0xC4614AB8,0x5D681B02,0x2A6F2B94,
-   0xB40BBE37,0xC30C8EA1,0x5A05DF1B,0x2D02EF8D };
-    unsigned long crc32;
-    unsigned char *byteBuf;
-    size_t i;
-
-    /** accumulate crc32 for buffer **/
-    crc32 = inCrc32 ^ 0xFFFFFFFF;
-    byteBuf = (unsigned char*) buf;
-    for (i=0; i < bufLen; i++) {
-        crc32 = (crc32 >> 8) ^ crcTable[ (crc32 ^ byteBuf[i]) & 0xFF ];
-    }
-    return( crc32 ^ 0xFFFFFFFF );
-}
-
-/*----------------------------------------------------------------------------*\
- *  END OF MODULE: crc32.c
-\*----------------------------------------------------------------------------*/
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowlane/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowlane/plugin.properties
deleted file mode 100644
index 8f519c1de0b..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowlane/plugin.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-incoming-dir = ${incoming-root-dir}/register-flowlane
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-flowlane.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-jython-version=2.7
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowlane/register-flowlane.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowlane/register-flowlane.py
deleted file mode 100644
index 073256eee86..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-flowlane/register-flowlane.py
+++ /dev/null
@@ -1,360 +0,0 @@
-'''
-@copyright:
-2015 ETH Zuerich, SIS
-    
-@license: 
-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.
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-
-@author:
-Manuel Kohler
-'''
-
-
-import os
-import shutil
-import re
-import subprocess
-from collections import OrderedDict
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-# The following module is located in the path defined in the datastore_server.conf
-# Look for: -Dpython.path}
-from gfb_utils import *
-
-from __builtin__ import file
-
-FASTQ_GZ_PATTERN = "*.fastq.gz"
-METADATA_FILE_SUFFIX = "_metadata.tsv"
-AFFILIATION_PROPERTY_NAME='AFFILIATION'
-INDEX1='BARCODE'
-INDEX2='INDEX2'
-EXTERNAL_SAMPLE_NAME='EXTERNAL_SAMPLE_NAME'
-INDEXREAD1='INDEXREAD'
-INDEXREAD2='INDEXREAD2'
-SAMPLE_TYPE = 'SAMPLE_TYPE'
-SAMPLE_CODE = 'SAMPLE_CODE'
-NCBI_ORGANISM_TAXONOMY='NCBI_ORGANISM_TAXONOMY'
-PHIX_TAXONOMY_ID='10847'
-DEFAULT_INDEX='NoIndex'
-CRC32_PATH='lib/crc32'
-CRC32_PATH='lib/a.out'
-
-
-def checkOnFileSize(file):
-    return os.stat(file).st_size == 0
-
-
-def CRC32_from_file(filename, transaction):
-    
-    if checkOnFileSize(filename):
-        raise Exception("FILE " + filename + " IS EMPTY!")
-    
-    threadPropertyDict = get_thread_properties(transaction)
-    absolutePath = os.path.dirname(os.path.realpath(threadPropertyDict['script-path']))
-    fullPathCrc32 = (os.path.join(absolutePath, CRC32_PATH))
-    if os.path.exists(fullPathCrc32):
-        args = [fullPathCrc32, filename]
-        p = subprocess.Popen(args, stdout=subprocess.PIPE)
-        cksum = (p.communicate()[0])
-        print("Calculated crc32 checksum for: "+ os.path.basename(filename) + " " + cksum)
-    else:
-        cksum = 0 & 0xFFFFFFFF
-    return cksum
-
-
-def writeMetadataFile(transaction, folder_name, meta_data_file_name, sequencing_sample_properties_dict,
-                      fcMetaDataDict, experiment, sample_space, fastqFileList, flowLane):
-    '''
-    Writes a file of meta data related to one sample
-    '''
-
-    sequencing_sample_properties_list = sequencing_sample_properties_dict.keys()
-    sequencing_sample_properties_list.sort()
-
-    expId = experiment.getIdentifier()
-    try:
-        
-      
-        meta_data_file = open(meta_data_file_name,'w')
-        for propertyType in sequencing_sample_properties_list:
-            if (propertyType in [u'FLOW_CELL_PROPERTIES']):
-                continue
-            if propertyType in [SAMPLE_TYPE] or propertyType in [SAMPLE_CODE]:
-                 meta_data_file.write(propertyType.encode('utf-8') + "\t" +
-                                 str(sequencing_sample_properties_dict[propertyType])+ "\n")
-            else:
-                meta_data_file.write(propertyType.encode('utf-8') + "\t" +
-                    sequencing_sample_properties_dict[propertyType].encode('utf-8').replace('\n',',') + "\n")
-    
-        meta_data_file.write("EXPERIMENT\t" + expId + "\n".encode('utf-8'))
-        meta_data_file.write("\nFLOWCELL PROPERTIES\n".encode('utf-8'))
-        fcMetaDataDict["LANE_NUMBER"] = flowLane
-        keys = fcMetaDataDict.keys()
-        keys.sort()
-        
-        sequencer_vocabulary_description = get_vocabulary_descriptions(transaction, 'SEQUENCER')    
-        meta_data_file.write('SEQUENCER_MODEL' + "\t" + 
-                             sequencer_vocabulary_description[fcMetaDataDict['SEQUENCER']].encode('utf-8') + "\n")
-        
-        for k in keys:
-            meta_data_file.write(k.encode('utf-8') + "\t" + fcMetaDataDict[k].encode('utf-8') + "\n")
-      
-        meta_data_file.write("\nFASTQ_FILES\n".encode('utf-8'))
-        for file in fastqFileList:
-            meta_data_file.write(os.path.basename(file) + "\t" + str(CRC32_from_file(file, transaction)) + "\n")
-
-    except IOError:
-        print ('File error, could not write '+ file)
-    finally:
-        meta_data_file.close()
-  
-    destinationFolder = folder_name
-    extraCopySciCore (sample_space, meta_data_file_name, destinationFolder)
-
-
-def extraCopySciCore (sample_space, filePath, destinationFolder=""):
-    '''
-    Handles the extra copies of the data for transfer with datamover for SCICORE
-    '''
-    
-    dropBoxFolder = '/Users/kohleman/tmp/scicore'
-    #dropBoxFolder = '/links/shared/dsu/dss/customers/biozentrum_scicore/drop-box'
-    
-    # if a sample is part of this space list then it will be transferred to sciCore
-    SPACE_LIST = ["UNI_BASEL_SALZBURGER", "BIOCENTER_HANDSCHIN", "BIOCENTER_ZAVOLAN",
-                  "BIOCENTER_KELLER", "BIOCENTER_SILANDER", "ETHZ_NEUROSTEMX",
-                  "UNI_BASEL_UTZINGER", "UNI_BASEL_GAGNEUX", "BIOZENTRUM_SPANG",
-                  "BIOZENTRUM_JENAL"]
-    
-    basename = os.path.basename(filePath)
-    
-    if (sample_space in SPACE_LIST):
-        dirname = os.path.join(dropBoxFolder, destinationFolder)
-        if not os.path.exists(dirname):
-            os.mkdir(dirname)
-        print("COPYING " + filePath + " TO " + dirname)
-        shutil.copy(filePath, dirname)
-    else:
-        print(sample_space + " not in SPACE_LIST. Sample will not be copied to BC2.")
-
-
-def get_sample_properties (transaction, sample): 
-  
-    sample_properties_dict = {}
-    # returns Map<String, String>
-    sample_properties = sample.getSample().getProperties()
-    sequencing_sample_type = sample.getSampleType()
-    sequencing_sample_code = sample.getCode()
-    sample_properties_dict[SAMPLE_TYPE] = sequencing_sample_type
-    sample_properties_dict[SAMPLE_CODE] = sequencing_sample_code
-    
-    for property in sample_properties:
-        code = property.getPropertyType().getSimpleCode()
-        sample_properties_dict[code] = property.tryGetAsString()
-    
-    ordered_sample_properties_dict = OrderedDict(sorted(sample_properties_dict.items(), key=lambda t: t[0]))
-    return ordered_sample_properties_dict
-
-
-def searchParents (search_service, parents):
-
-    sc = SearchCriteria()
-    # set the Search Criteria to an OR condition, default is AND
-    sc.setOperator(SearchCriteria.SearchOperator.MATCH_ANY_CLAUSES)
-    # Get the codes for all parents
-    for parent in parents:
-        parentSubCode = parent.getSubCode()
-        sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, parentSubCode));
-    # all parents of the flow lane
-    foundParents = search_service.searchForSamples(sc)
-    return foundParents
-
-
-def renameFiles (fastq_files, undetermined, flow_cell_id):
-    
-    newFastqFileList = []
-    for file in fastq_files:
-        if undetermined:
-            folder = os.path.dirname(file)
-            fileName = os.path.basename(file)
-            filepart, suffix = fileName.split('.',1)
-            new_file =  folder + "/" + flow_cell_id + '_' + filepart + "." + suffix
-            print ("Renaming file " + file + " to " + new_file)
-            os.rename(file, new_file)
-        else:
-            new_file = file
-        newFastqFileList.append(new_file)
-    return newFastqFileList
-
-
-def put_files_to_dataset (transaction, dataSet, fastq_files, folder_name, flow_cell_id, sample_space, undetermined):
-
-    for file in fastq_files:
-        extraCopySciCore (sample_space, file, folder_name)
-        transaction.moveFile(file, dataSet, folder_name)
-
-# -------------------------------------------------------------------------------
-
-def split_incoming_folder_name (name):
-    split=name.split("_")
-
-    # expected incoming Name, e.g.: BSSE_QGF_22266_H0W8YBGXX_1
-    if (len(split) == 5):
-        sample_code = '-'.join([split[0], split[1], split[2]])
-        flowCellId = split[3]
-        flowLane = split[-1]
-        undetermined = False
-
-    # expected Undetermined_H0W8YBGXX
-    elif (len(split) == 2):
-        sample_code = ''
-        flowCellId = split[-1]
-        flowLane = '1'
-        undetermined = True
-        
-    # MiSeq BSSE_QGF_36097_000000000_AH4PH_1
-    elif (len(split) == 6):
-        sample_code = '-'.join([split[0], split[1], split[2]])
-        flowCellId = '-'.join([split[3],split[4]])
-        flowLane = split[-1]
-        undetermined = False
-    
-    #MiSeq Undetermined_000000000_AH4PH_1
-    elif (len(split) == 4):
-        sample_code = ''
-        flowCellId = '-'.join([split[1], split[2]])
-        flowLane = split[-1]
-        undetermined = True
-    else:
-        print("Expected different naming schema!")
-  
-    incoming_sample = flowCellId + ':' + flowLane
-    return sample_code, flowCellId, flowLane, incoming_sample, undetermined
-
-# -------------------------------------------------------------------------------
-
-def get_vocabulary_descriptions (transaction, vocabulary_name):
-    vocabulary_descriptions_dict = {}
-    vocabulary = transaction.getVocabulary(vocabulary_name)
-    vocabulary_terms = vocabulary.getTerms()
-    for term in vocabulary_terms:
-        vocabulary_descriptions_dict[term.getCode()] = term.getDescription()
-    return vocabulary_descriptions_dict
-
-# -------------------------------------------------------------------------------
-
-
-def process_regular_samples(transaction, name, sample_code, flowLane, fastq_files, first_fastq_file, search_unique_sample, fcMetaDataDict, dataSet):
-    foundSample = search_unique_sample(transaction, sample_code)
-    sequencing_sample = foundSample[0].getSample()
-    experiment = sequencing_sample.getExperiment()
-    sequencing_sample_code = sequencing_sample.getCode()
-    print "sequencing_sample_code: " + sequencing_sample_code
-    sequencing_sample_properties_dict = get_sample_properties(transaction, foundSample[0])
-    if (INDEX1 in sequencing_sample_properties_dict) and (fcMetaDataDict[INDEXREAD1] > 0):
-        #print(sequencing_sample_properties_dict[INDEX1])
-        dataSet.setPropertyValue(INDEX1, sequencing_sample_properties_dict[INDEX1])
-    if (INDEX2 in sequencing_sample_properties_dict) and (fcMetaDataDict[INDEXREAD2] > 0):
-        dataSet.setPropertyValue(INDEX2, sequencing_sample_properties_dict[INDEX2])
-    dataSet.setPropertyValue(EXTERNAL_SAMPLE_NAME, sequencing_sample_properties_dict[EXTERNAL_SAMPLE_NAME])
-    sample_space = foundSample[0].getSpace()
-    filepart, suffix = first_fastq_file.split('.', 1)
-    meta_data_file_name = filepart.rsplit('_', 2)[0] + METADATA_FILE_SUFFIX
-    # get a file from the IDataSetRegistrationTransaction so it is automatically part of the data set
-    meta_data_file_path = transaction.createNewFile(dataSet, name, meta_data_file_name)
-    writeMetadataFile(transaction, name, meta_data_file_path, sequencing_sample_properties_dict, fcMetaDataDict, experiment, sample_space, fastq_files, flowLane)
-    
-    return fastq_files, sample_space
-
-
-def process_undetermined(transaction, undetermined, name, flowCellId, flowLane, fastq_files, first_fastq_file, search_service, fcMetaDataDict, parents, dataSet):
-    sample_space = ""
-    newFastqFiles = []
-    lane_parents = searchParents(search_service, parents)
-    print "Found " + str(lane_parents.size()) + " parents"
-    newFastqFiles = renameFiles(fastq_files, undetermined, flowCellId)
-    for parent in lane_parents:
-        sequencing_sample_properties_dict = get_sample_properties(transaction, parent)
-        parent_sample = parent.getSample()
-        sample_code = parent_sample.getCode()
-        experiment = parent_sample.getExperiment()
-        sample_space = parent.getSpace()
-
-        # Special Sample Types without index (e.g. ILLUMINA_SEQUENCING_NEUROSTEMX_SINGLECELL) are caught here.
-        # as those samples do not have a NCBI ORGANISM TAXONOMY
-        if NCBI_ORGANISM_TAXONOMY not in sequencing_sample_properties_dict:
-            print sample_code + ": Processing Sample without NCBI ORGANISM TAXONOMY: ILLUMINA_SEQUENCING_NEUROSTEMX_SINGLECELL"
-            meta_data_file_path = transaction.createNewFile(dataSet, name, sample_code + '_' + flowCellId + '_' + first_fastq_file.split('.')[0] + METADATA_FILE_SUFFIX)
-            writeMetadataFile(transaction, name, meta_data_file_path, sequencing_sample_properties_dict, fcMetaDataDict, experiment, sample_space, newFastqFiles, flowLane)
-
-        elif (INDEX1 not in sequencing_sample_properties_dict or sequencing_sample_properties_dict[INDEX1] == 'NOINDEX') and \
-         (INDEX2 not in sequencing_sample_properties_dict or sequencing_sample_properties_dict[INDEX2] == 'NOINDEX') and \
-          (sequencing_sample_properties_dict[NCBI_ORGANISM_TAXONOMY] != PHIX_TAXONOMY_ID):
-            print 'NONINDEXED sample and Taxonomy id is NOT ' + PHIX_TAXONOMY_ID + ', probably a pool: ' + sample_code
-            meta_data_file_path = transaction.createNewFile(dataSet, name, sample_code + '_' + flowCellId + '_' + first_fastq_file.split('.')[0] + METADATA_FILE_SUFFIX)
-            writeMetadataFile(transaction, name, meta_data_file_path, sequencing_sample_properties_dict, fcMetaDataDict, experiment, sample_space, newFastqFiles, flowLane)
-
-        else:
-            print sample_code + ": Create parent meta data file"
-            meta_data_file_path = transaction.createNewFile(dataSet, name, 'PARENT_' + sample_code + '_' + flowCellId + METADATA_FILE_SUFFIX)
-            writeMetadataFile(transaction, name, meta_data_file_path, sequencing_sample_properties_dict, fcMetaDataDict, experiment, sample_space, [], flowLane)
-    
-    return newFastqFiles, sample_space
-
-def process(transaction):
-
-    undetermined = False
-    print("\n" + str(datetime.now()))
-
-    incomingPath = transaction.getIncoming().getAbsolutePath()
-    name = transaction.getIncoming().getName()
-    
-    sample_code, flowCellId, flowLane, incoming_sample, undetermined =  split_incoming_folder_name (name)
-    
-    # get all fastqs
-    fastq_files = get_file_names(incomingPath, FASTQ_GZ_PATTERN)
-    
-    # BSSE-QGF-22266-H0W8YBGXX-1-654-BC3-TTAGGC_S1_L001_R1_001.fastq.gz
-    # BSSE-QGF-22051-H0T25AGXX-1-1-1-TAAGGCGA-CTCTCTAT_S46_L001_R1_001.fastq.gz
-    first_fastq_file = os.path.basename(fastq_files[0])
-
-    search_service = transaction.getSearchService()
-    
-    flowcell_sample_immutable = search_unique_sample (transaction, flowCellId)
-    fcMetaDataDict = get_sample_properties(transaction, flowcell_sample_immutable[0])
-    flow_lane_immutable = search_unique_sample (transaction, incoming_sample)
-    
-    sample = flow_lane_immutable[0].getSample()
-    parents = sample.getParents()
-    
-    dataSet = transaction.createNewDataSet("FASTQ_GZ")
-    dataSet.setMeasuredData(False)
-    dataSet.setPropertyValue(INDEX1, DEFAULT_INDEX)
-    dataSet.setPropertyValue(INDEX2, DEFAULT_INDEX)
-    dirName = transaction.createNewDirectory(dataSet,name)
-
-    if undetermined:
-        fastq_files, sample_space = process_undetermined(transaction, undetermined, name, flowCellId, flowLane,
-                                fastq_files, first_fastq_file, search_service, fcMetaDataDict, parents, dataSet) 
-    else:
-        fastq_files, sample_space = process_regular_samples(transaction, name, sample_code, flowLane,
-                                fastq_files, first_fastq_file, search_unique_sample, fcMetaDataDict, dataSet)
-
-    put_files_to_dataset (transaction, dataSet, fastq_files, name, flowCellId, sample_space, undetermined)
-
-    sa = transaction.getSampleForUpdate(flow_lane_immutable[0].getSampleIdentifier())
-    sa.setPropertyValue("DATA_TRANSFERRED", create_openbis_timestamp_now())
-    dataSet.setSample(flow_lane_immutable[0])
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-hiseq/lib/crc32 b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-hiseq/lib/crc32
deleted file mode 100755
index 7959ca94a1fa61e47c2e4df815bb35fceb7bd809..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 10567
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
DMv_I6

diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-hiseq/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-hiseq/plugin.properties
deleted file mode 100644
index f7523f7cdec..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-hiseq/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-lane-hiseq
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-lane-hiseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-hiseq/register-lane-hiseq.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-hiseq/register-lane-hiseq.py
deleted file mode 100755
index 05bd0e2ee55..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-hiseq/register-lane-hiseq.py
+++ /dev/null
@@ -1,493 +0,0 @@
-'''
-Processes each flow lane of a Sequencing run
-
-Expects as incoming folder:
-Project_<Flow Cell>_<Lane>
-e.g.Project_110715_SN792_0054_BC035RACXX_1 or Project_110816_6354LAAXX_1
-
-Note: 
-print statements go to: ~openbis/sprint/datastore_server/log/startup_log.txt
-'''
-
-import os
-import re
-import fnmatch
-import time
-import shutil
-import tempfile
-import subprocess
-from time import *
-from datetime import *
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-FASTQ_GZ_PATTERN = "*.fastq.gz"
-METADATA_FILE_SUFFIX = "_metadata.tsv"
-AFFILIATION_PROPERTY_NAME='AFFILIATION'
-INDEX1='BARCODE'
-INDEX2='INDEX2'
-EXTERNAL_SAMPLE_NAME='EXTERNAL_SAMPLE_NAME'
-SAMPLE_TYPE = 'SAMPLE_TYPE'
-SAMPLE_CODE = 'SAMPLE_CODE'
-CRC32_PATH='lib/crc32'
-#CRC32_PATH='lib/a.out'
-
-DEFAULT_INDEX='NoIndex'
-
-# -------------------------------------------------------------------------------
-
-def getThreadProperties(transaction):
-  threadPropertyDict = {}
-  threadProperties = transaction.getGlobalState().getThreadParameters().getThreadProperties()
-  for key in threadProperties:
-    try:
-      threadPropertyDict[key] = threadProperties.getProperty(key)
-    except:
-      pass
-  return threadPropertyDict
-
-# -------------------------------------------------------------------------------
-
-def CRC32_from_file(filename, transaction):
-    threadPropertyDict = getThreadProperties(transaction)
-    absolutePath = os.path.dirname(os.path.realpath(threadPropertyDict['script-path']))
-    fullPathCrc32 = (os.path.join(absolutePath, CRC32_PATH))
-    if os.path.exists(fullPathCrc32):
-        args = [fullPathCrc32, filename]
-        p = subprocess.Popen(args, stdout=subprocess.PIPE)
-        cksum = (p.communicate()[0])
-        print("Calculated crc32 checksum for: "+ os.path.basename(filename) + " " + cksum)
-    else:
-        cksum = 0 & 0xFFFFFFFF
-    return cksum
-
-
-def getFileNames(path):
-  '''
-  Gets all files matching a PATTERN in a path recursively
-  and returns the result as a list
-  '''
-  matches = []
-  for root, dirnames, filenames in os.walk(path):
-    for filename in fnmatch.filter(filenames, FASTQ_GZ_PATTERN):
-        matches.append(os.path.join(root, filename))
-  matches.sort()
-  return(matches)
-
-# -------------------------------------------------------------------------------
-
-def sanitizeString(myString):
-  return re.sub('[^A-Za-z0-9]+', '_', myString)
-
-# -------------------------------------------------------------------------------
-
-def get_vocabulary_descriptions (transaction, vocabulary_name):
-  vocabulary_descriptions_dict = {}
-  vocabulary = transaction.getVocabulary(vocabulary_name)
-  vocabulary_terms = vocabulary.getTerms()
-  for term in vocabulary_terms:
-    vocabulary_descriptions_dict[term.getCode()] = term.getDescription()
-  return vocabulary_descriptions_dict
-
-# -------------------------------------------------------------------------------
-
-def writeMetadataFile (transaction, fileName, parentPropertyTypes, parentPropertiesMap, fcMetaDataDict,
-                        experiment, fastqFileList, flowLane):
-  '''
-  Writes a file of meta date related to one sample
-  '''
-  
-  fastqFileList.sort()
-  
-  expId = experiment.getIdentifier()
-  try:
-    meta_data_file = open(fileName,'w')
-    for propertyType in parentPropertyTypes:
-      if (propertyType in [u'FLOW_CELL_PROPERTIES']):
-        continue
-      if propertyType in [SAMPLE_TYPE] or propertyType in [SAMPLE_CODE]:
-         meta_data_file.write(propertyType.encode('utf-8') + "\t" +
-                         str(parentPropertiesMap[propertyType])+ "\n")
-      else:
-        meta_data_file.write(propertyType.encode('utf-8') + "\t" +
-                         parentPropertiesMap[propertyType].tryGetAsString().encode('utf-8').replace('\n',',') + "\n")
-    
-    meta_data_file.write("EXPERIMENT\t" + expId + "\n".encode('utf-8'))
-    meta_data_file.write("\nFLOWCELL PROPERTIES\n".encode('utf-8'))
-    fcMetaDataDict["LANE_NUMBER"] = flowLane
-    keys = fcMetaDataDict.keys()
-    keys.sort()
-    
-    sequencer_vocabulary_description = get_vocabulary_descriptions(transaction, 'SEQUENCER')
-    meta_data_file.write('SEQUENCER_MODEL' + "\t" + sequencer_vocabulary_description[fcMetaDataDict['SEQUENCER']].encode('utf-8') + "\n")
-    
-    for k in keys:
-      meta_data_file.write(k.encode('utf-8') + "\t" + fcMetaDataDict[k].encode('utf-8') + "\n")
-  
-    meta_data_file.write("\nFASTQ_FILES\n".encode('utf-8'))
-    for file in fastqFileList:
-        meta_data_file.write(os.path.basename(file) + "\t" + str(CRC32_from_file(file, transaction)) + "\n")
-   
-  except IOError:
-    print ('File error, could not write '+ fileName)
-  finally:
-    meta_data_file.close()
-
-def create_openbis_timestamp ():
-  '''
-  Create an openBIS conform timestamp
-  '''
-  tz=localtime()[3]-gmtime()[3]
-  d=datetime.now()
-  return d.strftime("%Y-%m-%d %H:%M:%S GMT"+"%+.2d" % tz+":00")
-
-def extraCopy (affiliation_name, path):
-  '''
-  Handles the extra copies of the data for transfer with datamover via the
-  bc2 network to the FMI and BIOCENTER
-  For the BIOCENTER there is a folder created in which all data gets into
-  '''
-  if (affiliation_name in AFFILIATION):
-    if (affiliation_name == 'BIOCENTER_BASEL' or affiliation_name == 'NEUROSTEMX'  or affiliation_name == 'SWISS_TPH'):
-      dirname = AFFILIATION[affiliation_name] + datetime.now().strftime("%Y-%m-%d")
-      if not os.path.exists(dirname):
-        os.mkdir(dirname)
-      shutil.copy(path, dirname)
-    else:
-      shutil.copy(path, AFFILIATION[affiliation_name])
-
-# -------------------------------------------------------------------------------
-
-def extraCopySciCore (sample_space, filePath, destinationFolder=""):
-    '''
-    Handles the extra copies of the data for transfer with datamover for SCICORE
-    '''
-    dirname = ''
-    # if a sample is part of this space list then it will be transferred to sciCore
-    SPACE_LIST = ["UNI_BASEL_SALZBURGER", "BIOCENTER_HANDSCHIN", "BIOCENTER_ZAVOLAN",
-                  "BIOCENTER_KELLER", "BIOCENTER_SILANDER", "ETHZ_NEUROSTEMX",
-                  "UNI_BASEL_UTZINGER", "UNI_BASEL_GAGNEUX"]
-    
-    dropBoxFolder = '/links/shared/dsu/dss/customers/biozentrum_scicore/drop-box/'
-    #dropBoxFolder = '/Users/kohleman/tmp/scicore'
-    basename = os.path.basename(filePath)
-
-    splits = basename.split('_')
-    folderName = "_".join(splits[0:8])
-
-    if (sample_space in SPACE_LIST):
-        dirname = os.path.join(dropBoxFolder, folderName)
-        if destinationFolder:
-          shutil.copy(filePath, destinationFolder)
-        else:
-          if not os.path.exists(dirname):
-            os.mkdir(dirname)
-          shutil.copy(filePath, dirname)
-          print("Copied " + basename + " to " + dropBoxFolder + "\n")
-    return dirname
-
-# -------------------------------------------------------------------------------
-
-def searchSample (sample_code, search_service):
-  sc = SearchCriteria()
-  print('Searching sample: '+ str(sample_code))
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sample_code));
-  foundSamples = search_service.searchForSamples(sc)
-  return foundSamples
-
-# -------------------------------------------------------------------------------
-
-def get_sample_properties (transaction, sample): 
-  
-  sample_properties_dict = {}
-  # returns Map<String, String>
-  sample_properties = sample.getSample().getProperties()
-  sequencing_sample_type = sample.getSampleType()
-  sequencing_sample_code = sample.getCode()
-  sample_properties_dict[SAMPLE_TYPE] = sequencing_sample_type
-  sample_properties_dict[SAMPLE_CODE] = sequencing_sample_code
-
-  for property in sample_properties:
-      code = property.getPropertyType().getSimpleCode()
-      sample_properties_dict[code] = property.tryGetAsString()
-  
-  return sample_properties_dict
-
-# -------------------------------------------------------------------------------
-
-def getFlowCellMetaData (transaction, flowCellId):
-  
-  def sortedDictValues(adict):
-    keys = adict.keys()
-    keys.sort()
-    return map(adict.get, keys)
-  
-  search = transaction.getSearchService()
-  sc = SearchCriteria()
-  print('Searching FlowCell: '+ str(flowCellId))
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCellId));
-  foundFlowCells = search.searchForSamples(sc)
-
-  try:
-    assert foundFlowCells.size() == 1
-  except AssertionError:
-    print (str(foundFlowCells.size()) + ' flow cells found which match the criterias: '+ flowCellId)
-  
-  fcPropertiesDict = {}
-  fcPropertyTypes = []
-
-  fcProperties = foundFlowCells[0].getSample().getProperties()
-  for property in fcProperties:
-      code = property.getPropertyType().getSimpleCode()
-      fcPropertyTypes.append(code)
-      fcPropertiesDict[code] = property
-  
-  fcPropertyTypes.sort()
-  return fcPropertiesDict, fcPropertyTypes
-
-# -------------------------------------------------------------------------------
-
-def searchParents (search_service, parents):
-  '''
-  Searches for all parents and returns a java.util.List<ISampleImmutable>
-  '''
-  # search for the parents
-  sc = SearchCriteria()
-  # set the Search Criteria to an OR condition, default is AND
-  sc.setOperator(SearchCriteria.SearchOperator.MATCH_ANY_CLAUSES)
-  # Get the codes for all parents
-  for parent in parents:
-    parentSubCode = parent.getSubCode()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, parentSubCode));
-  # all parents of the flow lane
-  foundParents = search_service.searchForSamples(sc)
-
-  return foundParents
-
-# -------------------------------------------------------------------------------
-
-def getProperties (foundParent, fcMetaDataDict):
-  '''
-
-  '''
-  parent = foundParent.getSample()
-  # ArrayList
-  parentProperties = parent.getProperties()
-  # just get the current code
-  parentCode = parent.getCode()
-  #print("Found parent code: "+ parentCode)
-  parentSampleType = parent.getSampleType()
-
-  # reformat Java ArrayList and Sort
-  parentPropertyTypes = []
-  parentPropertiesMap = {}
-
-  parentPropertyTypes.append(SAMPLE_TYPE)
-  parentPropertyTypes.append(SAMPLE_CODE)
-  parentPropertiesMap[SAMPLE_TYPE] = parentSampleType
-  parentPropertiesMap[SAMPLE_CODE] = parentCode
-  experiment = parent.getExperiment()
-
-  for property in parentProperties:
-    code = property.getPropertyType().getSimpleCode()
-    parentPropertyTypes.append(code)
-    parentPropertiesMap[code] = property
-    try:
-      barcode = parentPropertiesMap[INDEX1].tryGetAsString()
-      if barcode == "NOINDEX":
-	barcode = DEFAULT_INDEX
-      else:
-	barcode.split()[-1][:-1]
-    except:
-      barcode = DEFAULT_INDEX
-
-    i2Length = int(fcMetaDataDict['INDEXREAD2'].tryGetAsString().encode('utf-8'))
-    if i2Length > 0:
-      try:
-	index2 = parentPropertiesMap[INDEX2].tryGetAsString()
-	if index2 == "NOINDEX":
-	  index2 = DEFAULT_INDEX
-	else:
-          index2.split()[-1][:-1]
-      except:
-        index2 = DEFAULT_INDEX
-    else:
-      index2 = DEFAULT_INDEX
-
-    completeBarcode=barcode + "-" + index2
-    parentPropertyTypes.sort()
-    #print("parentPropertiesMap")
-    #print(parentPropertiesMap)
-  return parentCode, parentProperties, parentPropertyTypes, parentPropertiesMap, experiment, barcode, index2, completeBarcode
-
-# -------------------------------------------------------------------------------
-
-def createMetDataFileName (parentCode, incoming_sample, completeBarcode, flowLane, METADATA_FILE_SUFFIX):
-  return parentCode.replace('-','_') + "_" + incoming_sample.replace(':', '_') + "_" + completeBarcode + "_L00" + flowLane +METADATA_FILE_SUFFIX
-
-# -------------------------------------------------------------------------------
-
-def process(transaction):
-
-  EXPERIMENT_CODE = 'EXPERIMENT'
-
-  # useful for debugging:
-  print("\n" + str(datetime.now()))
-
-  incomingPath = transaction.getIncoming().getAbsolutePath()
-  name = transaction.getIncoming().getName()
-
-  folders=[]
-  folders=os.listdir(incomingPath)
-
-  # expected incoming Name, e.g.: Project_110715_SN792_0054_BC035RACXX_1
-  split=name.split("_")
-  if (len(split) == 6):
-    runningDate = split[1]
-    sequencerId = split[2]
-    sequentialNumber = split[3]
-    hiseqTray = split[4][0]
-    flowCellId = split[4][1:]
-    flowLane = split[-1]
-    incoming_sample=runningDate+ '_'+ sequencerId + '_' + sequentialNumber + '_' + hiseqTray + flowCellId + ':' + flowLane
-
-  # Get the search service
-  search_service = transaction.getSearchService()
-
-  # Search for the incoming_sample which is a Flow Lane
-  sc = SearchCriteria()
-  print('Processing sample: '+ str(incoming_sample))
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, incoming_sample));
-  foundSamples = search_service.searchForSamples(sc)
-
-  # there should be only one sample because it is unique within one Flow Cell 
-  if (len(foundSamples) > 1):
-    raise Exception("More than one sample found! No unique code: " + incoming_sample)
-  elif (len(foundSamples) == 0):
-    raise Exception("No matching sample found for: " + incoming_sample)
-  else :
-    sample = foundSamples[0].getSample()
-    parents = sample.getParents()
-
-  foundParents = searchParents(search_service, parents)
-
-  if foundSamples.size() > 0:
-    sa = transaction.getSampleForUpdate(foundSamples[0].getSampleIdentifier())
-    sa.setPropertyValue("DATA_TRANSFERRED", create_openbis_timestamp())
-
-  # -------------------------------------------------------------------------------
-
-  flowcell_sample_immutable = searchSample (runningDate+ '_'+ sequencerId + '_' + sequentialNumber + '_' + hiseqTray + flowCellId , search_service)
-  fcMetaDataDict_NEW = get_sample_properties(transaction, flowcell_sample_immutable[0])
-  fcMetaDataDict, fcMetaDataList = getFlowCellMetaData(transaction, incoming_sample.split(":")[0])
-  
-  def addExternalSampleName (fastqFileList, usableExternalSampleName):
-    externalNamesFastqFileDict = {}
-    
-    for file in fastqFileList:
-        folder = os.path.dirname(file)
-        fileName = os.path.basename(file)
-        filepart, suffix = fileName.split('.',1)
-        sanitizedExternalSampleName = sanitizeString(usableExternalSampleName)
-        if sanitizedExternalSampleName:
-            newFile =  folder + "/" + filepart + "_" + sanitizedExternalSampleName + "." + suffix
-        else:
-            newFile = file
-        externalNamesFastqFileDict[file] = newFile
-    return externalNamesFastqFileDict
-  
-  # loop over each Sample folder within a lane
-  for f in range(0,len(folders)):
-    # Create a data set and set type
-    dataSet = transaction.createNewDataSet("FASTQ_GZ")
-    dataSet.setMeasuredData(False)
-    dataSet.setPropertyValue(INDEX1, DEFAULT_INDEX)
-    dataSet.setPropertyValue(INDEX2, DEFAULT_INDEX)
-
-    dataSet.setSample(foundSamples[0])
-    dirName = transaction.createNewDirectory(dataSet,folders[f])
-    usableExternalSampleName = "EXTERNAL_NAME"
-
-    # if multiplexed samples then there is more than one folder
-    pathPerLane = incomingPath + '/' + folders[f]
-    
-    # get all fastqs in this dataSet
-    fastqFileList=getFileNames(pathPerLane)
-
-    # get all properties of the parent samples
-    for foundParent in foundParents:
-
-      parentCode, parentProperties, parentPropertyTypes, parentPropertiesMap, experiment, barcode, index2, completeBarcode = getProperties (foundParent, fcMetaDataDict)
-      nameOfFile = createMetDataFileName (parentCode, incoming_sample, completeBarcode, flowLane, METADATA_FILE_SUFFIX)
-      #print folders[f]
-      folderSplit = '-'.join(folders[f].split('_')[1:4])
-      #print "Folder split: " + folderSplit
-      #print str(parentCode)
-      organism = parentPropertiesMap['NCBI_ORGANISM_TAXONOMY'].tryGetAsString().split(":")[-1].strip() 
-
-      if (parentCode == folderSplit):
-        sample_space = foundParent.getSpace()
-
-        externalSampleName = parentPropertiesMap[EXTERNAL_SAMPLE_NAME].tryGetAsString()
-        lengthLimit = 30
-        if len(externalSampleName) > lengthLimit:
-          usableExternalSampleName = externalSampleName[0:lengthLimit]
-        else:
-          usableExternalSampleName = externalSampleName
-
-        nameOfFile = parentCode.replace('-','_') + "_" + incoming_sample.replace(':', '_') + "_" + completeBarcode + "_L00" + \
-                                                     flowLane + "_" + sanitizeString(usableExternalSampleName) + METADATA_FILE_SUFFIX
-
-        dataSet.setPropertyValue(INDEX1, barcode)
-        dataSet.setPropertyValue(INDEX2, index2)
-        dataSet.setPropertyValue(EXTERNAL_SAMPLE_NAME, parentPropertiesMap[EXTERNAL_SAMPLE_NAME].tryGetAsString())
-        print("Creating metadata file:" + nameOfFile)
-        # get a file from the IDataSetRegistrationTransaction so it is automatically part of the data set
-        pathToFile = transaction.createNewFile(dataSet, folders[f], nameOfFile)
-        externalNamesFastqFileDict = addExternalSampleName(fastqFileList, usableExternalSampleName)
-        
-        for extFileNameFastQ in externalNamesFastqFileDict:
-            print ("RENAME file " + str(os.path.basename(extFileNameFastQ)) + " TO " + str(os.path.basename(externalNamesFastqFileDict[extFileNameFastQ])))
-            os.rename(extFileNameFastQ, externalNamesFastqFileDict[extFileNameFastQ])
-            destinationFolder = ''
-            extraCopySciCore (sample_space, externalNamesFastqFileDict[extFileNameFastQ], destinationFolder)
-            
-        writeMetadataFile(transaction, pathToFile, parentPropertyTypes, parentPropertiesMap, fcMetaDataDict_NEW, experiment, externalNamesFastqFileDict.values(), flowLane)
-        extraCopySciCore (sample_space, pathToFile)
-            
-        for extFileNameFastQ in externalNamesFastqFileDict:
-            transaction.moveFile(externalNamesFastqFileDict[extFileNameFastQ] , dataSet, folders[f])
-
-      # Undetermined files #################################
-      elif (folderSplit.startswith('lane') and barcode == "NoIndex" and index2 == "NoIndex" and organism !='10847'):
-        usableExternalSampleName = ""
-        print("********************** Creating metadata file for Undetermined:" + nameOfFile)
-        
-        # get a file from the IDataSetRegistrationTransaction so it is automatically part of the data set
-        pathToFile = transaction.createNewFile(dataSet, folders[f], nameOfFile)
-        externalNamesFastqFileDict = addExternalSampleName(fastqFileList, usableExternalSampleName)
-        writeMetadataFile(transaction, pathToFile, parentPropertyTypes, parentPropertiesMap, fcMetaDataDict_NEW, experiment, externalNamesFastqFileDict.values(), flowLane)
-        
-        sample_space = foundParent.getSpace()
-        dirName = extraCopySciCore (sample_space, pathToFile)
-
-        externalNamesFastqFileDict = addExternalSampleName(fastqFileList, usableExternalSampleName)
-        for extFileNameFastQ in externalNamesFastqFileDict:
-            extraCopySciCore (sample_space, externalNamesFastqFileDict[extFileNameFastQ], dirName)
-        
-        # Write Meta data for Parents Files
-        for foundParent in foundParents:
-          addParentCode, parentProperties, parentPropertyTypes, parentPropertiesMap, experiment, barcode, index2, completeBarcode = getProperties (foundParent, fcMetaDataDict)
-          nameOfFile = createMetDataFileName (addParentCode, incoming_sample, completeBarcode, flowLane, METADATA_FILE_SUFFIX)
-          if (parentCode != addParentCode):
-            tmpDir = tempfile.mkdtemp() 
-            fileName = os.path.join(tmpDir, "PARENT_" + nameOfFile)
-            writeMetadataFile(transaction, fileName, parentPropertyTypes, parentPropertiesMap, fcMetaDataDict_NEW, experiment, [], flowLane)
-            sample_space = foundParent.getSpace()
-            extraCopySciCore (sample_space, fileName, dirName)
-
-        try:
-            for extFileNameFastQ in externalNamesFastqFileDict:
-                transaction.moveFile(externalNamesFastqFileDict[extFileNameFastQ] , dataSet, folders[f])
-        except:
-            # Happens when we have more than one pool registered, then the files have been moved away already
-            pass
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-miseq/lib/crc32 b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-miseq/lib/crc32
deleted file mode 100755
index 7959ca94a1fa61e47c2e4df815bb35fceb7bd809..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 10567
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
DMv_I6

diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-miseq/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-miseq/plugin.properties
deleted file mode 100644
index 51c2eec3813..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-miseq/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-lane-miseq
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-lane-miseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-miseq/register-lane-miseq.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-miseq/register-lane-miseq.py
deleted file mode 100644
index 985022f203b..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-miseq/register-lane-miseq.py
+++ /dev/null
@@ -1,327 +0,0 @@
-'''
-Processes each flow lane of a Sequencing run
-
-Expects as incoming folder:
-Project_<Flow Cell>_<Lane>
-e.g.Project_110715_SN792_0054_BC035RACXX_1 or Project_110816_6354LAAXX_1
-
-Note: 
-print statements go to: ~openbis/sprint/datastore_server/log/startup_log.txt
-'''
-
-import os
-import fnmatch
-import time
-import shutil
-import re
-from time import *
-from datetime import *
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-FASTQ_GZ_PATTERN = "*.fastq.gz"
-METADATA_FILE_SUFFIX = "_metadata.tsv"
-AFFILIATION= {'FMI': '/links/shared/dsu/dss/customers/fmi/drop-box/','BIOCENTER_BASEL': '/links/shared/dsu/dss/customers/biozentrum/drop-box/', 'NEUROSTEMX': '/links/shared/dsu/dss/customers/biozentrum/drop-box/'}
-AFFILIATION_PROPERTY_NAME='AFFILIATION'
-INDEX1='BARCODE'
-INDEX2='INDEX2'
-EXTERNAL_SAMPLE_NAME='EXTERNAL_SAMPLE_NAME'
-
-DEFAULT_INDEX='NoIndex'
-
-# -------------------------------------------------------------------------------
-
-def getFileNames(path):
-  '''
-  Gets all files matching a PATTERN in a path recursively
-  and returns the result as a list
-  '''
-  matches = []
-  for root, dirnames, filenames in os.walk(path):
-    for filename in fnmatch.filter(filenames, FASTQ_GZ_PATTERN):
-        matches.append(os.path.join(root, filename))
-  matches.sort()
-  return(matches)
-
-def writeMetadataFile (fileName, parentPropertyTypes, parentPropertiesMap, fcMetaDataDict, fcMetaDataList):
-  '''
-  Writes a file of meta date related to one sample
-  '''
-  try:
-    metaDataFile = open(fileName,'w')
-    for propertyType in parentPropertyTypes:
-      metaDataFile.write(propertyType.encode('utf-8') + "\t" +
-                         parentPropertiesMap[propertyType].tryGetAsString().encode('utf-8') + "\n")
-    
-    metaDataFile.write("\nFLOWCELL PROPERTIES\n".encode('utf-8'))
-
-    for fcMetaData in fcMetaDataList:
-      metaDataFile.write(fcMetaData.encode('utf-8') + "\t" +
-                         fcMetaDataDict[fcMetaData].tryGetAsString().encode('utf-8') + "\n")
-      pass
-  except IOError:
-    print ('File error, could not write '+ fileName)
-  finally:
-    metaDataFile.close()
-
-def create_openbis_timestamp ():
-  '''
-  Create an openBIS conform timestamp
-  '''
-  tz=localtime()[3]-gmtime()[3]
-  d=datetime.now()
-  return d.strftime("%Y-%m-%d %H:%M:%S GMT"+"%+.2d" % tz+":00")
-
-def extraCopy (affiliation_name, path):
-  '''
-  Handles the extra copies of the data for transfer with datamover via the
-  bc2 network to the FMI and BIOCENTER
-  For the BIOCENTER there is a folder created in which all data gets into
-  '''
-  if (affiliation_name in AFFILIATION):
-    if (affiliation_name == 'BIOCENTER_BASEL' or affiliation_name == 'NEUROSTEMX' ):
-      dirname = AFFILIATION[affiliation_name] + datetime.now().strftime("%Y-%m-%d")
-      if not os.path.exists(dirname):
-        os.mkdir(dirname)
-      shutil.copy(path, dirname)
-    else:
-      shutil.copy(path, AFFILIATION[affiliation_name])
-# -------------------------------------------------------------------------------
-
-def getFlowCellMetaData (transaction, flowCellId):
-  
-  def sortedDictValues(adict):
-    keys = adict.keys()
-    keys.sort()
-    return map(adict.get, keys)
-  
-  search = transaction.getSearchService()
-  sc = SearchCriteria()
-  print('Searching FlowCell: '+ str(flowCellId))
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowCellId));
-  foundFlowCells = search.searchForSamples(sc)
-
-  try:
-    assert foundFlowCells.size() == 1
-  except AssertionError:
-    print (str(foundFlowCells.size()) + ' flow cells found which match the criterias: '+ flowCellId)
-  
-  fcPropertiesDict = {}
-  fcPropertyTypes = []
-
-  fcProperties = foundFlowCells[0].getSample().getProperties()
-  for property in fcProperties:
-      code = property.getPropertyType().getSimpleCode()
-      fcPropertyTypes.append(code)
-      fcPropertiesDict[code] = property
-  
-  fcPropertyTypes.sort()
-  return fcPropertiesDict, fcPropertyTypes
-
-# -------------------------------------------------------------------------------
-
-def searchParents (search_service, parents):
-
-  # search for the parents
-  sc = SearchCriteria()
-  # set the Search Criteria to an OR condition, default is AND
-  sc.setOperator(SearchCriteria.SearchOperator.MATCH_ANY_CLAUSES)
-  # Get the codes for all parents
-  for parent in parents:
-    parentSubCode = parent.getSubCode()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, parentSubCode));
-  # all parents of the flow lane
-  foundParents = search_service.searchForSamples(sc)
-
-  return foundParents
-
-# -------------------------------------------------------------------------------
-
-def sanitizeString(myString):
-  return re.sub('[^A-Za-z0-9]+', '_', myString)
-
-# -------------------------------------------------------------------------------
-
-def process(transaction):
-
-  # useful for debugging:
-  print(datetime.now())
-
-  incomingPath = transaction.getIncoming().getAbsolutePath()
-  name = transaction.getIncoming().getName()
-
-  folders=[]
-  folders=os.listdir(incomingPath)
-
-  # expected incoming Name, e.g.: Project_131107_M01761_0043_000000000_A5BNW_1_1
-  split=name.split("_")
-  if (len(split) == 8):
-    runningDate = split[1]
-    sequencerId = split[2]
-    sequentialNumber = split[3]
-    flowCellId = split[4] + "-" + split[5]
-    flowLane = "_".join(split[-2:])
-    incoming_sample=runningDate+ '_'+ sequencerId + '_' + sequentialNumber + '_' + flowCellId + ':' + flowLane
-
-  # expected Project_130805_M01761_0018_000000000_A59MV_1
-  if (len(split) == 7):
-    runningDate = split[1]
-    sequencerId = split[2]
-    sequentialNumber = split[3]
-    flowCellId = split[4] + "-" + split[5]
-    flowLane = split[-1]
-    incoming_sample = '_'.join([runningDate, sequencerId, sequentialNumber, flowCellId]) + ':' + flowLane
-
-  # Get the search service
-  search_service = transaction.getSearchService()
-
-  # Search for the incoming_sample which is a Flow Lane
-  sc = SearchCriteria()
-  print('Processing sample: '+ str(incoming_sample))
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, incoming_sample));
-  foundSamples = search_service.searchForSamples(sc)
-
-  # there should be only one sample because it is unique within one Flow Cell 
-  if (len(foundSamples) > 1):
-    raise Exception("More than one sample found! No unique code: " + incoming_sample)
-  elif (len(foundSamples) == 0):
-    raise Exception("No matching sample found for: " + incoming_sample)
-  else :
-    sample = foundSamples[0].getSample()
-    parents = sample.getParents()
-
-  foundParents = searchParents(search_service, parents)
-
-  # -------------------------------------------------------------------------------
-
-  usableExternalSampleName = ""
-
-  # loop over each Sample folder within a lane
-  for f in range(0,len(folders)):
-    # Create a data set and set type
-    dataSet = transaction.createNewDataSet("FASTQ_GZ")
-    dataSet.setMeasuredData(False)
-    dataSet.setPropertyValue(INDEX1, DEFAULT_INDEX)
-    dataSet.setPropertyValue(INDEX2, DEFAULT_INDEX)
-    dirName = transaction.createNewDirectory(dataSet,folders[f])
-
-    # if multiplexed samples then there is more than one folder
-    pathPerLane = incomingPath + '/' + folders[f]
-    print ("pathPerLane: " + pathPerLane)
-    
-    # get all properties of the parent samples
-    for foundParent in foundParents:
-      parent = foundParent.getSample()
-      # ArrayList 
-      parentProperties = parent.getProperties()
-      # just get the current code
-      parentCode = parent.getCode()
-      #print("Found parent code: "+ parentCode)
-
-      # reformat Java ArrayList and Sort
-      parentPropertyTypes = []
-      parentPropertiesMap = {}
-      for property in parentProperties:
-	code = property.getPropertyType().getSimpleCode()
-	parentPropertyTypes.append(code)
-	parentPropertiesMap[code] = property
-	try:
-	  barcode = parentPropertiesMap[INDEX1].tryGetAsString()
-	  if barcode == "NOINDEX":
-	    barcode = DEFAULT_INDEX
-	  else:
-	    barcode.split()[-1][:-1]
-	except:
-	  barcode = DEFAULT_INDEX
-	
-	try:
-	  index2 = parentPropertiesMap[INDEX2].tryGetAsString()
-	  if index2 == "NOINDEX":
-	    index2 = DEFAULT_INDEX
-	  else:
-	    index2.split()[-1][:-1]
-	except:
-	  index2 = DEFAULT_INDEX
-
-	# just use the first six nucleotides for the naming 
-	completeBarcode=barcode + "-" + index2
-
-      parentPropertyTypes.sort()
-      
-      print folders[f]
-      folderSplit = '-'.join(folders[f].split('_')[1:4])
-      print "Folder split: " + folderSplit
-      print str(parentCode)
-   
-      if (parentCode == folderSplit):
-
-        # BSSE-1754_C0364ACXX_CTTGTAA-AACC_L007_R1_001.fastq.gz
-        # BSSE_QGF_10002_121130_SN792_0189_AD1FBTACXX_1_NoIndex_L001_R1_001.fastq.gz
-        externalSampleName = parentPropertiesMap[EXTERNAL_SAMPLE_NAME].tryGetAsString()
-        if len(externalSampleName) > 15:
-          usableExternalSampleName = externalSampleName[0:15]
-        else:
-          usableExternalSampleName = externalSampleName
-
-        nameOfFile = parentCode.replace('-','_') + "_" + incoming_sample.replace(':', '_') + "_" + completeBarcode + "_L00" + \
-                                                     flowLane + "_" + sanitizeString(usableExternalSampleName) + METADATA_FILE_SUFFIX
-	dataSet.setPropertyValue(INDEX1, barcode)
-	dataSet.setPropertyValue(INDEX2, index2)
-        dataSet.setPropertyValue(EXTERNAL_SAMPLE_NAME, parentPropertiesMap[EXTERNAL_SAMPLE_NAME].tryGetAsString())
-	print("Creating metadata file:" + nameOfFile)
-	# get a file from the IDataSetRegistrationTransaction so it is automatically part of the data set
-	pathToFile = transaction.createNewFile(dataSet, folders[f], nameOfFile)
-	
-	fcMetaDataDict, fcMetaDataList = getFlowCellMetaData(transaction, incoming_sample.split(":")[0])
-	writeMetadataFile(pathToFile, parentPropertyTypes, parentPropertiesMap, fcMetaDataDict, fcMetaDataList)
-   
-	affiliation_name = parentPropertiesMap[AFFILIATION_PROPERTY_NAME].tryGetAsString()
-	extraCopy (affiliation_name, pathToFile) 
-
-      elif (folderSplit.startswith('lane') and barcode == "NoIndex" and index2 == "NoIndex"):
-        usableExternalSampleName = ""
-        #print("Creating metadata file for Undetermined:" + nameOfFile)
-        # get a file from the IDataSetRegistrationTransaction so it is automatically part of the data set
-        #pathToFile = transaction.createNewFile(dataSet, folders[f], nameOfFile)
-        #writeMetadataFile(pathToFile, parentPropertyTypes, parentPropertiesMap, fcMetaDataDict, fcMetaDataList, experiment)
-        #affiliation_name = parentPropertiesMap[AFFILIATION_PROPERTY_NAME].tryGetAsString()
-        #extraCopy (affiliation_name, pathToFile)
-        #for foundParent in foundParents:
-        #  addParentCode, parentProperties, parentPropertyTypes, parentPropertiesMap, experiment, barcode, index2, completeBarcode = getProperties (foundParent, fcMetaDataDict)
-        #  nameOfFile = createMetDataFileName (addParentCode, incoming_sample, completeBarcode, flowLane, METADATA_FILE_SUFFIX)
-        #  if (parentCode != addParentCode):
-        #    tmpDir = tempfile.mkdtemp()
-        #    fileName = os.path.join(tmpDir, "PARENT_" + nameOfFile)
-        #    writeMetadataFile(fileName, parentPropertyTypes, parentPropertiesMap, fcMetaDataDict, fcMetaDataList, experiment)
-        #    affiliation_name = parentPropertiesMap[AFFILIATION_PROPERTY_NAME].tryGetAsString()
-        #    extraCopy (affiliation_name, fileName)
-
-   
-    # get all fastqs in this dataSet
-    fastqFileList=getFileNames(pathPerLane)
-    print("fastqFileList:")
-    print(fastqFileList)
-
-    # put the files into the dataSet 
-    affiliation_name = parentPropertiesMap[AFFILIATION_PROPERTY_NAME].tryGetAsString()
-    for file in fastqFileList:
-        folder = os.path.dirname(file)
-        fileName = os.path.basename(file)
-        filepart, suffix = fileName.split('.',1)
-        sanitizedExternalSampleName = sanitizeString(usableExternalSampleName)
-
-        if sanitizedExternalSampleName:
-          newFile =  folder + "/" + filepart + "_" + sanitizedExternalSampleName + "." + suffix
-          print ("RENAME file " + file + " TO " + newFile)
-          os.rename(file, newFile)
-        else:
-          # Undetermined file
-          newFile = file
-
-        extraCopy (affiliation_name, newFile)
-        # finally add the files to the data set     
-        transaction.moveFile(newFile , dataSet, folders[f])
-   
-    if foundSamples.size() > 0:
-      sa = transaction.getSampleForUpdate(foundSamples[0].getSampleIdentifier())
-      sa.setPropertyValue("DATA_TRANSFERRED", create_openbis_timestamp())
-      dataSet.setSample(foundSamples[0])
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-nextseq/lib/crc32 b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-nextseq/lib/crc32
deleted file mode 100755
index 7959ca94a1fa61e47c2e4df815bb35fceb7bd809..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 10567
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
DMv_I6

diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-nextseq/lib/crc32_v2.c b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-nextseq/lib/crc32_v2.c
deleted file mode 100644
index b38d22d40f6..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-nextseq/lib/crc32_v2.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/*----------------------------------------------------------------------------*\
- *  CRC-32 version 2.0.0 by Craig Bruce, 2006-04-29.
- *
- *  This program generates the CRC-32 values for the files named in the
- *  command-line arguments.  These are the same CRC-32 values used by GZIP,
- *  PKZIP, and ZMODEM.  The Crc32_ComputeBuf() can also be detached and
- *  used independently.
- *
- *  THIS PROGRAM IS PUBLIC-DOMAIN SOFTWARE.
- *
- *  Based on the byte-oriented implementation "File Verification Using CRC"
- *  by Mark R. Nelson in Dr. Dobb's Journal, May 1992, pp. 64-67.
- *
- *  v1.0.0: original release.
- *  v1.0.1: fixed printf formats.
- *  v1.0.2: fixed something else.
- *  v1.0.3: replaced CRC constant table by generator function.
- *  v1.0.4: reformatted code, made ANSI C.  1994-12-05.
- *  v2.0.0: rewrote to use memory buffer & static table, 2006-04-29.
-\*----------------------------------------------------------------------------*/
-
-#include <stdio.h>
-#include <stdlib.h>
-
-/*----------------------------------------------------------------------------*\
- *  Local functions
-\*----------------------------------------------------------------------------*/
-
-static int Crc32_ComputeFile( FILE *file, unsigned long *outCrc32 );
-
-static unsigned long Crc32_ComputeBuf( unsigned long inCrc32, const void *buf,
-                                       size_t bufLen );
-
-/*----------------------------------------------------------------------------*\
- *  NAME:
- *     main() - main function for CRC-32 generation
- *  DESCRIPTION:
- *     Computes the CRC-32 value for the set of files named in the command-
- *     line arguments.
- *  ARGUMENTS:
- *     argc - command-line-argument count
- *     argv - command-line-argument strings
- *  RETURNS:
- *     err - 0 on success or executes exit(1) on error
- *  ERRORS:
- *     - file errors
-\*----------------------------------------------------------------------------*/
-
-int main( int argc, const char *argv[] )
-{
-    FILE *file = NULL;
-    const char *filename;
-    unsigned long argIdx;
-    unsigned long crc32;
-    int err;
-
-    /** compute crcs **/
-    if (argc < 2) {
-        /** read from 'stdin' if no arguments given **/
-        err = Crc32_ComputeFile( stdin, &crc32 );
-        if (err == -1) goto ERR_EXIT;
-        printf("crc32 = 0x%08lX for (stdin)\n", crc32 );
-    } else {
-        /** report named files in sequence **/
-        for (argIdx=1; argIdx < argc; argIdx++) {
-            filename = argv[argIdx];
-            file = fopen( filename, "rb" );
-            if (file == NULL) {
-                fprintf( stderr, "error opening file \"%s\"!\n", filename );
-                goto ERR_EXIT;
-            }
-            err = Crc32_ComputeFile( file, &crc32 );
-            if (err == -1) goto ERR_EXIT;
-            /*printf("crc32 = 0x%08lX for \"%s\"\n", crc32, filename );*/
-            printf("%08lX", crc32);
-            err = fclose( file );
-            file = NULL;
-            if (err == EOF) {
-                fprintf( stderr, "error closing file \"%s\"!\n", filename );
-                goto ERR_EXIT;
-            }
-        }
-    }
-    return( 0 );
-
-    /** error exit **/
-ERR_EXIT:
-    if (file != NULL) fclose( file );
-    exit( 1 );
-}
-
-/*----------------------------------------------------------------------------*\
- *  NAME:
- *     Crc32_ComputeFile() - compute CRC-32 value for a file
- *  DESCRIPTION:
- *     Computes the CRC-32 value for an opened file.
- *  ARGUMENTS:
- *     file - file pointer
- *     outCrc32 - (out) result CRC-32 value
- *  RETURNS:
- *     err - 0 on success or -1 on error
- *  ERRORS:
- *     - file errors
-\*----------------------------------------------------------------------------*/
-
-static int Crc32_ComputeFile( FILE *file, unsigned long *outCrc32 )
-{
-#   define CRC_BUFFER_SIZE  8192
-    unsigned char buf[CRC_BUFFER_SIZE];
-    size_t bufLen;
-
-    /** accumulate crc32 from file **/
-    *outCrc32 = 0;
-    while (1) {
-        bufLen = fread( buf, 1, CRC_BUFFER_SIZE, file );
-        if (bufLen == 0) {
-            if (ferror(file)) {
-                fprintf( stderr, "error reading file\n" );
-                goto ERR_EXIT;
-            }
-            break;
-        }
-        *outCrc32 = Crc32_ComputeBuf( *outCrc32, buf, bufLen );
-    }
-    return( 0 );
-
-    /** error exit **/
-ERR_EXIT:
-    return( -1 );
-}
-
-/*----------------------------------------------------------------------------*\
- *  NAME:
- *     Crc32_ComputeBuf() - computes the CRC-32 value of a memory buffer
- *  DESCRIPTION:
- *     Computes or accumulates the CRC-32 value for a memory buffer.
- *     The 'inCrc32' gives a previously accumulated CRC-32 value to allow
- *     a CRC to be generated for multiple sequential buffer-fuls of data.
- *     The 'inCrc32' for the first buffer must be zero.
- *  ARGUMENTS:
- *     inCrc32 - accumulated CRC-32 value, must be 0 on first call
- *     buf     - buffer to compute CRC-32 value for
- *     bufLen  - number of bytes in buffer
- *  RETURNS:
- *     crc32 - computed CRC-32 value
- *  ERRORS:
- *     (no errors are possible)
-\*----------------------------------------------------------------------------*/
-
-static unsigned long Crc32_ComputeBuf( unsigned long inCrc32, const void *buf,
-                                       size_t bufLen )
-{
-    static const unsigned long crcTable[256] = {
-   0x00000000,0x77073096,0xEE0E612C,0x990951BA,0x076DC419,0x706AF48F,0xE963A535,
-   0x9E6495A3,0x0EDB8832,0x79DCB8A4,0xE0D5E91E,0x97D2D988,0x09B64C2B,0x7EB17CBD,
-   0xE7B82D07,0x90BF1D91,0x1DB71064,0x6AB020F2,0xF3B97148,0x84BE41DE,0x1ADAD47D,
-   0x6DDDE4EB,0xF4D4B551,0x83D385C7,0x136C9856,0x646BA8C0,0xFD62F97A,0x8A65C9EC,
-   0x14015C4F,0x63066CD9,0xFA0F3D63,0x8D080DF5,0x3B6E20C8,0x4C69105E,0xD56041E4,
-   0xA2677172,0x3C03E4D1,0x4B04D447,0xD20D85FD,0xA50AB56B,0x35B5A8FA,0x42B2986C,
-   0xDBBBC9D6,0xACBCF940,0x32D86CE3,0x45DF5C75,0xDCD60DCF,0xABD13D59,0x26D930AC,
-   0x51DE003A,0xC8D75180,0xBFD06116,0x21B4F4B5,0x56B3C423,0xCFBA9599,0xB8BDA50F,
-   0x2802B89E,0x5F058808,0xC60CD9B2,0xB10BE924,0x2F6F7C87,0x58684C11,0xC1611DAB,
-   0xB6662D3D,0x76DC4190,0x01DB7106,0x98D220BC,0xEFD5102A,0x71B18589,0x06B6B51F,
-   0x9FBFE4A5,0xE8B8D433,0x7807C9A2,0x0F00F934,0x9609A88E,0xE10E9818,0x7F6A0DBB,
-   0x086D3D2D,0x91646C97,0xE6635C01,0x6B6B51F4,0x1C6C6162,0x856530D8,0xF262004E,
-   0x6C0695ED,0x1B01A57B,0x8208F4C1,0xF50FC457,0x65B0D9C6,0x12B7E950,0x8BBEB8EA,
-   0xFCB9887C,0x62DD1DDF,0x15DA2D49,0x8CD37CF3,0xFBD44C65,0x4DB26158,0x3AB551CE,
-   0xA3BC0074,0xD4BB30E2,0x4ADFA541,0x3DD895D7,0xA4D1C46D,0xD3D6F4FB,0x4369E96A,
-   0x346ED9FC,0xAD678846,0xDA60B8D0,0x44042D73,0x33031DE5,0xAA0A4C5F,0xDD0D7CC9,
-   0x5005713C,0x270241AA,0xBE0B1010,0xC90C2086,0x5768B525,0x206F85B3,0xB966D409,
-   0xCE61E49F,0x5EDEF90E,0x29D9C998,0xB0D09822,0xC7D7A8B4,0x59B33D17,0x2EB40D81,
-   0xB7BD5C3B,0xC0BA6CAD,0xEDB88320,0x9ABFB3B6,0x03B6E20C,0x74B1D29A,0xEAD54739,
-   0x9DD277AF,0x04DB2615,0x73DC1683,0xE3630B12,0x94643B84,0x0D6D6A3E,0x7A6A5AA8,
-   0xE40ECF0B,0x9309FF9D,0x0A00AE27,0x7D079EB1,0xF00F9344,0x8708A3D2,0x1E01F268,
-   0x6906C2FE,0xF762575D,0x806567CB,0x196C3671,0x6E6B06E7,0xFED41B76,0x89D32BE0,
-   0x10DA7A5A,0x67DD4ACC,0xF9B9DF6F,0x8EBEEFF9,0x17B7BE43,0x60B08ED5,0xD6D6A3E8,
-   0xA1D1937E,0x38D8C2C4,0x4FDFF252,0xD1BB67F1,0xA6BC5767,0x3FB506DD,0x48B2364B,
-   0xD80D2BDA,0xAF0A1B4C,0x36034AF6,0x41047A60,0xDF60EFC3,0xA867DF55,0x316E8EEF,
-   0x4669BE79,0xCB61B38C,0xBC66831A,0x256FD2A0,0x5268E236,0xCC0C7795,0xBB0B4703,
-   0x220216B9,0x5505262F,0xC5BA3BBE,0xB2BD0B28,0x2BB45A92,0x5CB36A04,0xC2D7FFA7,
-   0xB5D0CF31,0x2CD99E8B,0x5BDEAE1D,0x9B64C2B0,0xEC63F226,0x756AA39C,0x026D930A,
-   0x9C0906A9,0xEB0E363F,0x72076785,0x05005713,0x95BF4A82,0xE2B87A14,0x7BB12BAE,
-   0x0CB61B38,0x92D28E9B,0xE5D5BE0D,0x7CDCEFB7,0x0BDBDF21,0x86D3D2D4,0xF1D4E242,
-   0x68DDB3F8,0x1FDA836E,0x81BE16CD,0xF6B9265B,0x6FB077E1,0x18B74777,0x88085AE6,
-   0xFF0F6A70,0x66063BCA,0x11010B5C,0x8F659EFF,0xF862AE69,0x616BFFD3,0x166CCF45,
-   0xA00AE278,0xD70DD2EE,0x4E048354,0x3903B3C2,0xA7672661,0xD06016F7,0x4969474D,
-   0x3E6E77DB,0xAED16A4A,0xD9D65ADC,0x40DF0B66,0x37D83BF0,0xA9BCAE53,0xDEBB9EC5,
-   0x47B2CF7F,0x30B5FFE9,0xBDBDF21C,0xCABAC28A,0x53B39330,0x24B4A3A6,0xBAD03605,
-   0xCDD70693,0x54DE5729,0x23D967BF,0xB3667A2E,0xC4614AB8,0x5D681B02,0x2A6F2B94,
-   0xB40BBE37,0xC30C8EA1,0x5A05DF1B,0x2D02EF8D };
-    unsigned long crc32;
-    unsigned char *byteBuf;
-    size_t i;
-
-    /** accumulate crc32 for buffer **/
-    crc32 = inCrc32 ^ 0xFFFFFFFF;
-    byteBuf = (unsigned char*) buf;
-    for (i=0; i < bufLen; i++) {
-        crc32 = (crc32 >> 8) ^ crcTable[ (crc32 ^ byteBuf[i]) & 0xFF ];
-    }
-    return( crc32 ^ 0xFFFFFFFF );
-}
-
-/*----------------------------------------------------------------------------*\
- *  END OF MODULE: crc32.c
-\*----------------------------------------------------------------------------*/
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-nextseq/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-nextseq/plugin.properties
deleted file mode 100644
index e80d511ec82..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-nextseq/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-lane-nextseq
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-lane-nextseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-nextseq/register-lane-nextseq.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-nextseq/register-lane-nextseq.py
deleted file mode 100644
index 5ca8462c770..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-lane-nextseq/register-lane-nextseq.py
+++ /dev/null
@@ -1,398 +0,0 @@
-'''
-Processes each flow lane of a Sequencing run
-
-Expects as incoming folder:
-BSSE_QGF_22266_H0W8YBGXX_1
-or
-Undetermined_H0W8YBGXX
-
-Note: 
-print statements go to: ~openbis/sprint/datastore_server/log/startup_log.txt
-'''
-
-import os
-import fnmatch
-import time
-import shutil
-import re
-import subprocess
-from time import *
-from datetime import *
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from __builtin__ import file
-
-FASTQ_GZ_PATTERN = "*.fastq.gz"
-METADATA_FILE_SUFFIX = "_metadata.tsv"
-AFFILIATION_PROPERTY_NAME='AFFILIATION'
-INDEX1='BARCODE'
-INDEX2='INDEX2'
-EXTERNAL_SAMPLE_NAME='EXTERNAL_SAMPLE_NAME'
-INDEXREAD1='INDEXREAD'
-INDEXREAD2='INDEXREAD2'
-SAMPLE_TYPE = 'SAMPLE_TYPE'
-SAMPLE_CODE = 'SAMPLE_CODE'
-NCBI_ORGANISM_TAXONOMY='NCBI_ORGANISM_TAXONOMY'
-PHIX_TAXONOMY_ID='10847'
-DEFAULT_INDEX='NoIndex'
-CRC32_PATH='lib/crc32'
-CRC32_PATH='lib/a.out'
-
-# -------------------------------------------------------------------------------
-
-def getThreadProperties(transaction):
-  threadPropertyDict = {}
-  threadProperties = transaction.getGlobalState().getThreadParameters().getThreadProperties()
-  for key in threadProperties:
-    try:
-      threadPropertyDict[key] = threadProperties.getProperty(key)
-    except:
-      pass
-  return threadPropertyDict
-
-def checkOnFileSize(file):
-    return os.stat(file).st_size == 0
-
-def CRC32_from_file(filename, transaction):
-    
-    if checkOnFileSize(filename):
-        raise Exception("FILE " + filename + " IS EMPTY!")
-    
-    threadPropertyDict = getThreadProperties(transaction)
-    absolutePath = os.path.dirname(os.path.realpath(threadPropertyDict['script-path']))
-    fullPathCrc32 = (os.path.join(absolutePath, CRC32_PATH))
-    if os.path.exists(fullPathCrc32):
-        args = [fullPathCrc32, filename]
-        p = subprocess.Popen(args, stdout=subprocess.PIPE)
-        cksum = (p.communicate()[0])
-        print("Calculated crc32 checksum for: "+ os.path.basename(filename) + " " + cksum)
-    else:
-        cksum = 0 & 0xFFFFFFFF
-    return cksum
-
-def getFileNames(path):
-  '''
-  Gets all files matching a PATTERN in a path recursively
-  and returns the result as a list
-  '''
-  matches = []
-  for root, dirnames, filenames in os.walk(path):
-    for filename in fnmatch.filter(filenames, FASTQ_GZ_PATTERN):
-        matches.append(os.path.join(root, filename))
-  matches.sort()
-  return(matches)
-
-def writeMetadataFile(transaction, folder_name, meta_data_file_name, sequencing_sample_properties_dict,
-                      fcMetaDataDict, experiment, sample_space, fastqFileList, flowLane):
-  '''
-  Writes a file of meta data related to one sample
-  '''
-
-  sequencing_sample_properties_list = sequencing_sample_properties_dict.keys()
-  sequencing_sample_properties_list.sort()
-
-  expId = experiment.getIdentifier()
-  try:
-    meta_data_file = open(meta_data_file_name,'w')
-    for propertyType in sequencing_sample_properties_list:
-      if (propertyType in [u'FLOW_CELL_PROPERTIES']):
-        continue
-      if propertyType in [SAMPLE_TYPE] or propertyType in [SAMPLE_CODE]:
-         meta_data_file.write(propertyType.encode('utf-8') + "\t" +
-                         str(sequencing_sample_properties_dict[propertyType])+ "\n")
-      else:
-        meta_data_file.write(propertyType.encode('utf-8') + "\t" +
-                         sequencing_sample_properties_dict[propertyType].encode('utf-8').replace('\n',',') + "\n")
-
-    meta_data_file.write("EXPERIMENT\t" + expId + "\n".encode('utf-8'))
-    meta_data_file.write("\nFLOWCELL PROPERTIES\n".encode('utf-8'))
-    fcMetaDataDict["LANE_NUMBER"] = flowLane
-    keys = fcMetaDataDict.keys()
-    keys.sort()
-    
-    sequencer_vocabulary_description = get_vocabulary_descriptions(transaction, 'SEQUENCER')    
-    meta_data_file.write('SEQUENCER_MODEL' + "\t" + sequencer_vocabulary_description[fcMetaDataDict['SEQUENCER']].encode('utf-8') + "\n")
-    
-    for k in keys:
-      meta_data_file.write(k.encode('utf-8') + "\t" + fcMetaDataDict[k].encode('utf-8') + "\n")
-  
-    meta_data_file.write("\nFASTQ_FILES\n".encode('utf-8'))
-    for file in fastqFileList:
-        meta_data_file.write(os.path.basename(file) + "\t" + str(CRC32_from_file(file, transaction)) + "\n")
-
-  except IOError:
-    print ('File error, could not write '+ file)
-  finally:
-    meta_data_file.close()
-  
-  destinationFolder = folder_name
-  extraCopySciCore (sample_space, meta_data_file_name, destinationFolder)
-
-def create_openbis_timestamp ():
-  '''
-  Create an openBIS conform timestamp
-  '''
-  tz=localtime()[3]-gmtime()[3]
-  d=datetime.now()
-  return d.strftime("%Y-%m-%d %H:%M:%S GMT"+"%+.2d" % tz+":00")
-
-# -------------------------------------------------------------------------------
-
-  def sortedDictValues(adict):
-    '''
-    Given a dictionary it returns the values of this dict sorted 
-    by the keys
-    d = {2:1, 4:1, 1:1, 100:3, 3:5}
-    sortedDictValues(d)
-    [1, 1, 5, 1, 3]
-    '''
-    keys = adict.keys()
-    keys.sort()
-    return map(adict.get, keys)
-
-# -------------------------------------------------------------------------------
-
-def extraCopySciCore (sample_space, filePath, destinationFolder=""):
-    '''
-    Handles the extra copies of the data for transfer with datamover for SCICORE
-    '''
-    
-    dropBoxFolder = '/Users/kohleman/tmp/scicore'
-    #dropBoxFolder = '/links/shared/dsu/dss/customers/biozentrum_scicore/drop-box'
-    
-    # if a sample is part of this space list then it will be transferred to sciCore
-    SPACE_LIST = ["UNI_BASEL_SALZBURGER", "BIOCENTER_HANDSCHIN", "BIOCENTER_ZAVOLAN",
-                  "BIOCENTER_KELLER", "BIOCENTER_SILANDER", "ETHZ_NEUROSTEMX",
-                  "UNI_BASEL_UTZINGER", "UNI_BASEL_GAGNEUX"]
-    
-    basename = os.path.basename(filePath)
-    
-    if (sample_space in SPACE_LIST):
-        dirname = os.path.join(dropBoxFolder, destinationFolder)
-        if not os.path.exists(dirname):
-            os.mkdir(dirname)
-        print("COPYING " + filePath + " TO " + dirname)
-        shutil.copy(filePath, dirname)
-
-# -------------------------------------------------------------------------------
-
-def get_sample_properties (transaction, sample): 
-  
-  sample_properties_dict = {}
-  # returns Map<String, String>
-  sample_properties = sample.getSample().getProperties()
-  sequencing_sample_type = sample.getSampleType()
-  sequencing_sample_code = sample.getCode()
-  sample_properties_dict[SAMPLE_TYPE] = sequencing_sample_type
-  sample_properties_dict[SAMPLE_CODE] = sequencing_sample_code
-
-  for property in sample_properties:
-      code = property.getPropertyType().getSimpleCode()
-      sample_properties_dict[code] = property.tryGetAsString()
-  
-  return sample_properties_dict
-
-# -------------------------------------------------------------------------------
-
-def searchParents (search_service, parents):
-
-  # search for the parents
-  sc = SearchCriteria()
-  # set the Search Criteria to an OR condition, default is AND
-  sc.setOperator(SearchCriteria.SearchOperator.MATCH_ANY_CLAUSES)
-  # Get the codes for all parents
-  for parent in parents:
-    parentSubCode = parent.getSubCode()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, parentSubCode));
-  # all parents of the flow lane
-  foundParents = search_service.searchForSamples(sc)
-
-  return foundParents
-
-# -------------------------------------------------------------------------------
-
-def sanitizeString(myString):
-  return re.sub('[^A-Za-z0-9]+', '_', myString)
-
-# -------------------------------------------------------------------------------
-
-def searchSample (sample_code, search_service):
-  sc = SearchCriteria()
-  print('Searching sample: '+ str(sample_code))
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sample_code));
-  foundSamples = search_service.searchForSamples(sc)
-  return foundSamples
-
-
-def renameFiles (fastq_files, undetermined, flow_cell_id):
-    
-    newFastqFileList = []
-    for file in fastq_files:
-        if undetermined:
-            folder = os.path.dirname(file)
-            fileName = os.path.basename(file)
-            filepart, suffix = fileName.split('.',1)
-            new_file =  folder + "/" + flow_cell_id + '_' + filepart + "." + suffix
-            print ("Renaming file " + file + " to " + new_file)
-            os.rename(file, new_file)
-        else:
-            new_file = file
-        newFastqFileList.append(new_file)
-    return newFastqFileList
-
-# -------------------------------------------------------------------------------
-
-def put_files_to_dataset (transaction, dataSet, fastq_files, folder_name, flow_cell_id, sample_space, undetermined):
-
-    for file in fastq_files:
-        extraCopySciCore (sample_space, file, folder_name)
-        transaction.moveFile(file, dataSet, folder_name)
-
-# -------------------------------------------------------------------------------
-
-def split_incoming_folder_name (name):
-  split=name.split("_")
-
-  # expected incoming Name, e.g.: BSSE_QGF_22266_H0W8YBGXX_1
-  if (len(split) == 5):
-    sample_code = '-'.join([split[0], split[1], split[2]])
-    flowCellId = split[3]
-    flowLane = split[-1]
-    undetermined = False
-
-  # expected Undetermined_H0W8YBGXX
-  if (len(split) == 2):
-    sample_code = ''
-    flowCellId = split[-1]
-    flowLane = "1"
-    undetermined = True
-  
-  incoming_sample = flowCellId + ':' + flowLane
-  return sample_code, flowCellId, flowLane, incoming_sample, undetermined
-
-# -------------------------------------------------------------------------------
-
-def get_vocabulary_descriptions (transaction, vocabulary_name):
-  vocabulary_descriptions_dict = {}
-  vocabulary = transaction.getVocabulary(vocabulary_name)
-  vocabulary_terms = vocabulary.getTerms()
-  for term in vocabulary_terms:
-    vocabulary_descriptions_dict[term.getCode()] = term.getDescription()
-  return vocabulary_descriptions_dict
-
-# -------------------------------------------------------------------------------
-
-def process(transaction):
-
-  undetermined = False
-
-  print("\n" + str(datetime.now()))
-
-  incomingPath = transaction.getIncoming().getAbsolutePath()
-  name = transaction.getIncoming().getName()
-  print("register-lane-nextseq.py is processing: " + name)
-  sample_code, flowCellId, flowLane, incoming_sample, undetermined =  split_incoming_folder_name (name)
-
-  # get all fastqs
-  fastq_files=getFileNames(incomingPath)
-
-  # BSSE-QGF-22266-H0W8YBGXX-1-654-BC3-TTAGGC_S1_L001_R1_001.fastq.gz
-  # BSSE-QGF-22051-H0T25AGXX-1-1-1-TAAGGCGA-CTCTCTAT_S46_L001_R1_001.fastq.gz
-  first_fastq_file = os.path.basename(fastq_files[0])
-
-  # Get the search service
-  search_service = transaction.getSearchService()
-
-  flowcell_sample_immutable = searchSample (flowCellId, search_service)
-  fcMetaDataDict = get_sample_properties(transaction, flowcell_sample_immutable[0])
-  foundLane = searchSample (incoming_sample, search_service)
-
-  # there should be only one sample because it is unique within one Flow Cell 
-  if (len(foundLane) > 1):
-    raise Exception("More than one sample found! No unique code: " + incoming_sample)
-  elif (len(foundLane) == 0):
-    raise Exception("No matching sample found for: " + incoming_sample)
-  else :
-    sample = foundLane[0].getSample()
-    parents = sample.getParents()
-
-  # Create a data set and set type
-  dataSet = transaction.createNewDataSet("FASTQ_GZ")
-  dataSet.setMeasuredData(False)
-  dataSet.setPropertyValue(INDEX1, DEFAULT_INDEX)
-  dataSet.setPropertyValue(INDEX2, DEFAULT_INDEX)
-  dirName = transaction.createNewDirectory(dataSet,name)
-
-  if not undetermined:
-    newFastqFiles = fastq_files
-    foundSample = searchSample (sample_code, search_service)
-    sequencing_sample = foundSample[0].getSample()
-    experiment = sequencing_sample.getExperiment()
-    sequencing_sample_code = sequencing_sample.getCode()
-    print("sequencing_sample_code: "+ sequencing_sample_code) 
-
-    sequencing_sample_properties_dict = get_sample_properties (transaction, foundSample[0])
-    
-    if (INDEX1 in sequencing_sample_properties_dict) and (fcMetaDataDict[INDEXREAD1] > 0):
-      #print(sequencing_sample_properties_dict[INDEX1])
-      dataSet.setPropertyValue(INDEX1, sequencing_sample_properties_dict[INDEX1])
-    if (INDEX2 in sequencing_sample_properties_dict) and (fcMetaDataDict[INDEXREAD2] > 0):
-      dataSet.setPropertyValue(INDEX2, sequencing_sample_properties_dict[INDEX2])
-    dataSet.setPropertyValue(EXTERNAL_SAMPLE_NAME, sequencing_sample_properties_dict[EXTERNAL_SAMPLE_NAME])
-    sample_space = foundSample[0].getSpace()
-    
-    filepart, suffix = first_fastq_file.split('.',1)
-    meta_data_file_name = filepart.rsplit('_',2)[0] +  METADATA_FILE_SUFFIX
-    # get a file from the IDataSetRegistrationTransaction so it is automatically part of the data set
-    meta_data_file_path = transaction.createNewFile(dataSet, name, meta_data_file_name)
-    writeMetadataFile(transaction, name, meta_data_file_path, sequencing_sample_properties_dict,
-                      fcMetaDataDict, experiment, sample_space, fastq_files, flowLane)
-    affiliation_for_Undetermined = sample_space
-  
-  # Undetermined Files
-  else:
-    sample_space = ""
-    affiliation_for_Undetermined = ""
-    newFastqFiles = []
-    lane_parents = searchParents (search_service, parents)
-    newFastqFiles = renameFiles(fastq_files, undetermined, flowCellId)
-    for parent in lane_parents:
-        sequencing_sample_properties_dict = get_sample_properties (transaction, parent)
-        parent_sample = parent.getSample()
-        sample_code = parent_sample.getCode()
-        experiment = parent_sample.getExperiment()
-        sample_space = parent.getSpace()
-        print(sample_space)
-     
-        # Special Sample Types without index (e.g. ILLUMINA_SEQUENCING_NEUROSTEMX_SINGLECELL) are caught here.
-        # as those samples do not have a NCBI ORGANISM TAXONOMY    
-        if NCBI_ORGANISM_TAXONOMY not in sequencing_sample_properties_dict:
-            print(sample_code + ": Processing Sample without NCBI ORGANISM TAXONOMY: ILLUMINA_SEQUENCING_NEUROSTEMX_SINGLECELL")
-            meta_data_file_path = transaction.createNewFile(dataSet, name, sample_code + '_' + flowCellId + '_' + first_fastq_file.split('.')[0] + METADATA_FILE_SUFFIX)
-            writeMetadataFile(transaction, name, meta_data_file_path, sequencing_sample_properties_dict,
-                       fcMetaDataDict, experiment, sample_space, newFastqFiles, flowLane)
-            affiliation_for_Undetermined = sample_space
-        
-        elif (INDEX1 not in sequencing_sample_properties_dict or sequencing_sample_properties_dict[INDEX1]== 'NOINDEX') and \
-             (INDEX2 not in sequencing_sample_properties_dict or sequencing_sample_properties_dict[INDEX2]== 'NOINDEX') and \
-              (sequencing_sample_properties_dict[NCBI_ORGANISM_TAXONOMY] != PHIX_TAXONOMY_ID):
-          print('NONINDEXED sample and Taxonomy id is NOT ' + PHIX_TAXONOMY_ID +', probably a pool: ' + sample_code)
-          meta_data_file_path = transaction.createNewFile(dataSet, name, sample_code + '_' + flowCellId + '_' + first_fastq_file.split('.')[0] + METADATA_FILE_SUFFIX)
-          writeMetadataFile(transaction, name, meta_data_file_path, sequencing_sample_properties_dict,
-                         fcMetaDataDict, experiment, sample_space, newFastqFiles, flowLane)
-          affiliation_for_Undetermined = sample_space
-        # PARENTS:
-        else:
-          # Create Parent Meta data
-          print(sample_code + ": Create parent meta data file")
-          meta_data_file_path = transaction.createNewFile(dataSet, name, 'PARENT_' + sample_code + '_' + flowCellId + METADATA_FILE_SUFFIX)
-          writeMetadataFile(transaction, name, meta_data_file_path, sequencing_sample_properties_dict,
-                         fcMetaDataDict, experiment, sample_space, [], flowLane)
-          continue
-      
-  put_files_to_dataset (transaction, dataSet, newFastqFiles, name, flowCellId, affiliation_for_Undetermined, undetermined)
-
-  if foundLane.size() > 0:
-    sa = transaction.getSampleForUpdate(foundLane[0].getSampleIdentifier())
-    sa.setPropertyValue("DATA_TRANSFERRED", create_openbis_timestamp())
-    dataSet.setSample(foundLane[0])
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-macs/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-macs/plugin.properties
deleted file mode 100644
index 9d5511bd58c..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-macs/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-macs
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-macs.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-macs/register-macs.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-macs/register-macs.py
deleted file mode 100755
index 17a9d5b074c..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-macs/register-macs.py
+++ /dev/null
@@ -1,22 +0,0 @@
-
-def process(transaction):
-  # Create a data set and set type
-  dataSet = transaction.createNewDataSet("MACS_OUTPUT")
-  dataSet.setPropertyValue("MACS_VERSION", "1.4.0RC2")
-  dataSet.setMeasuredData(False)
-
-  incomingPath = incoming.getAbsolutePath()
-   
-  # Add the incoming file into the data set
-  transaction.moveFile(incomingPath, dataSet)
-
-  # rsplit not in Python 2.2
-  #sampleName = ":".join(incomingPath.split("/")[-1].rsplit("_",1))
-  flowCell =  "_".join((incomingPath.split("/")[-1].split("_")[2:-1]))
-  lane = (incomingPath.split("/")[-1]).split("_")[-1]
-  sampleName = flowCell + ":" + lane
-   
-  # Set the owner of the data set -- the specified sample
-  sample = transaction.getSample("/BSSE_BEISEL/" + sampleName)
-
-  dataSet.setSample(sample)
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-runstatistics/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-runstatistics/plugin.properties
deleted file mode 100644
index 8572688f224..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-runstatistics/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-runstatistics
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-runstatistics.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-runstatistics/register-runstatistics.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-runstatistics/register-runstatistics.py
deleted file mode 100644
index d7b8b8400d3..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-runstatistics/register-runstatistics.py
+++ /dev/null
@@ -1,73 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Registers an incoming directory as a data set in openBIS. The name of the directory is used to
-search for the matching sample. 
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for HiSeq runs: 110715_SN792_0054_BC035RACXX
-expected incoming Name for GAII runs: 110812_6353WAAXX
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import shutil
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getPath()
-  incomingFolder = transaction.getIncoming().getName()
-
-  folders=[]
-  folders=os.listdir(incomingPath)
-
-  split=incomingFolder.split("_")
-  if (len(split) == 4):
-    IS_HISEQ_RUN=True
-  if (len(split) == 2):
-    IS_HISEQ_RUN=False
-
-  # Get the search service
-  search_service = transaction.getSearchService()
-   
-  # Search for the sample
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, incomingFolder));
-  foundSamples = search_service.searchForSamples(sc)
-
-  if foundSamples.size() > 0:
-   
-    # Search for another data set of the same sample and make it a child of it 
-    sampleSc = SearchCriteria()
-    sampleSc.addSubCriteria(SearchSubCriteria.createSampleContainerCriteria(sc))
-    foundContainedSamples = search_service.searchForSamples(sampleSc)
-    if foundContainedSamples.size() > 0:
-      for fcs in range(0,foundContainedSamples.size()):
-	dataSet = transaction.createNewDataSet("RUNINFO")
-	dataSet.setMeasuredData(False)
-	dataSet.setSample(foundContainedSamples[fcs])
-	# Add the incoming file into the data set
-	shutil.copytree(incomingPath, incomingPath + "_" + str(fcs+1))
-	transaction.moveFile(incomingPath + "_" + str(fcs+1), dataSet)
-    
-  shutil.rmtree(incomingPath)
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-thumbnails/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-thumbnails/plugin.properties
deleted file mode 100644
index 5b89e279f2f..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-thumbnails/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-thumbnails
-#incoming-dir = /links/sonas/cisd/store/incoming-flowCell
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-thumbnails.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-thumbnails/register-thumbnails.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-thumbnails/register-thumbnails.py
deleted file mode 100644
index 60937ed4520..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-thumbnails/register-thumbnails.py
+++ /dev/null
@@ -1,55 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Registers an incoming directory as a data set in openBIS. The name of the directory is used to
-search for the matching sample. 
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for HiSeq runs: 110715_SN792_0054_BC035RACXX
-expected incoming Name for GAII runs: 110812_6353WAAXX
-
-@author:
-Manuel Kohler
-'''
-
-import xml.etree.ElementTree as etree
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getPath()
-  name = transaction.getIncoming().getName()
-
-  dataSet = transaction.createNewDataSet("THUMBNAILS")
-
-  # Create a data set and set type
-  dataSet.setMeasuredData(False)
-    
-  # Get the search service
-  search_service = transaction.getSearchService()
-   
-  # Search for the sample
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, name));
-  foundSamples = search_service.searchForSamples(sc)
-
-  if foundSamples.size() > 0:
-    # Add the incoming file into the data set
-    transaction.moveFile(incomingPath, dataSet)
-    dataSet.setSample(foundSamples[0])
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-unaligned-miseq/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-unaligned-miseq/plugin.properties
deleted file mode 100644
index fd7c9481927..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-unaligned-miseq/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${root}/dss/register-unaligned-miseq
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-unaligned-miseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-unaligned-miseq/register-unaligned-miseq.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-unaligned-miseq/register-unaligned-miseq.py
deleted file mode 100755
index 97397b4e0bc..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-unaligned-miseq/register-unaligned-miseq.py
+++ /dev/null
@@ -1,176 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Expects as incoming folder: <FlowCell>/Unaligned_no_mismatch
-
-@note: 
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import glob
-import shutil
-import time
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-BASECALL_STATS_FOLDER = 'Basecall_Stats_'
-REGEX_FILES = '*.*'
-REGEX_MAKEFILE = 'Make*'
-REGEX_LANES='/P*'
-REGEX_UNDETERMINED = '/U*/Sample*'
-UNALIGNED_FOLDER='Unaligned_no_mismatch'
-LANE_FOLDER='/links/shared/dsu/dss/register-lane-miseq/'
-MARKER_STRING='.MARKER_is_finished_'
-
-def touch_markerfile(filename):
-  try:  
-    # do a touch
-    open(filename, 'w').close()
-  except:
-    print('Could not touch ' + filename)  
-
-def searchForLaneParents(transaction, sampleCode):
-
-  search_service = transaction.getSearchService()
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleCode))
-  foundSamples = search_service.searchForSamples(sc)
-  # there should be only one sample because it is unique within one Flow Cell 
-  if (len(foundSamples) > 1):
-    raise Exception("More than one sample found! No unique code: " + sampleCode)
-  elif (len(foundSamples) == 0):
-    raise Exception("No matching sample found for: " + sampleCode)
-  else :
-    sample = foundSamples[0].getSample()
-    parents = sample.getParents()
-
-  # search for the parents
-  sc = SearchCriteria()
-  # set the Search Criteria to an OR condition, default is AND
-  sc.setOperator(SearchCriteria.SearchOperator.MATCH_ANY_CLAUSES)
-  # Get the codes for all parents
-  for parent in parents:
-    parentSubCode = parent.getSubCode()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, parentSubCode));
-  # all parents of the flow lane
-  foundParents = search_service.searchForSamples(sc)
-  
-  parentCodeList = []
-
-  for foundParent in foundParents:
-    parent = foundParent.getSample()
-    # ArrayList 
-    parentProperties = parent.getProperties()
-    # just get the current code
-    parentCode = parent.getCode()
-    parentCodeList.append(parentCode)
-    #print("Found parent code: "+ parentCode)
-
-  return parentCodeList
-
-
-def renameFiles(transaction, dir, flowcellName):
-  # Limit of Samples when the Sample Code is still used in the renaming. If Number of Samples is
-  # bigger than this number, we just write the number in the file name.
-
-  MAX_SAMPLES = 20
-  FACILITY_CODE = "BSSE_QGF_"
-
-  for root, dirs, files in os.walk(dir):
-    for file in files:
-      lane = file.split("_")[0][-1]      
-      if lane.isdigit():
-        sampleCode = flowcellName + ":" + lane 
-        print sampleCode
-        parentCodeList = searchForLaneParents(transaction, sampleCode)
-        print parentCodeList
-        length = len(parentCodeList)
-        if length > MAX_SAMPLES:
-          # BSSE_QGF_96_samples_C1A8YACXX_Undetermined_L008_R1_001.fastq.gz
-          os.rename(root + '/' + file, root + "/" + FACILITY_CODE + str(length) + "_samples_" + flowcellName + "_" + file)
-        else:
-          # BSSE_QGF_10001_10002_10003_10004_C1A8YACXX_Undetermined_L008_R1_001.fastq.gz
-          SampleCodeString = "_".join([(e.split("-")[-1]) for e in parentCodeList])
-          os.rename(root + '/' + file, root + "/" + FACILITY_CODE + SampleCodeString + "_" + flowcellName + "_" + file)
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getPath()
-  name = transaction.getIncoming().getName()
-
-  split=name.split("_")
-  DSTYPE='ILLUMINA_MISEQ_OUTPUT'
-  #flowcell=name.split('_')[-1].split('-')[-1]
-  flowcell=name.split('_')[-1]
-
-  #move Lanes into a different drop box
-  laneList=glob.glob(incomingPath + '/'+ UNALIGNED_FOLDER + REGEX_LANES)
-  laneList.sort()
-
-  undeterminedList=glob.glob(incomingPath + '/'+ UNALIGNED_FOLDER + REGEX_UNDETERMINED)
-  undeterminedList.sort()
-
-  # add the Flow Cell Name to the Undetermined FASTQ files
-  [renameFiles(transaction, dir, name) for dir in undeterminedList]
-
-  # Multiplexing:
-  # First move the Undetermined reads to the other ones 
-  [shutil.move(undeterminedLane, laneList[int(undeterminedLane.split('/')[-1][-1])-1] +'/' + undeterminedLane.split('/')[-1]) for undeterminedLane in undeterminedList]
-
-  [shutil.move(lane, LANE_FOLDER+lane.split('/')[-1]) for lane in laneList]
-  markerFileList = [touch_markerfile(LANE_FOLDER+MARKER_STRING+lane.split('/')[-1]) for lane in laneList]
-
-  # Create a data set and set type
-  dataSet = transaction.createNewDataSet("BASECALL_STATS")
-  dataSet.setMeasuredData(False)
-    
-  # Build up a list of file which are part of the data set
-  fileList=glob.glob(incomingPath + '/'+ UNALIGNED_FOLDER + '/' + REGEX_FILES)
-  [fileList.append(i) for i in glob.glob(incomingPath + '/' + UNALIGNED_FOLDER +'/' +REGEX_MAKEFILE)]
-
-  # Add the incoming file into the data set
-  transaction.createNewDirectory(dataSet, UNALIGNED_FOLDER) 
-  # move all files is data set
-  [transaction.moveFile(file, dataSet, UNALIGNED_FOLDER)  for file in fileList]
-  # move base call stat dir into data set
-  print("flowcell: "+flowcell)
-  transaction.moveFile(incomingPath + '/' + UNALIGNED_FOLDER + '/' +  BASECALL_STATS_FOLDER + flowcell, dataSet, UNALIGNED_FOLDER + '/')
-    
-  # Get the search service
-  search_service = transaction.getSearchService()
-
-  # Search for the sample
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, name))
-  foundSamples = search_service.searchForSamples(sc)
-
-  if foundSamples.size() > 0:
-    dataSet.setSample(foundSamples[0])
-
-    # Search for another data set of the same sample and make it a child of it 
-    dataSetSc = SearchCriteria()
-    dataSetSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, DSTYPE))
-    dataSetSc.addSubCriteria(SearchSubCriteria.createSampleCriteria(sc))
-    foundDataSets = search_service.searchForDataSets(dataSetSc)
-    if foundDataSets.size() > 0:
-      dataSet.setParentDatasets([ds.getDataSetCode() for ds in foundDataSets])
-
-  shutil.rmtree(incomingPath)
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-unaligned/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-unaligned/plugin.properties
deleted file mode 100644
index 9c8c317b60d..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-unaligned/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-unaligned
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-unaligned.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-unaligned/register-unaligned.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-unaligned/register-unaligned.py
deleted file mode 100755
index c8e364f1795..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-unaligned/register-unaligned.py
+++ /dev/null
@@ -1,195 +0,0 @@
-'''
-@copyright:
-2012 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Expects as incoming folder: <FlowCell>/Unaligned_no_mismatch
-
-@note: 
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import glob
-import shutil
-import time
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-BASECALL_STATS_FOLDER = 'Basecall_Stats_'
-REGEX_FILES = '*.*'
-REGEX_MAKEFILE = 'Make*'
-REGEX_LANES='/P*'
-REGEX_UNDETERMINED = '/U*/Sample*'
-LANE_FOLDER='/links/shared/dsu/dss/register-lane-hiseq/'
-MARKER_STRING='.MARKER_is_finished_'
-
-def touch_markerfile(filename):
-  try:  
-    # do a touch
-    open(filename, 'w').close()
-  except:
-    print('Could not touch ' + filename)  
-
-def searchForLaneParents(transaction, sampleCode):
-
-  search_service = transaction.getSearchService()
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleCode))
-  foundSamples = search_service.searchForSamples(sc)
-  # there should be only one sample because it is unique within one Flow Cell 
-  if (len(foundSamples) > 1):
-    raise Exception("More than one sample found! No unique code: " + sampleCode)
-  elif (len(foundSamples) == 0):
-    raise Exception("No matching sample found for: " + sampleCode)
-  else :
-    sample = foundSamples[0].getSample()
-    parents = sample.getParents()
-
-  # search for the parents
-  sc = SearchCriteria()
-  # set the Search Criteria to an OR condition, default is AND
-  sc.setOperator(SearchCriteria.SearchOperator.MATCH_ANY_CLAUSES)
-  # Get the codes for all parents
-  for parent in parents:
-    parentSubCode = parent.getSubCode()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, parentSubCode));
-  # all parents of the flow lane
-  foundParents = search_service.searchForSamples(sc)
-  
-  parentCodeList = []
-
-  for foundParent in foundParents:
-    parent = foundParent.getSample()
-    # ArrayList 
-    parentProperties = parent.getProperties()
-    # just get the current code
-    parentCode = parent.getCode()
-    parentCodeList.append(parentCode)
-    #print("Found parent code: "+ parentCode)
-
-  return parentCodeList
-
-
-def renameFiles(transaction, dir, flowcellName):
-  # Limit of Samples when the Sample Code is still used in the renaming. If Number of Samples is
-  # bigger than this number, we just write the number in the file name.
-
-  MAX_SAMPLES = 20
-  FACILITY_CODE = "BSSE_QGF_"
-
-  for root, dirs, files in os.walk(dir):
-    for file in files:
-      lane = file.split("_")[0][-1]      
-      if lane.isdigit():
-        sampleCode = flowcellName + ":" + lane 
-        print sampleCode
-        parentCodeList = searchForLaneParents(transaction, sampleCode)
-        print parentCodeList
-        length = len(parentCodeList)
-        if length > MAX_SAMPLES:
-          # BSSE_QGF_96_samples_C1A8YACXX_Undetermined_L008_R1_001.fastq.gz
-          os.rename(root + '/' + file, root + "/" + FACILITY_CODE + str(length) + "_samples_" + flowcellName + "_" + file)
-        else:
-          # BSSE_QGF_10001_10002_10003_10004_C1A8YACXX_Undetermined_L008_R1_001.fastq.gz
-          SampleCodeString = "_".join([(e.split("-")[-1]) for e in parentCodeList])
-          os.rename(root + '/' + file, root + "/" + FACILITY_CODE + SampleCodeString + "_" + flowcellName + "_" + file)
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getPath()
-  name = transaction.getIncoming().getName().split('-')[0]
-  print("incomingPath")
-  print(incomingPath)
-  UNALIGNED_FOLDER=glob.glob(os.path.join(incomingPath, 'Unaligned_[0-9]'))[0]
-  #UNALIGNED_FOLDER=incomingPath
-
-  split=name.split("_")
-  if (len(split) == 4):
-    DSTYPE='ILLUMINA_HISEQ_OUTPUT'
-    flowcell=name.split("_")[-1][1:]
-  if (len(split) ==2):
-    DSTYPE='ILLUMINA_GA_OUTPUT'
-    flowcell=name.split("_")[-1]
-
-  #move Lanes into a different drop box
-  laneList=glob.glob(UNALIGNED_FOLDER + REGEX_LANES)
-  laneList.sort()
-  print ("-------------- Lane List --------------")
-  print laneList
-
-  undeterminedList=glob.glob(UNALIGNED_FOLDER + REGEX_UNDETERMINED)
-  print ("GLOB:")
-  print(UNALIGNED_FOLDER + REGEX_UNDETERMINED)
-  undeterminedList.sort()
-  print ("undeterminedList: ")
-  print (undeterminedList)
-
-  # add the Flow Cell Name to the Undetermined FASTQ files
-  [renameFiles(transaction, dir, name) for dir in undeterminedList]
-
-  # Multiplexing:
-  # First move the Undetermined reads to the other ones 
-  try:
-    #[shutil.move(undeterminedLane, laneList[int(undeterminedLane.split('/')[-1][-1])-1] +'/' + undeterminedLane.split('/')[-1]) for undeterminedLane in undeterminedList]
-    print("SHUTIL:")
-    print(undeterminedList[0], os.path.join(laneList[0], os.path.basename(undeterminedList[0])))
-    shutil.move(undeterminedList[0], os.path.join(laneList[0], os.path.basename(undeterminedList[0])))
-  except:
-    print ("laneList is not matching the total number of lanes (Missing Project<xxx> folder?)")
-
-  [shutil.move(lane, LANE_FOLDER+lane.split('/')[-1]) for lane in laneList]
-  markerFileList = [touch_markerfile(LANE_FOLDER+MARKER_STRING+lane.split('/')[-1]) for lane in laneList]
-
-  # Create a data set and set type
-  dataSet = transaction.createNewDataSet("BASECALL_STATS")
-  dataSet.setMeasuredData(False)
-    
-  # Build up a list of file which are part of the data set
-  fileList=glob.glob(UNALIGNED_FOLDER + '/' + REGEX_FILES)
-  [fileList.append(i) for i in glob.glob( UNALIGNED_FOLDER +'/' +REGEX_MAKEFILE)]
-
-  basename_folder = os.path.basename(UNALIGNED_FOLDER)
-  # Add the incoming file into the data set
-  transaction.createNewDirectory(dataSet, basename_folder) 
-  # move all files in data set
-  [transaction.moveFile(file, dataSet, basename_folder)  for file in fileList]
-  print("MOVE:")
-  print(os.path.join(UNALIGNED_FOLDER,  BASECALL_STATS_FOLDER + flowcell))
-  transaction.moveFile(os.path.join(UNALIGNED_FOLDER,  BASECALL_STATS_FOLDER + flowcell), dataSet, basename_folder)
-    
-  # Get the search service
-  search_service = transaction.getSearchService()
-
-  # Search for the sample
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, transaction.getIncoming().getName().replace("-", ":")))
-  foundSamples = search_service.searchForSamples(sc)
-
-  if foundSamples.size() > 0:
-    dataSet.setSample(foundSamples[0])
-
-    # Search for another data set of the same sample and make it a child of it 
-    dataSetSc = SearchCriteria()
-    dataSetSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, DSTYPE))
-    dataSetSc.addSubCriteria(SearchSubCriteria.createSampleCriteria(sc))
-    foundDataSets = search_service.searchForDataSets(dataSetSc)
-    if foundDataSets.size() > 0:
-      dataSet.setParentDatasets([ds.getDataSetCode() for ds in foundDataSets])
-
-  #shutil.rmtree(incomingPath)
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-undetermined/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-undetermined/plugin.properties
deleted file mode 100644
index c78a57ca244..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-undetermined/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/register-undetermined
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-undetermined.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-undetermined/register-undetermined.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-undetermined/register-undetermined.py
deleted file mode 100644
index 9a7414e4081..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register-undetermined/register-undetermined.py
+++ /dev/null
@@ -1,63 +0,0 @@
-'''
-@copyright:
-2014 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import shutil
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-
-def splitFolderName (folderName):
-    runFolder, lane = folderName.rsplit("-", 1)
-    
-    # check if it is a NextSeq run, as we use only the Flowcell code as a Sample code 
-    if ("NS" in runFolder):
-        return runFolder.split("_")[-1][1:] + ":" + lane
-        
-    return runFolder + ":" + lane
-
-def searchSample (transaction, sampleCode):
-    # Get the search service
-    search_service = transaction.getSearchService()
-
-    print("Searching for " + sampleCode)
-    # Search for the sample
-    sc = SearchCriteria()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleCode))
-    foundSamples = search_service.searchForSamples(sc)
-    assert(len(foundSamples), 1)
-    return foundSamples[0]
-
-def process(transaction):
-
-    # expected incoming folder names:
-    # MiSeq: 141217_D00535_0040_BC6GHLANXX-1
-    # NextSeq: 141217_NS500318_0034_AH1766BGXX-1
-    # HiSeq: 141204_D00535_0035_BC5LPVANXX-8
-
-    incomingFolder = transaction.getIncoming().getName()
-    flowLaneName = splitFolderName(incomingFolder) 
-    flowLane = searchSample(transaction, flowLaneName)
-
-    dataSet = transaction.createNewDataSet("UNDETERMINED_READS_DISTRIBUTION")
-    dataSet.setMeasuredData(False)
-    dataSet.setSample(flowLane)
-    transaction.moveFile(transaction.getIncoming().getPath(), dataSet)
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register_aggregated-basecall-stats/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register_aggregated-basecall-stats/plugin.properties
deleted file mode 100644
index b5620f9aa35..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register_aggregated-basecall-stats/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${root}/dss/register-aggregated-basecall-stats
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-aggregated-basecall-stats.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register_aggregated-basecall-stats/register-aggregated-basecall-stats.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register_aggregated-basecall-stats/register-aggregated-basecall-stats.py
deleted file mode 100644
index b9bfdfb031c..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/drop-boxes/register_aggregated-basecall-stats/register-aggregated-basecall-stats.py
+++ /dev/null
@@ -1,72 +0,0 @@
-'''
-@copyright:
-2014 ETH Zuerich, CISD
-    
-@license: 
-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.
-
-@description:
-Registers an incoming directory as a data set in openBIS. The name of the directory is used to
-search for the matching sample. 
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-expected incoming Name for HiSeq runs: 110715_SN792_0054_BC035RACXX
-expected incoming Name for GAII runs: 110812_6353WAAXX
-expected incoming Name for MiSeq runs: 121218_M00721_0017_000000000-A0T19
-
-@author:
-Manuel Kohler
-'''
-
-import os
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-def process(transaction):
-
-  incomingPath = transaction.getIncoming().getPath()
-  incomingFolder = transaction.getIncoming().getName()
-  
-  folders=os.listdir(incomingPath)
-
-  # expected incoming Name, e.g.: 110715_SN792_0054_BC035RACXX
-
-  # Create a data set and set type
-  dataSet = transaction.createNewDataSet("AGGREGATED_BASECALL_STATS")
-  dataSet.setMeasuredData(False)
-
-  dataSet.setPropertyValue("MISMATCH_IN_INDEX", "NONE")
-    
-  # Get the search service
-  search_service = transaction.getSearchService()
-   
-  # Add the incoming file into the data set
-  transaction.moveFile(incomingPath, dataSet)
-    
-  # Search for the sample
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, incomingPath))
-  foundSamples = search_service.searchForSamples(sc)
-  
-
-  if foundSamples.size() > 0:
-    dataSet.setSample(foundSamples[0])
-
-    # Search for another data set of the same sample
-    #dataSetSc = SearchCriteria()
-    #dataSetSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, 'ILLUMINA_HISEQ_OUTPUT'))
-    #dataSetSc.addSubCriteria(SearchSubCriteria.createSampleCriteria(sc))
-    #foundDataSets = search_service.searchForDataSets(dataSetSc)
-    #if foundDataSets.size() > 0:
-    #  dataSet.setParentDatasets([ds.getDataSetCode() for ds in foundDataSets])
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/setInvoiceSent/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/setInvoiceSent/plugin.properties
deleted file mode 100644
index 253d1a19bb6..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/setInvoiceSent/plugin.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-label = Set Invoice Sent property
-class = ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython.JythonIngestionService
-script-path = script.py
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/setInvoiceSent/script.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/setInvoiceSent/script.py
deleted file mode 100644
index a01000b8dc9..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/setInvoiceSent/script.py
+++ /dev/null
@@ -1,65 +0,0 @@
-def process(tr, parameters, tableBuilder):
-  
-  import subprocess
-  import os
-  import re
-  from java.util import EnumSet
-  from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-  from ch.systemsx.cisd.openbis.dss.client.api.v1 import OpenbisServiceFacadeFactory
-  from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SampleFetchOption
-
-  def sanitizeString(myString):
-    myString = myString.replace(u'ä', 'ae')
-    myString = myString.replace(u'ü', 'ue')
-    myString = myString.replace(u'ö', 'oe')
-    return re.sub('[^A-Za-z0-9]+', '_', myString)
-
-  sampleId = parameters.get("sampleId")
-  plainPi = parameters.get("pI")
-  flowcellId = sampleId.split('/')[-1]
-
-  # Search for the sample
-  search_service = tr.getSearchService()
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowcellId));
-  myFC = search_service.searchForSamples(sc)
-  try:
-    assert myFC.size() == 1
-  except AssertionError:
-    print (str(myFC.size()) +  " " + flowcellId)
-
-  for p in myFC:
-    numberOfLanes = int(p.getPropertyValue('LANECOUNT'))
-
-  for lane in range(1, numberOfLanes + 2):
-    myLane = flowcellId + ":" + str(lane)
-    laneSc = SearchCriteria();
-    laneSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, myLane));
-    laneList = search_service.searchForSamples(laneSc)
-
-    if not laneList:
-      myLane = flowcellId + ":1_" + str(lane)
-      print("myLane: " + myLane)
-      laneSc = SearchCriteria();
-      laneSc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, myLane));
-      laneList = search_service.searchForSamples(laneSc)
-
-    for l in laneList:
-      laneParents = l.getParentSampleIdentifiers()
-
-      for sampleCode in laneParents:
-        Sample = tr.getSample(sampleCode)
-        FullSamplePi =  Sample.getPropertyValue('PRINCIPAL_INVESTIGATOR_NAME')
-        samplePi = sanitizeString(FullSamplePi)
-        print samplePi + " == " + sanitizeString(plainPi) + " ?"
-
-        if (samplePi == sanitizeString(plainPi)):
-          print "Setting Property 'INVOICE_SENT' to true for sample: " + sampleCode
-          updateableSample = tr.getSampleForUpdate(sampleCode)
-          updateableSample.setPropertyValue('INVOICE', 'True')
-
-  tableBuilder.addHeader("CSV") 
-
-  row = tableBuilder.addRow()
-  row.setCell("CSV",plainPi)
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerCreateSampleSheet/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerCreateSampleSheet/plugin.properties
deleted file mode 100644
index f759e0ab0f4..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerCreateSampleSheet/plugin.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-label = Trigger Sample Sheet Creation
-class = ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython.JythonAggregationService
-script-path = script.py
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerCreateSampleSheet/script.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerCreateSampleSheet/script.py
deleted file mode 100644
index 6fbad460abe..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerCreateSampleSheet/script.py
+++ /dev/null
@@ -1,44 +0,0 @@
-def aggregate(parameters, tableBuilder):
-  
-  import subprocess
-  sampleSheetBinary = "/links/application/dsu/createSampleSheet/createSampleSheet.sh"
-  sampleSheetBinaryMiSeq = "/links/application/dsu/createSampleSheet/createSampleSheet_miseq.sh"
-
-  miSeqPath = "/links/shared/dsu/runs/yoda"
-
-  sampleId = parameters.get("sampleId")
-  sendEmail = parameters.get("sendEmail")
-  miSeqRun = parameters.get("miSeqRun")
-  flowcellId = sampleId.split('/')[-1]
-
-  if '-' in flowcellId:
-    flowCellName = flowcellId.split('_')[3]
-  else:
-    flowCellName = flowcellId.split('_')[3][1:]
-
-  sampleSheetFileName = "SampleSheet_" + flowCellName + ".csv"
-
-  if miSeqRun:
-    binary = sampleSheetBinaryMiSeq
-  else:
-    binary = sampleSheetBinary
-
-  sampleSheet = subprocess.Popen([binary, "-f", flowcellId, "-v", "-o", miSeqPath, "=l", "win32"],  stdout=subprocess.PIPE)
-  result = sampleSheet.stdout.read()
-  ssList = result.split('\n')
-  if sendEmail:
-    mailService.createEmailSender().withSubject("Sample Sheet for flow cell: " + flowcellId).withAttachedText(result, sampleSheetFileName).send()
-
-  tableBuilder.addHeader("CSV") 
-
-  row = tableBuilder.addRow()
-  row.setCell("CSV","Created Sample Sheet "+ sampleSheetFileName + " and stored here: " + "Y:/yoda")
-  row = tableBuilder.addRow()
-  row.setCell("CSV",200*"-")
-  
-  for line in ssList:
-    row = tableBuilder.addRow()
-    row.setCell("CSV",line)
-  
-  row = tableBuilder.addRow()
-  row.setCell("CSV",200*"-")
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerInvoice/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerInvoice/plugin.properties
deleted file mode 100644
index dd31feda599..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerInvoice/plugin.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-label = Trigger Invoice Creation
-class = ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython.JythonIngestionService
-script-path = script.py
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerInvoice/script.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerInvoice/script.py
deleted file mode 100644
index 5161cd0f050..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerInvoice/script.py
+++ /dev/null
@@ -1,75 +0,0 @@
-def process(tr, parameters, tableBuilder):
-  
-  import subprocess
-  import os
-  from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-  base = "/home/sbsuser/openbis/createInvoices/"
-  createInvoiceBinary = base + "createInvoices.sh"
-  outDir = base + "invoices/"
-  magicString = "@Invoice@"
-
-  invoiceSentList = []
-  tmpIndexList = []
-
-  sampleId = parameters.get("sampleId")
-  sendEmail = parameters.get("sendEmail")
-  flowcellId = sampleId.split('/')[-1]
-  invoiceList = subprocess.Popen([createInvoiceBinary, "-f", flowcellId, "-o", outDir, "-d"],  stdout=subprocess.PIPE)
-  result = invoiceList.stdout.read()
-  
-  ssList = result.split('\n')
-  print ssList
-
-  for idx, element in enumerate(ssList):
-    if element.startswith(magicString):
-      tmpIndexList.append(idx)
-      invoiceSentList.append(element.split('@')[-1])
-
-  tmpIndexList.sort(reverse=True)
-  for idx in tmpIndexList:
-    ssList.pop(idx)
-      
-  ssList = ssList[:-1]
-
-  if sendEmail:
-    mailService.createEmailSender().withSubject("Invoice for flow cell: " + flowcellId).withAttachedText(result, "Invoice_" + flowcellId + ".csv").send()
-
-  # Search for the sample
-  search_service = tr.getSearchService()
-  sc = SearchCriteria()
-  sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, flowcellId));
-  myFC = search_service.searchForSamples(sc)
-  try:
-    assert myFC.size() == 1
-  except AssertionError:
-    print (str(myFC.size()) +  " " + myFC.getCode())
-
-  def attachFile(fileToAttach):
-    f = open(fileToAttach, 'r')
-    print ("Attaching " + fileToAttach + " to " + myFC[0].getSampleIdentifier())
-    updateableSample = tr.getSampleForUpdate(myFC[0].getSampleIdentifier())
-    updateableSample.addAttachment(fileToAttach, "Invoice for Flow Cell " + flowcellId, "Invoice", f.read())
-
-  column1 = "CSV"
-  column2 = "invoiceFlag"
-
-  tableBuilder.addHeader(column1) 
-  tableBuilder.addHeader(column2) 
-
-  for pI in invoiceSentList:
-    print pI
- 
-  for line in ssList:
-    XLXSfile = os.path.split(line)[-1]
-    print ("___________________________")
-    print line
-    print "File: " + XLXSfile
-    #line = '<a target="_self" href="' + filePath + XLXSfile + '">' + XLXSfile + '</a>' 
-    attachFile(outDir +  XLXSfile)
-    row = tableBuilder.addRow()
-    row.setCell(column1,"Attached file as " + XLXSfile)
- 
-  for pI in invoiceSentList:
-    row = tableBuilder.addRow()
-    row.setCell(column2, pI)
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerbee/lib/jyson-1.0.2.jar b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerbee/lib/jyson-1.0.2.jar
deleted file mode 100644
index 9988738cfce62d14d74610118a57eb604d66d2fe..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7805
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

diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerbee/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerbee/plugin.properties
deleted file mode 100644
index f8682933750..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerbee/plugin.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-label = Trigger bee job
-class = ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython.JythonIngestionService
-script-path = script.py
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerbee/script.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerbee/script.py
deleted file mode 100644
index dd43a63be7e..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggerbee/script.py
+++ /dev/null
@@ -1,194 +0,0 @@
-from __future__ import with_statement
-import subprocess
-import os
-import time
-import shutil
-import sys
-import datetime
-import httplib
-import urllib
-
-from com.xhaus.jyson import JysonCodec as json
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-ORGANISM_CODE = 'NCBI_ORGANISM_TAXONOMY'
-
-# here we have a lookup table to look for the the bowtie2 index names given
-# by the NCBI/openBIS taxonomy
-
-ORGANISM_DICT = {"10090" : "mm10", # Mouse
-                   "9606" : "hg19", # Human
-                   "7227" : "dm3", # Fruit fly
-                   "10847" : "phix", # phiX
-                   "4932" : "sacCer3", # baker's yeast
-                   "1773" : "myc_tub_h37rv_2", # M. tuberculosis H37Rv
-}
-
-column1 = "resultCode"
-column2 = "resultString"
-
-def process(tr, parameters, tableBuilder):
-  '''
-  Main function which controls the output
-  '''
-  method = parameters.get("method")
-  permId = parameters.get("permId")
-  userId = parameters.get("userId")
-  
-  tableBuilder.addHeader(column1) 
-  tableBuilder.addHeader(column2) 
-
-  if method == "startJob":
-    print "Start the job"
-    startJob(tr, parameters, userId, tableBuilder)
-
-  if method == "pollJob":
-    pollJob(tr, parameters, userId, tableBuilder)
-
-# --------------------------------------------------------------------
-
-def startJob(tr, parameters, userId, tableBuilder):
-  '''
-  Starts job
-  '''
-  permId = parameters.get("permId")
-  sendEmail = parameters.get("sendEmail")
-  bowtieParam = parameters.get("bowtieParam")
-  clusteroption = parameters.get("clusteroptionsParam")
-
-  outputDict = {}
-  result = ""
-
-  def searchDs (tr, dscode):
-    # search for the data set
-    search_service = tr.getSearchService()
-    sc = SearchCriteria()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch( \
-                      SearchCriteria.MatchClauseAttribute.CODE, dscode));
-    myds = search_service.searchForDataSets(sc)
-    try:
-      assert myds.size() == 1
-    except assertionerror:
-      print (str(myds.size()) +  " " + myds.getcode())
-    return myds
-
- # --------------------------------------------------------------------
-
-  def searchSample (tr, sampleCode):
-    search_service = tr.getSearchService()
-    sc = SearchCriteria()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch( \
-                      SearchCriteria.MatchClauseAttribute.CODE, sampleCode));
-    searchedSamples = search_service.searchForSamples(sc)
-    try:
-      assert searchedSamples.size() == 1
-    except assertionerror:
-      print (str(searchedSamples.size()) +  " " + searchedSamples.getcode())
-    return searchedSamples
-
- # --------------------------------------------------------------------
-
-  dataSet = searchDs(tr, permId)
-  connectedSampleId = dataSet[0].getSample().getSampleIdentifier()
-
-  # We have to do a second search for the sample, otherwise the peroperties 
-  # are not present when using dataSet[0].getSample() fro accessing the sample
-
-  content = contentProvider.getContent(permId)
-  #print content
-  pList = content.listMatchingNodes(".*.fastq.gz")
-  #print pList
-
-  stop = False
-  taxonomyURL = "http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id="
-
-  def returnDict(outputDict):
-    for entry in outputDict:
-      row = tableBuilder.addRow()
-      row.setCell(column1, outputDict[entry][0])
-      row.setCell(column2, outputDict[entry][1])
-
-  if pList:
-    sampleCode = "-".join(str(pList[0].tryGetFile()).split("/")[-1].split("_")[0:3])
-
-  print sampleCode
-  foundSample = searchSample(tr, sampleCode)
-  organism = foundSample[0].getPropertyValue(ORGANISM_CODE)
-
-  if organism:
-    print organism
-    try:
-      org = ORGANISM_DICT[organism]
-      outputDict[0] = [0, "Found " + org + "[" +organism + \
-             "] as reference genome - defined in Sample " + \
-               sampleCode ]
-    except:
-      outputDict[0] = [1, 'Given organism <a href=\"' + taxonomyURL + organism + '\" target=\"_blank\">' +  organism + '</a> from sample ' +  sampleCode + ' is not available as bowtie2 index.']
-      #sys.exit("Given organism not available as bowtie2 index")
-      stop = True
-
-    if not bowtieParam:
-      bowtieParam = '--phred33'
-
-    if not stop:
-      headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
-      workflow = open('/home/sbsuser/bee/bowtie2_bee.xml').read()
-      params = urllib.urlencode({'workflow': workflow, 'api.datasetID': permId, 'api.organism': ORGANISM_DICT[organism], 'api.bowtieParams':bowtieParam, 'api.user' : userId})
-      conn = httplib.HTTPConnection("127.0.0.1:9999")
-      conn.request("POST", "/apiv1/processes", params, headers)
-      resp = conn.getresponse()
-      conn.close()
-      outputDict[1] = [0, "Job started..."]
-      #outputDict[1] = [0, str(resp.read())]
-      #outputDict[2] = [0, str(resp.status)]
-
-  else:
-    outputDict[0] = [1, "No organism specified in the sample. Making an alignment is not possible."]
-
-  #sampleId, fcDate, seqSn, runningNumber, fcID, lane, index, fullLane, readNumber, fileNumber = filename.split('-')[-1].split('_')
-
-  returnDict(outputDict)
- 
-# --------------------------------------------------------------------
-
-def pollJob(tr, parameters, userId, tableBuilder):
-  
-    permId = parameters.get("permId")
-
-    conn = httplib.HTTPConnection("127.0.0.1:9999")
-    conn.request("GET", "/apiv1/processes?inputId=" + permId)
-    resp = conn.getresponse().read()
-    conn.close()
-    
-    if resp != 'null':
-        data = json.loads(resp)
-        processes = data['workflowDTO']
-        strOut = "Processing history: \n"
-    else:
-        strOut = "No Job started."
-        processes = []
-
-    isThereRunning = False
-
-    if not isinstance(processes, list):
-      processes = [processes] 
-
-    for p in processes:
-	d = datetime.datetime.fromtimestamp(float(p['startTime'])/1000.0)
-	strOut += "Process started: " + str(d) + " is in state: " + p['status'] + "\n"
-        if not isFinished(p['status']):
-            isThereRunning = True
-    
-    column1 = "resultCode"
-    column2 = "resultString"
-
-    row = tableBuilder.addRow()
-    if not isThereRunning:
-      row.setCell(column1, 100 )
-      row.setCell(column2, strOut )
-    else:
-      row.setCell(column1, 101 )
-      row.setCell(column2, strOut )
-
-def isFinished(status):
-   return status == 'COMPLETE' or status == 'ABORTED' or status == 'ERROR' or status == 'WARNING'
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggergc3pie/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggergc3pie/plugin.properties
deleted file mode 100644
index 0755ced0278..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggergc3pie/plugin.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-label = Trigger gc3pie job
-class = ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython.JythonIngestionService
-script-path = script.py
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggergc3pie/script.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggergc3pie/script.py
deleted file mode 100644
index 92d9e9d84cc..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/dss/reporting-plugins/triggergc3pie/script.py
+++ /dev/null
@@ -1,201 +0,0 @@
-from __future__ import with_statement
-import subprocess
-import os
-import time
-import shutil
-import sys
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-ORGANISM_CODE = 'NCBI_ORGANISM_TAXONOMY'
-
-# here we have a lookup table to look for the the bowtie2 index names given
-# by the NCBI/openBIS taxonomy
-
-ORGANISM_DICT = {"10090" : "mm10", # Mouse
-                   "9606" : "hg19", # Human
-                   "7227" : "dm3", # Fruit fly
-                   "10847" : "phix", # phiX
-                   "4932" : "sacCer3", # baker's yeast
-}
-
-SESSIONDIR="/home/sbsuser/openbis/sprint/servers/datastore_server/dss-tmp/"
-
-column1 = "resultCode"
-column2 = "resultString"
-
-# --------------------------------------------------------------------
-
-def fileExists (fileName):
-
-  #if os.path.isfile(fileName): 
-  #  return True
-  #else:
-  #  return False 
-  
-  try:
-     with open(fileName):
-       print fileName
-       print "exists!"
-       return True
-  except IOError:
-   print "no file"
-   return False
-
-# --------------------------------------------------------------------
-
-def getSessionPath(permId, userId):
-  return SESSIONDIR + permId + "_" + userId
-
-# --------------------------------------------------------------------
-
-def process(tr, parameters, tableBuilder):
-  '''
-  Main function which controls the output
-  '''
-  method = parameters.get("method")
-  permId = parameters.get("permId")
-  userId = parameters.get("userId")
-  
-  tableBuilder.addHeader(column1) 
-  tableBuilder.addHeader(column2) 
-
-  if (method == "startJob" and not os.path.exists(getSessionPath(permId, userId))):
-    print "Start the job"
-    startJob(tr, parameters, userId, tableBuilder)
-
-  if method == "pollJob":
-    pollJob(tr, parameters, userId, tableBuilder)
-
-# --------------------------------------------------------------------
-
-def startJob(tr, parameters, userId, tableBuilder):
-  '''
-  Starts job
-  '''
-  permId = parameters.get("permId")
-  sendEmail = parameters.get("sendEmail")
-  bowtieParam = parameters.get("bowtieParam")
-  clusteroption = parameters.get("clusteroptionsParam")
-
-  #print(permId)
-  #print(sendEmail)
-  #print(bowtieParam)
-  #print(clusteroption)
-
-  outputDict = {}
-  result = ""
-
-  CMD = "/home/sbsuser/openbis/bin/gc3_bowtie2.sh"
-
-  def searchDs (tr, dscode):
-    # search for the data set
-    search_service = tr.getSearchService()
-    sc = SearchCriteria()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch( \
-                      SearchCriteria.MatchClauseAttribute.CODE, dscode));
-    myds = search_service.searchForDataSets(sc)
-    try:
-      assert myds.size() == 1
-    except assertionerror:
-      print (str(myds.size()) +  " " + myds.getcode())
-    return myds
-
- # --------------------------------------------------------------------
-
-  def searchSample (tr, sampleCode):
-    search_service = tr.getSearchService()
-    sc = SearchCriteria()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch( \
-                      SearchCriteria.MatchClauseAttribute.CODE, sampleCode));
-    searchedSamples = search_service.searchForSamples(sc)
-    try:
-      assert searchedSamples.size() == 1
-    except assertionerror:
-      print (str(searchedSamples.size()) +  " " + searchedSamples.getcode())
-    return searchedSamples
-
- # --------------------------------------------------------------------
-
-  dataSet = searchDs(tr, permId)
-  connectedSampleId = dataSet[0].getSample().getSampleIdentifier()
-
-  # We have to do a second search for the sample, otherwise the peroperties 
-  # are not present when using dataSet[0].getSample() fro accessing the sample
-
-  content = contentProvider.getContent(permId)
-  #print content
-  pList = content.listMatchingNodes(".*.fastq.gz")
-  #print pList
-
-  def returnDict(outputDict):
-    for entry in outputDict:
-      row = tableBuilder.addRow()
-      row.setCell(column1, outputDict[entry][0])
-      row.setCell(column2, outputDict[entry][1])
-
-
-  if pList:
-    sampleCode = "-".join(str(pList[0].tryGetFile()).split("/")[-1].split("_")[0:3])
-
-  print sampleCode
-  foundSample = searchSample(tr, sampleCode)
-  organism = foundSample[0].getPropertyValue(ORGANISM_CODE)
-  print organism
-
-  if organism:
-    try:
-      outputDict[0] = [0, "Found " + ORGANISM_DICT[organism] + "[" +organism + \
-             "] as reference genome - defined in Sample " + \
-               sampleCode ]
- 
-      for element in pList:
-        print element.tryGetFile()
-        file = str(element.tryGetFile())
-
-        # here we actually start the job
-        proc = subprocess.Popen([CMD, file, permId + "_" +  userId, ORGANISM_DICT[organism], "\'" + bowtieParam + "\'", clusteroption, "8" , getSessionPath(permId, userId)], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-        strOut, err =  proc.communicate()
-        print strOut
-        print err
-
-        filename = os.path.basename(file)
-        if len(err) == 0:
-          outputDict[5] = [0, strOut]
-          outputDict[1] = [0, "Processing " + filename]
-          outputDict[3] = [0, "Successfully submitted job to... "]
-        else:
-          outputDict[5] = [1, err]
-
-    except:
-      outputDict[0] = [1, "Given organism " + organism + " from sample " +  sampleCode + " is not available as bowtie2 index."]
-  else:
-    outputDict[0] = [1, "No organism specified in the sample. Making an alignment is not possible."]
-
-  #sampleId, fcDate, seqSn, runningNumber, fcID, lane, index, fullLane, readNumber, fileNumber = filename.split('-')[-1].split('_')
-
-  returnDict(outputDict)
- 
-# --------------------------------------------------------------------
-
-def pollJob(tr, parameters, userId, tableBuilder):
-   
-    permId = parameters.get("permId")
-
-    output = subprocess.Popen(["/home/sbsuser/bela_play/gc3Status.sh", getSessionPath(permId, userId)], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-    strOut, err =  output.communicate()
-    strOut = strOut.strip()
-
-    column1 = "resultCode"
-    column2 = "resultString"
-
-    row = tableBuilder.addRow()
-    if strOut == 'TERMINATED' or strOut == 'STOPPED' or strOut == 'Nope':
-      row.setCell(column1, 100 )
-      row.setCell(column2, strOut )
-    else:
-      row.setCell(column1, 101 )
-      row.setCell(column2, strOut )
-
-    if strOut == 'TERMINATED' or strOut == 'STOPPED':
-      shutil.rmtree(getSessionPath(permId, userId))
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/jython-lib/gfb_utils.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/jython-lib/gfb_utils.py
deleted file mode 100644
index eebbe6b7ac2..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/1/jython-lib/gfb_utils.py
+++ /dev/null
@@ -1,120 +0,0 @@
-import os
-import time
-import fnmatch
-from time import *
-from datetime import *
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-# HISEQ_DICT = {'HISEQ_4000': 'Illumina HiSeq 4000',
-#                   'HISEQ_3000': 'Illumina HiSeq 3000',
-#                   'HISEQ_2500': 'Illumina HiSeq 2500',
-#                   'HISEQ_2000': 'Illumina HiSeq 2000',
-#                   'HISEQ_X': 'Illumina HiSeq X'
-#                   }
-# NEXTSEQ_DICT = {'NEXTSEQ_500': 'Illumina NextSeq 500'}
-# MISEQ_DICT = {'MISEQ': 'Illumina MiSeq'}
-# UNIDENTIFIED_DICT = {'UNIDENTIFIED': 'Unidentified'}
-
-# Instead of using Enum:
-class Sequencers:
-    HISEQ_4000, HISEQ_3000, HISEQ_2500, HISEQ_2000, HISEQ_X, NEXTSEQ_500, MISEQ , UNIDENTIFIED= \
-        ('Illumina HiSeq 4000','Illumina HiSeq 3000','Illumina HiSeq 2500','Illumina HiSeq 2000',
-         'Illumina HiSeq X', 'Illumina NextSeq 500', 'Illumina MiSeq', 'Unidentified')
-
-HISEQ_LIST = [Sequencers.HISEQ_2000, Sequencers.HISEQ_2500, Sequencers.HISEQ_3000, Sequencers.HISEQ_4000, Sequencers.HISEQ_X]
-
-
-def get_model(run_id):
-    """
-    Guesses the sequencer model from the run folder name
-
-    Current Naming schema for Illumina run folders, as far as I know,
-    no documentation found on this, Illumina introduced a field called
-    <InstrumentID> on the NextSeq runParameters.xml. That might be an
-    option for the future. Alternatively a combination of the fields
-    <ApplicationName> and <ApplicationVersion>.
-
-    MiSeq: 150130_M01761_0114_000000000-ACUR0
-    NextSeq: 150202_NS500318_0047_AH3KLMBGXX
-    HiSeq 2000: 130919_SN792_0281_BD2CHRACXX
-    HiSeq 2500: 150203_D00535_0052_AC66RWANXX
-    HiSeq 3000: 150724_J00121_0017_AH2VYMBBXX
-    HiSeq 4000: 150210_K00111_0013_AH2372BBXX
-    HiSeq X: 141121_ST-E00107_0356_AH00C3CCXX
-    """
-    date, machine_id, run_number, fc_string = os.path.basename(run_id).split("_")
-
-    if machine_id.startswith("NS"):
-        model = Sequencers.NEXTSEQ_500
-    elif machine_id.startswith("M"):
-        model = Sequencers.MISEQ
-    elif machine_id.startswith("D"):
-        model = Sequencers.HISEQ_2500
-    elif machine_id.startswith("SN"):
-        model = Sequencers.HISEQ_2000
-    elif machine_id.startswith("J"):
-        model = Sequencers.HISEQ_3000
-    elif machine_id.startswith("K"):
-        model = Sequencers.HISEQ_4000
-    elif machine_id.startswith("ST"):
-        model = Sequencers.HISEQ_X
-    else:
-        model = Sequencers.UNIDENTIFIED
-    return model
-
-
-def get_thread_properties(transaction):
-    threadPropertyDict = {}
-    threadProperties = transaction.getGlobalState().getThreadParameters().getThreadProperties()
-    for key in threadProperties:
-        try:
-            threadPropertyDict[key] = threadProperties.getProperty(key)
-        except:
-            pass
-    return threadPropertyDict
-
-
-def create_openbis_timestamp(file):
-    '''
-    Creates a openBIS compatible time stamp of a file time stamp
-    '''
-    mtime = os.path.getmtime(file)
-    lt = localtime(mtime)
-    tz = localtime().tm_hour - gmtime().tm_hour
-    return (strftime("%Y-%m-%d %H:%M:%S GMT" + "%+.2d" % tz + ":00", lt))
-
-
-def create_openbis_timestamp_now():
-  '''
-  Create an openBIS conform timestamp
-  '''
-  tz=localtime()[3]-gmtime()[3]
-  d=datetime.now()
-  return d.strftime("%Y-%m-%d %H:%M:%S GMT"+"%+.2d" % tz+":00")
-
-
-def search_unique_sample(transaction, sample_code): 
-
-    search_service = transaction.getSearchService()
-    sc = SearchCriteria()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sample_code));
-    found_sample = search_service.searchForSamples(sc)
-    try:
-        assert found_sample.size() == 1
-    except AssertionError:
-        print (str(found_sample.size()) + ' samples found which match the criterias: '+ sample_code)
-    return found_sample
-
-
-def get_file_names(path, pattern):
-    '''
-    Gets all files matching a PATTERN in a path recursively
-    and returns the result as a list
-    '''
-    matches = []
-    for root, dirnames, filenames in os.walk(path):
-        for filename in fnmatch.filter(filenames, pattern):
-            matches.append(os.path.join(root, filename))
-    matches.sort()
-    return(matches)
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/create-flowcell/create-flowcell.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/create-flowcell/create-flowcell.py
deleted file mode 100644
index 2fd4f6c1571..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/create-flowcell/create-flowcell.py
+++ /dev/null
@@ -1,312 +0,0 @@
-'''
-@copyright:
-2015 ETH Zuerich, SIS
-    
-@license: 
-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.
-
-@description:
-Parses the two Illumina provided files 'RunParameters.xml' / 'runParameters.xml
-'and 'RunInfo.xml' and creates one Sample of type 'ILLUMINA_FLOW_CELL'
-and sets Sample properties from those two XML files. Additionally the
-number of lanes are read out and are created as contained samples of
-type 'ILLUMINA_FLOW_LANE'.
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import shutil
-import re
-from time import *
-from datetime import *
-import xml.etree.ElementTree as etree
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.common.mail import EMailAddress
-
-# The following module is located in the path defined in the datastore_server.conf
-# Look for: -Dpython.path}
-from gfb_utils import *
-
-RUNPARAMETERS = 'RunParameters.xml'
-ALTERNATIVE_RUNPARAMETERS = 'runParameters.xml'
-RUNINFO = 'RunInfo.xml'
-FLOWCELL_SPACE='/BSSE_FLOWCELLS/'
-FLOWCELL_PROJECT='FLOWCELLS/'
-EXPERIMENT_TYPE_CODE='HT_SEQUENCING'
-CYCLES_VOCABULARY_NAME = "CYCLES" 
-
-# Mapping between XML file naming and openBIS properties
-
-RUNINFO_XML = {'LANECOUNT':'LaneCount', 'SURFACECOUNT':'SurfaceCount',
-   'SWATHCOUNT':'SwathCount', 'TILECOUNT':'TileCount'}
-RUNPARAMETERS_XML = {'FLOWCELL':'Flowcell', 'RTAVERSION':'RTAVersion',
-  'CONTROLLANE':'ControlLane', 'SBS':'Sbs', 'INDEX':'Index',
-  'CYCLES_REQUESTED_BY_CUSTOMER':'Read1', 'PE':'Pe', 'RUN_MODE': 'RunMode',
-  'CONTROL_SOFTWARE_VERSION': 'ApplicationVersion'}
-
-PERSISTENT_KEY_MAP = "persistent_key_map"
-
-
-class parseXmlFile: 
-    
-    def __init__(self, xmlFile):
-        self.xmlFile = xmlFile
-        self.tree = etree.parse(self.xmlFile)
-        self.root = self.tree.getroot()
-
-
-    def getXmlElement (self, elementName):
-        '''
-        Returns the text value of a given XML element
-        '''
-        for e in self.root.getchildren():
-            element = e.find(elementName)
-            if element is None:
-                return 'None'
-            else:
-                return element.text
-
-
-    def getAllchildren (self, elementName):
-        '''
-        finds all children of a given XML Element and returns them as list
-        '''
-        for e in self.root.getchildren():
-            # the '//' means look recursively for all children not only direct ones
-            childList  = self.tree.findall('.//' + elementName)
-            return childList 
-
-
-def registerFlowLane(a_lane, transaction, name, newFlowCell):
-  '''
-  Registers a new Flow lane 
-  '''
-  newFlowLane = transaction.createNewSample(FLOWCELL_SPACE + name + ':' + str(a_lane), "ILLUMINA_FLOW_LANE")
-  newFlowLane.setPropertyValue('CONCENTRATION_FLOWLANE', str(0))
-  newFlowLane.setContainer(newFlowCell)
-
-
-def addVocabularyTerm(transaction, vocabularyName, vocabularyCode):
-  modifiableVocabulary = transaction.getVocabularyForUpdate(vocabularyName)
-  if not (modifiableVocabulary.containsTerm(vocabularyCode)):
-    ordinals = []
-    terms = modifiableVocabulary.getTerms()
-    for term in terms:
-      ordinals.append(term.getOrdinal())
-            
-    newOrdinal = max(ordinals)+1;
-
-    newTerm = transaction.createNewVocabularyTerm();
-    newTerm.setCode(vocabularyCode)
-    newTerm.setOrdinal(newOrdinal)
-    modifiableVocabulary.addTerm(newTerm)
-
-
-def send_email(mailClient, persistent_map):
-
-    replyTo = EMailAddress("no-reply@bsse.ethz.ch")
-    fromAddress = replyTo
-    manuel = EMailAddress("manuel.kohler@id.ethz.ch")
-    ina = EMailAddress("ina.nissen@bsse.ethz.ch")
-    christian = EMailAddress("christian.beisel@bsse.ethz.ch")
-    katja = EMailAddress("katja.eschbach@bsse.ethz.ch")
-    philippe = EMailAddress("philippe.demougin@unibas.ch")
-    elodie = EMailAddress("belodie@ethz.ch")
-    fabian = EMailAddress("fabian.koechl@bsse.ethz.ch")
-
-    subject = "Automatically created new " + persistent_map[1] + " flow cell " + persistent_map[0]  + " in openBIS"
-    body = "A new run got started with flow cell: " + persistent_map [0] + \
-           "\n Direct Link: https://openbis-dsu.bsse.ethz.ch/openbis/index.html?#entity=SAMPLE&permId=" + persistent_map[2] + "\nHave a good day! :-)"
-    mailClient.sendEmailMessage(subject, body, replyTo, fromAddress, ina, katja, christian, philippe, manuel, elodie, fabian);
-    #mailClient.sendEmailMessage(subject, body, replyTo, fromAddress, manuel);
-
-
-def post_storage(context):
-    mailClient = context.getGlobalState().getMailClient()
-    persistent_map = context.getPersistentMap().get(PERSISTENT_KEY_MAP)
-    send_email(mailClient, persistent_map) 
-
-
-def searchSample(transaction, sampleName):
-
-    search_service = transaction.getSearchService()
-    sc = SearchCriteria()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleName));
-    foundSamples = search_service.searchForSamples(sc)
-    return foundSamples
-
-
-def setFcProperty(searchId, my_dict, runInfo, newFlowCell):
-    children = runInfo.getAllchildren(searchId)
-    for element in (my_dict):
-        if (element != '') and (my_dict[element] != ''):
-            newFlowCell.setPropertyValue(element, children[0].attrib[my_dict[element]])
-
-
-def set_index_lengths (readMap, newFlowCell):
-	
-    indexCount = 0
-    readCount = 0
-
-    for entry in readMap:
-        if readMap[entry][1] == 'Y':
-            indexCount += 1
-        else:
-            readCount += 1
-
-    if readCount == 2:
-        newFlowCell.setPropertyValue("END_TYPE", "PAIRED_END")
-    else:
-        newFlowCell.setPropertyValue("END_TYPE", "SINGLE_READ")
-
-    try:
-        if indexCount == 1:
-            newFlowCell.setPropertyValue("INDEXREAD", readMap['2'][0])
-        else:
-            newFlowCell.setPropertyValue("INDEXREAD", '0')
-    except:
-        newFlowCell.setPropertyValue("INDEXREAD", '0') 
-
-    try:
-        if indexCount == 2:
-            newFlowCell.setPropertyValue("INDEXREAD2", readMap['3'][0])
-            newFlowCell.setPropertyValue("INDEXREAD", readMap['2'][0])
-        else:
-            newFlowCell.setPropertyValue("INDEXREAD2", '0')
-    except:
-        newFlowCell.setPropertyValue("INDEXREAD2", '0')
-
-
-def sanitizeString(myString):
-    return re.sub('[^A-Za-z0-9]+', '_', myString)
-
-
-def get_version(my_path):
-    return my_path[-4:-2]
-
-
-def create_or_update_flowcell(transaction, fcId):
-
-    found_samples = searchSample(transaction, fcId)
-    # if flow cell already exists then just get it for an update
-    if found_samples.size() > 0:
-        print('Already found a Flow Cell with the following name: ' + fcId + ". Will re-set the properties...")
-        new_flowcell = transaction.getSampleForUpdate(found_samples[0].getSampleIdentifier())
-    else:
-        new_flowcell = transaction.createNewSample(FLOWCELL_SPACE + fcId, "ILLUMINA_FLOW_CELL")
-    exp = transaction.getExperiment(FLOWCELL_SPACE + FLOWCELL_PROJECT + datetime.now().strftime("%Y.%m"))
-    if exp is None:
-        exp = transaction.createNewExperiment(FLOWCELL_SPACE + FLOWCELL_PROJECT +
-                                              datetime.now().strftime("%Y.%m"), EXPERIMENT_TYPE_CODE)
-    new_flowcell.setExperiment(exp)
-    return new_flowcell
-
-
-def set_run_mode(transaction, new_flowcell, run_mode):
-    addVocabularyTerm(transaction, "RUN_MODE_VOCABULARY", run_mode)
-    new_flowcell.setPropertyValue("RUN_MODE", run_mode)
-
-def process(transaction):
-
-    incoming = transaction.getIncoming()
-    incomingPath = incoming.getAbsolutePath()
-
-    run_id = incoming.getName()
-    model = get_model(run_id)
-    print("Auto-detected Illumina model: " + model)
-
-    run_date, sequencer_id, running_number, tray_and_fcId = run_id.split("_")
-    tray = tray_and_fcId[0]
-    if model in [Sequencers.MISEQ]:
-        fc_id = tray_and_fcId
-    else:
-        fc_id = tray_and_fcId[1:]
-
-    # Parse the RunInfo.xml and RunParameters.xml
-    runInfo = parseXmlFile(os.path.join(incomingPath, RUNINFO)) 
-    try:
-        runParameters = parseXmlFile(os.path.join(incomingPath, RUNPARAMETERS))
-    except:
-        runParameters = parseXmlFile(os.path.join(incomingPath, ALTERNATIVE_RUNPARAMETERS))
-  
-    # get the number of lanes
-    max_lanes = runInfo.getAllchildren('FlowcellLayout')[0].attrib[RUNINFO_XML['LANECOUNT']]
-    new_flowcell = create_or_update_flowcell(transaction, fc_id)
-    permId = new_flowcell.getPermId()
-    transaction.getRegistrationContext().getPersistentMap().put(PERSISTENT_KEY_MAP, [fc_id, model, permId])
-
-    flow_lanes = new_flowcell.getContainedSamples()
-    if len(flow_lanes) is 0:
-        if model in [Sequencers.NEXTSEQ_500]:
-            max_lanes = 1
-        [registerFlowLane(lane, transaction, fc_id, new_flowcell) for lane in range(1,int(max_lanes)+1)]
-
-    # NextSeq specific
-    if model in [Sequencers.NEXTSEQ_500]:
-        run_mode = sanitizeString(runParameters.getAllchildren('Chemistry')[0].text)
-        set_run_mode(transaction, new_flowcell, run_mode)
-        recipe_folder = (runParameters.getAllchildren('RecipeFolder'))[0].text
-        major_version = get_version(recipe_folder)
-        new_flowcell.setPropertyValue("SBS_KIT", major_version)
-        new_flowcell.setPropertyValue("CONTROL_SOFTWARE_VERSION", runParameters.getAllchildren('ApplicationVersion')[0].text)
-
-    # MiSeq specific
-    if model in [Sequencers.MISEQ]:
-        ReagentKitBarcode = (runParameters.getAllchildren('ReagentKitBarcode'))[0].text
-        new_flowcell.setPropertyValue("SBS_KIT", ReagentKitBarcode)
-        new_flowcell.setPropertyValue("CONTROL_SOFTWARE_VERSION", runParameters.getAllchildren('ApplicationVersion')[0].text)
-
-    # HiSeq specific
-    if model in HISEQ_LIST:
-        run_mode = sanitizeString(runParameters.getXmlElement(RUNPARAMETERS_XML['RUN_MODE']))
-        new_flowcell.setPropertyValue("FLOWCELLTYPE", runParameters.getXmlElement(RUNPARAMETERS_XML['FLOWCELL']))
-        new_flowcell.setPropertyValue("SBS_KIT", runParameters.getXmlElement(RUNPARAMETERS_XML['SBS']))
-        new_flowcell.setPropertyValue("CONTROL_SOFTWARE_VERSION", runParameters.getXmlElement(RUNPARAMETERS_XML['CONTROL_SOFTWARE_VERSION']))
-        if (new_flowcell.getPropertyValue("END_TYPE") == "PAIRED_END"):
-            new_flowcell.setPropertyValue("PAIRED_END_KIT", runParameters.getXmlElement(RUNPARAMETERS_XML['PE']))
-        set_run_mode(transaction, new_flowcell, run_mode)
-
-    rta_version = (runParameters.getAllchildren('RTAVersion'))[0].text
-    addVocabularyTerm(transaction, "PIPELINE_VERSION", rta_version)
-    new_flowcell.setPropertyValue("ILLUMINA_PIPELINE_VERSION", rta_version)
-
-    # Reading out <FlowcellLayout LaneCount="1" SurfaceCount="1" SwathCount="1" TileCount="12" />
-    setFcProperty('FlowcellLayout', RUNINFO_XML, runInfo, new_flowcell)
-
-    sequencer = runInfo.getAllchildren('Instrument')
-    addVocabularyTerm(transaction, "SEQUENCER", sequencer[0].text)
-    new_flowcell.setPropertyValue("SEQUENCER", sequencer[0].text)
-    new_flowcell.setPropertyValue("FLOW_CELL_SEQUENCED_ON", create_openbis_timestamp(os.path.join(incomingPath, RUNINFO)))
-    new_flowcell.setPropertyValue("RUN_NAME_FOLDER", run_id)
-
-    readMap = {}
-    reads = runInfo.getAllchildren('Reads')
-    read = reads[0].findall('Read')
-
-    for r in read:
-        cycles = r.get('NumCycles', 'str')
-        number = r.get('Number', 'str')
-        is_indexed = r.get('IsIndexedRead', 'str')
-        readMap[number] = [cycles, is_indexed]
-
-    # example of readMap: {'1': ['151', 'N'], '2': ['8', 'Y'], '3': ['8', 'Y'], '4': ['151', 'N']}
-    number_of_cycles = readMap['1'][0]
-    addVocabularyTerm(transaction, CYCLES_VOCABULARY_NAME, number_of_cycles)
-    new_flowcell.setPropertyValue("CYCLES_REQUESTED_BY_CUSTOMER", number_of_cycles)
-
-    set_index_lengths(readMap, new_flowcell)
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/create-flowcell/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/create-flowcell/plugin.properties
deleted file mode 100644
index dd75e75ff45..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/create-flowcell/plugin.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-# 
-# Drop box for creating  a flow cell 
-#
-incoming-dir = ${incoming-root-dir}/create-flowcell
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = create-flowcell.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-jython-version=2.7
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-miseq-hiseq/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-miseq-hiseq/plugin.properties
deleted file mode 100644
index 06c8edfcacb..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-miseq-hiseq/plugin.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-incoming-dir = ${incoming-root-dir}/read-demultiplex-stats-miseq-hiseq
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = read-demultiplex-stats-miseq-hiseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-jython-version=2.7
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-miseq-hiseq/read-demultiplex-stats-miseq-hiseq.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-miseq-hiseq/read-demultiplex-stats-miseq-hiseq.py
deleted file mode 100755
index c10028aa6d1..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-miseq-hiseq/read-demultiplex-stats-miseq-hiseq.py
+++ /dev/null
@@ -1,366 +0,0 @@
-'''
-@copyright: 2012 ETH Zuerich, CISD
-
-@license:
-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.
-
-@author: Manuel Kohler
-
-@note: print statements go to ~/openbis/servers/datastore_server/log/startup_log.txt
-
-'''
-
-import time
-import math
-import os
-import fnmatch
-# Load Java-Library to import XML data:
-import read_demultiplex_stats_miseq_hiseq
-# Load openBIS-Libraries:
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-
-def process(transaction):
-  '''
-  Main method in corresponding openBIS dropbox
-  '''
-
-  # Constants:
-  XML_FILENAME = 'ConversionStats.xml'
-  TYPE_DATASET = 'FASTQ_GZ'
-  INDEX_NO = 'NOINDEX'
-  INDEX_UNKNOWN = 'UNKNOWN'
-  INDEX_EMPTY = ''
-  CODE_INDEX1 = 'BARCODE'
-  CODE_INDEX2 = 'INDEX2'
-  CODE_INDEX1LENGTH = 'INDEXREAD'
-  CODE_INDEX2LENGTH = 'INDEXREAD2'
-  BARCODE_SPLIT_CHAR = "+"
-
-
-  ##########################################################
-  def locate(pattern, root):
-    '''Locate all files matching supplied filename pattern in and below supplied root directory.'''
-    for path, dirs, files in os.walk(os.path.abspath(root)):
-      for filename in fnmatch.filter(files, pattern):
-        yield os.path.join(path, filename)
-
-  ##########################################################
-  def getInfoVocabularyTerms(vocabularyCode):
-    '''
-    Get information about Terms of certain Vocabulary in openBIS.
-    Input: 
-    - vocabularyCode: code of Vocabulary to be investigated
-    Output: 
-    - vocabularyTerms: list of Terms in Vocabulary
-    '''
-    vocabulary = transaction.getSearchService().searchForVocabulary(vocabularyCode)
-
-    vocabularyTerms = []
-    if (vocabulary is None):
-      print '\nOCCURRED EXCEPTION: Vocabulary %s does not exist' % (vocabularyCode)
-    else:
-      for term in vocabulary.getTerms():
-        vocabularyTerms.append(term.getCode())           
-      vocabularyTerms.sort()
-
-    return vocabularyTerms
-
-  ##########################################################
-  def getInfoSampleProperties(sampleCode):
-    '''
-    Get information about Properties of certain Sample in openBIS.
-    Input: 
-    - sampleCode: code of Sample to be investigated
-    Outputs: 
-    - propertiesCode: list of Properties' codes
-    - propertiesCodeValue: dictionary of Properties' codes and values
-    '''
-    ss = transaction.getSearchService()
-
-    scSample = SearchCriteria()
-    scSample.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleCode));
-    foundSamples = ss.searchForSamples(scSample)
-
-    propertiesCode = []
-    propertiesCodeValue = {}
-    try:
-      assert foundSamples.size() == 1
-      properties = foundSamples[0].getSample().getProperties()
-      for p in properties:
-        codeProperty = p.getPropertyType().getSimpleCode()
-        propertiesCode.append(codeProperty)
-        propertiesCodeValue[codeProperty] = p.getValue()
-      propertiesCode.sort()
-    except AssertionError:
-      print ('\nOCCURRED EXCEPTION: ' + str(foundSamples.size()) + ' Samples found which match the criteria code \"' + sampleCode + '\".')
-
-    return propertiesCode, propertiesCodeValue
-
-  ##########################################################
-  def getInfoDataSetPropertiesOfSample(sampleCode):
-    '''
-    Get information about Properties of some DataSet of certain Sample in openBIS.
-    Input: 
-    - sampleCode: code of DataSet's Sample to be investigated
-    Outputs: 
-    - propertiesCode: list of Properties' codes
-    - propertiesCodeValue: dictionary of Properties' codes and values
-    '''
-    ss = transaction.getSearchService()
-
-    scSample = SearchCriteria()
-    scSample.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleCode));
-    #foundSamples = ss.searchForSamples(scSample)
-
-    scDataSet = SearchCriteria()
-    scDataSet.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, TYPE_DATASET))
-    scDataSet.addSubCriteria(SearchSubCriteria.createSampleCriteria(scSample))
-    foundDataSets = ss.searchForDataSets(scDataSet)
-
-    propertiesCode = []
-    propertiesCodeValue = {}
-    try:
-      assert foundDataSets.size() > 0
-      codeProperties = foundDataSets[0].getAllPropertyCodes()
-      for cp in codeProperties:
-        propertiesCode.append(cp)
-        propertiesCodeValue[cp] = foundDataSets[0].getPropertyValue(cp)
-      propertiesCode.sort()
-    except AssertionError:
-      print ('\nOCCURRED EXCEPTION: ' + str(foundDataSets.size()) + ' DataSets found which Sample match the criteria code \"' + sampleCode + '\" and type \"' + TYPE_DATASET + '\".')
-
-    return propertiesCode, propertiesCodeValue
-
-  ##########################################################
-  def getIndexesOfDataSetsOfSample(sampleFlowLaneCode):
-    '''
-    Get both indexes (parts of barcode) of all DataSets of certain FlowLane-Sample in openBIS.
-    Inputs: 
-    - sampleFlowLaneCode: code of DataSet's Sample
-    Outputs: 
-    - indexes1: list of first index of DataSets
-    - indexes2: list of second index of DataSets
-    '''
-    ss = transaction.getSearchService()
-
-    scSample = SearchCriteria()
-    scSample.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleFlowLaneCode));
-    #foundSamples = ss.searchForSamples(scSample)
-
-    scDataSet = SearchCriteria()
-    scDataSet.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, TYPE_DATASET))
-    scDataSet.addSubCriteria(SearchSubCriteria.createSampleCriteria(scSample))
-    foundDataSets = ss.searchForDataSets(scDataSet)
-    
-    indexes1 = []
-    indexes2 = []
-    try: 
-      assert foundDataSets.size() > 0
-    except AssertionError:
-      print ('\nOCCURRED EXCEPTION: ' + str(foundDataSets.size()) + ' DataSets found which Sample match the criteria code \"' + sampleFlowLaneCode + '\" and type \"' + TYPE_DATASET + '\".')
-    for ds in foundDataSets:
-      indexes1.append(ds.getPropertyValue(CODE_INDEX1))
-      indexes2.append(ds.getPropertyValue(CODE_INDEX2))
-
-    return indexes1, indexes2
-
-  ##########################################################
-  def searchDataSetsOfSample(sampleFlowLaneCode, index1, index2):
-    '''
-    Search DataSets by corresponding indexes (parts of barcode) of certain FlowLane-Sample in openBIS.
-    Inputs: 
-    - sampleFlowLaneCode: code of DataSet's Sample
-    - index1: first index of DataSet
-    - index2: second index of DataSet
-    Output: 
-    - foundDataSets: DataSets corresponding to inputs and constant TYPE_DATASET
-    '''
-    ss = transaction.getSearchService()
-
-    scSample = SearchCriteria()
-    scSample.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleFlowLaneCode));
-    #foundSample = ss.searchForSamples(scSample)
-
-    scDataSet = SearchCriteria()
-    scDataSet.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, TYPE_DATASET))
-    scDataSet.addMatchClause(SearchCriteria.MatchClause.createPropertyMatch(CODE_INDEX1, index1))
-    scDataSet.addMatchClause(SearchCriteria.MatchClause.createPropertyMatch(CODE_INDEX2, index2))
-    scDataSet.addSubCriteria(SearchSubCriteria.createSampleCriteria(scSample))
-    foundDataSets = ss.searchForDataSets(scDataSet)
-    for ds in foundDataSets:
-      print "Index1 of found DataSet " + ds.getDataSetCode() + ": " + ds.getPropertyValue(CODE_INDEX1)
-      print "Index2 of found DataSet " + ds.getDataSetCode() + ": " + ds.getPropertyValue(CODE_INDEX2)
-
-    return foundDataSets
-
-  ##########################################################
-  def reversecomplement(sequence):
-    '''
-    Reverse sequence and replace each nucleotide by its complement.
-    Input: 
-    - sequence: sequence of nucleotides
-    Output: 
-    - reverse_complement_sequence: reversed and complemented sequence
-    '''
-    lookup_table = {'A': 'T', 'T': 'A', 'G': 'C', 'C': 'G'}
-    reverse_complement_sequence = ''
-    for nucleotide in reversed(sequence):
-        reverse_complement_sequence += lookup_table[nucleotide]
-    return reverse_complement_sequence
-
-  ##########################################################
-  
-  def sampleSearch(transaction, code=''):
-    sc = SearchCriteria()
-    numberOfLanes = 0
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, code));
-    search_service = transaction.getSearchService()
-    flowcell = search_service.searchForSamples(sc)
-    if flowcell.size() > 0:
-      # Search for contained samples
-      sampleSc = SearchCriteria()
-      sampleSc.addSubCriteria(SearchSubCriteria.createSampleContainerCriteria(sc))
-      lanes = search_service.searchForSamples(sampleSc)
-      numberOfLanes = lanes.size()
-    return flowcell, lanes, numberOfLanes
-  
-  ##########################################################
-  
-  def updateLane(transaction, codeSampleFlowCell, totalLaneStatistics):
-    
-    print("Setting Complete Lanes Statistics For: " + lane.getSampleIdentifier())
-    mutable_lane = transaction.getSampleForUpdate(lane.getSampleIdentifier())
-    mutable_lane.setPropertyValue("YIELD_MBASES", str(int(totalLaneStatistics.get(lane_in_int).Sum_PfYield)))
-    mutable_lane.setPropertyValue('RAW_YIELD_MBASES', str(int(totalLaneStatistics.get(lane_in_int).Sum_RawYield)))
-    mutable_lane.setPropertyValue('PERCENTAGE_PASSED_FILTERING',str(int(totalLaneStatistics.get(lane_in_int).Percentage_PfClusterCount_RawClusterCount)))
-    mutable_lane.setPropertyValue('PF_CLUSTERS_SUM',str(int(totalLaneStatistics.get(lane_in_int).Sum_PfClusterCount)))
-    mutable_lane.setPropertyValue('RAW_CLUSTERS_SUM',str(int(totalLaneStatistics.get(lane_in_int).Sum_RawClusterCount)))
-    mutable_lane.setPropertyValue('PFYIELDQ30PERCENTAGE', str(int(totalLaneStatistics.get(lane_in_int).Percentage_PfYieldQ30_PfYield)))
-    mutable_lane.setPropertyValue('PFMEANQUALITYSCORE', str(totalLaneStatistics.get(lane_in_int).Fraction_PfQualityScoreSum_PfYield))
-    mutable_lane.setPropertyValue('CLUSTERS_PF_WITHOUT_NOINDEX', str(int(totalLaneStatistics.get(lane_in_int).Clusters_PfWithoutNoindex)))
-
-  ##########################################################
-
-  def update_datatsets(transaction, samplestatisticslist, codeSampleFlowLane, codeSampleFlowCell):
-    # Prepare links between XML and openBIS w.r.t to indexes in DataSet (openBIS):
-
-    nprocessedDataSets = 0
-
-    index1list, index2list = getIndexesOfDataSetsOfSample(codeSampleFlowLane)
-#     print(index1list)
-    
-    propertiesCode, propertiesCodeValue = getInfoSampleProperties(codeSampleFlowCell)
-    index1length = int(propertiesCodeValue[CODE_INDEX1LENGTH])
-    index2length = int(propertiesCodeValue[CODE_INDEX2LENGTH])
-   
-   
-    pre_filtered_list = [sample for sample in samplestatisticslist if sample.Lane == int(codeSampleFlowLane[-1])]
-    print("Number of samples: " + str(len(pre_filtered_list)) + " for lane " + codeSampleFlowLane[-1])
-    
-    for s in pre_filtered_list:
-        print "\nContent in XML file:\n", s
-    
-        # Prepare link between XML and openBIS w.r.t to indexes in Barcode (XML):
-        indexes = s.Barcode.split(BARCODE_SPLIT_CHAR)
-        if len(indexes) == 1: # only first part in Barcode
-            index1search = indexes[0].upper()
-            index2search = INDEX_EMPTY
-        elif len(indexes) == 2: # both parts in Barcode
-            index1search = indexes[0].upper()
-            index2search = indexes[1].upper()
-        else:
-            index1search = INDEX_EMPTY
-            index2search = INDEX_EMPTY
-    
-        # Set link between XML and openBIS w.r.t to indexes in DataSet (openBIS):
-        if index1search == INDEX_EMPTY or index1search == INDEX_UNKNOWN: 
-            index1 = INDEX_NO
-        else: # Hint: just two cases were known about index1length, that is 8 or 6
-            if index1length > 7:
-                index1 = [ index1 for index1 in index1list if index1search == index1 ]
-            else: # for smaller indexlength, the index is by 1 shorter in XML-file than in openBIS
-                index1 = [ index1 for index1 in index1list if index1search == index1[:index1length] ]
-            try:
-                index1 = index1[0]
-            except: 
-                print '\nOCCURRED EXCEPTION: First index \"' + index1search + '\" of Barcode in XML file has no corresponding DataSet(' + str(index1list) + ') in openBIS!'
-                index1 = 'MISSING'
-        if index2search == INDEX_EMPTY or index2search == INDEX_UNKNOWN:
-            index2 = INDEX_NO
-        else: # Hint: just one case was known about index2length, that is 8
-            index2 = [ index2 for index2 in index2list if (index2search) == index2 ]
-            try:
-                index2 = index2[0]
-            except: 
-                print '\nOCCURRED EXCEPTION: Second index \"' + index2search + '\" of Barcode in XML file has no corresponding DataSet in openBIS!'
-                index2 = 'MISSING'
-    
-        # Get DataSet of openBIS corresponding to Project/Sample/Barcode of XML file:
-        correspondingDataSet = searchDataSetsOfSample(codeSampleFlowLane, index1, index2)
-        try:
-            assert correspondingDataSet.size() == 1
-        except AssertionError: 
-            print ('\nOCCURRED EXCEPTION: ' + str(correspondingDataSet.size()) + ' DataSets found which Sample match the criteria index1 \"' + str(index1) + '\" and index2 \"' + str(index2) + '\" and code \"' + codeSampleFlowLane + '\" and type \"' + TYPE_DATASET + '\".')
-            continue 
-        
-        # Modify Properties of corresponding DataSet:
-        # (method setPropertyValue requires Strings as Input, but Number format must fit to Properties already defined in openBIS)
-        ds = transaction.getDataSetForUpdate(correspondingDataSet[0].getDataSetCode())
-        ds.setPropertyValue('YIELD_MBASES', str(int(s.Mega_PfYield)))
-        ds.setPropertyValue('RAW_YIELD_MBASES', str(int(s.Mega_RawYield)))
-        ds.setPropertyValue('PERCENTAGE_PASSED_FILTERING',str(s.Percentage_PfClusterCount_RawClusterCount))
-        ds.setPropertyValue('PF_READS_SUM',str(int(s.Sum_PfClusterCount))) # convert first to Integer, then to String
-        ds.setPropertyValue('RAW_READS_SUM',str(int(s.Sum_RawClusterCount))) # convert first to Integer, then to String
-        ds.setPropertyValue('PERCENTAGE_RAW_CLUSTERS_PER_LANE', str(s.Percentage_RawClusterCount_AllRawClusterCounts))
-        ds.setPropertyValue('PFYIELDQ30PERCENTAGE', str(s.Percentage_PfYieldQ30_PfYield))
-        ds.setPropertyValue('PFMEANQUALITYSCORE', str(s.Fraction_PfQualityScoreSum_PfYield))
-        print "Properties in DataSet \"" + correspondingDataSet[0].getDataSetCode() + "\" are modified."
-        nprocessedDataSets += 1
-        
-    return nprocessedDataSets
-
-
-  ##########################################################
-  
-  print('\nPROCESS RUNNING '+time.ctime())
-  incomingPath = transaction.getIncoming().getPath()  
-  FileGenerator= locate(XML_FILENAME, incomingPath)
-  xmlfile = FileGenerator.next()
-  print "File: " + xmlfile
-  
-  # Import data of XML file (independent of openBIS data):
-  JavaClassToProcessXML = read_demultiplex_stats_miseq_hiseq() # this function is implemented as Class in Java:
-  samplestatisticslist = JavaClassToProcessXML.importXmlAndCalculateStatistics(xmlfile)
-  totalLaneStatistics = JavaClassToProcessXML.calculateTotalLaneStatistics(samplestatisticslist)
-  
-  if len(samplestatisticslist) == 0:
-    print "\nNo Projects/Samples/Barcodes are contained in XML-file " + xmlfile + "!"
-    return
-
-  print(samplestatisticslist[0].Flowcell)
-  codeSampleFlowCell = samplestatisticslist[0].Flowcell # expect just one equal FlowCell
-  flowcell, lanes, numberOfLanes = sampleSearch(transaction, codeSampleFlowCell)
-  
-  for lane in lanes:
-    lane_in_int = int(lane.getCode().split(":")[-1])
-    if (lane_in_int in totalLaneStatistics.keySet()):
-        updateLane(transaction, codeSampleFlowCell, totalLaneStatistics)
-        
-        codeSampleFlowLane = ":".join([codeSampleFlowCell, str(lane_in_int)])
-        nprocessedDataSets = update_datatsets(transaction, samplestatisticslist, codeSampleFlowLane, codeSampleFlowCell)
-
-  print "\n", nprocessedDataSets, " openBIS-DataSets were processed." 
-  print len(samplestatisticslist), " XML-Projects/-Samples/-Barcodes were processed."
-  print("PROCESS DONE "+time.ctime())
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-miseq-hiseq/read_demultiplex_stats_miseq_hiseq.java b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-miseq-hiseq/read_demultiplex_stats_miseq_hiseq.java
deleted file mode 100644
index 7f04fc6acbc..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-miseq-hiseq/read_demultiplex_stats_miseq_hiseq.java
+++ /dev/null
@@ -1,736 +0,0 @@
-/*
-@copyright: 2015 ETH Zuerich, CISD
-
-@license:
-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.
-
-@author: Fabian Gemperle
-@autor: Manuel Kohler
-
-@note: This Class is in Jython importable as Java-Library after compiling it.
-       In compilation 4 Class files arise:
-       - read_demultiplex_stats.class
-       - read_demultiplex_stats$SampleItem.class
-       - read_demultiplex_stats$Sample.class
-       - read_demultiplex_stats$Statistics.class
- */
-
-
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamConstants;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-//##########################################################
-
-public final class read_demultiplex_stats_miseq_hiseq
-{
-
-    public static ArrayList<Statistics> importXmlAndCalculateStatistics(String XMLFile) throws Exception {
-
-        ArrayList<Statistics> stats = executeImportXmlAndCalculateStatistics(XMLFile);
-        HashMap<Integer, ArrayList<Statistics>> groupedList = groupByLane(stats);
-
-        for (Statistics s : stats)
-            s.adaptStatisticsWithRespectToAllSamples(stats, groupedList);
-        return stats;
-    }
-
-    /**
-     *
-     * Streams through a given XML file, parses the data and writes it into a Statistics object
-     *
-     * @param XMLfile: ConversionStats.xml
-     * @return a ArrayList of <Statistics>
-     */
-    private static  ArrayList<Statistics> executeImportXmlAndCalculateStatistics(String XMLfile) throws Exception {
-        ArrayList<Statistics> sampleStatisticsList = new ArrayList<>();
-
-        /*Parse corresponding XML file, put all values into a memory structure, calculate statistics overall samples.
-          Output: sampleStatisticsList (list of Sample-Statistics-Objects)
-          Input:  XMLfile having structure of file ConversionStats.xml (Example of 1.10.2014):
-                  <?xml version="1.0" encoding="utf-8"?>                             => Assumptions about XML structure:
-                  <Stats>                                                            => Element is singlechild
-                    <Flowcell flowcell-id="H0YVKBGXX">                               => Element is singlechild
-                      <Project name="BSSE_QGF_23096_H0YVKBGXX_1">  => Element is one of many children, additionally there is summary-element with attribute name="all"
-                        <Sample name="BSSE_QGF_23096_H0YVKBGXX_1_PZ27_PZ33_CelSEQ_"> => Element is singlechild except second summary-element with attribute name="all"
-                          <Barcode name="unknown">                                   => Element is singlechild except second summary-element with attribute name="all"
-                            <Lane number="1">                                        => Element is one of several children
-                              <Tile number="11101">                                  => Element is one of many children
-                                <Raw>                                                => Element is singlechild
-                                  <ClusterCount>328653</ClusterCount>                => Element is singlechild
-                                  <Read number="1">                                  => Element is one of several children
-                                    <Yield>24977628</Yield>                          => Element is singlechild
-                                    <YieldQ30>16162292</YieldQ30>                    => Element is singlechild
-                                    <QualityScoreSum>703070796</QualityScoreSum>     => Element is singlechild
-                                  </Read>
-                                  <Read number="2">                                  => Element is one of several children
-                                    <Yield>24977628</Yield>                          => Element is singlechild
-                                    <YieldQ30>16233173</YieldQ30>                    => Element is singlechild
-                                    <QualityScoreSum>699507245</QualityScoreSum>     => Element is singlechild
-                                  </Read>
-                                </Raw>
-                                <Pf>                                                 => Element is singlechild
-                                  <ClusterCount>302121</ClusterCount>                => Element is singlechild
-                                  <Read number="1">                                  => Element is one of several children
-                                    <Yield>22961196</Yield>                          => Element is singlechild
-                                    <YieldQ30>15842531</YieldQ30>                    => Element is singlechild
-                                    <QualityScoreSum>686898532</QualityScoreSum>     => Element is singlechild
-                                  </Read>
-                                  <Read number="2">                                  => Element is one of several children
-                                    <Yield>22961196</Yield>                          => Element is singlechild
-                                    <YieldQ30>16233173</YieldQ30>                    => Element is singlechild
-                                    <QualityScoreSum>699507245</QualityScoreSum>     => Element is singlechild
-                                  </Read>
-                                </Pf>
-                              </Tile>
-                              <Tile number="11102">
-                              [...]
-
-                      </Project>
-                      <Lane number="2">
-                        <TopUnknownBarcodes>
-                          <Barcode count="150988002" sequence="NNNNNNN"/>
-                          <Barcode count="167095" sequence="CCCCCCC"/>
-                          <Barcode count="57859" sequence="CCCGTCC"/>
-                          <Barcode count="49993" sequence="CCGATGT"/>
-                          <Barcode count="42981" sequence="GTCCCGC"/>
-                          <Barcode count="40446" sequence="TAAAATT"/>
-                          <Barcode count="39962" sequence="CCAGATC"/>
-                          <Barcode count="34688" sequence="GATGTAT"/>
-                          <Barcode count="32013" sequence="AAAAAGT"/>
-                          <Barcode count="30501" sequence="AGATCAT"/>
-                        </TopUnknownBarcodes>
-                      </Lane>
-                      [...]
-        */
-
-//        Map<Integer, Map<String, Integer>> barcodesPerLane = null;
-
-        try {
-            String errorMessage;
-            int event;
-            int skip;
-            String flowcellName = "";
-            String projectName = "";
-            String sampleName = "";
-            String barcodeName = "";
-            int laneNumber = 0;
-            int tileNumber;
-            Sample currentSample = null;
-            Statistics statistics;
-            SampleItem rawItem;
-            SampleItem pfItem;
-            Map<String, Integer> barcodesMap = new HashMap<>();
-            Map<Integer, Map<String, Integer>> barcodesPerLane = new HashMap<>();
-
-                    InputStream xmlFile = new FileInputStream(XMLfile);
-            XMLInputFactory xmlFactory = XMLInputFactory.newInstance();
-            XMLStreamReader xmlParser = xmlFactory.createXMLStreamReader(xmlFile);
-
-            // Start-Tag "Stats":
-            event = xmlParser.nextTag(); // Assumption: just white space or comments are aside explicit start-tag
-            if (event != XMLStreamConstants.START_ELEMENT || !xmlParser.getLocalName().equals("Stats")) {
-                errorMessage =
-                        "STRANGE ERROR IN METHOD importXmlAndCalculateStatistics WHEN READING IN XMLFILE. => CHECK CODE AND XMLFILE-STRUCTURE! Got " + event;
-                throw new Exception(errorMessage);
-            }
-
-            // Loop over potential Tags "Flowcell":
-            event = xmlParser.nextTag(); // Assumption: just white spaces or comments are aside start- or end-tag
-            //            List<Statistics> samplestatistics = new ArrayList<Statistics>();
-            boolean doimport = true;
-            while (doimport) {
-                // concerning tag Flowcell:
-                if (event == XMLStreamConstants.START_ELEMENT && xmlParser.getLocalName().equals("Flowcell")) {
-                    flowcellName = xmlParser.getAttributeValue(0);
-                    event = xmlParser.nextTag();
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlParser.getLocalName().equals("Flowcell")) {
-                    flowcellName = "";
-                    event = xmlParser.nextTag();
-
-                    // concerning tag Project:
-                } else if (event == XMLStreamConstants.START_ELEMENT && xmlParser.getLocalName().equals("Project")) {
-                    if (xmlParser.getAttributeValue(0).equals("all")) {
-                        //skip the current XML element and all of its following subelements:
-                        skip = 1;
-                        while (skip > 0) {
-                            event = xmlParser.next();
-                            switch (event) {
-                                case XMLStreamConstants.END_ELEMENT:
-                                    skip -= 1;
-                                    break;
-                                case XMLStreamConstants.START_ELEMENT:
-                                    skip += 1;
-                                    break;
-                                default:
-                                    skip += 0; // text elements, spaces, ...
-                                    break;
-                            }
-                        }
-                    } else {
-                    projectName = xmlParser.getAttributeValue(0);
-
-                    }
-                    event = xmlParser.nextTag();
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlParser.getLocalName().equals("Project")) {
-                    projectName = "";
-                    event = xmlParser.nextTag();
-
-                    // concerning tag Sample:
-                } else if (event == XMLStreamConstants.START_ELEMENT && xmlParser.getLocalName().equals("Sample")) {
-                    if (xmlParser.getAttributeValue(0).equals("all")) {
-                        // skip the current XML element and all of its following subelements:
-                        skip = 1;
-                        while (skip > 0) {
-                            event = xmlParser.next();
-                            switch (event) {
-                                case XMLStreamConstants.END_ELEMENT:
-                                    skip -= 1;
-                                    break;
-                                case XMLStreamConstants.START_ELEMENT:
-                                    skip += 1;
-                                    break;
-                                default:
-                                    skip += 0; // text elements, spaces, ...
-                                    break;
-                            }
-                        }
-                    } else {
-                        sampleName = xmlParser.getAttributeValue(0);
-                    }
-                    event = xmlParser.nextTag();
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlParser.getLocalName().equals("Sample")) {
-                    sampleName = "";
-                    event = xmlParser.nextTag();
-
-                    // concerning tag Barcode (which is as well the start/end of Project-/Sample-Entry):
-                } else if (event == XMLStreamConstants.START_ELEMENT && xmlParser.getLocalName().equals("Barcode")) {
-                    if (xmlParser.getAttributeValue(0).equals("all")) {
-                        // skip the current XML element and all of its following subelements:
-                        skip = 1;
-                        while (skip > 0) {
-                            event = xmlParser.next();
-                            switch (event) {
-                                case XMLStreamConstants.END_ELEMENT:
-                                    skip -= 1;
-                                    break;
-                                case XMLStreamConstants.START_ELEMENT:
-                                    skip += 1;
-                                    break;
-                                default:
-                                    skip += 0; // text elements, spaces, ...
-                                    break;
-                            }
-                        }
-                    } else {
-                        barcodeName = xmlParser.getAttributeValue(0);
-                    }
-                    event = xmlParser.nextTag();
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlParser.getLocalName().equals("Barcode")) {
-                    barcodeName = "";
-                    event = xmlParser.nextTag();
-
-
-                    // concerning Lane:
-                } else if (event == XMLStreamConstants.START_ELEMENT && xmlParser.getLocalName().equals("Lane")) {
-//                    System.out.println("\nStart-Element with tag " + xmlparser.getLocalName() + " with " + xmlparser.getAttributeCount() + " attributes with first attribute: " + xmlparser.getAttributeLocalName(0) +" = " + xmlparser.getAttributeValue(0));
-                    laneNumber = Integer.parseInt(xmlParser.getAttributeValue(0));
-
-                    // Now we have everything we need, we put it into a Sample
-                    currentSample = new Sample();
-
-                    if (sampleName.startsWith("Undetermined")) {
-                        currentSample.Sample = sampleName + "_" + flowcellName + "_" + laneNumber;
-                    } else {
-                        currentSample.Sample = sampleName;
-                    }
-
-                    currentSample.Flowcell = flowcellName;
-                    currentSample.Lane = laneNumber;
-                    currentSample.Project = projectName;
-                    currentSample.Barcode = barcodeName;
-                    event = xmlParser.nextTag();
-//                    System.out.println(currentSample.Sample);
-
-
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlParser.getLocalName().equals("Lane")) {
-                    // Statistics 1st step: calculate individual statistics per sample:
-                    statistics = new Statistics(currentSample);
-                    if (!currentSample.Project.equals("")) {
-                        sampleStatisticsList.add(statistics);
-                    }
-                    currentSample = null;
-                    statistics = null;
-
-//                    laneNumber = Double.NaN;
-                    event = xmlParser.nextTag();
-
-                    // concerning Tile with all its sub-elements:
-                } else if (event == XMLStreamConstants.START_ELEMENT && xmlParser.getLocalName().equals("Tile")) {
-                    tileNumber = Integer.parseInt(xmlParser.getAttributeValue(0));
-                    // concerning Raw with Assumption: Raw-element is singlechild:
-                    xmlParser.nextTag();
-                    rawItem = new SampleItem();
-                    rawItem.Type = "Raw";
-                    rawItem.Lane = laneNumber;
-                    rawItem.Tile = tileNumber;
-                    xmlParser.nextTag();
-                    rawItem.ClusterCount = Integer.parseInt(xmlParser.getElementText()); // Assumption: ClusterCount-element is numeric singlechild
-                    //System.out.println("\nValue: ClusterCount=" + rawItem.ClusterCount);
-                    xmlParser.nextTag();
-                    while (event == XMLStreamConstants.START_ELEMENT && xmlParser.getLocalName().equals("Read")) {
-                        //System.out.println("\nStart-Element with tag " + xmlparser.getLocalName() + " with " + xmlparser.getAttributeCount() + " attributes with first attribute: " + xmlparser.getAttributeLocalName(0) +" = " + xmlparser.getAttributeValue(0));
-                        xmlParser.nextTag();
-                        rawItem.YieldList.add(Double.parseDouble(xmlParser.getElementText()));
-                        xmlParser.nextTag();
-                        rawItem.YieldQ30List.add(Double.parseDouble(xmlParser.getElementText()));
-                        xmlParser.nextTag();
-                        rawItem.QualityScoreSumList.add(Double.parseDouble(xmlParser.getElementText()));
-                        xmlParser.nextTag();
-                        xmlParser.nextTag();
-                        //System.out.println("Values in Read: Yield=" + rawItem.YieldList.get(rawItem.YieldList.size()-1) + ", YieldQ30=" + rawItem.YieldQ30List.get(rawItem.YieldQ30List.size()-1) + ", QualityScoreSum=" + rawItem.QualityScoreSumList.get(rawItem.QualityScoreSumList.size()-1));
-                    }
-                    //System.out.println("\nRaw-SampleItem  " + rawItem);
-                    currentSample.RawList.add(rawItem);
-
-
-                    rawItem = null;
-                    // concerning Pf with Assumption that entire Pf-element is structured same as Raw:
-                    xmlParser.nextTag();
-                    //System.out.println("\nStart-Element with tag " + xmlparser.getLocalName());
-                    pfItem = new SampleItem();
-                    pfItem.Type = "Pf";
-                    pfItem.Lane = laneNumber;
-                    pfItem.Tile = tileNumber;
-                    xmlParser.nextTag();
-                    pfItem.ClusterCount = Integer.parseInt(xmlParser.getElementText());
-                    //System.out.println("\nValue: ClusterCount=" + pfItem.ClusterCount);
-                    xmlParser.nextTag();
-                    while (event == XMLStreamConstants.START_ELEMENT && xmlParser.getLocalName().equals("Read")) {
-                        //System.out.println("\nStart-Element with tag " + xmlparser.getLocalName() + " with " + xmlparser.getAttributeCount() + " attributes with first attribute: " + xmlparser.getAttributeLocalName(0) +" = " + xmlparser.getAttributeValue(0));
-                        xmlParser.nextTag();
-                        pfItem.YieldList.add(Double.parseDouble(xmlParser.getElementText()));
-                        xmlParser.nextTag();
-                        pfItem.YieldQ30List.add(Double.parseDouble(xmlParser.getElementText()));
-                        xmlParser.nextTag();
-                        pfItem.QualityScoreSumList.add(Double.parseDouble(xmlParser.getElementText()));
-                        xmlParser.nextTag();
-                        xmlParser.nextTag();
-                        //System.out.println("Values in Read: Yield=" + pfItem.YieldList.get(pfItem.YieldList.size()-1) + ", YieldQ30=" + pfItem.YieldQ30List.get(pfItem.YieldQ30List.size()-1) + ", QualityScoreSum=" + pfItem.QualityScoreSumList.get(pfItem.QualityScoreSumList.size()-1));
-                    }
-                    //System.out.println("\nPf-SampleItem  " + pfItem);
-                    currentSample.PfList.add(pfItem);
-                    pfItem = null;
-                    // attain end of current Tile and afterwards continue in next Tile/Lane/Barcode/Sample/Project:
-                    event = xmlParser.nextTag();
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlParser.getLocalName().equals("Tile")) {
-                    tileNumber = 0;
-                    event = xmlParser.nextTag();
-
-
-                } else if (event == XMLStreamConstants.START_ELEMENT && xmlParser.getLocalName().equals("TopUnknownBarcodes")) {
-
-                    event = xmlParser.nextTag();
-                    while (event == XMLStreamConstants.START_ELEMENT && xmlParser.getLocalName().equals("Barcode")) {
-                        Integer numberOfBarcodes = Integer.valueOf((xmlParser.getAttributeValue(0)));
-                        String barcode = xmlParser.getAttributeValue(1);
-                        barcodesMap.put(barcode, numberOfBarcodes);
-                        xmlParser.nextTag();
-                        event = xmlParser.nextTag();
-                    }
-
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlParser.getLocalName().equals("TopUnknownBarcodes")) {
-
-                    barcodesPerLane.put(laneNumber, barcodesMap);
-                    event = xmlParser.nextTag();
-
-                    //  concerning finish of reading in XML or hit upon error due XML content:
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlParser.getLocalName().equals("Stats")) {
-                    // this final part of while loop is just for analyzing potential errors, but
-                    // could be removed and changed in:  while xmlparser.getLocalName() != 'Stats'
-                    doimport = false;
-                } else {
-                    doimport = false;
-                    System.out.println("Warning: Different XML structure than expectet. Got event: " + event);
-                }
-            }
-            xmlParser.close();
-
-        } catch (FileNotFoundException | XMLStreamException | IllegalArgumentException e) {
-            System.out.println("OCCURRED EXCEPTION " + e.toString());
-            e.printStackTrace();
-        }
-        return sampleStatisticsList;
-    }
-
-    public static HashMap<Integer, LaneStatistics> calculateTotalLaneStatistics(ArrayList<Statistics> samplestatisticslist)
-    {
-        HashMap<Integer, LaneStatistics> listOfLaneStatistics= new HashMap<Integer, LaneStatistics>();
-
-        HashMap<Integer, ArrayList<Statistics>> groupedList = groupByLane(samplestatisticslist);
-
-        for (Integer key : groupedList.keySet()) {
-
-            LaneStatistics laneStats = new LaneStatistics(groupedList.get(key));
-            laneStats.calculateOverallStats(key);
-            listOfLaneStatistics.put(key, laneStats);
-        }
-        return listOfLaneStatistics;
-    }
-
-
-    private static HashMap<Integer, ArrayList<Statistics>> groupByLane(ArrayList<Statistics> samplestatisticslist) {
-        // Group ArrayList by Lane
-        HashMap<Integer, ArrayList<Statistics>> groupedList = new HashMap <Integer, ArrayList<Statistics>>();
-        for (Statistics s : samplestatisticslist) {
-
-            if (groupedList.containsKey(s.Lane)) {
-                groupedList.get(s.Lane).add(s);
-            }
-            else {
-                ArrayList <Statistics> newEntry = new ArrayList<Statistics>();
-                newEntry.add(s);
-                groupedList.put(s.Lane, newEntry);
-            }
-        }
-        return groupedList;
-    }
-
-
-    // ##########################################################
-
-    private static class SampleItem
-    {
-        /*
-         * Object of an item in sample including - the corresponding type Raw or Pf - the index of corresponding Lane, Tile - measured value of
-         * ClusterCount and values in Lists (w.r.t. Read) of Yield, YieldQ30, QualityScoreSum
-         */
-
-        public String Type = "";
-
-        public Integer Lane = 0;
-
-        public Integer Tile = 0;
-
-        public Integer ClusterCount = 0;
-
-        // Define unknown ArrayList of numerical values with changeable List size. Type Double(object) instead of double(primitive) is necessary in
-        // Lists.
-        public List<Double> YieldList = new ArrayList<>();
-
-        public List<Double> YieldQ30List = new ArrayList<>();
-
-        public List<Double> QualityScoreSumList = new ArrayList<>();
-
-        public String toString()
-        {
-            return "Type: " + this.Type + ", Lane: " + (long) this.Lane + ", Tile: " + (long) this.Tile
-                    + ", ClusterCount: " + (long) this.ClusterCount + ", YieldList: " + this.YieldList
-                    + ", YieldQ30List: " + this.YieldQ30List + ", QualityScoreSumList: " + this.QualityScoreSumList;
-        }
-
-    }
-
-    // ##########################################################
-
-    public static class Sample
-    {
-        /*
-         * Object of an entire sample including - the name of Flowcell, Project, Sample, Barcode - the list of Raw and Pf SampleItem-Objects
-         */
-
-        public String Flowcell = "";
-        
-        public Integer Lane = 0;
-
-        public String Project = "";
-
-        public String Sample = "";
-
-        public String Barcode = "";
-
-        // Define unknown ArrayList of SampleItems:
-        public List<SampleItem> RawList = new ArrayList<>();
-
-        public List<SampleItem> PfList = new ArrayList<>();
-
-        public String toString()
-        {
-            return "Flowcell: " + this.Flowcell + ", Lane: " + this.Lane + ", Project: " + this.Project + ", Sample: " + this.Sample + ", Barcode: " + this.Barcode
-                    + ", RawList: " + this.RawList + ", PfList: " + this.PfList;
-        }
-
-    }
-
-    // ##########################################################
-
-    public static class Statistics extends Sample
-    {
-        /*
-         * Object of Statistics within one single sample inherited from Sample-Object
-         */
-
-        public Integer Sum_RawClusterCount = 0;
-
-        public Integer Sum_PfClusterCount = 0;
-
-        public double Sum_RawYield = Double.NaN;
-
-        public double Sum_PfYield = Double.NaN;
-
-        public double Sum_RawYieldQ30 = Double.NaN;
-
-        public double Sum_PfYieldQ30 = Double.NaN;
-
-        public double Sum_RawQualityScoreSum = Double.NaN;
-
-        public double Sum_PfQualityScoreSum = Double.NaN;
-
-        public double Mega_RawYield = Double.NaN; // obvious double, but could be turned into int
-
-        public double Mega_PfYield = Double.NaN; // obvious double, but could be turned into int
-
-        public double Percentage_PfYield_RawYield = Double.NaN;
-
-        public double Percentage_PfYieldQ30_PfYield = 0.0;
-
-        public double Fraction_PfQualityScoreSum_PfYield = 0.0;
-
-        public double Percentage_PfClusterCount_RawClusterCount = Double.NaN;
-
-        public double Percentage_RawClusterCount_AllRawClusterCounts = Double.NaN;
-
-        public Statistics(Sample sample)
-        {
-            /*
-             * Constructor of derived class Initialization: Already initialized Sample-Object is necessary argument.
-             */
-
-            super();
-            Flowcell = sample.Flowcell;
-            Lane = sample.Lane;
-            Project = sample.Project;
-            Sample = sample.Sample;
-            Barcode = sample.Barcode;
-            RawList = sample.RawList;
-            PfList = sample.PfList;
-
-            if (RawList.size() > 0)
-                Sum_RawClusterCount = 0;
-            for (SampleItem s : RawList)
-                Sum_RawClusterCount += s.ClusterCount;
-            if (PfList.size() > 0)
-                Sum_PfClusterCount = 0;
-            for (SampleItem s : PfList)
-                Sum_PfClusterCount += s.ClusterCount;
-            if (RawList.size() > 0)
-                Sum_RawYield = 0;
-            for (SampleItem s : RawList)
-                for (double d : s.YieldList)
-                    Sum_RawYield += d;
-            if (PfList.size() > 0)
-                Sum_PfYield = 0;
-            for (SampleItem s : PfList)
-                for (double d : s.YieldList)
-                    Sum_PfYield += d;
-            if (RawList.size() > 0)
-                Sum_RawYieldQ30 = 0;
-            for (SampleItem s : RawList)
-                for (double d : s.YieldQ30List)
-                    Sum_RawYieldQ30 += d;
-            if (PfList.size() > 0)
-                Sum_PfYieldQ30 = 0;
-            for (SampleItem s : PfList)
-                for (double d : s.YieldQ30List)
-                    Sum_PfYieldQ30 += d;
-            if (RawList.size() > 0)
-                Sum_RawQualityScoreSum = 0;
-            for (SampleItem s : RawList)
-                for (double d : s.QualityScoreSumList)
-                    Sum_RawQualityScoreSum += d;
-            if (PfList.size() > 0)
-                Sum_PfQualityScoreSum = 0;
-            for (SampleItem s : PfList)
-                for (double d : s.QualityScoreSumList)
-                    Sum_PfQualityScoreSum += d;
-            // Mega_RawYield = calculate_MegaUnit(Sum_RawYield);
-            // Mega_PfYield = calculate_MegaUnit(Sum_PfYield);
-
-            Mega_RawYield = Sum_RawYield;
-            Mega_PfYield = Sum_PfYield;
-
-            Percentage_PfYield_RawYield = calculate_Percentage(Sum_PfYield, Sum_RawYield);
-            Percentage_PfYieldQ30_PfYield = calculate_Percentage(Sum_PfYieldQ30, Sum_PfYield);
-            Fraction_PfQualityScoreSum_PfYield = calculate_Fraction(Sum_PfQualityScoreSum, Sum_PfYield);
-            Percentage_PfClusterCount_RawClusterCount = calculate_Percentage(Sum_PfClusterCount, Sum_RawClusterCount);
-            // Calculation of attribute "Percentage_RawClusterCount_AllRawClusterCounts" needs statistics of all other included samples. => After
-            // initializing this object, apply method: adaptStatisticsWithRespectToAllSamples(statisticslist)
-        }
-
-        public String toString()
-        {
-            return "Flowcell: " + this.Flowcell + ", Lane: "+ this.Lane + ", Project: " + this.Project + ", Sample: " + this.Sample + ", Barcode: " + this.Barcode
-                    + ", Raw Clusters: " + (long) this.Sum_RawClusterCount + ", Mbases Raw Yield: " + this.Mega_RawYield
-                    + ", % Raw Clusters overall: " + this.Percentage_RawClusterCount_AllRawClusterCounts
-                    + ", Pf Clusters: " + (long) this.Sum_PfClusterCount + ", Mbases Pf Yield: " + this.Mega_PfYield
-                    + ", % PfYield/RawYield: " + this.Percentage_PfYield_RawYield
-                    + ", % PfYieldQ30/PfYield: " + this.Percentage_PfYieldQ30_PfYield
-                    + ", Mean Pf Quality Score: " + this.Fraction_PfQualityScoreSum_PfYield
-                    + ", % Passes Filtering: " + this.Percentage_PfClusterCount_RawClusterCount + "\n";
-        }
-
-        public void adaptStatisticsWithRespectToAllSamples(ArrayList<Statistics> statisticslist, HashMap<Integer, ArrayList<Statistics>>  groupedList)
-        {
-            /*
-             * This Statistics-Object (corresponding to one sample) is adapted by employing a list of Statistics-Objects corresponding to all samples
-             * influencing the statistics of single sample. Input: statisticslist contains all Statistics-Objects
-             */
-            if (statisticslist.size() == 0)
-            { // here it additionally should be checked, if calling object is included ...
-                Percentage_RawClusterCount_AllRawClusterCounts = Double.NaN;
-                String errormessage =
-                        "INPUT ARGUMENT statisticslist MUST BE LIST OF Statistics OBJECTS INCLUDING THE CALLING OBJECT" +
-                                " IN METHOD adaptStatisticsWithRespectToAllSamples!";
-                throw new IllegalArgumentException(errormessage); // Exception reasonable since otherwise wrong results.
-            } else
-            {
-                for (Integer key : groupedList.keySet()) {
-                    double sumAllRawClusterCounts = 0;
-                    ArrayList<Statistics> groupList = groupedList.get(key);
-                    for (Statistics element : groupList) {
-                        sumAllRawClusterCounts += element.Sum_RawClusterCount;
-                    }
-                    for (Statistics element : groupList) {
-                        element.Percentage_RawClusterCount_AllRawClusterCounts =
-                                calculate_Percentage(element.Sum_RawClusterCount, sumAllRawClusterCounts);
-                    }
-                }
-            }
-        }
-
-
-        public double calculate_Percentage(double x, double y)
-        {
-            double z = x / y;
-            if (z == Double.POSITIVE_INFINITY || z == Double.NEGATIVE_INFINITY || Double.isNaN(z))
-            {
-                z = 0.0;
-            } else
-            {
-                z = 100 * z;
-            }
-            return z;
-        }
-
-        public double calculate_Fraction(double x, double y)
-        {
-            double z = x / y;
-            if (z == Double.POSITIVE_INFINITY || z == Double.NEGATIVE_INFINITY || Double.isNaN(z))
-            {
-                z = 0.0;
-            }
-            return z;
-        }
-    }
-
-    public static class LaneStatistics
-    {
-        /*
-         * Total Lane Statistics
-         */
-        public ArrayList<Statistics> statisticsList;
-
-        public Integer Lane = 0;
-
-        public double Sum_RawClusterCount = 0.0;
-
-        public Integer Sum_PfClusterCount = 0;
-
-        public double Sum_RawYield = 0.0;
-
-        public double Sum_PfYield = 0.0;
-
-        public double Sum_RawYieldQ30 = 0.0;
-
-        public double Sum_PfYieldQ30 = 0.0;
-
-        public double Sum_RawQualityScoreSum = 0.0;
-
-        public double Sum_PfQualityScoreSum = 0.0;
-
-        public double Percentage_PfYield_RawYield = 0.0;
-
-        public double Percentage_PfYieldQ30_PfYield = 0.0;
-
-        public double Fraction_PfQualityScoreSum_PfYield = 0.0;
-
-        public double Percentage_PfClusterCount_RawClusterCount = 0.0;
-
-        public double Percentage_RawClusterCount_AllRawClusterCounts = 0.0;
-
-        public double Clusters_PfWithoutNoindex = 0.0;
-
-        public LaneStatistics(ArrayList<Statistics> statisticsList)
-        {
-            this.statisticsList = statisticsList;
-        }
-
-        public void calculateOverallStats(Integer key)
-        {
-            int sampleNumber = statisticsList.size();
-            for (Statistics s : statisticsList) {
-                if (!s.Barcode.equals("") || s.Barcode.equals("unknown")) {
-                    this.Clusters_PfWithoutNoindex += s.Sum_PfClusterCount;
-                }
-
-                this.Sum_RawClusterCount += s.Sum_RawClusterCount;
-                this.Sum_PfClusterCount += s.Sum_PfClusterCount;
-                this.Sum_RawYield += s.Sum_RawYield;
-                this.Sum_PfYield += s.Sum_PfYield;
-                this.Sum_RawYieldQ30 += s.Sum_RawYieldQ30;
-                this.Sum_PfYieldQ30 += s.Sum_PfYieldQ30;
-                this.Sum_RawQualityScoreSum += s.Sum_RawQualityScoreSum;
-                this.Sum_PfQualityScoreSum += s.Sum_PfQualityScoreSum;
-                this.Percentage_PfYield_RawYield += s.Percentage_PfYield_RawYield;
-                if (!Double.isNaN(s.Percentage_PfYieldQ30_PfYield)) {
-                    this.Percentage_PfYieldQ30_PfYield += s.Percentage_PfYieldQ30_PfYield;
-                }
-                this.Percentage_PfClusterCount_RawClusterCount += s.Percentage_PfClusterCount_RawClusterCount;
-                this.Fraction_PfQualityScoreSum_PfYield += s.Fraction_PfQualityScoreSum_PfYield;
-            }
-
-            this.Lane = key;
-            this.Sum_RawQualityScoreSum = this.Sum_RawQualityScoreSum / sampleNumber;
-            this.Sum_PfQualityScoreSum = this.Sum_PfQualityScoreSum / sampleNumber;
-            this.Percentage_PfYield_RawYield = this.Percentage_PfYield_RawYield / sampleNumber;
-            this.Percentage_PfYieldQ30_PfYield = this.Percentage_PfYieldQ30_PfYield / (double) sampleNumber;
-            this.Percentage_PfClusterCount_RawClusterCount = this.Percentage_PfClusterCount_RawClusterCount / (double) sampleNumber;
-            this.Fraction_PfQualityScoreSum_PfYield = this.Fraction_PfQualityScoreSum_PfYield / (double) sampleNumber;
-        }
-
-        public String toString()
-        {
-            return "Lane " + this.Lane + " Sum_RawClusterCount " + this.Sum_RawClusterCount + " Sum_PfClusterCount " + this.Sum_PfClusterCount +
-                    " Percentage_PfYieldQ30_PfYield " + this.Percentage_PfYieldQ30_PfYield +
-                    " Percentage_PfClusterCount_RawClusterCount " + this.Percentage_PfClusterCount_RawClusterCount;
-        }
-    }
-}
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-nextseq/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-nextseq/plugin.properties
deleted file mode 100644
index 102a5fe3f83..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-nextseq/plugin.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-# 
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/read-demultiplex-stats-nextseq
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = read-demultiplex-stats-nextseq.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-nextseq/read-demultiplex-stats-nextseq.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-nextseq/read-demultiplex-stats-nextseq.py
deleted file mode 100755
index b66873933cb..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-nextseq/read-demultiplex-stats-nextseq.py
+++ /dev/null
@@ -1,353 +0,0 @@
-'''
-@copyright: 2012 ETH Zuerich, CISD
-
-@license:
-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.
-
-@author: Fabian Gemperle
-
-@note: print statements go to ~/openbis/servers/datastore_server/log/startup_log.txt
-
-'''
-
-import time
-import math
-import os
-import fnmatch
-# Load Java-Library to import XML data:
-import read_demultiplex_stats
-# Load openBIS-Libraries:
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-
-def process(transaction):
-  '''
-  Main method in corresponding openBIS dropbox
-  '''
-
-  # Constants:
-  XML_FILENAME = 'ConversionStats.xml'
-  TYPE_DATASET = 'FASTQ_GZ'
-  INDEX_NO = 'NOINDEX'
-  INDEX_UNKNOWN = 'UNKNOWN'
-  INDEX_EMPTY = ''
-  CODE_INDEX1 = 'BARCODE'
-  CODE_INDEX2 = 'INDEX2'
-  CODE_INDEX1LENGTH = 'INDEXREAD'
-  CODE_INDEX2LENGTH = 'INDEXREAD2'
-  BARCODE_SPLIT_CHAR = "+"
-
-
-  ##########################################################
-  def locate(pattern, root):
-    '''Locate all files matching supplied filename pattern in and below supplied root directory.'''
-    for path, dirs, files in os.walk(os.path.abspath(root)):
-      for filename in fnmatch.filter(files, pattern):
-        yield os.path.join(path, filename)
-
-  ##########################################################
-  def getInfoVocabularyTerms(vocabularyCode):
-    '''
-    Get information about Terms of certain Vocabulary in openBIS.
-    Input: 
-    - vocabularyCode: code of Vocabulary to be investigated
-    Output: 
-    - vocabularyTerms: list of Terms in Vocabulary
-    '''
-    vocabulary = transaction.getSearchService().searchForVocabulary(vocabularyCode)
-
-    vocabularyTerms = []
-    if (vocabulary is None):
-      print '\nOCCURRED EXCEPTION: Vocabulary %s does not exist' % (vocabularyCode)
-    else:
-      for term in vocabulary.getTerms():
-        vocabularyTerms.append(term.getCode())           
-      vocabularyTerms.sort()
-
-    return vocabularyTerms
-
-  ##########################################################
-  def getInfoSampleProperties(sampleCode):
-    '''
-    Get information about Properties of certain Sample in openBIS.
-    Input: 
-    - sampleCode: code of Sample to be investigated
-    Outputs: 
-    - propertiesCode: list of Properties' codes
-    - propertiesCodeValue: dictionary of Properties' codes and values
-    '''
-    ss = transaction.getSearchService()
-
-    scSample = SearchCriteria()
-    scSample.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleCode));
-    foundSamples = ss.searchForSamples(scSample)
-
-    propertiesCode = []
-    propertiesCodeValue = {}
-    try:
-      assert foundSamples.size() == 1
-      properties = foundSamples[0].getSample().getProperties()
-      for p in properties:
-        codeProperty = p.getPropertyType().getSimpleCode()
-        propertiesCode.append(codeProperty)
-        propertiesCodeValue[codeProperty] = p.getValue()
-      propertiesCode.sort()
-    except AssertionError:
-      print ('\nOCCURRED EXCEPTION: ' + str(foundSamples.size()) + ' Samples found which match the criteria code \"' + sampleCode + '\".')
-
-    return propertiesCode, propertiesCodeValue
-
-  ##########################################################
-  def getInfoDataSetPropertiesOfSample(sampleCode):
-    '''
-    Get information about Properties of some DataSet of certain Sample in openBIS.
-    Input: 
-    - sampleCode: code of DataSet's Sample to be investigated
-    Outputs: 
-    - propertiesCode: list of Properties' codes
-    - propertiesCodeValue: dictionary of Properties' codes and values
-    '''
-    ss = transaction.getSearchService()
-
-    scSample = SearchCriteria()
-    scSample.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleCode));
-    #foundSamples = ss.searchForSamples(scSample)
-
-    scDataSet = SearchCriteria()
-    scDataSet.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, TYPE_DATASET))
-    scDataSet.addSubCriteria(SearchSubCriteria.createSampleCriteria(scSample))
-    foundDataSets = ss.searchForDataSets(scDataSet)
-
-    propertiesCode = []
-    propertiesCodeValue = {}
-    try:
-      assert foundDataSets.size() > 0
-      codeProperties = foundDataSets[0].getAllPropertyCodes()
-      for cp in codeProperties:
-        propertiesCode.append(cp)
-        propertiesCodeValue[cp] = foundDataSets[0].getPropertyValue(cp)
-      propertiesCode.sort()
-    except AssertionError:
-      print ('\nOCCURRED EXCEPTION: ' + str(foundDataSets.size()) + ' DataSets found which Sample match the criteria code \"' + sampleCode + '\" and type \"' + TYPE_DATASET + '\".')
-
-    return propertiesCode, propertiesCodeValue
-
-  ##########################################################
-  def getIndexesOfDataSetsOfSample(sampleFlowLaneCode):
-    '''
-    Get both indexes (parts of barcode) of all DataSets of certain FlowLane-Sample in openBIS.
-    Inputs: 
-    - sampleFlowLaneCode: code of DataSet's Sample
-    Outputs: 
-    - indexes1: list of first index of DataSets
-    - indexes2: list of second index of DataSets
-    '''
-    ss = transaction.getSearchService()
-
-    scSample = SearchCriteria()
-    scSample.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleFlowLaneCode));
-    #foundSamples = ss.searchForSamples(scSample)
-
-    scDataSet = SearchCriteria()
-    scDataSet.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, TYPE_DATASET))
-    scDataSet.addSubCriteria(SearchSubCriteria.createSampleCriteria(scSample))
-    foundDataSets = ss.searchForDataSets(scDataSet)
-    
-    indexes1 = []
-    indexes2 = []
-    try: 
-      assert foundDataSets.size() > 0
-    except AssertionError:
-      print ('\nOCCURRED EXCEPTION: ' + str(foundDataSets.size()) + ' DataSets found which Sample match the criteria code \"' + sampleFlowLaneCode + '\" and type \"' + TYPE_DATASET + '\".')
-    for ds in foundDataSets:
-      indexes1.append(ds.getPropertyValue(CODE_INDEX1))
-      indexes2.append(ds.getPropertyValue(CODE_INDEX2))
-
-    return indexes1, indexes2
-
-  ##########################################################
-  def searchDataSetsOfSample(sampleFlowLaneCode, index1, index2):
-    '''
-    Search DataSets by corresponding indexes (parts of barcode) of certain FlowLane-Sample in openBIS.
-    Inputs: 
-    - sampleFlowLaneCode: code of DataSet's Sample
-    - index1: first index of DataSet
-    - index2: second index of DataSet
-    Output: 
-    - foundDataSets: DataSets corresponding to inputs and constant TYPE_DATASET
-    '''
-    ss = transaction.getSearchService()
-
-    scSample = SearchCriteria()
-    scSample.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sampleFlowLaneCode));
-    #foundSample = ss.searchForSamples(scSample)
-
-    scDataSet = SearchCriteria()
-    scDataSet.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.TYPE, TYPE_DATASET))
-    scDataSet.addMatchClause(SearchCriteria.MatchClause.createPropertyMatch(CODE_INDEX1, index1))
-    scDataSet.addMatchClause(SearchCriteria.MatchClause.createPropertyMatch(CODE_INDEX2, index2))
-    scDataSet.addSubCriteria(SearchSubCriteria.createSampleCriteria(scSample))
-    foundDataSets = ss.searchForDataSets(scDataSet)
-    for ds in foundDataSets:
-      print "Index1 of found DataSet " + ds.getDataSetCode() + ": " + ds.getPropertyValue(CODE_INDEX1)
-      print "Index2 of found DataSet " + ds.getDataSetCode() + ": " + ds.getPropertyValue(CODE_INDEX2)
-
-    return foundDataSets
-
-  ##########################################################
-  def reversecomplement(sequence):
-    '''
-    Reverse sequence and replace each nucleotide by its complement.
-    Input: 
-    - sequence: sequence of nucleotides
-    Output: 
-    - reverse_complement_sequence: reversed and complemented sequence
-    '''
-    lookup_table = {'A': 'T', 'T': 'A', 'G': 'C', 'C': 'G'}
-    reverse_complement_sequence = ''
-    for nucleotide in reversed(sequence):
-        reverse_complement_sequence += lookup_table[nucleotide]
-    return reverse_complement_sequence
-
-  ##########################################################
-  
-  def sampleSearch(transaction, code=''):
-    sc = SearchCriteria()
-    numberOfLanes = 0
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, code));
-    search_service = transaction.getSearchService()
-    flowcell = search_service.searchForSamples(sc)
-    if flowcell.size() > 0:
-      # Search for contained samples
-      sampleSc = SearchCriteria()
-      sampleSc.addSubCriteria(SearchSubCriteria.createSampleContainerCriteria(sc))
-      lanes = search_service.searchForSamples(sampleSc)
-      numberOfLanes = lanes.size()
-    return flowcell, lanes, numberOfLanes
-  
-  ##########################################################
-  
-  def updateLane(transaction, codeSampleFlowCell, totalLaneStatistics):
-      
-      flowcell, lanes, numberOfLanes = sampleSearch(transaction, codeSampleFlowCell)
-      lane = lanes[0]
-      mutable_lane = transaction.getSampleForUpdate(lane.getSampleIdentifier())
-      print("Setting Complete Lanes Statistics For: " + lane.getSampleIdentifier())
-      
-      mutable_lane.setPropertyValue("YIELD_MBASES", str(int(totalLaneStatistics.Sum_PfYield)))
-      mutable_lane.setPropertyValue('RAW_YIELD_MBASES', str(int(totalLaneStatistics.Sum_RawYield)))
-      mutable_lane.setPropertyValue('PERCENTAGE_PASSED_FILTERING',str(int(totalLaneStatistics.Percentage_PfClusterCount_RawClusterCount)))
-      mutable_lane.setPropertyValue('PF_READS_SUM',str(int(totalLaneStatistics.Sum_PfClusterCount)))
-      mutable_lane.setPropertyValue('RAW_READS_SUM',str(int(totalLaneStatistics.Sum_RawClusterCount)))
-      mutable_lane.setPropertyValue('PFYIELDQ30PERCENTAGE', str(int(totalLaneStatistics.Percentage_PfYieldQ30_PfYield)))
-      mutable_lane.setPropertyValue('PFMEANQUALITYSCORE', str(totalLaneStatistics.Fraction_PfQualityScoreSum_PfYield))
-      mutable_lane.setPropertyValue('CLUSTERS_PF_WITHOUT_NOINDEX', str(int(totalLaneStatistics.Clusters_PfWithoutNoindex)))
-
-  ##########################################################
-
-  print('\nPROCESS RUNNING '+time.ctime())
-  incomingPath = transaction.getIncoming().getPath()  
-  FileGenerator= locate(XML_FILENAME, incomingPath)
-  xmlfile = FileGenerator.next()
-  print "File: " + xmlfile
-  
-  # Import data of XML file (independent of openBIS data):
-  JavaClassToProcessXML = read_demultiplex_stats() # this function is implemented as Class in Java:
-  samplestatisticslist = JavaClassToProcessXML.importXMLdata_and_calculateStatistics(xmlfile)
-  totalLaneStatistics = JavaClassToProcessXML.calculateTotalLaneStatistics(samplestatisticslist)
-  
-  if len(samplestatisticslist) == 0:
-    print "\nNo Projects/Samples/Barcodes are contained in XML-file " + xmlfile + "!"
-    return
-
-  # Prepare links between XML and openBIS w.r.t. Samples:
-  codeSampleFlowCell = samplestatisticslist[0].Flowcell # expect just one equal FlowCell of all imported datasets
-  codeSampleFlowLane = samplestatisticslist[0].Flowcell + ":1" # expect just one equal FlowLane of all imported datasets
-  
-  updateLane(transaction, codeSampleFlowCell, totalLaneStatistics)
-
-  # Prepare links between XML and openBIS w.r.t to indexes in DataSet (openBIS):
-  index1list, index2list = getIndexesOfDataSetsOfSample(codeSampleFlowLane)
-  propertiesCode, propertiesCodeValue = getInfoSampleProperties(codeSampleFlowCell)
-  index1length = int(propertiesCodeValue[CODE_INDEX1LENGTH])
-  index2length = int(propertiesCodeValue[CODE_INDEX2LENGTH])
-
-  nprocessedDataSets = 0
-  for s in samplestatisticslist:
-    print "\nContent in XML file:\n", s
-    print "Connection to openBIS:"
-
-    # Prepare link between XML and openBIS w.r.t to indexes in Barcode (XML):
-    indexes = s.Barcode.split(BARCODE_SPLIT_CHAR)
-    if len(indexes) == 1: # only first part in Barcode
-      index1search = indexes[0].upper()
-      index2search = INDEX_EMPTY
-    elif len(indexes) == 2: # both parts in Barcode
-      index1search = indexes[0].upper()
-      index2search = indexes[1].upper()
-    else:
-      index1search = INDEX_EMPTY
-      index2search = INDEX_EMPTY
-
-    # Set link between XML and openBIS w.r.t to indexes in DataSet (openBIS):
-    if index1search == INDEX_EMPTY or index1search == INDEX_UNKNOWN: 
-      index1 = INDEX_NO
-    else: # Hint: just two cases were known about index1length, that is 8 or 6
-      if index1length > 7:
-        index1 = [ index1 for index1 in index1list if index1search == index1 ]
-      else: # for smaller indexlength, the index is by 1 shorter in XML-file than in openBIS
-        index1 = [ index1 for index1 in index1list if index1search == index1[:index1length] ]
-      try:
-        index1 = index1[0]
-      except: 
-        print '\nOCCURRED EXCEPTION: First index \"' + index1search + '\" of Barcode in XML file has no corresponding DataSet in openBIS!'
-        index1 = 'MISSING'
-    if index2search == INDEX_EMPTY or index2search == INDEX_UNKNOWN:
-      index2 = INDEX_NO
-    else: # Hint: just one case was known about index2length, that is 8
-      if index2length > 7: # second and larger index must be reversed and complemented in contrast to first or smaller index
-        index2 = [ index2 for index2 in index2list if reversecomplement(index2search) == index2 ]
-      else: # second and smaller index is unknown how to handle
-        index2 = [ index2 for index2 in index2list if reversecomplement(index2search) == index2 ]
-      try:
-        index2 = index2[0]
-      except: 
-        print '\nOCCURRED EXCEPTION: Second index \"' + index2search + '\" of Barcode in XML file has no corresponding DataSet in openBIS!'
-        index2 = 'MISSING'
-
-    # Get DataSet of openBIS corresponding to Project/Sample/Barcode of XML file:
-    correspondingDataSet = searchDataSetsOfSample(codeSampleFlowLane, index1, index2)
-    try:
-      assert correspondingDataSet.size() == 1
-    except AssertionError: 
-      print ('\nOCCURRED EXCEPTION: ' + str(correspondingDataSet.size()) + ' DataSets found which Sample match the criteria index1 \"' + str(index1) + '\" and index2 \"' + str(index2) + '\" and code \"' + codeSampleFlowLane + '\" and type \"' + TYPE_DATASET + '\".')
-      continue 
-    
-    # Modify Properties of corresponding DataSet:
-    # (method setPropertyValue requires Strings as Input, but Number format must fit to Properties already defined in openBIS)
-    ds = transaction.getDataSetForUpdate(correspondingDataSet[0].getDataSetCode())
-    ds.setPropertyValue('YIELD_MBASES', str(int(s.Mega_PfYield)))
-    ds.setPropertyValue('RAW_YIELD_MBASES', str(int(s.Mega_RawYield)))
-    ds.setPropertyValue('PERCENTAGE_PASSED_FILTERING',str(s.Percentage_PfClusterCount_RawClusterCount))
-    ds.setPropertyValue('PF_READS_SUM',str(int(s.Sum_PfClusterCount))) # convert first to Integer, then to String
-    ds.setPropertyValue('RAW_READS_SUM',str(int(s.Sum_RawClusterCount))) # convert first to Integer, then to String
-    ds.setPropertyValue('PERCENTAGE_RAW_CLUSTERS_PER_LANE', str(s.Percentage_RawClusterCount_AllRawClusterCounts))
-    ds.setPropertyValue('PFYIELDQ30PERCENTAGE', str(s.Percentage_PfYieldQ30_PfYield))
-    ds.setPropertyValue('PFMEANQUALITYSCORE', str(s.Fraction_PfQualityScoreSum_PfYield))
-    print "Properties in DataSet \"" + correspondingDataSet[0].getDataSetCode() + "\" are modified."
-    nprocessedDataSets += 1
-
-  print "\n", nprocessedDataSets, " openBIS-DataSets were processed." 
-  print len(samplestatisticslist), " XML-Projects/-Samples/-Barcodes were processed."
-  print("PROCESS DONE "+time.ctime())
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-nextseq/read_demultiplex_stats.java b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-nextseq/read_demultiplex_stats.java
deleted file mode 100644
index e10a38ce32f..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-nextseq/read_demultiplex_stats.java
+++ /dev/null
@@ -1,727 +0,0 @@
-/*
-@copyright: 2015 ETH Zuerich, CISD
-
-@license:
-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.
-
-@author: Fabian Gemperle
-@autor: Manuel Kohler
-
-@note: This Class is in Jython importable as Java-Library after compiling it.
-       In compilation 4 Class files arise:
-       - read_demultiplex_stats.class
-       - read_demultiplex_stats$SampleItem.class
-       - read_demultiplex_stats$Sample.class
-       - read_demultiplex_stats$Statistics.class
- */
-
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamConstants;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-
-//##########################################################
-
-public final class read_demultiplex_stats
-{
-
-    public List<Statistics> importXMLdata_and_calculateStatistics(String XMLfile)
-    {
-
-        ArrayList<Statistics> samplestatisticslist = new ArrayList<Statistics>();
-
-        /*Parse corresponding XML file, put all values into a memory structure, calculate statistics overall samples.
-          Output: samplestatisticslist (list of Sample-Statistics-Objects)
-          Input:  XMLfile having structure of file ConversionStats.xml (Example of 1.10.2014):
-                  <?xml version="1.0" encoding="utf-8"?>                             => Assumptions about XML structure:
-                  <Stats>                                                            => Element is singlechild
-                    <Flowcell flowcell-id="H0YVKBGXX">                               => Element is singlechild
-                      <Project name="BSSE_QGF_23096_H0YVKBGXX_1">  => Element is one of many children, additionally there is summary-element with attribute name="all"
-                        <Sample name="BSSE_QGF_23096_H0YVKBGXX_1_PZ27_PZ33_CelSEQ_"> => Element is singlechild except second summary-element with attribute name="all"
-                          <Barcode name="unknown">                                   => Element is singlechild except second summary-element with attribute name="all"
-                            <Lane number="1">                                        => Element is one of several children
-                              <Tile number="11101">                                  => Element is one of many children
-                                <Raw>                                                => Element is singlechild
-                                  <ClusterCount>328653</ClusterCount>                => Element is singlechild
-                                  <Read number="1">                                  => Element is one of several children
-                                    <Yield>24977628</Yield>                          => Element is singlechild
-                                    <YieldQ30>16162292</YieldQ30>                    => Element is singlechild
-                                    <QualityScoreSum>703070796</QualityScoreSum>     => Element is singlechild
-                                  </Read>
-                                  <Read number="2">                                  => Element is one of several children
-                                    <Yield>24977628</Yield>                          => Element is singlechild
-                                    <YieldQ30>16233173</YieldQ30>                    => Element is singlechild
-                                    <QualityScoreSum>699507245</QualityScoreSum>     => Element is singlechild
-                                  </Read>
-                                </Raw>
-                                <Pf>                                                 => Element is singlechild
-                                  <ClusterCount>302121</ClusterCount>                => Element is singlechild
-                                  <Read number="1">                                  => Element is one of several children
-                                    <Yield>22961196</Yield>                          => Element is singlechild
-                                    <YieldQ30>15842531</YieldQ30>                    => Element is singlechild
-                                    <QualityScoreSum>686898532</QualityScoreSum>     => Element is singlechild
-                                  </Read>
-                                  <Read number="2">                                  => Element is one of several children
-                                    <Yield>22961196</Yield>                          => Element is singlechild
-                                    <YieldQ30>16233173</YieldQ30>                    => Element is singlechild
-                                    <QualityScoreSum>699507245</QualityScoreSum>     => Element is singlechild
-                                  </Read>
-                                </Pf>
-                              </Tile>
-                              <Tile number="11102">
-                              [...]
-        */
-
-        try
-        {
-
-            // temporary variables (frequently changing during XML-read-in):
-            String errormessage = "";
-            int event = 0;
-            int skip = 0;
-            String curflowcellname = "";
-            String curprojectname = "";
-            String cursamplename = "";
-            String curbarcodename = "";
-            double curlanenumber = Double.NaN; // obvious double, but could be turned into int
-            double curtilenumber = Double.NaN; // obvious double, but could be turned into int
-            Sample cursample = null;
-            Statistics curstatistics = null;
-            SampleItem currawitem = null;
-            SampleItem curpfitem = null;
-
-            InputStream xmlfile = new FileInputStream(XMLfile);
-            XMLInputFactory xmlfactory = XMLInputFactory.newInstance();
-            XMLStreamReader xmlparser = xmlfactory.createXMLStreamReader(xmlfile);
-
-            // Start-Tag "Stats":
-            event = xmlparser.nextTag(); // Assumption: just white space or comments are aside explicit start-tag
-            if (event != XMLStreamConstants.START_ELEMENT || !xmlparser.getLocalName().equals("Stats"))
-            {
-                errormessage =
-                        "STRANGE ERROR IN METHOD importXMLdata_and_calculateStatistics WHEN READING IN XMLFILE. => CHECK CODE AND XMLFILE-STRUCTURE! Got " + event;
-                throw new Exception(errormessage);
-            }
-            //System.out.println("\nStart-Element with tag " + xmlparser.getLocalName() + " with " + xmlparser.getAttributeCount() + " attributes with first attribute: " + xmlparser.getAttributeLocalName(0) +" = " + xmlparser.getAttributeValue(0));
-
-            // Loop over potential Tags "Flowcell":
-            event = xmlparser.nextTag(); // Assumption: just white spaces or comments are aside start- or end-tag
-            //            List<Statistics> samplestatistics = new ArrayList<Statistics>();
-            boolean doimport = true;
-            while (doimport)
-            {
-                // concerning tag Flowcell:
-                if (event == XMLStreamConstants.START_ELEMENT && xmlparser.getLocalName().equals("Flowcell"))
-                {
-                    //System.out.println("\nStart-Element with tag " + xmlparser.getLocalName() + " with " + xmlparser.getAttributeCount() + " attributes with first attribute: " + xmlparser.getAttributeLocalName(0) +" = " + xmlparser.getAttributeValue(0));
-                    curflowcellname = xmlparser.getAttributeValue(0); // Assumption: Flowcell-attribute flowcell-id is just string
-                    event = xmlparser.nextTag();
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlparser.getLocalName().equals("Flowcell"))
-                {
-                    curflowcellname = "";
-                    event = xmlparser.nextTag();
-
-                    // concerning tag Project:
-                } else if (event == XMLStreamConstants.START_ELEMENT && xmlparser.getLocalName().equals("Project"))
-                {
-                    //System.out.println("\nStart-Element with tag " + xmlparser.getLocalName() + " with " + xmlparser.getAttributeCount() + " attributes with first attribute: " + xmlparser.getAttributeLocalName(0) +" = " + xmlparser.getAttributeValue(0));
-                    if (xmlparser.getAttributeValue(0).equals("all"))
-                    {
-                        // skip the current XML element and all of its following subelements:
-                        skip = 1;
-                        while (skip > 0)
-                        {
-                            event = xmlparser.next();
-                            switch (event)
-                            {
-                                case XMLStreamConstants.END_ELEMENT:
-                                    skip -= 1;
-                                    break;
-                                case XMLStreamConstants.START_ELEMENT:
-                                    skip += 1;
-                                    break;
-                                default:
-                                    skip += 0; // text elements, spaces, ...
-                                    break;
-                            }
-                        }
-                    } else
-                    {
-                        curprojectname = xmlparser.getAttributeValue(0); // Assumption: Project-attribute name is just string
-                    }
-                    event = xmlparser.nextTag();
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlparser.getLocalName().equals("Project"))
-                {
-                    curprojectname = "";
-                    event = xmlparser.nextTag();
-
-                    // concerning tag Sample:
-                } else if (event == XMLStreamConstants.START_ELEMENT && xmlparser.getLocalName().equals("Sample"))
-                {
-                    //System.out.println("\nStart-Element with tag " + xmlparser.getLocalName() + " with " + xmlparser.getAttributeCount() + " attributes with first attribute: " + xmlparser.getAttributeLocalName(0) +" = " + xmlparser.getAttributeValue(0));
-                    if (xmlparser.getAttributeValue(0).equals("all"))
-                    {
-                        // skip the current XML element and all of its following subelements:
-                        skip = 1;
-                        while (skip > 0)
-                        {
-                            event = xmlparser.next();
-                            switch (event)
-                            {
-                                case XMLStreamConstants.END_ELEMENT:
-                                    skip -= 1;
-                                    break; // break-command after each case is necessary in switch-statement
-                                case XMLStreamConstants.START_ELEMENT:
-                                    skip += 1;
-                                    break; // break-command after each case is necessary in switch-statement
-                                default:
-                                    skip += 0; // text elements, spaces, ...
-                                    break; // break-command after each case is necessary in switch-statement
-                            }
-                        }
-                    } else
-                    {
-                        cursamplename = xmlparser.getAttributeValue(0); // Assumption: Sample-attribute name is just string
-                    }
-                    event = xmlparser.nextTag();
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlparser.getLocalName().equals("Sample"))
-                {
-                    cursamplename = "";
-                    event = xmlparser.nextTag();
-
-                    // concerning tag Barcode (which is as well the start/end of Project-/Sample-Entry):
-                } else if (event == XMLStreamConstants.START_ELEMENT && xmlparser.getLocalName().equals("Barcode"))
-                {
-                    //System.out.println("\nStart-Element with tag " + xmlparser.getLocalName() + " with " + xmlparser.getAttributeCount() + " attributes with first attribute: " + xmlparser.getAttributeLocalName(0) +" = " + xmlparser.getAttributeValue(0));
-                    if (xmlparser.getAttributeValue(0).equals("all"))
-                    {
-                        // skip the current XML element and all of its following subelements:
-                        skip = 1;
-                        while (skip > 0)
-                        {
-                            event = xmlparser.next();
-                            switch (event)
-                            {
-                                case XMLStreamConstants.END_ELEMENT:
-                                    skip -= 1;
-                                    break; // break-command after each case is necessary in switch-statement
-                                case XMLStreamConstants.START_ELEMENT:
-                                    skip += 1;
-                                    break; // break-command after each case is necessary in switch-statement
-                                default:
-                                    skip += 0; // text elements, spaces, ...
-                                    break; // break-command after each case is necessary in switch-statement
-                            }
-                        }
-                    } else
-                    {
-                        curbarcodename = xmlparser.getAttributeValue(0); // Assumption: Barcode-attribute name is just string
-                        cursample = new Sample();
-                        cursample.Flowcell = curflowcellname;
-                        cursample.Project = curprojectname;
-                        cursample.Sample = cursamplename;
-                        cursample.Barcode = curbarcodename;
-                    }
-                    event = xmlparser.nextTag();
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlparser.getLocalName().equals("Barcode"))
-                {
-                    // Statistics 1st step: calculate individual statistics per sample:
-                    curstatistics = new Statistics(cursample);
-                    samplestatisticslist.add(curstatistics);
-                    cursample = null;
-                    curstatistics = null;
-                    curbarcodename = "";
-                    event = xmlparser.nextTag();
-
-                    // concerning Lane:
-                } else if (event == XMLStreamConstants.START_ELEMENT && xmlparser.getLocalName().equals("Lane"))
-                {
-                    //System.out.println("\nStart-Element with tag " + xmlparser.getLocalName() + " with " + xmlparser.getAttributeCount() + " attributes with first attribute: " + xmlparser.getAttributeLocalName(0) +" = " + xmlparser.getAttributeValue(0));
-                    curlanenumber = Double.parseDouble(xmlparser.getAttributeValue(0)); // Assumption:Lane-attribute number is always numeric
-                    event = xmlparser.nextTag();
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlparser.getLocalName().equals("Lane"))
-                {
-                    curlanenumber = Double.NaN;
-                    event = xmlparser.nextTag();
-
-                    // concerning Tile with all its sub-elements:
-                } else if (event == XMLStreamConstants.START_ELEMENT && xmlparser.getLocalName().equals("Tile"))
-                {
-                    //System.out.println("\nStart-Element with tag " + xmlparser.getLocalName() + " with " + xmlparser.getAttributeCount() + " attributes with first attribute: " + xmlparser.getAttributeLocalName(0) +" = " + xmlparser.getAttributeValue(0));
-                    curtilenumber = Double.parseDouble(xmlparser.getAttributeValue(0)); // Assumption: Tile-attribute number is always numeric
-                    // concerning Raw with Assumption: Raw-element is singlechild:
-                    xmlparser.nextTag();
-                    //System.out.println("\nStart-Element with tag " + xmlparser.getLocalName());
-                    currawitem = new SampleItem();
-                    currawitem.Type = "Raw";
-                    currawitem.Lane = curlanenumber;
-                    currawitem.Tile = curtilenumber;
-                    xmlparser.nextTag();
-                    currawitem.ClusterCount = Double.parseDouble(xmlparser.getElementText()); // Assumption: ClusterCount-element is numeric singlechild
-                    //System.out.println("\nValue: ClusterCount=" + currawitem.ClusterCount);
-                    xmlparser.nextTag();
-                    while (event == XMLStreamConstants.START_ELEMENT && xmlparser.getLocalName().equals("Read"))
-                    { // Assumption: at least or more than 1 Read-element
-                      //System.out.println("\nStart-Element with tag " + xmlparser.getLocalName() + " with " + xmlparser.getAttributeCount() + " attributes with first attribute: " + xmlparser.getAttributeLocalName(0) +" = " + xmlparser.getAttributeValue(0));
-                        xmlparser.nextTag();
-                        currawitem.YieldList.add(Double.parseDouble(xmlparser.getElementText())); // Assumption: Yield-element is numeric singlechild
-                        xmlparser.nextTag();
-                        currawitem.YieldQ30List.add(Double.parseDouble(xmlparser.getElementText())); // Assumption: YieldQ30List-element is numeric singlechild
-                        xmlparser.nextTag();
-                        currawitem.QualityScoreSumList.add(Double.parseDouble(xmlparser.getElementText())); // Assumption: QualityScoreSumList-element is numeric singlechild
-                        xmlparser.nextTag();
-                        xmlparser.nextTag();
-                        //System.out.println("Values in Read: Yield=" + currawitem.YieldList.get(currawitem.YieldList.size()-1) + ", YieldQ30=" + currawitem.YieldQ30List.get(currawitem.YieldQ30List.size()-1) + ", QualityScoreSum=" + currawitem.QualityScoreSumList.get(currawitem.QualityScoreSumList.size()-1));
-                    }
-                    //System.out.println("\nRaw-SampleItem  " + currawitem);
-                    cursample.RawList.add(currawitem);
-                    currawitem = null;
-                    // concerning Pf with Assumption that entire Pf-element is structured same as Raw:
-                    xmlparser.nextTag();
-                    //System.out.println("\nStart-Element with tag " + xmlparser.getLocalName());
-                    curpfitem = new SampleItem();
-                    curpfitem.Type = "Pf";
-                    curpfitem.Lane = curlanenumber;
-                    curpfitem.Tile = curtilenumber;
-                    xmlparser.nextTag();
-                    curpfitem.ClusterCount = Double.parseDouble(xmlparser.getElementText());
-                    //System.out.println("\nValue: ClusterCount=" + curpfitem.ClusterCount);
-                    xmlparser.nextTag();
-                    while (event == XMLStreamConstants.START_ELEMENT && xmlparser.getLocalName().equals("Read"))
-                    {
-                        //System.out.println("\nStart-Element with tag " + xmlparser.getLocalName() + " with " + xmlparser.getAttributeCount() + " attributes with first attribute: " + xmlparser.getAttributeLocalName(0) +" = " + xmlparser.getAttributeValue(0));
-                        xmlparser.nextTag();
-                        curpfitem.YieldList.add(Double.parseDouble(xmlparser.getElementText()));
-                        xmlparser.nextTag();
-                        curpfitem.YieldQ30List.add(Double.parseDouble(xmlparser.getElementText()));
-                        xmlparser.nextTag();
-                        curpfitem.QualityScoreSumList.add(Double.parseDouble(xmlparser.getElementText()));
-                        xmlparser.nextTag();
-                        xmlparser.nextTag();
-                        //System.out.println("Values in Read: Yield=" + curpfitem.YieldList.get(curpfitem.YieldList.size()-1) + ", YieldQ30=" + curpfitem.YieldQ30List.get(curpfitem.YieldQ30List.size()-1) + ", QualityScoreSum=" + curpfitem.QualityScoreSumList.get(curpfitem.QualityScoreSumList.size()-1));
-                    }
-                    //System.out.println("\nPf-SampleItem  " + curpfitem);
-                    cursample.PfList.add(curpfitem);
-                    curpfitem = null;
-                    // attain end of current Tile and afterwards continue in next Tile/Lane/Barcode/Sample/Project:
-                    event = xmlparser.nextTag();
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlparser.getLocalName().equals("Tile"))
-                {
-                    curtilenumber = Double.NaN;
-                    event = xmlparser.nextTag();
-
-                    //  concerning finish of reading in XML or hit upon error due XML content:
-                } else if (event == XMLStreamConstants.END_ELEMENT && xmlparser.getLocalName().equals("Stats"))
-                {
-                    // this final part of while loop is just for analyzing potential errors, but
-                    // could be removed and changed in:  while xmlparser.getLocalName() != 'Stats'
-                    doimport = false;
-                } else
-                {
-                    doimport = false;
-                    System.out.println("Warning: Different XML structure than expectet. Got event: " + event);
-                }
-            }
-            xmlparser.close();
-
-        } catch (FileNotFoundException | XMLStreamException e)
-        {
-            System.out.println("OCCURRED EXCEPTION " + e.toString());
-            e.printStackTrace();
-        } catch (IllegalArgumentException e)
-        {
-            System.out.println("OCCURRED EXCEPTION " + e.toString());
-            e.printStackTrace();
-        } catch (Exception e)
-        { // catch any other exception
-            System.out.println("OCCURRED EXCEPTION " + e.toString());
-            e.printStackTrace();
-        } finally
-        { // anyway adapt statistics and return output (It would be empty list due to constructor of this object)
-          // Statistics 2nd step: adapt single sample's statistics including entire list of samples
-            for (Statistics s : samplestatisticslist)
-                s.adaptStatisticsWithRespectToAllSamples(samplestatisticslist);
-        }
-        return samplestatisticslist;
-
-    }
-
-    public LaneStatistics calculateTotalLaneStatistics(ArrayList<Statistics> samplestatisticslist)
-    {
-        LaneStatistics laneStats = new LaneStatistics(samplestatisticslist);
-        laneStats.calculateOverallStats();
-        return laneStats;
-    }
-
-    // ##########################################################
-
-    public class SampleItem
-    {
-        /*
-         * Object of an item in sample including - the corresponding type Raw or Pf - the index of corresponding Lane, Tile - measured value of
-         * ClusterCount and values in Lists (w.r.t. Read) of Yield, YieldQ30, QualityScoreSum
-         */
-
-        public String Type = "";
-
-        // Define unknown numerical value. Type double could be exchanged with int, but double is necessary to initialize NaN-value.
-        public double Lane = Double.NaN;
-
-        public double Tile = Double.NaN;
-
-        public double ClusterCount = Double.NaN;
-
-        // Define unknown ArrayList of numerical values with changeable List size. Type Double(object) instead of double(primitive) is necessary in
-        // Lists.
-        public List<Double> YieldList = new ArrayList<Double>();
-
-        public List<Double> YieldQ30List = new ArrayList<Double>();
-
-        public List<Double> QualityScoreSumList = new ArrayList<Double>();
-
-        public String toString()
-        {
-            return "Type: " + this.Type + ", Lane: " + (long) this.Lane + ", Tile: " + (long) this.Tile
-                    + ", ClusterCount: " + (long) this.ClusterCount + ", YieldList: " + this.YieldList
-                    + ", YieldQ30List: " + this.YieldQ30List + ", QualityScoreSumList: " + this.QualityScoreSumList;
-        }
-
-    }
-
-    // ##########################################################
-
-    public class Sample
-    {
-        /*
-         * Object of an entire sample including - the name of Flowcell, Project, Sample, Barcode - the list of Raw and Pf SampleItem-Objects
-         */
-
-        public String Flowcell = "";
-
-        public String Project = "";
-
-        public String Sample = "";
-
-        public String Barcode = "";
-
-        // Define unknown ArrayList of SampleItems:
-        public List<SampleItem> RawList = new ArrayList<SampleItem>();
-
-        public List<SampleItem> PfList = new ArrayList<SampleItem>();
-
-        public String toString()
-        {
-            return "Flowcell: " + this.Flowcell + ", Project: " + this.Project + ", Sample: " + this.Sample + ", Barcode: " + this.Barcode
-                    + ", RawList: " + this.RawList + ", PfList: " + this.PfList;
-        }
-
-    }
-
-    // ##########################################################
-
-    public class Statistics extends Sample
-    {
-        /*
-         * Object of Statistics within one single sample inherited from Sample-Object
-         */
-
-        public double Sum_RawClusterCount = Double.NaN; // obvious double, but could be turned into int
-
-        public double Sum_PfClusterCount = Double.NaN; // obvious double, but could be turned into int
-
-        public double Sum_RawYield = Double.NaN;
-
-        public double Sum_PfYield = Double.NaN;
-
-        public double Sum_RawYieldQ30 = Double.NaN;
-
-        public double Sum_PfYieldQ30 = Double.NaN;
-
-        public double Sum_RawQualityScoreSum = Double.NaN;
-
-        public double Sum_PfQualityScoreSum = Double.NaN;
-
-        public double Mega_RawYield = Double.NaN; // obvious double, but could be turned into int
-
-        public double Mega_PfYield = Double.NaN; // obvious double, but could be turned into int
-
-        public double Percentage_PfYield_RawYield = Double.NaN;
-
-        public double Percentage_PfYieldQ30_PfYield = Double.NaN;
-
-        public double Fraction_PfQualityScoreSum_PfYield = Double.NaN;
-
-        public double Percentage_PfClusterCount_RawClusterCount = Double.NaN;
-
-        public double Percentage_RawClusterCount_AllRawClusterCounts = Double.NaN;
-
-        public Statistics(Sample sample)
-        {
-            /*
-             * Constructor of derived class Initialization: Already initialized Sample-Object is necessary argument.
-             */
-
-            super();
-            Flowcell = sample.Flowcell;
-            Project = sample.Project;
-            Sample = sample.Sample;
-            Barcode = sample.Barcode;
-            RawList = sample.RawList;
-            PfList = sample.PfList;
-
-            if (RawList.size() > 0)
-                Sum_RawClusterCount = 0;
-            for (SampleItem s : RawList)
-                Sum_RawClusterCount += s.ClusterCount;
-            if (PfList.size() > 0)
-                Sum_PfClusterCount = 0;
-            for (SampleItem s : PfList)
-                Sum_PfClusterCount += s.ClusterCount;
-            if (RawList.size() > 0)
-                Sum_RawYield = 0;
-            for (SampleItem s : RawList)
-                for (double d : s.YieldList)
-                    Sum_RawYield += d;
-            if (PfList.size() > 0)
-                Sum_PfYield = 0;
-            for (SampleItem s : PfList)
-                for (double d : s.YieldList)
-                    Sum_PfYield += d;
-            if (RawList.size() > 0)
-                Sum_RawYieldQ30 = 0;
-            for (SampleItem s : RawList)
-                for (double d : s.YieldQ30List)
-                    Sum_RawYieldQ30 += d;
-            if (PfList.size() > 0)
-                Sum_PfYieldQ30 = 0;
-            for (SampleItem s : PfList)
-                for (double d : s.YieldQ30List)
-                    Sum_PfYieldQ30 += d;
-            if (RawList.size() > 0)
-                Sum_RawQualityScoreSum = 0;
-            for (SampleItem s : RawList)
-                for (double d : s.QualityScoreSumList)
-                    Sum_RawQualityScoreSum += d;
-            if (PfList.size() > 0)
-                Sum_PfQualityScoreSum = 0;
-            for (SampleItem s : PfList)
-                for (double d : s.QualityScoreSumList)
-                    Sum_PfQualityScoreSum += d;
-            // Mega_RawYield = calculate_MegaUnit(Sum_RawYield);
-            // Mega_PfYield = calculate_MegaUnit(Sum_PfYield);
-
-            Mega_RawYield = Sum_RawYield;
-            Mega_PfYield = Sum_PfYield;
-
-            Percentage_PfYield_RawYield = calculate_Percentage(Sum_PfYield, Sum_RawYield);
-            Percentage_PfYieldQ30_PfYield = calculate_Percentage(Sum_PfYieldQ30, Sum_PfYield);
-            Fraction_PfQualityScoreSum_PfYield = calculate_Fraction(Sum_PfQualityScoreSum, Sum_PfYield);
-            Percentage_PfClusterCount_RawClusterCount = calculate_Percentage(Sum_PfClusterCount, Sum_RawClusterCount);
-            // Calculation of attribute "Percentage_RawClusterCount_AllRawClusterCounts" needs statistics of all other included samples. => After
-            // initializing this object, apply method: adaptStatisticsWithRespectToAllSamples(statisticslist)
-        }
-
-        public String toString()
-        {
-            return "Flowcell: " + this.Flowcell + ", Project: " + this.Project + ", Sample: " + this.Sample + ", Barcode: " + this.Barcode
-                    + ", Raw Clusters: " + (long) this.Sum_RawClusterCount + ", Mbases Raw Yield: " + this.Mega_RawYield
-                    + ", % Raw Clusters overall: " + this.Percentage_RawClusterCount_AllRawClusterCounts
-                    + ", Pf Clusters: " + (long) this.Sum_PfClusterCount + ", Mbases Pf Yield: " + this.Mega_PfYield
-                    + ", % PfYield/RawYield: " + this.Percentage_PfYield_RawYield
-                    + ", % PfYieldQ30/PfYield: " + this.Percentage_PfYieldQ30_PfYield
-                    + ", Mean Pf Quality Score: " + this.Fraction_PfQualityScoreSum_PfYield
-                    + ", % Passes Filtering: " + this.Percentage_PfClusterCount_RawClusterCount;
-        }
-
-        public void adaptStatisticsWithRespectToAllSamples(List<Statistics> statisticslist)
-        {
-            /*
-             * This Statistics-Object (corresponding to one sample) is adapted by employing a list of Statistics-Objects corresponding to all samples
-             * influencing the statistics of single sample. Input: statisticslist contains all Statistics-Objects
-             */
-            if (statisticslist.size() == 0)
-            { // here it additionally should be checked, if calling object is included ...
-                Percentage_RawClusterCount_AllRawClusterCounts = Double.NaN;
-                String errormessage =
-                        "INPUT ARGUMENT statisticslist MUST BE LIST OF Statistics OBJECTS INCLUDING THE CALLING OBJECT IN METHOD adaptStatisticsWithRespectToAllSamples!";
-                // System.out.println(errormessage);
-                throw new IllegalArgumentException(errormessage); // Exception reasonable since otherwise wrong results.
-            } else
-            {
-                double sum_allrawclustercounts = 0;
-                for (Statistics s : statisticslist)
-                    sum_allrawclustercounts += s.Sum_RawClusterCount;
-                Percentage_RawClusterCount_AllRawClusterCounts = calculate_Percentage(Sum_RawClusterCount, sum_allrawclustercounts);
-            }
-        }
-
-        public double calculate_MegaUnit(double x)
-        {
-            double z;
-            if (x == Double.POSITIVE_INFINITY || x == Double.NEGATIVE_INFINITY || Double.isNaN(x))
-            {
-                z = Double.NaN;
-                String errormessage =
-                        "INPUT ARGUMENT WAS UNREASONABLE IN METHOD calculate_MegaUnit!  x = " + x + "  (Values were in Sample " + Sample + ")";
-                // System.out.println(errormessage);
-                // throw new IllegalArgumentException(errormessage);
-            } else
-            {
-                z = x / 1000000;
-            }
-            return z;
-        }
-
-        public double calculate_Percentage(double x, double y)
-        {
-            double z = x / y;
-            if (z == Double.POSITIVE_INFINITY || z == Double.NEGATIVE_INFINITY || Double.isNaN(z))
-            {
-                z = Double.NaN;
-                String errormessage =
-                        "INPUT ARGUMENT WAS UNREASONABLE IN METHOD calculate_Percentage!  x = " + x + ",  y = " + y + "  (Values were in Sample "
-                                + Sample + ")";
-                // System.out.println(errormessage);
-                // throw new IllegalArgumentException(errormessage);
-            } else
-            {
-                z = 100 * z;
-            }
-            return z;
-        }
-
-        public double calculate_Fraction(double x, double y)
-        {
-            double z = x / y;
-            if (z == Double.POSITIVE_INFINITY || z == Double.NEGATIVE_INFINITY || Double.isNaN(z))
-            {
-                z = Double.NaN;
-                String errormessage =
-                        "INPUT ARGUMENT WAS UNREASONABLE IN METHOD calculate_Fraction!  x = " + x + ",  y = " + y + "  (Values were in Sample "
-                                + Sample + ")";
-                // System.out.println(errormessage);
-                // throw new IllegalArgumentException(errormessage);
-            }
-            return z;
-        }
-
-        public double roundspecific(double x, int places)
-        {
-            double z;
-            if (places < 0 || places > 13 || x == Double.POSITIVE_INFINITY || x == Double.NEGATIVE_INFINITY || Double.isNaN(x))
-            {
-                z = Double.NaN;
-                String errormessage =
-                        "INPUT ARGUMENT WAS UNREASONABLE IN METHOD roundspecific!  x = " + x + ",  places = " + places + "  (Values were in Sample "
-                                + Sample + ")";
-                // System.out.println(errormessage);
-                // throw new IllegalArgumentException(errormessage);
-            } else
-            {
-                double factor = Math.pow(10, places);
-                z = Math.round(x * factor);
-                z = z / factor;
-            }
-            return z;
-        }
-
-    }
-
-    public class LaneStatistics
-    {
-        /*
-         * Total Lane Statistics
-         */
-        public ArrayList<Statistics> statisticsList;
-
-        public double Sum_RawClusterCount = 0.0;
-
-        public double Sum_PfClusterCount = 0.0;
-
-        public double Sum_RawYield = 0.0;
-
-        public double Sum_PfYield = 0.0;
-
-        public double Sum_RawYieldQ30 = 0.0;
-
-        public double Sum_PfYieldQ30 = 0.0;
-
-        public double Sum_RawQualityScoreSum = 0.0;
-
-        public double Sum_PfQualityScoreSum = 0.0;
-
-        public double Percentage_PfYield_RawYield = 0.0;
-
-        public double Percentage_PfYieldQ30_PfYield = 0.0;
-
-        public double Fraction_PfQualityScoreSum_PfYield = 0.0;
-
-        public double Percentage_PfClusterCount_RawClusterCount = 0.0;
-
-        public double Percentage_RawClusterCount_AllRawClusterCounts = 0.0;
-
-        public double Clusters_PfWithoutNoindex = 0.0;
-
-        public LaneStatistics(ArrayList<Statistics> statisticsList)
-        {
-            this.statisticsList = statisticsList;
-        }
-
-        public void calculateOverallStats()
-        {
-
-            int sampleNumber = statisticsList.size();
-
-            for (Statistics s : statisticsList)
-            {
-                if (!s.Barcode.equals("unknown"))
-                {
-                    System.out.println("BARCODE " + s.Barcode);
-                    this.Clusters_PfWithoutNoindex += s.Sum_PfClusterCount;
-                    System.out.println(s.Sum_PfClusterCount);
-                }
-
-                this.Sum_RawClusterCount += s.Sum_RawClusterCount;
-                this.Sum_PfClusterCount += s.Sum_PfClusterCount;
-                this.Sum_RawYield += s.Sum_RawYield;
-                this.Sum_PfYield += s.Sum_PfYield;
-                this.Sum_RawYieldQ30 += s.Sum_RawYieldQ30;
-                this.Sum_PfYieldQ30 += s.Sum_PfYieldQ30;
-                this.Sum_RawQualityScoreSum += s.Sum_RawQualityScoreSum;
-                this.Sum_PfQualityScoreSum += s.Sum_PfQualityScoreSum;
-                this.Percentage_PfYield_RawYield += s.Percentage_PfYield_RawYield;
-                this.Percentage_PfYieldQ30_PfYield += s.Percentage_PfYieldQ30_PfYield;
-                this.Percentage_PfClusterCount_RawClusterCount += s.Percentage_PfClusterCount_RawClusterCount;
-                this.Fraction_PfQualityScoreSum_PfYield += s.Fraction_PfQualityScoreSum_PfYield;
-            }
-            this.Sum_RawQualityScoreSum = this.Sum_RawQualityScoreSum / sampleNumber;
-            this.Sum_PfQualityScoreSum = this.Sum_PfQualityScoreSum / sampleNumber;
-            this.Percentage_PfYield_RawYield = this.Percentage_PfYield_RawYield / sampleNumber;
-            this.Percentage_PfYieldQ30_PfYield = this.Percentage_PfYieldQ30_PfYield / (double) sampleNumber;
-            this.Percentage_PfClusterCount_RawClusterCount = this.Percentage_PfClusterCount_RawClusterCount / (double) sampleNumber;
-            this.Fraction_PfQualityScoreSum_PfYield = this.Fraction_PfQualityScoreSum_PfYield / (double) sampleNumber;
-        }
-
-        public String toString()
-        {
-            return "Sum_RawClusterCount " + this.Sum_RawClusterCount + " Sum_PfClusterCount" + this.Sum_PfClusterCount +
-                    " Percentage_PfYieldQ30_PfYield " + this.Percentage_PfYieldQ30_PfYield;
-        }
-    }
-}
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-nextseq/read_demultiplex_statsTest.java b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-nextseq/read_demultiplex_statsTest.java
deleted file mode 100644
index bc409770abf..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-nextseq/read_demultiplex_statsTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import static org.testng.AssertJUnit.assertEquals;
-
-public class read_demultiplex_statsTest {
-
-    private String XMLfile =
-            "/Users/kohleman/Documents/workspace/datastore_server/targets/read-demultiplex-stats-nextseq/" +
-                    "150724_J00121_0017_AH2VYMBBXX.sv/ConversionStats.xml";
-
-
-    @org.testng.annotations.BeforeMethod
-    public void setUp() throws Exception {
-    }
-
-    @org.testng.annotations.AfterMethod
-    public void tearDown() throws Exception {
-
-    }
-
-    @org.testng.annotations.Test
-    public void testImportXmlAndCalculateStatistics() throws Exception {
-        ArrayList<read_demultiplex_stats.Statistics> stat = read_demultiplex_stats.importXmlAndCalculateStatistics(XMLfile);
-        assertEquals(stat.size(), 39);
-        read_demultiplex_stats.Statistics eigth_element = stat.get(8);
-        assertEquals(eigth_element.Flowcell, "H2VYMBBXX");
-        assertEquals(eigth_element.Barcode, "GCCAATA");
-        assertEquals(eigth_element.Sum_RawClusterCount.intValue(), 27850973);
-        assertEquals(eigth_element.Sum_RawYield, 8.410993846E9);
-        assertEquals(eigth_element.Percentage_PfYieldQ30_PfYield, 87.6792784423112);
-        assertEquals(eigth_element.Fraction_PfQualityScoreSum_PfYield, 37.40267477898711);
-        assertEquals(eigth_element.Percentage_RawClusterCount_AllRawClusterCounts, 5.770060255141701);
-    }
-
-    @org.testng.annotations.Test
-    public void testImportXmlAndCalculateStatistics_overall() throws Exception {
-        ArrayList<read_demultiplex_stats.Statistics> stat = read_demultiplex_stats.importXmlAndCalculateStatistics(XMLfile);
-
-        Double percentage = 0.0;
-        for (read_demultiplex_stats.Statistics element : stat) {
-            if (element.Lane.equals(6)) {
-                percentage += element.Percentage_RawClusterCount_AllRawClusterCounts;
-            }
-        }
-        assertEquals(100.0, (double)Math.round(percentage * 1000) / 1000);
-
-    }
-
-    @org.testng.annotations.Test
-    public void testCalculateTotalLaneStatistics() throws Exception {
-        ArrayList<read_demultiplex_stats.Statistics> stat =
-                read_demultiplex_stats.importXmlAndCalculateStatistics(XMLfile);
-
-        HashMap<Integer, read_demultiplex_stats.LaneStatistics> lanesStatistics =
-                read_demultiplex_stats.calculateTotalLaneStatistics(stat);
-
-        read_demultiplex_stats.LaneStatistics lane2 = lanesStatistics.get(2);
-        assertEquals(lane2.Sum_RawClusterCount, 4.826808E8);
-        assertEquals(lane2.Sum_PfClusterCount.intValue(), 332293484);
-        assertEquals(lane2.Percentage_PfYieldQ30_PfYield, 86.14969791102051);
-        assertEquals(lane2.Percentage_PfClusterCount_RawClusterCount, 92.63902299583091);
-    }
-}
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-nextseq/start_read_demultiplex_stats.java b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-nextseq/start_read_demultiplex_stats.java
deleted file mode 100644
index be097bcc3ed..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-demultiplex-stats-nextseq/start_read_demultiplex_stats.java
+++ /dev/null
@@ -1,21 +0,0 @@
-import java.util.ArrayList;
-import java.util.HashMap;
-
-public class start_read_demultiplex_stats {
-
-    public static void main(String[] args) {
-
-        String XMLfile =
-                "/Users/kohleman/Documents/workspace/datastore_server/targets/read-demultiplex-stats-nextseq/" +
-                        "150724_J00121_0017_AH2VYMBBXX.sv/ConversionStats.xml";
-        ArrayList<read_demultiplex_stats.Statistics> stat = null;
-        try {
-            stat = read_demultiplex_stats.importXmlAndCalculateStatistics(XMLfile);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        HashMap<Integer, read_demultiplex_stats.LaneStatistics> ls = read_demultiplex_stats.calculateTotalLaneStatistics(stat);
-//        System.out.println(stat);
-//        System.out.println(ls);
-    }
-}
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-json/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-json/plugin.properties
deleted file mode 100644
index 98a7c8ff001..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-json/plugin.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-incoming-dir = ${incoming-root-dir}/read-json
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = read-json.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-jython-version=2.7
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-json/read-json.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-json/read-json.py
deleted file mode 100644
index dac56d3206c..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-json/read-json.py
+++ /dev/null
@@ -1,96 +0,0 @@
-'''
-@copyright:
-2016 ETH Zuerich, SIS
-    
-@license: 
-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.
-
-@author:
-Manuel Kohler
-'''
-
-import re
-import glob
-import os
-from itertools import islice
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-# The following module is located in the path defined in the datastore_server.conf
-# Look for: -Dpython.path}
-from gfb_utils import *
-
-import json
-
-
-def get_json_from_file(file):
-    with open(file, 'r') as f:
-        read_json = f.read()
-    return json.loads(read_json)[0]
-
-def get_lane_count(json_string):
-    return int(json_string['lanecount'])
-
-
-def get_flowcell_id(json_string):
-    return json_string['name']
-
-
-def register_in_openbis(transaction, json_string):
-    lane_count = get_lane_count(json_string)
-    flowcell_id = get_flowcell_id(json_string)
-
-    found_flow_cell = search_unique_sample(transaction, flowcell_id)
-    search_service = transaction.getSearchService()
-    
-    flowcell = found_flow_cell[0]
-
-    get_flowcell_with_contained_samples = search_service.getSample(flowcell.getSampleIdentifier())
-    flowlanes = get_flowcell_with_contained_samples.getContainedSamples()
-    for lane in flowlanes:
-        mutable_lane = transaction.getSampleForUpdate(lane.getSampleIdentifier())
-        lane_number = lane.getCode().split(":")[-1]
-        
-        try:
-            aligned_mean = json_string['cluster_lane_dict'][str(lane_number)]['aligned'][0]['mean']
-        except KeyError:
-            print ("Problem occurred with aligned value for PhiX")
-            aligned_mean = -1
-        
-        try:
-            cluster_density_mean = json_string['cluster_lane_dict'][str(lane_number)]['clusterDensity'][0]['mean']
-        except KeyError:
-            print ("Problem occurred with cluster density")
-            cluster_density_mean = -1
-            
-        try:
-            error_rate_mean = json_string['error_metrics'][str(lane_number)]['mean']
-        except KeyError:
-            print ("Problem occurred with error rate")
-            error_rate_mean = -1
-        
-        mutable_lane.setPropertyValue("PERC_PHIX_ALIGNED", str(aligned_mean))
-        mutable_lane.setPropertyValue("CLUSTER_DENSITY", str(cluster_density_mean))
-        mutable_lane.setPropertyValue("ERROR_RATE", str(error_rate_mean))
-
-
-def process(transaction):
-    incoming = transaction.getIncoming()
-    incoming_path = incoming.getAbsolutePath()
-    
-    json_file = glob.glob(os.path.join(incoming_path, "*.json"))
-    
-    if json_file:
-        json_string = get_json_from_file(json_file[0])
-        register_in_openbis(transaction, json_string)
-    else:
-        print("No json file found!")
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-rta-timestamp/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-rta-timestamp/plugin.properties
deleted file mode 100644
index 2c8f40225a2..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-rta-timestamp/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# 
-# Drop box for registering a flow cell output as a data set
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-incoming-dir = ${incoming-root-dir}/read-rta-timestamp
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = read-rta-timestamp.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-jython-version=2.7
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-rta-timestamp/read-rta-timestamp.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-rta-timestamp/read-rta-timestamp.py
deleted file mode 100644
index 88851e92cc5..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/read-rta-timestamp/read-rta-timestamp.py
+++ /dev/null
@@ -1,67 +0,0 @@
-'''
-@copyright:
-2015 ETH Zuerich, SIS
-    
-@license: 
-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.
-
-@description:
-Reads out the timestamp of the RTAComplete.txt file to register the timestamp in openBIS
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import sys
-import shutil
-from time import *
-from datetime import *
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from os.path import basename
-
-# The following module is located in the path defined in the datastore_server.conf
-# Look for: -Dpython.path}
-from gfb_utils import *
-
-MARKER_RUN_COMPLETE = 'RTAComplete.txt'  
-
-def process(transaction):
-
-    print "HELLO PATH: " + str(sys.path)
-
-    incoming = transaction.getIncoming()
-    incoming_path = incoming.getAbsolutePath()
-    run_id = incoming.getName()
-    model = get_model(run_id)
-    
-    thread_property_dict = get_thread_properties(transaction)
-    absolutePath = os.path.dirname(os.path.realpath(thread_property_dict['script-path']))
-    print(basename(absolutePath) + ": Auto-detected Illumina model: " + model)
-    
-    run_date, sequencer_id, running_number, tray_and_fcId = run_id.split("_")
-    tray = tray_and_fcId[0]
-    if model in [Sequencers.MISEQ]:
-        fc_id = tray_and_fcId
-    else:
-        fc_id = tray_and_fcId[1:]
-
-    marker_file = os.path.join(incoming_path, MARKER_RUN_COMPLETE)
-    
-    found_samples = search_unique_sample(transaction, fc_id)
-    
-    sa = transaction.getSampleForUpdate(found_samples[0].getSampleIdentifier())
-    sa.setPropertyValue("SEQUENCER_FINISHED", create_openbis_timestamp(marker_file))
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-fastqc/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-fastqc/plugin.properties
deleted file mode 100644
index 86752d6d27d..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-fastqc/plugin.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-incoming-dir = ${incoming-root-dir}/register-fastqc
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-fastqc.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-jython-version=2.7
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-fastqc/register-fastqc.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-fastqc/register-fastqc.py
deleted file mode 100644
index 7efc89630a5..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-fastqc/register-fastqc.py
+++ /dev/null
@@ -1,54 +0,0 @@
-'''
-@copyright:
-2015 ETH Zuerich, SIS
-    
-@license: 
-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.
-
-@note
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-
-@author:
-Manuel Kohler
-'''
-
-# The following module is located in the path defined in the datastore_server.conf
-# Look for: -Dpython.path}
-from gfb_utils import *
-
-
-def process(transaction):
-
-    incomingPath = transaction.getIncoming().getPath()
-    incomingFolder = transaction.getIncoming().getName()
-    
-    split = incomingFolder.split("_")
-    
-    if (len(split) == 2):
-      flow_cell, flow_lane = incomingFolder.split("_")
-    elif (len(split) == 3):
-        flow_cell = "-".join([split[0], split[1]])
-        flow_lane = split[-1]
-    
-    connected_sample_code = ":".join([flow_cell, flow_lane])
-    connected_sample = search_unique_sample(transaction, connected_sample_code)
-    
-    dataSet = transaction.createNewDataSet("FASTQC")
-    dataSet.setMeasuredData(False)
-    
-    dataSet.setSample(connected_sample[0])
-    
-    sa = transaction.getSampleForUpdate(connected_sample[0].getSampleIdentifier())
-    sa.setPropertyValue("DATA_TRANSFERRED", create_openbis_timestamp_now())
-    
-    transaction.moveFile(incomingPath, dataSet)
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowcell/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowcell/plugin.properties
deleted file mode 100644
index 82d34c7fd9f..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowcell/plugin.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-incoming-dir = ${incoming-root-dir}/register-flowcell
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-flowcell.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-jython-version=2.7
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowcell/register-flowcell.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowcell/register-flowcell.py
deleted file mode 100644
index 65ccad87004..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowcell/register-flowcell.py
+++ /dev/null
@@ -1,107 +0,0 @@
-'''
-@copyright:
-2015 ETH Zuerich, SIS
-    
-@license: 
-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.
-
-@description:
-Registers an incoming directory as a data set in openBIS. The name of the directory is used to
-search for the matching sample. 
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-
-@author:
-Manuel Kohler
-'''
-
-import re
-import glob
-import os
-from itertools import islice
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-# The following module is located in the path defined in the datastore_server.conf
-# Look for: -Dpython.path}
-from gfb_utils import *
-
-ILLUMINA_HISEQ_OUTPUT_DS_TYPE = "ILLUMINA_HISEQ_OUTPUT"
-ILLUMINA_MISEQ_OUTPUT_DS_TYPE = "ILLUMINA_MISEQ_OUTPUT"
-ILLUMINA_NEXTSEQ_OUTPUT_DS_TYPE = "ILLUMINA_NEXTSEQ_OUTPUT"
-
-
-def get_bcl_version(file):
-    pattern = re.compile("bcl2fastq")
-    matching_line_list = []
-    bcl_version = "Not specified"
-    number_of_lines_to_read = 3
-
-    if file:
-        with open(file[0]) as nohup:
-            head = list(islice(nohup, number_of_lines_to_read))
-        for line in head:
-            if re.search(pattern, line):
-                matching_line_list.append(line)
-    else:
-        print("File " + str(file) + " not found!")
-
-    if matching_line_list:
-        bcl_version = matching_line_list[0].strip()
-    print("GOT BCL2FASTQ Version: " + bcl_version)
-    return bcl_version
-
-
-def process(transaction):
-    incoming = transaction.getIncoming()
-    incoming_path = incoming.getAbsolutePath()
-    run_id = incoming.getName()
-    model = get_model(run_id)
-    
-    if model in HISEQ_LIST:
-        DATASET_TYPE = ILLUMINA_HISEQ_OUTPUT_DS_TYPE
-    elif model in [Sequencers.NEXTSEQ_500]:
-        DATASET_TYPE = ILLUMINA_NEXTSEQ_OUTPUT_DS_TYPE
-    elif model in [Sequencers.MISEQ]:
-        DATASET_TYPE = ILLUMINA_MISEQ_OUTPUT_DS_TYPE
-    else:
-        print("Could set a data set type for flowcell data!")
-    
-    thread_property_dict = get_thread_properties(transaction)
-    absolutePath = os.path.dirname(os.path.realpath(thread_property_dict['script-path']))
-    print(os.path.basename(absolutePath) + ": Auto-detected Illumina model: " + model)
-    
-    run_date, sequencer_id, running_number, tray_and_fcId = run_id.split("_")
-    tray = tray_and_fcId[0]
-    if model in [Sequencers.MISEQ]:
-        fc_id = tray_and_fcId
-    else:
-        fc_id = tray_and_fcId[1:]
-
-    file = glob.glob(os.path.join(incoming_path, "nohup*"))
-    bcl_version = get_bcl_version(file)
-
-    found_flow_cell = search_unique_sample(transaction, fc_id)
-    
-    search_service = transaction.getSearchService()
-    get_flowcell_with_contained_samples = search_service.getSample(found_flow_cell[0].getSampleIdentifier())
-    flowlanes = get_flowcell_with_contained_samples.getContainedSamples()
-    
-    for lane in flowlanes:
-        mutable_lane = transaction.getSampleForUpdate(lane.getSampleIdentifier())
-        mutable_lane.setPropertyValue("BCL_VERSION", bcl_version)
-    
-    dataSet = transaction.createNewDataSet(DATASET_TYPE)
-    dataSet.setMeasuredData(False)
-    transaction.moveFile(incoming_path, dataSet)
-    dataSet.setSample(found_flow_cell[0])
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowlane/lib/a.out b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowlane/lib/a.out
deleted file mode 100755
index c08fdbaeb8d8411a5ef60e9659dc30f12e6b5ff8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 13120
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

diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowlane/lib/crc32 b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowlane/lib/crc32
deleted file mode 100755
index 7959ca94a1fa61e47c2e4df815bb35fceb7bd809..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 10567
zcmcJV3s{s@{>RVEa7Qj)vWuFNi>~HEs7RPugNTeaDVnC4+b}T0&4IyTP;{{<q?kyf
z%+_w^uGzBNuImlO8{(zVauXF5?_{<MX-Q@-mOA_Up7$J>8R7Z=pJ$&v^UV7>zwbG}
zb9>)&-s=mAhVg2Zipij6k1<%uemX8GTgK||=BCi%SOC+p`&l36M~W}~bvy-BVv@C@
zXvqMPPeb%UTrC8(PKgNiRV*ecTL_}Qj-V4!g+;v-Q<5<)7vP7s7K`-aUMXCcj1cY6
z%k~IAnDDC<ewD&cvH}HDkd*yH-|+7%%ImAvkp)`^uyK6bK|U6wC4b{EBVOE7$xz%=
z$0L$4ip(UX-xTsgJO95yw(}utR%&d_LsoO7H7mEEFtRW%HZnFQD&H10oVP!m3Pcx^
zCQau>%kk(z7V5^ZU|%Brg_+Z9-ah&LvCkXY0v>#D)UCH7UtfUy!St8o&s17gEcQC|
z^y#MXQCG|5ZYISuB$0`_yaUS9dW&S=NB_?9_wPcV)P<hXg|6#DAKHaJstbL57y3Zb
zyR&;)W$zS<F`8#e7*2q`&P!)TV@8fG*O>1x*&RkBqurT?y%)<Yg;@@kZp*XevV4a*
zE0?9GS#9|i7#6#orO&r#IV>#QZZVlzdY(Ni*O5+z!Cw@XV}cXqwb@ycVZzu1<M62A
zQ6teF>{WFqKkR1}!!d(DLcx7mfykSom@H1TAIGYg8azez7jqlOg$%O4(7Q>II8&74
zPjMUzGNicaI4)(#bkpUWL0X=h?!K-Ry6Nuos@P3O-7=K9>2jYTt-?*GfoKma-1MM!
zl`(zE<$&g|NoclHx0=7Bw(3jv1?+W=d^cRnTm#>yZCHOD#b9T`v!%&JVc?svF%&KJ
z+<p}{hPb7c+b_Y!khHAh_CnYgik4N}w!_8{v{Z0A8#cP$Qq1jC*ywUg9=B(~Mps)>
z$R_eI?7Ioh!_VoR7xX0;Ta%|vsH<%a)G>YCZWaX8#rW%3vyB|CRaBs_`f}g(VOpjy
zt#znf^}MSU?qRy#`OQ<vSUe_xDr5yuY+pf3FuAG8)W3MC0@m(dH2RWDD*dR&{D}0h
z{^J-8TCGa&^gT;uyLx@fGnM-uLQSI@?H4}t-A+*zs(bdp-t_eJsIdNvdHeMxW6DCP
z9@OjTQ4I}k3)r=a>N((QI<U8*0%_DFopaGay|bWJUzgZ~d?kwxs$PhvmL;Q_CDR-A
z&f|J#UGw9#Q=Ex6OBUU9g)Qz*hQ54yV>JubF(m`9q<QFVm#gJ6s;f(ERdyqc^2ApC
z?k0_1lUS=SCx^u5ZT;X`p4cpk??H~FH|a|jHL-$$TeUpd_h_gV6;ZA)sS!#YNvLBP
zibd<n$wz772PBCWI_B}#J>u26CAX*&?oikK6~!rcN4Iaf3I=S|Db>#Iq}qCNxYS=?
zLj5XFJg8rxAD!45_R0fv5b$QvkX};J!9dM-bd!}7k<Ts+L-PQN@ezOVvQ|q?ckXOH
zj~-Vw0p+C}b(E9R%9r!BC8e!A%i(Q|JZex3cEmkY5{*<FRn^7{9w%R=q`KzsZ@OHx
zm!GAb_a5ziy>n0XEItB<x8Xe8Ucz<CS5Zw3cU>AOtERnDKD|x9WQkHIM!WfLr7^r|
zPIZf!94bU#c~_i^=-?=**E^^0=cVaKB$7b8v^<eS+U0eLZBzui^av@m3wP^xx6o9f
zrk77|)i3c;hiztIn`_Cfc_5~qzTD^2Vl;TzeqKyTVw;L*ADy`0zC%{gOe6gxj&}Fs
z-D!<zG&s!>P5LE~bAq(Yuw<YaAide(bVRfooJA3Bdgts2nw^*93`4$&cix)dysqDU
zOEbZFqWOtmXi!VPbMzf{8tan5`Ln@!eVp@3ysOt4eaT*$lb7t@>dR+GQ2VVB;f8W^
z#61RzX$|F$h{1;PqKIgkhH*5lc);-R`A)l{DUfzWNt?@Y?{-|KiFth~fYym}n(u9{
zf*-^TR@Rc{Lud<DON^ZoR32v;sdg~Uo;G5*c8oT<aA0(tb*47mX4ekp=gT2M%$~~l
z=}(KZXjX29Ha*K~(GD1xKj48N#`BAGoLRlo6;GUAWs3Vc-_Zgk_I9-Ye8hfZ3jH43
zHYM;K@ZNnn{513Wwd_3DBiE$0fUB3ASAxUKPKSaYRi9Y^-rsVp2`oE#<oDoE!{$J6
zXVLoSLI23=e}QlG+f@OY!?*MUuWHw2gZjB!e+19P*YE{#QNt-*Qn5=H&*p$rsv53=
zb)`p3z^7MO`ITyI<s38Yg*Q@fftL?hUIi!5R^bwnowWL;foWsHeg=OE30MN|*XE7}
zp9{}2fEVLaj)C^M8Gi&1U(`GbCN=mx0p2PNIReh93R(mHTv;^|w654N7Ce4n`)N>j
zW5-{?udR)^bYcaw&nJS1LXMvSpBZ!b6Y#ImCkKI#uya$u;wdNggS}1lyTGbzn;rmv
zwQu9o;5*B=9RkDF?Bo-AWwm-R?0_;~Be>yYx6i<cmf-c^D@C@4!0v|3ncye=OuNA`
zk?EVkiug10K)<=Cu}rZY+9NB#2g8qD0iC7m=YsvKHuKAnH5Ye%2zx|Bbu;+K1OA0z
z%ncR>F0BlF8@y*l=vUzOkn9)0$T2wq;P0*GH$c_ww10xvrp%cGrkbq$8oV*uQVM$#
zOT7wyx7^PP{%(z`54ihUz)RqaePKU=pPgK10h3#{^Z>uDt|<qL%C_DF&-Xi<3QmYT
zbr<+!(b3mHi=p8caHeU)li-(AsvZFyY{zQwLiF|qFn-PXiQtLljbp%^eTP2+f4O%2
zD45-nl>pv6nHvL+FU$BFSYMrT3e1o683%sTPcs5E8iM`;9w-Vq3qCs6HyQj(y!zK*
zczAFP__DU!0dQbd<_vISsZ9$8Hl%L_KfGxA5)8d@?m2M9fs;eP0W0d)ftxB%@N?4L
zV>Uhm`^At=QQ+v=JGX#;vu>*ewI$Wxftxq(dKc_=VY3E&_sDt&I4bGbx8UFBANc^h
zYtU&Qu%!2ye6UAw+SlOX(dM_n$Fg%mz{*+K3&G$+p%=jqT!G8LU$13B;QE#Ri@<Tq
z!dk&2s{>vEGq0-d2XF83%L0EpBlX|l7a5jfaBi&iUhrRjb8^9XeHw0qO+$}5!C4DW
zg@Xqtp3MMl=eOPfZ(ONa3MSNSxf?vTbX^MAy!!ZY@cCtj{{ZgW(-;R%y?TB!_(R6_
z!(hgY9Up^d{i+@ZpNQR{2Tu(RX#@>@g8mL(pQwoiQx^KfgL|)}oCl|$&!_~iEX^GT
zE~v>G55Bh1^aXfdN%{_O)e+l3F!n;`RB-wHZU;e4Qt)<gYj5=c@S#Dz)4`h2+dc&c
z2k+bfzBy~tP|zoP<81Ixt`mE}VTbCg!19$Re*^Ygd+u3q-5&FM;GnB%m%;Z}XBU7$
z%W~A<pZx;g2Op0Oy#$tK_}jsrGnB_5FHPLF9CojT)fd3EL)ZTfjO(+x8~EPRBX5Es
zHOIaIw_G_>1U_*7bTHU(<mk)b*b5CmfNdMkW`emTr}~5c=w0(7`0Svq*TJvmud{*k
zleXLg{&QA98JL$H<^n$-?UxSD4pwysT`MiGgIQ}++rXo)IVLdikhM2hcp+#N`2CTP
z6X3KGpGn}Jjha!QX;8+Wz<>8nsRy4-%9;S4o}c>|I5GS1TJX%Q<0rxN;PX1Lb#&vy
z;8SaN{2Bao<@R&n3x_r&fi148Xt3|qojbu-_iXzdj9#|!De&Xfn<7Bp*!peYGQSi5
z0Ef&tHx1mCaq?GS)WY<QVD&`PK2Y5!^S9tzLv0U&57z{50{^hI+g`BGdEZ&!k}K*+
zP}N5>I)>;=|4l!-T*<^iKe=3m#2<(&h<VqQE9GJ$9|Y2R(H}vza4J(3hO7E?^AEr?
zC^Wh+{by5IxPxTzq2Vv96GHqn22~K{iRXJ=$uo|UKfdO2eL-x`r~Zs`Dd}dCr%)T7
z_efvB(^3Co`mdvOexM=`1=NoNwvu$dAWV79_hmn0sIJ8Sb@fsWUAoQ;rQ+KIuB8#A
zpjaKY)X^1$a0Ttp0xEoUT;Yoz#r6j&_D{E6{5VZfD>lX#p;n{g^y6E)PEsp2Uld8p
z7rGcG#t(AR?h?8LU!=*<^-kfE9D_!YLGB-aVe>_g;?+Jnu1Gyk*m6wtB7dNute@`O
zcz=>bei|ok%W-KHc8o|D?*DVh=b+vd)rkG_rQkWi?*(rQhWhEa>-~aJf{zIzF)1P8
z5$#}l!Z<`56BQHnuy%O#u;I}ohK<k;o@y~`^(Kd+N5%}H37Nkj$6-n(I_wHFWsDwi
zS?qZ%D%a+)M8%Jt5a}>w2rDDEAS$&Wiynh!nOPL9OjCX)i!v|BrScRy>`KZ!i#<Qf
zmg`{{Da~%Nn&2Q}c~%FD%F3mOa8V9RA#KyipfsD=<S?-)OQtd1ZpyJ3GtJ~HEf$sL
zu-WseLIv4rlt^Woa<bB>LK_uBn<!qkQch|<<xaEZ<XCbYd?f$7O&@Z{F(r>@rq+=~
zK?qn|+=D#+q=rS&pZ?OnuUbbIttUdza;szG(-Gw{oSfbLA64tP{;2Se;8w@R+kYG-
z(K2b1^{1$Hq|o(%5C(Ir;~j#WcS5G?Ugi0t^e<EEcv6`V;zWo2NJUio%X#`VX;>Si
zzg%x>#eyN%7s|qe_xL?WD(1HIm-9JBbo4&qC)YEXPjU{WW37<3TrZM^zgGBrw_nH%
z7mdg&{pI?UC;asyqpaV%|BJo+<$6~w{N?%xe_Wt=`{N=JV}kY}$o0KKR4B(;Nmbe^
z;~>sC?*5fxov9T5tB}bph-S5)SKgvDcYpaFELk+DP&$Y*<oQSz`L370JRj{BCzw!~
zQP8V6wo3TR@ox&!@tjS<f0Z0Ct}><-l&GW#+Asa(dn5TiDMn@#^saximw$Cn9nV?a
zQ*qd*pndDr99Byys9&BR<@+`H-pzZwy#4FE{PE-#p+cNc|1bY9DX)9|cx;QXO89%%
z=WQRQyx7&U{qp=K-~Y+?eDe5|{<2+X$k)Ao`Mx8LU+s1r@05)P=`Z;esqX&r`a&oC
zQxv!Mt@M-p*2{mDxIS4W{Jr<Lx7|wqD675y!v7=Tucb8iAnTRdPZUA>qop7y{rSz0
zTN?5rNaChJ*3A>dre4&4+g+r%^pi4ddF)FKOy+kpjA?Olq0o>1IM>Mb%XJ0UU7gjR
zH;57_obW2#yM85C=UWY0tJd9-sG%0i^Q3#ChFT)ef1bJzozHac5|3->E~2bc-LL(+
z*WF1&XIgoF@zevDJa2gFflQtcJoTXV>sn7exPATh)VndcE_>=B?cW`E>Y?q|^`3ed
zlk20W9!~Gib?y?6Yv>KCT+iGSHT1?<u2Y_RPg-|U+$A2@(A}3@SKJddbeAC43s1dw
z`+HAM{qFYr2T%PTCg-iE-tk`8Q<ql-9jY=9LRgWXu0y04=9drqq5XbKCibO>s*`be
zkn4AjLmb!d9EU{G)hvXq@~RgPJ5==kx>~F!a^7SMy;kUQJ{F2{!u@p=>j+)7e=%i2
z`^&uc*Be~#&I)_!ItroKhg`q2{hyGI_E!YyDAo~nQ?#>jJ4ib6e;lCWnfbjm#qh8J
z`rJT8=l9U0U7^2<9@XM)4G*Hjx43@i@z9eGR1a3<)vt&y^oL1Tb#ff)NY~QctoL#C
z1nE7LmUwK9Tn}M*dy62KJ)6+wbrDab%{<bz(r{yG7y3KA9Jh=j`U%(XobT(q$iJ@(
z{cF;@(>TlZL7wNXk{;g4IJmkfrzds1v+pqmL05;dX0PL91lM~qyrgyyI?{X4@xVlW
zT&E%=b6ttMZ_`K*r+NC3m=`h)7xvKid+ClY%E5h0XWxyy-$nj)qI~aqw{(&JAlE|}
z-s>aqXHLY!T<>K4PcvDqZlA2MG`l0;Q9y4b)9CAyglUtf8VwVknnqu;7>(mRtceM3
zNoJcd!)l|K7Dj%fY%~=VGP()QvsxS$b5!hzm{AM~#w>FoStEzhcP_ZsHW%dNERgji
zP8!Fn89z1t$wZ^HP>qat)WYw|m0Iw^&^T{6wKsuB6R6q(hh;py8uV1g7Nk?}(x#bG
zt(K_avBO6)W0GO=*m#3+^7!#jB~CL=iyv!9L`U(Iz-Y4DO$&^cT(hUZKkQ+~anDSO
ze{w<s!%e^PeGXH;+0p6Tzs(UJ@TBDz82RG{k=5%XA>+h(#;KN!tbBSNl3+FE=Uejm
z=R#g(@e=qKL|zHrUkQ07Pnb;A(pyhsLB0jOaci^kIgw|6p4U?%pM0A!)0AtbK@|sr
z+$sDEC3KKKTjAd?c{|fH5!rE!r}E*GXC~z<C{IoKB+64WTKHoY@qv_Q8vj5_X~us5
DMv_I6

diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowlane/lib/crc32.sv b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowlane/lib/crc32.sv
deleted file mode 100755
index 7959ca94a1fa61e47c2e4df815bb35fceb7bd809..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 10567
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
DMv_I6

diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowlane/lib/crc32_v2.c b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowlane/lib/crc32_v2.c
deleted file mode 100644
index b38d22d40f6..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowlane/lib/crc32_v2.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/*----------------------------------------------------------------------------*\
- *  CRC-32 version 2.0.0 by Craig Bruce, 2006-04-29.
- *
- *  This program generates the CRC-32 values for the files named in the
- *  command-line arguments.  These are the same CRC-32 values used by GZIP,
- *  PKZIP, and ZMODEM.  The Crc32_ComputeBuf() can also be detached and
- *  used independently.
- *
- *  THIS PROGRAM IS PUBLIC-DOMAIN SOFTWARE.
- *
- *  Based on the byte-oriented implementation "File Verification Using CRC"
- *  by Mark R. Nelson in Dr. Dobb's Journal, May 1992, pp. 64-67.
- *
- *  v1.0.0: original release.
- *  v1.0.1: fixed printf formats.
- *  v1.0.2: fixed something else.
- *  v1.0.3: replaced CRC constant table by generator function.
- *  v1.0.4: reformatted code, made ANSI C.  1994-12-05.
- *  v2.0.0: rewrote to use memory buffer & static table, 2006-04-29.
-\*----------------------------------------------------------------------------*/
-
-#include <stdio.h>
-#include <stdlib.h>
-
-/*----------------------------------------------------------------------------*\
- *  Local functions
-\*----------------------------------------------------------------------------*/
-
-static int Crc32_ComputeFile( FILE *file, unsigned long *outCrc32 );
-
-static unsigned long Crc32_ComputeBuf( unsigned long inCrc32, const void *buf,
-                                       size_t bufLen );
-
-/*----------------------------------------------------------------------------*\
- *  NAME:
- *     main() - main function for CRC-32 generation
- *  DESCRIPTION:
- *     Computes the CRC-32 value for the set of files named in the command-
- *     line arguments.
- *  ARGUMENTS:
- *     argc - command-line-argument count
- *     argv - command-line-argument strings
- *  RETURNS:
- *     err - 0 on success or executes exit(1) on error
- *  ERRORS:
- *     - file errors
-\*----------------------------------------------------------------------------*/
-
-int main( int argc, const char *argv[] )
-{
-    FILE *file = NULL;
-    const char *filename;
-    unsigned long argIdx;
-    unsigned long crc32;
-    int err;
-
-    /** compute crcs **/
-    if (argc < 2) {
-        /** read from 'stdin' if no arguments given **/
-        err = Crc32_ComputeFile( stdin, &crc32 );
-        if (err == -1) goto ERR_EXIT;
-        printf("crc32 = 0x%08lX for (stdin)\n", crc32 );
-    } else {
-        /** report named files in sequence **/
-        for (argIdx=1; argIdx < argc; argIdx++) {
-            filename = argv[argIdx];
-            file = fopen( filename, "rb" );
-            if (file == NULL) {
-                fprintf( stderr, "error opening file \"%s\"!\n", filename );
-                goto ERR_EXIT;
-            }
-            err = Crc32_ComputeFile( file, &crc32 );
-            if (err == -1) goto ERR_EXIT;
-            /*printf("crc32 = 0x%08lX for \"%s\"\n", crc32, filename );*/
-            printf("%08lX", crc32);
-            err = fclose( file );
-            file = NULL;
-            if (err == EOF) {
-                fprintf( stderr, "error closing file \"%s\"!\n", filename );
-                goto ERR_EXIT;
-            }
-        }
-    }
-    return( 0 );
-
-    /** error exit **/
-ERR_EXIT:
-    if (file != NULL) fclose( file );
-    exit( 1 );
-}
-
-/*----------------------------------------------------------------------------*\
- *  NAME:
- *     Crc32_ComputeFile() - compute CRC-32 value for a file
- *  DESCRIPTION:
- *     Computes the CRC-32 value for an opened file.
- *  ARGUMENTS:
- *     file - file pointer
- *     outCrc32 - (out) result CRC-32 value
- *  RETURNS:
- *     err - 0 on success or -1 on error
- *  ERRORS:
- *     - file errors
-\*----------------------------------------------------------------------------*/
-
-static int Crc32_ComputeFile( FILE *file, unsigned long *outCrc32 )
-{
-#   define CRC_BUFFER_SIZE  8192
-    unsigned char buf[CRC_BUFFER_SIZE];
-    size_t bufLen;
-
-    /** accumulate crc32 from file **/
-    *outCrc32 = 0;
-    while (1) {
-        bufLen = fread( buf, 1, CRC_BUFFER_SIZE, file );
-        if (bufLen == 0) {
-            if (ferror(file)) {
-                fprintf( stderr, "error reading file\n" );
-                goto ERR_EXIT;
-            }
-            break;
-        }
-        *outCrc32 = Crc32_ComputeBuf( *outCrc32, buf, bufLen );
-    }
-    return( 0 );
-
-    /** error exit **/
-ERR_EXIT:
-    return( -1 );
-}
-
-/*----------------------------------------------------------------------------*\
- *  NAME:
- *     Crc32_ComputeBuf() - computes the CRC-32 value of a memory buffer
- *  DESCRIPTION:
- *     Computes or accumulates the CRC-32 value for a memory buffer.
- *     The 'inCrc32' gives a previously accumulated CRC-32 value to allow
- *     a CRC to be generated for multiple sequential buffer-fuls of data.
- *     The 'inCrc32' for the first buffer must be zero.
- *  ARGUMENTS:
- *     inCrc32 - accumulated CRC-32 value, must be 0 on first call
- *     buf     - buffer to compute CRC-32 value for
- *     bufLen  - number of bytes in buffer
- *  RETURNS:
- *     crc32 - computed CRC-32 value
- *  ERRORS:
- *     (no errors are possible)
-\*----------------------------------------------------------------------------*/
-
-static unsigned long Crc32_ComputeBuf( unsigned long inCrc32, const void *buf,
-                                       size_t bufLen )
-{
-    static const unsigned long crcTable[256] = {
-   0x00000000,0x77073096,0xEE0E612C,0x990951BA,0x076DC419,0x706AF48F,0xE963A535,
-   0x9E6495A3,0x0EDB8832,0x79DCB8A4,0xE0D5E91E,0x97D2D988,0x09B64C2B,0x7EB17CBD,
-   0xE7B82D07,0x90BF1D91,0x1DB71064,0x6AB020F2,0xF3B97148,0x84BE41DE,0x1ADAD47D,
-   0x6DDDE4EB,0xF4D4B551,0x83D385C7,0x136C9856,0x646BA8C0,0xFD62F97A,0x8A65C9EC,
-   0x14015C4F,0x63066CD9,0xFA0F3D63,0x8D080DF5,0x3B6E20C8,0x4C69105E,0xD56041E4,
-   0xA2677172,0x3C03E4D1,0x4B04D447,0xD20D85FD,0xA50AB56B,0x35B5A8FA,0x42B2986C,
-   0xDBBBC9D6,0xACBCF940,0x32D86CE3,0x45DF5C75,0xDCD60DCF,0xABD13D59,0x26D930AC,
-   0x51DE003A,0xC8D75180,0xBFD06116,0x21B4F4B5,0x56B3C423,0xCFBA9599,0xB8BDA50F,
-   0x2802B89E,0x5F058808,0xC60CD9B2,0xB10BE924,0x2F6F7C87,0x58684C11,0xC1611DAB,
-   0xB6662D3D,0x76DC4190,0x01DB7106,0x98D220BC,0xEFD5102A,0x71B18589,0x06B6B51F,
-   0x9FBFE4A5,0xE8B8D433,0x7807C9A2,0x0F00F934,0x9609A88E,0xE10E9818,0x7F6A0DBB,
-   0x086D3D2D,0x91646C97,0xE6635C01,0x6B6B51F4,0x1C6C6162,0x856530D8,0xF262004E,
-   0x6C0695ED,0x1B01A57B,0x8208F4C1,0xF50FC457,0x65B0D9C6,0x12B7E950,0x8BBEB8EA,
-   0xFCB9887C,0x62DD1DDF,0x15DA2D49,0x8CD37CF3,0xFBD44C65,0x4DB26158,0x3AB551CE,
-   0xA3BC0074,0xD4BB30E2,0x4ADFA541,0x3DD895D7,0xA4D1C46D,0xD3D6F4FB,0x4369E96A,
-   0x346ED9FC,0xAD678846,0xDA60B8D0,0x44042D73,0x33031DE5,0xAA0A4C5F,0xDD0D7CC9,
-   0x5005713C,0x270241AA,0xBE0B1010,0xC90C2086,0x5768B525,0x206F85B3,0xB966D409,
-   0xCE61E49F,0x5EDEF90E,0x29D9C998,0xB0D09822,0xC7D7A8B4,0x59B33D17,0x2EB40D81,
-   0xB7BD5C3B,0xC0BA6CAD,0xEDB88320,0x9ABFB3B6,0x03B6E20C,0x74B1D29A,0xEAD54739,
-   0x9DD277AF,0x04DB2615,0x73DC1683,0xE3630B12,0x94643B84,0x0D6D6A3E,0x7A6A5AA8,
-   0xE40ECF0B,0x9309FF9D,0x0A00AE27,0x7D079EB1,0xF00F9344,0x8708A3D2,0x1E01F268,
-   0x6906C2FE,0xF762575D,0x806567CB,0x196C3671,0x6E6B06E7,0xFED41B76,0x89D32BE0,
-   0x10DA7A5A,0x67DD4ACC,0xF9B9DF6F,0x8EBEEFF9,0x17B7BE43,0x60B08ED5,0xD6D6A3E8,
-   0xA1D1937E,0x38D8C2C4,0x4FDFF252,0xD1BB67F1,0xA6BC5767,0x3FB506DD,0x48B2364B,
-   0xD80D2BDA,0xAF0A1B4C,0x36034AF6,0x41047A60,0xDF60EFC3,0xA867DF55,0x316E8EEF,
-   0x4669BE79,0xCB61B38C,0xBC66831A,0x256FD2A0,0x5268E236,0xCC0C7795,0xBB0B4703,
-   0x220216B9,0x5505262F,0xC5BA3BBE,0xB2BD0B28,0x2BB45A92,0x5CB36A04,0xC2D7FFA7,
-   0xB5D0CF31,0x2CD99E8B,0x5BDEAE1D,0x9B64C2B0,0xEC63F226,0x756AA39C,0x026D930A,
-   0x9C0906A9,0xEB0E363F,0x72076785,0x05005713,0x95BF4A82,0xE2B87A14,0x7BB12BAE,
-   0x0CB61B38,0x92D28E9B,0xE5D5BE0D,0x7CDCEFB7,0x0BDBDF21,0x86D3D2D4,0xF1D4E242,
-   0x68DDB3F8,0x1FDA836E,0x81BE16CD,0xF6B9265B,0x6FB077E1,0x18B74777,0x88085AE6,
-   0xFF0F6A70,0x66063BCA,0x11010B5C,0x8F659EFF,0xF862AE69,0x616BFFD3,0x166CCF45,
-   0xA00AE278,0xD70DD2EE,0x4E048354,0x3903B3C2,0xA7672661,0xD06016F7,0x4969474D,
-   0x3E6E77DB,0xAED16A4A,0xD9D65ADC,0x40DF0B66,0x37D83BF0,0xA9BCAE53,0xDEBB9EC5,
-   0x47B2CF7F,0x30B5FFE9,0xBDBDF21C,0xCABAC28A,0x53B39330,0x24B4A3A6,0xBAD03605,
-   0xCDD70693,0x54DE5729,0x23D967BF,0xB3667A2E,0xC4614AB8,0x5D681B02,0x2A6F2B94,
-   0xB40BBE37,0xC30C8EA1,0x5A05DF1B,0x2D02EF8D };
-    unsigned long crc32;
-    unsigned char *byteBuf;
-    size_t i;
-
-    /** accumulate crc32 for buffer **/
-    crc32 = inCrc32 ^ 0xFFFFFFFF;
-    byteBuf = (unsigned char*) buf;
-    for (i=0; i < bufLen; i++) {
-        crc32 = (crc32 >> 8) ^ crcTable[ (crc32 ^ byteBuf[i]) & 0xFF ];
-    }
-    return( crc32 ^ 0xFFFFFFFF );
-}
-
-/*----------------------------------------------------------------------------*\
- *  END OF MODULE: crc32.c
-\*----------------------------------------------------------------------------*/
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowlane/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowlane/plugin.properties
deleted file mode 100644
index 8f519c1de0b..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowlane/plugin.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-incoming-dir = ${incoming-root-dir}/register-flowlane
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-flowlane.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-jython-version=2.7
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowlane/register-flowlane.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowlane/register-flowlane.py
deleted file mode 100644
index 501a3ee66a3..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-flowlane/register-flowlane.py
+++ /dev/null
@@ -1,477 +0,0 @@
-'''
-@copyright:
-2016 ETH Zuerich, SIS
-    
-@license: 
-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.
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-
-@author:
-Manuel Kohler
-'''
-
-
-import os
-import shutil
-import re
-import sys
-import subprocess
-import glob
-from itertools import islice
-from collections import OrderedDict
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from java.lang import System;
-# The following module is located in the path defined in the datastore_server.conf
-# Look for: -Dpython.path}
-from gfb_utils import *
-
-from __builtin__ import file
-
-FASTQ_GZ_PATTERN = "*.fastq.gz"
-METADATA_FILE_SUFFIX = "_metadata.tsv"
-INDEX1='BARCODE'
-INDEX2='INDEX2'
-EXTERNAL_SAMPLE_NAME='EXTERNAL_SAMPLE_NAME'
-FASTQ_SAMPLE_CODE = 'FASTQ_SAMPLE_CODE'
-INDEXREAD1='INDEXREAD'
-INDEXREAD2='INDEXREAD2'
-MISMATCH_IN_INDEX='MISMATCH_IN_INDEX'
-BCL_VERSION='BCL_VERSION'
-SAMPLE_TYPE = 'SAMPLE_TYPE'
-SAMPLE_CODE = 'SAMPLE_CODE'
-NCBI_ORGANISM_TAXONOMY='NCBI_ORGANISM_TAXONOMY'
-PHIX_TAXONOMY_ID='10847'
-DEFAULT_INDEX='NoIndex'
-CRC32_PATH='lib/crc32'
-if System.getProperty('os.name')  == 'Mac OS X':
-    CRC32_PATH='lib/a.out'
-NOHUP_REGEX = 'nohup*.txt'
-CHECKSUMS_REGEX = 'checksums.txt'
-COMMAND_LINE_INVOCATION = 'Command-line invocation'
-MISMATCH_REGEX = r'(barcode-mismatches) ([0-9])'
-mismatch_dict = {0: 'NONE', 1:'ONE', 2:'TWO'}
-MISMATCH_ABREVIATION = "_MM_"
-
-def get_mismatches(file):
-    
-    command_line_regex = re.compile(COMMAND_LINE_INVOCATION)
-    mismatch_regex = re.compile(MISMATCH_REGEX)
-    command_line_list = []
-    mismatches = 0
-    number_of_lines_to_read = 5
-
-    if file:
-        with open(file[0]) as nohup:
-            head = list(islice(nohup, number_of_lines_to_read))
-        for line in head:
-            if re.search(command_line_regex, line):
-                command_line_list.append(line)
-                rr = re.search(mismatch_regex, line)
-                mismatches = int(rr.group().split()[1])
-    else:
-        print("File " + str(file) + " not found!")
-    return command_line_list, mismatches
-
-
-def mismatch_string_builder (mismatches, file_part_name):
-    
-    if mismatches > 0:
-        mismatch_string = MISMATCH_ABREVIATION + str(mismatches)
-    else:
-        mismatch_string = ""
-    meta_data_file_name = file_part_name + mismatch_string + METADATA_FILE_SUFFIX
-    return meta_data_file_name
-
-
-def checkOnFileSize(file):
-    return os.stat(file).st_size == 0
-
-
-def CRC32_from_file(filename, transaction):
-    
-    if checkOnFileSize(filename):
-        raise Exception("FILE " + filename + " IS EMPTY!")
-    
-    threadPropertyDict = get_thread_properties(transaction)
-    absolutePath = os.path.dirname(os.path.realpath(threadPropertyDict['script-path']))
-    fullPathCrc32 = (os.path.join(absolutePath, CRC32_PATH))
-    if os.path.exists(fullPathCrc32):
-        args = [fullPathCrc32, filename]
-        p = subprocess.Popen(args, stdout=subprocess.PIPE)
-        cksum = (p.communicate()[0])
-        print("Calculated crc32 checksum for: "+ os.path.basename(filename) + " " + cksum)
-    else:
-        cksum = 0 & 0xFFFFFFFF
-    return cksum
-
-
-def writeMetadataFile(transaction, folder_name, meta_data_file_name, sequencing_sample_properties_dict,
-                      fcMetaDataDict, experiment, sample_space, fastqFileList, flowLane, dataSet, flow_lane_sample):
-    '''
-    Writes a file of meta data related to one sample
-    '''
-
-    incoming_path = transaction.getIncoming().getAbsolutePath()
-    
-    sequencing_sample_properties_list = sequencing_sample_properties_dict.keys()
-    sequencing_sample_properties_list.sort()
-
-    expId = experiment.getIdentifier()
-    try:
-        
-      
-        meta_data_file = open(meta_data_file_name,'w')
-        for propertyType in sequencing_sample_properties_list:
-            if (propertyType in [u'FLOW_CELL_PROPERTIES']):
-                continue
-            if propertyType in [SAMPLE_TYPE] or propertyType in [SAMPLE_CODE]:
-                 meta_data_file.write(propertyType.encode('utf-8') + "\t" +
-                                 str(sequencing_sample_properties_dict[propertyType])+ "\n")
-            else:
-                meta_data_file.write(propertyType.encode('utf-8') + "\t" +
-                    sequencing_sample_properties_dict[propertyType].encode('utf-8').replace('\n',',') + "\n")
-    
-        meta_data_file.write("EXPERIMENT\t" + expId + "\n".encode('utf-8'))
-        meta_data_file.write("\nFLOWCELL PROPERTIES\n".encode('utf-8'))
-        fcMetaDataDict["LANE_NUMBER"] = flowLane
-        keys = fcMetaDataDict.keys()
-        keys.sort()
-        
-        sequencer_vocabulary_description = get_vocabulary_descriptions(transaction, 'SEQUENCER')    
-        meta_data_file.write('SEQUENCER_MODEL' + "\t" + 
-                             sequencer_vocabulary_description[fcMetaDataDict['SEQUENCER']].encode('utf-8') + "\n")
-        
-        for k in keys:
-            meta_data_file.write(k.encode('utf-8') + "\t" + fcMetaDataDict[k].encode('utf-8') + "\n")
-      
-        meta_data_file.write("\nFASTQ_FILES\n".encode('utf-8'))
-        
-        checksums_file = get_file_names(incoming_path, CHECKSUMS_REGEX)
-        if checksums_file:
-            with open(checksums_file[0]) as checksums:
-                for line in checksums:
-                    # Ugly hack :-(
-                    if line.starts_with("Undetermined"):
-                        line = fcMetaDataDict['CODE'] + "_" + line
-                    meta_data_file.write(line)
-        else:
-            print("File " + str(checksums_file) + " not found!")     
-            
-            # Use slow fall back solution
-            for file in fastqFileList:
-                print("Using fall back solution for creation of CRC32 checksums")
-                meta_data_file.write(os.path.basename(file) + "\t" + str(CRC32_from_file(file, transaction)) + "\n")
-
-        meta_data_file.write("\nDATASET PROPERTIES\n".encode('utf-8'))
-        # Data Set Property:
-        if fastqFileList:
-            
-            meta_data_file.write((MISMATCH_IN_INDEX + "\t" + dataSet.getPropertyValue(MISMATCH_IN_INDEX) + "\n").encode('utf-8'))
-            meta_data_file.write((BCL_VERSION + "\t" + flow_lane_sample.getPropertyValue(BCL_VERSION)).encode('utf-8'))
-    except IOError:
-        print ('File error, could not write '+ file)
-    finally:
-        meta_data_file.close()
-  
-    destinationFolder = folder_name
-    extraCopySciCore (transaction, sample_space, meta_data_file_name, destinationFolder)
-
-
-def extraCopySciCore (transaction, sample_space, filePath, destinationFolder=""):
-    '''
-    Handles the extra copies of the data for transfer with datamover for SCICORE
-    '''
-    
-    dropBoxFolder = '/links/shared/dsu/dss/customers/biozentrum_scicore/drop-box'
-    if System.getProperty('os.name')  == 'Mac OS X':
-        dropBoxFolder = '/Users/kohleman/tmp/scicore'
-    
-    # if a sample is part of this space list then it will be transferred to sciCore
-    SPACE_WHITELIST = ["DUW_SALZBURGER", "BIOZENTRUM_HANDSCHIN", "BIOZENTRUM_ZAVOLAN",
-                  "BIOZENTRUM_KELLER", "BIOZENTRUM_NIMWEGEN", "BSSE_DBM_BIOZENTRUM_NEUROSTEMX",
-                  "UNI_BASEL_STPH_UTZINGER", "UNI_BASEL_STPH_GAGNEUX",
-                  "BIOZENTRUM_PAPASSOTIROPOULOS_BEERENWINKEL", "BIOZENTRUM_SPANG",
-                  "BIOZENTRUM_JENAL", "UNI_BASEL_CHEMIE_CREUS","UKBB_WELLMANN" 
-                 ]
-    DBM_SPACE_PREFIX = "DBM_"
-    
-    basename = os.path.basename(filePath)
-    
-    if (sample_space in SPACE_WHITELIST) or sample_space.startswith(DBM_SPACE_PREFIX):
-        dirname = os.path.join(dropBoxFolder, destinationFolder)
-        if not os.path.exists(dirname):
-            os.mkdir(dirname)
-        print("COPYING " + filePath + " TO SCICORE FOLDER " + dirname)
-        shutil.copy(filePath, dirname)
-        #os.chmod(os.path.join(dirname, basename), 0774)
-    else:
-        print(sample_space + " not in SPACE_WHITELIST. Sample will not be copied to sciCORE.\n")
-
-
-def get_sample_properties (transaction, sample): 
-  
-    sample_properties_dict = {}
-    # returns Map<String, String>
-    sample_properties = sample.getSample().getProperties()
-    sequencing_sample_type = sample.getSampleType()
-    sequencing_sample_code = sample.getCode()
-    sample_properties_dict[SAMPLE_TYPE] = sequencing_sample_type
-    sample_properties_dict[SAMPLE_CODE] = sequencing_sample_code
-    
-    for property in sample_properties:
-        code = property.getPropertyType().getSimpleCode()
-        sample_properties_dict[code] = property.tryGetAsString()
-    
-    ordered_sample_properties_dict = OrderedDict(sorted(sample_properties_dict.items(), key=lambda t: t[0]))
-    return ordered_sample_properties_dict
-
-
-def searchParents (search_service, parents):
-
-    sc = SearchCriteria()
-    # set the Search Criteria to an OR condition, default is AND
-    sc.setOperator(SearchCriteria.SearchOperator.MATCH_ANY_CLAUSES)
-    # Get the codes for all parents
-    for parent in parents:
-        parentSubCode = parent.getSubCode()
-        sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, parentSubCode));
-    # all parents of the flow lane
-    foundParents = search_service.searchForSamples(sc)
-    return foundParents
-
-
-def renameFiles (fastq_files, undetermined, flow_cell_id, mismatches):
-    
-    newFastqFileList = []
-    for file in fastq_files:
-        folder = os.path.dirname(file)
-        fileName = os.path.basename(file)
-        filepart, suffix = fileName.split('.',1)
-        if undetermined:
-            if mismatches > 0:
-                new_file =  folder + "/" + flow_cell_id + '_' + filepart + MISMATCH_ABREVIATION + str(mismatches) + "." + suffix
-            else:
-                new_file =  folder + "/" + flow_cell_id + '_' + filepart + "." + suffix
-            print ("Renaming file " + file + " to " + new_file)
-            os.rename(file, new_file)
-        else:
-            if mismatches > 0:
-                new_file = folder + "/" + filepart + MISMATCH_ABREVIATION + str(mismatches) + "." + suffix
-                print ("Renaming file " + file + " to " + new_file)
-                os.rename(file, new_file)
-            else:
-                new_file = file
-        newFastqFileList.append(new_file)
-    return newFastqFileList
-
-
-def put_files_to_dataset (transaction, dataSet, fastq_files, folder_name, sample_space):
-
-    for file in fastq_files:
-        print("SAMPLE_SPACE:" + sample_space)
-        extraCopySciCore (transaction, sample_space, file, folder_name)
-        transaction.moveFile(file, dataSet, folder_name)
-
-# -------------------------------------------------------------------------------
-
-def split_incoming_folder_name (name):
-    split=name.split("_")
-
-    # expected incoming Name, e.g.: BSSE_QGF_22266_H0W8YBGXX_1
-    if (len(split) == 5):
-        sample_code = '-'.join([split[0], split[1], split[2]])
-        flowCellId = split[3]
-        flowLane = split[-1]
-        undetermined = False
-
-    # expected Undetermined_H0W8YBGX_1
-    elif (len(split) == 3):
-        sample_code = ''
-        flowCellId = split[-2]
-        flowLane = split[-1]
-        undetermined = True
-        
-    # MiSeq BSSE_QGF_36097_000000000_AH4PH_1
-    elif (len(split) == 6):
-        sample_code = '-'.join([split[0], split[1], split[2]])
-        flowCellId = '-'.join([split[3],split[4]])
-        flowLane = split[-1]
-        undetermined = False
-    
-    #MiSeq Undetermined_000000000_AH4PH_1
-    elif (len(split) == 4):
-        sample_code = ''
-        flowCellId = '-'.join([split[1], split[2]])
-        flowLane = split[-1]
-        undetermined = True
-    else:
-        print("Expected different naming schema!")
-  
-    incoming_sample = flowCellId + ':' + flowLane
-    return sample_code, flowCellId, flowLane, incoming_sample, undetermined
-
-# -------------------------------------------------------------------------------
-
-def get_vocabulary_descriptions (transaction, vocabulary_name):
-    vocabulary_descriptions_dict = {}
-    vocabulary = transaction.getVocabulary(vocabulary_name)
-    vocabulary_terms = vocabulary.getTerms()
-    for term in vocabulary_terms:
-        vocabulary_descriptions_dict[term.getCode()] = term.getDescription()
-    return vocabulary_descriptions_dict
-
-# -------------------------------------------------------------------------------
-
-
-def process_regular_samples(transaction, name, sample_code, flowCellId, flowLane, fastq_files, first_fastq_file,
-                             search_unique_sample, fcMetaDataDict, dataSet, flow_lane_sample, mismatches):
-
-    newFastqFiles = renameFiles(fastq_files, False, flowCellId, mismatches)
-
-    foundSample = search_unique_sample(transaction, sample_code)
-    sequencing_sample = foundSample[0].getSample()
-    experiment = sequencing_sample.getExperiment()
-    sequencing_sample_code = sequencing_sample.getCode()
-    print "sequencing_sample_code: " + sequencing_sample_code
-    sequencing_sample_properties_dict = get_sample_properties(transaction, foundSample[0])
-    if (INDEX1 in sequencing_sample_properties_dict) and (fcMetaDataDict[INDEXREAD1] > 0):
-        #print(sequencing_sample_properties_dict[INDEX1])
-        dataSet.setPropertyValue(INDEX1, sequencing_sample_properties_dict[INDEX1])
-    if (INDEX2 in sequencing_sample_properties_dict) and (fcMetaDataDict[INDEXREAD2] > 0):
-        dataSet.setPropertyValue(INDEX2, sequencing_sample_properties_dict[INDEX2])
-    dataSet.setPropertyValue(EXTERNAL_SAMPLE_NAME, sequencing_sample_properties_dict[EXTERNAL_SAMPLE_NAME])
-    dataSet.setPropertyValue(FASTQ_SAMPLE_CODE, sequencing_sample_code.replace('-','_'))
-    
-    sample_space = foundSample[0].getSpace()
-    filepart, suffix = first_fastq_file.split('.', 1)
-
-    meta_data_file_name = mismatch_string_builder(mismatches, filepart.rsplit('_', 2)[0])
-    
-    # get a file from the IDataSetRegistrationTransaction so it is automatically part of the data set
-    meta_data_file_path = transaction.createNewFile(dataSet, name, meta_data_file_name)
-    writeMetadataFile(transaction, name, meta_data_file_path, sequencing_sample_properties_dict, fcMetaDataDict,
-                       experiment, sample_space, newFastqFiles, flowLane, dataSet, flow_lane_sample)
-    
-    return newFastqFiles, sample_space
-
-
-def process_undetermined(transaction, undetermined, name, flowCellId, flowLane, fastq_files, first_fastq_file,
-                          search_service, fcMetaDataDict, parents, dataSet, flow_lane_sample, mismatches):
-    sample_space = ""
-    newFastqFiles = []
-    sample_space_list = []
-    lane_parents = searchParents(search_service, parents)
-    print "Found " + str(lane_parents.size()) + " parents"
-    newFastqFiles = renameFiles(fastq_files, undetermined, flowCellId, mismatches)
-    for parent in lane_parents:
-        sequencing_sample_properties_dict = get_sample_properties(transaction, parent)
-        parent_sample = parent.getSample()
-        sample_code = parent_sample.getCode()
-        experiment = parent_sample.getExperiment()
-        sample_space = parent.getSpace()
-        sample_space_list.append(sample_space)
-
-        # Special Sample Types without index (e.g. ILLUMINA_SEQUENCING_NEUROSTEMX_SINGLECELL) are caught here.
-        # as those samples do not have a NCBI ORGANISM TAXONOMY
-        if NCBI_ORGANISM_TAXONOMY not in sequencing_sample_properties_dict:
-            print sample_code + ": Processing Sample without NCBI ORGANISM TAXONOMY: ILLUMINA_SEQUENCING_NEUROSTEMX_SINGLECELL"
-            meta_data_file_name = mismatch_string_builder(mismatches, sample_code + '_' + flowCellId + '_' + first_fastq_file.split('.')[0])
-            meta_data_file_path = transaction.createNewFile(dataSet, name, meta_data_file_name)
-            writeMetadataFile(transaction, name, meta_data_file_path, sequencing_sample_properties_dict, fcMetaDataDict,
-                               experiment, sample_space, newFastqFiles, flowLane, dataSet, flow_lane_sample)
-
-        elif (INDEX1 not in sequencing_sample_properties_dict or sequencing_sample_properties_dict[INDEX1] == 'NOINDEX') and \
-         (INDEX2 not in sequencing_sample_properties_dict or sequencing_sample_properties_dict[INDEX2] == 'NOINDEX') and \
-          (sequencing_sample_properties_dict[NCBI_ORGANISM_TAXONOMY] != PHIX_TAXONOMY_ID):
-            print 'NONINDEXED sample and Taxonomy id is NOT ' + PHIX_TAXONOMY_ID + ', probably a pool: ' + sample_code
-            meta_data_file_name = mismatch_string_builder(mismatches, sample_code + '_' + flowCellId + '_' + first_fastq_file.split('.')[0])
-            meta_data_file_path = transaction.createNewFile(dataSet, name, meta_data_file_name)
-            writeMetadataFile(transaction, name, meta_data_file_path, sequencing_sample_properties_dict, fcMetaDataDict,
-                               experiment, sample_space, newFastqFiles, flowLane, dataSet, flow_lane_sample)
-
-        else:
-            print sample_code + ": Create parent meta data file"
-            meta_data_file_name = mismatch_string_builder(mismatches, 'PARENT_' + sample_code + '_' + flowCellId)
-            meta_data_file_path = transaction.createNewFile(dataSet, name, meta_data_file_name)
-            writeMetadataFile(transaction, name, meta_data_file_path, sequencing_sample_properties_dict, fcMetaDataDict, 
-                              experiment, sample_space, [], flowLane, dataSet, flow_lane_sample)
-   
-    sample_space_set = set(sample_space_list)
-    try:
-      sample_space_set.remove("PHIX")
-    except:
-      print("No Phix on this lane...")
-    sample_space = sample_space_set.pop()
-    return newFastqFiles, sample_space
-
-def process(transaction):
-
-    undetermined = False
-    mismatches = 0
-    print("\n" + str(datetime.now()))
-
-    incoming_path = transaction.getIncoming().getAbsolutePath()
-    name = transaction.getIncoming().getName()
-    
-    sample_code, flowCellId, flowLane, incoming_sample, undetermined =  split_incoming_folder_name (name)
-    
-    nohup_file = glob.glob(os.path.join(incoming_path, NOHUP_REGEX))
-    if nohup_file:
-        command_line_list, mismatches = get_mismatches(nohup_file)
-        
-
-    # get all fastqs
-    fastq_files = get_file_names(incoming_path, FASTQ_GZ_PATTERN)
-    
-    # BSSE-QGF-22266-H0W8YBGXX-1-654-BC3-TTAGGC_S1_L001_R1_001.fastq.gz
-    # BSSE-QGF-22051-H0T25AGXX-1-1-1-TAAGGCGA-CTCTCTAT_S46_L001_R1_001.fastq.gz
-    first_fastq_file = os.path.basename(fastq_files[0])
-
-    search_service = transaction.getSearchService()
-    
-    flowcell_sample_immutable = search_unique_sample (transaction, flowCellId)
-    fcMetaDataDict = get_sample_properties(transaction, flowcell_sample_immutable[0])
-    flow_lane_immutable = search_unique_sample (transaction, incoming_sample)
-    
-    sample = flow_lane_immutable[0].getSample()
-    parents = sample.getParents()
-    
-    dataSet = transaction.createNewDataSet("FASTQ_GZ")
-    dataSet.setMeasuredData(False)
-    dataSet.setPropertyValue(INDEX1, DEFAULT_INDEX)
-    dataSet.setPropertyValue(INDEX2, DEFAULT_INDEX)
-    dataSet.setPropertyValue(MISMATCH_IN_INDEX, mismatch_dict[mismatches])
-    dataSet.setPropertyValue(BCL_VERSION, flow_lane_immutable[0].getPropertyValue(BCL_VERSION))
-    
-    if mismatches > 0:
-        name += MISMATCH_ABREVIATION + str(mismatches)
-    dirName = transaction.createNewDirectory(dataSet,name)
-
-    if undetermined:
-        fastq_files, sample_space = process_undetermined(transaction, undetermined, name, flowCellId, flowLane,
-                                fastq_files, first_fastq_file, search_service, fcMetaDataDict, parents, dataSet,
-                                flow_lane_immutable[0], mismatches) 
-    else:
-        fastq_files, sample_space = process_regular_samples(transaction, name, sample_code, flowCellId, flowLane,
-                                fastq_files, first_fastq_file, search_unique_sample, fcMetaDataDict, dataSet,
-                                flow_lane_immutable[0], mismatches)
-
-    put_files_to_dataset (transaction, dataSet, fastq_files, name, sample_space)
-
-    sa = transaction.getSampleForUpdate(flow_lane_immutable[0].getSampleIdentifier())
-    # Deactivated as this creates for each sample a new history entry, eventually moved to the registration of Basecall- Stats
-    #sa.setPropertyValue("DATA_TRANSFERRED", create_openbis_timestamp_now())
-    dataSet.setSample(flow_lane_immutable[0])
-
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-undetermined/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-undetermined/plugin.properties
deleted file mode 100644
index 6c92aaded21..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-undetermined/plugin.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-incoming-dir = ${incoming-root-dir}/register-undetermined
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-undetermined.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-jython-version=2.7
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-undetermined/register-undetermined.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-undetermined/register-undetermined.py
deleted file mode 100644
index c2f37ad6127..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/register-undetermined/register-undetermined.py
+++ /dev/null
@@ -1,51 +0,0 @@
-'''
-@copyright:
-2015 ETH Zuerich, SIS
-    
-@license: 
-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.
-
-@author:
-Manuel Kohler
-'''
-
-import os
-import shutil
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
-
-# The following module is located in the path defined in the datastore_server.conf
-# Look for: -Dpython.path}
-from gfb_utils import *
-
-
-def process(transaction):
-
-    incomingPath = transaction.getIncoming().getPath()
-    incomingFolder = transaction.getIncoming().getName()
-    
-    split = incomingFolder.split("_")
-    
-    if (len(split) == 2):
-      flow_cell, flow_lane = incomingFolder.split("_")
-    elif (len(split) == 3):
-        flow_cell = "-".join([split[0], split[1]])
-        flow_lane = split[-1]
-    
-    connected_sample_code = ":".join([flow_cell, flow_lane])
-    connected_sample = search_unique_sample(transaction, connected_sample_code)
-
-    dataSet = transaction.createNewDataSet("UNDETERMINED_READS_DISTRIBUTION")
-    dataSet.setMeasuredData(False)
-    dataSet.setSample(connected_sample[0])
-    transaction.moveFile(transaction.getIncoming().getPath(), dataSet)
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/v2_register-demuliplex-stats/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/v2_register-demuliplex-stats/plugin.properties
deleted file mode 100644
index bed822d96bb..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/v2_register-demuliplex-stats/plugin.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-incoming-dir = ${incoming-root-dir}/v2_register-demuliplex-stats
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-demuliplex-stats.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-jython-version=2.7
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/v2_register-demuliplex-stats/register-demuliplex-stats.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/v2_register-demuliplex-stats/register-demuliplex-stats.py
deleted file mode 100644
index bd26425284a..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/v2_register-demuliplex-stats/register-demuliplex-stats.py
+++ /dev/null
@@ -1,78 +0,0 @@
-'''
-@copyright:
-2015 ETH Zuerich, SIS
-    
-@license: 
-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.
-
-@description:
-Registers an incoming directory as a data set in openBIS. The name of the directory is used to
-search for the matching sample. 
-
-@note: 
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-
-@author:
-Manuel Kohler
-'''
-
-import re
-import glob
-import os
-from itertools import islice
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-# The following module is located in the path defined in the datastore_server.conf
-# Look for: -Dpython.path}
-from gfb_utils import *
-
-BCL2FASTQ_BASECALLSTATS_TYPE = "BCL2FASTQ_BASECALLSTATS"
-AGGREGATED_BASECALL_STATS_TYPE = "AGGREGATED_BASECALL_STATS"
-
-def process(transaction):
-    aggregated_run = False
-    incoming = transaction.getIncoming()
-    incoming_path = incoming.getAbsolutePath()
-    run_id = incoming.getName()
-    
-    thread_property_dict = get_thread_properties(transaction)
-    absolutePath = os.path.dirname(os.path.realpath(thread_property_dict['script-path']))
-    
-    try:
-        run_date, sequencer_id, running_number, tray_and_fcId, lane = run_id.split("_")
-        dataSet = transaction.createNewDataSet(BCL2FASTQ_BASECALLSTATS_TYPE)
-        model = get_model(run_id.rsplit("_",1)[:-1][0])
-    except:
-        run_date, sequencer_id, running_number, tray_and_fcId = run_id.split("_")
-        dataSet = transaction.createNewDataSet(AGGREGATED_BASECALL_STATS_TYPE)
-        aggregated_run = True
-        model = get_model(run_id)
-        
-    print(os.path.basename(absolutePath) + ": Auto-detected Illumina model: " + model)
-    
-    tray = tray_and_fcId[0]
-    if model in [Sequencers.MISEQ]:
-        fc_id = tray_and_fcId
-    else:
-        fc_id = tray_and_fcId[1:]
-
-    if aggregated_run:
-        sample_code = fc_id
-    else:
-        sample_code = fc_id + ":" + lane
-    found_sample = search_unique_sample(transaction, sample_code)
-    search_service = transaction.getSearchService()
-    
-    dataSet.setMeasuredData(False)
-    transaction.moveFile(incoming_path, dataSet)
-    dataSet.setSample(found_sample[0])
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/v2_register-trimming/plugin.properties b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/v2_register-trimming/plugin.properties
deleted file mode 100644
index e72bf886b62..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/v2_register-trimming/plugin.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-incoming-dir = ${incoming-root-dir}/v2_register-trimming
-incoming-data-completeness-condition = marker-file
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = register-trimming.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-jython-version=2.7
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/v2_register-trimming/register-trimming.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/v2_register-trimming/register-trimming.py
deleted file mode 100644
index cabc8d9dea0..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/dss/drop-boxes/v2_register-trimming/register-trimming.py
+++ /dev/null
@@ -1,50 +0,0 @@
-'''
-@copyright:
-2015 ETH Zuerich, SIS
-    
-@license: 
-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.
-
-@note
-print statements go to: <openBIS_HOME>/datastore_server/log/startup_log.txt
-
-@author:
-Manuel Kohler
-'''
-
-# The following module is located in the path defined in the datastore_server.conf
-# Look for: -Dpython.path}
-from gfb_utils import *
-
-
-def process(transaction):
-
-    incomingPath = transaction.getIncoming().getPath()
-    incomingFolder = transaction.getIncoming().getName()
-    
-    split = incomingFolder.split("_")
-    
-    if (len(split) == 2):
-      flow_cell, flow_lane = incomingFolder.split("_")
-    elif (len(split) == 3):
-        flow_cell = "-".join([split[0], split[1]])
-        flow_lane = split[-1]
-    
-    connected_sample_code = ":".join([flow_cell, flow_lane])
-    connected_sample = search_unique_sample(transaction, connected_sample_code)
-    
-    dataSet = transaction.createNewDataSet("TRIMMING")
-    dataSet.setMeasuredData(False)
-    
-    dataSet.setSample(connected_sample[0])
-    transaction.moveFile(incomingPath, dataSet)
diff --git a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/jython-lib/gfb_utils.py b/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/jython-lib/gfb_utils.py
deleted file mode 100644
index 481b30152ea..00000000000
--- a/deep_sequencing_unit/sourceTest/core-plugins/illumina-qgf/2/jython-lib/gfb_utils.py
+++ /dev/null
@@ -1,123 +0,0 @@
-import os
-import time
-import fnmatch
-from time import *
-from datetime import *
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-
-# HISEQ_DICT = {'HISEQ_4000': 'Illumina HiSeq 4000',
-#                   'HISEQ_3000': 'Illumina HiSeq 3000',
-#                   'HISEQ_2500': 'Illumina HiSeq 2500',
-#                   'HISEQ_2000': 'Illumina HiSeq 2000',
-#                   'HISEQ_X': 'Illumina HiSeq X'
-#                   }
-# NEXTSEQ_DICT = {'NEXTSEQ_500': 'Illumina NextSeq 500'}
-# MISEQ_DICT = {'MISEQ': 'Illumina MiSeq'}
-# UNIDENTIFIED_DICT = {'UNIDENTIFIED': 'Unidentified'}
-
-# Instead of using Enum:
-class Sequencers:
-    HISEQ_4000, HISEQ_3000, HISEQ_2500, HISEQ_2000, HISEQ_X, NEXTSEQ_500, MISEQ , UNIDENTIFIED= \
-        ('Illumina HiSeq 4000','Illumina HiSeq 3000','Illumina HiSeq 2500','Illumina HiSeq 2000',
-         'Illumina HiSeq X', 'Illumina NextSeq 500', 'Illumina MiSeq', 'Unidentified')
-
-HISEQ_LIST = [Sequencers.HISEQ_2000, Sequencers.HISEQ_2500, Sequencers.HISEQ_3000, Sequencers.HISEQ_4000, Sequencers.HISEQ_X]
-
-
-def get_model(run_id):
-    """
-    Guesses the sequencer model from the run folder name
-
-    Current Naming schema for Illumina run folders, as far as I know,
-    no documentation found on this, Illumina introduced a field called
-    <InstrumentID> on the NextSeq runParameters.xml. That might be an
-    option for the future. Alternatively a combination of the fields
-    <ApplicationName> and <ApplicationVersion>.
-
-    MiSeq: 150130_M01761_0114_000000000-ACUR0
-    NextSeq: 150202_NS500318_0047_AH3KLMBGXX
-    HiSeq 2000: 130919_SN792_0281_BD2CHRACXX
-    HiSeq 2500: 150203_D00535_0052_AC66RWANXX
-    HiSeq 3000: 150724_J00121_0017_AH2VYMBBXX
-    HiSeq 4000: 150210_K00111_0013_AH2372BBXX
-    HiSeq X: 141121_ST-E00107_0356_AH00C3CCXX
-    """
-    date, machine_id, run_number, fc_string = os.path.basename(run_id).split("_")
-
-    if machine_id.startswith("NS"):
-        model = Sequencers.NEXTSEQ_500
-    elif machine_id.startswith("M"):
-        model = Sequencers.MISEQ
-    elif machine_id.startswith("D"):
-        model = Sequencers.HISEQ_2500
-    elif machine_id.startswith("SN"):
-        model = Sequencers.HISEQ_2000
-    elif machine_id.startswith("J"):
-        model = Sequencers.HISEQ_3000
-    elif machine_id.startswith("K"):
-        model = Sequencers.HISEQ_4000
-    elif machine_id.startswith("ST"):
-        model = Sequencers.HISEQ_X
-    else:
-        model = Sequencers.UNIDENTIFIED
-    return model
-
-
-def get_thread_properties(transaction):
-    threadPropertyDict = {}
-    threadProperties = transaction.getGlobalState().getThreadParameters().getThreadProperties()
-    for key in threadProperties:
-        try:
-            threadPropertyDict[key] = threadProperties.getProperty(key)
-        except:
-            pass
-    return threadPropertyDict
-
-
-def create_openbis_timestamp(file):
-    '''
-    Creates a openBIS compatible time stamp of a file time stamp
-    '''
-    mtime = os.path.getmtime(file)
-    lt = localtime(mtime)
-    tz = localtime().tm_hour - gmtime().tm_hour
-    # doing a modulo 12, as GMT has not more than 12 zones
-    # Needed if we are around midnight
-    tz %= 12
-    return (strftime("%Y-%m-%d %H:%M:%S GMT" + "%+.2d" % tz + ":00", lt))
-
-
-def create_openbis_timestamp_now():
-  '''
-  Create an openBIS conform timestamp
-  '''
-  tz=localtime()[3]-gmtime()[3]
-  d=datetime.now()
-  return d.strftime("%Y-%m-%d %H:%M:%S GMT"+"%+.2d" % tz+":00")
-
-
-def search_unique_sample(transaction, sample_code): 
-
-    search_service = transaction.getSearchService()
-    sc = SearchCriteria()
-    sc.addMatchClause(SearchCriteria.MatchClause.createAttributeMatch(SearchCriteria.MatchClauseAttribute.CODE, sample_code));
-    found_sample = search_service.searchForSamples(sc)
-    try:
-        assert found_sample.size() == 1
-    except AssertionError:
-        print (str(found_sample.size()) + ' samples found which match the criterias: '+ sample_code)
-    return found_sample
-
-
-def get_file_names(path, pattern):
-    '''
-    Gets all files matching a PATTERN in a path recursively
-    and returns the result as a list
-    '''
-    matches = []
-    for root, dirnames, filenames in os.walk(path):
-        for filename in fnmatch.filter(filenames, pattern):
-            matches.append(os.path.join(root, filename))
-    matches.sort()
-    return(matches)
-
diff --git a/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/DependencyCheckingTest.java b/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/DependencyCheckingTest.java
deleted file mode 100644
index 4bce330ab7d..00000000000
--- a/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/DependencyCheckingTest.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2011 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu;
-
-/**
- * @author Franz-Josef Elmer
- */
-public class DependencyCheckingTest extends ch.systemsx.cisd.common.test.DependencyCheckingTest
-{
-
-}
diff --git a/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/DataSetInfoExtractorTest.java b/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/DataSetInfoExtractorTest.java
deleted file mode 100644
index c14e1ec10f3..00000000000
--- a/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/DataSetInfoExtractorTest.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright 2009 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss;
-
-import java.io.File;
-import java.util.List;
-import java.util.Properties;
-
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import ch.systemsx.cisd.base.tests.AbstractFileSystemTestCase;
-import ch.systemsx.cisd.common.filesystem.FileUtilities;
-import ch.systemsx.cisd.common.logging.BufferedAppender;
-import ch.systemsx.cisd.common.logging.LogInitializer;
-import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
-import ch.systemsx.cisd.openbis.generic.shared.dto.NewProperty;
-
-/**
- * @author Franz-Josef Elmer
- */
-public class DataSetInfoExtractorTest extends AbstractFileSystemTestCase
-{
-    private BufferedAppender appender;
-
-    @BeforeMethod
-    public final void beforeMethod()
-    {
-        LogInitializer.init();
-        appender = new BufferedAppender();
-        appender.resetLogContent();
-    }
-
-    @Test
-    public void testWithSingleQuotes()
-    {
-        DataSetInfoExtractor extractor = new DataSetInfoExtractor(new Properties());
-        File configFile = new File(workingDirectory, DataSetInfoExtractor.DEFAULT_PATH_TO_CONFIG_FILE);
-        configFile.getParentFile().mkdirs();
-        FileUtilities.writeToFile(configFile, "<abc>\n  <Software Name='RTA' Version='1.4.15.0'/>\n</abc>\n");
-
-        DataSetInformation info = extractor.getDataSetInformation(workingDirectory, null);
-
-        List<NewProperty> properties = info.getDataSetProperties();
-        assertEquals(1, properties.size());
-        assertEquals(DataSetInfoExtractor.VERSION_KEY, properties.get(0).getPropertyCode());
-        assertEquals("1.4.15.0", properties.get(0).getValue());
-        // checks delegation to DefaultDataSetInfoExtractor
-        assertEquals("DataSetInfoExtractorTest", info.getSampleCode());
-    }
-
-    @Test
-    public void testWithDoubleQuotes()
-    {
-        DataSetInfoExtractor extractor = new DataSetInfoExtractor(new Properties());
-        File configFile = new File(workingDirectory, DataSetInfoExtractor.DEFAULT_PATH_TO_CONFIG_FILE);
-        configFile.getParentFile().mkdirs();
-        FileUtilities.writeToFile(configFile, "<abc>\n  <Software Name=\"RTA\" Version=\"1.4.15.0\"/>\n</abc>\n");
-
-        DataSetInformation info = extractor.getDataSetInformation(workingDirectory, null);
-
-        List<NewProperty> properties = info.getDataSetProperties();
-        assertEquals(1, properties.size());
-        assertEquals(DataSetInfoExtractor.VERSION_KEY, properties.get(0).getPropertyCode());
-        assertEquals("1.4.15.0", properties.get(0).getValue());
-    }
-
-    @Test
-    public void testWithMissingVersion()
-    {
-        DataSetInfoExtractor extractor = new DataSetInfoExtractor(new Properties());
-        File configFile = new File(workingDirectory, DataSetInfoExtractor.DEFAULT_PATH_TO_CONFIG_FILE);
-        configFile.getParentFile().mkdirs();
-        FileUtilities.writeToFile(configFile, "<abc>\n  </abc>\n");
-
-        DataSetInformation info = extractor.getDataSetInformation(workingDirectory, null);
-
-        List<NewProperty> properties = info.getDataSetProperties();
-        assertEquals(0, properties.size());
-        String logContent = appender.getLogContent();
-        assertEquals("No version found in config file 'Data/Intensities/config.xml'.", logContent);
-    }
-
-    @Test
-    public void testWithMissingConfigFile()
-    {
-        DataSetInfoExtractor extractor = new DataSetInfoExtractor(new Properties());
-
-        DataSetInformation info = extractor.getDataSetInformation(workingDirectory, null);
-
-        List<NewProperty> properties = info.getDataSetProperties();
-        assertEquals(0, properties.size());
-        String logContent = appender.getLogContent();
-        assertEquals(
-                "Config file 'Data/Intensities/config.xml' does not exists or is a directory.",
-                logContent);
-    }
-}
diff --git a/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/FlowLaneFeederTest.java b/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/FlowLaneFeederTest.java
deleted file mode 100644
index 7a94f578262..00000000000
--- a/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/FlowLaneFeederTest.java
+++ /dev/null
@@ -1,735 +0,0 @@
-/*
- * Copyright 2009 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss;
-
-import static ch.ethz.bsse.cisd.dsu.dss.FlowLaneDataSetInfoExtractor.FLOW_LANE_NUMBER_SEPARATOR;
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Properties;
-
-import org.hamcrest.BaseMatcher;
-import org.hamcrest.Description;
-import org.jmock.Expectations;
-import org.jmock.Mockery;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel;
-import ch.systemsx.cisd.base.tests.AbstractFileSystemTestCase;
-import ch.systemsx.cisd.base.utilities.OSUtilities;
-import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException;
-import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
-import ch.systemsx.cisd.common.exceptions.UserFailureException;
-import ch.systemsx.cisd.common.filesystem.FileConstants;
-import ch.systemsx.cisd.common.filesystem.FileUtilities;
-import ch.systemsx.cisd.common.logging.LogInitializer;
-import ch.systemsx.cisd.common.test.AssertionUtil;
-import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
-import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericEntityProperty;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListSampleCriteria;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleTypePropertyType;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
-import ch.systemsx.cisd.openbis.generic.shared.dto.SampleUpdatesDTO;
-import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
-import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory;
-
-/**
- * @author Franz-Josef Elmer
- */
-public class FlowLaneFeederTest extends AbstractFileSystemTestCase
-{
-    private static final String META_DATA_PREFIX = "meta-";
-
-    private static final String AFFILIATION = "fmi";
-
-    private static final String EXTERNAL_SAMPLE_NAME = "ext23";
-
-    private static final String TRANSFER_DROP_BOX = "transfer-drop-box";
-
-    private static final Sample EXAMPLE_FLOW_CELL_SAMPLE = createFlowCellSample();
-
-    private static final DataSetInformation EXAMPLE_DATA_SET_INFO = createDataSetInfo();
-
-    private static final String FLOW_LANE = "ILLUMINA_FLOW_LANE";
-
-    private static final String SAMPLE_CODE = "fc";
-
-    private static final String DROP_BOX_PREFIX = "drop-box-";
-
-    private static DataSetInformation createDataSetInfo()
-    {
-        DataSetInformation dataSetInfo = new DataSetInformation();
-        dataSetInfo.setSampleCode(SAMPLE_CODE);
-        return dataSetInfo;
-    }
-
-    private static Sample createFlowCellSample()
-    {
-        Sample sample = new Sample();
-        sample.setId(42L);
-        sample.setCode(SAMPLE_CODE);
-        return sample;
-    }
-
-    private FlowLaneFeeder flowLaneFeeder;
-
-    private Mockery context;
-
-    private IEncapsulatedOpenBISService service;
-
-    private File dropBox1;
-
-    private File dropBox2;
-
-    private File transferDropBox;
-
-    private File srfInfo;
-
-    @BeforeMethod
-    public void beforeMethod() throws Exception
-    {
-        super.setUp();
-        LogInitializer.init();
-        context = new Mockery();
-        service = context.mock(IEncapsulatedOpenBISService.class);
-        FileUtilities.deleteRecursively(workingDirectory);
-        dropBox1 = new File(workingDirectory, DROP_BOX_PREFIX + "1");
-        assertEquals(true, dropBox1.mkdirs());
-        dropBox2 = new File(workingDirectory, DROP_BOX_PREFIX + "2");
-        assertEquals(true, dropBox2.mkdirs());
-        transferDropBox = new File(workingDirectory, TRANSFER_DROP_BOX);
-        assertEquals(true, transferDropBox.mkdirs());
-        srfInfo = new File(workingDirectory, "srfInfo");
-        flowLaneFeeder = createFeeder(null);
-    }
-
-    @AfterMethod
-    public void tearDown()
-    {
-        // To following line of code should also be called at the end of each test method.
-        // Otherwise one does not known which test failed.
-        context.assertIsSatisfied();
-    }
-
-    @Test
-    public void testMissingProperty()
-    {
-        try
-        {
-            new FlowLaneFeeder(new Properties(), service);
-            fail("ConfigurationFailureException expected");
-        } catch (ConfigurationFailureException ex)
-        {
-            assertEquals("Given key '" + FlowLaneFeeder.FLOW_LANE_DROP_BOX_TEMPLATE
-                    + "' not found in properties '[]'", ex.getMessage());
-        }
-
-        context.assertIsSatisfied();
-    }
-
-    @Test
-    void testUnkownFlowLaneSample()
-    {
-        File flowCell = new File(workingDirectory, SAMPLE_CODE);
-        assertEquals(true, flowCell.mkdir());
-        FileUtilities.writeToFile(new File(flowCell, "s_3.srf"), "hello flow lane 3");
-        prepareLoadFlowCellSample(EXAMPLE_FLOW_CELL_SAMPLE);
-        prepareListFlowLanes(EXAMPLE_FLOW_CELL_SAMPLE, Arrays.<Sample> asList());
-
-        try
-        {
-            flowLaneFeeder.handle(flowCell, EXAMPLE_DATA_SET_INFO, null);
-            fail("UserFailureException expected");
-        } catch (UserFailureException ex)
-        {
-            assertEquals("No flow lane sample for flow lane 3 found.", ex.getMessage());
-        }
-
-        context.assertIsSatisfied();
-    }
-
-    @Test
-    void testMissingDropBox()
-    {
-        File flowCell = new File(workingDirectory, SAMPLE_CODE);
-        assertEquals(true, flowCell.mkdir());
-        FileUtilities.writeToFile(new File(flowCell, "s_3.srf"), "hello flow lane 3");
-        prepareLoadFlowCellSample(EXAMPLE_FLOW_CELL_SAMPLE);
-        Sample fl = createFlowLaneSample(3);
-        prepareListFlowLanes(EXAMPLE_FLOW_CELL_SAMPLE, Arrays.<Sample> asList(fl));
-
-        try
-        {
-            flowLaneFeeder.handle(flowCell, EXAMPLE_DATA_SET_INFO, null);
-            fail("ConfigurationFailureException expected");
-        } catch (ConfigurationFailureException ex)
-        {
-            AssertionUtil.assertContains(DROP_BOX_PREFIX + "3", ex.getMessage());
-        }
-
-        context.assertIsSatisfied();
-    }
-
-    @Test
-    public void testUnkownFlowCell()
-    {
-        File flowCell = new File(workingDirectory, SAMPLE_CODE);
-        prepareLoadFlowCellSample(null);
-
-        try
-        {
-            flowLaneFeeder.handle(flowCell, EXAMPLE_DATA_SET_INFO, null);
-            fail("UserFailureException expected");
-        } catch (UserFailureException ex)
-        {
-            assertEquals("Unkown flow cell sample: " + EXAMPLE_DATA_SET_INFO.getSampleIdentifier(),
-                    ex.getMessage());
-        }
-
-        context.assertIsSatisfied();
-    }
-
-    @Test
-    public void testNotEnoughFlowLaneFiles()
-    {
-        File flowCell = new File(workingDirectory, SAMPLE_CODE);
-        assertEquals(true, flowCell.mkdir());
-        File logs = new File(flowCell, "logs");
-        assertEquals(true, logs.mkdir());
-        FileUtilities.writeToFile(new File(logs, "basic.log"), "hello log");
-        File srfFolder = new File(flowCell, "SRF");
-        assertEquals(true, srfFolder.mkdir());
-        File originalFlowLane1 = new File(srfFolder, "s_1.srf");
-        FileUtilities.writeToFile(originalFlowLane1, "hello flow lane 1");
-        prepareLoadFlowCellSample(EXAMPLE_FLOW_CELL_SAMPLE);
-
-        Sample fl1 = createFlowLaneSample(1);
-        Sample fl2 = createFlowLaneSample(2);
-        prepareListFlowLanes(EXAMPLE_FLOW_CELL_SAMPLE, Arrays.asList(fl1, fl2));
-
-        try
-        {
-            flowLaneFeeder.handle(flowCell, EXAMPLE_DATA_SET_INFO, null);
-            fail("EnvironmentFailureException expected");
-        } catch (EnvironmentFailureException ex)
-        {
-            assertEquals("Only 1 flow lane files found instead of 2.", ex.getMessage());
-        }
-
-        context.assertIsSatisfied();
-    }
-
-    @Test
-    public void testFlowLaneTwice()
-    {
-        flowLaneFeeder.setUpdateDataTransferredProperty(false);
-        File flowCell = new File(workingDirectory, SAMPLE_CODE);
-        assertEquals(true, flowCell.mkdir());
-        File logs = new File(flowCell, "logs");
-        assertEquals(true, logs.mkdir());
-        FileUtilities.writeToFile(new File(logs, "basic.log"), "hello log");
-        File srfFolder = new File(flowCell, "SRF");
-        assertEquals(true, srfFolder.mkdir());
-        File originalFlowLane1 = new File(srfFolder, "s_1.srf");
-        FileUtilities.writeToFile(originalFlowLane1, "hello flow lane 1");
-        File originalFlowLane2 = new File(srfFolder, "1.srf");
-        FileUtilities.writeToFile(originalFlowLane2, "hello second flow lane 1");
-        prepareLoadFlowCellSample(EXAMPLE_FLOW_CELL_SAMPLE);
-        Sample fl1 = createFlowLaneSample(1);
-        Sample fl2 = createFlowLaneSample(1);
-        prepareListFlowLanes(EXAMPLE_FLOW_CELL_SAMPLE, Arrays.asList(fl1, fl2));
-        prepareGetProperties(Arrays.asList(fl1));
-
-        try
-        {
-            flowLaneFeeder.handle(flowCell, EXAMPLE_DATA_SET_INFO, null);
-            fail("UserFailureException expected");
-        } catch (UserFailureException ex)
-        {
-            assertEquals("Flow lane 1 already registered.", ex.getMessage());
-        }
-
-        context.assertIsSatisfied();
-    }
-
-    @Test
-    public void testHappyCase()
-    {
-        flowLaneFeeder.setUpdateDataTransferredProperty(true);
-        File flowCell = new File(workingDirectory, SAMPLE_CODE);
-        assertEquals(true, flowCell.mkdir());
-        File logs = new File(flowCell, "logs");
-        assertEquals(true, logs.mkdir());
-        FileUtilities.writeToFile(new File(logs, "basic.log"), "hello log");
-        File srfFolder = new File(flowCell, "SRF");
-        assertEquals(true, srfFolder.mkdir());
-        File originalFlowLane1 = new File(srfFolder, "s_1.srf");
-        FileUtilities.writeToFile(originalFlowLane1, "hello flow lane 1");
-        File originalFlowLane2 = new File(srfFolder, "2.srf");
-        FileUtilities.writeToFile(originalFlowLane2, "hello flow lane 2");
-        File srf_info_file = new File(srfFolder, "srf_info.txt");
-        FileUtilities.writeToFile(srf_info_file,
-                "Reading archive ETHZ_BSSE_100602_61VVHAAXX_1.srf.\n"
-                        + "Reading srf null index block\n" + "Reads: GOOD : 20712959\n"
-                        + "Reads: BAD : 7270034\n" + "Reads: TOTAL : 27982993");
-        prepareLoadFlowCellSample(EXAMPLE_FLOW_CELL_SAMPLE);
-
-        SampleTypePropertyType p1 = createPropertyType("P1");
-        SampleTypePropertyType p2 = createPropertyType("P2");
-        SampleTypePropertyType p3 = createPropertyType("DATA_TRANSFERRED");
-        IEntityProperty fl1p1v = new GenericEntityProperty();
-        fl1p1v.setPropertyType(p1.getPropertyType());
-        fl1p1v.setValue("v1");
-        IEntityProperty fl2p2v = new GenericEntityProperty();
-        fl2p2v.setPropertyType(p2.getPropertyType());
-        fl2p2v.setValue("v2");
-
-        Sample fl1 = createFlowLaneSample(1, fl1p1v);
-        Sample fl2 = createFlowLaneSample(2, fl2p2v);
-        prepareListFlowLanes(EXAMPLE_FLOW_CELL_SAMPLE, Arrays.asList(fl1, fl2));
-        prepareGetProperties(Arrays.asList(fl1, fl2));
-
-        prepareGetSampleType(FLOW_LANE, p1, p2, p3);
-        prepareUpdateSamples(fl1, fl2);
-
-        flowLaneFeeder.handle(flowCell, EXAMPLE_DATA_SET_INFO, null);
-
-        checkFlowLaneDataSet(originalFlowLane1, "1");
-        checkFlowLaneDataSet(originalFlowLane2, "2");
-
-        File[] transferedFiles = transferDropBox.listFiles();
-        Arrays.sort(transferedFiles);
-        assertEquals(2, transferedFiles.length);
-        assertEquals("2.srf", transferedFiles[0].getName());
-        File metaFile = transferedFiles[1];
-        assertEquals(META_DATA_PREFIX + SAMPLE_CODE + "_2" + FlowLaneFeeder.META_DATA_FILE_TYPE,
-                metaFile.getName());
-        assertHardLinkOnSameFile(originalFlowLane2, transferedFiles[0]);
-
-        context.assertIsSatisfied();
-    }
-
-    private void prepareUpdateSamples(final Sample... samples)
-    {
-        context.checking(new Expectations()
-            {
-                {
-                    allowing(service).updateSample(with(new BaseMatcher<SampleUpdatesDTO>()
-                        {
-                            @Override
-                            public boolean matches(Object item)
-                            {
-                                if (item instanceof SampleUpdatesDTO)
-                                {
-                                    SampleUpdatesDTO sampleUpdate = (SampleUpdatesDTO) item;
-                                    Long updateId = sampleUpdate.getSampleIdOrNull().getId();
-                                    boolean found = false;
-                                    for (Sample s : samples)
-                                    {
-                                        if (s.getId().equals(updateId))
-                                        {
-                                            found = true;
-                                            assertEquals(s.getId(), sampleUpdate
-                                                    .getSampleIdOrNull().getId());
-                                            assertEquals(0, sampleUpdate.getAttachments().size());
-                                            assertEquals(null,
-                                                    sampleUpdate.getContainerIdentifierOrNull());
-                                            assertEquals(null,
-                                                    sampleUpdate.getExperimentIdentifierOrNull());
-                                            assertEquals(s.getIdentifier(), sampleUpdate
-                                                    .getSampleIdentifier().toString());
-                                            List<IEntityProperty> properties =
-                                                    sampleUpdate.getProperties();
-                                            assertEquals(s.getProperties().size() + 1,
-                                                    properties.size());
-                                            assertEquals("DATA_TRANSFERRED",
-                                                    properties.get(properties.size() - 1)
-                                                            .getPropertyType().getCode());
-                                            break;
-                                        }
-                                    }
-                                    if (found == false)
-                                    {
-                                        fail("Didn't expect update of sample with id " + updateId);
-                                    }
-                                    return true;
-                                }
-                                return false;
-                            }
-
-                            @Override
-                            public void describeTo(Description description)
-                            {
-                            }
-                        }));
-                }
-            });
-    }
-
-    private void prepareGetSampleType(final String sampleTypeCode,
-            final SampleTypePropertyType... sampleTypePropertyTypes)
-    {
-        context.checking(new Expectations()
-            {
-                {
-                    allowing(service).getSampleType(sampleTypeCode);
-                    SampleType sampleType = new SampleType();
-                    sampleType.setCode(sampleTypeCode);
-                    sampleType.setSampleTypePropertyTypes(Arrays.asList(sampleTypePropertyTypes));
-                    will(returnValue(sampleType));
-                }
-            });
-    }
-
-    private static SampleTypePropertyType createPropertyType(String key)
-    {
-        SampleTypePropertyType stpt = new SampleTypePropertyType();
-        stpt.setMandatory(false);
-        PropertyType propertyType = new PropertyType();
-        propertyType.setCode(key);
-        stpt.setPropertyType(propertyType);
-        return stpt;
-    }
-
-    @Test
-    public void testHappyCaseWithSRFInfo()
-    {
-        flowLaneFeeder = createFeeder("echo option: $1\necho file: $2");
-        flowLaneFeeder.setUpdateDataTransferredProperty(false);
-
-        File flowCell = new File(workingDirectory, SAMPLE_CODE);
-        assertEquals(true, flowCell.mkdir());
-        File logs = new File(flowCell, "logs");
-        assertEquals(true, logs.mkdir());
-        FileUtilities.writeToFile(new File(logs, "basic.log"), "hello log");
-        File srfFolder = new File(flowCell, "SRF");
-        assertEquals(true, srfFolder.mkdir());
-        File originalFlowLane1 = new File(srfFolder, "s_1.srf");
-        FileUtilities.writeToFile(originalFlowLane1, "hello flow lane 1");
-        File originalFlowLane2 = new File(srfFolder, "2.srf");
-        FileUtilities.writeToFile(originalFlowLane2, "hello flow lane 2");
-        File srf_info_file = new File(srfFolder, "srf_info.txt");
-        FileUtilities.writeToFile(srf_info_file,
-                "Reading archive ETHZ_BSSE_100602_61VVHAAXX_1.srf.\n"
-                        + "Reading srf null index block\n" + "Reads: GOOD : 20712959\n"
-                        + "Reads: BAD : 7270034\n" + "Reads: TOTAL : 27982993");
-        prepareLoadFlowCellSample(EXAMPLE_FLOW_CELL_SAMPLE);
-
-        Sample fl1 = createFlowLaneSample(1);
-        Sample fl2 = createFlowLaneSample(2);
-        prepareListFlowLanes(EXAMPLE_FLOW_CELL_SAMPLE, Arrays.asList(fl1, fl2));
-        prepareGetProperties(Arrays.asList(fl1, fl2));
-
-        flowLaneFeeder.handle(flowCell, EXAMPLE_DATA_SET_INFO, null);
-
-        checkFlowLaneDataSet(originalFlowLane1, "1");
-        checkFlowLaneDataSet(originalFlowLane2, "2");
-
-        File[] transferedFiles = transferDropBox.listFiles();
-        Arrays.sort(transferedFiles);
-        assertEquals(2, transferedFiles.length);
-        assertEquals("2.srf", transferedFiles[0].getName());
-        File metaFile = transferedFiles[1];
-        assertEquals(META_DATA_PREFIX + SAMPLE_CODE + "_2" + FlowLaneFeeder.META_DATA_FILE_TYPE,
-                metaFile.getName());
-        List<String> metaData = FileUtilities.loadToStringList(metaFile);
-        String lastLine = metaData.remove(metaData.size() - 1);
-        assertEquals("[Parent\tnull, Code\tfc:2, Contact Person Email\tab@c.de, "
-                + "AFFILIATION\tfmi, EXTERNAL_SAMPLE_NAME\text23, , "
-                + "==== SRF Info ====\t, option: -l1\t]", metaData.toString());
-        AssertionUtil.assertContains("file: ", lastLine);
-        assertEquals(8, metaData.size());
-        assertHardLinkOnSameFile(originalFlowLane2, transferedFiles[0]);
-
-        context.assertIsSatisfied();
-    }
-
-    @Test
-    public void testHappyCaseWithAdditionalFiles()
-    {
-        flowLaneFeeder.setUpdateDataTransferredProperty(false);
-        File flowCell = new File(workingDirectory, SAMPLE_CODE);
-        assertEquals(true, flowCell.mkdir());
-        File logs = new File(flowCell, "logs");
-        assertEquals(true, logs.mkdir());
-        FileUtilities.writeToFile(new File(logs, "basic.log"), "hello log");
-        File srfFolder = new File(flowCell, "SRF");
-        assertEquals(true, srfFolder.mkdir());
-        File originalFlowLane1 = new File(srfFolder, "s_1.srf");
-        File originalFlowLane1Fastq = new File(srfFolder, "s_1.fastq");
-        FileUtilities.writeToFile(originalFlowLane1, "hello flow lane 1");
-        FileUtilities.writeToFile(originalFlowLane1Fastq, "fastq");
-        File originalFlowLane2 = new File(srfFolder, "2.srf");
-        File originalFlowLane2Fasta = new File(srfFolder, "2.fasta");
-        File originalFlowLane2Pdf = new File(srfFolder, "2_boxplot.pdf");
-        File originalFlowLane2Xxx = new File(srfFolder, "2abc.xxx");
-        FileUtilities.writeToFile(originalFlowLane2, "hello flow lane 2");
-        FileUtilities.writeToFile(originalFlowLane2Fasta, "fasta");
-        FileUtilities.writeToFile(originalFlowLane2Pdf, "pdf");
-        FileUtilities.writeToFile(originalFlowLane2Xxx, "xxx");
-        File originalFlowLane2Dir = new File(srfFolder, "2dir");
-        assertEquals(true, originalFlowLane2Dir.mkdir());
-        File internalDirFile1 = new File(originalFlowLane2Dir, "file1");
-        File internalDirFile2 = new File(originalFlowLane2Dir, "file2");
-        FileUtilities.writeToFile(internalDirFile1, "internal 1");
-        FileUtilities.writeToFile(internalDirFile2, "internal 2");
-        File srf_info_file = new File(srfFolder, "srf_info.txt");
-        FileUtilities.writeToFile(srf_info_file,
-                "Reading archive ETHZ_BSSE_100602_61VVHAAXX_1.srf.\n"
-                        + "Reading srf null index block\n" + "Reads: GOOD : 20712959\n"
-                        + "Reads: BAD : 7270034\n" + "Reads: TOTAL : 27982993");
-        prepareLoadFlowCellSample(EXAMPLE_FLOW_CELL_SAMPLE);
-
-        Sample fl1 = createFlowLaneSample(1);
-        Sample fl2 = createFlowLaneSample(2);
-        prepareListFlowLanes(EXAMPLE_FLOW_CELL_SAMPLE, Arrays.asList(fl1, fl2));
-        prepareGetProperties(Arrays.asList(fl1, fl2));
-
-        flowLaneFeeder.handle(flowCell, EXAMPLE_DATA_SET_INFO, null);
-
-        checkFlowLaneDataSet(originalFlowLane1, "1");
-        checkFlowLaneDataSet(originalFlowLane2, "2");
-
-        File[] transferedFiles = transferDropBox.listFiles();
-        Arrays.sort(transferedFiles);
-        assertEquals(2, transferedFiles.length);
-        assertEquals("2.srf", transferedFiles[0].getName());
-        File metaFile = transferedFiles[1];
-        assertEquals(META_DATA_PREFIX + SAMPLE_CODE + "_2" + FlowLaneFeeder.META_DATA_FILE_TYPE,
-                metaFile.getName());
-        assertHardLinkOnSameFile(originalFlowLane2, transferedFiles[0]);
-
-        context.assertIsSatisfied();
-    }
-
-    @Test
-    public void testInvalidSRFFile()
-    {
-        flowLaneFeeder = createFeeder("exit 1");
-        flowLaneFeeder.setUpdateDataTransferredProperty(false);
-        File flowCell = new File(workingDirectory, SAMPLE_CODE);
-        assertEquals(true, flowCell.mkdir());
-        File originalFlowLane1 = new File(flowCell, "s_1.srf");
-        FileUtilities.writeToFile(originalFlowLane1, "hello flow lane 1");
-        prepareLoadFlowCellSample(EXAMPLE_FLOW_CELL_SAMPLE);
-
-        Sample fl1 = createFlowLaneSample(1);
-        prepareListFlowLanes(EXAMPLE_FLOW_CELL_SAMPLE, Arrays.asList(fl1));
-
-        try
-        {
-            flowLaneFeeder.handle(flowCell, EXAMPLE_DATA_SET_INFO, null);
-            fail("UserFailureException expected");
-        } catch (UserFailureException ex)
-        {
-            AssertionUtil.assertContains("Invalid SRF file", ex.getMessage());
-            AssertionUtil.assertContains("s_1.srf", ex.getMessage());
-        }
-
-        context.assertIsSatisfied();
-    }
-
-    @Test
-    public void testUndoLastOperation()
-    {
-        testHappyCase();
-        assertEquals(2, dropBox1.list().length);
-        assertEquals(2, dropBox2.list().length);
-        assertEquals(2, transferDropBox.list().length);
-
-        flowLaneFeeder.undoLastOperation();
-
-        assertEquals(0, dropBox1.list().length);
-        assertEquals(0, dropBox2.list().length);
-        assertEquals(0, transferDropBox.list().length);
-    }
-
-    private void prepareLoadFlowCellSample(final Sample flowCellSample)
-    {
-        context.checking(new Expectations()
-            {
-                {
-                    one(service).tryGetSampleWithExperiment(
-                            EXAMPLE_DATA_SET_INFO.getSampleIdentifier());
-                    will(returnValue(flowCellSample));
-                }
-            });
-    }
-
-    private void prepareListFlowLanes(final Sample flowCellSample,
-            final List<Sample> flowLaneSamples)
-    {
-        context.checking(new Expectations()
-            {
-                {
-                    one(service).listSamples(with(new BaseMatcher<ListSampleCriteria>()
-                        {
-
-                            @Override
-                            public boolean matches(Object item)
-                            {
-                                if (item instanceof ListSampleCriteria)
-                                {
-                                    ListSampleCriteria criteria = (ListSampleCriteria) item;
-                                    return criteria.getContainerSampleIds().iterator().next()
-                                            .equals(flowCellSample.getId());
-                                }
-                                return false;
-                            }
-
-                            @Override
-                            public void describeTo(Description description)
-                            {
-                                description.appendText("Flow cell with ID "
-                                        + flowCellSample.getId());
-                            }
-                        }));
-                    will(returnValue(flowLaneSamples));
-                }
-            });
-    }
-
-    private void prepareGetProperties(final List<Sample> flowLaneSamples)
-    {
-        context.checking(new Expectations()
-            {
-                {
-                    for (Sample sample : flowLaneSamples)
-                    {
-                        SampleIdentifier identifier =
-                                SampleIdentifierFactory.parse(sample.getIdentifier());
-                        one(service).tryGetPropertiesOfTopSample(identifier);
-                        if (sample.getSubCode().equals("2"))
-                        {
-                            GenericEntityProperty p1 =
-                                    createProperty(FlowLaneFeeder.AFFILIATION_KEY, AFFILIATION);
-                            GenericEntityProperty p2 =
-                                    createProperty(FlowLaneFeeder.EXTERNAL_SAMPLE_NAME_KEY,
-                                            EXTERNAL_SAMPLE_NAME);
-                            will(returnValue(new GenericEntityProperty[]
-                            { p1, p2 }));
-                        }
-                    }
-                }
-
-                private GenericEntityProperty createProperty(String key, String value)
-                {
-                    GenericEntityProperty p = new GenericEntityProperty();
-                    p.setValue(FlowLaneFeeder.escapeSampleCode(value));
-                    PropertyType propertyType = new PropertyType();
-                    propertyType.setCode(FlowLaneFeeder.escapeSampleCode(key));
-                    propertyType.setLabel(FlowLaneFeeder.escapeSampleCode(key).toLowerCase());
-                    p.setPropertyType(propertyType);
-                    return p;
-                }
-            });
-    }
-
-    private void checkFlowLaneDataSet(File originalFlowLane, String flowLaneNumber)
-    {
-        File dropBox =
-                new File(workingDirectory, DROP_BOX_PREFIX
-                        + FlowLaneFeeder.escapeSampleCode(flowLaneNumber));
-        String fileName =
-                "G" + FlowLaneFeeder.escapeSampleCode(flowLaneNumber)
-                        + FlowLaneFeeder.DEFAULT_ENTITY_SEPARATOR + SAMPLE_CODE
-                        + FLOW_LANE_NUMBER_SEPARATOR
-                        + FlowLaneFeeder.escapeSampleCode(flowLaneNumber);
-        File ds = new File(dropBox, FlowLaneFeeder.escapeSampleCode(fileName));
-        assertEquals(true, ds.isDirectory());
-
-        File flowLane = new File(ds, originalFlowLane.getName());
-        assertEquals(true, flowLane.isFile());
-        assertEquals(FileUtilities.loadToString(originalFlowLane),
-                FileUtilities.loadToString(flowLane));
-        assertHardLinkOnSameFile(originalFlowLane, flowLane);
-        String metaDataFileName =
-                META_DATA_PREFIX
-                        + (SAMPLE_CODE + "_" + FlowLaneFeeder.escapeSampleCode(flowLaneNumber))
-                        + FlowLaneFeeder.META_DATA_FILE_TYPE;
-        assertEquals(true, new File(ds, FlowLaneFeeder.escapeSampleCode(metaDataFileName)).exists());
-        assertEquals(
-                true,
-                new File(dropBox, FileConstants.IS_FINISHED_PREFIX
-                        + FlowLaneFeeder.escapeSampleCode(fileName)).exists());
-    }
-
-    private void assertHardLinkOnSameFile(File file1, File file2)
-    {
-        // check hard-link copy by changing last-modified date of one file should change
-        // last-modified date of the other file.
-        file1.setLastModified(4711000);
-        assertEquals(4711000, file2.lastModified());
-    }
-
-    private Sample createFlowLaneSample(int flowLaneNumber, IEntityProperty... properties)
-    {
-        Sample sample = new Sample();
-        sample.setId((long) flowLaneNumber);
-        sample.setCode(SAMPLE_CODE + ":" + flowLaneNumber);
-        Space space = new Space();
-        space.setCode("G" + flowLaneNumber);
-        sample.setSpace(space);
-        sample.setSubCode(Integer.toString(flowLaneNumber));
-        sample.setGeneratedFrom(EXAMPLE_FLOW_CELL_SAMPLE);
-        Person registrator = new Person();
-        registrator.setEmail("ab@c.de");
-        sample.setRegistrator(registrator);
-        sample.setIdentifier(SAMPLE_CODE + ":" + flowLaneNumber);
-        SampleType type = new SampleType();
-        type.setCode(FLOW_LANE);
-        sample.setSampleType(type);
-        sample.setProperties(Arrays.asList(properties));
-        return sample;
-    }
-
-    private FlowLaneFeeder createFeeder(String srfInfoScriptOrNull)
-    {
-        Properties properties = new Properties();
-        properties.setProperty(FlowLaneFeeder.FLOW_LANE_DROP_BOX_TEMPLATE, new File(
-                workingDirectory, DROP_BOX_PREFIX).getAbsolutePath() + "{0}");
-        properties.setProperty(FlowLaneFeeder.META_DATA_FILE_PREFIX, META_DATA_PREFIX);
-        properties.setProperty(FlowLaneFeeder.TRANSFER_PREFIX + AFFILIATION,
-                transferDropBox.getAbsolutePath());
-        if (srfInfoScriptOrNull != null)
-        {
-            properties.setProperty(FlowLaneFeeder.SRF_INFO_PATH, srfInfo.getAbsolutePath());
-            FileUtilities.writeToFile(srfInfo, srfInfoScriptOrNull);
-            File chmod = OSUtilities.findExecutable("chmod");
-            assertNotNull(chmod);
-            try
-            {
-                String cmd = chmod.getAbsolutePath() + " +x " + srfInfo.getAbsolutePath();
-                Runtime.getRuntime().exec(cmd).waitFor();
-            } catch (Exception ex)
-            {
-                throw CheckedExceptionTunnel.wrapIfNecessary(ex);
-            }
-        }
-        return new FlowLaneFeeder(properties, service);
-    }
-
-}
diff --git a/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/plugins/.gitignore b/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/plugins/.gitignore
deleted file mode 100644
index c08e0e25cf3..00000000000
--- a/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/plugins/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/IlluminaSummaryXMLLoaderTestSpeed.java
diff --git a/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/plugins/DataSetToSOFTTest.java b/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/plugins/DataSetToSOFTTest.java
deleted file mode 100644
index 7967dde169c..00000000000
--- a/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/plugins/DataSetToSOFTTest.java
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss.plugins;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Properties;
-
-import javax.activation.DataHandler;
-import javax.activation.DataSource;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.log4j.Level;
-import org.hamcrest.core.IsNull;
-import org.jmock.Expectations;
-import org.jmock.Mockery;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import ch.rinn.restrictions.Friend;
-import ch.systemsx.cisd.base.tests.AbstractFileSystemTestCase;
-import ch.systemsx.cisd.common.filesystem.FileUtilities;
-import ch.systemsx.cisd.common.logging.BufferedAppender;
-import ch.systemsx.cisd.common.mail.EMailAddress;
-import ch.systemsx.cisd.common.mail.IMailClient;
-import ch.systemsx.cisd.common.string.Template;
-import ch.systemsx.cisd.common.test.RecordingMatcher;
-import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.MockDataSetDirectoryProvider;
-import ch.systemsx.cisd.openbis.dss.generic.shared.DataSetProcessingContext;
-import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
-import ch.systemsx.cisd.openbis.dss.generic.shared.IProcessingPluginTask;
-import ch.systemsx.cisd.openbis.dss.generic.shared.ProcessingStatus;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PhysicalDataSet;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityProperty;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListSampleCriteria;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
-import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription;
-import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory;
-
-/**
- * @author Franz-Josef Elmer
- * @param <workingDirectory>
- */
-@Friend(toClasses = DataSetToSOFT.class)
-public class DataSetToSOFTTest<workingDirectory> extends AbstractFileSystemTestCase
-{
-    private static final String SHARE_ID = "42";
-
-    private static final String USER_EMAIL = "user@ho.me";
-
-    private static final String USER_ID = "test-user";
-
-    private static final String SRF_FILE_NAME = "sample.srf";
-
-    private static final String SRF_FILE_CONTENT = "hello world!";
-
-    private static final String DATASET_CODE = "ds-1";
-
-    private static final String FLOW_LANE_SAMPLE_CODE = "flow-lane:1";
-
-    private BufferedAppender logRecorder;
-
-    private Mockery context;
-
-    private IEncapsulatedOpenBISService service;
-
-    private IMailClient mailClient;
-
-    private DataSetProcessingContext dataSetProcessingContext;
-
-    private IProcessingPluginTask processingPlugin;
-
-    @BeforeMethod
-    public void beforeMethod()
-    {
-        logRecorder = new BufferedAppender("%-5p %c - %m%n", Level.DEBUG);
-        context = new Mockery();
-        service = context.mock(IEncapsulatedOpenBISService.class);
-        mailClient = context.mock(IMailClient.class);
-        dataSetProcessingContext =
-                new DataSetProcessingContext(null, new MockDataSetDirectoryProvider(
-                        workingDirectory, SHARE_ID), new HashMap<String, String>(), mailClient,
-                        USER_ID, USER_EMAIL);
-        File testFolder = new File(new File(workingDirectory, SHARE_ID), "test");
-        testFolder.mkdirs();
-        File sampleSrfFile = new File(testFolder, SRF_FILE_NAME);
-        FileUtilities.writeToFile(sampleSrfFile, SRF_FILE_CONTENT);
-        processingPlugin = createProcessingPlugin(workingDirectory, service);
-    }
-
-    private static IProcessingPluginTask createProcessingPlugin(File workingDirectory,
-            IEncapsulatedOpenBISService service)
-    {
-        DataSetToSOFT plugin = new DataSetToSOFT(new Properties(), workingDirectory);
-        plugin.setService(service);
-        return plugin;
-    }
-
-    @AfterMethod
-    public void afterMethod()
-    {
-        logRecorder.reset();
-        // To following line of code should also be called at the end of each test method.
-        // Otherwise one do not known which test failed.
-        context.assertIsSatisfied();
-    }
-
-    @Test
-    public void test() throws IOException
-    {
-        DatasetDescription datasetDescription = new DatasetDescription();
-        datasetDescription.setDataSetCode(DATASET_CODE);
-        datasetDescription.setDataSetLocation(".");
-        List<DatasetDescription> dataSets = Arrays.asList(datasetDescription);
-        final Sample flowLaneSample = sample(42, FLOW_LANE_SAMPLE_CODE);
-        flowLaneSample.setCode(FLOW_LANE_SAMPLE_CODE);
-        prepareGetDataSet(DATASET_CODE, flowLaneSample);
-        Sample flowCellSample = sample(43, "flow-cell");
-        addProperty(flowCellSample, "GENOME_ANALYZER", "my-analyzer");
-        final Sample sequencingSample = sample(44, "sequencing");
-        addProperty(sequencingSample, DataSetToSOFT.EXTERNAL_SAMPLE_NAME_PROPERTY, "my sample");
-        addProperty(sequencingSample, "SAMPLE_SOURCE_NAME", "source");
-        addProperty(sequencingSample, "NCBI_ORGANISM_TAXONOMY", "organism");
-        addProperty(sequencingSample, "CONTACT_PERSON_NAME", "person");
-        addProperty(sequencingSample, "SAMPLE_MOLECULE", "total_rna");
-        addProperty(sequencingSample, "SEQUENCING_APPLICATION", "application");
-        addProperty(sequencingSample, "SAMPLE_EXTRACT_PROTOCOL", "protocol");
-        addProperty(sequencingSample, "SAMPLE_DATA_PROCESSING", "processing");
-        addProperty(sequencingSample, "SAMPLE_LIBRARY_SELECTION", "cDNA");
-        addProperty(sequencingSample, "SAMPLE_LIBRARY_STRATEGY", "RNA-Seq");
-        addProperty(sequencingSample, "SAMPLE_KIND", "CHIP");
-        flowLaneSample.setContainer(flowCellSample);
-        prepareGetSample(flowLaneSample);
-        prepareGetSample(flowCellSample);
-        final RecordingMatcher<ListSampleCriteria> listSampleCriteriaMatcher =
-                new RecordingMatcher<ListSampleCriteria>();
-        final RecordingMatcher<String> subjectMatcher = new RecordingMatcher<String>();
-        final RecordingMatcher<String> contentMatcher = new RecordingMatcher<String>();
-        final RecordingMatcher<String> fileNameMatcher = new RecordingMatcher<String>();
-        final RecordingMatcher<DataHandler> attachmentMatcher = new RecordingMatcher<DataHandler>();
-        final RecordingMatcher<EMailAddress[]> addressesMatcher =
-                new RecordingMatcher<EMailAddress[]>();
-        context.checking(new Expectations()
-            {
-                {
-                    one(service).listSamples(with(listSampleCriteriaMatcher));
-                    will(returnValue(Arrays.asList(sequencingSample)));
-
-                    one(mailClient).sendEmailMessageWithAttachment(with(subjectMatcher),
-                            with(contentMatcher), with(fileNameMatcher), with(attachmentMatcher),
-                            with(new IsNull<EMailAddress>()), with(new IsNull<EMailAddress>()),
-                            with(addressesMatcher));
-                }
-            });
-
-        ProcessingStatus status = processingPlugin.process(dataSets, dataSetProcessingContext);
-
-        assertEquals(0, status.getErrorStatuses().size());
-        assertEquals(flowLaneSample.getId(), listSampleCriteriaMatcher.recordedObject()
-                .getChildSampleId().getId());
-        Template template = initTemplate(DataSetToSOFT.E_MAIL_SUBJECT_TEMPLATE);
-        assertEquals(template.createText(), subjectMatcher.recordedObject());
-        Template content = initTemplate(DataSetToSOFT.E_MAIL_CONTENT_TEMPLATE);
-        content.bind("flow-lane", flowLaneSample.getCode());
-        content.bind("data-set", DATASET_CODE);
-        assertEquals(content.createText(), contentMatcher.recordedObject());
-        Template fileNameTemplate = DataSetToSOFT.SOFT_FILE_NAME_TEMPLATE.createFreshCopy();
-        fileNameTemplate.bind("external-sample-name", "my_sample");
-        fileNameTemplate.bind("flow-lane", flowLaneSample.getCode().replace(':', '-'));
-        assertEquals(fileNameTemplate.createText(), fileNameMatcher.recordedObject());
-        assertEquals(USER_EMAIL, addressesMatcher.recordedObject()[0].tryGetEmailAddress());
-        DataSource dataSource = attachmentMatcher.recordedObject().getDataSource();
-        String attachmentContent = getContent(dataSource);
-        assertEquals("^SAMPLE = my sample\n" + "!Sample_type = SRA\n"
-                + "!Sample_title = my sample\n" + "!Sample_source_name = source\n"
-                + "!Sample_organism = organism\n"
-                + "!Sample_characteristics = <<<NEED_TO_BE_FILLED>>>\n"
-                + "!Sample_biomaterial_provider = person\n" + "!Sample_molecule = total_rna\n"
-                + "!Sample_extract_protocol = protocol\n"
-                + "!Sample_data_processing = processing\n" + "!Sample_library_strategy = RNA-Seq\n"
-                + "!Sample_library_source = genomic\n" + "!Sample_library_selection = cDNA\n"
-                + "!Sample_instrument_model = my-analyzer\n" + "!Sample_raw_file_1 = sample.srf\n"
-                + "!Sample_raw_file_type_1 = srf\n"
-                + "!Sample_file_checksum_1 = fc3ff98e8c6a0d3087d515c0473f8677\n", attachmentContent);
-        context.assertIsSatisfied();
-    }
-
-    String getContent(DataSource dataSource) throws IOException
-    {
-        StringBuilder builder = new StringBuilder();
-        @SuppressWarnings("rawtypes")
-        List fileLines = IOUtils.readLines(dataSource.getInputStream());
-        for (Object object : fileLines)
-        {
-            builder.append(object).append('\n');
-        }
-        return builder.toString();
-    }
-
-    Template initTemplate(Template originalTemplate)
-    {
-        Template template = originalTemplate.createFreshCopy();
-        template.bind("external-sample-name", "my sample");
-        return template;
-    }
-
-    private void prepareGetDataSet(final String dataSetCode, final Sample flowLaneSample)
-    {
-        context.checking(new Expectations()
-            {
-                {
-                    one(service).tryGetDataSet(dataSetCode);
-                    PhysicalDataSet dataSet = new PhysicalDataSet();
-                    dataSet.setCode(dataSetCode);
-                    dataSet.setSample(flowLaneSample);
-                    will(returnValue(dataSet));
-                }
-            });
-    }
-
-    private void prepareGetSample(final Sample sample)
-    {
-        context.checking(new Expectations()
-            {
-                {
-                    one(service).tryGetSampleWithExperiment(
-                            SampleIdentifierFactory.parse(sample.getIdentifier()));
-                    will(returnValue(sample));
-                }
-            });
-    }
-
-    private void addProperty(Sample sample, String propertyTypeCode, String value)
-    {
-        List<IEntityProperty> properties = sample.getProperties();
-        if (properties == null)
-        {
-            properties = new ArrayList<IEntityProperty>();
-            sample.setProperties(properties);
-        }
-        EntityProperty property = new EntityProperty();
-        PropertyType propertyType = new PropertyType();
-        propertyType.setCode(propertyTypeCode);
-        property.setPropertyType(propertyType);
-        property.setValue(value);
-        properties.add(property);
-    }
-
-    private Sample sample(long id, String identifier)
-    {
-        Sample sample = new Sample();
-        sample.setId(id);
-        sample.setIdentifier(identifier);
-        return sample;
-    }
-}
diff --git a/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummaryXMLLoaderTest.java b/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummaryXMLLoaderTest.java
deleted file mode 100644
index 7624171f0a9..00000000000
--- a/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummaryXMLLoaderTest.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright 2009 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss.plugins;
-
-import java.io.File;
-
-import org.testng.annotations.Test;
-
-import ch.systemsx.cisd.base.tests.AbstractFileSystemTestCase;
-import ch.systemsx.cisd.common.filesystem.FileUtilities;
-
-/**
- * @author Franz-Josef Elmer
- */
-public class IlluminaSummaryXMLLoaderTest extends AbstractFileSystemTestCase
-{
-    @Test
-    public void test()
-    {
-        File file = new File(workingDirectory, "test.xml");
-        FileUtilities.writeToFile(file, EXAMPLE);
-        IlluminaSummary summary =
-                IlluminaSummaryReportingPlugin.IlluminaSummaryXMLLoader.readSummaryXML(file);
-
-        ChipResultsSummary chipResultsSummary = summary.getChipResultsSummary();
-        LaneResultsSummary laneResultsSummary = summary.getLaneResultsSummary();
-        assertEquals(Long.valueOf(98792458L), chipResultsSummary.getClusterCountPF());
-        assertEquals(Long.valueOf(158466917L), chipResultsSummary.getClusterCountRaw());
-        assertEquals(Long.valueOf(3556528488L), chipResultsSummary.getYield());
-        // if not there yhen take the init value
-        assertEquals(Double.valueOf(0.0), chipResultsSummary.getDensityRatio());
-
-        assertEquals(Long.valueOf(381287L), laneResultsSummary.getRead().getLanes().get(0)
-                .getClusterCountRaw().getMean());
-        assertEquals(Long.valueOf(277736L), laneResultsSummary.getRead().getLanes().get(0)
-                .getClusterCountPF().getMean());
-        assertEquals(Long.valueOf(1199819L), laneResultsSummary.getRead().getLanes().get(0)
-                .getLaneYield());
-        assertEquals(Double.valueOf(79.37), laneResultsSummary.getRead().getLanes().get(0)
-                .getPercentUniquelyAlignedPF().getMean());
-
-        if (summary.getSoftware() == "")
-        {
-            assertEquals("", summary.getSoftware());
-        } else
-        {
-            assertEquals("CASAVA-1.6.0", summary.getSoftware());
-        }
-    }
-
-    /**
-     *
-     */
-    protected static final String EXAMPLE = "<?xml version='1.0' ?>\n               "
-            + "<?xml-stylesheet type='text/xsl' href='Summary.xsl' ?>\n             "
-            + "<Summary>                                                            "
-            + "  <ChipResultsSummary>                                               "
-            + "    <clusterCountPF>98792458</clusterCountPF>                        "
-            + "    <clusterCountRaw>158466917</clusterCountRaw>                     "
-            + "    <yield>3556528488</yield>                                        "
-            + "  </ChipResultsSummary>                                              "
-            + "  <ChipSummary>                                                      "
-            + "    <ChipID>unknown</ChipID>                                         "
-            + "    <Machine>HWI-EAS264</Machine>                                    "
-            + "    <RunFolder>090916_42R0CAAXX</RunFolder>                          "
-            + "  </ChipSummary>                                                     "
-            + "  <Date>Tue Oct 20 18:15:43 2009</Date>                              "
-            + "  <ExpandedLaneSummary>                                              "
-            + " <Read>                                                              "
-            + "  <readNumber>1</readNumber>                                         "
-            + "  <Lane>                                                             "
-            + "    <laneNumber>1</laneNumber>                                       "
-            + "    <clusterCountRaw>                                                "
-            + "      <mean>381286.80</mean>                                         "
-            + "      <stdev>28613.35</stdev>                                        "
-            + "     <sumsq>98246880000.00</sumsq>                                   "
-            + " </clusterCountRaw>                                                  "
-            + " <errorPF>                                                           "
-            + "   <mean>0.72</mean>                                                 "
-            + "   <stdev>0.49</stdev>                                               "
-            + "   <sumsq>90.37</sumsq>                                              "
-            + " </errorPF>                                                          "
-            + " <errorRaw>                                                          "
-            + "   <mean>0.83</mean>                                                 "
-            + "   <stdev>0.48</stdev>                                               "
-            + "   <sumsq>110.63</sumsq>                                             "
-            + " </errorRaw>                                                         "
-            + " <infoContentPF>                                                     "
-            + "   <mean>213494</mean>                                               "
-            + "   <stdev>9929</stdev>                                               "
-            + "   <sumsq>5481321756576</sumsq>                                      "
-            + " </infoContentPF>                                                    "
-            + " <infoContentRaw>                                                    "
-            + "   <mean>229532</mean>                                               "
-            + "   <stdev>11786</stdev>                                              "
-            + "   <sumsq>6338734406410</sumsq>                                      "
-            + " </infoContentRaw>                                                   "
-            + " <percentClustersPF>                                                 "
-            + "   <mean>73.03</mean>                                                "
-            + "   <stdev>2.72</stdev>                                               "
-            + "   <sumsq>890.49</sumsq>                                             "
-            + " </percentClustersPF>                                                "
-            + " <percentUniquelyAlignedPF>                                          "
-            + "   <mean>79.37</mean>                                                "
-            + "   <stdev>0.86</stdev>                                               "
-            + "   <sumsq>755955.73</sumsq>                                          "
-            + " </percentUniquelyAlignedPF>                                         "
-            + " <phasingApplied>0.8203</phasingApplied>                             "
-            + " <prephasingApplied>0.3881</prephasingApplied>                       "
-            + " <signalAverage1to3>                                                 "
-            + "   <mean>526.07</mean>                                               "
-            + "   <stdev>43.17</stdev>                                              "
-            + "   <sumsq>223675.10</sumsq>                                          "
-            + " </signalAverage1to3>                                                "
-            + " <signalAverage2to4>                                                 "
-            + "   <mean>519.91</mean>                                               "
-            + "   <stdev>41.72</stdev>                                              "
-            + "   <sumsq>208871.60</sumsq>                                          "
-            + " </signalAverage2to4>                                                "
-            + " <signalLoss10to20>                                                  "
-            + "   <mean>1.01</mean>                                                 "
-            + "   <stdev>0.40</stdev>                                               "
-            + "   <sumsq>19.25</sumsq>                                              "
-            + " </signalLoss10to20>                                                 "
-            + " <signalLoss2to10>                                                   "
-            + "   <mean>0.45</mean>                                                 "
-            + "      <stdev>0.53</stdev>                                            "
-            + "      <sumsq>33.94</sumsq>                                           "
-            + "    </signalLoss2to10>                                               "
-            + "  </Lane>                                                            "
-            + "   </Read>                                                           "
-            + " </ExpandedLaneSummary>                                              "
-            + " <LaneParameterSummary/>                                             "
-            + " <LaneResultsSummary>                                                "
-            + " <Read>                                                              "
-            + " <readNumber>1</readNumber>                                          "
-            + " <Lane>                                                              "
-            + " <laneNumber>1</laneNumber>                                          "
-            + " <averageAlignScorePF>                                               "
-            + " <mean>94.25</mean>                                                  "
-            + " <stdev>3.64</stdev>                                                 "
-            + " <sumsq>1067460.47</sumsq>                                           "
-            + " </averageAlignScorePF>                                              "
-            + " <clusterCountPF>                                                    "
-            + " <mean>277736</mean>                                                 "
-            + " <stdev>11981</stdev>                                                "
-            + " <sumsq>17224950000</sumsq>                                          "
-            + " </clusterCountPF>                                                   "
-            + " <clusterCountRaw>                                                   "
-            + " <mean>381287</mean>                                                 "
-            + " <stdev>28613</stdev>                                                "
-            + " <sumsq>98246880000</sumsq>                                          "
-            + " </clusterCountRaw>                                                  "
-            + "<errorPF>                                                            "
-            + "<mean>0.72</mean>                                                    "
-            + "<stdev>0.49</stdev>                                                  "
-            + "<sumsq>90.37</sumsq>                                                 "
-            + "</errorPF>                                                           "
-            + "<laneYield>1199819</laneYield>                                       "
-            + "<oneSig>                                                             "
-            + "<mean>536</mean>                                                     "
-            + "<stdev>46</stdev>                                                    "
-            + "<sumsq>256164</sumsq>                                                "
-            + "</oneSig>                                                            "
-            + "<percentClustersPF>                                                  "
-            + "<mean>73.03</mean>                                                   "
-            + "<stdev>2.72</stdev>                                                  "
-            + "<sumsq>890.49</sumsq>                                                "
-            + "</percentClustersPF>                                                 "
-            + "<percentUniquelyAlignedPF>                                           "
-            + "<mean>79.37</mean>                                                   "
-            + "<stdev>0.86</stdev>                                                  "
-            + "<sumsq>755955.73</sumsq>                                             "
-            + "</percentUniquelyAlignedPF>                                          "
-            + "<signal20AsPctOf1>                                                   "
-            + "<mean>82.19</mean>                                                   "
-            + "<stdev>5.09</stdev>                                                  "
-            + "<sumsq>3103.16</sumsq>                                               "
-            + "</signal20AsPctOf1>                                                  "
-            + " </Lane>												                "
-            + " </Read>                                                             "
-            + " </LaneResultsSummary>                                                "
-            + "  <TileErrorsByLane/>                                                "
-            + "  <Software>CASAVA-1.6.0</Software>                                  "
-            + "</Summary>";
-}
diff --git a/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/systemtests/DSUDropboxSystemTest.java b/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/systemtests/DSUDropboxSystemTest.java
deleted file mode 100644
index 93acd2960e2..00000000000
--- a/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/systemtests/DSUDropboxSystemTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright 2014 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss.systemtests;
-
-import org.testng.annotations.BeforeSuite;
-
-import ch.systemsx.cisd.openbis.datastoreserver.systemtests.GenericDropboxSystemTest;
-import ch.systemsx.cisd.openbis.generic.shared.ICommonServer;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataType;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewETPTAssignment;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType;
-
-/**
- * @author pkupczyk
- */
-public abstract class DSUDropboxSystemTest extends GenericDropboxSystemTest
-{
-
-    @Override
-    @BeforeSuite
-    public void beforeSuite() throws Exception
-    {
-        initializePythonImportPath();
-        DSUTestInitializer.init();
-        super.beforeSuite();
-        initializeMasterData();
-    }
-
-    @Override
-    protected String getDropboxIncomingDirectoryName()
-    {
-        return getDropboxName();
-    }
-
-    private void initializePythonImportPath()
-    {
-        System.setProperty("python.path", "sourceTest/core-plugins/illumina-qgf/1/jython-lib");
-    }
-
-    private void initializeMasterData()
-    {
-        String sessionToken = getGeneralInformationService().tryToAuthenticateForAllServices("kohleman", "password");
-        ICommonServer commonServer = getBean("common-server");
-        PropertyType propertyType = new PropertyType();
-        propertyType.setCode("CONTROL_SOFTWARE_VERSION");
-        propertyType.setDataType(new DataType(DataTypeCode.VARCHAR));
-        propertyType.setLabel("Control Software Version");
-        propertyType.setDescription(propertyType.getLabel());
-        NewETPTAssignment assignment = new NewETPTAssignment();
-        assignment.setPropertyTypeCode(propertyType.getCode());
-        assignment.setEntityTypeCode("ILLUMINA_FLOW_CELL");
-        assignment.setEntityKind(EntityKind.SAMPLE);
-        assignment.setOrdinal(1000L);
-        commonServer.registerAndAssignPropertyType(sessionToken, propertyType, assignment);
-    }
-
-}
diff --git a/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/systemtests/DSUSystemTest.java b/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/systemtests/DSUSystemTest.java
deleted file mode 100644
index b3a7fad8fc7..00000000000
--- a/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/systemtests/DSUSystemTest.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2014 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss.systemtests;
-
-import org.testng.annotations.BeforeSuite;
-
-import ch.systemsx.cisd.openbis.datastoreserver.systemtests.GenericSystemTest;
-
-/**
- * @author pkupczyk
- */
-public abstract class DSUSystemTest extends GenericSystemTest
-{
-
-    @Override
-    @BeforeSuite
-    public void beforeSuite() throws Exception
-    {
-        DSUTestInitializer.init();
-        super.beforeSuite();
-    }
-
-}
diff --git a/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/systemtests/DSUTestInitializer.java b/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/systemtests/DSUTestInitializer.java
deleted file mode 100644
index 169b95dc6e0..00000000000
--- a/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/systemtests/DSUTestInitializer.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright 2014 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss.systemtests;
-
-import java.io.File;
-
-import ch.systemsx.cisd.openbis.generic.server.util.TestInitializer;
-import ch.systemsx.cisd.openbis.test.server.TestDatabase;
-
-/**
- * @author pkupczyk
- */
-public class DSUTestInitializer
-{
-
-    private static String dbKind = "test_qgf";
-
-    public static void setDbKind(String dbKind)
-    {
-        DSUTestInitializer.dbKind = dbKind;
-    }
-
-    private static String getDBKind()
-    {
-        return dbKind;
-    }
-
-    private static String getDBName()
-    {
-        return "openbis_" + getDBKind();
-    }
-
-    public static void init()
-    {
-        File sqlDumpFile = new File("resource/test-db/" + getDBName() + ".sql");
-        File binaryDumpFile = new File("resource/test-db/" + getDBName() + ".dmp");
-
-        File dumpFile = null;
-        if (sqlDumpFile.exists())
-        {
-            dumpFile = sqlDumpFile;
-        } else if (binaryDumpFile.exists())
-        {
-            dumpFile = binaryDumpFile;
-        } else
-        {
-            throw new IllegalArgumentException("No dump file found.");
-        }
-
-        TestDatabase.restoreDump(dumpFile, getDBName());
-
-        TestInitializer.setScriptFolderForEmptyDB("../openbis/source");
-        TestInitializer.setScriptFolderForTestDB("../openbis/source");
-        TestInitializer.setDBKind(getDBKind());
-        TestInitializer.setCreateDBFromScratch(false);
-    }
-
-}
diff --git a/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/systemtests/DemoDropboxTest.java b/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/systemtests/DemoDropboxTest.java
deleted file mode 100644
index a2ef1fc3307..00000000000
--- a/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/dss/systemtests/DemoDropboxTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2014 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.dss.systemtests;
-
-import java.util.List;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Experiment;
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria;
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClause;
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClauseAttribute;
-
-/**
- * @author pkupczyk
- */
-public class DemoDropboxTest extends DSUDropboxSystemTest
-{
-
-    @Override
-    protected String getDropboxName()
-    {
-        return "demo-dropbox";
-    }
-
-    @Override
-    protected String getDropboxIncomingDirectoryName()
-    {
-        return "incoming-demo-dropbox";
-    }
-
-    @Test
-    public void testDropbox() throws Exception
-    {
-        importData("demo-data");
-        waitUntilDataImported();
-        waitUntilIndexUpdaterIsIdle();
-
-        String sessionToken = getGeneralInformationService().tryToAuthenticateForAllServices("kohleman", "password");
-
-        // check that the new created experiments are there
-        SearchCriteria criteria = new SearchCriteria();
-        criteria.addMatchClause(MatchClause.createAttributeMatch(MatchClauseAttribute.CODE, "DEMO-EXPERIMENT*"));
-
-        List<Experiment> experiments = getGeneralInformationService().searchForExperiments(sessionToken, criteria);
-        Assert.assertEquals(experiments.size(), 2);
-    }
-
-}
\ No newline at end of file
diff --git a/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/tracking/main/FileBasedTrackingDAOTest.java b/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/tracking/main/FileBasedTrackingDAOTest.java
deleted file mode 100644
index a6d3851332a..00000000000
--- a/deep_sequencing_unit/sourceTest/java/ch/ethz/bsse/cisd/dsu/tracking/main/FileBasedTrackingDAOTest.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Copyright 2009 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dsu.tracking.main;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-import org.apache.commons.lang3.StringUtils;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import ch.ethz.bsse.cisd.dsu.tracking.dto.TrackedEntities;
-import ch.ethz.bsse.cisd.dsu.tracking.dto.TrackingStateDTO;
-import ch.ethz.bsse.cisd.dsu.tracking.main.TrackingBO.TrackingStateUpdateHelper;
-import ch.systemsx.cisd.base.tests.AbstractFileSystemTestCase;
-import ch.systemsx.cisd.common.filesystem.FileUtilities;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PhysicalDataSet;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
-
-/**
- * @author Piotr Buczek
- * @author Manuel Kohler
- */
-public class FileBasedTrackingDAOTest extends AbstractFileSystemTestCase
-{
-    private static final String DATABASE_FILE = "tracking-local-database";
-
-    private static final String DATABASE_FILE_DATA_SETS = "tracking-sample-database";
-
-    private TreeMap<String, Long> changedTrackingMap = new TreeMap<String, Long>();
-
-    @BeforeMethod
-    public void beforeMethod() throws Exception
-    {
-        super.setUp();
-        FileUtilities.deleteRecursively(workingDirectory);
-    }
-
-    @Test
-    public void testGetTrackingState()
-    {
-        changedTrackingMap.put("20150213144812415-60450886", 29877L);
-        changedTrackingMap.put("20150226134806587-60452073", 30293L);
-        String toBeProcessed = "1 2 3 4 5";
-        String processed = "1 2 3";
-        prepareDatabaseFile(changedTrackingMap, toBeProcessed, processed);
-
-        ITrackingDAO trackingDAO = new FileBasedTrackingDAO(DATABASE_FILE, DATABASE_FILE_DATA_SETS);
-        TrackingStateDTO state = trackingDAO.getTrackingState();
-        assertEquals(changedTrackingMap, state.getLastSeenDataSetIdMap());
-        assertEquals(toBeProcessed, StringUtils.join(state
-                .getAlreadyTrackedSampleIdsToBeProcessed(), " "));
-        assertEquals(processed, StringUtils.join(state.getAlreadyTrackedSampleIdsProcessed(), " "));
-    }
-
-    @Test
-    public void testCalcNewTrackingState()
-    {
-        TreeMap<String, Long> changedTrackingMap = new TreeMap<String, Long>();
-        changedTrackingMap.put("20150213144812415-60450886", 29877L);
-        changedTrackingMap.put("20150226134806587-60452073", 30293L);
-        String toBeProcessed = "1 2 3 4 5";
-        String processed = "1 2 3";
-        prepareDatabaseFile(changedTrackingMap, toBeProcessed, processed);
-        ITrackingDAO trackingDAO = new FileBasedTrackingDAO(DATABASE_FILE, DATABASE_FILE_DATA_SETS);
-        TrackingStateDTO state = trackingDAO.getTrackingState();
-
-        HashMap<String, ArrayList<Long>> tmpTrackingMap = new HashMap<String, ArrayList<Long>>();
-        ArrayList<Long> techIds = new ArrayList<Long>();
-        techIds.add(32000L);
-        techIds.add(33000L);
-        techIds.add(29877L);
-        tmpTrackingMap.put("20150213144812415-60450886", techIds);
-
-        techIds = new ArrayList<Long>();
-        techIds.add(32001L);
-        techIds.add(33001L);
-        tmpTrackingMap.put("20150226134806587-60452073", techIds);
-
-        techIds = new ArrayList<Long>();
-        techIds.add(31000L);
-        techIds.add(34000L);
-        tmpTrackingMap.put("20150226134806587-90000000", techIds);
-
-        TrackedEntities changedEntities =
-                new TrackedEntities(createSamplesWithIds(6, 7), createSamplesWithIds(4),
-                        createDataSetsWithIds(33000L), tmpTrackingMap);
-        TrackingStateDTO newState =
-                TrackingStateUpdateHelper.calcNewTrackingState(state, changedEntities);
-
-        TreeMap<String, Long> expectedTrackingMap = new TreeMap<String, Long>();
-
-        expectedTrackingMap.put("20150213144812415-60450886", 33000L);
-        expectedTrackingMap.put("20150226134806587-60452073", 33001L);
-        expectedTrackingMap.put("20150226134806587-90000000", 34000L);
-
-        assertEquals(expectedTrackingMap, newState.getLastSeenDataSetIdMap());
-
-        assertEquals("1 2 3 4 5 6 7", StringUtils.join(newState
-                .getAlreadyTrackedSampleIdsToBeProcessed(), " "));
-        assertEquals("1 2 3 4", StringUtils.join(newState.getAlreadyTrackedSampleIdsProcessed(),
-                " "));
-    }
-
-    @Test
-    public void testSaveTrackingState()
-    {
-        changedTrackingMap.put("20150213144812415-60450886", 29877L);
-        changedTrackingMap.put("20150226134806587-60452073", 30293L);
-        String toBeProcessed = "1 2";
-        String processed = "1";
-        prepareDatabaseFile(changedTrackingMap, toBeProcessed, processed);
-
-        ITrackingDAO trackingDAO = new FileBasedTrackingDAO(DATABASE_FILE, DATABASE_FILE_DATA_SETS);
-        TrackingStateDTO newState = new TrackingStateDTO();
-
-        changedTrackingMap.put("20150226134806587-60452099", 31296L);
-        newState.setLastSeenDataSetIdMap(changedTrackingMap);
-        newState.setAlreadyTrackedSampleIdsToBeProcessed(new TreeSet<Long>(Arrays.asList(new Long[]
-        { 1L, 2L, 3L, 4L })));
-        newState.setAlreadyTrackedSampleIdsProcessed(new TreeSet<Long>(Arrays.asList(new Long[]
-        { 1L, 2L, 3L })));
-        trackingDAO.saveTrackingState(newState);
-
-        TrackingStateDTO loadesState = trackingDAO.getTrackingState();
-        assertEquals(changedTrackingMap, loadesState.getLastSeenDataSetIdMap());
-        assertEquals("1 2 3 4", StringUtils.join(loadesState
-                .getAlreadyTrackedSampleIdsToBeProcessed(), " "));
-        assertEquals("1 2 3", StringUtils.join(loadesState.getAlreadyTrackedSampleIdsProcessed(),
-                " "));
-    }
-
-    private static List<Sample> createSamplesWithIds(long... ids)
-    {
-        List<Sample> result = new ArrayList<Sample>();
-        for (long id : ids)
-        {
-            result.add(createSampleWithId(id));
-        }
-        return result;
-    }
-
-    private static Sample createSampleWithId(long id)
-    {
-        Sample result = new Sample();
-        result.setId(id);
-        return result;
-    }
-
-    private static List<AbstractExternalData> createDataSetsWithIds(long... ids)
-    {
-        List<AbstractExternalData> result = new ArrayList<AbstractExternalData>();
-        for (long id : ids)
-        {
-            result.add(createDataSetWithId(id));
-        }
-        return result;
-    }
-
-    private static PhysicalDataSet createDataSetWithId(long id)
-    {
-        PhysicalDataSet result = new PhysicalDataSet();
-        result.setId(id);
-        return result;
-    }
-
-    private void prepareDatabaseFile(TreeMap<String, Long> changedTrackingMap, String samplesToBeProcessed,
-            String processedSamples)
-    {
-        StringBuilder sb = new StringBuilder();
-
-        for (Map.Entry<String, Long> entry : changedTrackingMap.entrySet())
-        {
-            sb.append(entry.getKey() + FileBasedTrackingDAO.EQUAL + entry.getValue() + "\n");
-        }
-        System.out.println(sb.toString());
-        FileUtilities.writeToFile(new File(DATABASE_FILE_DATA_SETS), sb.toString());
-
-        sb = new StringBuilder();
-        sb.append(FileBasedTrackingDAO.TO_BE_PROCESSED);
-        sb.append(FileBasedTrackingDAO.SEPARATOR);
-        sb.append(samplesToBeProcessed);
-        sb.append("\n");
-        sb.append(FileBasedTrackingDAO.PROCESSED);
-        sb.append(FileBasedTrackingDAO.SEPARATOR);
-        sb.append(processedSamples);
-        sb.append("\n");
-
-        FileUtilities.writeToFile(new File(DATABASE_FILE), sb.toString());
-    }
-}
diff --git a/deep_sequencing_unit/sourceTest/java/tests.xml b/deep_sequencing_unit/sourceTest/java/tests.xml
deleted file mode 100644
index 26e13dd48d9..00000000000
--- a/deep_sequencing_unit/sourceTest/java/tests.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
-
-<suite name="All" verbose="1">
-    <test name="All">
-        <groups>
-            <run>
-                <exclude name="broken" />
-            </run>
-        </groups>
-        <packages>
-            <package name="ch.ethz.bsse.cisd.dsu.*" />
-        </packages>
-    </test>
-</suite>
diff --git a/deep_sequencing_unit/tracking/dist/etc/email-template.txt b/deep_sequencing_unit/tracking/dist/etc/email-template.txt
deleted file mode 100644
index f105bff09d4..00000000000
--- a/deep_sequencing_unit/tracking/dist/etc/email-template.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-Dear Mrs./Mr.
-This email has been sent to you automatically by the openBIS system because
-you have been registered as a contact person or principal investigator.
-
-There is progress considering your sequencing order. Below you will find all the details.
-
-{generated-content}
-
-Kind regards,
-Quantitative Genomics Facility Team
\ No newline at end of file
diff --git a/deep_sequencing_unit/tracking/dist/etc/log.xml b/deep_sequencing_unit/tracking/dist/etc/log.xml
deleted file mode 100644
index 25581b0f2e2..00000000000
--- a/deep_sequencing_unit/tracking/dist/etc/log.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
-
-  <appender name="DEFAULT" class="org.apache.log4j.DailyRollingFileAppender">
-
-    <param name="File" value="log/tracking_log.txt"/>
-    <param name="DatePattern" value="'.'yyyy-MM-dd"/>
-
-    <layout class="org.apache.log4j.PatternLayout">
-      <param name="ConversionPattern" value="%d %-5p [%t] %c - %m%n"/>
-    </layout>
-  
-  </appender>
-
-  <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
-     <layout class="org.apache.log4j.PatternLayout">
-       <param name="ConversionPattern" value="%d %-5p [%t] %c - %m%n"/>
-     </layout>
-  </appender>
-
-  <appender name="NULL" class="org.apache.log4j.varia.NullAppender" />
-
-  <appender name="EMAIL" class="org.apache.log4j.net.SMTPAppender">
-
-    <param name="BufferSize" value="512" />
-    <param name="SMTPHost" value="localhost" />
-    <param name="From" value="dsu@localhost" />
-    <param name="To" value="root@localhost" />
-    <param name="Subject" value="ATTENTION: DSU Progress Tracking" />
-    <param name="EvaluatorClass" value="ch.systemsx.cisd.common.logging.AlwaysTrueTriggeringEventEvaluator" />
-
-    <layout class="org.apache.log4j.PatternLayout">
-      <param name="ConversionPattern" value="%d %-5p [%t] %c - %m%n"/>
-    </layout>
-  
-    <!--filter class="org.apache.log4j.varia.LevelRangeFilter">
-      <param name="LevelMin" value="ERROR"/>
-      <param name="LevelMax" value="FATAL"/>
-    </filter-->
-  
-  </appender>
-
-  <category name="NOTIFY">
-    <priority value="info" />
-    <appender-ref ref="DEFAULT" />
-    <appender-ref ref="EMAIL" />
-  </category>    
-  
-  <root>
-    <priority value="info" />
-    <appender-ref ref="DEFAULT" />
-  </root>
-  
-</log4j:configuration>
diff --git a/deep_sequencing_unit/tracking/dist/etc/service.properties b/deep_sequencing_unit/tracking/dist/etc/service.properties
deleted file mode 100644
index a8639434a53..00000000000
--- a/deep_sequencing_unit/tracking/dist/etc/service.properties
+++ /dev/null
@@ -1,57 +0,0 @@
-openbis-user=<login>
-openbis-password=<password>
-openbis-server-url = https://<openbis-server-url>:8443/openbis/openbis
-permlink-url = https://<openbis-server-url>:8443/openbis
-
-# SMTP properties.
-# To test the system and save emails as files instead of sending them, 
-# set the smtp host to file://path-to-directory
-mail.smtp.host = smtp0.ethz.ch
-mail.smtp.user = 
-mail.smtp.password = 
-
-# all emails will be sent from this address
-mail.from = openbis-noreply@bsse.ethz.ch
-# all emails will have this address in the reply-to field
-notification-email-reply-to = manuel.kohler@bsse.ethz.ch
-# subject of all the notification emails
-notification-email-subject = BSSE DSU: Status report of your deep sequencing order
-
-# if the tracking client fails an email will be sent out to these recipients
-tracking-admin-email = kohleman@ethz.ch, gpawel@ethz.ch
-
-# Recipients that will receive notifications when entity connected with sequencing sample 
-# with certain AFFILIATION value. Property key should contain affiliation vocabulary term code
-# with '-affiliation-notification-email-contact' suffix, e.g. for 'FMI' affiliation:
-FMI-affiliation-notification-email-contact =
-
-jython-version=2.7
-
-# if a sample is part of this space list then it will be transferred to an extra folder
-space-whitelist = SPACE1, SPACE2
-
-# All DBM spaces start with this string and will be copied to an extra folder
-dbm-space-prefix = DBM_
-
-# boolean flag used to make a developer life easier
-debug = true
-
-# go back up to this number when searching for older data sets, used to speed up the request.
-# The lower this number the faster, but you might miss older data sets
-old-data-set-backlog-number = 1000
-
-# List of DataSet Types which should be copied into an extra folder
-dataset-type-list = FASTQ_GZ, FASTQC
-
-# folder where the data should be copied to
-FASTQ_GZ-destination-folder = /Users/kohleman/dest/fastq_gz
-FASTQC-destination-folder = /Users/kohleman/dest/fastqc
-
-# rsync binary
-rsync-binary = /opt/local/bin/rsync
-
-# rsync flags
-rsync-flags = -v
-
-# DSS root
-dss-root-dir = /dss-root-dir
\ No newline at end of file
diff --git a/deep_sequencing_unit/tracking/dist/etc/tracking-local-database b/deep_sequencing_unit/tracking/dist/etc/tracking-local-database
deleted file mode 100644
index cf0c217beb4..00000000000
--- a/deep_sequencing_unit/tracking/dist/etc/tracking-local-database
+++ /dev/null
@@ -1,2 +0,0 @@
-trackedSamplesToBeProcessed
-trackedSamplesProcessedSuccessfully
\ No newline at end of file
diff --git a/deep_sequencing_unit/tracking/dist/etc/tracking-sample-database b/deep_sequencing_unit/tracking/dist/etc/tracking-sample-database
deleted file mode 100644
index 2fa072094d7..00000000000
--- a/deep_sequencing_unit/tracking/dist/etc/tracking-sample-database
+++ /dev/null
@@ -1,2511 +0,0 @@
-20090901100144407-102 = 192
-20090901100217527-106 = 190
-20091027093052413-400 = 24
-20091027093128193-401 = 22
-20091027093856950-403 = 26
-20091027093953542-404 = 28
-20091027094025001-405 = 29
-20091027094057471-406 = 25
-20091027094142512-407 = 23
-20091030173345738-419 = 37
-20091030173359059-420 = 33
-20091030173412170-421 = 38
-20091030173629007-422 = 32
-20091030173758779-423 = 35
-20091030173812208-424 = 39
-20091030173821889-425 = 36
-20091030173929101-426 = 34
-20091106124300586-474 = 47
-20091106124329764-475 = 42
-20091106124715426-476 = 46
-20091106125151081-477 = 43
-20091106125206291-478 = 45
-20091106125226353-479 = 48
-20091106125241093-480 = 44
-20091106125314193-481 = 41
-20091106141205669-490 = 56
-20091106141507158-492 = 55
-20091106141519899-493 = 57
-20091106141533859-494 = 52
-20091106141609081-495 = 54
-20091106141925253-496 = 50
-20091106141943652-497 = 53
-20091106141956163-498 = 51
-20091117170701771-551 = 62
-20091120175945615-578 = 69
-20091125111543169-606 = 89
-20091125111614749-607 = 87
-20091126153258774-618 = 77
-20091126153355153-619 = 82
-20091126153400307-620 = 83
-20091126153406591-621 = 84
-20091126153414760-622 = 80
-20091126153420414-623 = 78
-20091126153426200-624 = 81
-20091126153517520-625 = 79
-20091201173404712-670 = 101
-20091201173416814-671 = 97
-20091201173424109-672 = 100
-20091201173433419-673 = 96
-20091201173457607-674 = 95
-20091201173530550-675 = 102
-20091201173541572-676 = 98
-20091201173548422-677 = 99
-20091202163914008-686 = 106
-20091202163923548-687 = 111
-20091202163932761-688 = 108
-20091202163941188-689 = 109
-20091202164005130-690 = 104
-20091202164042639-691 = 107
-20091202164056909-692 = 105
-20091202164105920-693 = 110
-20091211135800080-746 = 366
-20091211135810349-747 = 370
-20091211135821139-748 = 371
-20091211135829933-749 = 373
-20091211135844754-750 = 367
-20091211135939945-751 = 369
-20091211154447334-763 = 125
-20091211155300296-768 = 123
-20091211155346575-769 = 124
-20091211155355043-770 = 128
-20091217160108986-815 = 134
-20091217160121027-816 = 141
-20091217160131947-817 = 136
-20091217160140856-818 = 137
-20091217160158137-819 = 135
-20091217160208497-820 = 138
-20091217160217679-821 = 133
-20091217160249608-822 = 140
-20100104141359261-851 = 146
-20100104141934510-852 = 145
-20100104141943538-853 = 142
-20100104141951799-854 = 143
-20100104142117972-855 = 147
-20100104142129577-856 = 150
-20100104142139257-857 = 148
-20100104142258199-858 = 144
-20100104150210283-868 = 155
-20100104150219889-869 = 152
-20100104150229391-870 = 153
-20100104150239401-871 = 154
-20100104150251770-872 = 157
-20100104150300874-873 = 156
-20100104150307950-874 = 159
-20100104150437301-875 = 151
-20100115162144587-984 = 174
-20100115162158927-985 = 172
-20100115162209499-986 = 171
-20100115162230528-987 = 169
-20100115162240790-988 = 176
-20100115162251887-989 = 170
-20100115162257999-990 = 175
-20100115162920255-992 = 168
-20100119174708577-1055 = 222
-20100119174715737-1056 = 224
-20100119174725169-1057 = 228
-20100119174735848-1058 = 221
-20100119174759150-1059 = 223
-20100119174810691-1060 = 227
-20100119174818898-1061 = 226
-20100119174930379-1062 = 225
-20100121160330216-1087 = 238
-20100121160346656-1088 = 234
-20100121160354685-1089 = 232
-20100121160431666-1090 = 231
-20100121160449219-1091 = 237
-20100121160522918-1093 = 239
-20100121160538448-1094 = 236
-20100121160728938-1095 = 233
-20100129163141498-1168 = 293
-20100129163151377-1169 = 299
-20100129163200946-1170 = 296
-20100129163210811-1171 = 295
-20100129163221077-1172 = 294
-20100129163229167-1173 = 298
-20100129163238850-1174 = 300
-20100129163343935-1175 = 297
-20100208181210213-1185 = 249
-20100208181221310-1186 = 257
-20100208181232443-1187 = 251
-20100208181241387-1188 = 256
-20100208181253995-1189 = 252
-20100208181305496-1190 = 253
-20100208181314316-1191 = 250
-20100208181418721-1192 = 255
-20100209093213783-1209 = 246
-20100209093223865-1210 = 241
-20100209093326782-1211 = 248
-20100210162255901-1238 = 340
-20100210162310327-1239 = 345
-20100210164455879-1253 = 347
-20100210164548000-1254 = 339
-20100217155418927-1330 = 331
-20100217155431380-1331 = 332
-20100217155440044-1332 = 336
-20100217155450929-1333 = 334
-20100217155510362-1334 = 328
-20100217155520621-1335 = 330
-20100217155550413-1336 = 333
-20100217155711716-1337 = 329
-20100223160428841-1361 = 351
-20100223160535294-1362 = 348
-20100223160552432-1364 = 349
-20100223160605401-1365 = 353
-20100223160620757-1366 = 356
-20100223160649269-1367 = 354
-20100223160808647-1368 = 350
-20100325110248757-1445 = 376
-20100325110330448-1446 = 380
-20100331150601755-1457 = 387
-20100331150610446-1458 = 388
-20100331150621576-1459 = 392
-20100331150636095-1460 = 390
-20100331150656717-1461 = 386
-20100331150756870-1462 = 389
-20100331150843166-1463 = 384
-20100331151007916-1465 = 385
-20100414165531241-1489 = 404
-20100414165541421-1490 = 408
-20100414165551276-1491 = 407
-20100414165604896-1492 = 406
-20100414165621711-1493 = 403
-20100414165629893-1494 = 405
-20100414165636217-1495 = 402
-20100414165740555-1496 = 410
-20100415095708958-1508 = 395
-20100415095721854-1509 = 398
-20100415095815657-1510 = 399
-20100415095838144-1511 = 401
-20100415095925208-1512 = 397
-20100415100107678-1514 = 393
-20100415100126104-1515 = 394
-20100420115836518-1559 = 413
-20100426124153251-1614 = 426
-20100428172740332-1623 = 430
-20100428172749470-1624 = 437
-20100428172800370-1625 = 433
-20100428172807501-1626 = 434
-20100428172822397-1627 = 431
-20100428172832020-1628 = 432
-20100428172841926-1629 = 429
-20100428172929820-1630 = 435
-20100505171018192-1659 = 439
-20100505171053482-1660 = 443
-20100505171109861-1661 = 444
-20100505171123152-1662 = 446
-20100505171437816-1663 = 442
-20100518180146300-1712 = 450
-20100518180156496-1713 = 454
-20100518180318645-1714 = 453
-20100518180330251-1715 = 452
-20100518180421992-1716 = 456
-20100518180620583-1718 = 451
-20100521173324880-1767 = 459
-20100521173337260-1768 = 462
-20100521173344869-1769 = 463
-20100521173355340-1770 = 465
-20100521173405794-1771 = 460
-20100521173412150-1772 = 457
-20100521173420493-1773 = 458
-20100521173504043-1774 = 461
-20100603142651278-1796 = 473
-20100603142804268-1797 = 472
-20100603142819793-1798 = 471
-20100603143248696-1799 = 468
-20100610095251052-1819 = 483
-20100610095351558-1820 = 476
-20100610095407343-1821 = 477
-20100610095416347-1822 = 478
-20100610095525224-1823 = 475
-20100610095853430-1827 = 479
-20100610095942262-1828 = 480
-20100622150006599-1858 = 490
-20100622150148840-1860 = 484
-20100706181515832-1912 = 495
-20100706181527377-1913 = 499
-20100706181537637-1914 = 498
-20100706181550267-1915 = 497
-20100706181605078-1916 = 494
-20100706181648289-1917 = 501
-20100706181846733-1920 = 493
-20100720173022595-1939 = 509
-20100720173033148-1940 = 506
-20100720173041895-1941 = 508
-20100720173051383-1942 = 503
-20100720173101132-1943 = 507
-20100720173108446-1944 = 510
-20100720173116612-1945 = 504
-20100720173632374-1947 = 505
-20100726124125003-1978 = 519
-20100729105913994-1994 = 526
-20100729105932276-1995 = 520
-20100729105944744-1996 = 523
-20100729110245137-2001 = 521
-20100730162022569-2017 = 529
-20100730162040004-2018 = 537
-20100730162155775-2021 = 535
-20100803171705868-2037 = 541
-20100803171716976-2038 = 542
-20100803171724636-2039 = 546
-20100803171732418-2040 = 544
-20100803171740431-2041 = 540
-20100803171750576-2042 = 538
-20100803171757602-2043 = 539
-20100803171837890-2044 = 543
-20100806144225552-2080 = 547
-20100811173558229-2100 = 558
-20100811173606359-2101 = 561
-20100811173614622-2102 = 562
-20100811173623435-2103 = 564
-20100811173748044-2104 = 560
-20100811173926469-2106 = 556
-20100811173938671-2107 = 557
-20100817180139608-2133 = 571
-20100817180707390-2135 = 566
-20100817180718131-2136 = 568
-20100902095427172-2168 = 587
-20100902095438108-2169 = 586
-20100902095626618-2171 = 589
-20100902095709387-2172 = 591
-20100902095722518-2173 = 594
-20100902095730764-2174 = 590
-20100910152208286-2231 = 601
-20100910152230447-2232 = 595
-20100910152246998-2233 = 598
-20100910152300691-2234 = 597
-20100910153859252-2235 = 596
-20100910154000986-2236 = 600
-20100910154015044-2237 = 599
-20100910154028448-2238 = 603
-20100916173443063-2275 = 607
-20100916173454336-2276 = 608
-20100916173503882-2277 = 612
-20100916173513256-2278 = 610
-20100916173521915-2279 = 606
-20100916173536668-2280 = 604
-20100916173544330-2281 = 605
-20100916173634754-2282 = 609
-20100922172618682-2314 = 621
-20100922172628495-2315 = 613
-20100922172637236-2316 = 616
-20100922172646098-2317 = 615
-20100922172726141-2318 = 614
-20100922172922512-2321 = 618
-20101006142458732-2343 = 624
-20101006142512761-2344 = 626
-20101006142522402-2345 = 630
-20101006142531789-2346 = 628
-20101006142552071-2347 = 623
-20101006142601230-2348 = 622
-20101006142705813-2349 = 627
-20101015202054777-2367 = 650
-20101015202204705-2368 = 651
-20101102140357156-2386 = 636
-20101102142525628-2390 = 633
-20101102142728963-2392 = 637
-20101102142743734-2393 = 639
-20101102142755621-2394 = 635
-20101108145638659-2419 = 644
-20101108145729493-2420 = 642
-20101116111121742-2457 = 652
-20101116111125257-2458 = 654
-20101116111130325-2459 = 653
-20101116111132822-2460 = 655
-20101116122432170-2472 = 656
-20101118165547913-2478 = 657
-20101119101026821-2483 = 658
-20101129145554042-2502 = 661
-20101129145610758-2503 = 664
-20101129145815342-2506 = 663
-20101129150122953-2509 = 660
-20101208180442780-2538 = 669
-20101208180512642-2539 = 673
-20101208180524877-2540 = 674
-20101208180535858-2541 = 676
-20101208180618449-2542 = 672
-20101208180741451-2544 = 670
-20101208180754738-2545 = 668
-20101208180802950-2546 = 671
-20101216160104564-2573 = 683
-20101216161556607-2574 = 679
-20101216161706668-2575 = 678
-20101216161842951-2576 = 682
-20101223131915300-2596 = 689
-20101223131934864-2597 = 693
-20101223131958575-2598 = 692
-20101223142020038-2599 = 691
-20101223142044320-2600 = 688
-20101223142137484-2601 = 695
-20101223145935775-2602 = 690
-20101223150112169-2603 = 687
-20110106172426022-2628 = 702
-20110106172623134-2631 = 696
-20110111133728698-2648 = 735
-20110111133741184-2649 = 731
-20110111133750259-2650 = 730
-20110111133800463-2651 = 729
-20110111133819858-2652 = 734
-20110111133833232-2653 = 737
-20110111133925478-2654 = 733
-20110111134512151-2656 = 732
-20110119144810858-2677 = 720
-20110119144824649-2678 = 715
-20110119144840280-2679 = 716
-20110119144908074-2680 = 722
-20110119144922057-2681 = 718
-20110119144932489-2682 = 719
-20110119145030224-2683 = 714
-20110119172858214-2684 = 717
-20110124165223963-2717 = 744
-20110124165239005-2718 = 738
-20110124165249350-2719 = 741
-20110124165300845-2720 = 740
-20110124165309809-2721 = 743
-20110124165319690-2722 = 742
-20110124165330021-2723 = 746
-20110124165417938-2724 = 739
-20110126170744784-2739 = 753
-20110126170757586-2740 = 748
-20110126170812874-2741 = 752
-20110126170904496-2742 = 749
-20110126170913781-2743 = 750
-20110126170924920-2744 = 755
-20110126170934940-2745 = 751
-20110126171017427-2746 = 747
-20110128173910875-2771 = 757
-20110128173948892-2772 = 761
-20110128174054442-2773 = 760
-20110128174102935-2774 = 764
-20110204175731219-2802 = 771
-20110204180026381-2806 = 1007
-20110204180111411-2807 = 768
-20110204180203891-2808 = 765
-20110216170951405-2835 = 776
-20110216171003565-2836 = 780
-20110216171016533-2837 = 774
-20110216171109597-2838 = 779
-20110216171119442-2839 = 778
-20110216171131158-2840 = 775
-20110216171139752-2841 = 777
-20110216171245854-2842 = 782
-20110225153927329-2861 = 787
-20110225153937373-2862 = 786
-20110225154229367-2868 = 785
-20110304161341497-2909 = 798
-20110304161354616-2910 = 793
-20110304161404678-2911 = 794
-20110304161416425-2912 = 795
-20110304161511996-2913 = 792
-20110304161558708-2914 = 800
-20110304161610219-2915 = 796
-20110304161619017-2916 = 797
-20110308152354091-2935 = 802
-20110308164745004-2936 = 806
-20110308165016533-2937 = 807
-20110308165031895-2938 = 809
-20110308165046032-2939 = 803
-20110308165058859-2940 = 801
-20110308165111155-2941 = 804
-20110308165207411-2942 = 805
-20110311165541070-2955 = 811
-20110311165618997-2956 = 815
-20110311165627903-2957 = 816
-20110311165641847-2958 = 818
-20110311165652155-2959 = 812
-20110311165702497-2960 = 810
-20110311165710565-2961 = 813
-20110311165751597-2962 = 814
-20110322174735590-2987 = 819
-20110322174744276-2988 = 827
-20110322174752176-2989 = 823
-20110322174804928-2990 = 824
-20110322174816513-2991 = 820
-20110322174854810-2992 = 825
-20110322174930179-2993 = 822
-20110328173520192-3005 = 832
-20110330172304098-3062 = 837
-20110330172320609-3063 = 845
-20110330172353996-3064 = 841
-20110330172449014-3065 = 842
-20110330172532594-3066 = 843
-20110401123647447-3086 = 854
-20110401123747747-3087 = 846
-20110401123756497-3088 = 849
-20110401123837379-3089 = 848
-20110408161507733-3144 = 861
-20110408161603628-3145 = 857
-20110408161613018-3146 = 856
-20110408161710832-3147 = 859
-20110415145206837-3162 = 868
-20110415145224958-3163 = 869
-20110415145234625-3164 = 873
-20110415145243947-3165 = 871
-20110415145254052-3166 = 867
-20110415145300442-3167 = 865
-20110415145310779-3168 = 866
-20110415145352673-3169 = 870
-20110429193420576-3201 = 1008
-20110429193512326-3202 = 878
-20110429193619818-3203 = 882
-20110429193631236-3204 = 880
-20110429193710132-3205 = 879
-20110506112228291-3238 = 884
-20110506112238037-3239 = 889
-20110506112345088-3240 = 888
-20110506112906454-3241 = 887
-20110506112928768-3242 = 883
-20110506112939522-3243 = 886
-20110506113034807-3244 = 885
-20110506113120272-3245 = 891
-20110518171554996-3334 = 907
-20110530100049402-3380 = 909
-20110530104418529-3390 = 981
-20110530104435608-3391 = 980
-20110530104445594-3392 = 982
-20110530104454302-3393 = 983
-20110530104536396-3394 = 984
-20110530104553755-3395 = 985
-20110530104610535-3396 = 986
-20110530105258256-3398 = 935
-20110530110700441-3400 = 950
-20110530110748437-3401 = 948
-20110530110854700-3402 = 946
-20110530111114947-3404 = 989
-20110530111156037-3405 = 987
-20110530111206334-3406 = 949
-20110530111309468-3407 = 988
-20110530111723730-3408 = 1091
-20110531163103070-3423 = 923
-20110603163952299-3444 = 932
-20110603164002251-3445 = 928
-20110603164236760-3448 = 929
-20110614115224929-3492 = 955
-20110614115236209-3493 = 958
-20110614115244123-3494 = 959
-20110614115252407-3495 = 961
-20110614115335826-3496 = 957
-20110614115427900-3497 = 956
-20110614115444550-3498 = 953
-20110614115453404-3499 = 954
-20110614120857985-3502 = 970
-20110614120908780-3503 = 966
-20110614120917006-3504 = 967
-20110614120930409-3505 = 968
-20110614120939524-3506 = 971
-20110614120951782-3507 = 969
-20110614121000380-3508 = 973
-20110614121044764-3509 = 965
-20110623171800595-3593 = 992
-20110623171809317-3594 = 997
-20110623171816627-3595 = 996
-20110623171824682-3596 = 995
-20110623171908093-3597 = 999
-20110623171942736-3598 = 991
-20110623171950035-3599 = 994
-20110627163827291-3645 = 1014
-20110627163834920-3646 = 1012
-20110627163843782-3647 = 1009
-20110627163851583-3648 = 1010
-20110627163900854-3649 = 1015
-20110627163911662-3650 = 1017
-20110627163920227-3651 = 1013
-20110627163959498-3652 = 1011
-20110701124735783-3673 = 1022
-20110701124840475-3674 = 1026
-20110701124911387-3675 = 1023
-20110701124925097-3676 = 1021
-20110701124940206-3677 = 1024
-20110701124949784-3678 = 1020
-20110701125048746-3679 = 1025
-20110701125848642-3681 = 1028
-20110712162052068-3727 = 1116
-20110712162142262-3728 = 1114
-20110712162158337-3729 = 1109
-20110712162959239-3732 = 1112
-20110712163802950-3734 = 1111
-20110712163816557-3735 = 1113
-20110722150931082-3778 = 1092
-20110722151001724-3779 = 1102
-20110722151015036-3780 = 1095
-20110722151027357-3781 = 1094
-20110722151053225-3782 = 1093
-20110722151107789-3783 = 1103
-20110722151255593-3784 = 1104
-20110802113225135-3837 = 1101
-20110812164104243-3922 = 1118
-20110812164124334-3923 = 1119
-20110812164140933-3924 = 1120
-20110812164618385-3926 = 1122
-20110816140502278-3937 = 1164
-20110816140513770-3938 = 1162
-20110816140523061-3939 = 1159
-20110816140534466-3940 = 1158
-20110816140548634-3941 = 1165
-20110816140557507-3942 = 1160
-20110816140834271-3943 = 1163
-20110816140956071-3944 = 1161
-20110819114620176-3981 = 1172
-20110819115408426-3985 = 1429
-20110826150921259-4275 = 1356
-20110826150933501-4276 = 1355
-20110826151344944-4279 = 1368
-20110826151422790-4280 = 1428
-20110907162319805-4569 = 1761
-20110907162516619-4570 = 1768
-20110907162826858-4573 = 1701
-20110907162839829-4574 = 1702
-20110907162852467-4575 = 1700
-20110907162902139-4576 = 1699
-20110916123944405-4954 = 1520
-20110916123958887-4955 = 1517
-20110916124033126-4956 = 1515
-20110916124043200-4957 = 1514
-20110916124118500-4958 = 1521
-20110916124128257-4959 = 1516
-20110916124138311-4960 = 1518
-20110916124224567-4961 = 1519
-20110916150155542-4971 = 1697
-20110916150203159-4972 = 1695
-20110916150216306-4973 = 1692
-20110916150307781-4974 = 1704
-20110916150353166-4975 = 1696
-20110916150448111-4976 = 2484
-20110916150456853-4977 = 2483
-20110916150557692-4978 = 1694
-20110922125513940-5037 = 1734
-20110922125513952-5038 = 1729
-20110922125513958-5039 = 1730
-20110922125513963-5040 = 1731
-20110922125513968-5041 = 1727
-20110922125513975-5042 = 1591
-20110922125513980-5043 = 1732
-20110922125513986-5044 = 1728
-20110926171509059-5128 = 1739
-20110926171509067-5129 = 1742
-20110926171509073-5130 = 1736
-20110926171509079-5131 = 1737
-20110926171509084-5132 = 1740
-20110926171509089-5133 = 1738
-20110926171509094-5134 = 1735
-20110926171509099-5135 = 1741
-20110930173048771-5200 = 1679
-20110930173048780-5201 = 1628
-20110930173048787-5202 = 1682
-20110930173048794-5203 = 1686
-20110930173048799-5204 = 1627
-20110930173048805-5205 = 1684
-20110930173048811-5206 = 1668
-20110930173048817-5207 = 1656
-20111013113013967-5332 = 1723
-20111013113013976-5333 = 1721
-20111013113013982-5334 = 1724
-20111013113013987-5335 = 1725
-20111013113013991-5336 = 1719
-20111013113013997-5337 = 1722
-20111013113014001-5338 = 2486
-20111013113014005-5339 = 2485
-20111027100116548-30919 = 1862
-20111027100116554-30920 = 1858
-20111027100116559-30921 = 1845
-20111027100116564-30922 = 1840
-20111027100116570-30923 = 1859
-20111027100116576-30924 = 1870
-20111027100116583-30925 = 1876
-20111027100116588-30926 = 1853
-20111031152022276-6886845 = 1888
-20111031152022283-6886846 = 1886
-20111031152022288-6886847 = 1881
-20111031152022294-6886848 = 1883
-20111031152022299-6886849 = 2339
-20111031152022305-6886850 = 1887
-20111031152022310-6886851 = 1884
-20111031152022316-6886852 = 1905
-20111109124517141-8007681 = 1918
-20111109124528501-8007682 = 1919
-20111109124538202-8007683 = 1912
-20111109124547350-8007684 = 1917
-20111109124556811-8007685 = 1915
-20111109124700955-8007686 = 1914
-20111115152506714-19519160 = 2149
-20111116170443345-19519187 = 2151
-20111116170649427-19519188 = 2152
-20111116170836661-19519189 = 2096
-20111116170949414-19519190 = 1966
-20111116171035686-19519191 = 2148
-20111116171044764-19519192 = 2147
-20111116171054225-19519193 = 2150
-20111124093717346-30845008 = 2161
-20111124093753125-30845009 = 2159
-20111124093805945-30845010 = 2156
-20111124093823893-30845011 = 2155
-20111124093838453-30845012 = 2162
-20111124093849455-30845013 = 2157
-20111124093859676-30845014 = 2158
-20111124093949998-30845015 = 2160
-20111125162630368-31094263 = 2172
-20111125162639758-31094264 = 2170
-20111125162648132-31094265 = 2165
-20111125162659163-31094266 = 2166
-20111125162708561-31094267 = 2171
-20111125162717330-31094268 = 2167
-20111125162728600-31094269 = 2169
-20111125162820338-31094270 = 2168
-20111202165037320-31094311 = 2194
-20111202165037329-31094312 = 2196
-20111202165037338-31094313 = 2199
-20111202165037345-31094314 = 2200
-20111202165037352-31094315 = 2195
-20111202165037360-31094316 = 2193
-20111202165037368-31094317 = 2198
-20111202165037375-31094318 = 2197
-20111202173036363-31094324 = 2280
-20111206153216085-32933074 = 2275
-20111206153216090-32933075 = 2272
-20111206153216095-32933076 = 2268
-20111206153216100-32933077 = 2269
-20111206153216105-32933078 = 2271
-20111206153216109-32933079 = 2274
-20111206153216113-32933080 = 2270
-20111206153216121-32933082 = 2273
-20111213153012524-46581714 = 2298
-20111213153012529-46581715 = 2301
-20111213153012534-46581716 = 2291
-20111213153012538-46581717 = 2292
-20111213153012545-46581719 = 2299
-20111213153012548-46581720 = 2297
-20111213153012553-46581721 = 2290
-20111213153012557-46581722 = 2300
-20111213162012966-46680667 = 2389
-20111213162012971-46680668 = 2388
-20111213162012977-46680669 = 2385
-20111213162012984-46680671 = 2386
-20111213162012989-46680672 = 2387
-20111220163023723-56006597 = 2405
-20111220163023731-56006598 = 2402
-20111220163023738-56006599 = 2406
-20111220163023744-56006600 = 2407
-20111220163023751-56006601 = 2401
-20111220163023757-56006602 = 2404
-20111220163023762-56006603 = 2408
-20111220163023768-56006604 = 2403
-20111220170021890-56006606 = 2421
-20111220170021896-56006607 = 2418
-20111220170021902-56006608 = 2424
-20111220170021907-56006609 = 2423
-20111220170021912-56006610 = 2420
-20111220170021918-56006611 = 2422
-20111220170021924-56006612 = 2425
-20111220170021931-56006613 = 2419
-20120105163504805-56010550 = 3041
-20120105163504811-56010551 = 3036
-20120105163504817-56010552 = 3039
-20120105163504822-56010553 = 3040
-20120105163504830-56010554 = 3035
-20120105163504838-56010555 = 3016
-20120105163504843-56010556 = 3038
-20120105163504848-56010557 = 3037
-20120105170038905-56010559 = 3076
-20120105170038912-56010560 = 3078
-20120105170038919-56010561 = 3075
-20120105170038925-56010562 = 3074
-20120105170038931-56010563 = 3080
-20120105170038937-56010564 = 3077
-20120105170038943-56010565 = 3073
-20120105170038948-56010566 = 3079
-20120113102828303-58395829 = 3006
-20120113102840860-58395830 = 3003
-20120113102852873-58395831 = 2999
-20120113102902474-58395832 = 3000
-20120113102915043-58395833 = 3005
-20120113102926653-58395834 = 3001
-20120113103050906-58395835 = 3004
-20120113103136726-58395836 = 3002
-20120113174211710-58395888 = 3102
-20120113174211716-58395889 = 3104
-20120113174211721-58395890 = 3099
-20120113174211726-58395891 = 3100
-20120113174211731-58395892 = 3103
-20120113174211736-58395893 = 3101
-20120113174211742-58395894 = 3098
-20120113174211747-58395895 = 3105
-20120113175144487-58395897 = 3007
-20120113175144498-58395898 = 3010
-20120113175144505-58395899 = 3014
-20120113175144510-58395900 = 3013
-20120113175144517-58395901 = 3011
-20120113175144524-58395902 = 3008
-20120113175144529-58395903 = 3012
-20120113175144534-58395904 = 3009
-20120119144309285-60397187 = 2591
-20120119144309292-60397188 = 2588
-20120119144309297-60397189 = 2594
-20120119144309304-60397190 = 2593
-20120119144309310-60397191 = 2529
-20120119144309315-60397192 = 2592
-20120119144309321-60397193 = 2595
-20120119144309326-60397194 = 2589
-20120126112933908-60397756 = 3126
-20120126112933915-60397757 = 3129
-20120126112933921-60397758 = 3131
-20120126112933926-60397759 = 3132
-20120126112933932-60397760 = 3127
-20120126112933938-60397761 = 3125
-20120126112933945-60397762 = 3130
-20120126112933950-60397763 = 3128
-20120127152728774-60397877 = 3148
-20120127152743722-60397878 = 3146
-20120127152814026-60397879 = 3143
-20120127152826763-60397880 = 3142
-20120127152857313-60397881 = 3149
-20120127152907513-60397882 = 3144
-20120127153027663-60397883 = 3145
-20120127153114700-60397884 = 3147
-20120209155957200-60398012 = 3245
-20120209155957206-60398013 = 3242
-20120209155957211-60398014 = 3238
-20120209155957217-60398015 = 3239
-20120209155957223-60398016 = 3241
-20120209155957228-60398017 = 3244
-20120209155957236-60398018 = 3240
-20120209155957242-60398019 = 3243
-20120215144011662-60398118 = 3268
-20120215144011670-60398119 = 3265
-20120215144011677-60398120 = 3271
-20120215144011684-60398121 = 3274
-20120215144011690-60398122 = 3267
-20120215144011698-60398123 = 3269
-20120215144011705-60398124 = 3273
-20120215144011712-60398125 = 3266
-20120217124053431-60398146 = 3257
-20120217124113643-60398147 = 3259
-20120217124124306-60398148 = 3262
-20120217124136020-60398149 = 3263
-20120217124145802-60398150 = 3256
-20120217124154317-60398151 = 3261
-20120217124201986-60398152 = 3260
-20120217124245321-60398153 = 3258
-20120224150007051-60398208 = 3457
-20120224150007061-60398209 = 3382
-20120224150007080-60398211 = 3276
-20120224150007087-60398212 = 3329
-20120224150007093-60398213 = 3431
-20120224150007100-60398214 = 3456
-20120224150007106-60398215 = 3378
-20120306152009283-60398636 = 3495
-20120306152009289-60398637 = 3492
-20120306152009296-60398638 = 3488
-20120306152009302-60398639 = 3489
-20120306152009308-60398640 = 3491
-20120306152009314-60398641 = 3494
-20120306152009319-60398642 = 3490
-20120306152009324-60398643 = 3493
-20120306162009227-60398645 = 3522
-20120306162009234-60398646 = 3524
-20120306162009241-60398647 = 3521
-20120306162009247-60398648 = 3520
-20120306162009253-60398649 = 3526
-20120306162009259-60398650 = 3523
-20120306162009265-60398651 = 3805
-20120306162009271-60398652 = 3525
-20120313123229824-60398842 = 3666
-20120313123347844-60398843 = 3669
-20120313123400417-60398844 = 3663
-20120313123504856-60398845 = 3664
-20120313123549079-60398846 = 3667
-20120313123655509-60398847 = 3665
-20120313123706173-60398848 = 3662
-20120313123813502-60398849 = 3668
-20120315155009442-60398967 = 3728
-20120315155009450-60398968 = 3725
-20120315155009458-60398969 = 3721
-20120315155009465-60398970 = 3722
-20120315155009472-60398971 = 3724
-20120315155009479-60398972 = 3727
-20120315155009486-60398973 = 3723
-20120315155009495-60398974 = 3726
-20120327111019853-60399075 = 3749
-20120327111019860-60399076 = 3754
-20120327111019866-60399077 = 3764
-20120327111019872-60399078 = 3769
-20120327111019878-60399079 = 3750
-20120327111019885-60399080 = 3760
-20120327111019891-60399081 = 3771
-20120327111019897-60399082 = 3744
-20120404143842979-60399184 = 3799
-20120404143857664-60399185 = 3796
-20120404143908551-60399186 = 3802
-20120404143924639-60399187 = 3801
-20120404144043061-60399188 = 3800
-20120404144226270-60399189 = 3803
-20120404144237325-60399190 = 3797
-20120404144344378-60399191 = 3798
-20120412124011430-60399233 = 3896
-20120412124011435-60399234 = 3898
-20120412124011440-60399235 = 3897
-20120412124011445-60399236 = 4292
-20120412124011449-60399237 = 3895
-20120412124011453-60399238 = 3899
-20120412124011458-60399239 = 3893
-20120412124011462-60399240 = 3894
-20120416140613669-60399279 = 3836
-20120416140613677-60399280 = 3834
-20120416140613683-60399281 = 3833
-20120416140613689-60399282 = 3835
-20120416140613695-60399283 = 3837
-20120416140613700-60399284 = 3839
-20120416140613706-60399285 = 3838
-20120416140613711-60399286 = 3840
-20120420104805614-60399425 = 3965
-20120420104805619-60399426 = 3962
-20120420104805624-60399427 = 3960
-20120420104805631-60399428 = 3959
-20120420104805636-60399429 = 3964
-20120420104805643-60399430 = 4010
-20120420104805648-60399431 = 3961
-20120420104805654-60399432 = 3963
-20120427125614128-60399646 = 4280
-20120427125614134-60399647 = 4277
-20120427125614141-60399648 = 4281
-20120427125614146-60399649 = 4278
-20120427125614153-60399650 = 4274
-20120427125614158-60399651 = 4275
-20120427125614164-60399652 = 4276
-20120427125614170-60399653 = 4279
-20120504110615536-60399799 = 4104
-20120504110615544-60399800 = 4106
-20120504110615551-60399801 = 4111
-20120504110615558-60399802 = 4110
-20120504110615564-60399803 = 4108
-20120504110615570-60399804 = 4105
-20120504110615576-60399805 = 4109
-20120504110615582-60399806 = 4107
-20120511113620386-60399887 = 4136
-20120511113620396-60399888 = 4138
-20120511113620405-60399889 = 4135
-20120511113620414-60399890 = 4134
-20120511113620423-60399891 = 4140
-20120511113620430-60399892 = 4137
-20120511113620437-60399893 = 4133
-20120511113620444-60399894 = 4139
-20120525114328674-60400382 = 4403
-20120525114328682-60400383 = 4401
-20120525114328691-60400384 = 4404
-20120525114328699-60400385 = 4405
-20120525114328706-60400386 = 4399
-20120525114328714-60400387 = 4402
-20120525114328723-60400388 = 4406
-20120525114328731-60400389 = 4400
-20120525114423248-60400391 = 4415
-20120525114423257-60400392 = 4319
-20120525114423264-60400393 = 4433
-20120525114423271-60400394 = 4435
-20120525114423279-60400395 = 4429
-20120525114423289-60400396 = 4427
-20120525114423300-60400397 = 4436
-20120525114423307-60400398 = 4431
-20120606115418775-60400564 = 4479
-20120606115418783-60400565 = 4477
-20120606115418789-60400566 = 4473
-20120606115418795-60400567 = 4474
-20120606115418801-60400568 = 4475
-20120606115418808-60400569 = 4478
-20120606115418815-60400570 = 4465
-20120606115418821-60400571 = 4476
-20120606120812962-60400573 = 4537
-20120606120812967-60400574 = 4539
-20120606120812972-60400575 = 4540
-20120606120812977-60400576 = 4534
-20120606120812983-60400577 = 4538
-20120606120812988-60400578 = 4535
-20120606120812992-60400579 = 4536
-20120606120812997-60400580 = 4541
-20120612103612900-60400700 = 4606
-20120612103612908-60400701 = 4622
-20120612103612916-60400702 = 4624
-20120612103612923-60400703 = 4608
-20120612103612931-60400704 = 4605
-20120612103612939-60400705 = 4607
-20120612103612948-60400706 = 4610
-20120612103612956-60400707 = 4604
-20120618162411407-60401924 = 4692
-20120618162411414-60401925 = 4694
-20120618162411419-60401926 = 4697
-20120618162411425-60401927 = 4698
-20120618162411431-60401928 = 4693
-20120618162411437-60401929 = 4691
-20120618162411443-60401930 = 4696
-20120618162411448-60401931 = 4695
-20120625112207079-60401997 = 4649
-20120625112207088-60401998 = 4652
-20120625112207095-60401999 = 4648
-20120625112207102-60402000 = 4647
-20120625112207110-60402001 = 4653
-20120625112207117-60402002 = 4650
-20120625112207125-60402003 = 4646
-20120625112207132-60402004 = 4651
-20120702153422414-60402091 = 4940
-20120702153422422-60402092 = 4942
-20120702153422429-60402093 = 4937
-20120702153422436-60402094 = 4938
-20120702153422445-60402095 = 4941
-20120702153422453-60402096 = 5159
-20120702153422461-60402097 = 4936
-20120702153422468-60402098 = 4943
-20120705111214714-60402221 = 4847
-20120705111214721-60402222 = 4849
-20120705111214727-60402223 = 4853
-20120705111214733-60402224 = 4852
-20120705111214739-60402225 = 4850
-20120705111214746-60402226 = 4848
-20120705111214752-60402227 = 4851
-20120705111214758-60402228 = 4840
-20120710111010138-60402391 = 4993
-20120710111010144-60402392 = 4990
-20120710111010150-60402393 = 4988
-20120710111010155-60402394 = 4987
-20120710111010161-60402395 = 4992
-20120710111010167-60402396 = 4994
-20120710111010172-60402397 = 4989
-20120710111010177-60402398 = 4991
-20120717115016575-60402508 = 5023
-20120717115016583-60402509 = 5018
-20120717115016591-60402510 = 5015
-20120717115016598-60402511 = 5021
-20120717115016606-60402512 = 5020
-20120717115016613-60402513 = 5024
-20120717115016621-60402514 = 5022
-20120717115016628-60402515 = 5019
-20120717124611961-60402517 = 5041
-20120717124611969-60402518 = 5045
-20120717124611978-60402519 = 5044
-20120717124611985-60402520 = 5035
-20120717124611992-60402521 = 5046
-20120717124612001-60402522 = 5047
-20120717124612009-60402523 = 5043
-20120717124612017-60402524 = 5039
-20120725144841917-60402818 = 5659
-20120727113414183-60402832 = 5217
-20120727113414191-60402833 = 5219
-20120727113414198-60402834 = 5222
-20120727113414206-60402835 = 5223
-20120727113414212-60402836 = 5218
-20120727113414219-60402837 = 5216
-20120727113414229-60402838 = 5221
-20120727113414236-60402839 = 5220
-20120727122030657-60402842 = 5654
-20120727122030666-60402843 = 5653
-20120727122030675-60402844 = 5650
-20120727122030683-60402845 = 5649
-20120727122030693-60402846 = 5657
-20120727122030702-60402847 = 5655
-20120727122030711-60402848 = 5651
-20120727122030718-60402849 = 5652
-20120808095418813-60403532 = 5712
-20120808095418821-60403533 = 5715
-20120808095418830-60403534 = 5709
-20120808095418837-60403535 = 5710
-20120808095418845-60403536 = 5713
-20120808095418852-60403537 = 5711
-20120808095418860-60403538 = 5708
-20120808095418868-60403539 = 5714
-20120817123015190-60403697 = 5753
-20120817123015196-60403698 = 5750
-20120817123015202-60403699 = 5756
-20120817123015206-60403700 = 5755
-20120817123015211-60403701 = 5752
-20120817123015216-60403702 = 5754
-20120817123015221-60403703 = 5757
-20120817123015226-60403704 = 5751
-20120821111407265-60403749 = 5815
-20120821111407270-60403750 = 5812
-20120821111407277-60403751 = 5808
-20120821111407284-60403752 = 5809
-20120821111407290-60403753 = 5811
-20120821111407296-60403754 = 5814
-20120821111407302-60403755 = 5810
-20120821111407308-60403756 = 5813
-20120827152950859-60403941 = 5940
-20120830123814716-60403947 = 5932
-20120830123814724-60403948 = 5935
-20120830123814732-60403949 = 5939
-20120830123814740-60403950 = 5938
-20120830123814750-60403951 = 5936
-20120830123814758-60403952 = 5933
-20120830123814766-60403953 = 5937
-20120830123814773-60403954 = 5934
-20120911102013785-60404194 = 6085
-20120911102013792-60404195 = 6088
-20120911102013799-60404196 = 6090
-20120911102013806-60404197 = 6091
-20120911102013813-60404198 = 6086
-20120911102013821-60404199 = 6084
-20120911102013828-60404200 = 6089
-20120911102013836-60404201 = 6087
-20120917113811498-60404914 = 6095
-20120917113811506-60404915 = 6098
-20120917113811517-60404916 = 6094
-20120917113811524-60404917 = 26929
-20120917113811530-60404918 = 6099
-20120917113811538-60404919 = 6096
-20120917113811546-60404920 = 6092
-20120917113811552-60404921 = 6097
-20120925172436757-60405088 = 6614
-20120925172436766-60405089 = 6611
-20120925172436774-60405090 = 6636
-20120925172436783-60405091 = 6616
-20120925172436791-60405092 = 6610
-20120925172436799-60405093 = 6613
-20120925172436808-60405094 = 6635
-20120925172436816-60405095 = 6612
-20120928114612853-60405097 = 6169
-20120928114612859-60405098 = 6167
-20120928114612866-60405099 = 6178
-20120928114612873-60405100 = 6171
-20120928114612881-60405101 = 6168
-20120928114612889-60405102 = 6170
-20120928114612897-60405103 = 6173
-20120928114612904-60405104 = 6166
-20121003114009009-60405221 = 7181
-20121003114009017-60405222 = 7182
-20121003114009023-60405223 = 7187
-20121003114009029-60405224 = 7186
-20121003114009035-60405225 = 7184
-20121003114009041-60405226 = 7185
-20121003114009047-60405227 = 7188
-20121003114009053-60405228 = 7183
-20121013120615890-60405286 = 6632
-20121013120615900-60405287 = 6630
-20121013120615907-60405288 = 6627
-20121013120615913-60405289 = 6626
-20121013120615921-60405290 = 6631
-20121013120615928-60405291 = 6633
-20121013120615936-60405292 = 6628
-20121013120615942-60405293 = 6629
-20121019102214857-60405797 = 6700
-20121019102214865-60405798 = 6697
-20121019102214872-60405799 = 6703
-20121019102214878-60405800 = 6702
-20121019102214884-60405801 = 6716
-20121019102214891-60405802 = 6701
-20121019102214896-60405803 = 6704
-20121019102214903-60405804 = 6698
-20121026142410765-60406542 = 7544
-20121026142410773-60406543 = 7545
-20121026142410780-60406544 = 7546
-20121026142410785-60406545 = 7547
-20121026142410791-60406546 = 8103
-20121026142410798-60406547 = 7549
-20121026142410806-60406548 = 7550
-20121026142410811-60406549 = 7551
-20121029181607907-60406587 = 7255
-20121029181607912-60406588 = 7253
-20121029181607919-60406589 = 7251
-20121029181607924-60406590 = 7250
-20121029181607929-60406591 = 7254
-20121029181607936-60406592 = 7256
-20121029181607942-60406593 = 7252
-20121029181607947-60406594 = 7298
-20121030115624887-60406607 = 7208
-20121030115631586-60406608 = 7207
-20121102154200905-60407020 = 7724
-20121102154204647-60407021 = 7869
-20121103091208986-60407047 = 7581
-20121103091208994-60407048 = 7579
-20121103091209001-60407049 = 7576
-20121103091209008-60407050 = 7575
-20121103091209015-60407051 = 7580
-20121103091209022-60407052 = 7582
-20121103091209030-60407053 = 7577
-20121103091209037-60407054 = 7578
-20121113111609476-60407345 = 7740
-20121113111609484-60407346 = 7736
-20121113111609491-60407347 = 7737
-20121113111609498-60407348 = 7734
-20121113111609505-60407349 = 7739
-20121113111609511-60407350 = 7738
-20121113111609518-60407351 = 7733
-20121113111609523-60407352 = 7735
-20121113130406843-60407354 = 7713
-20121113130406850-60407355 = 7710
-20121113130406856-60407356 = 7708
-20121113130406862-60407357 = 7707
-20121113130406868-60407358 = 7712
-20121113130406875-60407359 = 7714
-20121113130406883-60407360 = 7709
-20121113130406889-60407361 = 7711
-20121120105624562-60407557 = 7804
-20121120105624571-60407558 = 7802
-20121120105624578-60407559 = 7809
-20121120105624585-60407560 = 7808
-20121120105624593-60407561 = 7803
-20121120105624600-60407562 = 7806
-20121120105624607-60407563 = 7805
-20121120105624614-60407564 = 7807
-20121123122418416-60407651 = 8122
-20121123122418422-60407652 = 8128
-20121123122418428-60407653 = 8123
-20121123122418434-60407654 = 8124
-20121123122418439-60407655 = 8126
-20121123122418446-60407656 = 8129
-20121123122418452-60407657 = 8125
-20121123122418457-60407658 = 8127
-20121127112813823-60407720 = 8046
-20121127112813830-60407721 = 8043
-20121127112813837-60407722 = 8047
-20121127112813844-60407723 = 8757
-20121127112813851-60407724 = 8042
-20121127112813857-60407725 = 8766
-20121127112813864-60407726 = 8774
-20121127112813869-60407727 = 8784
-20121129112014286-60407868 = 8368
-20121129112014292-60407869 = 8365
-20121129112014297-60407870 = 8369
-20121129112014304-60407871 = 8370
-20121129112014309-60407872 = 8364
-20121129112014315-60407873 = 8367
-20121129112014319-60407874 = 8371
-20121129112014325-60407875 = 8366
-20121130160813307-60408030 = 8177
-20121130160813315-60408031 = 8182
-20121130160813322-60408032 = 8180
-20121130160813327-60408033 = 8179
-20121130160813332-60408034 = 8184
-20121130160813338-60408035 = 8181
-20121130160813344-60408036 = 8178
-20121130160813351-60408037 = 8183
-20121207170558909-60408468 = 8378
-20121207170558924-60408469 = 8375
-20121207170558939-60408470 = 8373
-20121207170558953-60408471 = 8372
-20121207170558966-60408472 = 8377
-20121207170558988-60408473 = 8746
-20121207170559006-60408474 = 8374
-20121207170559019-60408475 = 8376
-20121212111609369-60408661 = 8421
-20121212111609377-60408662 = 8423
-20121212111609383-60408663 = 8419
-20121212111609390-60408664 = 8424
-20121212111609396-60408665 = 8425
-20121212111609402-60408666 = 8422
-20121212111609409-60408667 = 8420
-20121212111609415-60408668 = 8426
-20121218104202329-60408793 = 8478
-20121218110412741-60408795 = 8462
-20121218110412760-60408796 = 8465
-20121218110412767-60408797 = 8460
-20121218110412774-60408798 = 8467
-20121218110412781-60408799 = 8463
-20121218110412787-60408800 = 8464
-20121218110412794-60408801 = 8461
-20121218110412800-60408802 = 8466
-20130104112813769-60409072 = 8522
-20130104112813778-60409073 = 8524
-20130104112813786-60409074 = 8519
-20130104112813794-60409075 = 8520
-20130104112813802-60409076 = 8523
-20130104112813808-60409077 = 8521
-20130104112813815-60409078 = 8518
-20130104112813821-60409079 = 8525
-20130111133549473-60409201 = 8586
-20130115102816314-60409230 = 8682
-20130115112412967-60409238 = 8576
-20130115112412973-60409239 = 8578
-20130115112412980-60409240 = 8573
-20130115112412987-60409241 = 8574
-20130115112412994-60409242 = 8577
-20130115112413002-60409243 = 8575
-20130115112413008-60409244 = 8572
-20130115112413014-60409245 = 8579
-20130118105206318-60409278 = 8967
-20130118105206324-60409279 = 8965
-20130118105206331-60409280 = 8960
-20130118105206337-60409281 = 8961
-20130118105206342-60409282 = 8963
-20130118105206347-60409283 = 8966
-20130118105206354-60409284 = 8962
-20130118105206360-60409285 = 8964
-20130118110405781-60409287 = 8732
-20130118110405799-60409288 = 8735
-20130118110405806-60409289 = 8739
-20130118110405814-60409290 = 8738
-20130118110405820-60409291 = 8736
-20130118110405827-60409292 = 8733
-20130118110405834-60409293 = 8737
-20130118110405840-60409294 = 8734
-20130124104010537-60409594 = 8837
-20130124104010545-60409595 = 8817
-20130124104010552-60409596 = 8801
-20130124104010559-60409597 = 8808
-20130124104010566-60409598 = 8843
-20130124104010573-60409599 = 8840
-20130124104010579-60409600 = 8842
-20130124104010586-60409601 = 8841
-20130201104415424-60409857 = 9054
-20130201104415432-60409858 = 9051
-20130201104415438-60409859 = 9055
-20130201104415444-60409860 = 9056
-20130201104415450-60409861 = 9050
-20130201104415458-60409862 = 9053
-20130201104415464-60409863 = 9057
-20130201104415471-60409864 = 9052
-20130206162625876-60409974 = 9070
-20130206162713329-60409975 = 9079
-20130208122012573-60410015 = 9141
-20130208122012670-60410016 = 9143
-20130208122012678-60410017 = 9140
-20130208122012686-60410018 = 9139
-20130208122012693-60410019 = 9145
-20130208122012701-60410020 = 9142
-20130208122012708-60410021 = 9138
-20130208122012717-60410022 = 9144
-20130208153209913-60410024 = 9241
-20130208153209922-60410025 = 9238
-20130208153209929-60410026 = 9244
-20130208153209935-60410027 = 9243
-20130208153209941-60410028 = 9317
-20130208153209948-60410029 = 9242
-20130208153209954-60410030 = 9245
-20130208153209961-60410031 = 9239
-20130214105609636-60410104 = 9180
-20130214105609642-60410105 = 9182
-20130214105609647-60410106 = 9185
-20130214105609652-60410107 = 9186
-20130214105609659-60410108 = 9181
-20130214105609668-60410109 = 9179
-20130214105609675-60410110 = 9184
-20130214105609682-60410111 = 9183
-20130220121112375-60410143 = 9157
-20130220121209377-60410144 = 9148
-20130221110411926-60410212 = 9314
-20130221110411935-60410213 = 9312
-20130221110411943-60410214 = 9309
-20130221110411950-60410215 = 9308
-20130221110411959-60410216 = 9313
-20130221110411968-60410217 = 9315
-20130221110411976-60410218 = 9310
-20130221110411984-60410219 = 9311
-20130227114414125-60410375 = 9417
-20130227114414137-60410376 = 9420
-20130227114414149-60410377 = 9422
-20130227114414162-60410378 = 9423
-20130227114414177-60410379 = 9418
-20130227114414194-60410380 = 9424
-20130227114414206-60410381 = 9425
-20130227114414216-60410382 = 9426
-20130227115613221-60410384 = 9375
-20130227115613232-60410385 = 9377
-20130227115613243-60410386 = 9380
-20130227115613252-60410387 = 9381
-20130227115613262-60410388 = 9376
-20130227115613274-60410389 = 9374
-20130227115613284-60410390 = 9379
-20130227115613295-60410391 = 9378
-20130304141030443-60410476 = 9393
-20130312093624504-60410573 = 9438
-20130312100010331-60410586 = 9522
-20130312100010342-60410587 = 9520
-20130312100010353-60410588 = 9523
-20130312100010363-60410589 = 9524
-20130312100010373-60410590 = 9518
-20130312100010383-60410591 = 9521
-20130312100010393-60410592 = 9525
-20130312100010403-60410593 = 9529
-20130315123609176-60410776 = 9541
-20130315123609184-60410777 = 9543
-20130315123609191-60410778 = 9542
-20130315123609198-60410779 = 9547
-20130315123609206-60410780 = 9622
-20130315123609213-60410781 = 9540
-20130315123609219-60410782 = 9545
-20130315123609225-60410783 = 9544
-20130315125932485-60410785 = 9579
-20130315125932502-60410786 = 9601
-20130315125932515-60410787 = 9570
-20130315125932526-60410788 = 9564
-20130315125932542-60410789 = 9602
-20130315125932561-60410790 = 9583
-20130315125932581-60410791 = 9558
-20130315125932600-60410792 = 9592
-20130321104037354-60410985 = 9739
-20130321110812651-60410993 = 9914
-20130321110812681-60410994 = 9912
-20130321110812688-60410995 = 9909
-20130321110812696-60410996 = 9908
-20130321110812703-60410997 = 9913
-20130321110812710-60410998 = 9915
-20130321110812718-60410999 = 9910
-20130321110812726-60411000 = 9911
-20130321112012637-60411002 = 9880
-20130321112012661-60411003 = 9882
-20130321112012669-60411004 = 10085
-20130321112012675-60411005 = 9874
-20130321112012683-60411006 = 9892
-20130321112012694-60411007 = 9881
-20130321112012703-60411008 = 9873
-20130321112012712-60411009 = 9885
-20130322095006903-60411140 = 9751
-20130328104007833-60411427 = 10034
-20130328104007843-60411428 = 10037
-20130328104007852-60411429 = 10031
-20130328104007861-60411430 = 10032
-20130328104007871-60411431 = 10035
-20130328104007880-60411432 = 10033
-20130328104007888-60411433 = 10030
-20130328104007898-60411434 = 10036
-20130404103207720-60411581 = 10129
-20130404103207729-60411582 = 10131
-20130404103207738-60411583 = 10136
-20130404103207747-60411584 = 10135
-20130404103207756-60411585 = 10133
-20130404103207765-60411586 = 10130
-20130404103207773-60411587 = 10134
-20130404103207782-60411588 = 10132
-20130416105209833-60411715 = 10179
-20130416105209840-60411716 = 10182
-20130416105209849-60411717 = 10178
-20130416105209857-60411718 = 10177
-20130416105209865-60411719 = 10183
-20130416105209872-60411720 = 10180
-20130416105209881-60411721 = 10176
-20130416105209890-60411722 = 10181
-20130418110019695-60411749 = 10203
-20130418110019708-60411750 = 10206
-20130418110019721-60411751 = 10208
-20130418110019733-60411752 = 10209
-20130418110019746-60411753 = 10204
-20130418110019757-60411754 = 10202
-20130418110019769-60411755 = 10207
-20130418110019780-60411756 = 10205
-20130424110814698-60411984 = 10355
-20130424110814710-60411985 = 10353
-20130424110814721-60411986 = 10350
-20130424110814732-60411987 = 10349
-20130424110814742-60411988 = 10354
-20130424110814760-60411989 = 10356
-20130424110814773-60411990 = 10351
-20130424110814783-60411991 = 10352
-20130424115104435-60411993 = 10268
-20130424115104445-60411994 = 10270
-20130424115104456-60411995 = 10273
-20130424115104466-60411996 = 10274
-20130424115104476-60411997 = 10269
-20130424115104486-60411998 = 10267
-20130424115104496-60411999 = 10272
-20130424115104507-60412000 = 10271
-20130501110813877-60412150 = 10411
-20130501110813887-60412151 = 10409
-20130501110813896-60412152 = 10414
-20130501110813905-60412153 = 10413
-20130501110813913-60412154 = 10410
-20130501110813921-60412155 = 10412
-20130501110813930-60412156 = 10415
-20130501110813940-60412157 = 10408
-20130508143446619-60412282 = 10423
-20130514121214397-60412340 = 10451
-20130516112808409-60412347 = 10557
-20130516112808418-60412348 = 10555
-20130516112808428-60412349 = 10560
-20130516112808437-60412350 = 10559
-20130516112808446-60412351 = 10556
-20130516112808455-60412352 = 10558
-20130516112808464-60412353 = 10561
-20130516112808474-60412354 = 10554
-20130516114008448-60412358 = 10562
-20130516114008457-60412359 = 10565
-20130516114008467-60412360 = 10569
-20130516114008481-60412361 = 10568
-20130516114008496-60412362 = 10566
-20130516114008505-60412363 = 10563
-20130516114008513-60412364 = 10567
-20130516114008521-60412365 = 10658
-20130522154211227-60412585 = 10581
-20130524120807629-60412745 = 10858
-20130524120807637-60412746 = 10860
-20130524120807648-60412747 = 10855
-20130524120807657-60412748 = 10856
-20130524120807668-60412749 = 10859
-20130524120807677-60412750 = 10857
-20130524120807689-60412751 = 10854
-20130524120807699-60412752 = 10861
-20130524122006836-60412754 = 10657
-20130524122006844-60412755 = 10654
-20130524122006851-60412756 = 10650
-20130524122006858-60412757 = 10651
-20130524122006871-60412758 = 10653
-20130524122006879-60412759 = 10656
-20130524122006887-60412760 = 10652
-20130524122006898-60412761 = 10655
-20130530161331750-60412888 = 10853
-20130606125208381-60413194 = 10901
-20130606161207286-60413217 = 10951
-20130606161207305-60413218 = 10954
-20130606161207320-60413219 = 10958
-20130606161207338-60413220 = 10957
-20130606161207355-60413221 = 10964
-20130606161207375-60413222 = 10952
-20130606161207393-60413223 = 10956
-20130606161207411-60413224 = 10953
-20130611112823059-60413342 = 10976
-20130613114014501-60413396 = 11237
-20130613114014517-60413397 = 11239
-20130613114014532-60413398 = 11242
-20130613114014547-60413399 = 11243
-20130613114014559-60413400 = 11238
-20130613114014569-60413401 = 11236
-20130613114014580-60413402 = 11241
-20130613114014592-60413403 = 11240
-20130613115213549-60413405 = 11034
-20130613115213564-60413406 = 11036
-20130613115213579-60413407 = 11041
-20130613115213596-60413408 = 11040
-20130613115213612-60413409 = 11038
-20130613115213628-60413410 = 11035
-20130613115213641-60413411 = 11039
-20130613115213653-60413412 = 11037
-20130614112909080-60413417 = 11043
-20130618174007738-60413554 = 11119
-20130618174007750-60413555 = 11116
-20130618174007761-60413556 = 11120
-20130618174007775-60413557 = 11121
-20130618174007789-60413558 = 11115
-20130618174007803-60413559 = 11118
-20130618174007814-60413560 = 11122
-20130618174007825-60413561 = 11117
-20130620110018465-60413603 = 11154
-20130624120616760-60414290 = 11287
-20130625104414308-60414400 = 11651
-20130625104414323-60414401 = 11649
-20130625104414340-60414402 = 11647
-20130625104414353-60414403 = 11646
-20130625104414363-60414404 = 11650
-20130625104414376-60414405 = 11652
-20130625104414388-60414406 = 11648
-20130625141901291-60414449 = 11670
-20130625141916731-60414450 = 11669
-20130625142000668-60414451 = 11671
-20130626102411175-60414476 = 11360
-20130626102411186-60414477 = 11358
-20130626102411196-60414478 = 11353
-20130626102411207-60414479 = 11354
-20130626102411220-60414480 = 11356
-20130626102411231-60414481 = 11359
-20130626102411242-60414482 = 11355
-20130626102411254-60414483 = 11357
-20130626105611184-60414485 = 11308
-20130628174412428-60414617 = 11376
-20130701110607663-60414725 = 11428
-20130701113214336-60414727 = 11477
-20130701113214354-60414728 = 11474
-20130701113214370-60414729 = 11478
-20130701113214383-60414730 = 11479
-20130701113214394-60414731 = 11473
-20130701113214409-60414732 = 11476
-20130701113214422-60414733 = 11480
-20130701113214437-60414734 = 11475
-20130705112414430-60414934 = 11730
-20130705112414449-60414935 = 11727
-20130705112414466-60414936 = 11725
-20130705112414483-60414937 = 11724
-20130705112414497-60414938 = 11729
-20130705112414512-60414939 = 11731
-20130705112414523-60414940 = 11726
-20130705112414532-60414941 = 11728
-20130708103257720-60415116 = 11763
-20130708103327927-60415117 = 11663
-20130710113610200-60415209 = 11852
-20130710113610226-60415210 = 11854
-20130710113610248-60415211 = 11851
-20130710113610263-60415212 = 11850
-20130710113610280-60415213 = 11856
-20130710113610305-60415214 = 11853
-20130710113610325-60415215 = 11849
-20130710113610341-60415216 = 11855
-20130710123609070-60415218 = 11864
-20130710123609085-60415219 = 11861
-20130710123609100-60415220 = 11857
-20130710123609114-60415221 = 11858
-20130710123609124-60415222 = 11860
-20130710123609137-60415223 = 11863
-20130710123609147-60415224 = 11859
-20130710123609159-60415225 = 11862
-20130710154612100-60415305 = 12147
-20130715094805853-60415443 = 11889
-20130715094805859-60415444 = 11893
-20130715094805865-60415445 = 11969
-20130715094805871-60415446 = 11881
-20130715094805877-60415447 = 11894
-20130715094805882-60415448 = 11899
-20130715094805888-60415449 = 11905
-20130715094805894-60415450 = 11902
-20130717104808501-60415560 = 12114
-20130717104808507-60415561 = 12116
-20130717104808513-60415562 = 12121
-20130717104808518-60415563 = 12120
-20130717104808524-60415564 = 12157
-20130717104808530-60415565 = 12166
-20130717104808535-60415566 = 12119
-20130717104808540-60415567 = 12117
-20130718112408108-60415658 = 11961
-20130718112408114-60415659 = 11963
-20130718112408120-60415660 = 11968
-20130718112408124-60415661 = 11967
-20130718112408128-60415662 = 11965
-20130718112408133-60415663 = 11962
-20130718112408138-60415664 = 11966
-20130718112408143-60415665 = 11964
-20130724161609584-60415760 = 12039
-20130724161609588-60415761 = 12037
-20130724161609593-60415762 = 12032
-20130724161609598-60415763 = 12033
-20130724161609604-60415764 = 12035
-20130724161609610-60415765 = 12038
-20130724161609614-60415766 = 12034
-20130724161609619-60415767 = 12036
-20130725154017379-60415771 = 11989
-20130805124221737-60416105 = 12203
-20130807112811862-60416132 = 12378
-20130807112811870-60416133 = 12381
-20130807112811878-60416134 = 12383
-20130807112811887-60416135 = 12384
-20130807112811895-60416136 = 12379
-20130807112811903-60416137 = 12377
-20130807112811911-60416138 = 12382
-20130807112811919-60416139 = 12380
-20130807113441652-60416141 = 12372
-20130807113441657-60416142 = 13150
-20130807113441662-60416143 = 12375
-20130807113441667-60416144 = 12374
-20130807113441672-60416145 = 12371
-20130807113441677-60416146 = 12373
-20130807113441682-60416147 = 12376
-20130807113441688-60416148 = 12369
-20130807142813334-60416167 = 12210
-20130813161813287-60416441 = 12392
-20130814120813041-60416443 = 12525
-20130814120813048-60416444 = 12531
-20130814120813055-60416445 = 12526
-20130814120813063-60416446 = 12527
-20130814120813071-60416447 = 12529
-20130814120813078-60416448 = 12524
-20130814120813086-60416449 = 12528
-20130814120813094-60416450 = 12530
-20130814123211938-60416452 = 12519
-20130814123211944-60416453 = 12522
-20130814123211948-60416454 = 12518
-20130814123211954-60416455 = 12517
-20130814123211958-60416456 = 12523
-20130814123211963-60416457 = 12520
-20130814123211968-60416458 = 12516
-20130814123211973-60416459 = 12521
-20130821162606120-60416725 = 12817
-20130821163607577-60416727 = 12637
-20130821163607585-60416728 = 12634
-20130821163607593-60416729 = 12630
-20130821163607601-60416730 = 12631
-20130821163607608-60416731 = 12633
-20130821163607616-60416732 = 12636
-20130821163607623-60416733 = 12632
-20130821163607630-60416734 = 12635
-20130821164806568-60416736 = 12699
-20130821164806574-60416737 = 12697
-20130821164806579-60416738 = 12694
-20130821164806584-60416739 = 12693
-20130821164806590-60416740 = 12698
-20130821164806595-60416741 = 12700
-20130821164806600-60416742 = 12662
-20130821164806606-60416743 = 12661
-20130823175205935-60416760 = 12656
-20130826173805228-60416906 = 12712
-20130827144845643-60416944 = 13062
-20130827144845649-60416945 = 13065
-20130827144845662-60416947 = 13060
-20130827144845668-60416948 = 13066
-20130827144845674-60416949 = 13063
-20130827144845680-60416950 = 13059
-20130827144845686-60416951 = 13064
-20130829134413141-60417057 = 12788
-20130829134413150-60417058 = 12791
-20130829134413158-60417059 = 12787
-20130829134413166-60417060 = 12786
-20130829134413174-60417061 = 12792
-20130829134413181-60417062 = 12789
-20130829134413189-60417063 = 12785
-20130829134413197-60417064 = 12790
-20130830121406372-60417117 = 12815
-20130902143517608-60417285 = 12799
-20130902143537949-60417286 = 12816
-20130902160940923-60417294 = 12834
-20130904104807932-60417326 = 12879
-20130904104807938-60417327 = 12882
-20130904104807944-60417328 = 12886
-20130904104807950-60417329 = 12885
-20130904104807956-60417330 = 12883
-20130904104807961-60417331 = 12880
-20130904104807966-60417332 = 12884
-20130904104807972-60417333 = 12881
-20130904134409267-60417335 = 12841
-20130906090602099-60417387 = 13141
-20130906090620484-60417388 = 13132
-20130906115405137-60417401 = 12914
-20130912174135997-60417716 = 13139
-20130913152721165-60417727 = 13125
-20130913152721173-60417728 = 13123
-20130913152721181-60417729 = 13128
-20130913152721189-60417730 = 13127
-20130913152721197-60417731 = 13124
-20130913152721205-60417732 = 13126
-20130913152721212-60417733 = 13129
-20130913152721220-60417734 = 13122
-20130918145007903-60417846 = 13178
-20130919112811629-60417858 = 13219
-20130919112811637-60417859 = 13221
-20130919112811646-60417860 = 13224
-20130919112811654-60417861 = 13225
-20130919112811662-60417862 = 13220
-20130919112811670-60417863 = 13218
-20130919112811678-60417864 = 13223
-20130919112811686-60417865 = 13222
-20130920172618898-60417901 = 13253
-20130927104812194-60418051 = 13311
-20130927104812195-60418052 = 13308
-20130927104812208-60418053 = 13319
-20130927104812209-60418054 = 13305
-20130927104812210-60418055 = 13310
-20130927104812211-60418056 = 13318
-20130927104812223-60418057 = 13307
-20130927104812224-60418058 = 13309
-20130927134811435-60418067 = 13265
-20131002120013797-60418202 = 13348
-20131004110009724-60418246 = 13411
-20131004110009725-60418247 = 13412
-20131004110009730-60418248 = 13413
-20131004110009731-60418249 = 13415
-20131004110009731-60418250 = 13414
-20131004110009731-60418251 = 13416
-20131004110009737-60418252 = 13418
-20131004110009737-60418253 = 13417
-20131004111008726-60418261 = 13363
-20131007162010426-60418383 = 13442
-20131011114017120-60418474 = 13497
-20131011114017120-60418475 = 13496
-20131011114017127-60418476 = 13498
-20131011114017128-60418477 = 13499
-20131011114017128-60418478 = 13500
-20131011114017128-60418479 = 13501
-20131011114017136-60418480 = 13601
-20131011114017137-60418481 = 13602
-20131011130006700-60418489 = 13519
-20131015110007223-60418674 = 13591
-20131015110007224-60418675 = 13593
-20131015110007230-60418676 = 13592
-20131015110007230-60418677 = 13594
-20131015110007230-60418678 = 13595
-20131015110007231-60418679 = 13597
-20131015110007237-60418680 = 13596
-20131015110007237-60418681 = 13598
-20131015172009634-60418706 = 13537
-20131018165212760-60418842 = 13649
-20131018165212761-60418843 = 13651
-20131018165212761-60418844 = 13650
-20131018165212762-60418845 = 13652
-20131018165212768-60418846 = 13656
-20131018165212768-60418847 = 13657
-20131023102405433-60418950 = 13894
-20131023102405433-60418951 = 13895
-20131023102405439-60418952 = 13896
-20131023102405440-60418953 = 13897
-20131023102405440-60418954 = 13898
-20131023102405440-60418955 = 13899
-20131023102405446-60418956 = 13900
-20131023102405447-60418957 = 13901
-20131025095203804-60419085 = 13768
-20131025095203805-60419086 = 13769
-20131025095203810-60419087 = 13770
-20131025095203811-60419088 = 13772
-20131025095203811-60419089 = 13771
-20131025095203812-60419090 = 13773
-20131025095203817-60419091 = 13774
-20131025095203817-60419092 = 13775
-20131025202837639-60419119 = 13776
-20131101165406593-60419352 = 13792
-20131105142030566-60419529 = 13061
-20131105142100973-60419530 = 13017
-20131108142030412-60419588 = 14162
-20131108142104759-60419589 = 14003
-20131111155008335-60419637 = 13969
-20131114110010184-60419739 = 14130
-20131114110010185-60419740 = 14129
-20131114110010192-60419741 = 14131
-20131114110010192-60419742 = 14133
-20131114110010192-60419743 = 14132
-20131114110010193-60419744 = 14134
-20131114110010199-60419745 = 14135
-20131114110010199-60419746 = 14136
-20131114111210300-60419754 = 14268
-20131114111210301-60419755 = 14274
-20131114111210310-60419756 = 14101
-20131114111210311-60419757 = 14102
-20131114111210312-60419758 = 14104
-20131114111210313-60419759 = 14109
-20131114111210324-60419760 = 14114
-20131114111210325-60419761 = 14115
-20131115163412618-60419839 = 14021
-20131118164008350-60420015 = 14415
-20131119121606842-60420018 = 14265
-20131119121606843-60420019 = 14266
-20131119121606852-60420020 = 14267
-20131119121606853-60420021 = 14270
-20131119121606854-60420022 = 14269
-20131119121606854-60420023 = 14271
-20131119121606873-60420024 = 14272
-20131119121606873-60420025 = 14273
-20131121114413383-60420074 = 14794
-20131121114413384-60420075 = 14791
-20131121114413395-60420076 = 14789
-20131121114413396-60420077 = 14788
-20131121114413397-60420078 = 14793
-20131121114413398-60420079 = 14795
-20131121114413411-60420080 = 14790
-20131121114413412-60420081 = 14792
-20131121163507727-60420154 = 14182
-20131122142806949-60420313 = 14327
-20131122142806949-60420314 = 14328
-20131122142806966-60420315 = 14329
-20131122142806968-60420316 = 14330
-20131122142806969-60420317 = 14331
-20131122142806971-60420318 = 14332
-20131122142806989-60420319 = 14333
-20131122142806990-60420320 = 14334
-20131122162206517-60420328 = 14295
-20131126140408758-60420451 = 14408
-20131126140408758-60420452 = 14409
-20131126140408769-60420453 = 14410
-20131126140408770-60420454 = 14411
-20131126140408770-60420455 = 15089
-20131126140408771-60420456 = 14412
-20131126140408781-60420457 = 14413
-20131126140408782-60420458 = 14414
-20131202092013861-60420547 = 14391
-20131202154006378-60420696 = 14518
-20131202154006379-60420697 = 14519
-20131202154006385-60420698 = 14520
-20131202154006386-60420699 = 14521
-20131202154006386-60420700 = 14522
-20131202154006386-60420701 = 14523
-20131202154006392-60420702 = 14524
-20131202154006392-60420703 = 14525
-20131204171005384-60420763 = 14536
-20131206125614455-60420950 = 14621
-20131206125614456-60420951 = 14623
-20131206125614463-60420952 = 14622
-20131206125614463-60420953 = 14624
-20131206125614464-60420954 = 15076
-20131206125614464-60420955 = 14626
-20131206125614470-60420956 = 14627
-20131206125614471-60420957 = 14628
-20131212112413284-60421230 = 14947
-20131212112413284-60421231 = 14948
-20131212112413290-60421232 = 14949
-20131212112413290-60421233 = 14950
-20131212112413291-60421234 = 14951
-20131212112413291-60421235 = 14952
-20131212112413296-60421236 = 14953
-20131212112413296-60421237 = 14954
-20131212113603087-60421245 = 14939
-20131212113603087-60421246 = 14940
-20131212113603093-60421247 = 14941
-20131212113603093-60421248 = 14942
-20131212113603093-60421249 = 14943
-20131212113603094-60421250 = 14944
-20131212113603099-60421251 = 14945
-20131212113603100-60421252 = 14946
-20131220120710186-60421442 = 14818
-20140110142404260-60422610 = 15078
-20140110142404467-60422611 = 15079
-20140110142404468-60422612 = 15080
-20140110142404468-60422613 = 15082
-20140110142404468-60422614 = 15081
-20140110142404475-60422615 = 15083
-20140110142404475-60422616 = 15084
-20140110142404475-60422617 = 15087
-20140110142803884-60422625 = 15330
-20140110142803884-60422626 = 15331
-20140110142803894-60422627 = 15332
-20140110142803894-60422628 = 15333
-20140110142803894-60422629 = 15334
-20140110142803894-60422630 = 15335
-20140110142803902-60422631 = 15336
-20140110142803902-60422632 = 15337
-20140110151504471-60422670 = 14987
-20140114144409179-60422847 = 15153
-20140114144409179-60422848 = 15154
-20140114144409184-60422849 = 15155
-20140114144409185-60422850 = 15157
-20140114144409185-60422851 = 15156
-20140114144409185-60422852 = 15158
-20140114144409190-60422853 = 15159
-20140114144409191-60422854 = 15160
-20140117162308688-60423026 = 15171
-20140120143606073-60423047 = 15394
-20140120143606074-60423048 = 15395
-20140120143606079-60423049 = 15396
-20140120143606079-60423050 = 15407
-20140120143606080-60423051 = 15398
-20140120143606080-60423052 = 15408
-20140120143606085-60423053 = 15697
-20140120143606085-60423054 = 15400
-20140120170306862-60423064 = 15353
-20140124114016050-60423426 = 15487
-20140124114016050-60423427 = 15488
-20140124114016056-60423428 = 15489
-20140124114016056-60423429 = 15499
-20140124114016057-60423430 = 15491
-20140124114016057-60423431 = 15493
-20140124114016069-60423432 = 15492
-20140124114016069-60423433 = 15494
-20140124152112477-60423441 = 15425
-20140127131612178-60423555 = 15521
-20140127131612179-60423556 = 15522
-20140127131612183-60423557 = 15524
-20140127131612184-60423558 = 15523
-20140127131612184-60423559 = 15525
-20140127131612184-60423560 = 15526
-20140127131612189-60423561 = 15528
-20140127131612190-60423562 = 15527
-20140129104028864-60423588 = 15680
-20140129104028865-60423589 = 15681
-20140129104028873-60423590 = 15682
-20140129104028873-60423591 = 15683
-20140129104028874-60423592 = 15684
-20140129104028874-60423593 = 15685
-20140129104028883-60423594 = 15686
-20140129104028883-60423595 = 15687
-20140205135610551-60423658 = 15860
-20140205135610639-60423659 = 15861
-20140205135610639-60423660 = 15862
-20140205135610640-60423661 = 15863
-20140205135610640-60423662 = 16019
-20140205135610646-60423663 = 15865
-20140205135610646-60423664 = 15866
-20140205135610647-60423665 = 15867
-20140213142813006-60424044 = 15772
-20140213142813006-60424045 = 15773
-20140213142813013-60424046 = 15774
-20140213142813014-60424047 = 15775
-20140213142813014-60424048 = 15776
-20140213142813014-60424049 = 15777
-20140213142813021-60424050 = 15778
-20140213142813021-60424051 = 15779
-20140217145510801-60424219 = 15893
-20140218103205245-60424329 = 16009
-20140218103205246-60424330 = 16010
-20140218103205261-60424331 = 16011
-20140218103205261-60424332 = 16012
-20140218103205262-60424333 = 16013
-20140218103205263-60424334 = 16014
-20140218103205273-60424335 = 16015
-20140218103205274-60424336 = 16016
-20140219111604836-60424374 = 15942
-20140219111604837-60424375 = 15943
-20140219111604845-60424376 = 15944
-20140219111604846-60424377 = 15945
-20140219111604846-60424378 = 15946
-20140219111604847-60424379 = 15947
-20140219111604855-60424380 = 15948
-20140219111604856-60424381 = 15949
-20140219141510503-60424393 = 15917
-20140221170112019-60424409 = 15929
-20140227141608673-60424469 = 16210
-20140227141608673-60424470 = 16211
-20140227141608682-60424471 = 16212
-20140227141608682-60424472 = 16482
-20140227141608683-60424473 = 16214
-20140227141608683-60424474 = 16215
-20140227141608691-60424475 = 16216
-20140227141608691-60424476 = 16484
-20140304150510853-60424623 = 16036
-20140305145210354-60424625 = 16438
-20140305145210355-60424626 = 16439
-20140305145210362-60424627 = 16440
-20140305145210362-60424628 = 16441
-20140305145210362-60424629 = 16442
-20140305145210363-60424630 = 16443
-20140305145210370-60424631 = 16444
-20140305145210370-60424632 = 16445
-20140306115512333-60424664 = 16437
-20140313145211262-60425055 = 16327
-20140313145211263-60425056 = 16326
-20140313145211278-60425057 = 16328
-20140313145211279-60425058 = 16329
-20140313145211280-60425059 = 16330
-20140313145211281-60425060 = 16333
-20140313145211290-60425061 = 16331
-20140313145211291-60425062 = 16332
-20140314161519895-60425087 = 16436
-20140321174107914-60425292 = 16565
-20140328111212420-60425552 = 16751
-20140328111212421-60425553 = 16752
-20140328111212428-60425554 = 16753
-20140328111212429-60425555 = 16754
-20140328111212429-60425556 = 16763
-20140328111212430-60425557 = 16759
-20140328111212438-60425558 = 16760
-20140328111212439-60425559 = 16761
-20140328113731678-60425570 = 16581
-20140402112012490-60425661 = 16648
-20140402112012933-60425662 = 16649
-20140402112012934-60425663 = 16650
-20140402112012934-60425664 = 16651
-20140402112012935-60425665 = 16652
-20140402112012947-60425666 = 16653
-20140402112012948-60425667 = 16654
-20140402112012948-60425668 = 16655
-20140415105212228-60426262 = 17052
-20140415105212229-60426263 = 17069
-20140415105212239-60426264 = 17035
-20140415105212240-60426265 = 17018
-20140415105212241-60426266 = 16890
-20140415105212241-60426267 = 16870
-20140415105212254-60426268 = 16871
-20140415105212255-60426269 = 16872
-20140416172503952-60426283 = 16779
-20140422143708070-60426516 = 17000
-20140422155048794-60426528 = 16983
-20140422155048795-60426529 = 16984
-20140424104805884-60426824 = 17327
-20140424104805885-60426825 = 17328
-20140424104805893-60426826 = 17329
-20140424104805894-60426827 = 17388
-20140424104805895-60426828 = 17390
-20140424104805895-60426829 = 17392
-20140424104805904-60426830 = 17333
-20140424104805905-60426831 = 17334
-20140424110005802-60426839 = 17153
-20140424110005802-60426840 = 17154
-20140424110005810-60426841 = 17351
-20140424110005810-60426842 = 17368
-20140424110005811-60426843 = 17156
-20140424110005812-60426844 = 17158
-20140424110005821-60426845 = 17159
-20140424110005821-60426846 = 17160
-20140430110109414-60427134 = 17177
-20140430150410645-60427139 = 17230
-20140430150410645-60427140 = 17231
-20140430150410649-60427141 = 17232
-20140430150410649-60427142 = 17233
-20140430150410649-60427143 = 17234
-20140430150410650-60427144 = 17235
-20140430150410654-60427145 = 17321
-20140430150410654-60427146 = 17237
-20140506110609691-60427435 = 17386
-20140509113005970-60427555 = 17468
-20140509113005971-60427556 = 17469
-20140509113005978-60427557 = 17470
-20140509113005978-60427558 = 17471
-20140509113005979-60427559 = 17472
-20140509113005979-60427560 = 17473
-20140509113005987-60427561 = 17474
-20140509113005987-60427562 = 17475
-20140509113606735-60427571 = 17467
-20140512175108185-60427796 = 17490
-20140513111008692-60427850 = 17596
-20140513111008692-60427851 = 17675
-20140513111008700-60427852 = 17681
-20140513111008700-60427853 = 17669
-20140513111008701-60427854 = 17699
-20140513111008701-60427855 = 17717
-20140513111008708-60427856 = 17740
-20140513111008709-60427857 = 17763
-20140514144611529-60427884 = 17507
-20140516132112391-60427905 = 17523
-20140523172009416-60428050 = 17829
-20140523172009417-60428051 = 17830
-20140523172009422-60428052 = 17831
-20140523172009422-60428053 = 17832
-20140523172009422-60428054 = 17870
-20140523172009423-60428055 = 17852
-20140523172009427-60428056 = 17867
-20140523172009428-60428057 = 17836
-20140529135113917-60428571 = 17883
-20140605105012665-60428619 = 17972
-20140605105012764-60428620 = 17993
-20140605105012764-60428621 = 17974
-20140605105012765-60428622 = 17975
-20140605105012766-60428623 = 17976
-20140605105012775-60428624 = 17977
-20140605105012776-60428625 = 17978
-20140605105012777-60428626 = 18011
-20140613104007999-60428953 = 18104
-20140613104007999-60428954 = 18105
-20140613104008007-60428955 = 18106
-20140613104008007-60428956 = 18107
-20140613104008008-60428957 = 18108
-20140613104008008-60428958 = 18109
-20140613104008016-60428959 = 18110
-20140613104008016-60428960 = 18111
-20140620143018384-60429220 = 18164
-20140620143018384-60429221 = 18174
-20140620143018392-60429222 = 18184
-20140620143018393-60429223 = 18194
-20140620143018393-60429224 = 18197
-20140620143018394-60429225 = 18209
-20140620143018402-60429226 = 18217
-20140620143018403-60429227 = 18225
-20140620143106333-60429235 = 18143
-20140624143606562-60429292 = 18236
-20140624151006324-60429295 = 18769
-20140624151006324-60429296 = 18770
-20140624151006329-60429297 = 18771
-20140624151006329-60429298 = 18772
-20140624151006329-60429299 = 18773
-20140624151006330-60429300 = 18774
-20140624151006336-60429301 = 18775
-20140624151006336-60429302 = 18776
-20140627132335012-60429440 = 18324
-20140627132335012-60429441 = 18325
-20140627132335018-60429442 = 18326
-20140627132335018-60429443 = 18327
-20140627132335018-60429444 = 18328
-20140627132335019-60429445 = 18329
-20140627132335024-60429446 = 18330
-20140627132335024-60429447 = 18331
-20140627155108193-60429559 = 18246
-20140630141602041-60429677 = 18342
-20140702125014596-60429692 = 18474
-20140702125014644-60429693 = 18475
-20140702125014645-60429694 = 18625
-20140702125014645-60429695 = 18626
-20140702125014645-60429696 = 18627
-20140702125014651-60429697 = 18628
-20140702125014651-60429698 = 18629
-20140702125014651-60429699 = 18630
-20140704100601563-60430085 = 18786
-20140707165557451-60430698 = 18796
-20140708114017423-60430701 = 18861
-20140708114017424-60430702 = 18862
-20140708114017431-60430703 = 18863
-20140708114017432-60430704 = 18864
-20140708114017432-60430705 = 18865
-20140708114017433-60430706 = 18866
-20140708114017440-60430707 = 18867
-20140708114017441-60430708 = 18868
-20140710145057605-60430747 = 18885
-20140714141548837-60430876 = 18896
-20140717174541634-60430895 = 18915
-20140718104020398-60430905 = 19086
-20140718104020399-60430906 = 19093
-20140718104020407-60430907 = 19094
-20140718104020407-60430908 = 19095
-20140718104020407-60430909 = 19096
-20140718104020408-60430910 = 19102
-20140718104020417-60430911 = 19105
-20140718104020418-60430912 = 19106
-20140718104023349-60430920 = 18993
-20140718104023349-60430921 = 19045
-20140718104023356-60430922 = 19001
-20140718104023357-60430923 = 19040
-20140718104023357-60430924 = 19009
-20140718104023358-60430925 = 19017
-20140718104023365-60430926 = 19025
-20140718104023366-60430927 = 19039
-20140721160556661-60431065 = 19193
-20140724160558620-60431314 = 19194
-20140729175550270-60431401 = 19299
-20140729175550270-60431402 = 19301
-20140730154007668-60431471 = 19458
-20140730154007668-60431472 = 19460
-20140730154007674-60431473 = 19517
-20140730154007674-60431474 = 19544
-20140730154007674-60431475 = 19547
-20140730154007675-60431476 = 19550
-20140730154007680-60431477 = 19554
-20140730154007681-60431478 = 19556
-20140730154010407-60431486 = 19392
-20140730154010408-60431487 = 19393
-20140730154010418-60431488 = 19394
-20140730154010419-60431489 = 19395
-20140730154010420-60431490 = 19396
-20140730154010420-60431491 = 19397
-20140730154010429-60431492 = 19398
-20140730154010429-60431493 = 19399
-20140730160819590-60431501 = 20014
-20140731111600088-60431657 = 19305
-20140805155555874-60431970 = 19410
-20140807132014902-60431981 = 19545
-20140807132014903-60431982 = 19546
-20140807132014911-60431983 = 19548
-20140807132014911-60431984 = 19549
-20140807132014912-60431985 = 19551
-20140807132014912-60431986 = 19552
-20140807132014919-60431987 = 19553
-20140807132014920-60431988 = 19555
-20140808152414016-60432007 = 19688
-20140808152414017-60432008 = 19689
-20140808152414029-60432009 = 19690
-20140808152414030-60432010 = 19691
-20140808152414031-60432011 = 19692
-20140808152414032-60432012 = 19693
-20140808152414037-60432013 = 19812
-20140808152414038-60432014 = 19695
-20140811164056097-60432513 = 19724
-20140811191926392-60432519 = 19950
-20140812171543248-60432577 = 19803
-20140814104008736-60432583 = 20582
-20140814104008736-60432584 = 20619
-20140814104009043-60432585 = 20633
-20140814104009043-60432586 = 20635
-20140814104009044-60432587 = 20636
-20140814104009045-60432588 = 20638
-20140814104009063-60432589 = 20640
-20140814104009064-60432590 = 20643
-20140814104013004-60432598 = 20634
-20140814104013004-60432599 = 20637
-20140814104013033-60432600 = 20639
-20140814104013034-60432601 = 20641
-20140814104013034-60432602 = 20642
-20140814104013034-60432603 = 20644
-20140814104013049-60432604 = 20645
-20140814104013050-60432605 = 20646
-20140814141847739-60432623 = 19932
-20140818162702633-60432764 = 20223
-20140818162702633-60432765 = 20224
-20140818162702638-60432766 = 20225
-20140818162702639-60432767 = 20226
-20140818162702639-60432768 = 20227
-20140818162702640-60432769 = 20228
-20140818162702647-60432770 = 20292
-20140818162702647-60432771 = 20293
-20140819111555148-60432826 = 19962
-20140819143650772-60432831 = 19882
-20140819143650773-60432832 = 19883
-20140819143650782-60432833 = 19884
-20140819143650782-60432834 = 19885
-20140819143650783-60432835 = 19886
-20140819143650783-60432836 = 19887
-20140819143650793-60432837 = 20817
-20140819143650793-60432838 = 19890
-20140819143651000-60432846 = 19902
-20140822160653006-60433231 = 20239
-20140825142452246-60433514 = 20494
-20140827122044098-60434216 = 20769
-20140827145435986-60434219 = 20748
-20140903140639280-60434380 = 20773
-20140904140042238-60434387 = 20777
-20140919182158742-60434432 = 20812
-20140923113013853-60434782 = 21629
-20140923113013853-60434783 = 21630
-20140923113013858-60434784 = 21631
-20140923113013858-60434785 = 21632
-20140923113013858-60434786 = 21633
-20140923113013858-60434787 = 21634
-20140923113013863-60434788 = 21635
-20140923113013863-60434789 = 21636
-20140923135616632-60434801 = 21341
-20140923135616633-60434802 = 21342
-20140923135616638-60434803 = 21343
-20140923135616638-60434804 = 21344
-20140923135616639-60434805 = 21345
-20140923135616639-60434806 = 21346
-20140923135616645-60434807 = 21347
-20140923135616645-60434808 = 21348
-20140923143646999-60434816 = 21017
-20140923171102253-60434829 = 20856
-20140924142512654-60435113 = 21051
-20140925102442861-60435390 = 21151
-20140926131051939-60435801 = 21453
-20140926155612679-60435881 = 21425
-20140926155612679-60435882 = 21438
-20140926155612685-60435883 = 21427
-20140926155612685-60435884 = 21428
-20140926155612685-60435885 = 21429
-20140926155612686-60435886 = 21430
-20140926155612692-60435887 = 21431
-20140926155612693-60435888 = 21432
-20140926190040148-60435900 = 21401
-20140929171059197-60436286 = 21463
-20141002134330903-60436331 = 21475
-20141002141112392-60436333 = 21485
-20141006120222313-60436368 = 21628
-20141009160009792-60436577 = 21728
-20141009160009792-60436578 = 21729
-20141009160009797-60436579 = 21730
-20141009160009798-60436580 = 21731
-20141009160009798-60436581 = 21732
-20141009160009799-60436582 = 21733
-20141009160009804-60436583 = 21734
-20141009160009805-60436584 = 21735
-20141010155651744-60436599 = 21649
-20141010164013595-60436601 = 21774
-20141010164013596-60436602 = 21775
-20141010164013602-60436603 = 21776
-20141010164013602-60436604 = 21777
-20141010164013603-60436605 = 21778
-20141010164013604-60436606 = 21779
-20141010164013611-60436607 = 21780
-20141010164013612-60436608 = 21781
-20141015151047371-60436916 = 21818
-20141016180637883-60437256 = 21806
-20141017134839107-60437290 = 21830
-20141017141607122-60437293 = 22196
-20141017141607122-60437294 = 22199
-20141017151042654-60437297 = 22047
-20141020152457176-60437348 = 22093
-20141027110822794-60437421 = 22707
-20141027110822795-60437422 = 22799
-20141027110822801-60437423 = 22709
-20141027110822801-60437424 = 22711
-20141027110822802-60437425 = 22712
-20141027110822803-60437426 = 22714
-20141027110822809-60437427 = 22715
-20141027110822809-60437428 = 22717
-20141027110826201-60437436 = 22706
-20141027110826201-60437437 = 22710
-20141027110826206-60437438 = 22713
-20141027110826206-60437439 = 22716
-20141027110826206-60437440 = 22718
-20141027110826207-60437441 = 22719
-20141027110826212-60437442 = 22720
-20141027110826212-60437443 = 22789
-20141027111048941-60437451 = 21992
-20141027111048942-60437452 = 22094
-20141027111048948-60437453 = 22194
-20141027111048949-60437454 = 22195
-20141027111048949-60437455 = 22197
-20141027111048950-60437456 = 22198
-20141027111048961-60437457 = 22200
-20141027111048962-60437458 = 22201
-20141027111159189-60437466 = 22827
-20141027124728791-60437491 = 22840
-20141028170150992-60438459 = 22790
-20141029161045722-60438957 = 22855
-20141030161047748-60439004 = 22880
-20141031110527749-60439022 = 22901
-20141031110527749-60439023 = 22902
-20141031110527756-60439024 = 22903
-20141031110527757-60439025 = 24628
-20141031110527757-60439026 = 22904
-20141031110527758-60439027 = 24629
-20141031110527764-60439028 = 22905
-20141031110527765-60439029 = 22906
-20141031164811019-60439037 = 23195
-20141031164811020-60439038 = 23196
-20141031164811026-60439039 = 23197
-20141031164811027-60439040 = 23198
-20141031164811028-60439041 = 23199
-20141031164811029-60439042 = 23200
-20141031164811037-60439043 = 23201
-20141031164811037-60439044 = 23202
-20141104171047374-60439240 = 25953
-20141104172015021-60439243 = 23007
-20141106102020238-60439280 = 24107
-20141106102020239-60439281 = 24108
-20141106102020245-60439282 = 24109
-20141106102020245-60439283 = 24110
-20141106102020246-60439284 = 24111
-20141106102020246-60439285 = 24127
-20141106102020254-60439286 = 24128
-20141106102020254-60439287 = 24129
-20141106165613994-60439423 = 23423
-20141106165613994-60439424 = 23424
-20141110160637787-60439802 = 23890
-20141112092310133-60440551 = 23943
-20141114141838916-60440819 = 24130
-20141118144815685-60441078 = 24442
-20141118144815686-60441079 = 24434
-20141118144815703-60441080 = 24456
-20141118144815703-60441081 = 24470
-20141118144815704-60441082 = 24484
-20141118144815705-60441083 = 24498
-20141118144815717-60441084 = 24508
-20141118144815719-60441085 = 24518
-20141118174858623-60441167 = 24630
-20141125162445037-60441623 = 24587
-20141127171042300-60441668 = 24627
-20141128174815756-60441671 = 24919
-20141128174815756-60441672 = 24920
-20141128174815764-60441673 = 24921
-20141128174815765-60441674 = 24971
-20141128174815766-60441675 = 24923
-20141128174815766-60441676 = 24924
-20141128174815775-60441677 = 24925
-20141128174815776-60441678 = 24926
-20141201151036410-60441746 = 24947
-20141204122958560-60442407 = 25006
-20141204123057780-60442408 = 25005
-20141204123124315-60442409 = 25004
-20141204123237308-60442410 = 25003
-20141204123308629-60442411 = 25002
-20141204144842975-60442474 = 25202
-20141204153227792-60442477 = 25303
-20141204153227793-60442478 = 25327
-20141204153227801-60442479 = 25328
-20141204153227801-60442480 = 25329
-20141204153227802-60442481 = 25495
-20141204153227803-60442482 = 25331
-20141204153227809-60442483 = 25332
-20141204153227810-60442484 = 25496
-20141205132533103-60442949 = 25434
-20141208153049627-60443223 = 25442
-20141209141052407-60443243 = 27141
-20141209154907816-60443246 = 25508
-20141210165321840-60443373 = 25547
-20141212080302177-60443593 = 26042
-20141212093855654-60443611 = 25558
-20141212094000169-60443612 = 27253
-20141212094034526-60443613 = 25560
-20141212140006907-60443652 = 25814
-20141212140006907-60443653 = 25864
-20141212140006911-60443654 = 25890
-20141212140006911-60443655 = 25892
-20141212140006912-60443656 = 25894
-20141212140006912-60443657 = 25897
-20141212140006916-60443658 = 25899
-20141212140006916-60443659 = 25901
-20141212140008327-60443667 = 25891
-20141212140008328-60443668 = 25893
-20141212140008332-60443669 = 25895
-20141212140008333-60443670 = 25896
-20141212140008333-60443671 = 25898
-20141212140008333-60443672 = 25900
-20141212140008337-60443673 = 25902
-20141212140008337-60443674 = 25903
-20141212141037031-60443682 = 25927
-20141217140043269-60444854 = 26419
-20141217150011795-60444860 = 26572
-20141217150011795-60444861 = 26573
-20141217150011800-60444862 = 26574
-20141217150011800-60444863 = 26871
-20141217150011801-60444864 = 26576
-20141217150011805-60444866 = 26577
-20141217150011806-60444867 = 26578
-20141217153213800-60444875 = 26770
-20141217153213800-60444876 = 26771
-20141217153213807-60444877 = 26772
-20141217153213808-60444878 = 26773
-20141217153213808-60444879 = 26774
-20141217153213809-60444880 = 26775
-20141219111057430-60445308 = 26471
-20141219134243854-60445311 = 26446
-20150106122936809-60445847 = 26908
-20150106123145774-60445848 = 26907
-20150107142414241-60446074 = 27130
-20150107142414343-60446075 = 27134
-20150107151040832-60446082 = 27216
-20150109182612046-60446614 = 27218
-20150112164844156-60446694 = 27217
-20150113135059402-60446720 = 27254
-20150113181038196-60446726 = 27255
-20150114145610761-60446773 = 27709
-20150114145610761-60446774 = 27710
-20150114145610769-60446775 = 27711
-20150114145610770-60446776 = 27712
-20150114145610771-60446777 = 27713
-20150114145610771-60446778 = 27714
-20150114145610779-60446779 = 27715
-20150114145610780-60446780 = 27716
-20150114151040461-60446788 = 27576
-20150114174841821-60446851 = 27548
-20150115151611369-60447576 = 27733
-20150115161035851-60447578 = 27762
-20150116155430381-60447855 = 27775
-20150119154846406-60447872 = 28069
-20150120114859703-60448169 = 28084
-20150120140809720-60448171 = 28223
-20150120140809721-60448172 = 28224
-20150120140809728-60448173 = 28225
-20150120140809729-60448174 = 28226
-20150120140809729-60448175 = 28227
-20150120140809730-60448176 = 28228
-20150120140809734-60448177 = 28229
-20150120140809734-60448178 = 28230
-20150120141040639-60448186 = 28275
-20150121183648199-60448463 = 28246
-20150122132017672-60448496 = 28272
-20150123112101211-60448526 = 28256
-20150123112316771-60448528 = 28253
-20150123144814364-60448533 = 28515
-20150123144814365-60448534 = 28541
-20150123144814372-60448535 = 28599
-20150123144814373-60448536 = 28558
-20150123144814373-60448537 = 28560
-20150123144814374-60448538 = 28577
-20150123144814380-60448539 = 28578
-20150123144814380-60448540 = 28580
-20150123144818261-60448548 = 28579
-20150123144818262-60448549 = 28581
-20150123144818266-60448550 = 28582
-20150123144818266-60448551 = 28583
-20150123144818267-60448552 = 28584
-20150123144818267-60448553 = 28585
-20150123144818271-60448554 = 28586
-20150123144818271-60448555 = 28587
-20150129162423877-60449146 = 29009
-20150129162423878-60449147 = 29010
-20150129162435864-60449149 = 29029
-20150129162435864-60449150 = 29031
-20150130141816705-60449255 = 29033
-20150130164611981-60449290 = 28809
-20150202161247001-60449982 = 29115
-20150203153205865-60450067 = 29277
-20150203153205866-60450068 = 29278
-20150203153205871-60450069 = 29279
-20150203153205872-60450070 = 29280
-20150203153205873-60450071 = 29281
-20150203153205873-60450072 = 29282
-20150203153205880-60450073 = 29283
-20150203153205884-60450074 = 29284
-20150203153208776-60450082 = 29612
-20150203153208776-60450083 = 29613
-20150203153208782-60450084 = 29614
-20150203153208782-60450085 = 29615
-20150203153208783-60450086 = 29616
-20150203153208783-60450087 = 29617
-20150203153208791-60450088 = 29618
-20150203153208792-60450089 = 29619
-20150204174817644-60450130 = 29126
-20150205174243591-60450346 = 29300
-20150206143332727-60450366 = 29317
-20150209152943307-60450432 = 29399
-20150210144011059-60450516 = 29534
-20150210144011060-60450517 = 29535
-20150210144011075-60450518 = 29536
-20150210144011075-60450519 = 29537
-20150210144011076-60450520 = 29538
-20150210144011077-60450521 = 29539
-20150210144011087-60450522 = 29540
-20150210144011088-60450523 = 29541
-20150210161843154-60450531 = 29416
-20150213144812415-60450886 = 29937
-20150213144812416-60450887 = 29938
-20150213144812426-60450888 = 29939
-20150213144812426-60450889 = 29940
-20150213144812427-60450890 = 29941
-20150213144812428-60450891 = 29942
-20150213144812435-60450892 = 29943
-20150213144812435-60450893 = 29944
-20150213144815962-60450901 = 29973
-20150213144815962-60450902 = 29974
-20150213144815970-60450903 = 29975
-20150213144815972-60450904 = 29976
-20150213144815973-60450905 = 29977
-20150213144815973-60450906 = 29978
-20150213144815983-60450907 = 29979
-20150213144815984-60450908 = 29980
-20150216174841182-60450950 = 29630
-20150217142446922-60451046 = 29715
-20150218154906604-60451332 = 30004
-20150219121044340-60451481 = 30188
-20150219140019875-60451484 = 30136
-20150219140019876-60451485 = 30137
-20150219140019890-60451486 = 30138
-20150219140019891-60451487 = 30139
-20150219140019892-60451488 = 30140
-20150219140019892-60451489 = 30141
-20150219140019900-60451490 = 30142
-20150219140019901-60451491 = 30143
-20150219164548240-60451552 = 30035
-20150220171839966-60451594 = 30064
-20150224140541688-60451942 = 30246
-20150224161618336-60451945 = 30216
-20150225132544491-60452020 = 30284
diff --git a/deep_sequencing_unit/tracking/dist/tracking.sh b/deep_sequencing_unit/tracking/dist/tracking.sh
deleted file mode 100755
index cc3e81f70ee..00000000000
--- a/deep_sequencing_unit/tracking/dist/tracking.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/bash
-#
-# Launch script for CISD openBIS Tracking system for Deep Sequencing Unit.
-# Runs on Unix / Linux systems.
-# -------------------------------------------------------------------------
-
-JAR_FILE=lib/openbis-tracking-qgf-client.jar
-
-#
-# change to installation directory
-#
-bin=$0
-if [ -L $bin ]; then
-  bin=`dirname $bin`/`readlink $bin`
-fi
-WD=`dirname $bin`
-cd $WD
-SCRIPT=./`basename $0`
-
-[[ -d log ]] || mkdir log
-
-if [ "$JAVA_HOME" != "" ]; then
-	JAVA_BIN="$JAVA_HOME/bin/java"
-else
-	JAVA_BIN="java"
-fi
-
-ALL_JAVA_OPTS="-Djavax.net.ssl.trustStore=etc/openBIS.keystore $JAVA_OPTS"
-${JAVA_BIN} ${ALL_JAVA_OPTS} -jar $JAR_FILE "$@"
\ No newline at end of file
diff --git a/deep_sequencing_unit/tracking/etc/email-template.txt b/deep_sequencing_unit/tracking/etc/email-template.txt
deleted file mode 100644
index 38ead1310b9..00000000000
--- a/deep_sequencing_unit/tracking/etc/email-template.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-Dear Mrs./Mr.
-This email has been sent to you automatically by the openBIS system because
-you have been registered as a contact person or principal investigator.
-
-There is progress considering your sequencing order. Below you will find all
-the details.
-
-Alternatively for an easier download of FASTQ files use this little webapp:
-https://openbis-dsu.ethz.ch/openbis/webapp/downloader/
-
-For batch downloading FASTQ file via SFTP please have a look at the
-documentation here:
-https://wiki-bsse.ethz.ch/x/MBEkBg#InstallationandAdministratorsGuideoftheopenBISDataStoreServer-ExampleFTPSclientconfiguration
-
-Some documentation about FASTQ and openBIS is available here:
-https://wiki-bsse.ethz.ch/display/DBSSEQGF/Home
-http://www.bsse.ethz.ch/qgf/faq
-
-Kind regards,
-Quantitative Genomics Facility Team
-http://www.bsse.ethz.ch/qgf/
-
-{generated-content}
-
--------------------------------------------------------------------------------
-http://www.bsse.ethz.ch/qgf/
\ No newline at end of file
diff --git a/deep_sequencing_unit/tracking/etc/log.xml b/deep_sequencing_unit/tracking/etc/log.xml
deleted file mode 100644
index 5cee0a68436..00000000000
--- a/deep_sequencing_unit/tracking/etc/log.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
-
-  <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
-     <layout class="org.apache.log4j.PatternLayout">
-       <param name="ConversionPattern" value="%d %-5p [%t] %c - %m%n"/>
-     </layout>
-  </appender>
-
-  <appender name="NULL" class="org.apache.log4j.varia.NullAppender" />
-
-  <root>
-     <priority value ="info" />
-     <appender-ref ref="STDOUT" />
-  </root>
-
-</log4j:configuration>
diff --git a/deep_sequencing_unit/tracking/etc/openBIS.keystore b/deep_sequencing_unit/tracking/etc/openBIS.keystore
deleted file mode 100644
index 28d6c1945533908c76f28785953cbed4004c4555..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 98036
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
GrT!mNl@~Jr

diff --git a/deep_sequencing_unit/tracking/etc/service.properties b/deep_sequencing_unit/tracking/etc/service.properties
deleted file mode 100644
index 6a5b0497ed8..00000000000
--- a/deep_sequencing_unit/tracking/etc/service.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-openbis-user=tracker
-openbis-password=jadfs8r3jahu12
-openbis-server-url = http://openbis-dsu.bsse.ethz.ch:8080/openbis/openbis
-permlink-url = https://openbis-dsu.bsse.ethz.ch/openbis
-
-mail.smtp.host = file://../targets/playground
-mail.smtp.user = 
-mail.smtp.password = 
-
-FMI-affiliation-notification-email-contact = fmi@bsse.ethz.ch
-
-# all emails will be sent from this address
-mail.from = openbis-noreply@bsse.ethz.ch
-# all emails will have this address in the reply-to field
-notification-email-reply-to = manuel.kohler@bsse.ethz.ch
-# subject of all the notification emails
-notification-email-subject = BSSE DSU (LOCAL TEST): Status report of your deep sequencing order
-
-# if the tracking client fails an email will be sent out to these recipients
-tracking-admin-email = kohleman@ethz.ch, gpawel@ethz.ch
-jython-version=2.7
diff --git a/deep_sequencing_unit/tracking/etc/tracking-local-database b/deep_sequencing_unit/tracking/etc/tracking-local-database
deleted file mode 100644
index af910cae04a..00000000000
--- a/deep_sequencing_unit/tracking/etc/tracking-local-database
+++ /dev/null
@@ -1,2 +0,0 @@
-trackedSamplesToBeProcessed 1 2 3 4 5
-trackedSamplesProcessedSuccessfully 1 2 3
diff --git a/deep_sequencing_unit/tracking/etc/tracking-sample-database b/deep_sequencing_unit/tracking/etc/tracking-sample-database
deleted file mode 100644
index dac98d90e94..00000000000
--- a/deep_sequencing_unit/tracking/etc/tracking-sample-database
+++ /dev/null
@@ -1 +0,0 @@
-20090901100144407-102 = 192
\ No newline at end of file
diff --git a/gradle/build.gradle b/gradle/build.gradle
index 1d1474dfa18..049eac5fa73 100644
--- a/gradle/build.gradle
+++ b/gradle/build.gradle
@@ -7,7 +7,6 @@ evaluationDependsOn(':dbmigration')
 evaluationDependsOn(':openbis')
 evaluationDependsOn(':datastore_server')
 evaluationDependsOn(':screening')
-evaluationDependsOn(':deep_sequencing_unit')
 evaluationDependsOn(':openbis_standard_technologies')
 evaluationDependsOn(':installation')
 evaluationDependsOn(':ui-test')
diff --git a/gradle/settings.gradle b/gradle/settings.gradle
index 3635441b121..d29899caeb4 100644
--- a/gradle/settings.gradle
+++ b/gradle/settings.gradle
@@ -1,5 +1,5 @@
 includeFlat 'commonbase', 'common', 'openbis_api', 'openbis-common', 'authentication', 'dbmigration', 'openbis',
-        'datastore_server', 'screening', 'deep_sequencing_unit',
+        'datastore_server', 'screening',
         'openbis_standard_technologies', 'installation', 'image_readers', 'ui-test', 'js-test', 'datamover',
         'big_data_link_server', 'openbis_ng_ui', 'microservice_server_template',
         'openbis_statistics_server', 'openbis_benchmark'
\ No newline at end of file
diff --git a/installation/build.gradle b/installation/build.gradle
index beb60bdc40f..4396fa02cc4 100644
--- a/installation/build.gradle
+++ b/installation/build.gradle
@@ -7,7 +7,6 @@ evaluationDependsOn(':dbmigration')
 evaluationDependsOn(':openbis')
 evaluationDependsOn(':datastore_server')
 evaluationDependsOn(':screening')
-evaluationDependsOn(':deep_sequencing_unit')
 evaluationDependsOn(':openbis_standard_technologies')
 
 apply from: '../gradle/javaproject.gradle'
diff --git a/installation/settings.gradle b/installation/settings.gradle
index 69a2bcdd162..e16c48dae45 100644
--- a/installation/settings.gradle
+++ b/installation/settings.gradle
@@ -1,4 +1,4 @@
 includeFlat 'commonbase', 'common',
         'openbis_api', 'openbis-common', 'authentication', 'dbmigration', 'openbis',
-        'datastore_server', 'screening', 'deep_sequencing_unit',
-        'openbis_standard_technologies', 'big_data_link_server', 'openbis_ng_ui', 'microservice_server_template'
+        'datastore_server', 'screening', 'openbis_standard_technologies', 'big_data_link_server',
+        'openbis_ng_ui', 'microservice_server_template'
diff --git a/js-test/settings.gradle b/js-test/settings.gradle
index 4895536be0b..5da3f86d633 100644
--- a/js-test/settings.gradle
+++ b/js-test/settings.gradle
@@ -1,3 +1,3 @@
 includeFlat 'commonbase', 'common', 'openbis_api', 'openbis-common', 'authentication', 'dbmigration', 'openbis', 
-    'datastore_server', 'screening', 'deep_sequencing_unit', 'openbis_standard_technologies',
+    'datastore_server', 'screening', 'openbis_standard_technologies',
     'ui-test','screening'
diff --git a/openbis_all/build/build.xml b/openbis_all/build/build.xml
index c8cad33497a..ef36ef8af76 100644
--- a/openbis_all/build/build.xml
+++ b/openbis_all/build/build.xml
@@ -16,10 +16,6 @@
       <param name="project" value="datastore_server" />
       <param name="pattern" value="*"/>
     </antcall>
-    <antcall target="_dist">
-      <param name="project" value="deep_sequencing_unit" />
-      <param name="pattern" value="*"/>
-    </antcall>
     <antcall target="_dist">
       <param name="project" value="screening" />
       <param name="pattern" value="*"/>
@@ -76,9 +72,6 @@
     <antcall target="_clean">
       <param name="project" value="datastore_server"/>
     </antcall>
-    <antcall target="_clean">
-      <param name="project" value="deep_sequencing_unit"/>
-    </antcall>
     <antcall target="_clean">
       <param name="project" value="screening"/>
     </antcall>
diff --git a/openbis_all/source/bash/build/branch.sh b/openbis_all/source/bash/build/branch.sh
index 019ae645e4e..faacce162b5 100755
--- a/openbis_all/source/bash/build/branch.sh
+++ b/openbis_all/source/bash/build/branch.sh
@@ -31,7 +31,6 @@ common \
 datamover \
 datastore_server \
 dbmigration \
-deep_sequencing_unit \
 installation \
 js-test \
 openbis \
diff --git a/openbis_contrib/.classpath b/openbis_contrib/.classpath
deleted file mode 100644
index 78c5c4b761a..00000000000
--- a/openbis_contrib/.classpath
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="source/java"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="lib" path="/libraries/eodsql/eodsql.jar"/>
-	<classpathentry kind="lib" path="/libraries/postgresql/postgresql.jar"/>
-	<classpathentry kind="lib" path="/libraries/testng/testng-jdk15.jar"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/common"/>
-  <classpathentry combineaccessrules="false" kind="src" path="/datastore_server"/>
-  <classpathentry kind="lib" path="/libraries/cisd-base/cisd-base.jar" sourcepath="/libraries/cisd-base/cisd-base-src.zip"/>
-	<classpathentry kind="lib" path="/libraries/commons-codec/commons-codec.jar" sourcepath="/libraries/commons-codec/src.zip"/>
-	<classpathentry kind="lib" path="/libraries/commons-httpclient/commons-httpclient.jar" sourcepath="/libraries/commons-httpclient/src.zip"/>
-	<classpathentry kind="lib" path="/libraries/commons-io/commons-io.jar" sourcepath="/libraries/commons-io/src.zip"/>
-	<classpathentry kind="lib" path="/libraries/commons-logging/commons-logging.jar" sourcepath="/libraries/commons-logging/src.zip"/>
-	<classpathentry kind="lib" path="/libraries/jline/jline.jar" sourcepath="/libraries/jline/src.zip"/>
-	<classpathentry kind="lib" path="/libraries/log4j/log4j.jar" sourcepath="/libraries/log4j/src.zip"/>
-	<classpathentry kind="lib" path="/libraries/spring/spring.jar" sourcepath="/libraries/spring/src.jar"/>
-	<classpathentry kind="lib" path="/libraries/spring/third-party/stream-supporting-httpinvoker.jar" sourcepath="/libraries/spring/third-party/stream-supporting-httpinvoker-src.zip"/>	
-  <classpathentry kind="output" path="targets/classes"/>
-</classpath>
diff --git a/openbis_contrib/.project b/openbis_contrib/.project
deleted file mode 100644
index 19c52fa17a7..00000000000
--- a/openbis_contrib/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>openbis_contrib</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/openbis_contrib/.settings/org.eclipse.jdt.core.prefs b/openbis_contrib/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index db8ce66004c..00000000000
--- a/openbis_contrib/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,12 +0,0 @@
-#Tue Jul 27 16:10:00 CEST 2010
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
diff --git a/openbis_contrib/build/build.xml b/openbis_contrib/build/build.xml
deleted file mode 100644
index f582ea8cb19..00000000000
--- a/openbis_contrib/build/build.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<project name="GetSampleProperties" default="GetSampleProperties-jar" basedir="..">
-	<import file="../../datastore_server/build/build.xml" />
-	<project-classpath name="ecp" classes="${classes}" />
-
-	<property name="original.dist" value="dist" />
-	<property name="mainfolder" value="GetSampleProperties" />
-
-	<property name="dist.properties" value="${dist}/properties" />
-	<property name="dist.properties.lib" value="${dist.properties}/lib" />
-	<property name="properties-jar.file" value="${dist.properties.lib}/openbis-properties-client.jar" />
-	<property name="properties.original.dist" value="properties/dist" />
-
-	<target name="compile" depends="build-common.compile, clean" />
-
-	<target name="run-tests">
-		<antcall target="build-common.run-tests">
-			<param name="test.suite" value="tests.xml" />
-		</antcall>
-	</target>
-
-	<target name="GetSampleProperties-jar" depends="compile">
-		<mkdir dir="${dist.properties.lib}" />
-		<recursive-jar destfile="${properties-jar.file}">
-			<fileset dir="${classes}">
-				<include name="ch/ethz/bsse/cisd/dsu/properties/*.class" />
-				<include name="${build.info.filename}" />
-			</fileset>
-			<manifest>
-				<attribute name="Main-Class" value="ch.ethz.bsse.cisd.dsu.properties.GetSampleProperties" />
-				<attribute name="Class-Path" value="cisd-base.jar log4j.jar activation.jar mail.jar gwt-isserializable.jar
-																						commons-io.jar commons-lang.jar commons-logging.jar commons-httpclient.jar commons-codec.jar 
-																						spring.jar stream-supporting-httpinvoker.jar" />
-			</manifest>
-		</recursive-jar>
-	</target>
-
-	<target name="properties-dist" depends="GetSampleProperties-jar">
-		<copy file="${properties-jar.file}" todir="${dist.properties.lib}" />
-		<copy file="${lib}/cisd-base/cisd-base.jar" todir="${dist.properties.lib}" />
-		<copy file="${lib}/activation/activation.jar" todir="${dist.properties.lib}" />
-		<copy file="${lib}/mail/mail.jar" todir="${dist.properties.lib}" />
-		<copy file="${lib}/log4j/log4j.jar" todir="${dist.properties.lib}" />
-		<copy file="${lib}/gwt2.4/gwt-isserializable.jar" todir="${dist.properties.lib}" />
-		<copy file="${lib}/commons-logging/commons-logging.jar" todir="${dist.properties.lib}" />
-		<copy file="${lib}/commons-io/commons-io.jar" todir="${dist.properties.lib}" />
-		<copy file="${lib}/commons-lang/commons-lang.jar" todir="${dist.properties.lib}" />
-		<copy file="${lib}/commons-httpclient/commons-httpclient.jar" todir="${dist.properties.lib}" />
-		<copy file="${lib}/commons-codec/commons-codec.jar" todir="${dist.properties.lib}" />
-		<copy file="${lib}/spring/spring.jar" todir="${dist.properties.lib}" />
-		<copy file="${lib}/spring/third-party/stream-supporting-httpinvoker.jar" todir="${dist.properties.lib}" />
-	  
-		<property name="properties-dist.file" value="openbis-properties-client.zip" />
-		<mkdir dir="${dist.properties}" />
-		<zip basedir="${dist.properties}" destfile="${dist.properties}/${properties-dist.file}" excludes="*.zip *.jar">
-			<zipfileset dir="${properties.original.dist}" excludes="**/*.sh"/>
-			<zipfileset file="${properties.original.dist}/properties.sh" filemode="755" />
-		</zip>
-
-	</target>
-
-	<!--
-        // Task for creating distributions
-        -->
-	<target name="dist" depends="datastore_server.make-dist, properties-dist" />
-
-	<!--
-        // Task for continuous integration server.
-        -->
-	<target name="ci" depends="build-common.ci, dist, check-dependencies" />
-
-
-</project>
\ No newline at end of file
diff --git a/openbis_contrib/dist/.gitignore b/openbis_contrib/dist/.gitignore
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/openbis_contrib/etc/log.xml b/openbis_contrib/etc/log.xml
deleted file mode 100644
index 5cee0a68436..00000000000
--- a/openbis_contrib/etc/log.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
-
-  <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
-     <layout class="org.apache.log4j.PatternLayout">
-       <param name="ConversionPattern" value="%d %-5p [%t] %c - %m%n"/>
-     </layout>
-  </appender>
-
-  <appender name="NULL" class="org.apache.log4j.varia.NullAppender" />
-
-  <root>
-     <priority value ="info" />
-     <appender-ref ref="STDOUT" />
-  </root>
-
-</log4j:configuration>
diff --git a/openbis_contrib/etc/service.properties b/openbis_contrib/etc/service.properties
deleted file mode 100644
index 24f46a4097b..00000000000
--- a/openbis_contrib/etc/service.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-# The username to use when contacting the openBIS server
-username = etlserver_bsse
-# The password to use when contacting the openBIS server
-password = twcTEe9j
-# default flow cell space:
-default_flow_cell_space = CISD:/BSSE_FLOWCELLS/
-
-eland_config_file = config.txt
-
-bowtie_config_file = bowtie.txt
-
-bcl2fastq_config_file = SampleSheet.csv
-
-bcl2fastq_separator = ,
-
-phix_name = phiX
-
-operator = ETHZ_BSSE_DSU
-
-mail = manuel.kohler@bsse.ethz.ch
-
-header = FCID,Lane,SampleID,SampleRef,Index,Description,Control,Recipe,Operator,SampleProject
diff --git a/openbis_contrib/properties/dist/properties.sh b/openbis_contrib/properties/dist/properties.sh
deleted file mode 100644
index 00b56389c8b..00000000000
--- a/openbis_contrib/properties/dist/properties.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/bash
-#
-# Runs on Unix / Linux systems.
-# -------------------------------------------------------------------------
-
-JAR_FILE=lib/openbis-properties-client.jar
-
-#
-# change to installation directory
-#
-bin=$0
-if [ -L $bin ]; then
-  bin=`dirname $bin`/`readlink $bin`
-fi
-WD=`dirname $bin`
-cd $WD
-SCRIPT=./`basename $0`
-
-if [ "$JAVA_HOME" != "" ]; then
-	JAVA_BIN="$JAVA_HOME/bin/java"
-else
-	JAVA_BIN="java"
-fi
-
-ALL_JAVA_OPTS="-Djavax.net.ssl.trustStore=etc/openBIS.keystore $JAVA_OPTS"
-echo "Starting..."
-${JAVA_BIN} ${ALL_JAVA_OPTS} -jar $JAR_FILE "$@"
diff --git a/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/ControlledVocabulariesDTO.java b/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/ControlledVocabulariesDTO.java
deleted file mode 100644
index 88adfcc8175..00000000000
--- a/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/ControlledVocabulariesDTO.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package ch.ethz.bsse.cisd.DbDataTypeComparison;
-
-import net.lemnik.eodsql.ResultColumn;
-import ch.systemsx.cisd.common.utilities.AbstractHashable;
-
-/**
- * @author Manuel Kohler
- */
-
-class ControlledVocabulariesDTO extends AbstractHashable
-{
-    @ResultColumn("controlledVocabularies")
-    private String controlledVocabularies;
-
-    ControlledVocabulariesDTO()
-    {
-        // All Data-Object classes must have a default constructor.
-    }
-
-    public ControlledVocabulariesDTO(String controlledVocabularies)
-    {
-        super();
-        this.controlledVocabularies = controlledVocabularies;
-    }
-
-    public String getControlledVocabularies()
-    {
-        return controlledVocabularies;
-    }
-
-    public void setControlledVocabularies(String controlledVocabularies)
-    {
-        this.controlledVocabularies = controlledVocabularies;
-    }
-
-}
diff --git a/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/DataSetPropertyAssignmentsDTO.java b/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/DataSetPropertyAssignmentsDTO.java
deleted file mode 100644
index 03881291f6e..00000000000
--- a/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/DataSetPropertyAssignmentsDTO.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package ch.ethz.bsse.cisd.DbDataTypeComparison;
-
-import net.lemnik.eodsql.ResultColumn;
-import ch.systemsx.cisd.common.utilities.AbstractHashable;
-
-/**
- * @author Manuel Kohler
- */
-
-class DataSetPropertyAssignmentsDTO extends AbstractHashable
-{
-    @ResultColumn("dataSet")
-    private String dataSet;
-
-    @ResultColumn("propertyType")
-    private String propertyType;
-
-    DataSetPropertyAssignmentsDTO()
-    {
-        // All Data-Object classes must have a default constructor.
-    }
-
-    public DataSetPropertyAssignmentsDTO(String dataSet, String propertyType)
-    {
-        super();
-        this.dataSet = dataSet;
-        this.propertyType = propertyType;
-    }
-
-    public String getDataSet()
-    {
-        return dataSet;
-    }
-
-    public void setDataSet(String dataSet)
-    {
-        this.dataSet = dataSet;
-    }
-
-    public String getPropertyType()
-    {
-        return propertyType;
-    }
-
-    public void setPropertyType(String propertyType)
-    {
-        this.propertyType = propertyType;
-    }
-
-}
diff --git a/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/DbDataTypeComparison.java b/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/DbDataTypeComparison.java
deleted file mode 100644
index 73763f4ce13..00000000000
--- a/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/DbDataTypeComparison.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright 2009 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.DbDataTypeComparison;
-
-/**
- * @author Manuel Kohler
- */
-
-import java.sql.Connection;
-import java.sql.Driver;
-import java.sql.DriverManager;
-import java.sql.SQLException;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Properties;
-import java.util.Set;
-
-import net.lemnik.eodsql.QueryTool;
-
-public class DbDataTypeComparison
-{
-    private static final String DRY_RUN_FLAG = "--dry-run";
-
-    private static Connection connect(String jdbcURL) throws ClassNotFoundException, SQLException
-    {
-        Class.forName("org.postgresql.Driver");
-        final Driver driver = DriverManager.getDriver(jdbcURL);
-        final Properties props = new Properties();
-        props.put("user", System.getProperty("user.name"));
-        props.put("password", "");
-        return driver.connect(jdbcURL, props);
-    }
-
-    public static void main(String[] args) throws Exception
-    {
-        if (args.length < 3)
-        {
-            String programName = getProgramName();
-            System.err.println("Usage: java -jar " + programName
-                    + " <source_db_jdbc_string> <target_db_jdbc_string> <user_ID> [" + DRY_RUN_FLAG
-                    + "]");
-            System.exit(1);
-        }
-
-        String source_db_jdbc_string = args[0];
-        String target_db_jdbc_string = args[1];
-
-        System.out.println("Used Source: " + source_db_jdbc_string);
-        System.out.println("Used Target: " + target_db_jdbc_string);
-
-        final Connection sourceconn = connect(source_db_jdbc_string);
-        final Connection targetconn = connect(target_db_jdbc_string);
-
-        DbDataTypeComparisonDAO dbSourceDao =
-                QueryTool.getQuery(sourceconn, DbDataTypeComparisonDAO.class);
-        DbDataTypeComparisonDAO dbTargetDao =
-                QueryTool.getQuery(targetconn, DbDataTypeComparisonDAO.class);
-
-        Set<String> dataSetTypeCodes =
-                queryStringLists(Arrays.asList(dbSourceDao.listDataSetTypeCodes()),
-                        Arrays.asList(dbTargetDao.listDataSetTypeCodes()));
-
-        Set<String> experimentTypeCodes =
-                queryStringLists(Arrays.asList(dbSourceDao.listExperimentTypeCodes()),
-                        Arrays.asList(dbTargetDao.listExperimentTypeCodes()));
-
-        Set<String> materialTypeCodes =
-                queryStringLists(Arrays.asList(dbSourceDao.listMaterialTypeCodes()),
-                        Arrays.asList(dbTargetDao.listMaterialTypeCodes()));
-
-        Set<String> propertyTypeCodes =
-                queryStringLists(Arrays.asList(dbSourceDao.listPropertyTypeCodes()),
-                        Arrays.asList(dbTargetDao.listPropertyTypeCodes()));
-
-        Set<String> sampleTypeCodes =
-                queryStringLists(Arrays.asList(dbSourceDao.listSampleTypeCodes()),
-                        Arrays.asList(dbTargetDao.listSampleTypeCodes()));
-
-        Set<PropertyTypeAndDataTypeDTO> PropertyTypeAndDataType =
-                queryStringLists(dbSourceDao.getPropertyTypeAndDataType(),
-                        dbTargetDao.getPropertyTypeAndDataType());
-
-        // Assignments
-        Set<SamplePropertyAssignmentsDTO> SamplePropertyAssignments =
-                queryStringLists(dbSourceDao.getSamplePropertyAssignments(),
-                        dbTargetDao.getSamplePropertyAssignments());
-
-        Set<DataSetPropertyAssignmentsDTO> DataSetPropertyAssignments =
-                queryStringLists(dbSourceDao.getDataSetPropertyAssignments(),
-                        dbTargetDao.getDataSetPropertyAssignments());
-
-        Set<ExperimentPropertyAssignmentsDTO> ExperimentPropertyAssignments =
-                queryStringLists(dbSourceDao.getExperimentPropertyAssignments(),
-                        dbTargetDao.getExperimentPropertyAssignments());
-
-        Set<MaterialPropertyAssignmentDTO> MaterialPropertyAssignment =
-                queryStringLists(dbSourceDao.getMaterialPropertyAssignment(),
-                        dbTargetDao.getMaterialPropertyAssignment());
-
-        Set<ControlledVocabulariesDTO> ControlledVocabularies =
-                queryStringLists(dbSourceDao.getControlledVocabularies(),
-                        dbTargetDao.getControlledVocabularies());
-
-        Set<TermsOfControlledVocabulariesDTO> TermsOfControlledVocabularies =
-                queryStringLists(dbSourceDao.getTermsOfControlledVocabularies(),
-                        dbTargetDao.getTermsOfControlledVocabularies());
-
-        System.out.println("Differences:");
-        System.out.println("dataSetTypeCodes: " + dataSetTypeCodes);
-        System.out.println("experimentTypeCodes: " + experimentTypeCodes);
-        System.out.println("materialTypeCodes: " + materialTypeCodes);
-        System.out.println("propertyTypeCodes: " + propertyTypeCodes);
-        System.out.println("sampleTypeCodes: " + sampleTypeCodes);
-
-        System.out.println("====================");
-
-        System.out.println("PropertyTypeAndDataType: " + PropertyTypeAndDataType);
-        System.out.println("SamplePropertyAssignments: " + SamplePropertyAssignments);
-        System.out.println("DataSetPropertyAssignments: " + DataSetPropertyAssignments);
-        System.out.println("ExperimentPropertyAssignments: " + ExperimentPropertyAssignments);
-        System.out.println("MaterialPropertyAssignment: " + MaterialPropertyAssignment);
-        System.out.println("ControlledVocabularies: " + ControlledVocabularies);
-        System.out.println("TermsOfControlledVocabularies: " + TermsOfControlledVocabularies);
-
-        sourceconn.close();
-        targetconn.close();
-    }
-
-    private static <T> Set<T> queryStringLists(List<T> sourceList, List<T> targetList)
-    {
-        Set<T> intersect = new HashSet<T>(targetList);
-        intersect.retainAll(sourceList);
-        System.out.println("Number of common objects: " + intersect.size());
-        // System.out.println(intersect);
-
-        Set<T> diff = new HashSet<T>(targetList);
-        diff.removeAll(sourceList);
-        System.out.println("Number of differential objects: " + diff.size());
-        // System.out.println(diff);
-
-        return diff;
-    }
-
-    private static String getProgramName()
-    {
-        StackTraceElement[] stack = Thread.currentThread().getStackTrace();
-        StackTraceElement main = stack[stack.length - 1];
-        String mainClass = main.getClassName();
-
-        // workaround, because the split does not work with a '.'
-        mainClass = mainClass.replace(".", " ");
-        String[] tokens = mainClass.split(" ");
-
-        String jarName = tokens[tokens.length - 1] + ".jar";
-        return jarName;
-    }
-}
\ No newline at end of file
diff --git a/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/DbDataTypeComparisonQueryDAO.java b/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/DbDataTypeComparisonQueryDAO.java
deleted file mode 100644
index 0bc30a8a1e9..00000000000
--- a/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/DbDataTypeComparisonQueryDAO.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package ch.ethz.bsse.cisd.DbDataTypeComparison;
-
-/**
- * @author Manuel Kohler
- */
-
-import java.util.List;
-
-import net.lemnik.eodsql.Select;
-import net.lemnik.eodsql.TransactionQuery;
-
-interface DbDataTypeComparisonDAO extends TransactionQuery
-{
-    public static final int FETCH_SIZE = 1000;
-
-    // types:
-    @Select("select code as sample_types from sample_types order by code")
-    public String[] listSampleTypeCodes();
-
-    @Select("select code as data_set_types from data_set_types order by code")
-    public String[] listDataSetTypeCodes();
-
-    @Select("select code as experiment_types from experiment_types order by code")
-    public String[] listExperimentTypeCodes();
-
-    @Select("select code as material_types from material_types order by code")
-    public String[] listMaterialTypeCodes();
-
-    @Select("select code as property_types from property_types order by code;")
-    public String[] listPropertyTypeCodes();
-
-    // which data_type for a property_type?
-    @Select("select pt.code as ptCode, dt.code as dtCode from property_types pt join data_types dt on pt.daty_id=dt.id order by pt.code;")
-    public List<PropertyTypeAndDataTypeDTO> getPropertyTypeAndDataType();
-
-    // property assignments:
-    // samples
-    @Select("select st.code as sampleType, pt.code as propertyType from property_types pt"
-            + " join sample_type_property_types stpt on pt.id = stpt.prty_id"
-            + " join sample_types st on stpt.saty_id=st.id order by st.code;")
-    public List<SamplePropertyAssignmentsDTO> getSamplePropertyAssignments();
-
-    // data sets
-    @Select("select dst.code as dataSet, pt.code as propertyType from property_types pt"
-            + " join data_set_type_property_types dstpt on pt.id = dstpt.prty_id"
-            + " join data_set_types dst on dstpt.dsty_id=dst.id order by dst.code;")
-    public List<DataSetPropertyAssignmentsDTO> getDataSetPropertyAssignments();
-
-    // experiments
-    @Select("select ep.code as experimentType, pt.code as propertyType from property_types pt"
-            + " join experiment_type_property_types etpt on pt.id=etpt.exty_id"
-            + " join experiment_types ep on etpt.exty_id=ep.id order by ep.code;")
-    public List<ExperimentPropertyAssignmentsDTO> getExperimentPropertyAssignments();
-
-    // materials
-    @Select("select mt.code as materialType, pt.code as propertyType from property_types pt"
-            + " join material_type_property_types mtpt on pt.id=mtpt.prty_id"
-            + " join material_types mt on mt.id = mtpt.maty_id order by mt.code;")
-    public List<MaterialPropertyAssignmentDTO> getMaterialPropertyAssignment();
-
-    // controlled vocabularies
-    @Select("select code as controlledVocabularies from controlled_vocabularies;")
-    public List<ControlledVocabulariesDTO> getControlledVocabularies();
-
-    // controlled vocabularies with terms
-    @Select("select cv.code as controlledVocabularies, cvt.code as controlledVocabulariesTerms"
-            + " from controlled_vocabularies cv join controlled_vocabulary_terms cvt"
-            + " on cv.id=cvt.covo_id order by cv.code;")
-    public List<TermsOfControlledVocabulariesDTO> getTermsOfControlledVocabularies();
-
-}
\ No newline at end of file
diff --git a/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/ExperimentPropertyAssignmentsDTO.java b/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/ExperimentPropertyAssignmentsDTO.java
deleted file mode 100644
index 6ffd352fcad..00000000000
--- a/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/ExperimentPropertyAssignmentsDTO.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package ch.ethz.bsse.cisd.DbDataTypeComparison;
-
-import net.lemnik.eodsql.ResultColumn;
-import ch.systemsx.cisd.common.utilities.AbstractHashable;
-
-/**
- * @author Manuel Kohler
- */
-
-class ExperimentPropertyAssignmentsDTO extends AbstractHashable
-{
-    @ResultColumn("experimentType")
-    private String experimentType;
-
-    @ResultColumn("propertyType")
-    private String propertyType;
-
-    ExperimentPropertyAssignmentsDTO()
-    {
-        // All Data-Object classes must have a default constructor.
-    }
-
-    public ExperimentPropertyAssignmentsDTO(String experimentType, String propertyType)
-    {
-        super();
-        this.experimentType = experimentType;
-        this.propertyType = propertyType;
-    }
-
-    public String getExperimentType()
-    {
-        return experimentType;
-    }
-
-    public void setExperimentType(String experimentType)
-    {
-        this.experimentType = experimentType;
-    }
-
-    public String getPropertyType()
-    {
-        return propertyType;
-    }
-
-    public void setPropertyType(String propertyType)
-    {
-        this.propertyType = propertyType;
-    }
-
-}
diff --git a/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/MaterialPropertyAssignmentDTO.java b/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/MaterialPropertyAssignmentDTO.java
deleted file mode 100644
index d1033a0718f..00000000000
--- a/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/MaterialPropertyAssignmentDTO.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package ch.ethz.bsse.cisd.DbDataTypeComparison;
-
-import net.lemnik.eodsql.ResultColumn;
-import ch.systemsx.cisd.common.utilities.AbstractHashable;
-
-/**
- * @author Manuel Kohler
- */
-
-class MaterialPropertyAssignmentDTO extends AbstractHashable
-{
-
-    @ResultColumn("materialType")
-    private String materialType;
-
-    @ResultColumn("propertyType")
-    private String propertyType;
-
-    MaterialPropertyAssignmentDTO()
-    {
-        // All Data-Object classes must have a default constructor.
-    }
-
-    public MaterialPropertyAssignmentDTO(String materialType, String propertyType)
-    {
-        super();
-        this.materialType = materialType;
-        this.propertyType = propertyType;
-    }
-
-    public String getMaterialType()
-    {
-        return materialType;
-    }
-
-    public void setMaterialType(String materialType)
-    {
-        this.materialType = materialType;
-    }
-
-    public String getPropertyType()
-    {
-        return propertyType;
-    }
-
-    public void setPropertyType(String propertyType)
-    {
-        this.propertyType = propertyType;
-    }
-}
diff --git a/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/PropertyTypeAndDataTypeDTO.java b/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/PropertyTypeAndDataTypeDTO.java
deleted file mode 100644
index 448d93eead3..00000000000
--- a/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/PropertyTypeAndDataTypeDTO.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package ch.ethz.bsse.cisd.DbDataTypeComparison;
-
-import net.lemnik.eodsql.AutoGeneratedKeys;
-import net.lemnik.eodsql.ResultColumn;
-import ch.systemsx.cisd.common.utilities.AbstractHashable;
-
-/**
- * @author Manuel Kohler
- */
-
-class PropertyTypeAndDataTypeDTO extends AbstractHashable
-{
-    @AutoGeneratedKeys
-    private long id;
-
-    @ResultColumn("ptCode")
-    private String ptCode;
-
-    @ResultColumn("dtCode")
-    private String dtCode;
-
-    PropertyTypeAndDataTypeDTO()
-    {
-        // All Data-Object classes must have a default constructor.
-    }
-
-    public int compareTo(PropertyTypeAndDataTypeDTO P)
-    {
-        return ptCode.compareTo(P.getPtCode());
-    }
-
-    public PropertyTypeAndDataTypeDTO(String ptCode, String dtCode)
-    {
-        this.ptCode = ptCode;
-        this.dtCode = dtCode;
-    }
-
-    public long getId()
-    {
-        return id;
-    }
-
-    public void setId(long id)
-    {
-        this.id = id;
-    }
-
-    public String getPtCode()
-    {
-        return ptCode;
-    }
-
-    public void setPtCode(String ptCode)
-    {
-        this.ptCode = ptCode;
-    }
-
-    public String getDtCode()
-    {
-        return dtCode;
-    }
-
-    public void setDtCode(String dtCode)
-    {
-        this.dtCode = dtCode;
-    }
-
-}
\ No newline at end of file
diff --git a/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/SamplePropertyAssignmentsDTO.java b/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/SamplePropertyAssignmentsDTO.java
deleted file mode 100644
index b502f213178..00000000000
--- a/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/SamplePropertyAssignmentsDTO.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package ch.ethz.bsse.cisd.DbDataTypeComparison;
-
-import net.lemnik.eodsql.ResultColumn;
-import ch.systemsx.cisd.common.utilities.AbstractHashable;
-
-/**
- * @author Manuel Kohler
- */
-class SamplePropertyAssignmentsDTO extends AbstractHashable
-{
-    @ResultColumn("sampleType")
-    private String sampleType;
-
-    @ResultColumn("propertyType")
-    private String propertyType;
-
-    SamplePropertyAssignmentsDTO()
-    {
-        // All Data-Object classes must have a default constructor.
-    }
-
-    public SamplePropertyAssignmentsDTO(String sampleType, String propertyType)
-    {
-        super();
-        this.sampleType = sampleType;
-        this.propertyType = propertyType;
-    }
-
-    public String getSampleType()
-    {
-        return sampleType;
-    }
-
-    public void setSampleType(String sampleType)
-    {
-        this.sampleType = sampleType;
-    }
-
-    public String getPropertyType()
-    {
-        return propertyType;
-    }
-
-    public void setPropertyType(String propertyType)
-    {
-        this.propertyType = propertyType;
-    }
-
-}
diff --git a/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/TermsOfControlledVocabulariesDTO.java b/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/TermsOfControlledVocabulariesDTO.java
deleted file mode 100644
index 9d0231e3ad1..00000000000
--- a/openbis_contrib/source/java/ch/ethz/bsse/cisd/DbDataTypeComparison/TermsOfControlledVocabulariesDTO.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package ch.ethz.bsse.cisd.DbDataTypeComparison;
-
-import net.lemnik.eodsql.ResultColumn;
-import ch.systemsx.cisd.common.utilities.AbstractHashable;
-
-/**
- * @author Manuel Kohler
- */
-class TermsOfControlledVocabulariesDTO extends AbstractHashable
-{
-
-    @ResultColumn("controlledVocabularies")
-    private String controlledVocabularies;
-
-    @ResultColumn("controlledVocabulariesTerms")
-    private String controlledVocabulariesTerms;
-
-    TermsOfControlledVocabulariesDTO()
-    {
-        // All Data-Object classes must have a default constructor.
-    }
-
-    public TermsOfControlledVocabulariesDTO(String controlledVocabularies,
-            String controlledVocabulariesTerms)
-    {
-        super();
-        this.controlledVocabularies = controlledVocabularies;
-        this.controlledVocabulariesTerms = controlledVocabulariesTerms;
-    }
-
-    public String getControlledVocabularies()
-    {
-        return controlledVocabularies;
-    }
-
-    public void setControlledVocabularies(String controlledVocabularies)
-    {
-        this.controlledVocabularies = controlledVocabularies;
-    }
-
-    public String getControlledVocabulariesTerms()
-    {
-        return controlledVocabulariesTerms;
-    }
-
-    public void setControlledVocabulariesTerms(String controlledVocabulariesTerms)
-    {
-        this.controlledVocabulariesTerms = controlledVocabulariesTerms;
-    }
-}
diff --git a/openbis_contrib/source/java/ch/ethz/bsse/cisd/dsu/properties/GenomeMap.java b/openbis_contrib/source/java/ch/ethz/bsse/cisd/dsu/properties/GenomeMap.java
deleted file mode 100644
index 0ee7464c486..00000000000
--- a/openbis_contrib/source/java/ch/ethz/bsse/cisd/dsu/properties/GenomeMap.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package ch.ethz.bsse.cisd.dsu.properties;
-
-import java.util.HashMap;
-
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-/**
- * @author Manuel Kohler
- */
-
-public class GenomeMap
-{
-
-    private static String PATH_TO_GENOMES = "/array0/Genomes/";
-
-    private static HashMap<String, String> genomePaths = new HashMap<String, String>();
-    static
-    {
-        genomePaths.put("10847", PATH_TO_GENOMES + "PhiX");
-        genomePaths.put("10090", PATH_TO_GENOMES + "MusMus/Originals");
-        genomePaths.put("9606", PATH_TO_GENOMES + "HomSap/Release36.50");
-        genomePaths.put("7227", PATH_TO_GENOMES + "DrosMel/Release5");
-        genomePaths.put("6239", PATH_TO_GENOMES + "Celegans/Release112708");
-        genomePaths.put("562", PATH_TO_GENOMES + "EColi");
-        genomePaths.put("10116", PATH_TO_GENOMES + "");
-    }
-
-    public static String getGenomePath(String genome)
-    {
-        return genomePaths.get(genome);
-    }
-
-    private static HashMap<String, String> endType = new HashMap<String, String>();
-    static
-    {
-        endType.put("SINGLE_READ", "eland_extended");
-        endType.put("PAIRED_END", "eland_pair");
-    }
-
-    public static String getEndType(String openbisEndType)
-    {
-        return endType.get(openbisEndType);
-    }
-
-    private static HashMap<String, String> bowtieIndex = new HashMap<String, String>();
-    static
-    {
-        bowtieIndex.put("10847", "phiX");
-        bowtieIndex.put("10090", "ncbi37_mm9");
-        bowtieIndex.put("9606", "h_sapiens_37_asm");
-        bowtieIndex.put("7227", "d_melanogaster_fb5_22");
-    }
-
-    public static String getBowtieIndex(String genome)
-    {
-        return bowtieIndex.get(genome);
-    }
-
-    private static HashMap<Integer, String> numberOfCycles = new HashMap<Integer, String>();
-    static
-    {
-        numberOfCycles.put(58, "51+7");
-    }
-
-    public static String getNumberOfCycles(int i)
-    {
-        return numberOfCycles.get(i);
-    }
-
-}
diff --git a/openbis_contrib/source/java/ch/ethz/bsse/cisd/dsu/properties/GetSampleProperties.java b/openbis_contrib/source/java/ch/ethz/bsse/cisd/dsu/properties/GetSampleProperties.java
deleted file mode 100644
index 37fe577773a..00000000000
--- a/openbis_contrib/source/java/ch/ethz/bsse/cisd/dsu/properties/GetSampleProperties.java
+++ /dev/null
@@ -1,454 +0,0 @@
-package ch.ethz.bsse.cisd.dsu.properties;
-
-/*
-
- * Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.TreeMap;
-
-import org.apache.log4j.Logger;
-
-import ch.systemsx.cisd.common.logging.LogCategory;
-import ch.systemsx.cisd.common.logging.LogFactory;
-import ch.systemsx.cisd.common.spring.HttpInvokerUtils;
-import ch.systemsx.cisd.common.utilities.PropertyUtils;
-import ch.systemsx.cisd.openbis.generic.shared.IETLLIMSService;
-import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListSampleCriteria;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
-import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory;
-
-/**
- * @author Franz-Josef Elmer
- * @author Manuel Kohler
- */
-public class GetSampleProperties
-{
-    private static String INDEX_SEPARATOR = "-";
-
-    private static final String SERVICE_PROPERTIES = "etc/service.properties";
-
-    private static final String ELAND_CONFIG_FILE = "eland_config_file";
-
-    private static final String BOWTIE_CONFIG_FILE = "bowtie_config_file";
-
-    private static final String BCL2FASTQ_CONFIG_FILE = "bcl2fastq_config_file";
-
-    private static final String DEFAULT_FLOW_CELL_SPACE = "default_flow_cell_space";
-
-    private static final String USERNAME = "username";
-
-    private static final String PASSWORD = "password";
-
-    private static final String BCL2FASTQ_SEPARATOR = "bcl2fastq_separator";
-
-    private static final String PHIX_NAME = "phix_name";
-
-    private static final String OPERATOR = "operator";
-
-    private static final String MAIL = "mail";
-
-    private static final String HEADER = "header";
-
-    // Flow Cell properties read out
-    private static final String END_TYPE = "END_TYPE";
-
-    private static final String CYCLES = "CYCLES_REQUESTED_BY_CUSTOMER";
-
-    // Biological Sample properties read out ?
-    private static final String ORGANISM_PROPERTY = "NCBI_ORGANISM_TAXONOMY";
-
-    private static final String BARCODE_PROPERTY = "BARCODE";
-
-    private static final String INDEX2 = "INDEX2";
-
-    private static final String EXTERNAL_SAMPLE_NAME = "EXTERNAL_SAMPLE_NAME";
-
-    private enum sampleProperties
-    {
-        ORGANISM_PROPERTY1, BARCODE_PROPERTY1, BARCODE_PROPERTY2, ISPHIX, EXTERNAL_SAMPLE_NAME1,
-        CYCLES1
-    }
-
-    protected static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION,
-            GetSampleProperties.class);
-
-    public static void main(String[] args) throws IOException
-    {
-        Properties prop = PropertyUtils.loadProperties(SERVICE_PROPERTIES);
-
-        // get all values from service.properties
-        FileWriter elandWriter = new FileWriter(prop.getProperty(ELAND_CONFIG_FILE));
-        FileWriter bowtieWriter = new FileWriter(prop.getProperty(BOWTIE_CONFIG_FILE));
-        FileWriter bcl2fastqWriter = new FileWriter(prop.getProperty(BCL2FASTQ_CONFIG_FILE));
-        String user = prop.getProperty(USERNAME);
-        String password = prop.getProperty(PASSWORD);
-        String default_flow_cell_space = prop.getProperty(DEFAULT_FLOW_CELL_SPACE);
-        String bcl2fastqSeparator = prop.getProperty(BCL2FASTQ_SEPARATOR);
-        String phixName = prop.getProperty(PHIX_NAME);
-        String operator = prop.getProperty(OPERATOR);
-        String mail = prop.getProperty(MAIL);
-        String header = prop.getProperty(HEADER);
-
-        Long techId = 0L;
-        ArrayList<String> bcl2fastqList = new ArrayList<String>();
-        List<ArrayList<String>> fullList = new ArrayList<ArrayList<String>>();
-        String endType = "";
-        String cycles = "";
-
-        if (args.length < 2)
-        {
-            String programName = getProgramName();
-            System.err.println("Usage: java -jar " + programName + " <server> <FlowCell>");
-            System.exit(1);
-        }
-
-        String serverURL = args[0];
-        String sampleIdendtifier = default_flow_cell_space + args[1];
-
-        IETLLIMSService service =
-                HttpInvokerUtils.createServiceStub(IETLLIMSService.class, serverURL + "/rmi-etl",
-                        5000);
-
-        String sessionToken = service.tryToAuthenticate(user, password).getSessionToken();
-
-        Sample sample =
-                service.tryGetSampleWithExperiment(sessionToken,
-                        SampleIdentifierFactory.parse(sampleIdendtifier));
-        try
-        {
-            techId = sample.getId();
-
-        } catch (Exception ex)
-        {
-            System.err.println("Unknown FlowCell " + sampleIdendtifier);
-            System.exit(1);
-        }
-
-        operationLog.info("Found Sample " + sample.getCode() + " with Id " + sample.getId());
-        String flowCellId = extractFlowCellId(sample.getCode());
-
-        // which end type: single read or paired end?
-        List<IEntityProperty> p = sample.getProperties();
-        for (IEntityProperty property : p)
-        {
-            if (property.getPropertyType().getCode().equals(END_TYPE))
-            {
-                endType = GenomeMap.getEndType(property.tryGetAsString());
-            }
-            if (property.getPropertyType().getCode().equals(CYCLES))
-            {
-                cycles = GenomeMap.getNumberOfCycles(Integer.parseInt(property.tryGetAsString()));
-            }
-
-        }
-
-        List<Sample> flowLaneSample =
-                service.listSamples(sessionToken,
-                        ListSampleCriteria.createForContainer(new TechId(techId)));
-
-        Map<Integer, List<Sample>> parentSamples = new TreeMap<Integer, List<Sample>>();
-
-        for (Sample fl : flowLaneSample)
-        {
-            // Just extract the lane number
-
-            Integer ii = Integer.parseInt(fl.getIdentifier().split(":")[1]);
-            parentSamples.put(
-                    ii,
-                    service.listSamples(sessionToken,
-                            ListSampleCriteria.createForChild(new TechId(fl.getId()))));
-
-            for (Map.Entry<Integer, List<Sample>> entry : parentSamples.entrySet())
-            {
-
-                // System.out.println(entry.getKey() + " " + entry.getValue());
-                // System.out.println(entry.getValue().size());
-
-                for (int j = 0; j <= entry.getValue().size() - 1; ++j)
-                {
-                    // System.out.println(entry.getValue().get(0).getParents());
-                    Long s = entry.getValue().get(j).getId();
-                    // System.out.println(s);
-                    List<Sample> setParents =
-                            service.listSamples(sessionToken,
-                                    ListSampleCriteria.createForChild(new TechId(s)));
-                    // System.out.println(setParents);
-                }
-                // System.out.println(service.listSamples(sessionToken,
-                // ListSampleCriteria.createForChild(new TechId(entry.getKey()))));
-
-            }
-
-        }
-
-        for (Entry<Integer, List<Sample>> entry : parentSamples.entrySet())
-        {
-            Integer laneNumber = entry.getKey();
-            String propertyString = "";
-            String pathToGenome = "";
-            String bowtieIndexName = "";
-            List<Sample> samples = entry.getValue();
-
-            // get the properties of the first parent
-            List<IEntityProperty> properties = samples.get(0).getProperties();
-
-            for (int i = 0; i < samples.size(); i++)
-            {
-
-                List<IEntityProperty> properties1 = samples.get(i).getProperties();
-                String sampleCode = samples.get(i).getCode();
-                HashMap<sampleProperties, String> propertiesPerSample =
-                        new HashMap<sampleProperties, String>();
-
-                for (IEntityProperty property : properties1)
-                {
-                    if (property.getPropertyType().getCode().equals(ORGANISM_PROPERTY))
-                    {
-                        propertyString = property.tryGetAsString();
-                        bowtieIndexName = GenomeMap.getBowtieIndex(propertyString);
-                        if (bowtieIndexName != null)
-                        {
-                            propertiesPerSample.put(sampleProperties.ORGANISM_PROPERTY1,
-                                    bowtieIndexName);
-                            if (bowtieIndexName.equals(phixName))
-                            {
-                                propertiesPerSample.put(sampleProperties.ISPHIX, "Y");
-                            } else
-                            {
-                                propertiesPerSample.put(sampleProperties.ISPHIX, "N");
-                            }
-                        } else
-                        {
-                            propertiesPerSample.put(sampleProperties.ORGANISM_PROPERTY1,
-                                    "NO_REFERENCE_GENOME_AVAILABLE");
-                            propertiesPerSample.put(sampleProperties.ORGANISM_PROPERTY1,
-                                    bowtieIndexName);
-                            propertiesPerSample.put(sampleProperties.ISPHIX, "N");
-
-                        }
-
-                    }
-
-                    if (property.getPropertyType().getCode().equals(EXTERNAL_SAMPLE_NAME))
-                    {
-                        propertiesPerSample.put(sampleProperties.EXTERNAL_SAMPLE_NAME1,
-                                property.tryGetAsString());
-                    }
-
-                    if (property.getPropertyType().getCode().equals(BARCODE_PROPERTY))
-                    {
-                        // only take the first six nucleotides of the barcode
-                        String barcode = property.tryGetAsString();
-                        String strippedBarcode = barcode.substring(0, barcode.length() - 1);
-                        propertiesPerSample
-                                .put(sampleProperties.BARCODE_PROPERTY1, strippedBarcode);
-                    }
-
-                    if (property.getPropertyType().getCode().equals(INDEX2))
-                    {
-                        String index2 = property.tryGetAsString();
-                        if (index2 == null || index2.equals("NOINDEX"))
-                        {
-                            index2 = "";
-                            INDEX_SEPARATOR = "";
-
-                        }
-                        propertiesPerSample.put(sampleProperties.BARCODE_PROPERTY2, index2);
-
-                    }
-
-                }
-
-                // not indexed
-                if (propertiesPerSample.get(sampleProperties.BARCODE_PROPERTY1) == null)
-                {
-                    // when it is a single sample in a single lane
-                    if (samples.size() < 2)
-                    {
-                        bcl2fastqList.add(flowCellId
-                                + bcl2fastqSeparator
-                                + laneNumber
-                                + bcl2fastqSeparator
-                                + sampleCode
-                                + "_"
-                                + flowCellId
-                                + bcl2fastqSeparator
-                                + propertiesPerSample.get(sampleProperties.ORGANISM_PROPERTY1)
-                                + bcl2fastqSeparator
-                                + bcl2fastqSeparator
-                                + cleanString(propertiesPerSample
-                                        .get(sampleProperties.EXTERNAL_SAMPLE_NAME1))
-                                + bcl2fastqSeparator
-                                + propertiesPerSample.get(sampleProperties.ISPHIX)
-                                + bcl2fastqSeparator + cycles + bcl2fastqSeparator + operator
-                                + bcl2fastqSeparator + sample.getCode() + "_" + laneNumber + "\n");
-                    }
-                    // single indexed
-                } else if (propertiesPerSample.get(sampleProperties.BARCODE_PROPERTY2) == null)
-
-                {
-                    bcl2fastqList.add(flowCellId
-                            + bcl2fastqSeparator
-                            + laneNumber
-                            + bcl2fastqSeparator
-                            + sampleCode
-                            + "_"
-                            + flowCellId
-                            + bcl2fastqSeparator
-                            + propertiesPerSample.get(sampleProperties.ORGANISM_PROPERTY1)
-                            + bcl2fastqSeparator
-                            + propertiesPerSample.get(sampleProperties.BARCODE_PROPERTY1)
-                            + bcl2fastqSeparator
-                            + cleanString(propertiesPerSample
-                                    .get(sampleProperties.EXTERNAL_SAMPLE_NAME1))
-                            + bcl2fastqSeparator + propertiesPerSample.get(sampleProperties.ISPHIX)
-                            + bcl2fastqSeparator + cycles + bcl2fastqSeparator + operator
-                            + bcl2fastqSeparator + sample.getCode() + "_" + laneNumber + "\n");
-                }
-                // Dual indexed
-                else
-                {
-                    bcl2fastqList.add(flowCellId
-                            + bcl2fastqSeparator
-                            + laneNumber
-                            + bcl2fastqSeparator
-                            + sampleCode
-                            + "_"
-                            + flowCellId
-                            + bcl2fastqSeparator
-                            + propertiesPerSample.get(sampleProperties.ORGANISM_PROPERTY1)
-                            + bcl2fastqSeparator
-                            + propertiesPerSample.get(sampleProperties.BARCODE_PROPERTY1)
-                            + INDEX_SEPARATOR
-                            + propertiesPerSample.get(sampleProperties.BARCODE_PROPERTY2)
-                            + bcl2fastqSeparator
-                            + cleanString(propertiesPerSample
-                                    .get(sampleProperties.EXTERNAL_SAMPLE_NAME1))
-                            + bcl2fastqSeparator + propertiesPerSample.get(sampleProperties.ISPHIX)
-                            + bcl2fastqSeparator + cycles + bcl2fastqSeparator + operator
-                            + bcl2fastqSeparator + sample.getCode() + "_" + laneNumber + "\n");
-                }
-            }
-            fullList.add(bcl2fastqList);
-            bcl2fastqList = new ArrayList<String>();
-
-            for (IEntityProperty property : properties)
-            {
-                if (property.getPropertyType().getCode().equals(BARCODE_PROPERTY))
-                {
-                    propertyString = property.tryGetAsString();
-                }
-
-                if (property.getPropertyType().getCode().equals(ORGANISM_PROPERTY))
-                {
-                    try
-                    {
-                        propertyString = property.tryGetAsString();
-                        pathToGenome = GenomeMap.getGenomePath(propertyString);
-                        bowtieIndexName = GenomeMap.getBowtieIndex(propertyString);
-                        if (pathToGenome != null)
-                        // TODO: if null then handle properly
-                        {
-                            elandWriter.write(laneNumber + ":ELAND_GENOME " + pathToGenome + "\n");
-                            elandWriter.write(laneNumber + ":ANALYSIS " + endType + "\n");
-                            bowtieWriter.write(bowtieIndexName + "\n");
-                        }
-
-                    } catch (IOException ex)
-                    {
-                        ex.printStackTrace();
-                    }
-                }
-            }
-        }
-        elandWriter.write("ELAND_FASTQ_FILES_PER_PROCESS 8\n" + "EMAIL_LIST " + mail);
-        elandWriter.close();
-        bowtieWriter.close();
-        writebcl2fastqList(bcl2fastqWriter, fullList, header);
-        operationLog.info("Writing " + prop.getProperty(BCL2FASTQ_CONFIG_FILE)
-                + " for BCL to FASTQ conversion");
-        operationLog
-                .info("Writing " + prop.getProperty(ELAND_CONFIG_FILE) + " for Eland Alignment");
-        operationLog.info("Writing " + prop.getProperty(BOWTIE_CONFIG_FILE)
-                + " for Bowtie Alignment");
-        service.logout(sessionToken);
-    }
-
-    private static void writebcl2fastqList(FileWriter bcl2fastqWriter,
-            List<ArrayList<String>> fullList, String header) throws IOException
-    {
-        bcl2fastqWriter.write(header + "\n");
-
-        for (List<String> element : fullList)
-        {
-            for (String e : element)
-            {
-                operationLog.debug(e);
-                bcl2fastqWriter.write(e);
-            }
-        }
-        bcl2fastqWriter.close();
-    }
-
-    private static String getProgramName()
-    {
-        StackTraceElement[] stack = Thread.currentThread().getStackTrace();
-        StackTraceElement main = stack[stack.length - 1];
-        String mainClass = main.getClassName();
-
-        // workaround, because the split does not work with a '.'
-        mainClass = mainClass.replace(".", " ");
-        String[] tokens = mainClass.split(" ");
-
-        String jarName = tokens[tokens.length - 1] + ".jar";
-        return jarName;
-    }
-
-    private static String extractFlowCellId(String flowCellName)
-    {
-        String flowCell[] = flowCellName.split("_");
-        // this is a GA
-        if (flowCell.length == 2)
-        {
-            return (flowCell[flowCell.length - 1]);
-        } else
-        {
-            // substring removes the A or B which is the Flow Cell tray in the HiSeq
-            return (flowCell[flowCell.length - 1].substring(1));
-        }
-    }
-
-    public static String cleanString(String dirtyString)
-    /*
-     * Replace all (Unicode) characters that are neither letters nor numbers with a "_"
-     */
-    {
-        String cleanString = dirtyString.replaceAll("[^\\p{L}\\p{N}]", "_");
-        return cleanString;
-
-    }
-
-}
\ No newline at end of file
diff --git a/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/CategoryOracle.java b/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/CategoryOracle.java
deleted file mode 100644
index 0c5f6d8a1ad..00000000000
--- a/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/CategoryOracle.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dynamix.categoryoracle;
-
-/**
- * @author Izabela Adamczyk
- */
-class CategoryOracle
-{
-    private static final String DISCARD = "Discard";
-
-    private static final String UP = "up";
-
-    private static final String YES = "yes";
-
-    private static final String NO = "no";
-
-    private static final String CONSTANT = "Constant";
-
-    private static final String GOOD = "Good";
-
-    private enum Category
-    {
-        OTHER, DISCARDED_CHAMBER, GOOD_CHAMBER_INTENSITY_AND_LOCALIZATION_CHANGE,
-        GOOD_CHAMBER_LOCALIZATION_CHANGE, GOOD_CHAMBER_INTENSITY_UP, GOOD_CHAMBER_NO_CHANGE;
-    }
-
-    public static String calculateCategory(InputRow in)
-    {
-        String quality = in.getQuality();
-        String intensityChange = in.getIntensityChange();
-        String localizationChange = in.getLocalizationChange();
-        return calculateCategory(quality, intensityChange, localizationChange).toString();
-    }
-
-    private static Category calculateCategory(String quality, String intensityChange,
-            String localizationChange)
-    {
-        if (eq(quality, GOOD) && eq(intensityChange, CONSTANT) && eq(localizationChange, NO))
-        {
-            return Category.GOOD_CHAMBER_NO_CHANGE;
-        } else if (eq(quality, GOOD) && eq(intensityChange, UP) && eq(localizationChange, NO))
-        {
-            return Category.GOOD_CHAMBER_INTENSITY_UP;
-        } else if (eq(quality, GOOD) && eq(intensityChange, NO) && eq(localizationChange, YES))
-        {
-            return Category.GOOD_CHAMBER_LOCALIZATION_CHANGE;
-        } else if (eq(quality, GOOD) && eq(intensityChange, CONSTANT)
-                && eq(localizationChange, YES))
-        {
-            return Category.GOOD_CHAMBER_INTENSITY_AND_LOCALIZATION_CHANGE;
-        } else if (eq(quality, DISCARD))
-        {
-            return Category.DISCARDED_CHAMBER;
-        } else
-        {
-            return Category.OTHER;
-        }
-    }
-
-    private static boolean eq(String property, String value)
-    {
-        return equalsIgnoreCase(property, value);
-    }
-
-    private static boolean equalsIgnoreCase(String str1, String str2)
-    {
-        return str1 == null ? str2 == null : str1.equalsIgnoreCase(str2);
-    }
-}
diff --git a/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/FeatureVectorConverter.java b/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/FeatureVectorConverter.java
deleted file mode 100644
index 9fd80590b4d..00000000000
--- a/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/FeatureVectorConverter.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dynamix.categoryoracle;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.io.FileUtils;
-
-import ch.systemsx.cisd.common.filesystem.FileUtilities;
-import ch.systemsx.cisd.common.parser.IParserObjectFactory;
-import ch.systemsx.cisd.common.parser.IParserObjectFactoryFactory;
-import ch.systemsx.cisd.common.parser.IPropertyMapper;
-import ch.systemsx.cisd.common.parser.ParserException;
-import ch.systemsx.cisd.common.parser.ParsingException;
-import ch.systemsx.cisd.openbis.generic.shared.parser.BisTabFileLoader;
-
-/**
- * @author Izabela Adamczyk
- */
-public class FeatureVectorConverter
-{
-
-    public static void main(String[] args) throws ParserException, ParsingException,
-            IllegalArgumentException, IOException
-    {
-        String in = args[0];
-        IParserObjectFactoryFactory<InputRow> parser = new IParserObjectFactoryFactory<InputRow>()
-            {
-                public IParserObjectFactory<InputRow> createFactory(IPropertyMapper propertyMapper)
-                        throws ParserException
-                {
-                    return new InputRowFactory(InputRow.class, propertyMapper);
-                }
-            };
-        BisTabFileLoader<InputRow> loader = new BisTabFileLoader<InputRow>(parser, false);
-        File inFile = new File(in);
-        Map<String, String> defaults = Collections.emptyMap();
-        List<InputRow> list = loader.load(FileUtils.openInputStream(inFile), defaults);
-        List<InputRowsNamedCollection> experiments = InputRowsHelper.extract(list);
-        for (InputRowsNamedCollection e : experiments)
-        {
-            String outName = e.getName() + ".csv";
-            File outFile =
-                    FileUtilities.createNextNumberedFile(new File(inFile.getParent(), outName),
-                            null);
-            FileUtils.writeLines(outFile, InputRowsHelper.toTsv(e.getRows()));
-            System.out.println(outFile.getPath());
-        }
-    }
-
-}
diff --git a/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/Features.java b/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/Features.java
deleted file mode 100644
index b57d9202843..00000000000
--- a/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/Features.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dynamix.categoryoracle;
-
-import java.util.Arrays;
-import java.util.List;
-
-import ch.systemsx.cisd.common.annotation.BeanProperty;
-
-/**
- * @author Izabela Adamczyk
- */
-public class Features
-{
-
-    private static final String POSITION = "position";
-
-    private static final String SIDE = "side";
-
-    private static final String QUALITY = "quality";
-
-    private static final String QUALITY_DESC = "quality_desc";
-
-    private static final String INTENSITY_CHANGE = "intensity_change";
-
-    private static final String LOCALIZATION_CHANGE = "localization_change";
-
-    private static final String END_LOCALIZATION = "end_localization";
-
-    private static final String INITIAL_LOCALIZATION = "initial_localization";
-
-    private String position;
-
-    private String side;
-
-    private String quality;
-
-    private String qualityDesc;
-
-    private String intensityChange;
-
-    private String localizationChange;
-
-    private String initialLocalization;
-
-    private String endLocalization;
-
-    public Features()
-    {
-    }
-
-    public String getPosition()
-    {
-        return position;
-    }
-
-    @BeanProperty(label = POSITION)
-    public void setPosition(String position)
-    {
-        this.position = position;
-    }
-
-    public String getSide()
-    {
-        return side;
-    }
-
-    @BeanProperty(label = SIDE)
-    public void setSide(String side)
-    {
-        this.side = side;
-    }
-
-    public String getQuality()
-    {
-        return quality;
-    }
-
-    @BeanProperty(label = QUALITY)
-    public void setQuality(String quality)
-    {
-        this.quality = quality;
-    }
-
-    public String getQualityDesc()
-    {
-        return qualityDesc;
-    }
-
-    @BeanProperty(label = QUALITY_DESC)
-    public void setQualityDesc(String qualityDesc)
-    {
-        this.qualityDesc = qualityDesc;
-    }
-
-    public String getIntensityChange()
-    {
-        return intensityChange;
-    }
-
-    @BeanProperty(label = INTENSITY_CHANGE)
-    public void setIntensityChange(String intensityChange)
-    {
-        this.intensityChange = intensityChange;
-    }
-
-    public String getLocalizationChange()
-    {
-        return localizationChange;
-    }
-
-    @BeanProperty(label = LOCALIZATION_CHANGE)
-    public void setLocalizationChange(String localizationChange)
-    {
-        this.localizationChange = localizationChange;
-    }
-
-    public String getInitialLocalization()
-    {
-        return initialLocalization;
-    }
-
-    @BeanProperty(label = INITIAL_LOCALIZATION)
-    public void setInitialLocalization(String initialLocalization)
-    {
-        this.initialLocalization = initialLocalization;
-    }
-
-    public String getEndLocalization()
-    {
-        return endLocalization;
-    }
-
-    @BeanProperty(label = END_LOCALIZATION)
-    public void setEndLocalization(String endLocalization)
-    {
-        this.endLocalization = endLocalization;
-    }
-
-    /** NOTE: Order strictly connected with {@link #getColumns()} */
-    public static List<String> getHeaderColumns()
-    {
-        return Arrays.asList(asHeader(END_LOCALIZATION, "End Localization"),
-                asHeader(INITIAL_LOCALIZATION, "Initial Localization"),
-                asHeader(INTENSITY_CHANGE, "Intensity Change"),
-                asHeader(LOCALIZATION_CHANGE, "Localization Change"), asHeader(POSITION, "Position"),
-                asHeader(QUALITY, "Quality"), asHeader(QUALITY_DESC, "Quality Description"),
-                asHeader(SIDE, "Side"));
-    }
-
-    static String asHeader(String code, String label)
-    {
-        return "<" + code + "> " + label;
-    }
-
-    /** NOTE: Order strictly connected with {@link #getHeaderColumns()} */
-    public List<String> getColumns()
-    {
-        return Arrays.asList(getEndLocalization(), getInitialLocalization(), getIntensityChange(),
-                getLocalizationChange(), getPosition(), getQuality(), getQualityDesc(), getSide());
-    }
-}
\ No newline at end of file
diff --git a/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/InputRow.java b/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/InputRow.java
deleted file mode 100644
index cf8b599317f..00000000000
--- a/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/InputRow.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dynamix.categoryoracle;
-
-import ch.systemsx.cisd.common.annotation.BeanProperty;
-
-/**
- * @author Izabela Adamczyk
- */
-public final class InputRow extends Features
-{
-    private static final String IDENTIFIER = "identifier";
-
-    private static final String CONTAINER = "container";
-
-    private static final String YORF = "yorf";
-
-    private String yorf;
-
-    private String container;
-
-    private String identifier;
-
-    public InputRow()
-    {
-    }
-
-    public String getContainer()
-    {
-        return container;
-    }
-
-    @BeanProperty(label = CONTAINER)
-    public void setContainer(String container)
-    {
-        this.container = container;
-    }
-
-    public String getIdentifier()
-    {
-        return identifier;
-    }
-
-    @BeanProperty(label = IDENTIFIER)
-    public void setIdentifier(String identifier)
-    {
-        this.identifier = identifier;
-    }
-
-    public String getYorf()
-    {
-        return yorf;
-    }
-
-    @BeanProperty(label = YORF)
-    public void setYorf(String yorf)
-    {
-        this.yorf = yorf;
-    }
-
-}
\ No newline at end of file
diff --git a/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/InputRowFactory.java b/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/InputRowFactory.java
deleted file mode 100644
index 9716d2cf084..00000000000
--- a/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/InputRowFactory.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dynamix.categoryoracle;
-
-import ch.systemsx.cisd.common.parser.AbstractParserObjectFactory;
-import ch.systemsx.cisd.common.parser.IPropertyMapper;
-
-/**
- * @author Izabela Adamczyk
- */
-final class InputRowFactory extends AbstractParserObjectFactory<InputRow>
-{
-
-    protected InputRowFactory(Class<InputRow> beanClass, IPropertyMapper propertyMapper)
-    {
-        super(beanClass, propertyMapper);
-    }
-
-}
\ No newline at end of file
diff --git a/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/InputRowsHelper.java b/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/InputRowsHelper.java
deleted file mode 100644
index 471bcdfea90..00000000000
--- a/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/InputRowsHelper.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dynamix.categoryoracle;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import ch.systemsx.cisd.common.utilities.BeanUtils;
-
-/**
- * @author Izabela Adamczyk
- */
-class InputRowsHelper
-{
-
-    public static List<InputRowsNamedCollection> extract(List<InputRow> list)
-    {
-        Map<String, List<InputRow>> map = new HashMap<String, List<InputRow>>();
-        for (InputRow r : list)
-        {
-            String name = r.getContainer();
-            if (map.get(name) == null)
-            {
-                map.put(name, new ArrayList<InputRow>());
-            }
-            map.get(name).add(r);
-        }
-        ArrayList<InputRowsNamedCollection> result = new ArrayList<InputRowsNamedCollection>();
-        for (String key : map.keySet())
-        {
-            InputRowsNamedCollection exp = new InputRowsNamedCollection();
-            exp.setName(key);
-            exp.setRows(map.get(key));
-            result.add(exp);
-        }
-        return result;
-    }
-
-    public static List<String> toTsv(List<InputRow> list)
-    {
-        ArrayList<String> result = new ArrayList<String>();
-        result.add(new TsvBuilder(OutputRow.getHeaderColumns()).toString());
-        for (InputRow r : list)
-        {
-            result.add(new TsvBuilder(convert(r).getColumns()).toString());
-        }
-        return result;
-    }
-
-    private static OutputRow convert(InputRow in)
-    {
-        OutputRow outputRow = new OutputRow();
-        BeanUtils.fillBean(OutputRow.class, outputRow, in);
-        outputRow.setWellName(in.getIdentifier().split(":")[1]);
-        String category = CategoryOracle.calculateCategory(in);
-        outputRow.setCategory(category);
-        return outputRow;
-    }
-
-}
diff --git a/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/InputRowsNamedCollection.java b/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/InputRowsNamedCollection.java
deleted file mode 100644
index 7ffc9d82556..00000000000
--- a/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/InputRowsNamedCollection.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dynamix.categoryoracle;
-
-import java.util.List;
-
-/**
- * @author Izabela Adamczyk
- */
-class InputRowsNamedCollection
-{
-    String name;
-
-    List<InputRow> rows;
-
-    public String getName()
-    {
-        return name;
-    }
-
-    public void setName(String name)
-    {
-        this.name = name;
-    }
-
-    public List<InputRow> getRows()
-    {
-        return rows;
-    }
-
-    public void setRows(List<InputRow> rows)
-    {
-        this.rows = rows;
-    }
-
-}
diff --git a/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/OutputRow.java b/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/OutputRow.java
deleted file mode 100644
index 57f4018edaa..00000000000
--- a/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/OutputRow.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dynamix.categoryoracle;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import ch.systemsx.cisd.common.annotation.BeanProperty;
-
-/**
- * @author Izabela Adamczyk
- */
-final class OutputRow extends Features
-{
-
-    private static final String CATEGORY = "category";
-
-    private static final String WELL_NAME = "WellName";
-
-    private String wellName;
-
-    private String category;
-
-    public String getWellName()
-    {
-        return wellName;
-    }
-
-    @BeanProperty(label = WELL_NAME)
-    public void setWellName(String wellName)
-    {
-        this.wellName = wellName;
-    }
-
-    public String getCategory()
-    {
-        return category;
-    }
-
-    @BeanProperty(label = CATEGORY)
-    public void setCategory(String category)
-    {
-        this.category = category;
-    }
-
-    /** NOTE: Order strictly connected with {@link #getColumns()} */
-    public static List<String> getHeaderColumns()
-    {
-        ArrayList<String> list = new ArrayList<String>();
-        list.add(WELL_NAME);
-        list.add(Features.asHeader(CATEGORY, "Category"));
-        list.addAll(Features/* super class */.getHeaderColumns());
-        return list;
-    }
-
-    /** NOTE: Order strictly connected with {@link #getHeaderColumns()} */
-    @Override
-    public List<String> getColumns()
-    {
-        ArrayList<String> list = new ArrayList<String>();
-        list.add(getWellName());
-        list.add(getCategory());
-        list.addAll(super.getColumns());
-        return list;
-    }
-
-}
\ No newline at end of file
diff --git a/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/TsvBuilder.java b/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/TsvBuilder.java
deleted file mode 100644
index 5fc49229f79..00000000000
--- a/openbis_contrib/source/java/ch/ethz/bsse/cisd/dynamix/categoryoracle/TsvBuilder.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * 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.
- */
-
-package ch.ethz.bsse.cisd.dynamix.categoryoracle;
-
-import java.util.List;
-
-/**
- * @author Izabela Adamczyk
- */
-public class TsvBuilder
-{
-    static final String TSV_SEPARATOR = ";";
-
-    StringBuilder builder = new StringBuilder();
-
-    boolean empty = true;
-
-    public TsvBuilder()
-    {
-    }
-
-    public TsvBuilder(List<String> columns)
-    {
-        addColumns(columns.toArray(new String[0]));
-    }
-
-    public void addColumns(String... columns)
-    {
-        for (String c : columns)
-        {
-            if (empty)
-            {
-                empty = false;
-            } else
-            {
-                builder.append(TsvBuilder.TSV_SEPARATOR);
-            }
-            builder.append(c);
-        }
-    }
-
-    @Override
-    public String toString()
-    {
-        return builder.toString();
-    }
-
-}
diff --git a/openbis_contrib/source/java/log.xml b/openbis_contrib/source/java/log.xml
deleted file mode 100644
index 5cee0a68436..00000000000
--- a/openbis_contrib/source/java/log.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
-
-  <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
-     <layout class="org.apache.log4j.PatternLayout">
-       <param name="ConversionPattern" value="%d %-5p [%t] %c - %m%n"/>
-     </layout>
-  </appender>
-
-  <appender name="NULL" class="org.apache.log4j.varia.NullAppender" />
-
-  <root>
-     <priority value ="info" />
-     <appender-ref ref="STDOUT" />
-  </root>
-
-</log4j:configuration>
diff --git a/openbis_contrib/source/java/log4j.properties b/openbis_contrib/source/java/log4j.properties
deleted file mode 100644
index 50010acd53e..00000000000
--- a/openbis_contrib/source/java/log4j.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# Default Logging Configuration
-
-log4j.rootLogger=INFO, stdout
-#to increase logging level
-#log4j.logger.org.dcm4cheri=DEBUG
-#to decrease logging level
-#log4j.logger.org.dcm4cheri=ERROR
-
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %-5p %x - %m\n
diff --git a/openbis_standard_technologies/build.gradle b/openbis_standard_technologies/build.gradle
index e7b48dad3c7..177a7947f03 100644
--- a/openbis_standard_technologies/build.gradle
+++ b/openbis_standard_technologies/build.gradle
@@ -37,7 +37,6 @@ evaluationDependsOn(':dbmigration')
 evaluationDependsOn(':openbis')
 evaluationDependsOn(':datastore_server')
 evaluationDependsOn(':screening')
-evaluationDependsOn(':deep_sequencing_unit')
 evaluationDependsOn(':big_data_link_server')
 evaluationDependsOn(':openbis_ng_ui')
 
@@ -79,8 +78,7 @@ dependencies {
 
 	zipping "eclipse:jetty-distribution:${jettyVersion}@zip"
 
-	datastore_server project(':deep_sequencing_unit'),
-					 project(':screening'),
+	datastore_server project(':screening'),
 					 'bioformats:bioformats:6.5.1',
 					 'imagej:ij:1.43u',
 					 'cisd:cisd-openbis-knime-server:13.6.0.r29301',
@@ -341,7 +339,6 @@ task zipCorePlugins(type: SymZip) {
   downloadCorePlugin('https://github.com/aarpon/obit_microscopy_core_technology/archive/release/20.x.zip', 'microscopy')
   downloadCorePlugin('https://github.com/aarpon/obit_shared_core_technology/archive/release/20.x.zip', 'shared')
   from project(':screening').fileTree(dir: 'source/core-plugins', includes:['screening/**', 'screening-optional/**'], excludes:['**/package-to-dist'])
-  from project(':deep_sequencing_unit').fileTree(dir: 'source/core-plugins', includes:['illumina-ngs/**'], excludes:['**/package-to-dist'])
   from fileTree(dir: 'targets/downloads/obit_flow_core_technology-release-20.x/core-plugins', includes:['flow/**'])
   from fileTree(dir: 'targets/downloads/obit_microscopy_core_technology-release-20.x/core-plugins', includes:['microscopy/**'])
   from fileTree(dir: 'targets/downloads/obit_shared_core_technology-release-20.x/core-plugins', includes:['shared/**'])
diff --git a/openbis_standard_technologies/settings.gradle b/openbis_standard_technologies/settings.gradle
index 3965356da9a..6a63d12efca 100644
--- a/openbis_standard_technologies/settings.gradle
+++ b/openbis_standard_technologies/settings.gradle
@@ -1,3 +1,3 @@
 includeFlat 'commonbase', 'common', 'openbis_api', 'openbis-common', 'authentication', 'dbmigration', 'openbis',
-        'datastore_server', 'screening', 'deep_sequencing_unit', 'big_data_link_server',
+        'datastore_server', 'screening', 'big_data_link_server',
         'openbis_ng_ui', 'microservice_server_template'
diff --git a/ui-test/settings.gradle b/ui-test/settings.gradle
index 461cbd212e2..40136a17f7f 100644
--- a/ui-test/settings.gradle
+++ b/ui-test/settings.gradle
@@ -1,2 +1,2 @@
 includeFlat 'commonbase', 'common', 'openbis_api', 'openbis-common', 'authentication', 'dbmigration', 'openbis',
-        'datastore_server', 'screening', 'deep_sequencing_unit', 'openbis_standard_technologies'
+        'datastore_server', 'screening', 'openbis_standard_technologies'
-- 
GitLab