From bffbd86c8e48da1a23a3e3cfaa01cfc93027bb88 Mon Sep 17 00:00:00 2001
From: valery <valery.fremaux@gmail.com>
Date: Mon, 4 Dec 2017 20:53:40 +0100
Subject: [PATCH] Automated sync from SVN

---
 amd/src/library.js                            |   15 +-
 browse.php                                    |   15 +-
 classes/navigator.class.php                   |   10 +-
 index.php                                     |   12 +-
 jquery/jquery-animateNumber-0.0.13/.gitignore |    1 +
 jquery/jquery-animateNumber-0.0.13/LICENSE    |   20 +
 jquery/jquery-animateNumber-0.0.13/README.md  |   74 +
 .../jquery-animateNumber-0.0.13/README.ru.md  |   75 +
 .../animateNumber.jquery.json                 |   36 +
 jquery/jquery-animateNumber-0.0.13/bower.json |   32 +
 .../demo/index.html                           |   43 +
 .../demo/jquery.color.min.js                  |   13 +
 .../jquery-animateNumber-0.0.13/gruntfile.js  |   34 +
 .../jquery.animateNumber.js                   |  173 +
 .../jquery.animateNumber.min.js               |    8 +
 .../jquery-animateNumber-0.0.13/package.json  |   31 +
 jquery/plugins.php                            |    6 +
 jquery/slick/Thumbs.db                        |  Bin 0 -> 3072 bytes
 jquery/slick/ajax-loader.gif                  |  Bin 0 -> 4178 bytes
 jquery/slick/config.rb                        |   10 +
 jquery/slick/fonts/slick.eot                  |  Bin 0 -> 2048 bytes
 jquery/slick/fonts/slick.svg                  |   14 +
 jquery/slick/fonts/slick.ttf                  |  Bin 0 -> 1892 bytes
 jquery/slick/fonts/slick.woff                 |  Bin 0 -> 1380 bytes
 jquery/slick/slick-theme.css                  |  204 ++
 jquery/slick/slick-theme.less                 |  168 +
 jquery/slick/slick-theme.scss                 |  194 ++
 jquery/slick/slick.css                        |  200 ++
 jquery/slick/slick.js                         | 2892 +++++++++++++++++
 jquery/slick/slick.less                       |   98 +
 jquery/slick/slick.min.js                     |   18 +
 jquery/slick/slick.scss                       |   98 +
 lang/en/local_sharedresources.php             |   26 +-
 lang/fr/local_sharedresources.php             |   26 +-
 lib.php                                       |   45 +-
 oai/oai2/record_lomfr.php                     |    5 +-
 oai/oaidp-config.php                          |    5 +-
 renderer.php                                  |   78 +-
 settings.php                                  |   60 +-
 templates/resourcebody.mustache               |   16 +-
 templates/resourcecategory.mustache           |    4 +-
 templates/resourcecommands.mustache           |   22 +-
 templates/searchform.mustache                 |    8 +-
 templates/searchform_tableless.mustache       |    8 +-
 version.php                                   |    2 +-
 45 files changed, 4651 insertions(+), 148 deletions(-)
 create mode 100644 jquery/jquery-animateNumber-0.0.13/.gitignore
 create mode 100644 jquery/jquery-animateNumber-0.0.13/LICENSE
 create mode 100644 jquery/jquery-animateNumber-0.0.13/README.md
 create mode 100644 jquery/jquery-animateNumber-0.0.13/README.ru.md
 create mode 100644 jquery/jquery-animateNumber-0.0.13/animateNumber.jquery.json
 create mode 100644 jquery/jquery-animateNumber-0.0.13/bower.json
 create mode 100644 jquery/jquery-animateNumber-0.0.13/demo/index.html
 create mode 100644 jquery/jquery-animateNumber-0.0.13/demo/jquery.color.min.js
 create mode 100644 jquery/jquery-animateNumber-0.0.13/gruntfile.js
 create mode 100644 jquery/jquery-animateNumber-0.0.13/jquery.animateNumber.js
 create mode 100644 jquery/jquery-animateNumber-0.0.13/jquery.animateNumber.min.js
 create mode 100644 jquery/jquery-animateNumber-0.0.13/package.json
 create mode 100644 jquery/plugins.php
 create mode 100644 jquery/slick/Thumbs.db
 create mode 100644 jquery/slick/ajax-loader.gif
 create mode 100644 jquery/slick/config.rb
 create mode 100644 jquery/slick/fonts/slick.eot
 create mode 100644 jquery/slick/fonts/slick.svg
 create mode 100644 jquery/slick/fonts/slick.ttf
 create mode 100644 jquery/slick/fonts/slick.woff
 create mode 100644 jquery/slick/slick-theme.css
 create mode 100644 jquery/slick/slick-theme.less
 create mode 100644 jquery/slick/slick-theme.scss
 create mode 100644 jquery/slick/slick.css
 create mode 100644 jquery/slick/slick.js
 create mode 100644 jquery/slick/slick.less
 create mode 100644 jquery/slick/slick.min.js
 create mode 100644 jquery/slick/slick.scss

diff --git a/amd/src/library.js b/amd/src/library.js
index ebef391..fbec812 100644
--- a/amd/src/library.js
+++ b/amd/src/library.js
@@ -38,8 +38,9 @@ define(['jquery', 'core/config', 'core/log'], function ($, cfg, log) {
                 }
             );
 
-            $('.sharedressource-toggle-handle').on('click', this.toggle_info_panel);
+            $('.sharedresource-toggle-handle').bind('click', this.toggle_info_panel);
             $('.sharedresource-mark-like').on('click', '', args, this.ajax_mark_like);
+            $('.sharedresource-actionlink').bind('click', this.integrate);
         },
 
         ajax_mark_like: function (e) {
@@ -80,5 +81,17 @@ define(['jquery', 'core/config', 'core/log'], function ($, cfg, log) {
                 $('#sharedresource-toggle-' + residentifier).attr('src', iconsrc);
             }
         },
+
+        integrate: function() {
+
+            var that = $(this);
+
+            var matches = that.attr('id').match(/id-(\w+)-(\d+)/);
+            command = matches[1];
+            ix = matches[2];
+            document.forms['add' + ix].mode.value = command;
+            document.forms['add' + ix].submit();
+        }
+
     };
 });
\ No newline at end of file
diff --git a/browse.php b/browse.php
index e5deead..2cb869d 100644
--- a/browse.php
+++ b/browse.php
@@ -65,7 +65,7 @@ $filters = null;
 
 $navigator = new \local_sharedresources\browser\navigation();
 
-$classificationfilters = $navigator->get_category_filters();
+// $classificationfilters = $navigator->get_category_filters();
 
 $i = 0;
 foreach ($classificationfilters as $afilter) {
@@ -89,7 +89,10 @@ if (is_dir($CFG->dirroot.'/local/staticguitexts')) {
 
 // Making filters.
 
-echo $renderer->filters($catid, $catpath);
+echo $renderer->searchlink();
+// echo $renderer->filters($catid, $catpath);
+
+echo $renderer->taxonomy_select();
 
 // Calling navigation.
 
@@ -98,10 +101,14 @@ if ($catid) {
     echo $renderer->category($category, $catpath, $navigator->count_entries_rec($category), 'current', true);
 
     // Root of the catalog cannot have resourses.
-    echo $renderer->resourcelist(array_keys($cattree->entries));
+    echo $renderer->resourcelist(array_keys($category->entries));
+} else {
+    $category = new StdClass;
+    $catid = 0;
+    $category->cats = $navigator->get_children($$catid);
 }
 
-echo $renderer->children($cattree, $catpath);
+echo $renderer->children($category, $catpath);
 
 echo $renderer->searchlink();
 
diff --git a/classes/navigator.class.php b/classes/navigator.class.php
index 7a69b10..cbf1281 100644
--- a/classes/navigator.class.php
+++ b/classes/navigator.class.php
@@ -65,7 +65,10 @@ class navigation {
         return $DB->get_record('sharedresource_taxonomy', array('id' => $catid));
     }
 
-    // Counts the total number of entries 
+    /**
+     * Counts the total number of entries recusrsively in the subtree.
+     * @param int $catid
+     */
     function count_entries_rec($catid) {
         global $DB;
 
@@ -86,9 +89,14 @@ class navigation {
         }
     }
 
+    /**
+     * Get children of a category
+     */
     function get_children(&$categoryorid) {
         global $DB;
 
+        $config = get_config('sharedresource');
+
         if (is_object($categoryorid)) {
             $catid = $category->id;
         } else {
diff --git a/index.php b/index.php
index 50ecc7e..ecaa385 100644
--- a/index.php
+++ b/index.php
@@ -46,6 +46,7 @@ $PAGE->requires->jquery();
 $PAGE->requires->js('/local/sharedresources/js/search.js', true);
 
 $config = get_config('sharedresource');
+$mtdplugin = sharedresource_get_plugin($config->schema);
 
 $edit = optional_param('edit', -1, PARAM_BOOL);
 $blockaction = optional_param('blockaction', '', PARAM_ALPHA);
@@ -181,10 +182,13 @@ if ($fullresults['maxobjects'] <= $page) {
 }
 echo '</div>';
 
-echo '<center>';
-echo '<br/>';
-echo $renderer->browserlink();
-echo '</center>';
+if ($mtdplugin->getTaxonomyValueElement()) {
+    // Only browse if there is a taxonomy in the metadata schema.
+    echo '<center>';
+    echo '<br/>';
+    echo $renderer->browserlink();
+    echo '</center>';
+}
 
 if ($courseid > SITEID) {
     $options['id'] = $course->id;
diff --git a/jquery/jquery-animateNumber-0.0.13/.gitignore b/jquery/jquery-animateNumber-0.0.13/.gitignore
new file mode 100644
index 0000000..096746c
--- /dev/null
+++ b/jquery/jquery-animateNumber-0.0.13/.gitignore
@@ -0,0 +1 @@
+/node_modules/
\ No newline at end of file
diff --git a/jquery/jquery-animateNumber-0.0.13/LICENSE b/jquery/jquery-animateNumber-0.0.13/LICENSE
new file mode 100644
index 0000000..2aa01eb
--- /dev/null
+++ b/jquery/jquery-animateNumber-0.0.13/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2013 Alexandr Borisov
+
+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.
diff --git a/jquery/jquery-animateNumber-0.0.13/README.md b/jquery/jquery-animateNumber-0.0.13/README.md
new file mode 100644
index 0000000..88f5304
--- /dev/null
+++ b/jquery/jquery-animateNumber-0.0.13/README.md
@@ -0,0 +1,74 @@
+[![Code Climate](https://codeclimate.com/github/aishek/jquery-animateNumber.png)](https://codeclimate.com/github/aishek/jquery-animateNumber)
+
+jquery-animateNumber
+====================
+
+[Demo](http://aishek.github.io/jquery-animateNumber/) | [v0.0.13 – Latest Release](https://github.com/aishek/jquery-animateNumber/releases/tag/v0.0.13)
+
+[README на русском языке](https://github.com/aishek/jquery-animateNumber/blob/master/README.ru.md)
+
+jQuery numbers animation plugin, adds 'number' property and step function to jQuery's animate function properties.
+
+Requires jQuery 1.7.0 or higher (tested with 2.0.3, 2.0.2, 2.0.1, 2.0.0, 1.10.2, 1.10.1, 1.10.0, 1.9.1, 1.9.0, 1.8.3, 1.8.2, 1.8.1, 1.8.0, 1.7.0).
+
+## Quick example
+```html
+<p>Fun level <span id="fun-level" style="color: red; font-size: 0px;">0 %</span>.</p>
+```
+
+```js
+// animateNumber accepts same arguments, as animate does
+// it adds only 'number' and 'numberStep' params
+$('#fun-level').animateNumber(
+  {
+    number: 100,
+    color: 'green', // require jquery.color
+    'font-size': '50px',
+
+    easing: 'easeInQuad', // require jquery.easing
+
+    // optional custom step function
+    // using here to keep '%' sign after number
+    numberStep: function(now, tween) {
+      var floored_number = Math.floor(now),
+          target = $(tween.elem);
+
+      target.text(floored_number + ' %');
+    }
+  },
+  1800
+);
+```
+
+[All examples](http://aishek.github.io/jquery-animateNumber/)
+
+## Alternative plugins for same task
+
+* [jQuery Numerator](http://plugins.jquery.com/numerator/)
+
+## Development
+
+1. `npm install grunt-cli -g`
+2. `npm install`
+3. `https://github.com/gmarty/grunt-closure-compiler`
+4. `grunt watch`
+
+## Note on Patches / Pull Requests
+
+* Fork the project.
+* Make your feature addition or bug fix.
+* Send me a pull request. Bonus points for topic branches.
+
+## License
+
+It is free software, and may be redistributed under the terms specified in the LICENSE file.
+
+## Credits
+
+jquery-animateNumber is maintained by [Cifronomika](http://cifronomika.ru/).
+
+Contributors:
+
+* [Alexandr Borisov](https://github.com/aishek)
+* [Greg Thornton](https://github.com/xdissent)
+* [Tomáš Opekar](https://github.com/topik)
diff --git a/jquery/jquery-animateNumber-0.0.13/README.ru.md b/jquery/jquery-animateNumber-0.0.13/README.ru.md
new file mode 100644
index 0000000..89013e6
--- /dev/null
+++ b/jquery/jquery-animateNumber-0.0.13/README.ru.md
@@ -0,0 +1,75 @@
+[![Code Climate](https://codeclimate.com/github/aishek/jquery-animateNumber.png)](https://codeclimate.com/github/aishek/jquery-animateNumber)
+
+jquery-animateNumber
+====================
+
+[Примеры](http://aishek.github.io/jquery-animateNumber/) | [v0.0.13 – последняя версия](https://github.com/aishek/jquery-animateNumber/releases/tag/v0.0.13)
+
+[README in english](https://github.com/aishek/jquery-animateNumber)
+
+Этот плагин для jQuery позволяет анимировать числа, добавляя к функции $.animate свойства number и numberStep.
+
+Работает с jQuery 1.7.0 или более новой версией (тестировался на версиях 2.0.3, 2.0.2, 2.0.1, 2.0.0, 1.10.2, 1.10.1, 1.10.0, 1.9.1, 1.9.0, 1.8.3, 1.8.2, 1.8.1, 1.8.0, 1.7.0).
+
+## Пример
+```html
+<p>Уровень качества <span id="fun-level" style="color: red; font-size: 0px;">0 %</span>.</p>
+```
+
+```js
+// функция $.animateNumber принимает такие же аргументы,
+// как и $.animate, дополнительно можно использовать
+// параметры 'number' и 'numberStep'
+$('#fun-level').animateNumber(
+  {
+    number: 100,
+    color: 'green', // требует jquery.color
+    'font-size': '50px',
+
+    easing: 'easeInQuad', // требует jquery.easing
+
+    // опциональный аргумент: функция шага анимации числа
+    // здесь используется, чтобы добавить '%' в конце числа
+    numberStep: function(now, tween) {
+      var floored_number = Math.floor(now),
+          target = $(tween.elem);
+
+      target.text(floored_number + ' %');
+    }
+  },
+  1800
+);
+```
+
+[Все примеры](http://aishek.github.io/jquery-animateNumber/)
+
+## Другие плагины для анимации чисел
+
+* [jQuery Numerator](http://plugins.jquery.com/numerator/)
+
+## Разработка
+
+1. `npm install grunt-cli -g`
+2. `npm install`
+3. `https://github.com/gmarty/grunt-closure-compiler`
+4. `grunt watch`
+
+## Note on Patches / Pull Requests
+
+* Сделайте форк.
+* Внесите изменения.
+* Сделайте пулл-реквест. Ваши изменения в отдельной ветке принесут плюс в карму :)
+
+## Лицензия
+
+jquery-animateNumber является бесплатным ПО, подробности в файле LICENSE.
+
+## Авторы
+
+Плагин jquery-animateNumber поддерживается [Цифрономикой](http://cifronomika.ru/).
+
+Авторы:
+
+* [Александр Борисов](https://github.com/aishek)
+* [Greg Thornton](https://github.com/xdissent)
+* [Tomáš Opekar](https://github.com/topik)
diff --git a/jquery/jquery-animateNumber-0.0.13/animateNumber.jquery.json b/jquery/jquery-animateNumber-0.0.13/animateNumber.jquery.json
new file mode 100644
index 0000000..2b78566
--- /dev/null
+++ b/jquery/jquery-animateNumber-0.0.13/animateNumber.jquery.json
@@ -0,0 +1,36 @@
+{
+    "name": "animateNumber",
+    "title": "jQuery animateNumber",
+    "description": "jQuery plugin for animation number same way which animate function does.",
+    "keywords": [
+        "number",
+        "animation"
+    ],
+    "version": "0.0.13",
+    "author": {
+        "name": "Alexandr Borisov",
+        "email": "aishek@gmail.com",
+        "url": "http://cifronomika.ru"
+    },
+    "maintainers": [
+        {
+            "name": "Alexandr Borisov",
+            "email": "aishek@gmail.com",
+            "url": "http://cifronomika.ru"
+        }
+    ],
+    "licenses": [
+        {
+            "type": "MIT",
+            "url": "https://github.com/aishek/jquery-animateNumber/blob/master/LICENSE"
+        }
+    ],
+    "bugs": "https://github.com/aishek/jquery-animateNumber/issues",
+    "homepage": "https://github.com/aishek/jquery-animateNumber",
+    "docs": "https://github.com/aishek/jquery-animateNumber",
+    "demo": "http://aishek.github.io/jquery-animateNumber/",
+    "download": "https://github.com/aishek/jquery-animateNumber/releases",
+    "dependencies": {
+        "jquery": ">=1.7.0"
+    }
+}
diff --git a/jquery/jquery-animateNumber-0.0.13/bower.json b/jquery/jquery-animateNumber-0.0.13/bower.json
new file mode 100644
index 0000000..13f3839
--- /dev/null
+++ b/jquery/jquery-animateNumber-0.0.13/bower.json
@@ -0,0 +1,32 @@
+{
+  "name": "jquery-animateNumber",
+  "version": "0.0.13",
+  "homepage": "https://github.com/aishek/jquery-animateNumber",
+  "authors": [
+    "Alexandr Borisov <aishek@gmail.com>",
+    "Greg Thornton",
+    "Tomáš Opekar"
+  ],
+  "description": "jQuery animate number plugin",
+  "main": "jquery.animateNumber.js",
+  "keywords": [
+    "jquery",
+    "animate",
+    "number"
+  ],
+  "license": "MIT",
+  "ignore": [
+    "**/.*",
+    "demo",
+    "package.json",
+    "animateNumber.jquery.json",
+    "node_modules",
+    "bower_components",
+    "test",
+    "tests"
+  ],
+  "dependencies": {
+    "jquery": ">=1.7.0"
+  }
+}
+
diff --git a/jquery/jquery-animateNumber-0.0.13/demo/index.html b/jquery/jquery-animateNumber-0.0.13/demo/index.html
new file mode 100644
index 0000000..63d748d
--- /dev/null
+++ b/jquery/jquery-animateNumber-0.0.13/demo/index.html
@@ -0,0 +1,43 @@
+<p>Fun level <span id="target" style="font-size: 10px; color: red;">0 %</span>.</p>
+
+<!--script src="http://code.jquery.com/jquery-2.0.3.min.js"></script-->
+<!--script src="http://code.jquery.com/jquery-2.0.2.min.js"></script-->
+<!--script src="http://code.jquery.com/jquery-2.0.1.min.js"></script-->
+<!--script src="http://code.jquery.com/jquery-2.0.0.min.js"></script-->
+<!--script src="http://code.jquery.com/jquery-1.10.2.min.js"></script-->
+<!--script src="http://code.jquery.com/jquery-1.10.1.min.js"></script-->
+<!--script src="http://code.jquery.com/jquery-1.10.0.min.js"></script-->
+<!--script src="http://code.jquery.com/jquery-1.9.1.min.js"></script-->
+<!--script src="http://code.jquery.com/jquery-1.9.0.min.js"></script-->
+<!--script src="http://code.jquery.com/jquery-1.8.3.min.js"></script-->
+<!--script src="http://code.jquery.com/jquery-1.8.2.min.js"></script-->
+<!--script src="http://code.jquery.com/jquery-1.8.1.min.js"></script-->
+<!--script src="http://code.jquery.com/jquery-1.8.0.min.js"></script-->
+<script src="http://code.jquery.com/jquery-1.7.0.min.js"></script>
+
+<script src="jquery.color.min.js"></script>
+<script src="../jquery.animateNumber.min.js"></script>
+
+<script>
+  var decimal_places = 1;
+  var decimal_factor = decimal_places === 0 ? 1 : decimal_places * 10;
+
+  $('#target').animateNumber(
+    {
+      number: 100 * decimal_factor,
+      color: 'green',
+      'font-size': '30px',
+
+      numberStep: function(now, tween) {
+        var floored_number = Math.floor(now) / decimal_factor,
+            target = $(tween.elem);
+        if (decimal_places > 0) {
+          floored_number = floored_number.toFixed(decimal_places);
+        }
+
+        target.text(floored_number + ' %');
+      }
+    },
+    15000
+  )
+</script>
diff --git a/jquery/jquery-animateNumber-0.0.13/demo/jquery.color.min.js b/jquery/jquery-animateNumber-0.0.13/demo/jquery.color.min.js
new file mode 100644
index 0000000..41b61df
--- /dev/null
+++ b/jquery/jquery-animateNumber-0.0.13/demo/jquery.color.min.js
@@ -0,0 +1,13 @@
+(function(f,p){function q(a,b,c){var d=u[b.type]||{};if(null==a)return c||!b.def?null:b.def;a=d.floor?~~a:parseFloat(a);return isNaN(a)?b.def:d.mod?(a+d.mod)%d.mod:0>a?0:d.max<a?d.max:a}function v(a){var b=h(),c=b._rgba=[];a=a.toLowerCase();l(y,function(d,g){var e,k=g.re.exec(a);e=k&&g.parse(k);k=g.space||"rgba";if(e)return e=b[k](e),b[m[k].cache]=e[m[k].cache],c=b._rgba=e._rgba,!1});return c.length?("0,0,0,0"===c.join()&&f.extend(c,r.transparent),b):r[a]}function s(a,b,c){c=(c+1)%1;return 1>6*c?
+a+(b-a)*c*6:1>2*c?b:2>3*c?a+(b-a)*(2/3-c)*6:a}var z=/^([\-+])=\s*(\d+\.?\d*)/,y=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(a){return[a[1],a[2],a[3],a[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(a){return[2.55*a[1],2.55*a[2],2.55*a[3],a[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(a){return[parseInt(a[1],16),parseInt(a[2],16),
+parseInt(a[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(a){return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(a){return[a[1],a[2]/100,a[3]/100,a[4]]}}],h=f.Color=function(a,b,c,d){return new f.Color.fn.parse(a,b,c,d)},m={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,
+type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},w=h.support={},x=f("<p>")[0],r,l=f.each;x.style.cssText="background-color:rgba(1,1,1,.5)";w.rgba=-1<x.style.backgroundColor.indexOf("rgba");l(m,function(a,b){b.cache="_"+a;b.props.alpha={idx:3,type:"percent",def:1}});h.fn=f.extend(h.prototype,{parse:function(a,b,c,d){if(a===p)return this._rgba=[null,null,null,null],this;if(a.jquery||a.nodeType)a=
+f(a).css(b),b=p;var g=this,e=f.type(a),k=this._rgba=[];b!==p&&(a=[a,b,c,d],e="array");if("string"===e)return this.parse(v(a)||r._default);if("array"===e)return l(m.rgba.props,function(d,c){k[c.idx]=q(a[c.idx],c)}),this;if("object"===e)return a instanceof h?l(m,function(c,d){a[d.cache]&&(g[d.cache]=a[d.cache].slice())}):l(m,function(d,c){var b=c.cache;l(c.props,function(d,e){if(!g[b]&&c.to){if("alpha"===d||null==a[d])return;g[b]=c.to(g._rgba)}g[b][e.idx]=q(a[d],e,!0)});g[b]&&0>f.inArray(null,g[b].slice(0,
+3))&&(g[b][3]=1,c.from&&(g._rgba=c.from(g[b])))}),this},is:function(a){var b=h(a),c=!0,d=this;l(m,function(a,e){var k,f=b[e.cache];f&&(k=d[e.cache]||e.to&&e.to(d._rgba)||[],l(e.props,function(a,d){if(null!=f[d.idx])return c=f[d.idx]===k[d.idx]}));return c});return c},_space:function(){var a=[],b=this;l(m,function(c,d){b[d.cache]&&a.push(c)});return a.pop()},transition:function(a,b){var c=h(a),d=c._space(),g=m[d],e=0===this.alpha()?h("transparent"):this,k=e[g.cache]||g.to(e._rgba),f=k.slice(),c=c[g.cache];
+l(g.props,function(a,d){var g=d.idx,e=k[g],h=c[g],l=u[d.type]||{};null!==h&&(null===e?f[g]=h:(l.mod&&(h-e>l.mod/2?e+=l.mod:e-h>l.mod/2&&(e-=l.mod)),f[g]=q((h-e)*b+e,d)))});return this[d](f)},blend:function(a){if(1===this._rgba[3])return this;var b=this._rgba.slice(),c=b.pop(),d=h(a)._rgba;return h(f.map(b,function(a,b){return(1-c)*d[b]+c*a}))},toRgbaString:function(){var a="rgba(",b=f.map(this._rgba,function(a,d){return null==a?2<d?1:0:a});1===b[3]&&(b.pop(),a="rgb(");return a+b.join()+")"},toHslaString:function(){var a=
+"hsla(",b=f.map(this.hsla(),function(a,d){null==a&&(a=2<d?1:0);d&&3>d&&(a=Math.round(100*a)+"%");return a});1===b[3]&&(b.pop(),a="hsl(");return a+b.join()+")"},toHexString:function(a){var b=this._rgba.slice(),c=b.pop();a&&b.push(~~(255*c));return"#"+f.map(b,function(a){a=(a||0).toString(16);return 1===a.length?"0"+a:a}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}});h.fn.parse.prototype=h.fn;m.hsla.to=function(a){if(null==a[0]||null==a[1]||null==a[2])return[null,
+null,null,a[3]];var b=a[0]/255,c=a[1]/255,d=a[2]/255;a=a[3];var g=Math.max(b,c,d),e=Math.min(b,c,d),k=g-e,f=g+e,h=0.5*f,f=0===k?0:0.5>=h?k/f:k/(2-f);return[Math.round(e===g?0:b===g?60*(c-d)/k+360:c===g?60*(d-b)/k+120:60*(b-c)/k+240)%360,f,h,null==a?1:a]};m.hsla.from=function(a){if(null==a[0]||null==a[1]||null==a[2])return[null,null,null,a[3]];var b=a[0]/360,c=a[1],d=a[2];a=a[3];c=0.5>=d?d*(1+c):d+c-d*c;d=2*d-c;return[Math.round(255*s(d,c,b+1/3)),Math.round(255*s(d,c,b)),Math.round(255*s(d,c,b-1/3)),
+a]};l(m,function(a,b){var c=b.props,d=b.cache,g=b.to,e=b.from;h.fn[a]=function(a){g&&!this[d]&&(this[d]=g(this._rgba));if(a===p)return this[d].slice();var b,t=f.type(a),m="array"===t||"object"===t?a:arguments,n=this[d].slice();l(c,function(a,d){var b=m["object"===t?a:d.idx];null==b&&(b=n[d.idx]);n[d.idx]=q(b,d)});return e?(b=h(e(n)),b[d]=n,b):h(n)};l(c,function(d,b){h.fn[d]||(h.fn[d]=function(c){var e=f.type(c),g="alpha"===d?this._hsla?"hsla":"rgba":a,h=this[g](),l=h[b.idx];if("undefined"===e)return l;
+"function"===e&&(c=c.call(this,l),e=f.type(c));if(null==c&&b.empty)return this;"string"===e&&(e=z.exec(c))&&(c=l+parseFloat(e[2])*("+"===e[1]?1:-1));h[b.idx]=c;return this[g](h)})})});h.hook=function(a){a=a.split(" ");l(a,function(a,c){f.cssHooks[c]={set:function(a,b){var e,k="";if("transparent"!==b&&("string"!==f.type(b)||(e=v(b)))){b=h(e||b);if(!w.rgba&&1!==b._rgba[3]){for(e="backgroundColor"===c?a.parentNode:a;(""===k||"transparent"===k)&&e&&e.style;)try{k=f.css(e,"backgroundColor"),e=e.parentNode}catch(l){}b=
+b.blend(k&&"transparent"!==k?k:"_default")}b=b.toRgbaString()}try{a.style[c]=b}catch(m){}}};f.fx.step[c]=function(a){a.colorInit||(a.start=h(a.elem,c),a.end=h(a.end),a.colorInit=!0);f.cssHooks[c].set(a.elem,a.start.transition(a.end,a.pos))}})};h.hook("backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor");f.cssHooks.borderColor={expand:function(a){var b={};l(["Top","Right","Bottom","Left"],function(c,
+d){b["border"+d+"Color"]=a});return b}};r=f.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}})(jQuery);
\ No newline at end of file
diff --git a/jquery/jquery-animateNumber-0.0.13/gruntfile.js b/jquery/jquery-animateNumber-0.0.13/gruntfile.js
new file mode 100644
index 0000000..a5bdfc8
--- /dev/null
+++ b/jquery/jquery-animateNumber-0.0.13/gruntfile.js
@@ -0,0 +1,34 @@
+module.exports = function(grunt) {
+
+  grunt.initConfig({
+    watch: {
+      // Следим за файлами, выполняем таски при каждом изменении
+      options: {
+        // При вызове в терминале `grunt watch`
+        // сначала выполнятся все таски и потом начнётся слежение
+        atBegin: true
+      },
+      js: {
+        // Все файлы в папке www/js (включая подпапки)
+        files: 'jquery.animateNumber.js',
+        tasks: ['closure-compiler']
+      }
+    },
+    'closure-compiler': {
+      frontend: {
+        js: 'jquery.animateNumber.js',
+        jsOutputFile: 'jquery.animateNumber.min.js',
+        noreport: true,
+        options: {}
+      }
+    }
+  });
+
+  // Загружаем установленные задачи
+  // (офтопик: будь я разработчиком Гранта, выкинул бы этот блок)
+  grunt.loadNpmTasks('grunt-contrib-watch');
+  grunt.loadNpmTasks('grunt-closure-compiler');
+
+  // Задача по умолчанию (`grunt` в терминале)
+  grunt.registerTask('default', ['closure-compiler']);
+};
\ No newline at end of file
diff --git a/jquery/jquery-animateNumber-0.0.13/jquery.animateNumber.js b/jquery/jquery-animateNumber-0.0.13/jquery.animateNumber.js
new file mode 100644
index 0000000..dab1b7b
--- /dev/null
+++ b/jquery/jquery-animateNumber-0.0.13/jquery.animateNumber.js
@@ -0,0 +1,173 @@
+/** @preserve jQuery animateNumber plugin v0.0.13
+ * (c) 2013, Alexandr Borisov.
+ * https://github.com/aishek/jquery-animateNumber
+ */
+
+// ['...'] notation using to avoid names minification by Google Closure Compiler
+(function($) {
+  var reverse = function(value) {
+    return value.split('').reverse().join('');
+  };
+
+  var defaults = {
+    numberStep: function(now, tween) {
+      var floored_number = Math.floor(now),
+          target = $(tween.elem);
+
+      target.text(floored_number);
+    }
+  };
+
+  var handle = function( tween ) {
+    var elem = tween.elem;
+    if ( elem.nodeType && elem.parentNode ) {
+      var handler = elem._animateNumberSetter;
+      if (!handler) {
+        handler = defaults.numberStep;
+      }
+      handler(tween.now, tween);
+    }
+  };
+
+  if (!$.Tween || !$.Tween.propHooks) {
+    $.fx.step.number = handle;
+  } else {
+    $.Tween.propHooks.number = {
+      set: handle
+    };
+  }
+
+  var extract_number_parts = function(separated_number, group_length) {
+    var numbers = separated_number.split('').reverse(),
+        number_parts = [],
+        current_number_part,
+        current_index,
+        q;
+
+    for(var i = 0, l = Math.ceil(separated_number.length / group_length); i < l; i++) {
+      current_number_part = '';
+      for(q = 0; q < group_length; q++) {
+        current_index = i * group_length + q;
+        if (current_index === separated_number.length) {
+          break;
+        }
+
+        current_number_part = current_number_part + numbers[current_index];
+      }
+      number_parts.push(current_number_part);
+    }
+
+    return number_parts;
+  };
+
+  var remove_precending_zeros = function(number_parts) {
+    var last_index = number_parts.length - 1,
+        last = reverse(number_parts[last_index]);
+
+    number_parts[last_index] = reverse(parseInt(last, 10).toString());
+    return number_parts;
+  };
+
+  $.animateNumber = {
+    numberStepFactories: {
+      /**
+       * Creates numberStep handler, which appends string to floored animated number on each step.
+       *
+       * @example
+       * // will animate to 100 with "1 %", "2 %", "3 %", ...
+       * $('#someid').animateNumber({
+       *   number: 100,
+       *   numberStep: $.animateNumber.numberStepFactories.append(' %')
+       * });
+       *
+       * @params {String} suffix string to append to animated number
+       * @returns {Function} numberStep-compatible function for use in animateNumber's parameters
+       */
+      append: function(suffix) {
+        return function(now, tween) {
+          var floored_number = Math.floor(now),
+              target = $(tween.elem);
+
+          target.prop('number', now).text(floored_number + suffix);
+        };
+      },
+
+      /**
+       * Creates numberStep handler, which format floored numbers by separating them to groups.
+       *
+       * @example
+       * // will animate with 1 ... 217,980 ... 95,217,980 ... 7,095,217,980
+       * $('#world-population').animateNumber({
+       *    number: 7095217980,
+       *    numberStep: $.animateNumber.numberStepFactories.separator(',')
+       * });
+       * @example
+       * // will animate with 1% ... 217,980% ... 95,217,980% ... 7,095,217,980%
+       * $('#salesIncrease').animateNumber({
+       *   number: 7095217980,
+       *   numberStep: $.animateNumber.numberStepFactories.separator(',', 3, '%')
+       * });
+       *
+       * @params {String} [separator=' '] string to separate number groups
+       * @params {String} [group_length=3] number group length
+       * @params {String} [suffix=''] suffix to append to number
+       * @returns {Function} numberStep-compatible function for use in animateNumber's parameters
+       */
+      separator: function(separator, group_length, suffix) {
+        separator = separator || ' ';
+        group_length = group_length || 3;
+        suffix = suffix || '';
+
+        return function(now, tween) {
+          var floored_number = Math.floor(now),
+              separated_number = floored_number.toString(),
+              target = $(tween.elem);
+
+          if (separated_number.length > group_length) {
+            var number_parts = extract_number_parts(separated_number, group_length);
+
+            separated_number = remove_precending_zeros(number_parts).join(separator);
+            separated_number = reverse(separated_number);
+          }
+
+          target.prop('number', now).text(separated_number + suffix);
+        };
+      }
+    }
+  };
+
+  $.fn.animateNumber = function() {
+    var options = arguments[0],
+        settings = $.extend({}, defaults, options),
+
+        target = $(this),
+        args = [settings];
+
+    for(var i = 1, l = arguments.length; i < l; i++) {
+      args.push(arguments[i]);
+    }
+
+    // needs of custom step function usage
+    if (options.numberStep) {
+      // assigns custom step functions
+      var items = this.each(function(){
+        this._animateNumberSetter = options.numberStep;
+      });
+
+      // cleanup of custom step functions after animation
+      var generic_complete = settings.complete;
+      settings.complete = function() {
+        items.each(function(){
+          delete this._animateNumberSetter;
+        });
+
+        if ( generic_complete ) {
+          generic_complete.apply(this, arguments);
+        }
+      };
+    }
+
+    return target.animate.apply(target, args);
+  };
+
+}(jQuery));
diff --git a/jquery/jquery-animateNumber-0.0.13/jquery.animateNumber.min.js b/jquery/jquery-animateNumber-0.0.13/jquery.animateNumber.min.js
new file mode 100644
index 0000000..4ab09e5
--- /dev/null
+++ b/jquery/jquery-animateNumber-0.0.13/jquery.animateNumber.min.js
@@ -0,0 +1,8 @@
+/*
+ jQuery animateNumber plugin v0.0.13
+ (c) 2013, Alexandr Borisov.
+ https://github.com/aishek/jquery-animateNumber
+*/
+(function(d){var q=function(b){return b.split("").reverse().join("")},m={numberStep:function(b,a){var e=Math.floor(b);d(a.elem).text(e)}},h=function(b){var a=b.elem;a.nodeType&&a.parentNode&&(a=a._animateNumberSetter,a||(a=m.numberStep),a(b.now,b))};d.Tween&&d.Tween.propHooks?d.Tween.propHooks.number={set:h}:d.fx.step.number=h;d.animateNumber={numberStepFactories:{append:function(b){return function(a,e){var g=Math.floor(a);d(e.elem).prop("number",a).text(g+b)}},separator:function(b,a,e){b=b||" ";
+a=a||3;e=e||"";return function(g,k){var c=Math.floor(g).toString(),t=d(k.elem);if(c.length>a){for(var f=c,l=a,m=f.split("").reverse(),c=[],n,r,p,s=0,h=Math.ceil(f.length/l);s<h;s++){n="";for(p=0;p<l;p++){r=s*l+p;if(r===f.length)break;n+=m[r]}c.push(n)}f=c.length-1;l=q(c[f]);c[f]=q(parseInt(l,10).toString());c=c.join(b);c=q(c)}t.prop("number",g).text(c+e)}}}};d.fn.animateNumber=function(){for(var b=arguments[0],a=d.extend({},m,b),e=d(this),g=[a],k=1,c=arguments.length;k<c;k++)g.push(arguments[k]);
+if(b.numberStep){var h=this.each(function(){this._animateNumberSetter=b.numberStep}),f=a.complete;a.complete=function(){h.each(function(){delete this._animateNumberSetter});f&&f.apply(this,arguments)}}return e.animate.apply(e,g)}})(jQuery);
diff --git a/jquery/jquery-animateNumber-0.0.13/package.json b/jquery/jquery-animateNumber-0.0.13/package.json
new file mode 100644
index 0000000..cfdc56b
--- /dev/null
+++ b/jquery/jquery-animateNumber-0.0.13/package.json
@@ -0,0 +1,31 @@
+{
+  "name": "jquery.animate-number",
+  "version": "0.0.13",
+  "dependencies": {
+    "jquery": ">= 1.7.0"
+  },
+  "devDependencies": {
+    "grunt": "~0.4.1",
+    "grunt-contrib-watch": "~0.5.3",
+    "grunt-closure-compiler": "~0.0.21"
+  },
+  "description": "jQuery animate number plugin",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/aishek/jquery-animateNumber.git"
+  },
+  "keywords": [
+    "jquery",
+    "animate",
+    "number",
+    "jquery-plugin",
+    "ecosystem:jquery"
+  ],
+  "author": "Alexandr Borisov (aishek@gmail.com)",
+  "license": "MIT",
+  "main": "jquery.animateNumber.js",
+  "bugs": {
+    "url": "https://github.com/aishek/jquery-animateNumber/issues"
+  },
+  "homepage": "https://github.com/aishek/jquery-animateNumber"
+}
diff --git a/jquery/plugins.php b/jquery/plugins.php
new file mode 100644
index 0000000..5ddba00
--- /dev/null
+++ b/jquery/plugins.php
@@ -0,0 +1,6 @@
+<?php
+
+$plugins = array(
+    'animatenumber' => array('files' => array('jquery-animateNumber-0.0.13/jquery.animateNumber.min.js')),
+    'slick' => array('files' => array('slick/slick.js')),
+);
diff --git a/jquery/slick/Thumbs.db b/jquery/slick/Thumbs.db
new file mode 100644
index 0000000000000000000000000000000000000000..c33016ed1a61af1331c2641d34e3ed774fd0e056
GIT binary patch
literal 3072
zcmca`Uhu)fjZzO8(10BSGsD0CoD6J8;*1Oo3?K{^5@29pg7W|U|NkE>#=yYve-sR<
z5cvE5|9?>YfiMdL0|SU2QXUv}EJYy@#E{RB&rrgkz~IV|$56sh#83&#%0$s(46N`x
z4=)>V=nS}H`Df>XON`7Qc~D|wU|=v}Fl8`fh-WZiFlR_&NM%T4FlR7hNMlH5NMbN#
zFk>)cNCS(4v|z(p3`~s30f0>nHn9s}M_`j7U5p(2Nw)>J4od6?#Tlp^2L%TxN>~{f
zz-2x=0|NsG0|Nsm0|NsW0|Ns$0|NsO0|Nsu0|Nse0|Nv9Xjy?A>_e6<!N9-(iu)ZP
zf`NgdUa;<O5L@Z?|2O_WU=Z+f^K@fiWCSG=P~Co;!I^=DnVE%|g`I_kos*rFos*lB
zlarI1j|T+!1VJPZ50rv%(8>R|8Jrne*w}bDc*J;k#6<Y`_(VVip9n;oAcP`d$N>gH
z4h97V1!hJi1|~s9W<kdPM;PQ87#LX@!2p(77@3$^SlQS)IJvn0A7R)kz`(@F%*@2X
z%*x8b!oa{-%gDscz#_;hq-f~KCLEZ^u2d*u)Hrb=hqBYggQ7tfKd2Zd6*X~kiHS={
zN~x-;YiMejn3|beSXw!|xVpJ}czOkggocGjL`Eg2q^6~3WM&nYl$MoOR8}>&w6?W(
zbaqXeJZ0*%=`&`|TC{k{(q+q6tX#Ee^OmjKw(r=v>(JpNM~@vpaq`rq%U7;myME*5
zt%r{uKY9A>`HPpYK7RWA<?FZaKYsoK`HPW(8SE<%0r44{zXTbW7@1f=@dEM}BU3p8
zBNMYA3#+0bn~-B5dt#xml2Idvh||P{8xL|S8wY(5O)9#`C8lEXQ1v6oYha%d=dmWT
zd<ORz!e6%-c$gU(m;{*x8SEK;-zxj<Qgkq1!}HL@9f@6H^4g-dg;$sl9$#9seQk~N
zwXO9n`z$~7cc=Vk=vwc3`F---HsSNFkMs3XxdcSD4*FeXSnP84%#QWZALCm~)_Moz
z)*t@0;Bx69wp34JncWVIseX<U0Y;25Jew@nEqDDecjipfw^6sQ`3s!Q+V)-Ca5+!I
zyBp@|Pfto(NPjS5TD7X7@IM2?yCw1*f3#&%W<I&JmO*_EqtNH`3m*SxxEi;P&p_hy
zpI2;KJtqH^4V4YgDr{h1#_srM)zbYp7uQ>5PJQ}Sz443u^A8KSwo9c=mi`%d%k6W0
ziNfPo)nQwNSOZ07hdC^mD$DTl`1VgLH}*`hTyuZ(p0dln=D)79%unoN|M_nUV_9Y!
zPvL}AWi8IvA#eYk*8XYaB$WSdg5@u{{|wL9s^7flosru9w}`=g$2<G;U)SoSv-D*!
L|Gx=I9>kLXEg%-{

literal 0
HcmV?d00001

diff --git a/jquery/slick/ajax-loader.gif b/jquery/slick/ajax-loader.gif
new file mode 100644
index 0000000000000000000000000000000000000000..e0e6e9760bc04861cc4771e327f22ed7962e0858
GIT binary patch
literal 4178
zcmZ?wbhEHbRA5kG_{zZW|Nnmm28Lh1ejPb-<i(2@A3l7zaN$B-UEQo%v%Y=%_UzfS
zKY#vAnl!1ct?kjHM>}@xSg>Hhn>TOPty_2J&K)~DyRfjZgoK2enwk|WR=j)n&dbXy
zCntx8hlhcI;oP}%Cr+HWapQ)Lj!s-$oSdATkB`rW4I3D!3KaiIITxiSmZYXAlxLP?
zC?sYjR^;R-rs!qnrR6gy{$yd`VqjoU{Lk&@8WQa67~pE8XTZ$Jz`&pbat0_67})+h
zG!%HKh*`+E7oJq{6FTC!+*pHamJjDqp}Ar0tgIs5H31s^3#V9#Xo#>DZFIWWb3NW6
zLQ!Ap9FJ3lQ(jW7t9UvKLo-9ZU=bUeD@(d`PaFehez*%~G6M@cJCB#MK)Nt1Gczl9
zeqpX)K6eYpVs?RzoZ^#Rxh1zUa90=9@$O)rTXa<Lv<nme4vE^M3w&7x*q5cOU)R3y
z!69!Z)@RRI&lfShdCSDT=Htii_SXFGT%SJGeEsp`>5DTf4{tgUySs4zk;cnQ5)>?*
zU#Dp{sHh*dZ9m*qJK6b799!vZIo;nLdJ>AA0<Cv;i+#GgoOOK<FXu`B6W&UOk41KE
zVt-<)r&gWyHe{v3VJD~jV?3!hKCC!mHmA*ob-ReeRVVw6I}EwDYD%nk-<`zc-6FO_
z0UD}|m_ev!BIQ(gQbmZxg}F6JgKyTE^NfOX!`c^}V~aMC;frsWVkJ{zrBpPrFvH>M
zy~GuVHBWT%rSm&w#|z}M*Skuj*R?XR%E&4gv3R+#rVCW$u;+)naXND{Gt1ZIrn7Le
zv2pU{i?}cea&d7xamy`bW-Dis;PYlvJjB4wx{YgvGs_-kz8&=^w+WWJatrTKxO{3+
z3KJXinF#LFm+J4=zqrBl?mg3+q7Uz%o%(+L^Y`C>xL*DGD|Vq+ef^yS6~0_*Au1}3
zO*OtOKYlx}zBQlclmegQvNa7(Iafqd8eVL;wRNI5OUi_>i`VS)-EwpzCMX>AiGJdx
z#c}l9JbANDe#M(gKl?dNV;tV!ICY?a<3hftG+!>)f@^+?fvpj_vqT-PFXvG;Dzz&0
zFzSst9W+&Wa-sk<D48&Wl1r)=6qIUWF2^4}(2$ztbM%1l+^}|DF6L+z9=4W+Q>;t^
zG<b_X7Pm27i*IOM<awf#HC@=L!ihg$px#v>ovA#Ifm2FEw1}zCEj_$dAV1uNC)tUc
zi%W1uOFAbLA0HD-zO;*~vaIZU2FaydtYzE^UarDonGAW`WJO$=c5~I$vnriX?)2f@
zeK193n+*F+A8uBz6%lN*N|i-r^*da-r+=9Ky8h#bC1-a(NjdZ5@7eQT{%BT&`ya3|
zVtFkqvuT6pVYTaD3=`P|x*Ir_D*d?_>h(yYaB0<F&h6UG`?4hiXT~TgG|%nct#zy<
zDC=Moi~qY?=amOe3Y#lgF@7j!`IO?Srm&DlG)SviNqOl!-QFu7R|@plw)(I(Tzz$I
zec*hfVyhHwhC;ccVOv+Ncy<|<ESWLGQjd+<vGAmc821UMix*SWL?o3;6lACI^=Abx
z2+(M~t#_c%V#<-D9+flXl=ym$V?4rCE(AKU<uX_Mr*botGV!wW6fjjeai<2AGUtZ4
z2njh);S!t_&c)5m%DOC9z=c^<L`2wGGL>sZ$s{Khj#y#o^&-;ATk6_4dH0JZhHc3T
z6<;qUP#?N1ty)-wm!*xNvu&df_r%8&?^Q>8yyQE4ct<F+?8i^CGH<qAuKw`(qs*fx
zPw&VqkzSG6X=%a!Fs5*O3(r0+rY8-zj92p<&SRaS$}@eV4_nM)hnGKZ7&LG1_};NZ
z#%NVY6U$O9K~78IWr8znr<Ab#oZxv}%f+&_;)&Uk^IH}$xW(ouZCr6w(RZgJtHIS3
zAv!M0v^KegNL*i6AW+E71Wk%87{RBbCDOg9$kRuN)!lL9ffzNBndwtFq<mJnu5i*4
znatRFkby<dt<U-Mg~estP9JBf(@|L=TORE0S;U<spUaf)#O)qZ#FrJ~BHz*DF4!IJ
z!O%4~i!FwSot?#5(w&R7jJ4Z|Q!a%?U<tcG;!3WnawgTSJPX5CPEL?m!ppqQm7BFD
zmxW#RNN(AAAMUQ3T~`x0+3r7JW7)a$ln<N8%U2>&Pgd?OfARXI)QwxW8yQ$0K3L{`
zCzRpo?xb}m8u-|k=?Z>ub8N9zv?_T}@H*buonflQ0)>sv9gMDKmNt_eXEyNovGu&z
z(RjjIX||Y-#{`FE%1Z1O9xaiZPx_izii?X{99VGH)hU`m=H#UO^LmyHW}+#V4E%x^
zLO(mcEeYk>;}WsOLikdS*80`Hw|P#9vp@rq6>mTWo(cg6WJG|<s>^EyRxMyU!CGKg
zBs1yk%xzJxWxG$_xBNb%hPz)diz&^C+dZ=`Jk^cMxs6M(rK>imKhs%Ko|(Clp|IVL
zfwiSo(vOpEHZxnIducJZ!YX+dpDwQH37cl~E%fG&UE<BjtZ>L@U&35h?&fpNCqtR|
zu3Y7dU3c@iHy``G`|P|oZ=O!L``{k$+4C2w7G1l#^US-g@4|1pu!#sf^<v7I@GN41
zgX3Z5lp6)E!A=Rxj$C39f;&YyCvRX>l;JQ8c&Ny%v~HSj)C7ftOzg5&9STg2%m+Kw
zX3JP@c6B+$D6Hra(7g8iG*c!StCoW2&phPp8Tgj8IEXMDSk&Fp^WuP`oWv57#Y_?t
zJ}s8hh+H7F=)yvm%V9sx@jZO3#{msVHfo2YD`zDGG$<!z=H+-e!^4p~wms3kv}*ap
zMb2GZGZNPJ`7G<sYGa+htEzu{^P%Rw3CmbdoJ?7@YP}CD^TkUS&zw2uec|#Y?!$+U
zhBBRebp8JM{S4vPUHI6UUnS3K%;I2Y=VjZzc26;@z*lw-8G|6z&db`&VjLWW2OivK
zR$7%4m{fj%k&#P8N<i|$0=bE9d-WJ4E-XCEz`$$psMz>H^Q>S`k6A9u8=G2-%fe3D
za569*({6um!h6$l2@@;twgW!|okBVodxYv7Pa17e@mG}Ah&g)liq`e%G8P<HgkdR>
zeei@|)8QklPVOvDIdyK;dY`kWxQ`#%fA!i?=i8U|GlXAsWo72O>p!b8OOE+1%l5T<
z&ak~@mfP&Kagr0OBC{8tK!VnXh4)yLR^{ZrxNwkxkwbt(#G+sUiy-^g4wF|;8x&a?
z*fatR7#6U&vir(t1UNS;o|>S1-o&Ee!R!f)Jp3Guo<av0jJj;=dtV%26h5!W!)GF}
zoQ27m!?};E(Bb3Z^+K{v0u!}Z4lxRtbr<lSR%vA8egB1p5t<A+27NH{-Pq5{F2j6g
zb%KDhtgLeJ+|#aXA}?h{*ot?!OD>ZBq^#=1DfUWK^Fd=5gYQ#@C65ad#F)86)I=l<
z6hvGFT#^J6H!Qp@z$9SKP*Cu|!CXKj{qN?jDa<ZR%HCzs4i^uvSNx#iAmDUK#ow^Y
zAU|xu0!4rSeg?aMJI9_d9$~+e!Z*{x;oy2k5gh?buOkN<bj-U8c(qqJGEYrtVt|Gs
zCj)xJ8@YZVqgW&>GyCu{A3nm&w?Do4RFI79x%09D`%_k}I(y;VrK&4exegsYe7uVL
z^r^irEc>5_atcVX6$fnd;TIJV5iOp((@R+TyNH?3jON!KY=JxsVG;&xjXTtr9LtDO
zeKL=Yqfbu8!oi_|nVm^bu+!Crsky|ND`!erLd2}#MN%spH+)=r+CE|eXW@p4iYv5d
zGl=YEI{d(aSxcAw%%zqy2iz*0CY?L<nfnMMOH6~?)8)piuC3eN#v3aH%gkI<3O@k>
zS4g!23O_bkS!HIIuG*kBE>L;s#Hu(^R)x=*HO-k@(vLf~-Bmzl5&P_{bzFigmPs#C
zDc;`a!zUs;C993qub8ch;gl;2+oj8FEN9c1Zr);$61jI@g#T=c`%|vF5AHpxdh(3x
z;+0F+s<>}`J0ElQM<^3B@6xOVEXhd?2OF7ro*fZf+``b(%&u^T`SPk5wpe}zBL>Bk
z#`dVZu-=y;=_d}dF`w~~Fi<$y<i>5(7_y|{L_52}Z{CDw$EU6{a?9e`Fy#^Zfz{az
zTpL&-LMG~&%12mfaxJ)Q%A}(nbo8>$VFvz^fYQpUUacU5npv!{%*>4|7)?Yvniemx
zNY#>@D-hzPqak!nY02eAp2b~S41alq-DUlx*PfHPdz7(KdCB+wgbEjt6u#^j26w?c
zetuWJ6p{8!2F?y=&PE1d5fM=~7xt6|Ou^jlxwV4so>Rr<iioo~v8ph8aZ9e{j$7f%
zFSS8nR^nbR!7LX}o(<v^$BuZjNQ*4UTh6++Lb!?HmMbgYqsM$JE0(@k%D~J1_8t4R
z=kA|Bzj^=mV_wFW6;B>NOB7q;{GHcpdsCR0g#<%^=ah^~c03Xv82jgXy9!CnusFcr
z5_8N*<@S+}&TWcHQ#mdy&5|?h<J%JHv`OJ|Q!v+=vmp*H2U|>2Eav}sX=*ficAV!Q
zl~Xt0@+`2QqLp}LbC-IEY3OXNxl7p2y0>%rS@n8#=Um>XeBLPWsxAkEHK+#-#sIp&
B1&#m!

literal 0
HcmV?d00001

diff --git a/jquery/slick/config.rb b/jquery/slick/config.rb
new file mode 100644
index 0000000..81f5ae3
--- /dev/null
+++ b/jquery/slick/config.rb
@@ -0,0 +1,10 @@
+css_dir = "."
+sass_dir = "."
+images_dir = "."
+fonts_dir = "fonts"
+relative_assets = true
+
+output_style = :compact
+line_comments = false
+
+preferred_syntax = :scss
\ No newline at end of file
diff --git a/jquery/slick/fonts/slick.eot b/jquery/slick/fonts/slick.eot
new file mode 100644
index 0000000000000000000000000000000000000000..2cbab9ca97723bc24c50315a0a9bd155db4e0aa5
GIT binary patch
literal 2048
zcmZSJU|>jLXJBAtU}69PCI(hc5DgNUzzAab1TZo%G$??WPz)AkU|{eUIPw81ghX*M
z6f@*7WHKZ(WHT@@@G%52q%x#4lrrQnBr+5+FffQQgfXNt6fqPtWHRJ4<S{5P7&7QF
z7%(s}pz34*Ie~$Jm!W}ynIXW<EyOqX;)(SP4D22Z3=A^vF0O72CJby04D1>V3=9hX
z!TLu2-~Mi5U|@`3U|<MK&P^;(;&<K4z`%Hdfq^k8J+Zjp|9=K%1_pMJS2)shD%0#|
zZ%bfcV76gkVA9D*O-x~6H2lrLz;K6wfx#>zBQ=rvDHAIL1EUB71A|INZb=237lRiA
z1LFpeCvx(W6B)iSE@EI{)?r{^5XeoeC}8kraA#m(v;es$FEKZjRlV^L0|RRY0|R4T
zL4I+G{$?X)1_rhp3=9me44^<{WMKGkM8H3u-{va=HzfSe7gp4R0uxNDGN>}%X1vY7
zz`y~G9&ng|Mf4!*8E=D40%?I^7O)6Ag9}s-NFgIw%mJ!|k%@tE0s|`p2cr*T8Uq7^
zJCy#)Aj#0ez<@{t4Pg5iKp_U!8j$9i!r;J=s5pu7!T$#gdW^UKgIovl3j;_WSP|G-
zCI$voC<F;IGcbU{o<Roe4hDu824*lzhJl3v<SHJp4_O!(7!nnf6elQ7`u`uK4Vm|U
z>HWv|O70bc^?@ZJ1S1>7ksux;$gdy_;=nM}bucbjG#gpEP&Kila%seKW9VVnz$nJR
z1PXm{>XBg3VPLRlG&9j>R8v;sXJiu<k!NHFlVZk3W+Lot>}*QvYU*kx=4R$*M&e@P
zADh_NnpoL6SY_GR!o%6vWLY`b-^<Dw8PpgU$;rYPg-vXHY)!1Ja;)r}ED;ebob0S}
ztd~%ffYgE$1}r6m-J)u4W@@6(2q7U(5|L-b;TA>>BuB799kv7J29O0{R~4eTf)(O4
zY>r`shl?-+0|OS%Gv3B9oY4-`R|s>Q85kHvMcA|%mDJVjK|u@(P<A#EaWN1yHUfpJ
zv5`EZm?+pbWpG$SL)+ZU7!=^<X5wOux4AePxY<}aHMFc`Wn_dzc(}QFM1*8yWR>I;
zgxMHbnAMq?6ty)?^wo5vq(uY;MWm&4)bzE~HDy&fc(@t2H*j!qb91VzLv&d|jNs>!
zVP;lmW@chh7ZHJIiG%3p7nD)uV1XuV9)@Yqe8tGX%D@9<Gcm9;C_&lG42leSP&Nw#
zE5jTpo0Wl^VHcFm#=y#O36!&0I2jljxWIXyk%g0iiGhzn2rACZ;KZN>WwS7FF-(B6
zSsBC_7D3r;3|tJykgJj6oXq5G2K1^VC^fw_C$Wfu!3|uIlz{0XhIEEh1_cHqaHXQa
zV8x(-WD<mL$Y8>t3&uta1`Hq`gIj)HiCcbAda8nvo`Hgu0@y|cD+NOnT@zg+149!A
zBvTl`vJAK?var;m;>`R!1w%apY`PEyC8P+zET7oHbsrNW6C*Q2JA(^XVo_0kc~NG1
zMhPdFnUk7U0@eHfKLZmu^!XSV7$m@gAU-n#8v`Q)s62&~hG09+y}J&oyBNTA3j+g~
F1^_W!{XGBx

literal 0
HcmV?d00001

diff --git a/jquery/slick/fonts/slick.svg b/jquery/slick/fonts/slick.svg
new file mode 100644
index 0000000..b36a66a
--- /dev/null
+++ b/jquery/slick/fonts/slick.svg
@@ -0,0 +1,14 @@
+<?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>Generated by Fontastic.me</metadata>
+<defs>
+<font id="slick" horiz-adv-x="512">
+<font-face font-family="slick" units-per-em="512" ascent="480" descent="-32"/>
+<missing-glyph horiz-adv-x="512" />
+
+<glyph unicode="&#8594;" d="M241 113l130 130c4 4 6 8 6 13 0 5-2 9-6 13l-130 130c-3 3-7 5-12 5-5 0-10-2-13-5l-29-30c-4-3-6-7-6-12 0-5 2-10 6-13l87-88-87-88c-4-3-6-8-6-13 0-5 2-9 6-12l29-30c3-3 8-5 13-5 5 0 9 2 12 5z m234 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
+<glyph unicode="&#8592;" d="M296 113l29 30c4 3 6 7 6 12 0 5-2 10-6 13l-87 88 87 88c4 3 6 8 6 13 0 5-2 9-6 12l-29 30c-3 3-8 5-13 5-5 0-9-2-12-5l-130-130c-4-4-6-8-6-13 0-5 2-9 6-13l130-130c3-3 7-5 12-5 5 0 10 2 13 5z m179 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
+<glyph unicode="&#8226;" d="M475 256c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
+<glyph unicode="&#97;" d="M475 439l0-128c0-5-1-9-5-13-4-4-8-5-13-5l-128 0c-8 0-13 3-17 11-3 7-2 14 4 20l40 39c-28 26-62 39-100 39-20 0-39-4-57-11-18-8-33-18-46-32-14-13-24-28-32-46-7-18-11-37-11-57 0-20 4-39 11-57 8-18 18-33 32-46 13-14 28-24 46-32 18-7 37-11 57-11 23 0 44 5 64 15 20 9 38 23 51 42 2 1 4 3 7 3 3 0 5-1 7-3l39-39c2-2 3-3 3-6 0-2-1-4-2-6-21-25-46-45-76-59-29-14-60-20-93-20-30 0-58 5-85 17-27 12-51 27-70 47-20 19-35 43-47 70-12 27-17 55-17 85 0 30 5 58 17 85 12 27 27 51 47 70 19 20 43 35 70 47 27 12 55 17 85 17 28 0 55-5 81-15 26-11 50-26 70-45l37 37c6 6 12 7 20 4 8-4 11-9 11-17z"/>
+</font></defs></svg>
diff --git a/jquery/slick/fonts/slick.ttf b/jquery/slick/fonts/slick.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..9d03461b653373f7cda3b4af104c6bca07f9892b
GIT binary patch
literal 1892
zcmZQzWME+6WoTevW(aU|3-Qgpcw#*R1G@(U1A~mai>n)h2?HAg1G@$T1A~Hpu)dN1
zx4)Yh7#JfM7#PBma}x`c_+9rhFfg8AU|>v2Pb@C@|DS=Gfq`9tfq{V|J*P6we)hHm
z1_ovu1_mabjMT&w21di*3=9l+7#JALGBQ#VnV&MTGB7ZTFfcHvWaO4quz4|fF)%Q0
zU|?Vn%gIkpWcbFoh=GAwhk=1XAUCn1fWe!=oq>VT0_2{&#N1R?^~OUC46GRp42*dN
z`Nbvrn~j(m7}#zwFfh1+{l>_^@ZpGne>}g<R|ak-1`s%3SWyqBRT)$nZ!_Koxt9SV
z%>dE|7SV$UFy01<fONny3s{7m!3C-Zq>vFT<^Wa0$i%=nfq|8QgVBdEje&u|9ZG*?
zkYs3KU|?ck<%Fng0Ncj^3Nf%iK$>d`g9AgN;v~ig{~s{uG2Z?Uavdn17(n{Kion(~
zF)*k?AxMy!fdLfu3^HJMFfhb0FoRh#3@i*FSMe}#FfcK&FfcGADkv#VP@MGtKS&!g
z@Bh;KkMEV-D+KEUOF{@nHi#oZJVuaTK^Vk=VW{h1T(W33vUH(pVnyZBi08)8!?1x-
zjDZOh`ry<f!JxyyV9#h~qR*(Nti;dACMqJ&$POmOjE&4h*xA_Gl+@MK)lAII%*~9%
z#l$~0v9UF=vU9M?vayASv$4sta<IRbl`}G^F))&og)s`7*!b9*SXt#***RGvB3L-t
zS>;$Sp(p{V1t$zxN(Q?{)!fX~M4u5tLYyQb&xpe<j2cLeV1+tt2h0s13&5@_L~#Wx
z#A(<Z!w3%-VFm^UES_h)jbS*W9j31k<~TDjFp7$>X)`LRtJ#Bs7!;uFY$D=fAZTm^
z3RPnxc}6i&ux-lVu!e@VxtTF2z|GCX#TajMaWrtVv2to?S;@-C2#N4;bMuG@$;ikm
z$tei4F|shLGcze_Ynte*=}1Y72nvcwOX;ZTYpH9>s&epfGj4C-;Ns@yR9A=SvVs`F
z&nLsotj^5L#G)=D0?`r&(a$d^qsqYoP1rmP)1di^k%5(g2g+t*U}sQ*vY8na8S<cP
z76w*^IZ!q$12@AiD4UIemEjU7XR~lJFfwp~^E@L9Cj%1$AA=B7oSDIiK?}-eVc=qz
z0A;f>h%qdJve_887>+R%GvqL2G9)u(GcXkAWF}`bFa$BAGNdz<GUPBMG88c|1f`~z
z<|Gy|Ft{<~GvqOpfaxNJbcR$01qLGqJq7~?1qLey1tgOod_x8k23;^VVlZF;@fh6l
z^Ge+Ei_%jSjPwi?tQ5dDDp)BPn&_J78W|XxFd&%%b59sUDnk)NF+(QUegy_Yu$>HH
zsYS(^`FRS4dIs2ZAqq-J5rA1fu`_^*G$uwSMrMX~1{bcxqN4orqRjM+5>7BPCpE1E
rs`vkY1}1Rm^D!_mNPq=Fd}anV21ams3Mmc2cAR^69aMKQAlESfE_dz;

literal 0
HcmV?d00001

diff --git a/jquery/slick/fonts/slick.woff b/jquery/slick/fonts/slick.woff
new file mode 100644
index 0000000000000000000000000000000000000000..8ee99721bb81b59a5e1ceee1d3256b15f907d96b
GIT binary patch
literal 1380
zcmXT-cXRU(3GruOU`=7*W?*1oV2@#71ksq-+09LXfq{{Ofq_Ynfq`kZ{I4)RH@6U9
z1_ove1_lNx1_lP1+>0mHySuo$F)%QPfcOjy3<?ZJ3@rY^`bG>4%moY#3_%PG3<&`e
z|JNnwCKfO-Fdt!HU<hDfU`$ftcG-}TnwY}Cz#_uHz@W##z+lF}X!tuLBQ=qMfyD)C
zo(l6*CgzOXk_rX}mIMX{20jpG@nZ1GO{^$jU|<2+!N$PAz{bEDz>t@io65kzQo+E$
zaEF0`F^^Tf@lZj2aR~zhE69BUVD~XIFjma5ope55$Wi2Yx@NTclm%f5W{!_;W>=e6
zU7cMnyt!0VN00kRYm3v5t@ahWt)nA!CLEX*!6o4lu<qF6dXL}g6*qjVE<}2rQOV!;
zb6@5B>3ht1xYz^_8|?l$S>!vTA>)w+>Gu{lOuzF{j_s=f^Fvt<_Q{GRAF}@IAE+1H
zw>he^Nqqxn$nMz=FXEWCzE=;h5UkkM-(;7@?|PBZYv0MIESl4+zVF)*sGk4x(6Z~f
z&MgwHfq{&+?rY*j9M)gd|1x`~+ns5rkA;L@Oj&R|!1qt#Ijv=G2bfN8=;&O(u76$a
z@mm%xR+}xeXPJ2NE}E%T_Sn2|nnv3rWfRxH5A*BZ6ly&BcW1*>-sq1v%?r)XX{C6p
zw_J#NHAC&@1)ce3r#HCV-IU^b)V)2teV=mv%PseXPc5zSFL-<VcC}#hx-3(V!#P`{
zb<ccWV{(rF==mi5Y|aUcj_1NQU#;1x;d!)Z-l;V{xjd5I7U$=sw^uH=n6_`4{_5#h
zSK73*)>zNxeb&tV{50z|-n$IUXSS`A{PBZ*wdAaIO<c2<ZPh+{X=TXttocuvJOWgf
z`mKz97s~cyOT4t1+u4amZ0s^d?|ODEzE^PJJ%5|6mUZ$YhJSpgPlX)0V|Y7j>+H12
zCOTWWZ}h&qbn;b+jY&hR@;uqr8<7?+;{Ol)chgUdjrZiv)btDTyY(=a&*H)BOik5J
zCEk}-{4#9ko@JVu3Qqs>cGbQ%(=~5eH<zdhONo8sx>oUCeoDLS9tMVrImrnL2`LOs
z#qZbUGhBSmt^F#|gdwVueKSNZB_ZJfa}p<;KtfUii<6iE+eZlomNEu&kiN8}ggFNe
zoH}su#o-yp4jg#Ew{*XehtU=T0|UbiMMe#d%*@Qn6M_;Nni@>5i?Fe`xg7QE;s0l!
za3Oim-~VRJF1*Z-b2oUgvbiyspXTF+*q4xy){r2{=Ef$_!T3qyV2v0XyTaMS2M!)!
zNijB1(bCZL3z+lezkP(P(EI<7e)GQ<y?eTS76W@v4$ljxE9^QU2F)|M(jG7{SnBeN
zgWQ;skid{+z24w`McwT6Ja>F}6bkljSS07S+GvH*y|g{NPl^m0mNNcb#u)^$KP4ey
z&)EY9792mqz~o@2%&e8b#9)xb_?C%*fq{vEK@|!iS)CQ6C%4Zw>#&1BtNqPM&UGFW
zmA>9u>gXi2DrVUQ#-JVMX@W{lO;c<8LskYom9TW+n;`u3ZIz<yrVVGlx0!!t+wr)U
z<-d^8N^bofNy3#UXBif0ov(h<6K$uwe#yS4K9{mf^A1gU&idWPCGOJ^vm&kY*-v`h
z?UdGE`Ja@w;Q0yeGtTuPmB%g>hW&4tyyb4C1xJ+H-7>DLCld{?h)h{!{rA4Fc<jXq
z?eV7{i@r6Pck5*7wJWZfWojy`!hG*NDUCe&>HECBlji)YJ@LJ|R;~K=vpOl?&?*0Y
Z{xbBgGI9llUz!734^IXI14ADJD*y_Q8;<}0

literal 0
HcmV?d00001

diff --git a/jquery/slick/slick-theme.css b/jquery/slick/slick-theme.css
new file mode 100644
index 0000000..1232fca
--- /dev/null
+++ b/jquery/slick/slick-theme.css
@@ -0,0 +1,204 @@
+@charset 'UTF-8';
+/* Slider */
+.slick-loading .slick-list
+{
+    background: #fff url('./ajax-loader.gif') center center no-repeat;
+}
+
+/* Icons */
+@font-face
+{
+    font-family: 'slick';
+    font-weight: normal;
+    font-style: normal;
+
+    src: url('./fonts/slick.eot');
+    src: url('./fonts/slick.eot?#iefix') format('embedded-opentype'), url('./fonts/slick.woff') format('woff'), url('./fonts/slick.ttf') format('truetype'), url('./fonts/slick.svg#slick') format('svg');
+}
+/* Arrows */
+.slick-prev,
+.slick-next
+{
+    font-size: 0;
+    line-height: 0;
+
+    position: absolute;
+    top: 50%;
+
+    display: block;
+
+    width: 20px;
+    height: 20px;
+    padding: 0;
+    -webkit-transform: translate(0, -50%);
+    -ms-transform: translate(0, -50%);
+    transform: translate(0, -50%);
+
+    cursor: pointer;
+
+    color: transparent;
+    border: none;
+    outline: none;
+    background: transparent;
+}
+.slick-prev:hover,
+.slick-prev:focus,
+.slick-next:hover,
+.slick-next:focus
+{
+    color: transparent;
+    outline: none;
+    background: transparent;
+}
+.slick-prev:hover:before,
+.slick-prev:focus:before,
+.slick-next:hover:before,
+.slick-next:focus:before
+{
+    opacity: 1;
+}
+.slick-prev.slick-disabled:before,
+.slick-next.slick-disabled:before
+{
+    opacity: .25;
+}
+
+.slick-prev:before,
+.slick-next:before
+{
+    font-family: 'slick';
+    font-size: 20px;
+    line-height: 1;
+
+    opacity: .75;
+    color: white;
+
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+}
+
+.slick-prev
+{
+    left: -25px;
+}
+[dir='rtl'] .slick-prev
+{
+    right: -25px;
+    left: auto;
+}
+.slick-prev:before
+{
+    content: '←';
+}
+[dir='rtl'] .slick-prev:before
+{
+    content: '→';
+}
+
+.slick-next
+{
+    right: -25px;
+}
+[dir='rtl'] .slick-next
+{
+    right: auto;
+    left: -25px;
+}
+.slick-next:before
+{
+    content: '→';
+}
+[dir='rtl'] .slick-next:before
+{
+    content: '←';
+}
+
+/* Dots */
+.slick-dotted.slick-slider
+{
+    margin-bottom: 30px;
+}
+
+.slick-dots
+{
+    position: absolute;
+    bottom: -25px;
+
+    display: block;
+
+    width: 100%;
+    padding: 0;
+    margin: 0;
+
+    list-style: none;
+
+    text-align: center;
+}
+.slick-dots li
+{
+    position: relative;
+
+    display: inline-block;
+
+    width: 20px;
+    height: 20px;
+    margin: 0 5px;
+    padding: 0;
+
+    cursor: pointer;
+}
+.slick-dots li button
+{
+    font-size: 0;
+    line-height: 0;
+
+    display: block;
+
+    width: 20px;
+    height: 20px;
+    padding: 5px;
+
+    cursor: pointer;
+
+    color: transparent;
+    border: 0;
+    outline: none;
+    background: transparent;
+}
+.slick-dots li button:hover,
+.slick-dots li button:focus
+{
+    outline: none;
+}
+.slick-dots li button:hover:before,
+.slick-dots li button:focus:before
+{
+    opacity: 1;
+}
+.slick-dots li button:before
+{
+    font-family: 'slick';
+    font-size: 6px;
+    line-height: 20px;
+
+    position: absolute;
+    top: 0;
+    left: 0;
+
+    width: 20px;
+    height: 20px;
+
+    content: '•';
+    text-align: center;
+
+    opacity: .25;
+    color: black;
+
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+}
+.slick-dots li.slick-active button:before
+{
+    opacity: .75;
+    color: black;
+}
diff --git a/jquery/slick/slick-theme.less b/jquery/slick/slick-theme.less
new file mode 100644
index 0000000..8f10758
--- /dev/null
+++ b/jquery/slick/slick-theme.less
@@ -0,0 +1,168 @@
+@charset "UTF-8";
+
+// Default Variables
+
+@slick-font-path: "./fonts/";
+@slick-font-family: "slick";
+@slick-loader-path: "./";
+@slick-arrow-color: white;
+@slick-dot-color: black;
+@slick-dot-color-active: @slick-dot-color;
+@slick-prev-character: "←";
+@slick-next-character: "→";
+@slick-dot-character: "•";
+@slick-dot-size: 6px;
+@slick-opacity-default: 0.75;
+@slick-opacity-on-hover: 1;
+@slick-opacity-not-active: 0.25;
+
+/* Slider */
+.slick-loading .slick-list{
+    background: #fff url('@{slick-loader-path}ajax-loader.gif') center center no-repeat;
+}
+
+/* Icons */
+@font-face{
+    font-family: 'slick';
+    font-weight: normal;
+    font-style: normal;
+
+    src: url('@{slick-font-path}slick.eot');
+    src: url('@{slick-font-path}slick.eot?#iefix') format('embedded-opentype'), url('@{slick-font-path}slick.woff') format('woff'), url('@{slick-font-path}slick.ttf') format('truetype'), url('@{slick-font-path}slick.svg#slick') format('svg');
+}
+
+/* Arrows */
+
+.slick-prev,
+.slick-next {
+    position: absolute;
+    display: block;
+    height: 20px;
+    width: 20px;
+    line-height: 0px;
+    font-size: 0px;
+    cursor: pointer;
+    background: transparent;
+    color: transparent;
+    top: 50%;
+    -webkit-transform: translate(0, -50%);
+    -ms-transform: translate(0, -50%);
+    transform: translate(0, -50%);
+    padding: 0;
+    border: none;
+    outline: none;
+    &:hover, &:focus {
+        outline: none;
+        background: transparent;
+        color: transparent;
+        &:before {
+            opacity: @slick-opacity-on-hover;
+        }
+    }
+    &.slick-disabled:before {
+        opacity: @slick-opacity-not-active;
+    }
+}
+
+.slick-prev:before, .slick-next:before {
+    font-family: @slick-font-family;
+    font-size: 20px;
+    line-height: 1;
+    color: @slick-arrow-color;
+    opacity: @slick-opacity-default;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+}
+
+.slick-prev {
+    left: -25px;
+    &[dir="rtl"] {
+        left: auto;
+        right: -25px;
+    }
+    &:before {
+        content: @slick-prev-character;
+        &[dir="rtl"] {
+            content: @slick-next-character;
+        }
+    }
+}
+
+.slick-next {
+    right: -25px;
+    &[dir="rtl"] {
+        left: -25px;
+        right: auto;
+    }
+    &:before {
+        content: @slick-next-character;
+        &[dir="rtl"] {
+            content: @slick-prev-character;
+        }
+    }
+}
+
+/* Dots */
+
+.slick-dotted .slick-slider {
+    margin-bottom: 30px;
+}
+
+.slick-dots {
+    position: absolute;
+    bottom: -25px;
+    list-style: none;
+    display: block;
+    text-align: center;
+    padding: 0;
+    margin: 0;
+    width: 100%;
+    li {
+        position: relative;
+        display: inline-block;
+        height: 20px;
+        width: 20px;
+        margin: 0 5px;
+        padding: 0;
+        cursor: pointer;
+        button {
+            border: 0;
+            background: transparent;
+            display: block;
+            height: 20px;
+            width: 20px;
+            outline: none;
+            line-height: 0px;
+            font-size: 0px;
+            color: transparent;
+            padding: 5px;
+            cursor: pointer;
+            &:hover, &:focus {
+                outline: none;
+                &:before {
+                    opacity: @slick-opacity-on-hover;
+                }
+            }
+            &:before {
+                position: absolute;
+                top: 0;
+                left: 0;
+                content: @slick-dot-character;
+                width: 20px;
+                height: 20px;
+                font-family: @slick-font-family;
+                font-size: @slick-dot-size;
+                line-height: 20px;
+                text-align: center;
+                color: @slick-dot-color;
+                opacity: @slick-opacity-not-active;
+                -webkit-font-smoothing: antialiased;
+                -moz-osx-font-smoothing: grayscale;
+            }
+        }
+        &.slick-active button:before {
+            color: @slick-dot-color-active;
+            opacity: @slick-opacity-default;
+        }
+    }
+}
diff --git a/jquery/slick/slick-theme.scss b/jquery/slick/slick-theme.scss
new file mode 100644
index 0000000..7fe63e1
--- /dev/null
+++ b/jquery/slick/slick-theme.scss
@@ -0,0 +1,194 @@
+@charset "UTF-8";
+
+// Default Variables
+
+// Slick icon entity codes outputs the following
+// "\2190" outputs ascii character "←"
+// "\2192" outputs ascii character "→"
+// "\2022" outputs ascii character "•"
+
+$slick-font-path: "./fonts/" !default;
+$slick-font-family: "slick" !default;
+$slick-loader-path: "./" !default;
+$slick-arrow-color: white !default;
+$slick-dot-color: black !default;
+$slick-dot-color-active: $slick-dot-color !default;
+$slick-prev-character: "\2190" !default;
+$slick-next-character: "\2192" !default;
+$slick-dot-character: "\2022" !default;
+$slick-dot-size: 6px !default;
+$slick-opacity-default: 0.75 !default;
+$slick-opacity-on-hover: 1 !default;
+$slick-opacity-not-active: 0.25 !default;
+
+@function slick-image-url($url) {
+    @if function-exists(image-url) {
+        @return image-url($url);
+    }
+    @else {
+        @return url($slick-loader-path + $url);
+    }
+}
+
+@function slick-font-url($url) {
+    @if function-exists(font-url) {
+        @return font-url($url);
+    }
+    @else {
+        @return url($slick-font-path + $url);
+    }
+}
+
+/* Slider */
+
+.slick-list {
+    .slick-loading & {
+        background: #fff slick-image-url("ajax-loader.gif") center center no-repeat;
+    }
+}
+
+/* Icons */
+@if $slick-font-family == "slick" {
+    @font-face {
+        font-family: "slick";
+        src: slick-font-url("slick.eot");
+        src: slick-font-url("slick.eot?#iefix") format("embedded-opentype"), slick-font-url("slick.woff") format("woff"), slick-font-url("slick.ttf") format("truetype"), slick-font-url("slick.svg#slick") format("svg");
+        font-weight: normal;
+        font-style: normal;
+    }
+}
+
+/* Arrows */
+
+.slick-prev,
+.slick-next {
+    position: absolute;
+    display: block;
+    height: 20px;
+    width: 20px;
+    line-height: 0px;
+    font-size: 0px;
+    cursor: pointer;
+    background: transparent;
+    color: transparent;
+    top: 50%;
+    -webkit-transform: translate(0, -50%);
+    -ms-transform: translate(0, -50%);
+    transform: translate(0, -50%);
+    padding: 0;
+    border: none;
+    outline: none;
+    &:hover, &:focus {
+        outline: none;
+        background: transparent;
+        color: transparent;
+        &:before {
+            opacity: $slick-opacity-on-hover;
+        }
+    }
+    &.slick-disabled:before {
+        opacity: $slick-opacity-not-active;
+    }
+    &:before {
+        font-family: $slick-font-family;
+        font-size: 20px;
+        line-height: 1;
+        color: $slick-arrow-color;
+        opacity: $slick-opacity-default;
+        -webkit-font-smoothing: antialiased;
+        -moz-osx-font-smoothing: grayscale;
+    }
+}
+
+.slick-prev {
+    left: -25px;
+    [dir="rtl"] & {
+        left: auto;
+        right: -25px;
+    }
+    &:before {
+        content: $slick-prev-character;
+        [dir="rtl"] & {
+            content: $slick-next-character;
+        }
+    }
+}
+
+.slick-next {
+    right: -25px;
+    [dir="rtl"] & {
+        left: -25px;
+        right: auto;
+    }
+    &:before {
+        content: $slick-next-character;
+        [dir="rtl"] & {
+            content: $slick-prev-character;
+        }
+    }
+}
+
+/* Dots */
+
+.slick-dotted.slick-slider {
+    margin-bottom: 30px;
+}
+
+.slick-dots {
+    position: absolute;
+    bottom: -25px;
+    list-style: none;
+    display: block;
+    text-align: center;
+    padding: 0;
+    margin: 0;
+    width: 100%;
+    li {
+        position: relative;
+        display: inline-block;
+        height: 20px;
+        width: 20px;
+        margin: 0 5px;
+        padding: 0;
+        cursor: pointer;
+        button {
+            border: 0;
+            background: transparent;
+            display: block;
+            height: 20px;
+            width: 20px;
+            outline: none;
+            line-height: 0px;
+            font-size: 0px;
+            color: transparent;
+            padding: 5px;
+            cursor: pointer;
+            &:hover, &:focus {
+                outline: none;
+                &:before {
+                    opacity: $slick-opacity-on-hover;
+                }
+            }
+            &:before {
+                position: absolute;
+                top: 0;
+                left: 0;
+                content: $slick-dot-character;
+                width: 20px;
+                height: 20px;
+                font-family: $slick-font-family;
+                font-size: $slick-dot-size;
+                line-height: 20px;
+                text-align: center;
+                color: $slick-dot-color;
+                opacity: $slick-opacity-not-active;
+                -webkit-font-smoothing: antialiased;
+                -moz-osx-font-smoothing: grayscale;
+            }
+        }
+        &.slick-active button:before {
+            color: $slick-dot-color-active;
+            opacity: $slick-opacity-default;
+        }
+    }
+}
diff --git a/jquery/slick/slick.css b/jquery/slick/slick.css
new file mode 100644
index 0000000..573b16e
--- /dev/null
+++ b/jquery/slick/slick.css
@@ -0,0 +1,200 @@
+/* Slider */
+.slick-slider
+{
+    position: relative;
+
+    display: block;
+    box-sizing: border-box;
+
+    -webkit-user-select: none;
+       -moz-user-select: none;
+        -ms-user-select: none;
+            user-select: none;
+
+    -webkit-touch-callout: none;
+    -khtml-user-select: none;
+    -ms-touch-action: pan-y;
+        touch-action: pan-y;
+    -webkit-tap-highlight-color: transparent;
+}
+
+.slick-list
+{
+    position: relative;
+
+    display: block;
+    overflow: hidden;
+
+    margin: 0;
+    padding: 0;
+}
+.slick-list:focus
+{
+    outline: none;
+}
+.slick-list.dragging
+{
+    cursor: pointer;
+    cursor: hand;
+}
+
+.slick-slider .slick-track,
+.slick-slider .slick-list
+{
+    -webkit-transform: translate3d(0, 0, 0);
+       -moz-transform: translate3d(0, 0, 0);
+        -ms-transform: translate3d(0, 0, 0);
+         -o-transform: translate3d(0, 0, 0);
+            transform: translate3d(0, 0, 0);
+}
+
+.slick-track
+{
+    position: relative;
+    top: 0;
+    left: 0;
+
+    display: block;
+}
+.slick-track:before,
+.slick-track:after
+{
+    display: table;
+
+    content: '';
+}
+.slick-track:after
+{
+    clear: both;
+}
+.slick-loading .slick-track
+{
+    visibility: hidden;
+}
+
+.slick-slide
+{
+    display: none;
+    float: left;
+
+    height: 100%;
+    min-height: 1px;
+}
+[dir='rtl'] .slick-slide
+{
+    float: right;
+}
+.slick-slide img
+{
+    display: block;
+}
+.slick-slide.slick-loading img
+{
+    display: none;
+}
+.slick-slide.dragging img
+{
+    pointer-events: none;
+}
+.slick-initialized .slick-slide
+{
+    display: block;
+}
+.slick-loading .slick-slide
+{
+    visibility: hidden;
+}
+.slick-vertical .slick-slide
+{
+    display: block;
+
+    height: auto;
+
+    border: 1px solid transparent;
+}
+.slick-arrow.slick-hidden {
+    display: none;
+}
+
+/* Dots */
+.slick-dotted.slick-slider
+{
+    margin-bottom: 30px;
+}
+
+.slick-dots
+{
+    position: absolute;
+    bottom: -25px;
+
+    display: block;
+
+    width: 100%;
+    padding: 0;
+    margin: 0;
+
+    list-style: none;
+
+    text-align: center;
+}
+.slick-dots li
+{
+    position: relative;
+    display: inline-block;
+    width: 20px;
+    height: 20px;
+    margin: 0 5px;
+    padding: 0;
+    cursor: pointer;
+}
+.slick-dots li button!important
+{
+    font-size: 0;
+    line-height: 0;
+
+    display: block;
+
+    width: 20px;
+    height: 20px;
+    padding: 5px;
+    cursor: pointer;
+    color: transparent;
+    border: 0;
+    outline: none;
+    background: transparent;
+}
+.slick-dots li button:hover,
+.slick-dots li button:focus
+{
+    outline: none;
+}
+.slick-dots li button:hover:before,
+.slick-dots li button:focus:before
+{
+    opacity: 1;
+}
+.slick-dots li button:before
+{
+    font-size: 6px;
+    line-height: 20px;
+
+    position: absolute;
+    top: 0;
+    left: 0;
+
+    width: 20px;
+    height: 20px;
+
+    text-align: center;
+
+    opacity: .25;
+    color: black;
+
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+}
+.slick-dots li.slick-active button:before
+{
+    opacity: .75;
+    color: black;
+}
diff --git a/jquery/slick/slick.js b/jquery/slick/slick.js
new file mode 100644
index 0000000..5394604
--- /dev/null
+++ b/jquery/slick/slick.js
@@ -0,0 +1,2892 @@
+/*
+     _ _      _       _
+ ___| (_) ___| | __  (_)___
+/ __| | |/ __| |/ /  | / __|
+\__ \ | | (__|   < _ | \__ \
+|___/_|_|\___|_|\_(_)/ |___/
+                   |__/
+
+ Version: 1.6.0
+  Author: Ken Wheeler
+ Website: http://kenwheeler.github.io
+    Docs: http://kenwheeler.github.io/slick
+    Repo: http://github.com/kenwheeler/slick
+  Issues: http://github.com/kenwheeler/slick/issues
+
+ */
+/* global window, document, define, jQuery, setInterval, clearInterval */
+(function(factory) {
+    'use strict';
+    if (typeof define === 'function' && define.amd) {
+        define(['jquery'], factory);
+    } else if (typeof exports !== 'undefined') {
+        module.exports = factory(require('jquery'));
+    } else {
+        factory(jQuery);
+    }
+
+}(function($) {
+    'use strict';
+    var Slick = window.Slick || {};
+
+    Slick = (function() {
+
+        var instanceUid = 0;
+
+        function Slick(element, settings) {
+
+            var _ = this, dataSettings;
+
+            _.defaults = {
+                accessibility: true,
+                adaptiveHeight: false,
+                appendArrows: $(element),
+                appendDots: $(element),
+                arrows: true,
+                asNavFor: null,
+                prevArrow: '<button type="button" data-role="none" class="slick-prev" aria-label="Previous" tabindex="0" role="button">Previous</button>',
+                nextArrow: '<button type="button" data-role="none" class="slick-next" aria-label="Next" tabindex="0" role="button">Next</button>',
+                autoplay: false,
+                autoplaySpeed: 3000,
+                centerMode: false,
+                centerPadding: '50px',
+                cssEase: 'ease',
+                customPaging: function(slider, i) {
+                    return $('<button type="button" data-role="none" role="button" tabindex="0" />').text(i + 1);
+                },
+                dots: false,
+                dotsClass: 'slick-dots',
+                draggable: true,
+                easing: 'linear',
+                edgeFriction: 0.35,
+                fade: false,
+                focusOnSelect: false,
+                infinite: true,
+                initialSlide: 0,
+                lazyLoad: 'ondemand',
+                mobileFirst: false,
+                pauseOnHover: true,
+                pauseOnFocus: true,
+                pauseOnDotsHover: false,
+                respondTo: 'window',
+                responsive: null,
+                rows: 1,
+                rtl: false,
+                slide: '',
+                slidesPerRow: 1,
+                slidesToShow: 1,
+                slidesToScroll: 1,
+                speed: 500,
+                swipe: true,
+                swipeToSlide: false,
+                touchMove: true,
+                touchThreshold: 5,
+                useCSS: true,
+                useTransform: true,
+                variableWidth: false,
+                vertical: false,
+                verticalSwiping: false,
+                waitForAnimate: true,
+                zIndex: 1000
+            };
+
+            _.initials = {
+                animating: false,
+                dragging: false,
+                autoPlayTimer: null,
+                currentDirection: 0,
+                currentLeft: null,
+                currentSlide: 0,
+                direction: 1,
+                $dots: null,
+                listWidth: null,
+                listHeight: null,
+                loadIndex: 0,
+                $nextArrow: null,
+                $prevArrow: null,
+                slideCount: null,
+                slideWidth: null,
+                $slideTrack: null,
+                $slides: null,
+                sliding: false,
+                slideOffset: 0,
+                swipeLeft: null,
+                $list: null,
+                touchObject: {},
+                transformsEnabled: false,
+                unslicked: false
+            };
+
+            $.extend(_, _.initials);
+
+            _.activeBreakpoint = null;
+            _.animType = null;
+            _.animProp = null;
+            _.breakpoints = [];
+            _.breakpointSettings = [];
+            _.cssTransitions = false;
+            _.focussed = false;
+            _.interrupted = false;
+            _.hidden = 'hidden';
+            _.paused = true;
+            _.positionProp = null;
+            _.respondTo = null;
+            _.rowCount = 1;
+            _.shouldClick = true;
+            _.$slider = $(element);
+            _.$slidesCache = null;
+            _.transformType = null;
+            _.transitionType = null;
+            _.visibilityChange = 'visibilitychange';
+            _.windowWidth = 0;
+            _.windowTimer = null;
+
+            dataSettings = $(element).data('slick') || {};
+
+            _.options = $.extend({}, _.defaults, settings, dataSettings);
+
+            _.currentSlide = _.options.initialSlide;
+
+            _.originalSettings = _.options;
+
+            if (typeof document.mozHidden !== 'undefined') {
+                _.hidden = 'mozHidden';
+                _.visibilityChange = 'mozvisibilitychange';
+            } else if (typeof document.webkitHidden !== 'undefined') {
+                _.hidden = 'webkitHidden';
+                _.visibilityChange = 'webkitvisibilitychange';
+            }
+
+            _.autoPlay = $.proxy(_.autoPlay, _);
+            _.autoPlayClear = $.proxy(_.autoPlayClear, _);
+            _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);
+            _.changeSlide = $.proxy(_.changeSlide, _);
+            _.clickHandler = $.proxy(_.clickHandler, _);
+            _.selectHandler = $.proxy(_.selectHandler, _);
+            _.setPosition = $.proxy(_.setPosition, _);
+            _.swipeHandler = $.proxy(_.swipeHandler, _);
+            _.dragHandler = $.proxy(_.dragHandler, _);
+            _.keyHandler = $.proxy(_.keyHandler, _);
+
+            _.instanceUid = instanceUid++;
+
+            // A simple way to check for HTML strings
+            // Strict HTML recognition (must start with <)
+            // Extracted from jQuery v1.11 source
+            _.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/;
+
+
+            _.registerBreakpoints();
+            _.init(true);
+
+        }
+
+        return Slick;
+
+    }());
+
+    Slick.prototype.activateADA = function() {
+        var _ = this;
+
+        _.$slideTrack.find('.slick-active').attr({
+            'aria-hidden': 'false'
+        }).find('a, input, button, select').attr({
+            'tabindex': '0'
+        });
+
+    };
+
+    Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {
+
+        var _ = this;
+
+        if (typeof(index) === 'boolean') {
+            addBefore = index;
+            index = null;
+        } else if (index < 0 || (index >= _.slideCount)) {
+            return false;
+        }
+
+        _.unload();
+
+        if (typeof(index) === 'number') {
+            if (index === 0 && _.$slides.length === 0) {
+                $(markup).appendTo(_.$slideTrack);
+            } else if (addBefore) {
+                $(markup).insertBefore(_.$slides.eq(index));
+            } else {
+                $(markup).insertAfter(_.$slides.eq(index));
+            }
+        } else {
+            if (addBefore === true) {
+                $(markup).prependTo(_.$slideTrack);
+            } else {
+                $(markup).appendTo(_.$slideTrack);
+            }
+        }
+
+        _.$slides = _.$slideTrack.children(this.options.slide);
+
+        _.$slideTrack.children(this.options.slide).detach();
+
+        _.$slideTrack.append(_.$slides);
+
+        _.$slides.each(function(index, element) {
+            $(element).attr('data-slick-index', index);
+        });
+
+        _.$slidesCache = _.$slides;
+
+        _.reinit();
+
+    };
+
+    Slick.prototype.animateHeight = function() {
+        var _ = this;
+        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
+            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
+            _.$list.animate({
+                height: targetHeight
+            }, _.options.speed);
+        }
+    };
+
+    Slick.prototype.animateSlide = function(targetLeft, callback) {
+
+        var animProps = {},
+            _ = this;
+
+        _.animateHeight();
+
+        if (_.options.rtl === true && _.options.vertical === false) {
+            targetLeft = -targetLeft;
+        }
+        if (_.transformsEnabled === false) {
+            if (_.options.vertical === false) {
+                _.$slideTrack.animate({
+                    left: targetLeft
+                }, _.options.speed, _.options.easing, callback);
+            } else {
+                _.$slideTrack.animate({
+                    top: targetLeft
+                }, _.options.speed, _.options.easing, callback);
+            }
+
+        } else {
+
+            if (_.cssTransitions === false) {
+                if (_.options.rtl === true) {
+                    _.currentLeft = -(_.currentLeft);
+                }
+                $({
+                    animStart: _.currentLeft
+                }).animate({
+                    animStart: targetLeft
+                }, {
+                    duration: _.options.speed,
+                    easing: _.options.easing,
+                    step: function(now) {
+                        now = Math.ceil(now);
+                        if (_.options.vertical === false) {
+                            animProps[_.animType] = 'translate(' +
+                                now + 'px, 0px)';
+                            _.$slideTrack.css(animProps);
+                        } else {
+                            animProps[_.animType] = 'translate(0px,' +
+                                now + 'px)';
+                            _.$slideTrack.css(animProps);
+                        }
+                    },
+                    complete: function() {
+                        if (callback) {
+                            callback.call();
+                        }
+                    }
+                });
+
+            } else {
+
+                _.applyTransition();
+                targetLeft = Math.ceil(targetLeft);
+
+                if (_.options.vertical === false) {
+                    animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';
+                } else {
+                    animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';
+                }
+                _.$slideTrack.css(animProps);
+
+                if (callback) {
+                    setTimeout(function() {
+
+                        _.disableTransition();
+
+                        callback.call();
+                    }, _.options.speed);
+                }
+
+            }
+
+        }
+
+    };
+
+    Slick.prototype.getNavTarget = function() {
+
+        var _ = this,
+            asNavFor = _.options.asNavFor;
+
+        if ( asNavFor && asNavFor !== null ) {
+            asNavFor = $(asNavFor).not(_.$slider);
+        }
+
+        return asNavFor;
+
+    };
+
+    Slick.prototype.asNavFor = function(index) {
+
+        var _ = this,
+            asNavFor = _.getNavTarget();
+
+        if ( asNavFor !== null && typeof asNavFor === 'object' ) {
+            asNavFor.each(function() {
+                var target = $(this).slick('getSlick');
+                if(!target.unslicked) {
+                    target.slideHandler(index, true);
+                }
+            });
+        }
+
+    };
+
+    Slick.prototype.applyTransition = function(slide) {
+
+        var _ = this,
+            transition = {};
+
+        if (_.options.fade === false) {
+            transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;
+        } else {
+            transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;
+        }
+
+        if (_.options.fade === false) {
+            _.$slideTrack.css(transition);
+        } else {
+            _.$slides.eq(slide).css(transition);
+        }
+
+    };
+
+    Slick.prototype.autoPlay = function() {
+
+        var _ = this;
+
+        _.autoPlayClear();
+
+        if ( _.slideCount > _.options.slidesToShow ) {
+            _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );
+        }
+
+    };
+
+    Slick.prototype.autoPlayClear = function() {
+
+        var _ = this;
+
+        if (_.autoPlayTimer) {
+            clearInterval(_.autoPlayTimer);
+        }
+
+    };
+
+    Slick.prototype.autoPlayIterator = function() {
+
+        var _ = this,
+            slideTo = _.currentSlide + _.options.slidesToScroll;
+
+        if ( !_.paused && !_.interrupted && !_.focussed ) {
+
+            if ( _.options.infinite === false ) {
+
+                if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {
+                    _.direction = 0;
+                }
+
+                else if ( _.direction === 0 ) {
+
+                    slideTo = _.currentSlide - _.options.slidesToScroll;
+
+                    if ( _.currentSlide - 1 === 0 ) {
+                        _.direction = 1;
+                    }
+
+                }
+
+            }
+
+            _.slideHandler( slideTo );
+
+        }
+
+    };
+
+    Slick.prototype.buildArrows = function() {
+
+        var _ = this;
+
+        if (_.options.arrows === true ) {
+
+            _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');
+            _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');
+
+            if( _.slideCount > _.options.slidesToShow ) {
+
+                _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
+                _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
+
+                if (_.htmlExpr.test(_.options.prevArrow)) {
+                    _.$prevArrow.prependTo(_.options.appendArrows);
+                }
+
+                if (_.htmlExpr.test(_.options.nextArrow)) {
+                    _.$nextArrow.appendTo(_.options.appendArrows);
+                }
+
+                if (_.options.infinite !== true) {
+                    _.$prevArrow
+                        .addClass('slick-disabled')
+                        .attr('aria-disabled', 'true');
+                }
+
+            } else {
+
+                _.$prevArrow.add( _.$nextArrow )
+
+                    .addClass('slick-hidden')
+                    .attr({
+                        'aria-disabled': 'true',
+                        'tabindex': '-1'
+                    });
+
+            }
+
+        }
+
+    };
+
+    Slick.prototype.buildDots = function() {
+
+        var _ = this,
+            i, dot;
+
+        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
+
+            _.$slider.addClass('slick-dotted');
+
+            dot = $('<ul />').addClass(_.options.dotsClass);
+
+            for (i = 0; i <= _.getDotCount(); i += 1) {
+                dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));
+            }
+
+            _.$dots = dot.appendTo(_.options.appendDots);
+
+            _.$dots.find('li').first().addClass('slick-active').attr('aria-hidden', 'false');
+
+        }
+
+    };
+
+    Slick.prototype.buildOut = function() {
+
+        var _ = this;
+
+        _.$slides =
+            _.$slider
+                .children( _.options.slide + ':not(.slick-cloned)')
+                .addClass('slick-slide');
+
+        _.slideCount = _.$slides.length;
+
+        _.$slides.each(function(index, element) {
+            $(element)
+                .attr('data-slick-index', index)
+                .data('originalStyling', $(element).attr('style') || '');
+        });
+
+        _.$slider.addClass('slick-slider');
+
+        _.$slideTrack = (_.slideCount === 0) ?
+            $('<div class="slick-track"/>').appendTo(_.$slider) :
+            _.$slides.wrapAll('<div class="slick-track"/>').parent();
+
+        _.$list = _.$slideTrack.wrap(
+            '<div aria-live="polite" class="slick-list"/>').parent();
+        _.$slideTrack.css('opacity', 0);
+
+        if (_.options.centerMode === true || _.options.swipeToSlide === true) {
+            _.options.slidesToScroll = 1;
+        }
+
+        $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');
+
+        _.setupInfinite();
+
+        _.buildArrows();
+
+        _.buildDots();
+
+        _.updateDots();
+
+
+        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);
+
+        if (_.options.draggable === true) {
+            _.$list.addClass('draggable');
+        }
+
+    };
+
+    Slick.prototype.buildRows = function() {
+
+        var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;
+
+        newSlides = document.createDocumentFragment();
+        originalSlides = _.$slider.children();
+
+        if(_.options.rows > 1) {
+
+            slidesPerSection = _.options.slidesPerRow * _.options.rows;
+            numOfSlides = Math.ceil(
+                originalSlides.length / slidesPerSection
+            );
+
+            for(a = 0; a < numOfSlides; a++){
+                var slide = document.createElement('div');
+                for(b = 0; b < _.options.rows; b++) {
+                    var row = document.createElement('div');
+                    for(c = 0; c < _.options.slidesPerRow; c++) {
+                        var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));
+                        if (originalSlides.get(target)) {
+                            row.appendChild(originalSlides.get(target));
+                        }
+                    }
+                    slide.appendChild(row);
+                }
+                newSlides.appendChild(slide);
+            }
+
+            _.$slider.empty().append(newSlides);
+            _.$slider.children().children().children()
+                .css({
+                    'width':(100 / _.options.slidesPerRow) + '%',
+                    'display': 'inline-block'
+                });
+
+        }
+
+    };
+
+    Slick.prototype.checkResponsive = function(initial, forceUpdate) {
+
+        var _ = this,
+            breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;
+        var sliderWidth = _.$slider.width();
+        var windowWidth = window.innerWidth || $(window).width();
+
+        if (_.respondTo === 'window') {
+            respondToWidth = windowWidth;
+        } else if (_.respondTo === 'slider') {
+            respondToWidth = sliderWidth;
+        } else if (_.respondTo === 'min') {
+            respondToWidth = Math.min(windowWidth, sliderWidth);
+        }
+
+        if ( _.options.responsive &&
+            _.options.responsive.length &&
+            _.options.responsive !== null) {
+
+            targetBreakpoint = null;
+
+            for (breakpoint in _.breakpoints) {
+                if (_.breakpoints.hasOwnProperty(breakpoint)) {
+                    if (_.originalSettings.mobileFirst === false) {
+                        if (respondToWidth < _.breakpoints[breakpoint]) {
+                            targetBreakpoint = _.breakpoints[breakpoint];
+                        }
+                    } else {
+                        if (respondToWidth > _.breakpoints[breakpoint]) {
+                            targetBreakpoint = _.breakpoints[breakpoint];
+                        }
+                    }
+                }
+            }
+
+            if (targetBreakpoint !== null) {
+                if (_.activeBreakpoint !== null) {
+                    if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {
+                        _.activeBreakpoint =
+                            targetBreakpoint;
+                        if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
+                            _.unslick(targetBreakpoint);
+                        } else {
+                            _.options = $.extend({}, _.originalSettings,
+                                _.breakpointSettings[
+                                    targetBreakpoint]);
+                            if (initial === true) {
+                                _.currentSlide = _.options.initialSlide;
+                            }
+                            _.refresh(initial);
+                        }
+                        triggerBreakpoint = targetBreakpoint;
+                    }
+                } else {
+                    _.activeBreakpoint = targetBreakpoint;
+                    if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
+                        _.unslick(targetBreakpoint);
+                    } else {
+                        _.options = $.extend({}, _.originalSettings,
+                            _.breakpointSettings[
+                                targetBreakpoint]);
+                        if (initial === true) {
+                            _.currentSlide = _.options.initialSlide;
+                        }
+                        _.refresh(initial);
+                    }
+                    triggerBreakpoint = targetBreakpoint;
+                }
+            } else {
+                if (_.activeBreakpoint !== null) {
+                    _.activeBreakpoint = null;
+                    _.options = _.originalSettings;
+                    if (initial === true) {
+                        _.currentSlide = _.options.initialSlide;
+                    }
+                    _.refresh(initial);
+                    triggerBreakpoint = targetBreakpoint;
+                }
+            }
+
+            // only trigger breakpoints during an actual break. not on initialize.
+            if( !initial && triggerBreakpoint !== false ) {
+                _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);
+            }
+        }
+
+    };
+
+    Slick.prototype.changeSlide = function(event, dontAnimate) {
+
+        var _ = this,
+            $target = $(event.currentTarget),
+            indexOffset, slideOffset, unevenOffset;
+
+        // If target is a link, prevent default action.
+        if($target.is('a')) {
+            event.preventDefault();
+        }
+
+        // If target is not the <li> element (ie: a child), find the <li>.
+        if(!$target.is('li')) {
+            $target = $target.closest('li');
+        }
+
+        unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);
+        indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;
+
+        switch (event.data.message) {
+
+            case 'previous':
+                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;
+                if (_.slideCount > _.options.slidesToShow) {
+                    _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);
+                }
+                break;
+
+            case 'next':
+                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;
+                if (_.slideCount > _.options.slidesToShow) {
+                    _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);
+                }
+                break;
+
+            case 'index':
+                var index = event.data.index === 0 ? 0 :
+                    event.data.index || $target.index() * _.options.slidesToScroll;
+
+                _.slideHandler(_.checkNavigable(index), false, dontAnimate);
+                $target.children().trigger('focus');
+                break;
+
+            default:
+                return;
+        }
+
+    };
+
+    Slick.prototype.checkNavigable = function(index) {
+
+        var _ = this,
+            navigables, prevNavigable;
+
+        navigables = _.getNavigableIndexes();
+        prevNavigable = 0;
+        if (index > navigables[navigables.length - 1]) {
+            index = navigables[navigables.length - 1];
+        } else {
+            for (var n in navigables) {
+                if (index < navigables[n]) {
+                    index = prevNavigable;
+                    break;
+                }
+                prevNavigable = navigables[n];
+            }
+        }
+
+        return index;
+    };
+
+    Slick.prototype.cleanUpEvents = function() {
+
+        var _ = this;
+
+        if (_.options.dots && _.$dots !== null) {
+
+            $('li', _.$dots)
+                .off('click.slick', _.changeSlide)
+                .off('mouseenter.slick', $.proxy(_.interrupt, _, true))
+                .off('mouseleave.slick', $.proxy(_.interrupt, _, false));
+
+        }
+
+        _.$slider.off('focus.slick blur.slick');
+
+        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
+            _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);
+            _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);
+        }
+
+        _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);
+        _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);
+        _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);
+        _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);
+
+        _.$list.off('click.slick', _.clickHandler);
+
+        $(document).off(_.visibilityChange, _.visibility);
+
+        _.cleanUpSlideEvents();
+
+        if (_.options.accessibility === true) {
+            _.$list.off('keydown.slick', _.keyHandler);
+        }
+
+        if (_.options.focusOnSelect === true) {
+            $(_.$slideTrack).children().off('click.slick', _.selectHandler);
+        }
+
+        $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);
+
+        $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);
+
+        $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);
+
+        $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);
+        $(document).off('ready.slick.slick-' + _.instanceUid, _.setPosition);
+
+    };
+
+    Slick.prototype.cleanUpSlideEvents = function() {
+
+        var _ = this;
+
+        _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));
+        _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));
+
+    };
+
+    Slick.prototype.cleanUpRows = function() {
+
+        var _ = this, originalSlides;
+
+        if(_.options.rows > 1) {
+            originalSlides = _.$slides.children().children();
+            originalSlides.removeAttr('style');
+            _.$slider.empty().append(originalSlides);
+        }
+
+    };
+
+    Slick.prototype.clickHandler = function(event) {
+
+        var _ = this;
+
+        if (_.shouldClick === false) {
+            event.stopImmediatePropagation();
+            event.stopPropagation();
+            event.preventDefault();
+        }
+
+    };
+
+    Slick.prototype.destroy = function(refresh) {
+
+        var _ = this;
+
+        _.autoPlayClear();
+
+        _.touchObject = {};
+
+        _.cleanUpEvents();
+
+        $('.slick-cloned', _.$slider).detach();
+
+        if (_.$dots) {
+            _.$dots.remove();
+        }
+
+
+        if ( _.$prevArrow && _.$prevArrow.length ) {
+
+            _.$prevArrow
+                .removeClass('slick-disabled slick-arrow slick-hidden')
+                .removeAttr('aria-hidden aria-disabled tabindex')
+                .css('display','');
+
+            if ( _.htmlExpr.test( _.options.prevArrow )) {
+                _.$prevArrow.remove();
+            }
+        }
+
+        if ( _.$nextArrow && _.$nextArrow.length ) {
+
+            _.$nextArrow
+                .removeClass('slick-disabled slick-arrow slick-hidden')
+                .removeAttr('aria-hidden aria-disabled tabindex')
+                .css('display','');
+
+            if ( _.htmlExpr.test( _.options.nextArrow )) {
+                _.$nextArrow.remove();
+            }
+
+        }
+
+
+        if (_.$slides) {
+
+            _.$slides
+                .removeClass('slick-slide slick-active slick-center slick-visible slick-current')
+                .removeAttr('aria-hidden')
+                .removeAttr('data-slick-index')
+                .each(function(){
+                    $(this).attr('style', $(this).data('originalStyling'));
+                });
+
+            _.$slideTrack.children(this.options.slide).detach();
+
+            _.$slideTrack.detach();
+
+            _.$list.detach();
+
+            _.$slider.append(_.$slides);
+        }
+
+        _.cleanUpRows();
+
+        _.$slider.removeClass('slick-slider');
+        _.$slider.removeClass('slick-initialized');
+        _.$slider.removeClass('slick-dotted');
+
+        _.unslicked = true;
+
+        if(!refresh) {
+            _.$slider.trigger('destroy', [_]);
+        }
+
+    };
+
+    Slick.prototype.disableTransition = function(slide) {
+
+        var _ = this,
+            transition = {};
+
+        transition[_.transitionType] = '';
+
+        if (_.options.fade === false) {
+            _.$slideTrack.css(transition);
+        } else {
+            _.$slides.eq(slide).css(transition);
+        }
+
+    };
+
+    Slick.prototype.fadeSlide = function(slideIndex, callback) {
+
+        var _ = this;
+
+        if (_.cssTransitions === false) {
+
+            _.$slides.eq(slideIndex).css({
+                zIndex: _.options.zIndex
+            });
+
+            _.$slides.eq(slideIndex).animate({
+                opacity: 1
+            }, _.options.speed, _.options.easing, callback);
+
+        } else {
+
+            _.applyTransition(slideIndex);
+
+            _.$slides.eq(slideIndex).css({
+                opacity: 1,
+                zIndex: _.options.zIndex
+            });
+
+            if (callback) {
+                setTimeout(function() {
+
+                    _.disableTransition(slideIndex);
+
+                    callback.call();
+                }, _.options.speed);
+            }
+
+        }
+
+    };
+
+    Slick.prototype.fadeSlideOut = function(slideIndex) {
+
+        var _ = this;
+
+        if (_.cssTransitions === false) {
+
+            _.$slides.eq(slideIndex).animate({
+                opacity: 0,
+                zIndex: _.options.zIndex - 2
+            }, _.options.speed, _.options.easing);
+
+        } else {
+
+            _.applyTransition(slideIndex);
+
+            _.$slides.eq(slideIndex).css({
+                opacity: 0,
+                zIndex: _.options.zIndex - 2
+            });
+
+        }
+
+    };
+
+    Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {
+
+        var _ = this;
+
+        if (filter !== null) {
+
+            _.$slidesCache = _.$slides;
+
+            _.unload();
+
+            _.$slideTrack.children(this.options.slide).detach();
+
+            _.$slidesCache.filter(filter).appendTo(_.$slideTrack);
+
+            _.reinit();
+
+        }
+
+    };
+
+    Slick.prototype.focusHandler = function() {
+
+        var _ = this;
+
+        _.$slider
+            .off('focus.slick blur.slick')
+            .on('focus.slick blur.slick',
+                '*:not(.slick-arrow)', function(event) {
+
+            event.stopImmediatePropagation();
+            var $sf = $(this);
+
+            setTimeout(function() {
+
+                if( _.options.pauseOnFocus ) {
+                    _.focussed = $sf.is(':focus');
+                    _.autoPlay();
+                }
+
+            }, 0);
+
+        });
+    };
+
+    Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {
+
+        var _ = this;
+        return _.currentSlide;
+
+    };
+
+    Slick.prototype.getDotCount = function() {
+
+        var _ = this;
+
+        var breakPoint = 0;
+        var counter = 0;
+        var pagerQty = 0;
+
+        if (_.options.infinite === true) {
+            while (breakPoint < _.slideCount) {
+                ++pagerQty;
+                breakPoint = counter + _.options.slidesToScroll;
+                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
+            }
+        } else if (_.options.centerMode === true) {
+            pagerQty = _.slideCount;
+        } else if(!_.options.asNavFor) {
+            pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);
+        }else {
+            while (breakPoint < _.slideCount) {
+                ++pagerQty;
+                breakPoint = counter + _.options.slidesToScroll;
+                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
+            }
+        }
+
+        return pagerQty - 1;
+
+    };
+
+    Slick.prototype.getLeft = function(slideIndex) {
+
+        var _ = this,
+            targetLeft,
+            verticalHeight,
+            verticalOffset = 0,
+            targetSlide;
+
+        _.slideOffset = 0;
+        verticalHeight = _.$slides.first().outerHeight(true);
+
+        if (_.options.infinite === true) {
+            if (_.slideCount > _.options.slidesToShow) {
+                _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;
+                verticalOffset = (verticalHeight * _.options.slidesToShow) * -1;
+            }
+            if (_.slideCount % _.options.slidesToScroll !== 0) {
+                if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {
+                    if (slideIndex > _.slideCount) {
+                        _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;
+                        verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;
+                    } else {
+                        _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;
+                        verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;
+                    }
+                }
+            }
+        } else {
+            if (slideIndex + _.options.slidesToShow > _.slideCount) {
+                _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;
+                verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;
+            }
+        }
+
+        if (_.slideCount <= _.options.slidesToShow) {
+            _.slideOffset = 0;
+            verticalOffset = 0;
+        }
+
+        if (_.options.centerMode === true && _.options.infinite === true) {
+            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;
+        } else if (_.options.centerMode === true) {
+            _.slideOffset = 0;
+            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);
+        }
+
+        if (_.options.vertical === false) {
+            targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;
+        } else {
+            targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;
+        }
+
+        if (_.options.variableWidth === true) {
+
+            if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
+                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
+            } else {
+                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);
+            }
+
+            if (_.options.rtl === true) {
+                if (targetSlide[0]) {
+                    targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
+                } else {
+                    targetLeft =  0;
+                }
+            } else {
+                targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
+            }
+
+            if (_.options.centerMode === true) {
+                if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
+                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
+                } else {
+                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);
+                }
+
+                if (_.options.rtl === true) {
+                    if (targetSlide[0]) {
+                        targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
+                    } else {
+                        targetLeft =  0;
+                    }
+                } else {
+                    targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
+                }
+
+                targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;
+            }
+        }
+
+        return targetLeft;
+
+    };
+
+    Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {
+
+        var _ = this;
+
+        return _.options[option];
+
+    };
+
+    Slick.prototype.getNavigableIndexes = function() {
+
+        var _ = this,
+            breakPoint = 0,
+            counter = 0,
+            indexes = [],
+            max;
+
+        if (_.options.infinite === false) {
+            max = _.slideCount;
+        } else {
+            breakPoint = _.options.slidesToScroll * -1;
+            counter = _.options.slidesToScroll * -1;
+            max = _.slideCount * 2;
+        }
+
+        while (breakPoint < max) {
+            indexes.push(breakPoint);
+            breakPoint = counter + _.options.slidesToScroll;
+            counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
+        }
+
+        return indexes;
+
+    };
+
+    Slick.prototype.getSlick = function() {
+
+        return this;
+
+    };
+
+    Slick.prototype.getSlideCount = function() {
+
+        var _ = this,
+            slidesTraversed, swipedSlide, centerOffset;
+
+        centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;
+
+        if (_.options.swipeToSlide === true) {
+            _.$slideTrack.find('.slick-slide').each(function(index, slide) {
+                if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {
+                    swipedSlide = slide;
+                    return false;
+                }
+            });
+
+            slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;
+
+            return slidesTraversed;
+
+        } else {
+            return _.options.slidesToScroll;
+        }
+
+    };
+
+    Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {
+
+        var _ = this;
+
+        _.changeSlide({
+            data: {
+                message: 'index',
+                index: parseInt(slide)
+            }
+        }, dontAnimate);
+
+    };
+
+    Slick.prototype.init = function(creation) {
+
+        var _ = this;
+
+        if (!$(_.$slider).hasClass('slick-initialized')) {
+
+            $(_.$slider).addClass('slick-initialized');
+
+            _.buildRows();
+            _.buildOut();
+            _.setProps();
+            _.startLoad();
+            _.loadSlider();
+            _.initializeEvents();
+            _.updateArrows();
+            _.updateDots();
+            _.checkResponsive(true);
+            _.focusHandler();
+
+        }
+
+        if (creation) {
+            _.$slider.trigger('init', [_]);
+        }
+
+        if (_.options.accessibility === true) {
+            _.initADA();
+        }
+
+        if ( _.options.autoplay ) {
+
+            _.paused = false;
+            _.autoPlay();
+
+        }
+
+    };
+
+    Slick.prototype.initADA = function() {
+        var _ = this;
+        _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({
+            'aria-hidden': 'true',
+            'tabindex': '-1'
+        }).find('a, input, button, select').attr({
+            'tabindex': '-1'
+        });
+
+        _.$slideTrack.attr('role', 'listbox');
+
+        _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {
+            $(this).attr({
+                'role': 'option',
+                'aria-describedby': 'slick-slide' + _.instanceUid + i + ''
+            });
+        });
+
+        if (_.$dots !== null) {
+            _.$dots.attr('role', 'tablist').find('li').each(function(i) {
+                $(this).attr({
+                    'role': 'presentation',
+                    'aria-selected': 'false',
+                    'aria-controls': 'navigation' + _.instanceUid + i + '',
+                    'id': 'slick-slide' + _.instanceUid + i + ''
+                });
+            })
+                .first().attr('aria-selected', 'true').end()
+                .find('button').attr('role', 'button').end()
+                .closest('div').attr('role', 'toolbar');
+        }
+        _.activateADA();
+
+    };
+
+    Slick.prototype.initArrowEvents = function() {
+
+        var _ = this;
+
+        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
+            _.$prevArrow
+               .off('click.slick')
+               .on('click.slick', {
+                    message: 'previous'
+               }, _.changeSlide);
+            _.$nextArrow
+               .off('click.slick')
+               .on('click.slick', {
+                    message: 'next'
+               }, _.changeSlide);
+        }
+
+    };
+
+    Slick.prototype.initDotEvents = function() {
+
+        var _ = this;
+
+        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
+            $('li', _.$dots).on('click.slick', {
+                message: 'index'
+            }, _.changeSlide);
+        }
+
+        if ( _.options.dots === true && _.options.pauseOnDotsHover === true ) {
+
+            $('li', _.$dots)
+                .on('mouseenter.slick', $.proxy(_.interrupt, _, true))
+                .on('mouseleave.slick', $.proxy(_.interrupt, _, false));
+
+        }
+
+    };
+
+    Slick.prototype.initSlideEvents = function() {
+
+        var _ = this;
+
+        if ( _.options.pauseOnHover ) {
+
+            _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));
+            _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));
+
+        }
+
+    };
+
+    Slick.prototype.initializeEvents = function() {
+
+        var _ = this;
+
+        _.initArrowEvents();
+
+        _.initDotEvents();
+        _.initSlideEvents();
+
+        _.$list.on('touchstart.slick mousedown.slick', {
+            action: 'start'
+        }, _.swipeHandler);
+        _.$list.on('touchmove.slick mousemove.slick', {
+            action: 'move'
+        }, _.swipeHandler);
+        _.$list.on('touchend.slick mouseup.slick', {
+            action: 'end'
+        }, _.swipeHandler);
+        _.$list.on('touchcancel.slick mouseleave.slick', {
+            action: 'end'
+        }, _.swipeHandler);
+
+        _.$list.on('click.slick', _.clickHandler);
+
+        $(document).on(_.visibilityChange, $.proxy(_.visibility, _));
+
+        if (_.options.accessibility === true) {
+            _.$list.on('keydown.slick', _.keyHandler);
+        }
+
+        if (_.options.focusOnSelect === true) {
+            $(_.$slideTrack).children().on('click.slick', _.selectHandler);
+        }
+
+        $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));
+
+        $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));
+
+        $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);
+
+        $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);
+        $(document).on('ready.slick.slick-' + _.instanceUid, _.setPosition);
+
+    };
+
+    Slick.prototype.initUI = function() {
+
+        var _ = this;
+
+        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
+
+            _.$prevArrow.show();
+            _.$nextArrow.show();
+
+        }
+
+        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
+
+            _.$dots.show();
+
+        }
+
+    };
+
+    Slick.prototype.keyHandler = function(event) {
+
+        var _ = this;
+         //Dont slide if the cursor is inside the form fields and arrow keys are pressed
+        if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {
+            if (event.keyCode === 37 && _.options.accessibility === true) {
+                _.changeSlide({
+                    data: {
+                        message: _.options.rtl === true ? 'next' :  'previous'
+                    }
+                });
+            } else if (event.keyCode === 39 && _.options.accessibility === true) {
+                _.changeSlide({
+                    data: {
+                        message: _.options.rtl === true ? 'previous' : 'next'
+                    }
+                });
+            }
+        }
+
+    };
+
+    Slick.prototype.lazyLoad = function() {
+
+        var _ = this,
+            loadRange, cloneRange, rangeStart, rangeEnd;
+
+        function loadImages(imagesScope) {
+
+            $('img[data-lazy]', imagesScope).each(function() {
+
+                var image = $(this),
+                    imageSource = $(this).attr('data-lazy'),
+                    imageToLoad = document.createElement('img');
+
+                imageToLoad.onload = function() {
+
+                    image
+                        .animate({ opacity: 0 }, 100, function() {
+                            image
+                                .attr('src', imageSource)
+                                .animate({ opacity: 1 }, 200, function() {
+                                    image
+                                        .removeAttr('data-lazy')
+                                        .removeClass('slick-loading');
+                                });
+                            _.$slider.trigger('lazyLoaded', [_, image, imageSource]);
+                        });
+
+                };
+
+                imageToLoad.onerror = function() {
+
+                    image
+                        .removeAttr( 'data-lazy' )
+                        .removeClass( 'slick-loading' )
+                        .addClass( 'slick-lazyload-error' );
+
+                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);
+
+                };
+
+                imageToLoad.src = imageSource;
+
+            });
+
+        }
+
+        if (_.options.centerMode === true) {
+            if (_.options.infinite === true) {
+                rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);
+                rangeEnd = rangeStart + _.options.slidesToShow + 2;
+            } else {
+                rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));
+                rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;
+            }
+        } else {
+            rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;
+            rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);
+            if (_.options.fade === true) {
+                if (rangeStart > 0) rangeStart--;
+                if (rangeEnd <= _.slideCount) rangeEnd++;
+            }
+        }
+
+        loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);
+        loadImages(loadRange);
+
+        if (_.slideCount <= _.options.slidesToShow) {
+            cloneRange = _.$slider.find('.slick-slide');
+            loadImages(cloneRange);
+        } else
+        if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {
+            cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);
+            loadImages(cloneRange);
+        } else if (_.currentSlide === 0) {
+            cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);
+            loadImages(cloneRange);
+        }
+
+    };
+
+    Slick.prototype.loadSlider = function() {
+
+        var _ = this;
+
+        _.setPosition();
+
+        _.$slideTrack.css({
+            opacity: 1
+        });
+
+        _.$slider.removeClass('slick-loading');
+
+        _.initUI();
+
+        if (_.options.lazyLoad === 'progressive') {
+            _.progressiveLazyLoad();
+        }
+
+    };
+
+    Slick.prototype.next = Slick.prototype.slickNext = function() {
+
+        var _ = this;
+
+        _.changeSlide({
+            data: {
+                message: 'next'
+            }
+        });
+
+    };
+
+    Slick.prototype.orientationChange = function() {
+
+        var _ = this;
+
+        _.checkResponsive();
+        _.setPosition();
+
+    };
+
+    Slick.prototype.pause = Slick.prototype.slickPause = function() {
+
+        var _ = this;
+
+        _.autoPlayClear();
+        _.paused = true;
+
+    };
+
+    Slick.prototype.play = Slick.prototype.slickPlay = function() {
+
+        var _ = this;
+
+        _.autoPlay();
+        _.options.autoplay = true;
+        _.paused = false;
+        _.focussed = false;
+        _.interrupted = false;
+
+    };
+
+    Slick.prototype.postSlide = function(index) {
+
+        var _ = this;
+
+        if( !_.unslicked ) {
+
+            _.$slider.trigger('afterChange', [_, index]);
+
+            _.animating = false;
+
+            _.setPosition();
+
+            _.swipeLeft = null;
+
+            if ( _.options.autoplay ) {
+                _.autoPlay();
+            }
+
+            if (_.options.accessibility === true) {
+                _.initADA();
+            }
+
+        }
+
+    };
+
+    Slick.prototype.prev = Slick.prototype.slickPrev = function() {
+
+        var _ = this;
+
+        _.changeSlide({
+            data: {
+                message: 'previous'
+            }
+        });
+
+    };
+
+    Slick.prototype.preventDefault = function(event) {
+
+        event.preventDefault();
+
+    };
+
+    Slick.prototype.progressiveLazyLoad = function( tryCount ) {
+
+        tryCount = tryCount || 1;
+
+        var _ = this,
+            $imgsToLoad = $( 'img[data-lazy]', _.$slider ),
+            image,
+            imageSource,
+            imageToLoad;
+
+        if ( $imgsToLoad.length ) {
+
+            image = $imgsToLoad.first();
+            imageSource = image.attr('data-lazy');
+            imageToLoad = document.createElement('img');
+
+            imageToLoad.onload = function() {
+
+                image
+                    .attr( 'src', imageSource )
+                    .removeAttr('data-lazy')
+                    .removeClass('slick-loading');
+
+                if ( _.options.adaptiveHeight === true ) {
+                    _.setPosition();
+                }
+
+                _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);
+                _.progressiveLazyLoad();
+
+            };
+
+            imageToLoad.onerror = function() {
+
+                if ( tryCount < 3 ) {
+
+                    /**
+                     * try to load the image 3 times,
+                     * leave a slight delay so we don't get
+                     * servers blocking the request.
+                     */
+                    setTimeout( function() {
+                        _.progressiveLazyLoad( tryCount + 1 );
+                    }, 500 );
+
+                } else {
+
+                    image
+                        .removeAttr( 'data-lazy' )
+                        .removeClass( 'slick-loading' )
+                        .addClass( 'slick-lazyload-error' );
+
+                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);
+
+                    _.progressiveLazyLoad();
+
+                }
+
+            };
+
+            imageToLoad.src = imageSource;
+
+        } else {
+
+            _.$slider.trigger('allImagesLoaded', [ _ ]);
+
+        }
+
+    };
+
+    Slick.prototype.refresh = function( initializing ) {
+
+        var _ = this, currentSlide, lastVisibleIndex;
+
+        lastVisibleIndex = _.slideCount - _.options.slidesToShow;
+
+        // in non-infinite sliders, we don't want to go past the
+        // last visible index.
+        if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {
+            _.currentSlide = lastVisibleIndex;
+        }
+
+        // if less slides than to show, go to start.
+        if ( _.slideCount <= _.options.slidesToShow ) {
+            _.currentSlide = 0;
+
+        }
+
+        currentSlide = _.currentSlide;
+
+        _.destroy(true);
+
+        $.extend(_, _.initials, { currentSlide: currentSlide });
+
+        _.init();
+
+        if( !initializing ) {
+
+            _.changeSlide({
+                data: {
+                    message: 'index',
+                    index: currentSlide
+                }
+            }, false);
+
+        }
+
+    };
+
+    Slick.prototype.registerBreakpoints = function() {
+
+        var _ = this, breakpoint, currentBreakpoint, l,
+            responsiveSettings = _.options.responsive || null;
+
+        if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {
+
+            _.respondTo = _.options.respondTo || 'window';
+
+            for ( breakpoint in responsiveSettings ) {
+
+                l = _.breakpoints.length-1;
+                currentBreakpoint = responsiveSettings[breakpoint].breakpoint;
+
+                if (responsiveSettings.hasOwnProperty(breakpoint)) {
+
+                    // loop through the breakpoints and cut out any existing
+                    // ones with the same breakpoint number, we don't want dupes.
+                    while( l >= 0 ) {
+                        if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {
+                            _.breakpoints.splice(l,1);
+                        }
+                        l--;
+                    }
+
+                    _.breakpoints.push(currentBreakpoint);
+                    _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;
+
+                }
+
+            }
+
+            _.breakpoints.sort(function(a, b) {
+                return ( _.options.mobileFirst ) ? a-b : b-a;
+            });
+
+        }
+
+    };
+
+    Slick.prototype.reinit = function() {
+
+        var _ = this;
+
+        _.$slides =
+            _.$slideTrack
+                .children(_.options.slide)
+                .addClass('slick-slide');
+
+        _.slideCount = _.$slides.length;
+
+        if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {
+            _.currentSlide = _.currentSlide - _.options.slidesToScroll;
+        }
+
+        if (_.slideCount <= _.options.slidesToShow) {
+            _.currentSlide = 0;
+        }
+
+        _.registerBreakpoints();
+
+        _.setProps();
+        _.setupInfinite();
+        _.buildArrows();
+        _.updateArrows();
+        _.initArrowEvents();
+        _.buildDots();
+        _.updateDots();
+        _.initDotEvents();
+        _.cleanUpSlideEvents();
+        _.initSlideEvents();
+
+        _.checkResponsive(false, true);
+
+        if (_.options.focusOnSelect === true) {
+            $(_.$slideTrack).children().on('click.slick', _.selectHandler);
+        }
+
+        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);
+
+        _.setPosition();
+        _.focusHandler();
+
+        _.paused = !_.options.autoplay;
+        _.autoPlay();
+
+        _.$slider.trigger('reInit', [_]);
+
+    };
+
+    Slick.prototype.resize = function() {
+
+        var _ = this;
+
+        if ($(window).width() !== _.windowWidth) {
+            clearTimeout(_.windowDelay);
+            _.windowDelay = window.setTimeout(function() {
+                _.windowWidth = $(window).width();
+                _.checkResponsive();
+                if( !_.unslicked ) { _.setPosition(); }
+            }, 50);
+        }
+    };
+
+    Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {
+
+        var _ = this;
+
+        if (typeof(index) === 'boolean') {
+            removeBefore = index;
+            index = removeBefore === true ? 0 : _.slideCount - 1;
+        } else {
+            index = removeBefore === true ? --index : index;
+        }
+
+        if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {
+            return false;
+        }
+
+        _.unload();
+
+        if (removeAll === true) {
+            _.$slideTrack.children().remove();
+        } else {
+            _.$slideTrack.children(this.options.slide).eq(index).remove();
+        }
+
+        _.$slides = _.$slideTrack.children(this.options.slide);
+
+        _.$slideTrack.children(this.options.slide).detach();
+
+        _.$slideTrack.append(_.$slides);
+
+        _.$slidesCache = _.$slides;
+
+        _.reinit();
+
+    };
+
+    Slick.prototype.setCSS = function(position) {
+
+        var _ = this,
+            positionProps = {},
+            x, y;
+
+        if (_.options.rtl === true) {
+            position = -position;
+        }
+        x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';
+        y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';
+
+        positionProps[_.positionProp] = position;
+
+        if (_.transformsEnabled === false) {
+            _.$slideTrack.css(positionProps);
+        } else {
+            positionProps = {};
+            if (_.cssTransitions === false) {
+                positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';
+                _.$slideTrack.css(positionProps);
+            } else {
+                positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';
+                _.$slideTrack.css(positionProps);
+            }
+        }
+
+    };
+
+    Slick.prototype.setDimensions = function() {
+
+        var _ = this;
+
+        if (_.options.vertical === false) {
+            if (_.options.centerMode === true) {
+                _.$list.css({
+                    padding: ('0px ' + _.options.centerPadding)
+                });
+            }
+        } else {
+            _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);
+            if (_.options.centerMode === true) {
+                _.$list.css({
+                    padding: (_.options.centerPadding + ' 0px')
+                });
+            }
+        }
+
+        _.listWidth = _.$list.width();
+        _.listHeight = _.$list.height();
+
+
+        if (_.options.vertical === false && _.options.variableWidth === false) {
+            _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);
+            _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));
+
+        } else if (_.options.variableWidth === true) {
+            _.$slideTrack.width(5000 * _.slideCount);
+        } else {
+            _.slideWidth = Math.ceil(_.listWidth);
+            _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));
+        }
+
+        var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();
+        if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);
+
+    };
+
+    Slick.prototype.setFade = function() {
+
+        var _ = this,
+            targetLeft;
+
+        _.$slides.each(function(index, element) {
+            targetLeft = (_.slideWidth * index) * -1;
+            if (_.options.rtl === true) {
+                $(element).css({
+                    position: 'relative',
+                    right: targetLeft,
+                    top: 0,
+                    zIndex: _.options.zIndex - 2,
+                    opacity: 0
+                });
+            } else {
+                $(element).css({
+                    position: 'relative',
+                    left: targetLeft,
+                    top: 0,
+                    zIndex: _.options.zIndex - 2,
+                    opacity: 0
+                });
+            }
+        });
+
+        _.$slides.eq(_.currentSlide).css({
+            zIndex: _.options.zIndex - 1,
+            opacity: 1
+        });
+
+    };
+
+    Slick.prototype.setHeight = function() {
+
+        var _ = this;
+
+        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
+            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
+            _.$list.css('height', targetHeight);
+        }
+
+    };
+
+    Slick.prototype.setOption =
+    Slick.prototype.slickSetOption = function() {
+
+        /**
+         * accepts arguments in format of:
+         *
+         *  - for changing a single option's value:
+         *     .slick("setOption", option, value, refresh )
+         *
+         *  - for changing a set of responsive options:
+         *     .slick("setOption", 'responsive', [{}, ...], refresh )
+         *
+         *  - for updating multiple values at once (not responsive)
+         *     .slick("setOption", { 'option': value, ... }, refresh )
+         */
+
+        var _ = this, l, item, option, value, refresh = false, type;
+
+        if( $.type( arguments[0] ) === 'object' ) {
+
+            option =  arguments[0];
+            refresh = arguments[1];
+            type = 'multiple';
+
+        } else if ( $.type( arguments[0] ) === 'string' ) {
+
+            option =  arguments[0];
+            value = arguments[1];
+            refresh = arguments[2];
+
+            if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {
+
+                type = 'responsive';
+
+            } else if ( typeof arguments[1] !== 'undefined' ) {
+
+                type = 'single';
+
+            }
+
+        }
+
+        if ( type === 'single' ) {
+
+            _.options[option] = value;
+
+
+        } else if ( type === 'multiple' ) {
+
+            $.each( option , function( opt, val ) {
+
+                _.options[opt] = val;
+
+            });
+
+
+        } else if ( type === 'responsive' ) {
+
+            for ( item in value ) {
+
+                if( $.type( _.options.responsive ) !== 'array' ) {
+
+                    _.options.responsive = [ value[item] ];
+
+                } else {
+
+                    l = _.options.responsive.length-1;
+
+                    // loop through the responsive object and splice out duplicates.
+                    while( l >= 0 ) {
+
+                        if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {
+
+                            _.options.responsive.splice(l,1);
+
+                        }
+
+                        l--;
+
+                    }
+
+                    _.options.responsive.push( value[item] );
+
+                }
+
+            }
+
+        }
+
+        if ( refresh ) {
+
+            _.unload();
+            _.reinit();
+
+        }
+
+    };
+
+    Slick.prototype.setPosition = function() {
+
+        var _ = this;
+
+        _.setDimensions();
+
+        _.setHeight();
+
+        if (_.options.fade === false) {
+            _.setCSS(_.getLeft(_.currentSlide));
+        } else {
+            _.setFade();
+        }
+
+        _.$slider.trigger('setPosition', [_]);
+
+    };
+
+    Slick.prototype.setProps = function() {
+
+        var _ = this,
+            bodyStyle = document.body.style;
+
+        _.positionProp = _.options.vertical === true ? 'top' : 'left';
+
+        if (_.positionProp === 'top') {
+            _.$slider.addClass('slick-vertical');
+        } else {
+            _.$slider.removeClass('slick-vertical');
+        }
+
+        if (bodyStyle.WebkitTransition !== undefined ||
+            bodyStyle.MozTransition !== undefined ||
+            bodyStyle.msTransition !== undefined) {
+            if (_.options.useCSS === true) {
+                _.cssTransitions = true;
+            }
+        }
+
+        if ( _.options.fade ) {
+            if ( typeof _.options.zIndex === 'number' ) {
+                if( _.options.zIndex < 3 ) {
+                    _.options.zIndex = 3;
+                }
+            } else {
+                _.options.zIndex = _.defaults.zIndex;
+            }
+        }
+
+        if (bodyStyle.OTransform !== undefined) {
+            _.animType = 'OTransform';
+            _.transformType = '-o-transform';
+            _.transitionType = 'OTransition';
+            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
+        }
+        if (bodyStyle.MozTransform !== undefined) {
+            _.animType = 'MozTransform';
+            _.transformType = '-moz-transform';
+            _.transitionType = 'MozTransition';
+            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;
+        }
+        if (bodyStyle.webkitTransform !== undefined) {
+            _.animType = 'webkitTransform';
+            _.transformType = '-webkit-transform';
+            _.transitionType = 'webkitTransition';
+            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
+        }
+        if (bodyStyle.msTransform !== undefined) {
+            _.animType = 'msTransform';
+            _.transformType = '-ms-transform';
+            _.transitionType = 'msTransition';
+            if (bodyStyle.msTransform === undefined) _.animType = false;
+        }
+        if (bodyStyle.transform !== undefined && _.animType !== false) {
+            _.animType = 'transform';
+            _.transformType = 'transform';
+            _.transitionType = 'transition';
+        }
+        _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);
+    };
+
+
+    Slick.prototype.setSlideClasses = function(index) {
+
+        var _ = this,
+            centerOffset, allSlides, indexOffset, remainder;
+
+        allSlides = _.$slider
+            .find('.slick-slide')
+            .removeClass('slick-active slick-center slick-current')
+            .attr('aria-hidden', 'true');
+
+        _.$slides
+            .eq(index)
+            .addClass('slick-current');
+
+        if (_.options.centerMode === true) {
+
+            centerOffset = Math.floor(_.options.slidesToShow / 2);
+
+            if (_.options.infinite === true) {
+
+                if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {
+
+                    _.$slides
+                        .slice(index - centerOffset, index + centerOffset + 1)
+                        .addClass('slick-active')
+                        .attr('aria-hidden', 'false');
+
+                } else {
+
+                    indexOffset = _.options.slidesToShow + index;
+                    allSlides
+                        .slice(indexOffset - centerOffset + 1, indexOffset + centerOffset + 2)
+                        .addClass('slick-active')
+                        .attr('aria-hidden', 'false');
+
+                }
+
+                if (index === 0) {
+
+                    allSlides
+                        .eq(allSlides.length - 1 - _.options.slidesToShow)
+                        .addClass('slick-center');
+
+                } else if (index === _.slideCount - 1) {
+
+                    allSlides
+                        .eq(_.options.slidesToShow)
+                        .addClass('slick-center');
+
+                }
+
+            }
+
+            _.$slides
+                .eq(index)
+                .addClass('slick-center');
+
+        } else {
+
+            if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {
+
+                _.$slides
+                    .slice(index, index + _.options.slidesToShow)
+                    .addClass('slick-active')
+                    .attr('aria-hidden', 'false');
+
+            } else if (allSlides.length <= _.options.slidesToShow) {
+
+                allSlides
+                    .addClass('slick-active')
+                    .attr('aria-hidden', 'false');
+
+            } else {
+
+                remainder = _.slideCount % _.options.slidesToShow;
+                indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;
+
+                if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {
+
+                    allSlides
+                        .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)
+                        .addClass('slick-active')
+                        .attr('aria-hidden', 'false');
+
+                } else {
+
+                    allSlides
+                        .slice(indexOffset, indexOffset + _.options.slidesToShow)
+                        .addClass('slick-active')
+                        .attr('aria-hidden', 'false');
+
+                }
+
+            }
+
+        }
+
+        if (_.options.lazyLoad === 'ondemand') {
+            _.lazyLoad();
+        }
+
+    };
+
+    Slick.prototype.setupInfinite = function() {
+
+        var _ = this,
+            i, slideIndex, infiniteCount;
+
+        if (_.options.fade === true) {
+            _.options.centerMode = false;
+        }
+
+        if (_.options.infinite === true && _.options.fade === false) {
+
+            slideIndex = null;
+
+            if (_.slideCount > _.options.slidesToShow) {
+
+                if (_.options.centerMode === true) {
+                    infiniteCount = _.options.slidesToShow + 1;
+                } else {
+                    infiniteCount = _.options.slidesToShow;
+                }
+
+                for (i = _.slideCount; i > (_.slideCount -
+                        infiniteCount); i -= 1) {
+                    slideIndex = i - 1;
+                    $(_.$slides[slideIndex]).clone(true).attr('id', '')
+                        .attr('data-slick-index', slideIndex - _.slideCount)
+                        .prependTo(_.$slideTrack).addClass('slick-cloned');
+                }
+                for (i = 0; i < infiniteCount; i += 1) {
+                    slideIndex = i;
+                    $(_.$slides[slideIndex]).clone(true).attr('id', '')
+                        .attr('data-slick-index', slideIndex + _.slideCount)
+                        .appendTo(_.$slideTrack).addClass('slick-cloned');
+                }
+                _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {
+                    $(this).attr('id', '');
+                });
+
+            }
+
+        }
+
+    };
+
+    Slick.prototype.interrupt = function( toggle ) {
+
+        var _ = this;
+
+        if( !toggle ) {
+            _.autoPlay();
+        }
+        _.interrupted = toggle;
+
+    };
+
+    Slick.prototype.selectHandler = function(event) {
+
+        var _ = this;
+
+        var targetElement =
+            $(event.target).is('.slick-slide') ?
+                $(event.target) :
+                $(event.target).parents('.slick-slide');
+
+        var index = parseInt(targetElement.attr('data-slick-index'));
+
+        if (!index) index = 0;
+
+        if (_.slideCount <= _.options.slidesToShow) {
+
+            _.setSlideClasses(index);
+            _.asNavFor(index);
+            return;
+
+        }
+
+        _.slideHandler(index);
+
+    };
+
+    Slick.prototype.slideHandler = function(index, sync, dontAnimate) {
+
+        var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,
+            _ = this, navTarget;
+
+        sync = sync || false;
+
+        if (_.animating === true && _.options.waitForAnimate === true) {
+            return;
+        }
+
+        if (_.options.fade === true && _.currentSlide === index) {
+            return;
+        }
+
+        if (_.slideCount <= _.options.slidesToShow) {
+            return;
+        }
+
+        if (sync === false) {
+            _.asNavFor(index);
+        }
+
+        targetSlide = index;
+        targetLeft = _.getLeft(targetSlide);
+        slideLeft = _.getLeft(_.currentSlide);
+
+        _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;
+
+        if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {
+            if (_.options.fade === false) {
+                targetSlide = _.currentSlide;
+                if (dontAnimate !== true) {
+                    _.animateSlide(slideLeft, function() {
+                        _.postSlide(targetSlide);
+                    });
+                } else {
+                    _.postSlide(targetSlide);
+                }
+            }
+            return;
+        } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {
+            if (_.options.fade === false) {
+                targetSlide = _.currentSlide;
+                if (dontAnimate !== true) {
+                    _.animateSlide(slideLeft, function() {
+                        _.postSlide(targetSlide);
+                    });
+                } else {
+                    _.postSlide(targetSlide);
+                }
+            }
+            return;
+        }
+
+        if ( _.options.autoplay ) {
+            clearInterval(_.autoPlayTimer);
+        }
+
+        if (targetSlide < 0) {
+            if (_.slideCount % _.options.slidesToScroll !== 0) {
+                animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);
+            } else {
+                animSlide = _.slideCount + targetSlide;
+            }
+        } else if (targetSlide >= _.slideCount) {
+            if (_.slideCount % _.options.slidesToScroll !== 0) {
+                animSlide = 0;
+            } else {
+                animSlide = targetSlide - _.slideCount;
+            }
+        } else {
+            animSlide = targetSlide;
+        }
+
+        _.animating = true;
+
+        _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);
+
+        oldSlide = _.currentSlide;
+        _.currentSlide = animSlide;
+
+        _.setSlideClasses(_.currentSlide);
+
+        if ( _.options.asNavFor ) {
+
+            navTarget = _.getNavTarget();
+            navTarget = navTarget.slick('getSlick');
+
+            if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {
+                navTarget.setSlideClasses(_.currentSlide);
+            }
+
+        }
+
+        _.updateDots();
+        _.updateArrows();
+
+        if (_.options.fade === true) {
+            if (dontAnimate !== true) {
+
+                _.fadeSlideOut(oldSlide);
+
+                _.fadeSlide(animSlide, function() {
+                    _.postSlide(animSlide);
+                });
+
+            } else {
+                _.postSlide(animSlide);
+            }
+            _.animateHeight();
+            return;
+        }
+
+        if (dontAnimate !== true) {
+            _.animateSlide(targetLeft, function() {
+                _.postSlide(animSlide);
+            });
+        } else {
+            _.postSlide(animSlide);
+        }
+
+    };
+
+    Slick.prototype.startLoad = function() {
+
+        var _ = this;
+
+        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
+
+            _.$prevArrow.hide();
+            _.$nextArrow.hide();
+
+        }
+
+        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
+
+            _.$dots.hide();
+
+        }
+
+        _.$slider.addClass('slick-loading');
+
+    };
+
+    Slick.prototype.swipeDirection = function() {
+
+        var xDist, yDist, r, swipeAngle, _ = this;
+
+        xDist = _.touchObject.startX - _.touchObject.curX;
+        yDist = _.touchObject.startY - _.touchObject.curY;
+        r = Math.atan2(yDist, xDist);
+
+        swipeAngle = Math.round(r * 180 / Math.PI);
+        if (swipeAngle < 0) {
+            swipeAngle = 360 - Math.abs(swipeAngle);
+        }
+
+        if ((swipeAngle <= 45) && (swipeAngle >= 0)) {
+            return (_.options.rtl === false ? 'left' : 'right');
+        }
+        if ((swipeAngle <= 360) && (swipeAngle >= 315)) {
+            return (_.options.rtl === false ? 'left' : 'right');
+        }
+        if ((swipeAngle >= 135) && (swipeAngle <= 225)) {
+            return (_.options.rtl === false ? 'right' : 'left');
+        }
+        if (_.options.verticalSwiping === true) {
+            if ((swipeAngle >= 35) && (swipeAngle <= 135)) {
+                return 'down';
+            } else {
+                return 'up';
+            }
+        }
+
+        return 'vertical';
+
+    };
+
+    Slick.prototype.swipeEnd = function(event) {
+
+        var _ = this,
+            slideCount,
+            direction;
+
+        _.dragging = false;
+        _.interrupted = false;
+        _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;
+
+        if ( _.touchObject.curX === undefined ) {
+            return false;
+        }
+
+        if ( _.touchObject.edgeHit === true ) {
+            _.$slider.trigger('edge', [_, _.swipeDirection() ]);
+        }
+
+        if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {
+
+            direction = _.swipeDirection();
+
+            switch ( direction ) {
+
+                case 'left':
+                case 'down':
+
+                    slideCount =
+                        _.options.swipeToSlide ?
+                            _.checkNavigable( _.currentSlide + _.getSlideCount() ) :
+                            _.currentSlide + _.getSlideCount();
+
+                    _.currentDirection = 0;
+
+                    break;
+
+                case 'right':
+                case 'up':
+
+                    slideCount =
+                        _.options.swipeToSlide ?
+                            _.checkNavigable( _.currentSlide - _.getSlideCount() ) :
+                            _.currentSlide - _.getSlideCount();
+
+                    _.currentDirection = 1;
+
+                    break;
+
+                default:
+
+
+            }
+
+            if( direction != 'vertical' ) {
+
+                _.slideHandler( slideCount );
+                _.touchObject = {};
+                _.$slider.trigger('swipe', [_, direction ]);
+
+            }
+
+        } else {
+
+            if ( _.touchObject.startX !== _.touchObject.curX ) {
+
+                _.slideHandler( _.currentSlide );
+                _.touchObject = {};
+
+            }
+
+        }
+
+    };
+
+    Slick.prototype.swipeHandler = function(event) {
+
+        var _ = this;
+
+        if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {
+            return;
+        } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {
+            return;
+        }
+
+        _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?
+            event.originalEvent.touches.length : 1;
+
+        _.touchObject.minSwipe = _.listWidth / _.options
+            .touchThreshold;
+
+        if (_.options.verticalSwiping === true) {
+            _.touchObject.minSwipe = _.listHeight / _.options
+                .touchThreshold;
+        }
+
+        switch (event.data.action) {
+
+            case 'start':
+                _.swipeStart(event);
+                break;
+
+            case 'move':
+                _.swipeMove(event);
+                break;
+
+            case 'end':
+                _.swipeEnd(event);
+                break;
+
+        }
+
+    };
+
+    Slick.prototype.swipeMove = function(event) {
+
+        var _ = this,
+            edgeWasHit = false,
+            curLeft, swipeDirection, swipeLength, positionOffset, touches;
+
+        touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;
+
+        if (!_.dragging || touches && touches.length !== 1) {
+            return false;
+        }
+
+        curLeft = _.getLeft(_.currentSlide);
+
+        _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;
+        _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;
+
+        _.touchObject.swipeLength = Math.round(Math.sqrt(
+            Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));
+
+        if (_.options.verticalSwiping === true) {
+            _.touchObject.swipeLength = Math.round(Math.sqrt(
+                Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));
+        }
+
+        swipeDirection = _.swipeDirection();
+
+        if (swipeDirection === 'vertical') {
+            return;
+        }
+
+        if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {
+            event.preventDefault();
+        }
+
+        positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);
+        if (_.options.verticalSwiping === true) {
+            positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;
+        }
+
+
+        swipeLength = _.touchObject.swipeLength;
+
+        _.touchObject.edgeHit = false;
+
+        if (_.options.infinite === false) {
+            if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {
+                swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;
+                _.touchObject.edgeHit = true;
+            }
+        }
+
+        if (_.options.vertical === false) {
+            _.swipeLeft = curLeft + swipeLength * positionOffset;
+        } else {
+            _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;
+        }
+        if (_.options.verticalSwiping === true) {
+            _.swipeLeft = curLeft + swipeLength * positionOffset;
+        }
+
+        if (_.options.fade === true || _.options.touchMove === false) {
+            return false;
+        }
+
+        if (_.animating === true) {
+            _.swipeLeft = null;
+            return false;
+        }
+
+        _.setCSS(_.swipeLeft);
+
+    };
+
+    Slick.prototype.swipeStart = function(event) {
+
+        var _ = this,
+            touches;
+
+        _.interrupted = true;
+
+        if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {
+            _.touchObject = {};
+            return false;
+        }
+
+        if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {
+            touches = event.originalEvent.touches[0];
+        }
+
+        _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;
+        _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;
+
+        _.dragging = true;
+
+    };
+
+    Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {
+
+        var _ = this;
+
+        if (_.$slidesCache !== null) {
+
+            _.unload();
+
+            _.$slideTrack.children(this.options.slide).detach();
+
+            _.$slidesCache.appendTo(_.$slideTrack);
+
+            _.reinit();
+
+        }
+
+    };
+
+    Slick.prototype.unload = function() {
+
+        var _ = this;
+
+        $('.slick-cloned', _.$slider).remove();
+
+        if (_.$dots) {
+            _.$dots.remove();
+        }
+
+        if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {
+            _.$prevArrow.remove();
+        }
+
+        if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {
+            _.$nextArrow.remove();
+        }
+
+        _.$slides
+            .removeClass('slick-slide slick-active slick-visible slick-current')
+            .attr('aria-hidden', 'true')
+            .css('width', '');
+
+    };
+
+    Slick.prototype.unslick = function(fromBreakpoint) {
+
+        var _ = this;
+        _.$slider.trigger('unslick', [_, fromBreakpoint]);
+        _.destroy();
+
+    };
+
+    Slick.prototype.updateArrows = function() {
+
+        var _ = this,
+            centerOffset;
+
+        centerOffset = Math.floor(_.options.slidesToShow / 2);
+
+        if ( _.options.arrows === true &&
+            _.slideCount > _.options.slidesToShow &&
+            !_.options.infinite ) {
+
+            _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
+            _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
+
+            if (_.currentSlide === 0) {
+
+                _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
+                _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
+
+            } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {
+
+                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
+                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
+
+            } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {
+
+                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
+                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
+
+            }
+
+        }
+
+    };
+
+    Slick.prototype.updateDots = function() {
+
+        var _ = this;
+
+        if (_.$dots !== null) {
+
+            _.$dots
+                .find('li')
+                .removeClass('slick-active')
+                .attr('aria-hidden', 'true');
+
+            _.$dots
+                .find('li')
+                .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))
+                .addClass('slick-active')
+                .attr('aria-hidden', 'false');
+
+        }
+
+    };
+
+    Slick.prototype.visibility = function() {
+
+        var _ = this;
+
+        if ( _.options.autoplay ) {
+
+            if ( document[_.hidden] ) {
+
+                _.interrupted = true;
+
+            } else {
+
+                _.interrupted = false;
+
+            }
+
+        }
+
+    };
+
+    $.fn.slick = function() {
+        var _ = this,
+            opt = arguments[0],
+            args = Array.prototype.slice.call(arguments, 1),
+            l = _.length,
+            i,
+            ret;
+        for (i = 0; i < l; i++) {
+            if (typeof opt == 'object' || typeof opt == 'undefined')
+                _[i].slick = new Slick(_[i], opt);
+            else
+                ret = _[i].slick[opt].apply(_[i].slick, args);
+            if (typeof ret != 'undefined') return ret;
+        }
+        return _;
+    };
+
+}));
diff --git a/jquery/slick/slick.less b/jquery/slick/slick.less
new file mode 100644
index 0000000..2fa0fb2
--- /dev/null
+++ b/jquery/slick/slick.less
@@ -0,0 +1,98 @@
+/* Slider */
+
+.slick-slider {
+    position: relative;
+    display: block;
+    box-sizing: border-box;
+    -webkit-touch-callout: none;
+    -webkit-user-select: none;
+    -khtml-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    -ms-touch-action: pan-y;
+    touch-action: pan-y;
+    -webkit-tap-highlight-color: transparent;
+}
+.slick-list {
+    position: relative;
+    overflow: hidden;
+    display: block;
+    margin: 0;
+    padding: 0;
+
+    &:focus {
+        outline: none;
+    }
+
+    &.dragging {
+        cursor: pointer;
+        cursor: hand;
+    }
+}
+.slick-slider .slick-track,
+.slick-slider .slick-list {
+    -webkit-transform: translate3d(0, 0, 0);
+    -moz-transform: translate3d(0, 0, 0);
+    -ms-transform: translate3d(0, 0, 0);
+    -o-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+}
+
+.slick-track {
+    position: relative;
+    left: 0;
+    top: 0;
+    display: block;
+
+    &:before,
+    &:after {
+        content: "";
+        display: table;
+    }
+
+    &:after {
+        clear: both;
+    }
+
+    .slick-loading & {
+        visibility: hidden;
+    }
+}
+.slick-slide {
+    float: left;
+    height: 100%;
+    min-height: 1px;
+    [dir="rtl"] & {
+        float: right;
+    }
+    img {
+        display: block;
+    }
+    &.slick-loading img {
+        display: none;
+    }
+
+    display: none;
+
+    &.dragging img {
+        pointer-events: none;
+    }
+
+    .slick-initialized & {
+        display: block;
+    }
+
+    .slick-loading & {
+        visibility: hidden;
+    }
+
+    .slick-vertical & {
+        display: block;
+        height: auto;
+        border: 1px solid transparent;
+    }
+}
+.slick-arrow.slick-hidden {
+    display: none;
+}
diff --git a/jquery/slick/slick.min.js b/jquery/slick/slick.min.js
new file mode 100644
index 0000000..88a8a6b
--- /dev/null
+++ b/jquery/slick/slick.min.js
@@ -0,0 +1,18 @@
+/*
+     _ _      _       _
+ ___| (_) ___| | __  (_)___
+/ __| | |/ __| |/ /  | / __|
+\__ \ | | (__|   < _ | \__ \
+|___/_|_|\___|_|\_(_)/ |___/
+                   |__/
+
+ Version: 1.6.0
+  Author: Ken Wheeler
+ Website: http://kenwheeler.github.io
+    Docs: http://kenwheeler.github.io/slick
+    Repo: http://github.com/kenwheeler/slick
+  Issues: http://github.com/kenwheeler/slick/issues
+
+ */
+!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"undefined"!=typeof exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){"use strict";var b=window.Slick||{};b=function(){function c(c,d){var f,e=this;e.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:a(c),appendDots:a(c),arrows:!0,asNavFor:null,prevArrow:'<button type="button" data-role="none" class="slick-prev" aria-label="Previous" tabindex="0" role="button">Previous</button>',nextArrow:'<button type="button" data-role="none" class="slick-next" aria-label="Next" tabindex="0" role="button">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(b,c){return a('<button type="button" data-role="none" role="button" tabindex="0" />').text(c+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",mobileFirst:!1,pauseOnHover:!0,pauseOnFocus:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0,zIndex:1e3},e.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,$list:null,touchObject:{},transformsEnabled:!1,unslicked:!1},a.extend(e,e.initials),e.activeBreakpoint=null,e.animType=null,e.animProp=null,e.breakpoints=[],e.breakpointSettings=[],e.cssTransitions=!1,e.focussed=!1,e.interrupted=!1,e.hidden="hidden",e.paused=!0,e.positionProp=null,e.respondTo=null,e.rowCount=1,e.shouldClick=!0,e.$slider=a(c),e.$slidesCache=null,e.transformType=null,e.transitionType=null,e.visibilityChange="visibilitychange",e.windowWidth=0,e.windowTimer=null,f=a(c).data("slick")||{},e.options=a.extend({},e.defaults,d,f),e.currentSlide=e.options.initialSlide,e.originalSettings=e.options,"undefined"!=typeof document.mozHidden?(e.hidden="mozHidden",e.visibilityChange="mozvisibilitychange"):"undefined"!=typeof document.webkitHidden&&(e.hidden="webkitHidden",e.visibilityChange="webkitvisibilitychange"),e.autoPlay=a.proxy(e.autoPlay,e),e.autoPlayClear=a.proxy(e.autoPlayClear,e),e.autoPlayIterator=a.proxy(e.autoPlayIterator,e),e.changeSlide=a.proxy(e.changeSlide,e),e.clickHandler=a.proxy(e.clickHandler,e),e.selectHandler=a.proxy(e.selectHandler,e),e.setPosition=a.proxy(e.setPosition,e),e.swipeHandler=a.proxy(e.swipeHandler,e),e.dragHandler=a.proxy(e.dragHandler,e),e.keyHandler=a.proxy(e.keyHandler,e),e.instanceUid=b++,e.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,e.registerBreakpoints(),e.init(!0)}var b=0;return c}(),b.prototype.activateADA=function(){var a=this;a.$slideTrack.find(".slick-active").attr({"aria-hidden":"false"}).find("a, input, button, select").attr({tabindex:"0"})},b.prototype.addSlide=b.prototype.slickAdd=function(b,c,d){var e=this;if("boolean"==typeof c)d=c,c=null;else if(0>c||c>=e.slideCount)return!1;e.unload(),"number"==typeof c?0===c&&0===e.$slides.length?a(b).appendTo(e.$slideTrack):d?a(b).insertBefore(e.$slides.eq(c)):a(b).insertAfter(e.$slides.eq(c)):d===!0?a(b).prependTo(e.$slideTrack):a(b).appendTo(e.$slideTrack),e.$slides=e.$slideTrack.children(this.options.slide),e.$slideTrack.children(this.options.slide).detach(),e.$slideTrack.append(e.$slides),e.$slides.each(function(b,c){a(c).attr("data-slick-index",b)}),e.$slidesCache=e.$slides,e.reinit()},b.prototype.animateHeight=function(){var a=this;if(1===a.options.slidesToShow&&a.options.adaptiveHeight===!0&&a.options.vertical===!1){var b=a.$slides.eq(a.currentSlide).outerHeight(!0);a.$list.animate({height:b},a.options.speed)}},b.prototype.animateSlide=function(b,c){var d={},e=this;e.animateHeight(),e.options.rtl===!0&&e.options.vertical===!1&&(b=-b),e.transformsEnabled===!1?e.options.vertical===!1?e.$slideTrack.animate({left:b},e.options.speed,e.options.easing,c):e.$slideTrack.animate({top:b},e.options.speed,e.options.easing,c):e.cssTransitions===!1?(e.options.rtl===!0&&(e.currentLeft=-e.currentLeft),a({animStart:e.currentLeft}).animate({animStart:b},{duration:e.options.speed,easing:e.options.easing,step:function(a){a=Math.ceil(a),e.options.vertical===!1?(d[e.animType]="translate("+a+"px, 0px)",e.$slideTrack.css(d)):(d[e.animType]="translate(0px,"+a+"px)",e.$slideTrack.css(d))},complete:function(){c&&c.call()}})):(e.applyTransition(),b=Math.ceil(b),e.options.vertical===!1?d[e.animType]="translate3d("+b+"px, 0px, 0px)":d[e.animType]="translate3d(0px,"+b+"px, 0px)",e.$slideTrack.css(d),c&&setTimeout(function(){e.disableTransition(),c.call()},e.options.speed))},b.prototype.getNavTarget=function(){var b=this,c=b.options.asNavFor;return c&&null!==c&&(c=a(c).not(b.$slider)),c},b.prototype.asNavFor=function(b){var c=this,d=c.getNavTarget();null!==d&&"object"==typeof d&&d.each(function(){var c=a(this).slick("getSlick");c.unslicked||c.slideHandler(b,!0)})},b.prototype.applyTransition=function(a){var b=this,c={};b.options.fade===!1?c[b.transitionType]=b.transformType+" "+b.options.speed+"ms "+b.options.cssEase:c[b.transitionType]="opacity "+b.options.speed+"ms "+b.options.cssEase,b.options.fade===!1?b.$slideTrack.css(c):b.$slides.eq(a).css(c)},b.prototype.autoPlay=function(){var a=this;a.autoPlayClear(),a.slideCount>a.options.slidesToShow&&(a.autoPlayTimer=setInterval(a.autoPlayIterator,a.options.autoplaySpeed))},b.prototype.autoPlayClear=function(){var a=this;a.autoPlayTimer&&clearInterval(a.autoPlayTimer)},b.prototype.autoPlayIterator=function(){var a=this,b=a.currentSlide+a.options.slidesToScroll;a.paused||a.interrupted||a.focussed||(a.options.infinite===!1&&(1===a.direction&&a.currentSlide+1===a.slideCount-1?a.direction=0:0===a.direction&&(b=a.currentSlide-a.options.slidesToScroll,a.currentSlide-1===0&&(a.direction=1))),a.slideHandler(b))},b.prototype.buildArrows=function(){var b=this;b.options.arrows===!0&&(b.$prevArrow=a(b.options.prevArrow).addClass("slick-arrow"),b.$nextArrow=a(b.options.nextArrow).addClass("slick-arrow"),b.slideCount>b.options.slidesToShow?(b.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),b.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),b.htmlExpr.test(b.options.prevArrow)&&b.$prevArrow.prependTo(b.options.appendArrows),b.htmlExpr.test(b.options.nextArrow)&&b.$nextArrow.appendTo(b.options.appendArrows),b.options.infinite!==!0&&b.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true")):b.$prevArrow.add(b.$nextArrow).addClass("slick-hidden").attr({"aria-disabled":"true",tabindex:"-1"}))},b.prototype.buildDots=function(){var c,d,b=this;if(b.options.dots===!0&&b.slideCount>b.options.slidesToShow){for(b.$slider.addClass("slick-dotted"),d=a("<ul />").addClass(b.options.dotsClass),c=0;c<=b.getDotCount();c+=1)d.append(a("<li />").append(b.options.customPaging.call(this,b,c)));b.$dots=d.appendTo(b.options.appendDots),b.$dots.find("li").first().addClass("slick-active").attr("aria-hidden","false")}},b.prototype.buildOut=function(){var b=this;b.$slides=b.$slider.children(b.options.slide+":not(.slick-cloned)").addClass("slick-slide"),b.slideCount=b.$slides.length,b.$slides.each(function(b,c){a(c).attr("data-slick-index",b).data("originalStyling",a(c).attr("style")||"")}),b.$slider.addClass("slick-slider"),b.$slideTrack=0===b.slideCount?a('<div class="slick-track"/>').appendTo(b.$slider):b.$slides.wrapAll('<div class="slick-track"/>').parent(),b.$list=b.$slideTrack.wrap('<div aria-live="polite" class="slick-list"/>').parent(),b.$slideTrack.css("opacity",0),(b.options.centerMode===!0||b.options.swipeToSlide===!0)&&(b.options.slidesToScroll=1),a("img[data-lazy]",b.$slider).not("[src]").addClass("slick-loading"),b.setupInfinite(),b.buildArrows(),b.buildDots(),b.updateDots(),b.setSlideClasses("number"==typeof b.currentSlide?b.currentSlide:0),b.options.draggable===!0&&b.$list.addClass("draggable")},b.prototype.buildRows=function(){var b,c,d,e,f,g,h,a=this;if(e=document.createDocumentFragment(),g=a.$slider.children(),a.options.rows>1){for(h=a.options.slidesPerRow*a.options.rows,f=Math.ceil(g.length/h),b=0;f>b;b++){var i=document.createElement("div");for(c=0;c<a.options.rows;c++){var j=document.createElement("div");for(d=0;d<a.options.slidesPerRow;d++){var k=b*h+(c*a.options.slidesPerRow+d);g.get(k)&&j.appendChild(g.get(k))}i.appendChild(j)}e.appendChild(i)}a.$slider.empty().append(e),a.$slider.children().children().children().css({width:100/a.options.slidesPerRow+"%",display:"inline-block"})}},b.prototype.checkResponsive=function(b,c){var e,f,g,d=this,h=!1,i=d.$slider.width(),j=window.innerWidth||a(window).width();if("window"===d.respondTo?g=j:"slider"===d.respondTo?g=i:"min"===d.respondTo&&(g=Math.min(j,i)),d.options.responsive&&d.options.responsive.length&&null!==d.options.responsive){f=null;for(e in d.breakpoints)d.breakpoints.hasOwnProperty(e)&&(d.originalSettings.mobileFirst===!1?g<d.breakpoints[e]&&(f=d.breakpoints[e]):g>d.breakpoints[e]&&(f=d.breakpoints[e]));null!==f?null!==d.activeBreakpoint?(f!==d.activeBreakpoint||c)&&(d.activeBreakpoint=f,"unslick"===d.breakpointSettings[f]?d.unslick(f):(d.options=a.extend({},d.originalSettings,d.breakpointSettings[f]),b===!0&&(d.currentSlide=d.options.initialSlide),d.refresh(b)),h=f):(d.activeBreakpoint=f,"unslick"===d.breakpointSettings[f]?d.unslick(f):(d.options=a.extend({},d.originalSettings,d.breakpointSettings[f]),b===!0&&(d.currentSlide=d.options.initialSlide),d.refresh(b)),h=f):null!==d.activeBreakpoint&&(d.activeBreakpoint=null,d.options=d.originalSettings,b===!0&&(d.currentSlide=d.options.initialSlide),d.refresh(b),h=f),b||h===!1||d.$slider.trigger("breakpoint",[d,h])}},b.prototype.changeSlide=function(b,c){var f,g,h,d=this,e=a(b.currentTarget);switch(e.is("a")&&b.preventDefault(),e.is("li")||(e=e.closest("li")),h=d.slideCount%d.options.slidesToScroll!==0,f=h?0:(d.slideCount-d.currentSlide)%d.options.slidesToScroll,b.data.message){case"previous":g=0===f?d.options.slidesToScroll:d.options.slidesToShow-f,d.slideCount>d.options.slidesToShow&&d.slideHandler(d.currentSlide-g,!1,c);break;case"next":g=0===f?d.options.slidesToScroll:f,d.slideCount>d.options.slidesToShow&&d.slideHandler(d.currentSlide+g,!1,c);break;case"index":var i=0===b.data.index?0:b.data.index||e.index()*d.options.slidesToScroll;d.slideHandler(d.checkNavigable(i),!1,c),e.children().trigger("focus");break;default:return}},b.prototype.checkNavigable=function(a){var c,d,b=this;if(c=b.getNavigableIndexes(),d=0,a>c[c.length-1])a=c[c.length-1];else for(var e in c){if(a<c[e]){a=d;break}d=c[e]}return a},b.prototype.cleanUpEvents=function(){var b=this;b.options.dots&&null!==b.$dots&&a("li",b.$dots).off("click.slick",b.changeSlide).off("mouseenter.slick",a.proxy(b.interrupt,b,!0)).off("mouseleave.slick",a.proxy(b.interrupt,b,!1)),b.$slider.off("focus.slick blur.slick"),b.options.arrows===!0&&b.slideCount>b.options.slidesToShow&&(b.$prevArrow&&b.$prevArrow.off("click.slick",b.changeSlide),b.$nextArrow&&b.$nextArrow.off("click.slick",b.changeSlide)),b.$list.off("touchstart.slick mousedown.slick",b.swipeHandler),b.$list.off("touchmove.slick mousemove.slick",b.swipeHandler),b.$list.off("touchend.slick mouseup.slick",b.swipeHandler),b.$list.off("touchcancel.slick mouseleave.slick",b.swipeHandler),b.$list.off("click.slick",b.clickHandler),a(document).off(b.visibilityChange,b.visibility),b.cleanUpSlideEvents(),b.options.accessibility===!0&&b.$list.off("keydown.slick",b.keyHandler),b.options.focusOnSelect===!0&&a(b.$slideTrack).children().off("click.slick",b.selectHandler),a(window).off("orientationchange.slick.slick-"+b.instanceUid,b.orientationChange),a(window).off("resize.slick.slick-"+b.instanceUid,b.resize),a("[draggable!=true]",b.$slideTrack).off("dragstart",b.preventDefault),a(window).off("load.slick.slick-"+b.instanceUid,b.setPosition),a(document).off("ready.slick.slick-"+b.instanceUid,b.setPosition)},b.prototype.cleanUpSlideEvents=function(){var b=this;b.$list.off("mouseenter.slick",a.proxy(b.interrupt,b,!0)),b.$list.off("mouseleave.slick",a.proxy(b.interrupt,b,!1))},b.prototype.cleanUpRows=function(){var b,a=this;a.options.rows>1&&(b=a.$slides.children().children(),b.removeAttr("style"),a.$slider.empty().append(b))},b.prototype.clickHandler=function(a){var b=this;b.shouldClick===!1&&(a.stopImmediatePropagation(),a.stopPropagation(),a.preventDefault())},b.prototype.destroy=function(b){var c=this;c.autoPlayClear(),c.touchObject={},c.cleanUpEvents(),a(".slick-cloned",c.$slider).detach(),c.$dots&&c.$dots.remove(),c.$prevArrow&&c.$prevArrow.length&&(c.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),c.htmlExpr.test(c.options.prevArrow)&&c.$prevArrow.remove()),c.$nextArrow&&c.$nextArrow.length&&(c.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),c.htmlExpr.test(c.options.nextArrow)&&c.$nextArrow.remove()),c.$slides&&(c.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function(){a(this).attr("style",a(this).data("originalStyling"))}),c.$slideTrack.children(this.options.slide).detach(),c.$slideTrack.detach(),c.$list.detach(),c.$slider.append(c.$slides)),c.cleanUpRows(),c.$slider.removeClass("slick-slider"),c.$slider.removeClass("slick-initialized"),c.$slider.removeClass("slick-dotted"),c.unslicked=!0,b||c.$slider.trigger("destroy",[c])},b.prototype.disableTransition=function(a){var b=this,c={};c[b.transitionType]="",b.options.fade===!1?b.$slideTrack.css(c):b.$slides.eq(a).css(c)},b.prototype.fadeSlide=function(a,b){var c=this;c.cssTransitions===!1?(c.$slides.eq(a).css({zIndex:c.options.zIndex}),c.$slides.eq(a).animate({opacity:1},c.options.speed,c.options.easing,b)):(c.applyTransition(a),c.$slides.eq(a).css({opacity:1,zIndex:c.options.zIndex}),b&&setTimeout(function(){c.disableTransition(a),b.call()},c.options.speed))},b.prototype.fadeSlideOut=function(a){var b=this;b.cssTransitions===!1?b.$slides.eq(a).animate({opacity:0,zIndex:b.options.zIndex-2},b.options.speed,b.options.easing):(b.applyTransition(a),b.$slides.eq(a).css({opacity:0,zIndex:b.options.zIndex-2}))},b.prototype.filterSlides=b.prototype.slickFilter=function(a){var b=this;null!==a&&(b.$slidesCache=b.$slides,b.unload(),b.$slideTrack.children(this.options.slide).detach(),b.$slidesCache.filter(a).appendTo(b.$slideTrack),b.reinit())},b.prototype.focusHandler=function(){var b=this;b.$slider.off("focus.slick blur.slick").on("focus.slick blur.slick","*:not(.slick-arrow)",function(c){c.stopImmediatePropagation();var d=a(this);setTimeout(function(){b.options.pauseOnFocus&&(b.focussed=d.is(":focus"),b.autoPlay())},0)})},b.prototype.getCurrent=b.prototype.slickCurrentSlide=function(){var a=this;return a.currentSlide},b.prototype.getDotCount=function(){var a=this,b=0,c=0,d=0;if(a.options.infinite===!0)for(;b<a.slideCount;)++d,b=c+a.options.slidesToScroll,c+=a.options.slidesToScroll<=a.options.slidesToShow?a.options.slidesToScroll:a.options.slidesToShow;else if(a.options.centerMode===!0)d=a.slideCount;else if(a.options.asNavFor)for(;b<a.slideCount;)++d,b=c+a.options.slidesToScroll,c+=a.options.slidesToScroll<=a.options.slidesToShow?a.options.slidesToScroll:a.options.slidesToShow;else d=1+Math.ceil((a.slideCount-a.options.slidesToShow)/a.options.slidesToScroll);return d-1},b.prototype.getLeft=function(a){var c,d,f,b=this,e=0;return b.slideOffset=0,d=b.$slides.first().outerHeight(!0),b.options.infinite===!0?(b.slideCount>b.options.slidesToShow&&(b.slideOffset=b.slideWidth*b.options.slidesToShow*-1,e=d*b.options.slidesToShow*-1),b.slideCount%b.options.slidesToScroll!==0&&a+b.options.slidesToScroll>b.slideCount&&b.slideCount>b.options.slidesToShow&&(a>b.slideCount?(b.slideOffset=(b.options.slidesToShow-(a-b.slideCount))*b.slideWidth*-1,e=(b.options.slidesToShow-(a-b.slideCount))*d*-1):(b.slideOffset=b.slideCount%b.options.slidesToScroll*b.slideWidth*-1,e=b.slideCount%b.options.slidesToScroll*d*-1))):a+b.options.slidesToShow>b.slideCount&&(b.slideOffset=(a+b.options.slidesToShow-b.slideCount)*b.slideWidth,e=(a+b.options.slidesToShow-b.slideCount)*d),b.slideCount<=b.options.slidesToShow&&(b.slideOffset=0,e=0),b.options.centerMode===!0&&b.options.infinite===!0?b.slideOffset+=b.slideWidth*Math.floor(b.options.slidesToShow/2)-b.slideWidth:b.options.centerMode===!0&&(b.slideOffset=0,b.slideOffset+=b.slideWidth*Math.floor(b.options.slidesToShow/2)),c=b.options.vertical===!1?a*b.slideWidth*-1+b.slideOffset:a*d*-1+e,b.options.variableWidth===!0&&(f=b.slideCount<=b.options.slidesToShow||b.options.infinite===!1?b.$slideTrack.children(".slick-slide").eq(a):b.$slideTrack.children(".slick-slide").eq(a+b.options.slidesToShow),c=b.options.rtl===!0?f[0]?-1*(b.$slideTrack.width()-f[0].offsetLeft-f.width()):0:f[0]?-1*f[0].offsetLeft:0,b.options.centerMode===!0&&(f=b.slideCount<=b.options.slidesToShow||b.options.infinite===!1?b.$slideTrack.children(".slick-slide").eq(a):b.$slideTrack.children(".slick-slide").eq(a+b.options.slidesToShow+1),c=b.options.rtl===!0?f[0]?-1*(b.$slideTrack.width()-f[0].offsetLeft-f.width()):0:f[0]?-1*f[0].offsetLeft:0,c+=(b.$list.width()-f.outerWidth())/2)),c},b.prototype.getOption=b.prototype.slickGetOption=function(a){var b=this;return b.options[a]},b.prototype.getNavigableIndexes=function(){var e,a=this,b=0,c=0,d=[];for(a.options.infinite===!1?e=a.slideCount:(b=-1*a.options.slidesToScroll,c=-1*a.options.slidesToScroll,e=2*a.slideCount);e>b;)d.push(b),b=c+a.options.slidesToScroll,c+=a.options.slidesToScroll<=a.options.slidesToShow?a.options.slidesToScroll:a.options.slidesToShow;return d},b.prototype.getSlick=function(){return this},b.prototype.getSlideCount=function(){var c,d,e,b=this;return e=b.options.centerMode===!0?b.slideWidth*Math.floor(b.options.slidesToShow/2):0,b.options.swipeToSlide===!0?(b.$slideTrack.find(".slick-slide").each(function(c,f){return f.offsetLeft-e+a(f).outerWidth()/2>-1*b.swipeLeft?(d=f,!1):void 0}),c=Math.abs(a(d).attr("data-slick-index")-b.currentSlide)||1):b.options.slidesToScroll},b.prototype.goTo=b.prototype.slickGoTo=function(a,b){var c=this;c.changeSlide({data:{message:"index",index:parseInt(a)}},b)},b.prototype.init=function(b){var c=this;a(c.$slider).hasClass("slick-initialized")||(a(c.$slider).addClass("slick-initialized"),c.buildRows(),c.buildOut(),c.setProps(),c.startLoad(),c.loadSlider(),c.initializeEvents(),c.updateArrows(),c.updateDots(),c.checkResponsive(!0),c.focusHandler()),b&&c.$slider.trigger("init",[c]),c.options.accessibility===!0&&c.initADA(),c.options.autoplay&&(c.paused=!1,c.autoPlay())},b.prototype.initADA=function(){var b=this;b.$slides.add(b.$slideTrack.find(".slick-cloned")).attr({"aria-hidden":"true",tabindex:"-1"}).find("a, input, button, select").attr({tabindex:"-1"}),b.$slideTrack.attr("role","listbox"),b.$slides.not(b.$slideTrack.find(".slick-cloned")).each(function(c){a(this).attr({role:"option","aria-describedby":"slick-slide"+b.instanceUid+c})}),null!==b.$dots&&b.$dots.attr("role","tablist").find("li").each(function(c){a(this).attr({role:"presentation","aria-selected":"false","aria-controls":"navigation"+b.instanceUid+c,id:"slick-slide"+b.instanceUid+c})}).first().attr("aria-selected","true").end().find("button").attr("role","button").end().closest("div").attr("role","toolbar"),b.activateADA()},b.prototype.initArrowEvents=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.off("click.slick").on("click.slick",{message:"previous"},a.changeSlide),a.$nextArrow.off("click.slick").on("click.slick",{message:"next"},a.changeSlide))},b.prototype.initDotEvents=function(){var b=this;b.options.dots===!0&&b.slideCount>b.options.slidesToShow&&a("li",b.$dots).on("click.slick",{message:"index"},b.changeSlide),b.options.dots===!0&&b.options.pauseOnDotsHover===!0&&a("li",b.$dots).on("mouseenter.slick",a.proxy(b.interrupt,b,!0)).on("mouseleave.slick",a.proxy(b.interrupt,b,!1))},b.prototype.initSlideEvents=function(){var b=this;b.options.pauseOnHover&&(b.$list.on("mouseenter.slick",a.proxy(b.interrupt,b,!0)),b.$list.on("mouseleave.slick",a.proxy(b.interrupt,b,!1)))},b.prototype.initializeEvents=function(){var b=this;b.initArrowEvents(),b.initDotEvents(),b.initSlideEvents(),b.$list.on("touchstart.slick mousedown.slick",{action:"start"},b.swipeHandler),b.$list.on("touchmove.slick mousemove.slick",{action:"move"},b.swipeHandler),b.$list.on("touchend.slick mouseup.slick",{action:"end"},b.swipeHandler),b.$list.on("touchcancel.slick mouseleave.slick",{action:"end"},b.swipeHandler),b.$list.on("click.slick",b.clickHandler),a(document).on(b.visibilityChange,a.proxy(b.visibility,b)),b.options.accessibility===!0&&b.$list.on("keydown.slick",b.keyHandler),b.options.focusOnSelect===!0&&a(b.$slideTrack).children().on("click.slick",b.selectHandler),a(window).on("orientationchange.slick.slick-"+b.instanceUid,a.proxy(b.orientationChange,b)),a(window).on("resize.slick.slick-"+b.instanceUid,a.proxy(b.resize,b)),a("[draggable!=true]",b.$slideTrack).on("dragstart",b.preventDefault),a(window).on("load.slick.slick-"+b.instanceUid,b.setPosition),a(document).on("ready.slick.slick-"+b.instanceUid,b.setPosition)},b.prototype.initUI=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.show(),a.$nextArrow.show()),a.options.dots===!0&&a.slideCount>a.options.slidesToShow&&a.$dots.show()},b.prototype.keyHandler=function(a){var b=this;a.target.tagName.match("TEXTAREA|INPUT|SELECT")||(37===a.keyCode&&b.options.accessibility===!0?b.changeSlide({data:{message:b.options.rtl===!0?"next":"previous"}}):39===a.keyCode&&b.options.accessibility===!0&&b.changeSlide({data:{message:b.options.rtl===!0?"previous":"next"}}))},b.prototype.lazyLoad=function(){function g(c){a("img[data-lazy]",c).each(function(){var c=a(this),d=a(this).attr("data-lazy"),e=document.createElement("img");e.onload=function(){c.animate({opacity:0},100,function(){c.attr("src",d).animate({opacity:1},200,function(){c.removeAttr("data-lazy").removeClass("slick-loading")}),b.$slider.trigger("lazyLoaded",[b,c,d])})},e.onerror=function(){c.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),b.$slider.trigger("lazyLoadError",[b,c,d])},e.src=d})}var c,d,e,f,b=this;b.options.centerMode===!0?b.options.infinite===!0?(e=b.currentSlide+(b.options.slidesToShow/2+1),f=e+b.options.slidesToShow+2):(e=Math.max(0,b.currentSlide-(b.options.slidesToShow/2+1)),f=2+(b.options.slidesToShow/2+1)+b.currentSlide):(e=b.options.infinite?b.options.slidesToShow+b.currentSlide:b.currentSlide,f=Math.ceil(e+b.options.slidesToShow),b.options.fade===!0&&(e>0&&e--,f<=b.slideCount&&f++)),c=b.$slider.find(".slick-slide").slice(e,f),g(c),b.slideCount<=b.options.slidesToShow?(d=b.$slider.find(".slick-slide"),g(d)):b.currentSlide>=b.slideCount-b.options.slidesToShow?(d=b.$slider.find(".slick-cloned").slice(0,b.options.slidesToShow),g(d)):0===b.currentSlide&&(d=b.$slider.find(".slick-cloned").slice(-1*b.options.slidesToShow),g(d))},b.prototype.loadSlider=function(){var a=this;a.setPosition(),a.$slideTrack.css({opacity:1}),a.$slider.removeClass("slick-loading"),a.initUI(),"progressive"===a.options.lazyLoad&&a.progressiveLazyLoad()},b.prototype.next=b.prototype.slickNext=function(){var a=this;a.changeSlide({data:{message:"next"}})},b.prototype.orientationChange=function(){var a=this;a.checkResponsive(),a.setPosition()},b.prototype.pause=b.prototype.slickPause=function(){var a=this;a.autoPlayClear(),a.paused=!0},b.prototype.play=b.prototype.slickPlay=function(){var a=this;a.autoPlay(),a.options.autoplay=!0,a.paused=!1,a.focussed=!1,a.interrupted=!1},b.prototype.postSlide=function(a){var b=this;b.unslicked||(b.$slider.trigger("afterChange",[b,a]),b.animating=!1,b.setPosition(),b.swipeLeft=null,b.options.autoplay&&b.autoPlay(),b.options.accessibility===!0&&b.initADA())},b.prototype.prev=b.prototype.slickPrev=function(){var a=this;a.changeSlide({data:{message:"previous"}})},b.prototype.preventDefault=function(a){a.preventDefault()},b.prototype.progressiveLazyLoad=function(b){b=b||1;var e,f,g,c=this,d=a("img[data-lazy]",c.$slider);d.length?(e=d.first(),f=e.attr("data-lazy"),g=document.createElement("img"),g.onload=function(){e.attr("src",f).removeAttr("data-lazy").removeClass("slick-loading"),c.options.adaptiveHeight===!0&&c.setPosition(),c.$slider.trigger("lazyLoaded",[c,e,f]),c.progressiveLazyLoad()},g.onerror=function(){3>b?setTimeout(function(){c.progressiveLazyLoad(b+1)},500):(e.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),c.$slider.trigger("lazyLoadError",[c,e,f]),c.progressiveLazyLoad())},g.src=f):c.$slider.trigger("allImagesLoaded",[c])},b.prototype.refresh=function(b){var d,e,c=this;e=c.slideCount-c.options.slidesToShow,!c.options.infinite&&c.currentSlide>e&&(c.currentSlide=e),c.slideCount<=c.options.slidesToShow&&(c.currentSlide=0),d=c.currentSlide,c.destroy(!0),a.extend(c,c.initials,{currentSlide:d}),c.init(),b||c.changeSlide({data:{message:"index",index:d}},!1)},b.prototype.registerBreakpoints=function(){var c,d,e,b=this,f=b.options.responsive||null;if("array"===a.type(f)&&f.length){b.respondTo=b.options.respondTo||"window";for(c in f)if(e=b.breakpoints.length-1,d=f[c].breakpoint,f.hasOwnProperty(c)){for(;e>=0;)b.breakpoints[e]&&b.breakpoints[e]===d&&b.breakpoints.splice(e,1),e--;b.breakpoints.push(d),b.breakpointSettings[d]=f[c].settings}b.breakpoints.sort(function(a,c){return b.options.mobileFirst?a-c:c-a})}},b.prototype.reinit=function(){var b=this;b.$slides=b.$slideTrack.children(b.options.slide).addClass("slick-slide"),b.slideCount=b.$slides.length,b.currentSlide>=b.slideCount&&0!==b.currentSlide&&(b.currentSlide=b.currentSlide-b.options.slidesToScroll),b.slideCount<=b.options.slidesToShow&&(b.currentSlide=0),b.registerBreakpoints(),b.setProps(),b.setupInfinite(),b.buildArrows(),b.updateArrows(),b.initArrowEvents(),b.buildDots(),b.updateDots(),b.initDotEvents(),b.cleanUpSlideEvents(),b.initSlideEvents(),b.checkResponsive(!1,!0),b.options.focusOnSelect===!0&&a(b.$slideTrack).children().on("click.slick",b.selectHandler),b.setSlideClasses("number"==typeof b.currentSlide?b.currentSlide:0),b.setPosition(),b.focusHandler(),b.paused=!b.options.autoplay,b.autoPlay(),b.$slider.trigger("reInit",[b])},b.prototype.resize=function(){var b=this;a(window).width()!==b.windowWidth&&(clearTimeout(b.windowDelay),b.windowDelay=window.setTimeout(function(){b.windowWidth=a(window).width(),b.checkResponsive(),b.unslicked||b.setPosition()},50))},b.prototype.removeSlide=b.prototype.slickRemove=function(a,b,c){var d=this;return"boolean"==typeof a?(b=a,a=b===!0?0:d.slideCount-1):a=b===!0?--a:a,d.slideCount<1||0>a||a>d.slideCount-1?!1:(d.unload(),c===!0?d.$slideTrack.children().remove():d.$slideTrack.children(this.options.slide).eq(a).remove(),d.$slides=d.$slideTrack.children(this.options.slide),d.$slideTrack.children(this.options.slide).detach(),d.$slideTrack.append(d.$slides),d.$slidesCache=d.$slides,void d.reinit())},b.prototype.setCSS=function(a){var d,e,b=this,c={};b.options.rtl===!0&&(a=-a),d="left"==b.positionProp?Math.ceil(a)+"px":"0px",e="top"==b.positionProp?Math.ceil(a)+"px":"0px",c[b.positionProp]=a,b.transformsEnabled===!1?b.$slideTrack.css(c):(c={},b.cssTransitions===!1?(c[b.animType]="translate("+d+", "+e+")",b.$slideTrack.css(c)):(c[b.animType]="translate3d("+d+", "+e+", 0px)",b.$slideTrack.css(c)))},b.prototype.setDimensions=function(){var a=this;a.options.vertical===!1?a.options.centerMode===!0&&a.$list.css({padding:"0px "+a.options.centerPadding}):(a.$list.height(a.$slides.first().outerHeight(!0)*a.options.slidesToShow),a.options.centerMode===!0&&a.$list.css({padding:a.options.centerPadding+" 0px"})),a.listWidth=a.$list.width(),a.listHeight=a.$list.height(),a.options.vertical===!1&&a.options.variableWidth===!1?(a.slideWidth=Math.ceil(a.listWidth/a.options.slidesToShow),a.$slideTrack.width(Math.ceil(a.slideWidth*a.$slideTrack.children(".slick-slide").length))):a.options.variableWidth===!0?a.$slideTrack.width(5e3*a.slideCount):(a.slideWidth=Math.ceil(a.listWidth),a.$slideTrack.height(Math.ceil(a.$slides.first().outerHeight(!0)*a.$slideTrack.children(".slick-slide").length)));var b=a.$slides.first().outerWidth(!0)-a.$slides.first().width();a.options.variableWidth===!1&&a.$slideTrack.children(".slick-slide").width(a.slideWidth-b)},b.prototype.setFade=function(){var c,b=this;b.$slides.each(function(d,e){c=b.slideWidth*d*-1,b.options.rtl===!0?a(e).css({position:"relative",right:c,top:0,zIndex:b.options.zIndex-2,opacity:0}):a(e).css({position:"relative",left:c,top:0,zIndex:b.options.zIndex-2,opacity:0})}),b.$slides.eq(b.currentSlide).css({zIndex:b.options.zIndex-1,opacity:1})},b.prototype.setHeight=function(){var a=this;if(1===a.options.slidesToShow&&a.options.adaptiveHeight===!0&&a.options.vertical===!1){var b=a.$slides.eq(a.currentSlide).outerHeight(!0);a.$list.css("height",b)}},b.prototype.setOption=b.prototype.slickSetOption=function(){var c,d,e,f,h,b=this,g=!1;if("object"===a.type(arguments[0])?(e=arguments[0],g=arguments[1],h="multiple"):"string"===a.type(arguments[0])&&(e=arguments[0],f=arguments[1],g=arguments[2],"responsive"===arguments[0]&&"array"===a.type(arguments[1])?h="responsive":"undefined"!=typeof arguments[1]&&(h="single")),"single"===h)b.options[e]=f;else if("multiple"===h)a.each(e,function(a,c){b.options[a]=c});else if("responsive"===h)for(d in f)if("array"!==a.type(b.options.responsive))b.options.responsive=[f[d]];else{for(c=b.options.responsive.length-1;c>=0;)b.options.responsive[c].breakpoint===f[d].breakpoint&&b.options.responsive.splice(c,1),c--;b.options.responsive.push(f[d])}g&&(b.unload(),b.reinit())},b.prototype.setPosition=function(){var a=this;a.setDimensions(),a.setHeight(),a.options.fade===!1?a.setCSS(a.getLeft(a.currentSlide)):a.setFade(),a.$slider.trigger("setPosition",[a])},b.prototype.setProps=function(){var a=this,b=document.body.style;a.positionProp=a.options.vertical===!0?"top":"left","top"===a.positionProp?a.$slider.addClass("slick-vertical"):a.$slider.removeClass("slick-vertical"),(void 0!==b.WebkitTransition||void 0!==b.MozTransition||void 0!==b.msTransition)&&a.options.useCSS===!0&&(a.cssTransitions=!0),a.options.fade&&("number"==typeof a.options.zIndex?a.options.zIndex<3&&(a.options.zIndex=3):a.options.zIndex=a.defaults.zIndex),void 0!==b.OTransform&&(a.animType="OTransform",a.transformType="-o-transform",a.transitionType="OTransition",void 0===b.perspectiveProperty&&void 0===b.webkitPerspective&&(a.animType=!1)),void 0!==b.MozTransform&&(a.animType="MozTransform",a.transformType="-moz-transform",a.transitionType="MozTransition",void 0===b.perspectiveProperty&&void 0===b.MozPerspective&&(a.animType=!1)),void 0!==b.webkitTransform&&(a.animType="webkitTransform",a.transformType="-webkit-transform",a.transitionType="webkitTransition",void 0===b.perspectiveProperty&&void 0===b.webkitPerspective&&(a.animType=!1)),void 0!==b.msTransform&&(a.animType="msTransform",a.transformType="-ms-transform",a.transitionType="msTransition",void 0===b.msTransform&&(a.animType=!1)),void 0!==b.transform&&a.animType!==!1&&(a.animType="transform",a.transformType="transform",a.transitionType="transition"),a.transformsEnabled=a.options.useTransform&&null!==a.animType&&a.animType!==!1},b.prototype.setSlideClasses=function(a){var c,d,e,f,b=this;d=b.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden","true"),b.$slides.eq(a).addClass("slick-current"),b.options.centerMode===!0?(c=Math.floor(b.options.slidesToShow/2),b.options.infinite===!0&&(a>=c&&a<=b.slideCount-1-c?b.$slides.slice(a-c,a+c+1).addClass("slick-active").attr("aria-hidden","false"):(e=b.options.slidesToShow+a,
+d.slice(e-c+1,e+c+2).addClass("slick-active").attr("aria-hidden","false")),0===a?d.eq(d.length-1-b.options.slidesToShow).addClass("slick-center"):a===b.slideCount-1&&d.eq(b.options.slidesToShow).addClass("slick-center")),b.$slides.eq(a).addClass("slick-center")):a>=0&&a<=b.slideCount-b.options.slidesToShow?b.$slides.slice(a,a+b.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"):d.length<=b.options.slidesToShow?d.addClass("slick-active").attr("aria-hidden","false"):(f=b.slideCount%b.options.slidesToShow,e=b.options.infinite===!0?b.options.slidesToShow+a:a,b.options.slidesToShow==b.options.slidesToScroll&&b.slideCount-a<b.options.slidesToShow?d.slice(e-(b.options.slidesToShow-f),e+f).addClass("slick-active").attr("aria-hidden","false"):d.slice(e,e+b.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false")),"ondemand"===b.options.lazyLoad&&b.lazyLoad()},b.prototype.setupInfinite=function(){var c,d,e,b=this;if(b.options.fade===!0&&(b.options.centerMode=!1),b.options.infinite===!0&&b.options.fade===!1&&(d=null,b.slideCount>b.options.slidesToShow)){for(e=b.options.centerMode===!0?b.options.slidesToShow+1:b.options.slidesToShow,c=b.slideCount;c>b.slideCount-e;c-=1)d=c-1,a(b.$slides[d]).clone(!0).attr("id","").attr("data-slick-index",d-b.slideCount).prependTo(b.$slideTrack).addClass("slick-cloned");for(c=0;e>c;c+=1)d=c,a(b.$slides[d]).clone(!0).attr("id","").attr("data-slick-index",d+b.slideCount).appendTo(b.$slideTrack).addClass("slick-cloned");b.$slideTrack.find(".slick-cloned").find("[id]").each(function(){a(this).attr("id","")})}},b.prototype.interrupt=function(a){var b=this;a||b.autoPlay(),b.interrupted=a},b.prototype.selectHandler=function(b){var c=this,d=a(b.target).is(".slick-slide")?a(b.target):a(b.target).parents(".slick-slide"),e=parseInt(d.attr("data-slick-index"));return e||(e=0),c.slideCount<=c.options.slidesToShow?(c.setSlideClasses(e),void c.asNavFor(e)):void c.slideHandler(e)},b.prototype.slideHandler=function(a,b,c){var d,e,f,g,j,h=null,i=this;return b=b||!1,i.animating===!0&&i.options.waitForAnimate===!0||i.options.fade===!0&&i.currentSlide===a||i.slideCount<=i.options.slidesToShow?void 0:(b===!1&&i.asNavFor(a),d=a,h=i.getLeft(d),g=i.getLeft(i.currentSlide),i.currentLeft=null===i.swipeLeft?g:i.swipeLeft,i.options.infinite===!1&&i.options.centerMode===!1&&(0>a||a>i.getDotCount()*i.options.slidesToScroll)?void(i.options.fade===!1&&(d=i.currentSlide,c!==!0?i.animateSlide(g,function(){i.postSlide(d)}):i.postSlide(d))):i.options.infinite===!1&&i.options.centerMode===!0&&(0>a||a>i.slideCount-i.options.slidesToScroll)?void(i.options.fade===!1&&(d=i.currentSlide,c!==!0?i.animateSlide(g,function(){i.postSlide(d)}):i.postSlide(d))):(i.options.autoplay&&clearInterval(i.autoPlayTimer),e=0>d?i.slideCount%i.options.slidesToScroll!==0?i.slideCount-i.slideCount%i.options.slidesToScroll:i.slideCount+d:d>=i.slideCount?i.slideCount%i.options.slidesToScroll!==0?0:d-i.slideCount:d,i.animating=!0,i.$slider.trigger("beforeChange",[i,i.currentSlide,e]),f=i.currentSlide,i.currentSlide=e,i.setSlideClasses(i.currentSlide),i.options.asNavFor&&(j=i.getNavTarget(),j=j.slick("getSlick"),j.slideCount<=j.options.slidesToShow&&j.setSlideClasses(i.currentSlide)),i.updateDots(),i.updateArrows(),i.options.fade===!0?(c!==!0?(i.fadeSlideOut(f),i.fadeSlide(e,function(){i.postSlide(e)})):i.postSlide(e),void i.animateHeight()):void(c!==!0?i.animateSlide(h,function(){i.postSlide(e)}):i.postSlide(e))))},b.prototype.startLoad=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.hide(),a.$nextArrow.hide()),a.options.dots===!0&&a.slideCount>a.options.slidesToShow&&a.$dots.hide(),a.$slider.addClass("slick-loading")},b.prototype.swipeDirection=function(){var a,b,c,d,e=this;return a=e.touchObject.startX-e.touchObject.curX,b=e.touchObject.startY-e.touchObject.curY,c=Math.atan2(b,a),d=Math.round(180*c/Math.PI),0>d&&(d=360-Math.abs(d)),45>=d&&d>=0?e.options.rtl===!1?"left":"right":360>=d&&d>=315?e.options.rtl===!1?"left":"right":d>=135&&225>=d?e.options.rtl===!1?"right":"left":e.options.verticalSwiping===!0?d>=35&&135>=d?"down":"up":"vertical"},b.prototype.swipeEnd=function(a){var c,d,b=this;if(b.dragging=!1,b.interrupted=!1,b.shouldClick=b.touchObject.swipeLength>10?!1:!0,void 0===b.touchObject.curX)return!1;if(b.touchObject.edgeHit===!0&&b.$slider.trigger("edge",[b,b.swipeDirection()]),b.touchObject.swipeLength>=b.touchObject.minSwipe){switch(d=b.swipeDirection()){case"left":case"down":c=b.options.swipeToSlide?b.checkNavigable(b.currentSlide+b.getSlideCount()):b.currentSlide+b.getSlideCount(),b.currentDirection=0;break;case"right":case"up":c=b.options.swipeToSlide?b.checkNavigable(b.currentSlide-b.getSlideCount()):b.currentSlide-b.getSlideCount(),b.currentDirection=1}"vertical"!=d&&(b.slideHandler(c),b.touchObject={},b.$slider.trigger("swipe",[b,d]))}else b.touchObject.startX!==b.touchObject.curX&&(b.slideHandler(b.currentSlide),b.touchObject={})},b.prototype.swipeHandler=function(a){var b=this;if(!(b.options.swipe===!1||"ontouchend"in document&&b.options.swipe===!1||b.options.draggable===!1&&-1!==a.type.indexOf("mouse")))switch(b.touchObject.fingerCount=a.originalEvent&&void 0!==a.originalEvent.touches?a.originalEvent.touches.length:1,b.touchObject.minSwipe=b.listWidth/b.options.touchThreshold,b.options.verticalSwiping===!0&&(b.touchObject.minSwipe=b.listHeight/b.options.touchThreshold),a.data.action){case"start":b.swipeStart(a);break;case"move":b.swipeMove(a);break;case"end":b.swipeEnd(a)}},b.prototype.swipeMove=function(a){var d,e,f,g,h,b=this;return h=void 0!==a.originalEvent?a.originalEvent.touches:null,!b.dragging||h&&1!==h.length?!1:(d=b.getLeft(b.currentSlide),b.touchObject.curX=void 0!==h?h[0].pageX:a.clientX,b.touchObject.curY=void 0!==h?h[0].pageY:a.clientY,b.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(b.touchObject.curX-b.touchObject.startX,2))),b.options.verticalSwiping===!0&&(b.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(b.touchObject.curY-b.touchObject.startY,2)))),e=b.swipeDirection(),"vertical"!==e?(void 0!==a.originalEvent&&b.touchObject.swipeLength>4&&a.preventDefault(),g=(b.options.rtl===!1?1:-1)*(b.touchObject.curX>b.touchObject.startX?1:-1),b.options.verticalSwiping===!0&&(g=b.touchObject.curY>b.touchObject.startY?1:-1),f=b.touchObject.swipeLength,b.touchObject.edgeHit=!1,b.options.infinite===!1&&(0===b.currentSlide&&"right"===e||b.currentSlide>=b.getDotCount()&&"left"===e)&&(f=b.touchObject.swipeLength*b.options.edgeFriction,b.touchObject.edgeHit=!0),b.options.vertical===!1?b.swipeLeft=d+f*g:b.swipeLeft=d+f*(b.$list.height()/b.listWidth)*g,b.options.verticalSwiping===!0&&(b.swipeLeft=d+f*g),b.options.fade===!0||b.options.touchMove===!1?!1:b.animating===!0?(b.swipeLeft=null,!1):void b.setCSS(b.swipeLeft)):void 0)},b.prototype.swipeStart=function(a){var c,b=this;return b.interrupted=!0,1!==b.touchObject.fingerCount||b.slideCount<=b.options.slidesToShow?(b.touchObject={},!1):(void 0!==a.originalEvent&&void 0!==a.originalEvent.touches&&(c=a.originalEvent.touches[0]),b.touchObject.startX=b.touchObject.curX=void 0!==c?c.pageX:a.clientX,b.touchObject.startY=b.touchObject.curY=void 0!==c?c.pageY:a.clientY,void(b.dragging=!0))},b.prototype.unfilterSlides=b.prototype.slickUnfilter=function(){var a=this;null!==a.$slidesCache&&(a.unload(),a.$slideTrack.children(this.options.slide).detach(),a.$slidesCache.appendTo(a.$slideTrack),a.reinit())},b.prototype.unload=function(){var b=this;a(".slick-cloned",b.$slider).remove(),b.$dots&&b.$dots.remove(),b.$prevArrow&&b.htmlExpr.test(b.options.prevArrow)&&b.$prevArrow.remove(),b.$nextArrow&&b.htmlExpr.test(b.options.nextArrow)&&b.$nextArrow.remove(),b.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden","true").css("width","")},b.prototype.unslick=function(a){var b=this;b.$slider.trigger("unslick",[b,a]),b.destroy()},b.prototype.updateArrows=function(){var b,a=this;b=Math.floor(a.options.slidesToShow/2),a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&!a.options.infinite&&(a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false"),a.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false"),0===a.currentSlide?(a.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true"),a.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false")):a.currentSlide>=a.slideCount-a.options.slidesToShow&&a.options.centerMode===!1?(a.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")):a.currentSlide>=a.slideCount-1&&a.options.centerMode===!0&&(a.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")))},b.prototype.updateDots=function(){var a=this;null!==a.$dots&&(a.$dots.find("li").removeClass("slick-active").attr("aria-hidden","true"),a.$dots.find("li").eq(Math.floor(a.currentSlide/a.options.slidesToScroll)).addClass("slick-active").attr("aria-hidden","false"))},b.prototype.visibility=function(){var a=this;a.options.autoplay&&(document[a.hidden]?a.interrupted=!0:a.interrupted=!1)},a.fn.slick=function(){var f,g,a=this,c=arguments[0],d=Array.prototype.slice.call(arguments,1),e=a.length;for(f=0;e>f;f++)if("object"==typeof c||"undefined"==typeof c?a[f].slick=new b(a[f],c):g=a[f].slick[c].apply(a[f].slick,d),"undefined"!=typeof g)return g;return a}});
\ No newline at end of file
diff --git a/jquery/slick/slick.scss b/jquery/slick/slick.scss
new file mode 100644
index 0000000..2fa0fb2
--- /dev/null
+++ b/jquery/slick/slick.scss
@@ -0,0 +1,98 @@
+/* Slider */
+
+.slick-slider {
+    position: relative;
+    display: block;
+    box-sizing: border-box;
+    -webkit-touch-callout: none;
+    -webkit-user-select: none;
+    -khtml-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    -ms-touch-action: pan-y;
+    touch-action: pan-y;
+    -webkit-tap-highlight-color: transparent;
+}
+.slick-list {
+    position: relative;
+    overflow: hidden;
+    display: block;
+    margin: 0;
+    padding: 0;
+
+    &:focus {
+        outline: none;
+    }
+
+    &.dragging {
+        cursor: pointer;
+        cursor: hand;
+    }
+}
+.slick-slider .slick-track,
+.slick-slider .slick-list {
+    -webkit-transform: translate3d(0, 0, 0);
+    -moz-transform: translate3d(0, 0, 0);
+    -ms-transform: translate3d(0, 0, 0);
+    -o-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+}
+
+.slick-track {
+    position: relative;
+    left: 0;
+    top: 0;
+    display: block;
+
+    &:before,
+    &:after {
+        content: "";
+        display: table;
+    }
+
+    &:after {
+        clear: both;
+    }
+
+    .slick-loading & {
+        visibility: hidden;
+    }
+}
+.slick-slide {
+    float: left;
+    height: 100%;
+    min-height: 1px;
+    [dir="rtl"] & {
+        float: right;
+    }
+    img {
+        display: block;
+    }
+    &.slick-loading img {
+        display: none;
+    }
+
+    display: none;
+
+    &.dragging img {
+        pointer-events: none;
+    }
+
+    .slick-initialized & {
+        display: block;
+    }
+
+    .slick-loading & {
+        visibility: hidden;
+    }
+
+    .slick-vertical & {
+        display: block;
+        height: auto;
+        border: 1px solid transparent;
+    }
+}
+.slick-arrow.slick-hidden {
+    display: none;
+}
diff --git a/lang/en/local_sharedresources.php b/lang/en/local_sharedresources.php
index a283b69..bc5df28 100644
--- a/lang/en/local_sharedresources.php
+++ b/lang/en/local_sharedresources.php
@@ -18,18 +18,19 @@ $string['adminrepository'] = 'Admin Repository';
 $string['backtocourse'] = 'Back to course';
 $string['backtoindex'] = 'Back to index';
 $string['browse'] = 'Browse by categories';
-$string['configdefaulttaxonomypurposeonimport'] = 'The taxonomy purpose tells why the taxonomy is used for. some metadata schema allows multiple taxonomies to be used at once for distinct purposes.';
-$string['confirm'] = 'Confirm';
+$string['browser'] = 'Taxonomy based browser';
+$string['clinonexistingcontext'] = 'Error: Non existing context';
+$string['clinonexistingpath'] = 'Error: Path does not exist';
+$string['configdefaulttaxonomypurposeonimport'] = 'Taxonomy purpose for import';
+$string['configdefaultlibraryindexpage'] = 'Default index page of the library';
 $string['confignotfound'] = 'Config file not found';
+$string['configprivatecatalog'] = 'Private catalog';
+$string['confirm'] = 'Confirm';
 $string['courselist'] = 'Course list';
 $string['deducetaxonomyfrompath'] = 'Guess taxonomy from path';
-$string['clinonexistingpath'] = 'Error: Path does not exist';
-$string['clinonexistingcontext'] = 'Error: Non existing context';
-$string['defaulttaxonomypurposeonimport'] = 'Taxonomy purpose for import';
 $string['doresetvolume'] = 'Reset';
 $string['errorinvalidresource'] = 'Invalid resource';
 $string['errorinvalidresourceid'] = 'Invalid resource ID';
-$string['rpcsharedresourceerror'] = 'RPC mod/sharedresource/get_list:<br/>{$a}';
 $string['errormnetpeer'] = 'MNET client initialisation error';
 $string['errornotadir'] = 'The import directory does not exist or is not accessible';
 $string['exclusionpattern'] = 'Exclusion pattern';
@@ -48,14 +49,15 @@ $string['noresources'] = 'This repository has no local resources';
 $string['notused'] = 'Never used in this site';
 $string['pluginname'] = 'Shared Resources Center';
 $string['publish_sharedresource'] = 'Publish Sharedresource';
-$string['private_catalog'] = 'Private catalog';
-$string['config_private_catalog'] = 'If checked, the sharedresource library is not accessible to unlogged users. sharedresources indexs will NOT be harveastable by OAI endpoint';
 $string['reinitialized'] = '{$a} files unmarked';
 $string['resetvolume'] = 'Reset volume';
 $string['resourceimport'] = 'Resource Import';
 $string['resources'] = 'Resources';
 $string['resourcesadministration'] = 'Resources administration';
 $string['resourcespushout'] = 'Exporting to a provider library';
+$string['rpcsharedresourceerror'] = 'RPC mod/sharedresource/get_list:<br/>{$a}';
+$string['searchinlibrary'] = 'Search in library';
+$string['searchengine'] = 'Search engine';
 $string['sharedresources_library'] = 'Shared resources library';
 $string['sharedresourcesindex'] = 'Shared resources index';
 $string['textsearch'] = 'Full text search';
@@ -65,6 +67,12 @@ $string['updateresourcespageon'] = 'Edit this page';
 $string['used'] = 'Used: {$a}';
 $string['viewed'] = 'Viewed: {$a}';
 
+$string['configdefaulttaxonomypurposeonimport_desc'] = 'The taxonomy purpose tells why the taxonomy is used for.
+some metadata schema allows multiple taxonomies to be used at once for distinct purposes.';
+
+$string['configprivatecatalog_desc'] = 'If checked, the sharedresource library is not accessible to unlogged users.
+sharedresources indexs will NOT be harveastable by OAI endpoint';
+
 $string['resetvolume_help'] = 'When processing, files are marked with a "__" prefix to allow respawn of the import if
 memory or processing limits failure. You can reset the initial state of files using this option.';
 
@@ -80,3 +88,5 @@ will ignore all JPEG images)';
 
 $string['deducetaxonomyfrompath_help'] = 'If enabled, the relative path of the resource denotes the taxonomy. The discipline taxonomy
 will be automatically be filled with taxonomy entries. The imported taxonomy hierarchy will reflect the directory organisation.';
+
+$string['configdefaultlibraryindexpage_desc'] = 'The default index page choice may depend of the activated metadata plugin';
diff --git a/lang/fr/local_sharedresources.php b/lang/fr/local_sharedresources.php
index d395fe6..c414baf 100644
--- a/lang/fr/local_sharedresources.php
+++ b/lang/fr/local_sharedresources.php
@@ -18,17 +18,18 @@ $string['adminrepository'] = 'Administrer la librairie';
 $string['backtocourse'] = 'Revenir au cours';
 $string['backtoindex'] = 'Revenir à l\'index';
 $string['browse'] = 'Explorer par catégories';
-$string['clinonexistingpath'] = 'Erreur : Chemin inexistant';
+$string['browser'] = 'Explorateur de taxonomie';
 $string['clinonexistingcontext'] = 'Erreur : Contexte inexistant';
-$string['configdefaulttaxonomypurposeonimport'] = 'L\'objet de la taxonomie définit pour quoi cette taxonomie est utilisée. Certains schémas de métadonnées autorisent la classification des ressources selon plusieurs taxonomies avec des objectifs différents.';
-$string['confirm'] = 'Confirmer';
+$string['clinonexistingpath'] = 'Erreur : Chemin inexistant';
+$string['configdefaulttaxonomypurposeonimport'] = 'Objet de la taxonomie par défaut';
 $string['confignotfound'] = 'Fichier de configuration introuvable';
+$string['configprivatecatalog'] = 'Catalogue privé';
+$string['confirm'] = 'Confirmer';
 $string['deducetaxonomyfrompath'] = 'Déduire la taxonomie du chemin';
-$string['defaulttaxonomypurposeonimport'] = 'Objet de la taxonomie par défaut';
+$string['configdefaultlibraryindexpage'] = 'Page d\'arrivée de la librairie par défaut';
 $string['doresetvolume'] = 'Réinitialiser';
 $string['errorinvalidresource'] = 'Resource invalide';
 $string['errorinvalidresourceid'] = 'Identifiant de ressource inconnu';
-$string['rpcsharedresourceerror'] = 'Erreur RPC mod/sharedresource/get_list:<br/>{$a}';
 $string['errormnetpeer'] = 'Erreur d\'initialisation du client MNET';
 $string['errornotadir'] = 'Le répertoire d\'import n\'existe pas ou n\'est pas accessible';
 $string['exclusionpattern'] = 'Motif d\'exclusion';
@@ -46,16 +47,17 @@ $string['newresource'] = 'Ajouter une ressource';
 $string['noresources'] = '<p>Aucune ressource locale dans cette librairie</p>';
 $string['notused'] = 'Jamais utilisée dans ce site';
 $string['pluginname'] = 'Librairie de ressources';
-$string['private_catalog'] = 'Catalogue privé';
-$string['config_private_catalog'] = 'Si coché, toute la librairie mutualisée est totalement privée et les ressources ne peuvent être accédées de l\'extérieur. Les index ne sont alors pas moissonables à travers le service OAI';
 $string['reinitialized'] = '{$a} fichiers rétablis';
 $string['resetvolume'] = 'Réinitialiser le volume pour l\'import';
 $string['resourceimport'] = 'Importation de ressources';
 $string['resources'] = 'Ressources';
 $string['resourcesadministration'] = 'Administration des ressources';
 $string['resourcespushout'] = 'Exporter vers un fournisseur de ressources';
+$string['rpcsharedresourceerror'] = 'Erreur RPC mod/sharedresource/get_list:<br/>{$a}';
 $string['sharedresources_library'] = 'Librairie partagée';
 $string['sharedresourcesindex'] = 'Librairie de ressources';
+$string['searchinlibrary'] = 'Chercher dans la librairie';
+$string['searchengine'] = 'Moteur de recherche';
 $string['textsearch'] = 'Recherche texte';
 $string['topkeywords'] = 'Mots-clefs principaux';
 $string['updateresourcespageoff'] = 'Mode normal';
@@ -63,6 +65,14 @@ $string['updateresourcespageon'] = 'Mode édition';
 $string['used'] = 'Utilisée : {$a}';
 $string['viewed'] = 'Vue : {$a}';
 
+$string['configdefaulttaxonomypurposeonimport_desc'] = 'L\'objet de la taxonomie définit pour quoi
+cette taxonomie est utilisée. Certains schémas de métadonnées autorisent la classification des ressources
+selon plusieurs taxonomies avec des objectifs différents.';
+
+$string['configprivatecatalog_desc'] = 'Si coché, toute la librairie mutualisée est totalement privée
+et les ressources ne peuvent être accédées de l\'extérieur. Les index ne sont alors pas moissonables à travers le
+service OAI';
+
 $string['resetvolume_help'] = 'Les fichiers traités sont marqués par le préfixe "__" pour permettre une
 reprise partielle du traitement en cas de limite mémoire ou physique.
 Vous pouvez complétement réinitialiser le volume de fichiers à importer avec cette option.';
@@ -81,3 +91,5 @@ $string['exclusionpattern_help'] = 'Les noms de fichier correpondant à ce motif
 $string['deducetaxonomyfrompath_help'] = 'Si coché, le chemin relatif de la ressoure importée servira de base à l\'alimentation
 de la taxonomie. L^\'organisation hiérarchique de la taxonomie produite sera le reflet de l\'organisation physique du
 répertoire d\'import.';
+
+$string['configdefaultlibraryindexpage_desc'] = 'Le choix des pages par défaut de la librairie peut dépendre de la norme de métadonnée activée.';
diff --git a/lib.php b/lib.php
index d3205da..a3ca1f6 100644
--- a/lib.php
+++ b/lib.php
@@ -194,34 +194,6 @@ function get_remote_repo_resources($repo, &$fullresults, $metadatafilters = '',
     return $fullresults['entries'];
 }
 
-/**
- *
- */
-function update_resourcepage_icon() {
-    global $CFG, $USER;
-
-    if (!isloggedin()) {
-        return '';
-    }
-
-    if (!empty($USER->editing)) {
-        $string = get_string('updateresourcepageoff', 'sharedresource');
-        $edit = '0';
-    } else {
-        $string = get_string('updateresourcepageon', 'sharedresource');
-        $edit = '1';
-    }
-
-    $formurl = new moodle_url('/resources/index.php');
-    $return = '<form '.$CFG->frametarget.' method="get" action="'.$formurl.'">';
-    $return .= '<div>';
-    $return .= '<input type="hidden" name="edit" value="'.$edit.'" />';
-    $return .= '<input type="submit" value="'.$string.'" />';
-    $return .= '</div></form>';
-
-    return $return;
-}
-
 /**
  * Resources providers are mnet_hosts for which we have a subscription to its provider
  * service
@@ -637,10 +609,20 @@ function sharedresource_is_moodle_activity($resource) {
  * @TODO : turn implementation to more portable IN() statement
  */
 function sharedresource_get_top_keywords($courseid) {
-    global $DB;
+    global $DB, $CFG;
 
     $config = get_config('sharedresource');
 
+    $mtdclass = '\\mod_sharedresource\\plugin_'.$config->schema;
+    require_once($CFG->dirroot.'/mod/sharedresource/plugins/'.$config->schema.'/plugin.class.php');
+    $mtdstandard = new $mtdclass();
+    $kwelement = $mtdstandard->getKeywordElement();
+
+    if (!$kwelement) {
+        // Some metadata standard have no keywords. (DC)
+        return '';
+    }
+
     $contexts[] = 1;
 
     // Get all categories on the way to root.
@@ -658,11 +640,6 @@ function sharedresource_get_top_keywords($courseid) {
 
     $contextlist = implode(',', $contexts);
 
-    $mtdclass = '\\mod_sharedresource\\plugin_'.$config->schema;
-    $mtdstandard = new $mtdclass();
-
-    $kwelement = $mtdstandard->getKeywordElement();
-
     $topranksize = 20;
 
     $sql = "
diff --git a/oai/oai2/record_lomfr.php b/oai/oai2/record_lomfr.php
index f74cec2..2904dc7 100644
--- a/oai/oai2/record_lomfr.php
+++ b/oai/oai2/record_lomfr.php
@@ -14,9 +14,10 @@ if (!$myformat['defaultnamespace']) {
     $atts['xmlns'] = $myformat['metadataNamespace'];
 }
 
-if (!isset($lom)) { // allows reuse of the class for listrecords
+if (!isset($lom)) {
+    // allows reuse of the class for listrecords.
     $lomatts = array(
-        'xsi:schemaLocation' => $METADATAFORMATS['shared_lom']['metadataNamespace'].'       http://ltsc.ieee.org/xsd/lomv1.0/lomLoose.xsd',
+        'xsi:schemaLocation' => $METADATAFORMATS['oai_lom']['metadataNamespace'].'       http://ltsc.ieee.org/xsd/lomv1.0/lomLoose.xsd',
         'xmlns' => $METADATAFORMATS['oai_lom']['metadataNamespace']
     );
 }
diff --git a/oai/oaidp-config.php b/oai/oaidp-config.php
index c47bcf7..2a435d4 100644
--- a/oai/oaidp-config.php
+++ b/oai/oaidp-config.php
@@ -190,7 +190,7 @@ $METADATAFORMATS = array (
                                         'record_prefix' => 'lom',
                                         'defaultnamespace' => false,
                                         'record_namespace' => 'http://ltsc.ieee.org/xsd/LOM'),
-                        
+
                         'oai_lomfr' => array('metadataPrefix' => 'oai_lomfr',
                                         'schema' => 'http://www.lom-fr.fr/xsd/LOMFR',
                                         'metadataNamespace' => 'http://www.lom-fr.fr/xsd/LOMFR',
@@ -214,7 +214,7 @@ $METADATAFORMATS = array (
                                         'record_prefix' => 'suplomfr',
                                         'defaultnamespace' => 'http://www.lom-fr.fr/xsd/LOMFR',
                                         'record_namespace' => 'http://www.lom-fr.fr/xsd/SUPLOMFR'),
-            
+
                         'oai_lre' => array('metadataPrefix'=>'oai_lre',
                                         'schema' => 'http://fire.eun.org/lode/imslorsltitm_v1p0.xsd',
                                         'metadataNamespace' => 'http://www.imsglobal.org/xsd/imslorsltitm_v1p0',
@@ -222,7 +222,6 @@ $METADATAFORMATS = array (
                                         'record_prefix' => 'lre',
                                         'defaultnamespace' => false,
                                         'record_namespace' => 'http://www.w3.org/2001/XMLSchema-instancehttp://www.w3.org/2001/XMLSchema-instance')
-
                     );
 
 // the charset you store your metadata in your database
diff --git a/renderer.php b/renderer.php
index 1245eea..b003af0 100644
--- a/renderer.php
+++ b/renderer.php
@@ -62,7 +62,7 @@ class local_sharedresources_renderer extends plugin_renderer_base {
         $template->courseid = $courseid;
         $template->repo = $repo;
         $template->offset = $offset;
-        $template->strsearch = get_string('search');
+        $template->searchstr = get_string('search');
 
         $template->widgets = array();
         $n = 0;
@@ -211,18 +211,18 @@ class local_sharedresources_renderer extends plugin_renderer_base {
                 } else {
                     $params = array('courseid' => $course->id, 'entryid' => $resource->id);
                     $template->courselisturl = new moodle_url('/local/sharedresources/courses.php', $params);
-                    $template->strused = get_string('used', 'local_sharedresources', $resource->uses);
+                    $template->usedstr = get_string('used', 'local_sharedresources', $resource->uses);
                 }
 
                 // Views.
-                $template->strviewed = get_string('viewed', 'local_sharedresources', $resource->scoreview);
+                $template->viewedstr = get_string('viewed', 'local_sharedresources', $resource->scoreview);
 
                 // Likes.
-                $template->strmarkliked = get_string('markliked', 'local_sharedresources');
+                $template->marklikedstr = get_string('markliked', 'local_sharedresources');
                 // $jshandler = 'javascript:ajax_mark_liked(\''.$repo.'\', \''.$resource->identifier.'\')';
 
                 $template->stars = $this->stars($resource->scorelike, 15);
-                $template->strliked = get_string('liked', 'local_sharedresources');
+                $template->likedstr = get_string('liked', 'local_sharedresources');
 
                 // Resource descriptors.
                 if (!empty($resource->description)) {
@@ -230,7 +230,7 @@ class local_sharedresources_renderer extends plugin_renderer_base {
                     $template->description = $resource->description;
 
                     // Keywords.
-                    $template->strkeywords = get_string('keywords', 'sharedresource');
+                    $template->keywordsstr = get_string('keywords', 'sharedresource');
                     $template->keywords = $resource->keywords;
                 }
 
@@ -242,14 +242,17 @@ class local_sharedresources_renderer extends plugin_renderer_base {
                     if (has_capability('moodle/course:manageactivities', $context)) {
 
                         $cmdtemplate = new StdClass;
+
+                        $cmdtemplate->installtoolstr = get_string('installltitool', 'local_sharedresources');
+                        $cmdtemplate->addtocoursestr = get_string('addtocourse', 'sharedresource');
+                        $cmdtemplate->localizetocoursestr = get_string('localizetocourse', 'sharedresource');
+                        $cmdtemplate->addfiletocoursestr = get_string('addfiletocourse', 'sharedresource');
+
                         $cmdtemplate->i = $i;
                         $cmdtemplate->isltitool = sharedresource_is_lti($resource);
                         $ismoodleactivity = sharedresource_is_moodle_activity($resource);
                         $isplayablemedia = sharedresource_is_media($resource);
 
-                        $cmdtemplate->straddtocourse = get_string('addtocourse', 'sharedresource');
-                        $cmdtemplate->strlocalizetocourse = get_string('localizetocourse', 'sharedresource');
-                        $cmdtemplate->straddfiletocourse = get_string('addfiletocourse', 'sharedresource');
                         $cmdtemplate->isremote = $isremote;
                         if (!$isremote) {
                             // If is local or already proxied.
@@ -278,11 +281,9 @@ class local_sharedresources_renderer extends plugin_renderer_base {
                                 }
                             }
                             */
-                            $cmdtemplate->strinstalltool = get_string('installltitool', 'local_sharedresources');
                             $cmdtemplate->islocalizable = true;
                         }
 
-                        $cmdtemplate->strinstalltool = get_string('installltitool', 'local_sharedresources');
                         /**
                             $jshandler = 'javascript:document.forms[\'add'.$i.'\'].mode.value = \'ltiinstall\';';
                             $jshandler .= 'document.forms[\'add'.$i.'\'].submit();';
@@ -293,14 +294,18 @@ class local_sharedresources_renderer extends plugin_renderer_base {
                         // Check deployable moodle activity.
                             if (file_exists($CFG->dirroot.'/blocks/activity_publisher/lib/activity_publisher.class.php')) {
                                 include_once($CFG->dirroot.'/blocks/activity_publisher/lib/activity_publisher.class.php');
-                                $cmdtemplate->strdeployincourse = get_string('deployincourse', 'block_activity_publisher');
-                                /*
-                                $jshandler = 'javascript:document.forms[\'add'.$i.'\'].mode.value = \'deploy\';';
-                                $jshandler = 'document.forms[\'add'.$i.'\'].submit();';
-                                */
+                                $cmdtemplate->deployincoursestr = get_string('deployincourse', 'block_activity_publisher');
                                 $cmdtemplate->isdeployable = true;
                             }
                         }
+
+                        if ($isplayablemedia) {
+                            if (file_exists($CFG->dirroot.'/blocks/activity_publisher/lib/activity_publisher.class.php')) {
+                                $cmdtemplate->deployinmplayerstr = get_string('deployinmplayer', 'mediaplayer');
+                                $cmdtemplate->isvideo = true;
+                                $cmdtemplate->formurl = new moodle_url('/mod/mplayer/deployincourse.php');
+                            }
+                        }
                     }
                     $template->rescommands = $this->render_from_template('local_sharedresources/resourcecommands', $cmdtemplate);
                 }
@@ -438,35 +443,6 @@ class local_sharedresources_renderer extends plugin_renderer_base {
         return $str;
     }
 
-
-    /**
-     * TODO : May be obsolete, possibly delete
-     */
-    public function update_resourcepage_icon() {
-        global $CFG, $USER;
-
-        if (!isloggedin()) {
-            return '';
-        }
-
-        if (!empty($USER->editing)) {
-            $string = get_string('updateresourcepageoff', 'sharedresource');
-            $edit = '0';
-        } else {
-            $string = get_string('updateresourcepageon', 'sharedresource');
-            $edit = '1';
-        }
-
-        $updateurl = new moodle_url('/local/sharedresources/index.php');
-        $str = '<form '.$CFG->frametarget.' method="get" action="'.$updateurl.'">';
-        $str .= '<div>';
-        $str .= '<input type="hidden" name="edit" value="'.$edit.'" />';
-        $str .= '<input type="submit" value="'.$string.'" />';
-        $str .= '</div></form>';
-
-        return $str;
-    }
-
     public function thumbnail($resource) {
         static $fs;
         static $context;
@@ -569,7 +545,7 @@ class local_sharedresources_renderer extends plugin_renderer_base {
     public function searchlink() {
 
         $str = '';
-        $searchstr = get_string('searchengine', 'local_sharedresources');
+        $searchstr = get_string('searchinlibrary', 'local_sharedresources');
         $exploreurl = new moodle_url('/local/sharedresources/index.php');
         $str .= '<div id="sharedresources-link-to-search">';
         $str .= '<a href="'.$exploreurl.'"><input type="button" value="'.$searchstr.'"></a>';
@@ -591,4 +567,14 @@ class local_sharedresources_renderer extends plugin_renderer_base {
 
         return $str;
     }
+
+    /**
+     * Prints a taxonomy selector if more than one activated.
+     */
+    public function taxonomy_select() {
+        global $DB;
+
+        $enabledtaxonomies = $DB->get_records('sharedresource_classif', array('enabled' => true));
+
+    }
 }
\ No newline at end of file
diff --git a/settings.php b/settings.php
index f06160e..fccee99 100644
--- a/settings.php
+++ b/settings.php
@@ -36,15 +36,28 @@ if (is_dir($CFG->dirroot.'/local/adminsettings')) {
     $hasconfig = $hassiteconfig = has_capability($capability, context_system::instance());
 }
 
-if ($hasconfig) {
+$shcaps = array(
+    'repository/sharedresouces:use',
+    'repository/sharedresouces:view',
+    'repository/sharedresouces:manage',
+);
+
+$usecap = sharedresources_has_capability_somewhere('repository/sharedresources:use', false, false, false, CONTEXT_COURSECAT.','.CONTEXT_COURSE);
+$viewcap = sharedresources_has_capability_somewhere('repository/sharedresources:view', false, false, false, CONTEXT_COURSECAT.','.CONTEXT_COURSE);
+$managecap = sharedresources_has_capability_somewhere('repository/sharedresources:manage', false, false, false, CONTEXT_COURSECAT.','.CONTEXT_COURSE);
+
+if ($hasconfig || $usecap || $viewcap || $managecap) {
     // Needs this condition or there is error on login page.
 
-    $ADMIN->add('root', new admin_category('resources', get_string('resources', 'local_sharedresources')));
+    if ($DB->get_field('modules', 'visible', array('name' => 'sharedresource'))) {
 
-    $label = get_string('pluginname', 'local_sharedresources');
-    $pageurl = new moodle_url('/local/sharedresources/index.php');
-    $settingspage = new admin_externalpage('resourcelibrary', $label, $pageurl, 'repository/sharedresources:view');
-    $ADMIN->add('resources', $settingspage);
+        $ADMIN->add('root', new admin_category('resources', get_string('resources', 'local_sharedresources')));
+
+        $label = get_string('pluginname', 'local_sharedresources');
+        $pageurl = new moodle_url('/local/sharedresources/index.php');
+        $settingspage = new admin_externalpage('resourcelibrary', $label, $pageurl, 'repository/sharedresources:view');
+        $ADMIN->add('resources', $settingspage);
+    }
 }
 if ($hassiteconfig) {
     $settings = new admin_settingpage('local_sharedresources', get_string('pluginname', 'sharedresource'));
@@ -58,20 +71,37 @@ if ($hassiteconfig) {
 
         $purposes = array();
         $purposefield = $mtdstandard->getTaxonomyPurposeElement();
-        foreach ($purposefield->values as $purpose) {
-            $purposes[$purpose] = get_string(clean_string_key($purpose), 'sharedmetadata_'.$config->schema);
+        if ($purposefield) {
+            foreach ($purposefield->values as $purpose) {
+                $purposes[$purpose] = get_string(clean_string_key($purpose), 'sharedmetadata_'.$config->schema);
+            }
+
+            $key = 'local_sharedresources/defaulttaxonomypurposeonimport';
+            $label = get_string('configdefaulttaxonomypurposeonimport', 'local_sharedresources');
+            $desc = get_string('configdefaulttaxonomypurposeonimport_desc', 'local_sharedresources');
+            $settings->add(new admin_setting_configselect($key, $label, $desc, 0, $purposes));
+        }
+
+        $defaultpages = array(
+            'index' => get_string('searchengine', 'local_sharedresources')
+        );
+
+        $plugin = sharedresource_get_plugin($config->schema);
+        if (!empty($plugin->getTaxonomyValueElement())) {
+            $defaultpages['browse'] = get_string('browser', 'local_sharedresources');
         }
 
-        $key = 'local_sharedresources/defaulttaxonomypurposeonimport';
-        $label = get_string('defaulttaxonomypurposeonimport', 'local_sharedresources');
-        $desc = get_string('configdefaulttaxonomypurposeonimport', 'local_sharedresources');
-        $settings->add(new admin_setting_configselect($key, $label, $desc, 0, $purposes));
+        $key = 'local_sharedresources/defaultlibraryindexpage';
+        $label = get_string('configdefaultlibraryindexpage', 'local_sharedresources');
+        $desc = get_string('configdefaultlibraryindexpage_desc', 'local_sharedresources');
+        $settings->add(new admin_setting_configselect($key, $label, $desc, 'index', $defaultpages));
     }
 
     $key = 'local_sharedresources/privatecatalog';
-    $label = get_string('private_catalog', 'local_sharedresources');
-    $desc = get_string('config_private_catalog', 'local_sharedresources');
-    $settings->add(new admin_setting_configcheckbox($key, $label, $desc, 1));
+    $label = get_string('configprivatecatalog', 'local_sharedresources');
+    $desc = get_string('configprivatecatalog_desc', 'local_sharedresources');
+    $default = true;
+    $settings->add(new admin_setting_configcheckbox($key, $label, $desc, $default));
 
     $plugins =  core_component::get_plugin_list('local/sharedresources/plugins');
     foreach ($plugins as $plugin) {
diff --git a/templates/resourcebody.mustache b/templates/resourcebody.mustache
index 0213575..0aa49e4 100644
--- a/templates/resourcebody.mustache
+++ b/templates/resourcebody.mustache
@@ -23,6 +23,7 @@
     * mod/sharedresource/amd/view.js
 
 }}
+<!-- resourcebody -->
 <div class="resource-item">
 
 <div class="sharedresource-heading">
@@ -42,35 +43,36 @@
     <a class="sharedressource-toggle-handle"><img id="sharedresource-toggle-{{identifier}}" src="{{handlepixurl}}"></a>
 
     {{^uses}}
-    <div class="resource-usage">{{strnotused}}</div>
+    <div class="resource-usage">{{notusedstr}}</div>
     {{/uses}}
     {{#uses}}
     <div class="resource-usage"><a href="{{courselisturl}}">{{used}}</a></div>
     {{/uses}}
 
-    <div class="resource-views">{{strviewed}}</div>
+    <div class="resource-views">{{viewedstr}}</div>
 
     <div class="resource-likes">
-       {{strliked}}
+       {{likedstr}}
        <span id="sharedresource-likes-{{identifier}}">
        {{{stars}}}
        </span>
-        <a class="sharedresource-mark-like" id="sharedresource-{{identifier}}">{{strmarkliked}}</a>
+        <a class="sharedresource-mark-like" id="sharedresource-{{identifier}}">{{marklikedstr}}</a>
     </div>
 
 </div>
 
 <div class="generalbox resource-info" id="sharedresource-info-{{identifier}}" style="display:none">
 {{#description}}
-    <div class="sharedreosurce-description">
+    <div class="sharedresource-description">
         <div class="resource-thumbnail">{{{thumbnail}}}</div>
         <div class="resource-description">{{{description}}}</div>
 
-        <div class="smalltext">{{strkeywords}}: <b>{{keywords}}</b></div>
+        <div class="smalltext">{{keywordsstr}}: <b>{{keywords}}</b></div>
     </div>
 {{/description}}
 </div>
 
 {{{rescommands}}}
 
-</div>
\ No newline at end of file
+</div>
+<!-- /resourcebody -->
diff --git a/templates/resourcecategory.mustache b/templates/resourcecategory.mustache
index baa18f5..eff15b4 100644
--- a/templates/resourcecategory.mustache
+++ b/templates/resourcecategory.mustache
@@ -23,7 +23,8 @@
     * none
 
 }}
-<div class="browser-'.$current.'-category row-fluid">
+<!-- resourcecategory -->
+<div class="browser-{{current}}-category row-fluid">
 
 {{#hasup}}
     <div class="browser-'.$current.'-category-label span2">
@@ -43,3 +44,4 @@
     <div id="sharedresource-browser-cat{{catid}}" class="browser-{{current}}-category-count span1"></div>
 
 </div>
+<!-- /resourcecategory -->
diff --git a/templates/resourcecommands.mustache b/templates/resourcecommands.mustache
index 64fb334..3489902 100644
--- a/templates/resourcecommands.mustache
+++ b/templates/resourcecommands.mustache
@@ -23,6 +23,7 @@
     * mod/sharedresource/amd/view.js
 
 }}
+<!-- resourcecommands -->
 <div class="generalbox sharedresources-commands">
 
 {{#isremote}}
@@ -45,19 +46,24 @@
 </form>
 
 {{^isltitool}}
-<a href="javascript:document.forms[\'add'.$i.'\'].submit();">'.$addtocourse.'</a>
+<a id="id-shared-{{i}}">{{addtocoursestr}}</a>
 
 {{#islocalizable}}
-<a class="sharedresource-localize" id="sharedresource-localize-{{identifier}}">'.$localizetocourse.'</a>
-{{/islocalizable}}}}
+ - <a id="id-local-{{i}}" class="sharedresource-actionlink">{{localizetocoursestr}}</a>
+{{/islocalizable}}
 {{/isltitool}}
 
 {{#isltitool}}
- - <a class="sharedresource-lti-install" id="sharedresource-lti-install-{{identifier}}">{{strinstalltool}}</a>
-{{/isltitool}}}
+ - <a id="id-ltiinstall-{{i}}" class="sharedresource-actionlink">{{installtoolstr}}</a>
+{{/isltitool}}
+
+{{#isdeployable}}
+ - <a id="id-deploy-{{i}}" class="sharedresource-actionlink">{{deployincoursestr}}</a>
+{{/isdeployable}}
 
-{{#isdeployeable}}
- - <a href="'.$jshandler.'">'.$deployincourse.'</a>
-{{/isdeployeable}}
+{{#isvideo}}
+ - <a id="id-mplayerdeploy-{{i}}" class="sharedresource-actionlink">{{deployinmplayerstr}}</a>
+{{/isvideo}}
 
 </div>
+<!-- /resourcecommands -->
diff --git a/templates/searchform.mustache b/templates/searchform.mustache
index ca70f09..962ae5a 100644
--- a/templates/searchform.mustache
+++ b/templates/searchform.mustache
@@ -21,6 +21,7 @@
     * none
 
 }}
+<!-- searchform -->
 {{^haswidgets))
 <br/>
 <center>{{strnowidgets}}</center>
@@ -38,7 +39,7 @@
 <input type="hidden" name="repo" value="{{repo}}">
 <input type="hidden" name="offset" value="{{offset}}">
 <fieldset>
-<legend>{{strsearchinlibrary}}</legend>
+<legend>{{searchinlibrarystr}}</legend>
 
 <table>
     <tr>
@@ -50,11 +51,12 @@
     </tr>
     <tr>
         <td colspan="{{n}}" align="center">
-            input type="submit" name="go" value="{{strsearch}}" />
+            input type="submit" name="go" value="{{searchstr}}" />
         </td>
     </tr>
 </table>
 </fieldset>
 </form>
 
-{{/haswidgets}}
\ No newline at end of file
+{{/haswidgets}}
+<!-- /searchform -->
diff --git a/templates/searchform_tableless.mustache b/templates/searchform_tableless.mustache
index 2c807b0..9cceba7 100644
--- a/templates/searchform_tableless.mustache
+++ b/templates/searchform_tableless.mustache
@@ -23,10 +23,11 @@
     * none
 
 }}
+<!-- searchform_tableless -->
 {{^haswidgets}}
 <div class="block">
     <div class="content">
-        <center>{{strnowidgets}}</center><br/>
+        <center>{{nowidgetsstr}}</center><br/>
     </div>
 </div>
 {{/haswidgets}}
@@ -45,7 +46,7 @@
 <div class="block">
     <div id="sharedresource-search-button content">
         <center>
-        <input type="submit" name="go" value="{{strsearch}}" />';
+        <input type="submit" name="go" value="{{searchstr}}" />
         </center>
     </div>
 </div>
@@ -59,7 +60,7 @@
 <div class="block" id="sharedresource-search-button">
     <div class="content">
         <center>
-        <input type="submit" name="go" value="{{strsearch}}" />
+        <input type="submit" name="go" value="{{searchstr}}" />
         </center>
     </div>
 </div>
@@ -67,3 +68,4 @@
 </form>
 </div>
 {{/haswidgets}}
+<!-- /searchform_tableless -->
diff --git a/version.php b/version.php
index 7e8a030..1fe4407 100644
--- a/version.php
+++ b/version.php
@@ -31,4 +31,4 @@ $plugin->release = '3.1.0 (Build 2014032700)';
 $plugin->maturity = MATURITY_RC;
 
 // Non moodle attributes.
-$plugin->codeincrement = '3.1.0000';
\ No newline at end of file
+$plugin->codeincrement = '3.1.0001';
\ No newline at end of file
-- 
GitLab