PageSourceSearch

https://97ha.com/js/f739ec7fe5f38b0821e3abac12e64204.js

js 97ha.com collected 2026-09-26 17:07:19 UTC 144,640 bytes, 4,328 lines download raw bytes

vendor: 8,346 bytes, lines 1-237
1/*
2* ! waitForImages jQuery Plugin - v2.2.0 - 2017-02-20
3* https://github.com/alexanderdickson/waitForImages
4* Copyright (c) 2017 Alex Dickson; Licensed MIT 
5*/
6	;(function (factory) {
7	    if (typeof define === 'function' && define.amd) {
8	        // AMD. Register as an anonymous module.
9	        define(['jquery'], factory);
10	    } else if (typeof exports === 'object') {
11	        // CommonJS / nodejs module
12	        module.exports = factory(require('jquery'));
13	    } else {
14	        // Browser globals
15	        factory(jQuery);
16	    }
17	}(function ($) {
18	    // Namespace all events.
19	    var eventNamespace = 'waitForImages';
20
21	    // Is srcset supported by this browser?
22	    var hasSrcset = (function(img) {
23	        return img.srcset && img.sizes;
24	    })(new Image());
25
26	    // CSS properties which contain references to images.
27	    $.waitForImages = {
28	        hasImageProperties: [
29	            'backgroundImage',
30	            'listStyleImage',
31	            'borderImage',
32	            'borderCornerImage',
33	            'cursor'
34	        ],
35	        hasImageAttributes: ['srcset']
36	    };
37
38	    // Custom selector to find all `img` elements with a valid `src` attribute.
39	    $.expr[':']['has-src'] = function (obj) {
40	        // Ensure we are dealing with an `img` element with a valid
41	        // `src` attribute.
42	        return $(obj).is('img[src][src!=""]');
43	    };
44
45	    // Custom selector to find images which are not already cached by the
46	    // browser.
47	    $.expr[':'].uncached = function (obj) {
48	        // Ensure we are dealing with an `img` element with a valid
49	        // `src` attribute.
50	        if (!$(obj).is(':has-src')) {
51	            return false;
52	        }
53
54	        return !obj.complete;
55	    };
56
57	    $.fn.waitForImages = function () {
58
59	        var allImgsLength = 0;
60	        var allImgsLoaded = 0;
61	        var deferred = $.Deferred();
62	        var originalCollection = this;
63	        var allImgs = [];
64
65	        // CSS properties which may contain an image.
66	        var hasImgProperties = $.waitForImages.hasImageProperties || [];
67	        // Element attributes which may contain an image.
68	        var hasImageAttributes = $.waitForImages.hasImageAttributes || [];
69	        // To match `url()` references.
70	        // Spec: http://www.w3.org/TR/CSS2/syndata.html#value-def-uri
71	        var matchUrl = /url\(\s*(['"]?)(.*?)\1\s*\)/g;
72
73	        var finishedCallback;
74	        var eachCallback;
75	        var waitForAll;
76
77	        // Handle options object (if passed).
78	        if ($.isPlainObject(arguments[0])) {
79
80	            waitForAll = arguments[0].waitForAll;
81	            eachCallback = arguments[0].each;
82	            finishedCallback = arguments[0].finished;
83
84	        } else {
85
86	            // Handle if using deferred object and only one param was passed in.
87	            if (arguments.length === 1 && $.type(arguments[0]) === 'boolean') {
88	                waitForAll = arguments[0];
89	            } else {
90	                finishedCallback = arguments[0];
91	                eachCallback = arguments[1];
92	                waitForAll = arguments[2];
93	            }
94
95	        }
96
97	        // Handle missing callbacks.
98	        finishedCallback = finishedCallback || $.noop;
99	        eachCallback = eachCallback || $.noop;
100
101	        // Convert waitForAll to Boolean.
102	        waitForAll = !! waitForAll;
103
104	        // Ensure callbacks are functions.
105	        if (!$.isFunction(finishedCallback) || !$.isFunction(eachCallback)) {
106	            throw new TypeError('An invalid callback was supplied.');
107	        }
108
109	        this.each(function () {
110	            // Build a list of all imgs, dependent on what images will
111	            // be considered.
112	            var obj = $(this);
113
114	            if (waitForAll) {
115
116	                // Get all elements (including the original), as any one of
117	                // them could have a background image.
118	                obj.find('*').addBack().each(function () {
119	                    var element = $(this);
120
121	                    // If an `img` element, add it. But keep iterating in
122	                    // case it has a background image too.
123	                    if (element.is('img:has-src') &&
124	                        !element.is('[srcset]')) {
125	                        allImgs.push({
126	                            src: element.attr('src'),
127	                            element: element[0]
128	                        });
129	                    }
130
131	                    $.each(hasImgProperties, function (i, property) {
132	                        var propertyValue = element.css(property);
133	                        var match;
134
135	                        // If it doesn't contain this property, skip.
136	                        if (!propertyValue) {
137	                            return true;
138	                        }
139
140	                        // Get all url() of this element.
141	                        while (match = matchUrl.exec(propertyValue)) {
142	                            allImgs.push({
143	                                src: match[2],
144	                                element: element[0]
145	                            });
146	                        }
147	                    });
148
149	                    $.each(hasImageAttributes, function (i, attribute) {
150	                        var attributeValue = element.attr(attribute);
151	                        var attributeValues;
152
153	                        // If it doesn't contain this property, skip.
154	                        if (!attributeValue) {
155	                            return true;
156	                        }
157
158	                        allImgs.push({
159	                            src: element.attr('src'),
160	                            srcset: element.attr('srcset'),
161	                            element: element[0]
162	                        });
163	                    });
164	                });
165	            } else {
166	                // For images only, the task is simpler.
167	                obj.find('img:has-src')
168	                    .each(function () {
169	                    allImgs.push({
170	                        src: this.src,
171	                        element: this
172	                    });
173	                });
174	            }
175	        });
176
177	        allImgsLength = allImgs.length;
178	        allImgsLoaded = 0;
179
180	        // If no images found, don't bother.
181	        if (allImgsLength === 0) {
182	            finishedCallback.call(originalCollection);
183	            deferred.resolveWith(originalCollection);
184	        }
185
186	        // Now that we've found all imgs in all elements in this,
187	        // load them and attach callbacks.
188	        $.each(allImgs, function (i, img) {
189
190	            var image = new Image();
191	            var events =
192	              'load.' + eventNamespace + ' error.' + eventNamespace;
193
194	            // Handle the image loading and error with the same callback.
195	            $(image).one(events, function me (event) {
196	                // If an error occurred with loading the image, set the
197	                // third argument accordingly.
198	                var eachArguments = [
199	                    allImgsLoaded,
200	                    allImgsLength,
201	                    event.type == 'load'
202	                ];
203	                allImgsLoaded++;
204
205	                eachCallback.apply(img.element, eachArguments);
206	                deferred.notifyWith(img.element, eachArguments);
207
208	                // Unbind the event listeners. I use this in addition to
209	                // `one` as one of those events won't be called (either
210	                // 'load' or 'error' will be called).
211	                $(this).off(events, me);
212
213	                if (allImgsLoaded == allImgsLength) {
214	                    finishedCallback.call(originalCollection[0]);
215	                    deferred.resolveWith(originalCollection[0]);
216	                    return false;
217	                }
218
219	            });
220
221	            if (hasSrcset && img.srcset) {
222	                image.srcset = img.srcset;
223	                image.sizes = img.sizes;
224	            }
225	            image.src = img.src;
226	        });
227
228	        return deferred.promise();
229
230	    };
231	}));
232
233
234
235/*!
236* FitVids 1.1
237*
238* Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com
239* Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/
240* Released under the WTFPL license - http://sam.zoy.org/wtfpl/
241*
242*/
243	;(function( $ ){
244
245	  'use strict';
246
247	  $.fn.fitVids = function( options ) {
248	    var settings = {
249	      customSelector: null,
250	      ignore: null
251	    };
252
253	    if(!document.getElementById('fit-vids-style')) {
254	      // appendStyles: https://github.com/toddmotto/fluidvids/blob/master/dist/fluidvids.js
255	      var head = document.head || document.getElementsByTagName('head')[0];
256	      var css = '.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}';
257	      var div = document.createElement("div");
258	      div.innerHTML = '<p>x</p><style id="fit-vids-style">' + css + '</style>';
259	      head.appendChild(div.childNodes[1]);
260	    }
261
262	    if ( options ) {
263	      $.extend( settings, options );
264	    }
265
266	    return this.each(function(){
267	      var selectors = [
268	        'iframe[src*="player.vimeo.com"]',
269	        'iframe[src*="youtube.com"]',
270	        'iframe[src*="youtube-nocookie.com"]',
271	        'iframe[src*="kickstarter.com"][src*="video.html"]',
272	        'object',
273	        'embed'
274	      ];
275
276	      if (settings.customSelector) {
277	        selectors.push(settings.customSelector);
278	      }
279
280	      var ignoreList = '.fitvidsignore';
281
282	      if(settings.ignore) {
283	        ignoreList = ignoreList + ', ' + settings.ignore;
284	      }
285
286	      var $allVideos = $(this).find(selectors.join(','));
287	      $allVideos = $allVideos.not('object object'); // SwfObj conflict patch
288	      $allVideos = $allVideos.not(ignoreList); // Disable FitVids on this video.
289
290	      $allVideos.each(function(){
291	        var $this = $(this);
292	        if($this.parents(ignoreList).length > 0) {
293	          return; // Disable FitVids on this video.
294	        }
295	        if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; }
296	        if ((!$this.css('height') && !$this.css('width')) && (isNaN($this.attr('height')) || isNaN($this.attr('width'))))
297	        {
298	          $this.attr('height', 9);
299	          $this.attr('width', 16);
300	        }
301	        var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(),
302	            width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(),
303	            aspectRatio = height / width;
304	        if(!$this.attr('name')){
305	          var videoName = 'fitvid' + $.fn.fitVids._count;
306	          $this.attr('name', videoName);
307	          $.fn.fitVids._count++;
308	        }
309	        $this.wrap('<div class="fluid-width-video-wrapper"></div>').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+'%');
310	        $this.removeAttr('height').removeAttr('width');
311	      });
312	    });
313	  };
314	  
315	  // Internal counter for unique video names.
316	  $.fn.fitVids._count = 0;
317	  
318	// Works with either jQuery or Zepto
319	})( window.jQuery || window.Zepto );
320
321
322/*
323Version: 1.6.0
324Author: Ken Wheeler
325Website: http://kenwheeler.github.io
326Docs: http://kenwheeler.github.io/slick
327Repo: http://github.com/kenwheeler/slick
328Issues: http://github.com/kenwheeler/slick/issues
329*/
330
331	/* global window, document, define, jQuery, setInterval, clearInterval */
332	;(function(factory) {
333	    'use strict';
334	    if (typeof define === 'function' && define.amd) {
335	        define(['jquery'], factory);
336	    } else if (typeof exports !== 'undefined') {
337	        module.exports = factory(require('jquery'));
338	    } else {
339	        factory(jQuery);
340	    }
341
342	}(function($) {
343	    'use strict';
344	    var Slick = window.Slick || {};
345
346	    Slick = (function() {
347
348	        var instanceUid = 0;
349
350	        function Slick(element, settings) {
351
352	            var _ = this, dataSettings;
353
354	            _.defaults = {
355	                accessibility: true,
356	                adaptiveHeight: false,
357	                appendArrows: $(element),
358	                appendDots: $(element),
359	                arrows: true,
360	                asNavFor: null,
361	                prevArrow: '<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',
362	                nextArrow: '<button class="slick-next" aria-label="Next" type="button">Next</button>',
363	                autoplay: false,
364	                autoplaySpeed: 3000,
365	                centerMode: false,
366	                centerPadding: '50px',
367	                cssEase: 'ease',
368	                customPaging: function(slider, i) {
369	                    return $('<button type="button" />').text(i + 1);
370	                },
371	                dots: false,
372	                dotsClass: 'slick-dots',
373	                draggable: true,
374	                easing: 'linear',
375	                edgeFriction: 0.35,
376	                fade: false,
377	                focusOnSelect: false,
378	                infinite: true,
379	                initialSlide: 0,
380	                lazyLoad: 'ondemand',
381	                mobileFirst: false,
382	                pauseOnHover: true,
383	                pauseOnFocus: true,
384	                pauseOnDotsHover: false,
385	                respondTo: 'window',
386	                responsive: null,
387	                rows: 1,
388	                rtl: false,
389	                slide: '',
390	                slidesPerRow: 1,
391	                slidesToShow: 1,
392	                slidesToScroll: 1,
393	                speed: 500,
394	                swipe: true,
395	                swipeToSlide: false,
396	                touchMove: true,
397	                touchThreshold: 5,
398	                useCSS: true,
399	                useTransform: true,
400	                variableWidth: false,
401	                vertical: false,
402	                verticalSwiping: false,
403	                waitForAnimate: true,
404	                zIndex: 1000
405	            };
406
407	            _.initials = {
408	                animating: false,
409	                dragging: false,
410	                autoPlayTimer: null,
411	                currentDirection: 0,
412	                currentLeft: null,
413	                currentSlide: 0,
414	                direction: 1,
415	                $dots: null,
416	                listWidth: null,
417	                listHeight: null,
418	                loadIndex: 0,
419	                $nextArrow: null,
420	                $prevArrow: null,
421	                scrolling: false,
422	                slideCount: null,
423	                slideWidth: null,
424	                $slideTrack: null,
425	                $slides: null,
426	                sliding: false,
427	                slideOffset: 0,
428	                swipeLeft: null,
429	                swiping: false,
430	                $list: null,
431	                touchObject: {},
432	                transformsEnabled: false,
vendor: 38,002 bytes, lines 433-1615
433	                unslicked: false
434	            };
435
436	            $.extend(_, _.initials);
437
438	            _.activeBreakpoint = null;
439	            _.animType = null;
440	            _.animProp = null;
441	            _.breakpoints = [];
442	            _.breakpointSettings = [];
443	            _.cssTransitions = false;
444	            _.focussed = false;
445	            _.interrupted = false;
446	            _.hidden = 'hidden';
447	            _.paused = true;
448	            _.positionProp = null;
449	            _.respondTo = null;
450	            _.rowCount = 1;
451	            _.shouldClick = true;
452	            _.$slider = $(element);
453	            _.$slidesCache = null;
454	            _.transformType = null;
455	            _.transitionType = null;
456	            _.visibilityChange = 'visibilitychange';
457	            _.windowWidth = 0;
458	            _.windowTimer = null;
459
460	            dataSettings = $(element).data('slick') || {};
461
462	            _.options = $.extend({}, _.defaults, settings, dataSettings);
463
464	            _.currentSlide = _.options.initialSlide;
465
466	            _.originalSettings = _.options;
467
468	            if (typeof document.mozHidden !== 'undefined') {
469	                _.hidden = 'mozHidden';
470	                _.visibilityChange = 'mozvisibilitychange';
471	            } else if (typeof document.webkitHidden !== 'undefined') {
472	                _.hidden = 'webkitHidden';
473	                _.visibilityChange = 'webkitvisibilitychange';
474	            }
475
476	            _.autoPlay = $.proxy(_.autoPlay, _);
477	            _.autoPlayClear = $.proxy(_.autoPlayClear, _);
478	            _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);
479	            _.changeSlide = $.proxy(_.changeSlide, _);
480	            _.clickHandler = $.proxy(_.clickHandler, _);
481	            _.selectHandler = $.proxy(_.selectHandler, _);
482	            _.setPosition = $.proxy(_.setPosition, _);
483	            _.swipeHandler = $.proxy(_.swipeHandler, _);
484	            _.dragHandler = $.proxy(_.dragHandler, _);
485	            _.keyHandler = $.proxy(_.keyHandler, _);
486
487	            _.instanceUid = instanceUid++;
488
489	            // A simple way to check for HTML strings
490	            // Strict HTML recognition (must start with <)
491	            // Extracted from jQuery v1.11 source
492	            _.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/;
493
494
495	            _.registerBreakpoints();
496	            _.init(true);
497
498	        }
499
500	        return Slick;
501
502	    }());
503
504	    Slick.prototype.activateADA = function() {
505	        var _ = this;
506
507	        _.$slideTrack.find('.slick-active').attr({
508	            'aria-hidden': 'false'
509	        }).find('a, input, button, select').attr({
510	            'tabindex': '0'
511	        });
512
513	    };
514
515	    Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {
516
517	        var _ = this;
518
519	        if (typeof(index) === 'boolean') {
520	            addBefore = index;
521	            index = null;
522	        } else if (index < 0 || (index >= _.slideCount)) {
523	            return false;
524	        }
525
526	        _.unload();
527
528	        if (typeof(index) === 'number') {
529	            if (index === 0 && _.$slides.length === 0) {
530	                $(markup).appendTo(_.$slideTrack);
531	            } else if (addBefore) {
532	                $(markup).insertBefore(_.$slides.eq(index));
533	            } else {
534	                $(markup).insertAfter(_.$slides.eq(index));
535	            }
536	        } else {
537	            if (addBefore === true) {
538	                $(markup).prependTo(_.$slideTrack);
539	            } else {
540	                $(markup).appendTo(_.$slideTrack);
541	            }
542	        }
543
544	        _.$slides = _.$slideTrack.children(this.options.slide);
545
546	        _.$slideTrack.children(this.options.slide).detach();
547
548	        _.$slideTrack.append(_.$slides);
549
550	        _.$slides.each(function(index, element) {
551	            $(element).attr('data-slick-index', index);
552	        });
553
554	        _.$slidesCache = _.$slides;
555
556	        _.reinit();
557
558	    };
559
560	    Slick.prototype.animateHeight = function() {
561	        var _ = this;
562	        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
563	            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
564	            _.$list.animate({
565	                height: targetHeight
566	            }, _.options.speed);
567	        }
568	    };
569
570	    Slick.prototype.animateSlide = function(targetLeft, callback) {
571
572	        var animProps = {},
573	            _ = this;
574
575	        _.animateHeight();
576
577	        if (_.options.rtl === true && _.options.vertical === false) {
578	            targetLeft = -targetLeft;
579	        }
580	        if (_.transformsEnabled === false) {
581	            if (_.options.vertical === false) {
582	                _.$slideTrack.animate({
583	                    left: targetLeft
584	                }, _.options.speed, _.options.easing, callback);
585	            } else {
586	                _.$slideTrack.animate({
587	                    top: targetLeft
588	                }, _.options.speed, _.options.easing, callback);
589	            }
590
591	        } else {
592
593	            if (_.cssTransitions === false) {
594	                if (_.options.rtl === true) {
595	                    _.currentLeft = -(_.currentLeft);
596	                }
597	                $({
598	                    animStart: _.currentLeft
599	                }).animate({
600	                    animStart: targetLeft
601	                }, {
602	                    duration: _.options.speed,
603	                    easing: _.options.easing,
604	                    step: function(now) {
605	                        now = Math.ceil(now);
606	                        if (_.options.vertical === false) {
607	                            animProps[_.animType] = 'translate(' +
608	                                now + 'px, 0px)';
609	                            _.$slideTrack.css(animProps);
610	                        } else {
611	                            animProps[_.animType] = 'translate(0px,' +
612	                                now + 'px)';
613	                            _.$slideTrack.css(animProps);
614	                        }
615	                    },
616	                    complete: function() {
617	                        if (callback) {
618	                            callback.call();
619	                        }
620	                    }
621	                });
622
623	            } else {
624
625	                _.applyTransition();
626	                targetLeft = Math.ceil(targetLeft);
627
628	                if (_.options.vertical === false) {
629	                    animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';
630	                } else {
631	                    animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';
632	                }
633	                _.$slideTrack.css(animProps);
634
635	                if (callback) {
636	                    setTimeout(function() {
637
638	                        _.disableTransition();
639
640	                        callback.call();
641	                    }, _.options.speed);
642	                }
643
644	            }
645
646	        }
647
648	    };
649
650	    Slick.prototype.getNavTarget = function() {
651
652	        var _ = this,
653	            asNavFor = _.options.asNavFor;
654
655	        if ( asNavFor && asNavFor !== null ) {
656	            asNavFor = $(asNavFor).not(_.$slider);
657	        }
658
659	        return asNavFor;
660
661	    };
662
663	    Slick.prototype.asNavFor = function(index) {
664
665	        var _ = this,
666	            asNavFor = _.getNavTarget();
667
668	        if ( asNavFor !== null && typeof asNavFor === 'object' ) {
669	            asNavFor.each(function() {
670	                var target = $(this).slick('getSlick');
671	                if(!target.unslicked) {
672	                    target.slideHandler(index, true);
673	                }
674	            });
675	        }
676
677	    };
678
679	    Slick.prototype.applyTransition = function(slide) {
680
681	        var _ = this,
682	            transition = {};
683
684	        if (_.options.fade === false) {
685	            transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;
686	        } else {
687	            transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;
688	        }
689
690	        if (_.options.fade === false) {
691	            _.$slideTrack.css(transition);
692	        } else {
693	            _.$slides.eq(slide).css(transition);
694	        }
695
696	    };
697
698	    Slick.prototype.autoPlay = function() {
699
700	        var _ = this;
701
702	        _.autoPlayClear();
703
704	        if ( _.slideCount > _.options.slidesToShow ) {
705	            _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );
706	        }
707
708	    };
709
710	    Slick.prototype.autoPlayClear = function() {
711
712	        var _ = this;
713
714	        if (_.autoPlayTimer) {
715	            clearInterval(_.autoPlayTimer);
716	        }
717
718	    };
719
720	    Slick.prototype.autoPlayIterator = function() {
721
722	        var _ = this,
723	            slideTo = _.currentSlide + _.options.slidesToScroll;
724
725	        if ( !_.paused && !_.interrupted && !_.focussed ) {
726
727	            if ( _.options.infinite === false ) {
728
729	                if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {
730	                    _.direction = 0;
731	                }
732
733	                else if ( _.direction === 0 ) {
734
735	                    slideTo = _.currentSlide - _.options.slidesToScroll;
736
737	                    if ( _.currentSlide - 1 === 0 ) {
738	                        _.direction = 1;
739	                    }
740
741	                }
742
743	            }
744
745	            _.slideHandler( slideTo );
746
747	        }
748
749	    };
750
751	    Slick.prototype.buildArrows = function() {
752
753	        var _ = this;
754
755	        if (_.options.arrows === true ) {
756
757	            _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');
758	            _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');
759
760	            if( _.slideCount > _.options.slidesToShow ) {
761
762	                _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
763	                _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
764
765	                if (_.htmlExpr.test(_.options.prevArrow)) {
766	                    _.$prevArrow.prependTo(_.options.appendArrows);
767	                }
768
769	                if (_.htmlExpr.test(_.options.nextArrow)) {
770	                    _.$nextArrow.appendTo(_.options.appendArrows);
771	                }
772
773	                if (_.options.infinite !== true) {
774	                    _.$prevArrow
775	                        .addClass('slick-disabled')
776	                        .attr('aria-disabled', 'true');
777	                }
778
779	            } else {
780
781	                _.$prevArrow.add( _.$nextArrow )
782
783	                    .addClass('slick-hidden')
784	                    .attr({
785	                        'aria-disabled': 'true',
786	                        'tabindex': '-1'
787	                    });
788
789	            }
790
791	        }
792
793	    };
794
795	    Slick.prototype.buildDots = function() {
796
797	        var _ = this,
798	            i, dot;
799
800	        if (_.options.dots === true) {
801
802	            _.$slider.addClass('slick-dotted');
803
804	            dot = $('<ul />').addClass(_.options.dotsClass);
805
806	            for (i = 0; i <= _.getDotCount(); i += 1) {
807	                dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));
808	            }
809
810	            _.$dots = dot.appendTo(_.options.appendDots);
811
812	            _.$dots.find('li').first().addClass('slick-active');
813
814	        }
815
816	    };
817
818	    Slick.prototype.buildOut = function() {
819
820	        var _ = this;
821
822	        _.$slides =
823	            _.$slider
824	                .children( _.options.slide + ':not(.slick-cloned)')
825	                .addClass('slick-slide');
826
827	        _.slideCount = _.$slides.length;
828
829	        _.$slides.each(function(index, element) {
830	            $(element)
831	                .attr('data-slick-index', index)
832	                .data('originalStyling', $(element).attr('style') || '');
833	        });
834
835	        _.$slider.addClass('slick-slider');
836
837	        _.$slideTrack = (_.slideCount === 0) ?
838	            $('<div class="slick-track"/>').appendTo(_.$slider) :
839	            _.$slides.wrapAll('<div class="slick-track"/>').parent();
840
841	        _.$list = _.$slideTrack.wrap(
842	            '<div class="slick-list"/>').parent();
843	        _.$slideTrack.css('opacity', 0);
844
845	        if (_.options.centerMode === true || _.options.swipeToSlide === true) {
846	            _.options.slidesToScroll = 1;
847	        }
848
849	        $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');
850
851	        _.setupInfinite();
852
853	        _.buildArrows();
854
855	        _.buildDots();
856
857	        _.updateDots();
858
859
860	        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);
861
862	        if (_.options.draggable === true) {
863	            _.$list.addClass('draggable');
864	        }
865
866	    };
867
868	    Slick.prototype.buildRows = function() {
869
870	        var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;
871
872	        newSlides = document.createDocumentFragment();
873	        originalSlides = _.$slider.children();
874
875	        if(_.options.rows > 1) {
876
877	            slidesPerSection = _.options.slidesPerRow * _.options.rows;
878	            numOfSlides = Math.ceil(
879	                originalSlides.length / slidesPerSection
880	            );
881
882	            for(a = 0; a < numOfSlides; a++){
883	                var slide = document.createElement('div');
884	                for(b = 0; b < _.options.rows; b++) {
885	                    var row = document.createElement('div');
886	                    for(c = 0; c < _.options.slidesPerRow; c++) {
887	                        var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));
888	                        if (originalSlides.get(target)) {
889	                            row.appendChild(originalSlides.get(target));
890	                        }
891	                    }
892	                    slide.appendChild(row);
893	                }
894	                newSlides.appendChild(slide);
895	            }
896
897	            _.$slider.empty().append(newSlides);
898	            _.$slider.children().children().children()
899	                .css({
900	                    'width':(100 / _.options.slidesPerRow) + '%',
901	                    'display': 'inline-block'
902	                });
903
904	        }
905
906	    };
907
908	    Slick.prototype.checkResponsive = function(initial, forceUpdate) {
909
910	        var _ = this,
911	            breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;
912	        var sliderWidth = _.$slider.width();
913	        var windowWidth = window.innerWidth || $(window).width();
914
915	        if (_.respondTo === 'window') {
916	            respondToWidth = windowWidth;
917	        } else if (_.respondTo === 'slider') {
918	            respondToWidth = sliderWidth;
919	        } else if (_.respondTo === 'min') {
920	            respondToWidth = Math.min(windowWidth, sliderWidth);
921	        }
922
923	        if ( _.options.responsive &&
924	            _.options.responsive.length &&
925	            _.options.responsive !== null) {
926
927	            targetBreakpoint = null;
928
929	            for (breakpoint in _.breakpoints) {
930	                if (_.breakpoints.hasOwnProperty(breakpoint)) {
931	                    if (_.originalSettings.mobileFirst === false) {
932	                        if (respondToWidth < _.breakpoints[breakpoint]) {
933	                            targetBreakpoint = _.breakpoints[breakpoint];
934	                        }
935	                    } else {
936	                        if (respondToWidth > _.breakpoints[breakpoint]) {
937	                            targetBreakpoint = _.breakpoints[breakpoint];
938	                        }
939	                    }
940	                }
941	            }
942
943	            if (targetBreakpoint !== null) {
944	                if (_.activeBreakpoint !== null) {
945	                    if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {
946	                        _.activeBreakpoint =
947	                            targetBreakpoint;
948	                        if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
949	                            _.unslick(targetBreakpoint);
950	                        } else {
951	                            _.options = $.extend({}, _.originalSettings,
952	                                _.breakpointSettings[
953	                                    targetBreakpoint]);
954	                            if (initial === true) {
955	                                _.currentSlide = _.options.initialSlide;
956	                            }
957	                            _.refresh(initial);
958	                        }
959	                        triggerBreakpoint = targetBreakpoint;
960	                    }
961	                } else {
962	                    _.activeBreakpoint = targetBreakpoint;
963	                    if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
964	                        _.unslick(targetBreakpoint);
965	                    } else {
966	                        _.options = $.extend({}, _.originalSettings,
967	                            _.breakpointSettings[
968	                                targetBreakpoint]);
969	                        if (initial === true) {
970	                            _.currentSlide = _.options.initialSlide;
971	                        }
972	                        _.refresh(initial);
973	                    }
974	                    triggerBreakpoint = targetBreakpoint;
975	                }
976	            } else {
977	                if (_.activeBreakpoint !== null) {
978	                    _.activeBreakpoint = null;
979	                    _.options = _.originalSettings;
980	                    if (initial === true) {
981	                        _.currentSlide = _.options.initialSlide;
982	                    }
983	                    _.refresh(initial);
984	                    triggerBreakpoint = targetBreakpoint;
985	                }
986	            }
987
988	            // only trigger breakpoints during an actual break. not on initialize.
989	            if( !initial && triggerBreakpoint !== false ) {
990	                _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);
991	            }
992	        }
993
994	    };
995
996	    Slick.prototype.changeSlide = function(event, dontAnimate) {
997
998	        var _ = this,
999	            $target = $(event.currentTarget),
1000	            indexOffset, slideOffset, unevenOffset;
1001
1002	        // If target is a link, prevent default action.
1003	        if($target.is('a')) {
1004	            event.preventDefault();
1005	        }
1006
1007	        // If target is not the <li> element (ie: a child), find the <li>.
1008	        if(!$target.is('li')) {
1009	            $target = $target.closest('li');
1010	        }
1011
1012	        unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);
1013	        indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;
1014
1015	        switch (event.data.message) {
1016
1017	            case 'previous':
1018	                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;
1019	                if (_.slideCount > _.options.slidesToShow) {
1020	                    _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);
1021	                }
1022	                break;
1023
1024	            case 'next':
1025	                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;
1026	                if (_.slideCount > _.options.slidesToShow) {
1027	                    _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);
1028	                }
1029	                break;
1030
1031	            case 'index':
1032	                var index = event.data.index === 0 ? 0 :
1033	                    event.data.index || $target.index() * _.options.slidesToScroll;
1034
1035	                _.slideHandler(_.checkNavigable(index), false, dontAnimate);
1036	                $target.children().trigger('focus');
1037	                break;
1038
1039	            default:
1040	                return;
1041	        }
1042
1043	    };
1044
1045	    Slick.prototype.checkNavigable = function(index) {
1046
1047	        var _ = this,
1048	            navigables, prevNavigable;
1049
1050	        navigables = _.getNavigableIndexes();
1051	        prevNavigable = 0;
1052	        if (index > navigables[navigables.length - 1]) {
1053	            index = navigables[navigables.length - 1];
1054	        } else {
1055	            for (var n in navigables) {
1056	                if (index < navigables[n]) {
1057	                    index = prevNavigable;
1058	                    break;
1059	                }
1060	                prevNavigable = navigables[n];
1061	            }
1062	        }
1063
1064	        return index;
1065	    };
1066
1067	    Slick.prototype.cleanUpEvents = function() {
1068
1069	        var _ = this;
1070
1071	        if (_.options.dots && _.$dots !== null) {
1072
1073	            $('li', _.$dots)
1074	                .off('click.slick', _.changeSlide)
1075	                .off('mouseenter.slick', $.proxy(_.interrupt, _, true))
1076	                .off('mouseleave.slick', $.proxy(_.interrupt, _, false));
1077
1078	            if (_.options.accessibility === true) {
1079	                _.$dots.off('keydown.slick', _.keyHandler);
1080	            }
1081	        }
1082
1083	        _.$slider.off('focus.slick blur.slick');
1084
1085	        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
1086	            _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);
1087	            _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);
1088
1089	            if (_.options.accessibility === true) {
1090	                _.$prevArrow.off('keydown.slick', _.keyHandler);
1091	                _.$nextArrow.off('keydown.slick', _.keyHandler);
1092	            }
1093	        }
1094
1095	        _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);
1096	        _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);
1097	        _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);
1098	        _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);
1099
1100	        _.$list.off('click.slick', _.clickHandler);
1101
1102	        $(document).off(_.visibilityChange, _.visibility);
1103
1104	        _.cleanUpSlideEvents();
1105
1106	        if (_.options.accessibility === true) {
1107	            _.$list.off('keydown.slick', _.keyHandler);
1108	        }
1109
1110	        if (_.options.focusOnSelect === true) {
1111	            $(_.$slideTrack).children().off('click.slick', _.selectHandler);
1112	        }
1113
1114	        $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);
1115
1116	        $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);
1117
1118	        $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);
1119
1120	        $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);
1121
1122	    };
1123
1124	    Slick.prototype.cleanUpSlideEvents = function() {
1125
1126	        var _ = this;
1127
1128	        _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));
1129	        _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));
1130
1131	    };
1132
1133	    Slick.prototype.cleanUpRows = function() {
1134
1135	        var _ = this, originalSlides;
1136
1137	        if(_.options.rows > 1) {
1138	            originalSlides = _.$slides.children().children();
1139	            originalSlides.removeAttr('style');
1140	            _.$slider.empty().append(originalSlides);
1141	        }
1142
1143	    };
1144
1145	    Slick.prototype.clickHandler = function(event) {
1146
1147	        var _ = this;
1148
1149	        if (_.shouldClick === false) {
1150	            event.stopImmediatePropagation();
1151	            event.stopPropagation();
1152	            event.preventDefault();
1153	        }
1154
1155	    };
1156
1157	    Slick.prototype.destroy = function(refresh) {
1158
1159	        var _ = this;
1160
1161	        _.autoPlayClear();
1162
1163	        _.touchObject = {};
1164
1165	        _.cleanUpEvents();
1166
1167	        $('.slick-cloned', _.$slider).detach();
1168
1169	        if (_.$dots) {
1170	            _.$dots.remove();
1171	        }
1172
1173	        if ( _.$prevArrow && _.$prevArrow.length ) {
1174
1175	            _.$prevArrow
1176	                .removeClass('slick-disabled slick-arrow slick-hidden')
1177	                .removeAttr('aria-hidden aria-disabled tabindex')
1178	                .css('display','');
1179
1180	            if ( _.htmlExpr.test( _.options.prevArrow )) {
1181	                _.$prevArrow.remove();
1182	            }
1183	        }
1184
1185	        if ( _.$nextArrow && _.$nextArrow.length ) {
1186
1187	            _.$nextArrow
1188	                .removeClass('slick-disabled slick-arrow slick-hidden')
1189	                .removeAttr('aria-hidden aria-disabled tabindex')
1190	                .css('display','');
1191
1192	            if ( _.htmlExpr.test( _.options.nextArrow )) {
1193	                _.$nextArrow.remove();
1194	            }
1195	        }
1196
1197
1198	        if (_.$slides) {
1199
1200	            _.$slides
1201	                .removeClass('slick-slide slick-active slick-center slick-visible slick-current')
1202	                .removeAttr('aria-hidden')
1203	                .removeAttr('data-slick-index')
1204	                .each(function(){
1205	                    $(this).attr('style', $(this).data('originalStyling'));
1206	                });
1207
1208	            _.$slideTrack.children(this.options.slide).detach();
1209
1210	            _.$slideTrack.detach();
1211
1212	            _.$list.detach();
1213
1214	            _.$slider.append(_.$slides);
1215	        }
1216
1217	        _.cleanUpRows();
1218
1219	        _.$slider.removeClass('slick-slider');
1220	        _.$slider.removeClass('slick-initialized');
1221	        _.$slider.removeClass('slick-dotted');
1222
1223	        _.unslicked = true;
1224
1225	        if(!refresh) {
1226	            _.$slider.trigger('destroy', [_]);
1227	        }
1228
1229	    };
1230
1231	    Slick.prototype.disableTransition = function(slide) {
1232
1233	        var _ = this,
1234	            transition = {};
1235
1236	        transition[_.transitionType] = '';
1237
1238	        if (_.options.fade === false) {
1239	            _.$slideTrack.css(transition);
1240	        } else {
1241	            _.$slides.eq(slide).css(transition);
1242	        }
1243
1244	    };
1245
1246	    Slick.prototype.fadeSlide = function(slideIndex, callback) {
1247
1248	        var _ = this;
1249
1250	        if (_.cssTransitions === false) {
1251
1252	            _.$slides.eq(slideIndex).css({
1253	                zIndex: _.options.zIndex
1254	            });
1255
1256	            _.$slides.eq(slideIndex).animate({
1257	                opacity: 1
1258	            }, _.options.speed, _.options.easing, callback);
1259
1260	        } else {
1261
1262	            _.applyTransition(slideIndex);
1263
1264	            _.$slides.eq(slideIndex).css({
1265	                opacity: 1,
1266	                zIndex: _.options.zIndex
1267	            });
1268
1269	            if (callback) {
1270	                setTimeout(function() {
1271
1272	                    _.disableTransition(slideIndex);
1273
1274	                    callback.call();
1275	                }, _.options.speed);
1276	            }
1277
1278	        }
1279
1280	    };
1281
1282	    Slick.prototype.fadeSlideOut = function(slideIndex) {
1283
1284	        var _ = this;
1285
1286	        if (_.cssTransitions === false) {
1287
1288	            _.$slides.eq(slideIndex).animate({
1289	                opacity: 0,
1290	                zIndex: _.options.zIndex - 2
1291	            }, _.options.speed, _.options.easing);
1292
1293	        } else {
1294
1295	            _.applyTransition(slideIndex);
1296
1297	            _.$slides.eq(slideIndex).css({
1298	                opacity: 0,
1299	                zIndex: _.options.zIndex - 2
1300	            });
1301
1302	        }
1303
1304	    };
1305
1306	    Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {
1307
1308	        var _ = this;
1309
1310	        if (filter !== null) {
1311
1312	            _.$slidesCache = _.$slides;
1313
1314	            _.unload();
1315
1316	            _.$slideTrack.children(this.options.slide).detach();
1317
1318	            _.$slidesCache.filter(filter).appendTo(_.$slideTrack);
1319
1320	            _.reinit();
1321
1322	        }
1323
1324	    };
1325
1326	    Slick.prototype.focusHandler = function() {
1327
1328	        var _ = this;
1329
1330	        _.$slider
1331	            .off('focus.slick blur.slick')
1332	            .on('focus.slick blur.slick', '*', function(event) {
1333
1334	            event.stopImmediatePropagation();
1335	            var $sf = $(this);
1336
1337	            setTimeout(function() {
1338
1339	                if( _.options.pauseOnFocus ) {
1340	                    _.focussed = $sf.is(':focus');
1341	                    _.autoPlay();
1342	                }
1343
1344	            }, 0);
1345
1346	        });
1347	    };
1348
1349	    Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {
1350
1351	        var _ = this;
1352	        return _.currentSlide;
1353
1354	    };
1355
1356	    Slick.prototype.getDotCount = function() {
1357
1358	        var _ = this;
1359
1360	        var breakPoint = 0;
1361	        var counter = 0;
1362	        var pagerQty = 0;
1363
1364	        if (_.options.infinite === true) {
1365	            if (_.slideCount <= _.options.slidesToShow) {
1366	                 ++pagerQty;
1367	            } else {
1368	                while (breakPoint < _.slideCount) {
1369	                    ++pagerQty;
1370	                    breakPoint = counter + _.options.slidesToScroll;
1371	                    counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
1372	                }
1373	            }
1374	        } else if (_.options.centerMode === true) {
1375	            pagerQty = _.slideCount;
1376	        } else if(!_.options.asNavFor) {
1377	            pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);
1378	        }else {
1379	            while (breakPoint < _.slideCount) {
1380	                ++pagerQty;
1381	                breakPoint = counter + _.options.slidesToScroll;
1382	                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
1383	            }
1384	        }
1385
1386	        return pagerQty - 1;
1387
1388	    };
1389
1390	    Slick.prototype.getLeft = function(slideIndex) {
1391
1392	        var _ = this,
1393	            targetLeft,
1394	            verticalHeight,
1395	            verticalOffset = 0,
1396	            targetSlide,
1397	            coef;
1398
1399	        _.slideOffset = 0;
1400	        verticalHeight = _.$slides.first().outerHeight(true);
1401
1402	        if (_.options.infinite === true) {
1403	            if (_.slideCount > _.options.slidesToShow) {
1404	                _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;
1405	                coef = -1
1406	                
1407	                if (_.options.vertical === true && _.options.centerMode === true) {
1408	                    if (_.options.slidesToShow === 2) {
1409	                        coef = -1.5;
1410	                    } else if (_.options.slidesToShow === 1) {
1411	                        coef = -2
1412	                    }
1413	                }
1414	                verticalOffset = (verticalHeight * _.options.slidesToShow) * coef;
1415	            }
1416	            if (_.slideCount % _.options.slidesToScroll !== 0) {
1417	                if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {
1418	                    if (slideIndex > _.slideCount) {
1419	                        _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;
1420	                        verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;
1421	                    } else {
1422	                        _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;
1423	                        verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;
1424	                    }
1425	                }
1426	            }
1427	        } else {
1428	            if (slideIndex + _.options.slidesToShow > _.slideCount) {
1429	                _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;
1430	                verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;
1431	            }
1432	        }
1433
1434	        if (_.slideCount <= _.options.slidesToShow) {
1435	            _.slideOffset = 0;
1436	            verticalOffset = 0;
1437	        }
1438
1439	        if (_.options.centerMode === true && _.slideCount <= _.options.slidesToShow) {
1440	            _.slideOffset = ((_.slideWidth * Math.floor(_.options.slidesToShow)) / 2) - ((_.slideWidth * _.slideCount) / 2);
1441	        } else if (_.options.centerMode === true && _.options.infinite === true) {
1442	            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;
1443	        } else if (_.options.centerMode === true) {
1444	            _.slideOffset = 0;
1445	            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);
1446	        }
1447
1448	        if (_.options.vertical === false) {
1449	            targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;
1450	        } else {
1451	            targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;
1452	        }
1453
1454	        if (_.options.variableWidth === true) {
1455
1456	            if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
1457	                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
1458	            } else {
1459	                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);
1460	            }
1461
1462	            if (_.options.rtl === true) {
1463	                if (targetSlide[0]) {
1464	                    targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
1465	                } else {
1466	                    targetLeft =  0;
1467	                }
1468	            } else {
1469	                targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
1470	            }
1471
1472	            if (_.options.centerMode === true) {
1473	                if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
1474	                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
1475	                } else {
1476	                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);
1477	                }
1478
1479	                if (_.options.rtl === true) {
1480	                    if (targetSlide[0]) {
1481	                        targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
1482	                    } else {
1483	                        targetLeft =  0;
1484	                    }
1485	                } else {
1486	                    targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
1487	                }
1488
1489	                targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;
1490	            }
1491	        }
1492
1493	        return targetLeft;
1494
1495	    };
1496
1497	    Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {
1498
1499	        var _ = this;
1500
1501	        return _.options[option];
1502
1503	    };
1504
1505	    Slick.prototype.getNavigableIndexes = function() {
1506
1507	        var _ = this,
1508	            breakPoint = 0,
1509	            counter = 0,
1510	            indexes = [],
1511	            max;
1512
1513	        if (_.options.infinite === false) {
1514	            max = _.slideCount;
1515	        } else {
1516	            breakPoint = _.options.slidesToScroll * -1;
1517	            counter = _.options.slidesToScroll * -1;
1518	            max = _.slideCount * 2;
1519	        }
1520
1521	        while (breakPoint < max) {
1522	            indexes.push(breakPoint);
1523	            breakPoint = counter + _.options.slidesToScroll;
1524	            counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
1525	        }
1526
1527	        return indexes;
1528
1529	    };
1530
1531	    Slick.prototype.getSlick = function() {
1532
1533	        return this;
1534
1535	    };
1536
1537	    Slick.prototype.getSlideCount = function() {
1538
1539	        var _ = this,
1540	            slidesTraversed, swipedSlide, centerOffset;
1541
1542	        centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;
1543
1544	        if (_.options.swipeToSlide === true) {
1545	            _.$slideTrack.find('.slick-slide').each(function(index, slide) {
1546	                if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {
1547	                    swipedSlide = slide;
1548	                    return false;
1549	                }
1550	            });
1551
1552	            slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;
1553
1554	            return slidesTraversed;
1555
1556	        } else {
1557	            return _.options.slidesToScroll;
1558	        }
1559
1560	    };
1561
1562	    Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {
1563
1564	        var _ = this;
1565
1566	        _.changeSlide({
1567	            data: {
1568	                message: 'index',
1569	                index: parseInt(slide)
1570	            }
1571	        }, dontAnimate);
1572
1573	    };
1574
1575	    Slick.prototype.init = function(creation) {
1576
1577	        var _ = this;
1578
1579	        if (!$(_.$slider).hasClass('slick-initialized')) {
1580
1581	            $(_.$slider).addClass('slick-initialized');
1582
1583	            _.buildRows();
1584	            _.buildOut();
1585	            _.setProps();
1586	            _.startLoad();
1587	            _.loadSlider();
1588	            _.initializeEvents();
1589	            _.updateArrows();
1590	            _.updateDots();
1591	            _.checkResponsive(true);
1592	            _.focusHandler();
1593
1594	        }
1595
1596	        if (creation) {
1597	            _.$slider.trigger('init', [_]);
1598	        }
1599
1600	        if (_.options.accessibility === true) {
1601	            _.initADA();
1602	        }
1603
1604	        if ( _.options.autoplay ) {
1605
1606	            _.paused = false;
1607	            _.autoPlay();
1608
1609	        }
1610
1611	    };
1612
1613	    Slick.prototype.initADA = function() {
1614	        var _ = this,
1615	                numDotGroups = Math.ceil(_.slideCount / _.options.slidesToShow),
1616	                tabControlIndexes = _.getNavigableIndexes().filter(function(val) {
1617	                    return (val >= 0) && (val < _.slideCount);
1618	                });
1619
1620	        _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({
1621	            'aria-hidden': 'true',
1622	            'tabindex': '-1'
1623	        }).find('a, input, button, select').attr({
1624	            'tabindex': '-1'
1625	        });
1626
1627	        if (_.$dots !== null) {
1628	            _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {
1629	                var slideControlIndex = tabControlIndexes.indexOf(i);
1630
1631	                $(this).attr({
1632	                    'role': 'tabpanel',
1633	                    'id': 'slick-slide' + _.instanceUid + i,
1634	                    'tabindex': -1
1635	                });            
1636
1637	                if (slideControlIndex !== -1) {
1638	                    $(this).attr({
1639	                        'aria-describedby': 'slick-slide-control' + _.instanceUid + slideControlIndex
1640	                    });
1641	                }
1642	            });
1643
1644	            _.$dots.attr('role', 'tablist').find('li').each(function(i) {
1645	                var mappedSlideIndex = tabControlIndexes[i];
1646	        
1647	                $(this).attr({
1648	                    'role': 'presentation'
1649	                });
1650
1651	                $(this).find('button').first().attr({
1652	                    'role': 'tab',
1653	                    'id': 'slick-slide-control' + _.instanceUid + i,
1654	                    'aria-controls': 'slick-slide' + _.instanceUid + mappedSlideIndex,
1655	                    'aria-label': (i + 1) + ' of ' + numDotGroups,
1656	                    'aria-selected': null,
1657	                    'tabindex': '-1'
1658	                });
1659
1660	            }).eq(_.currentSlide).find('button').attr({
1661	                'aria-selected': 'true',
1662	                'tabindex': '0'
1663	            }).end();
1664	        }
1665
1666	        for (var i=_.currentSlide, max=i+_.options.slidesToShow; i < max; i++) {
1667	            _.$slides.eq(i).attr('tabindex', 0);
1668	        }
1669
1670	        _.activateADA();
1671
1672	    };
1673
1674	    Slick.prototype.initArrowEvents = function() {
1675
1676	        var _ = this;
1677
1678	        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
1679	            _.$prevArrow
1680	               .off('click.slick')
1681	               .on('click.slick', {
1682	                    message: 'previous'
1683	               }, _.changeSlide);
1684	            _.$nextArrow
1685	               .off('click.slick')
1686	               .on('click.slick', {
1687	                    message: 'next'
1688	               }, _.changeSlide);
1689
1690	            if (_.options.accessibility === true) {
1691	                _.$prevArrow.on('keydown.slick', _.keyHandler);
1692	                _.$nextArrow.on('keydown.slick', _.keyHandler);
1693	            }   
1694	        }
1695
1696	    };
1697
1698	    Slick.prototype.initDotEvents = function() {
1699
1700	        var _ = this;
1701
1702	        if (_.options.dots === true) {
1703	            $('li', _.$dots).on('click.slick', {
1704	                message: 'index'
1705	            }, _.changeSlide);
1706
1707	            if (_.options.accessibility === true) {
1708	                _.$dots.on('keydown.slick', _.keyHandler);
1709	            }
1710	        }
1711
1712	        if ( _.options.dots === true && _.options.pauseOnDotsHover === true ) {
1713
1714	            $('li', _.$dots)
1715	                .on('mouseenter.slick', $.proxy(_.interrupt, _, true))
1716	                .on('mouseleave.slick', $.proxy(_.interrupt, _, false));
1717
1718	        }
1719
1720	    };
1721
1722	    Slick.prototype.initSlideEvents = function() {
1723
1724	        var _ = this;
1725
1726	        if ( _.options.pauseOnHover ) {
1727
1728	            _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));
1729	            _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));
1730
1731	        }
1732
1733	    };
1734
1735	    Slick.prototype.initializeEvents = function() {
1736
1737	        var _ = this;
1738
1739	        _.initArrowEvents();
1740
1741	        _.initDotEvents();
1742	        _.initSlideEvents();
1743
1744	        _.$list.on('touchstart.slick mousedown.slick', {
1745	            action: 'start'
1746	        }, _.swipeHandler);
1747	        _.$list.on('touchmove.slick mousemove.slick', {
1748	            action: 'move'
1749	        }, _.swipeHandler);
1750	        _.$list.on('touchend.slick mouseup.slick', {
1751	            action: 'end'
1752	        }, _.swipeHandler);
vendor: 44,455 bytes, lines 1753-3216
1753	        _.$list.on('touchcancel.slick mouseleave.slick', {
1754	            action: 'end'
1755	        }, _.swipeHandler);
1756
1757	        _.$list.on('click.slick', _.clickHandler);
1758
1759	        $(document).on(_.visibilityChange, $.proxy(_.visibility, _));
1760
1761	        if (_.options.accessibility === true) {
1762	            _.$list.on('keydown.slick', _.keyHandler);
1763	        }
1764
1765	        if (_.options.focusOnSelect === true) {
1766	            $(_.$slideTrack).children().on('click.slick', _.selectHandler);
1767	        }
1768
1769	        $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));
1770
1771	        $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));
1772
1773	        $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);
1774
1775	        $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);
1776	        $(_.setPosition);
1777
1778	    };
1779
1780	    Slick.prototype.initUI = function() {
1781
1782	        var _ = this;
1783
1784	        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
1785
1786	            _.$prevArrow.show();
1787	            _.$nextArrow.show();
1788
1789	        }
1790
1791	        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
1792
1793	            _.$dots.show();
1794
1795	        }
1796
1797	    };
1798
1799	    Slick.prototype.keyHandler = function(event) {
1800
1801	        var _ = this;
1802	         //Dont slide if the cursor is inside the form fields and arrow keys are pressed
1803	        if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {
1804	            if (event.keyCode === 37 && _.options.accessibility === true) {
1805	                _.changeSlide({
1806	                    data: {
1807	                        message: _.options.rtl === true ? 'next' :  'previous'
1808	                    }
1809	                });
1810	            } else if (event.keyCode === 39 && _.options.accessibility === true) {
1811	                _.changeSlide({
1812	                    data: {
1813	                        message: _.options.rtl === true ? 'previous' : 'next'
1814	                    }
1815	                });
1816	            }
1817	        }
1818
1819	    };
1820
1821	    Slick.prototype.lazyLoad = function() {
1822
1823	        var _ = this,
1824	            loadRange, cloneRange, rangeStart, rangeEnd;
1825
1826	        function loadImages(imagesScope) {
1827
1828	            $('img[data-lazy]', imagesScope).each(function() {
1829
1830	                var image = $(this),
1831	                    imageSource = $(this).attr('data-lazy'),
1832	                    imageSrcSet = $(this).attr('data-srcset'),
1833	                    imageSizes  = $(this).attr('data-sizes') || _.$slider.attr('data-sizes'),
1834	                    imageToLoad = document.createElement('img');
1835
1836	                imageToLoad.onload = function() {
1837
1838	                    image
1839	                        .animate({ opacity: 0 }, 100, function() {
1840
1841	                            if (imageSrcSet) {
1842	                                image
1843	                                    .attr('srcset', imageSrcSet );
1844
1845	                                if (imageSizes) {
1846	                                    image
1847	                                        .attr('sizes', imageSizes );
1848	                                }
1849	                            }
1850
1851	                            image
1852	                                .attr('src', imageSource)
1853	                                .animate({ opacity: 1 }, 200, function() {
1854	                                    image
1855	                                        .removeAttr('data-lazy data-srcset data-sizes')
1856	                                        .removeClass('slick-loading');
1857	                                });
1858	                            _.$slider.trigger('lazyLoaded', [_, image, imageSource]);
1859	                        });
1860
1861	                };
1862
1863	                imageToLoad.onerror = function() {
1864
1865	                    image
1866	                        .removeAttr( 'data-lazy' )
1867	                        .removeClass( 'slick-loading' )
1868	                        .addClass( 'slick-lazyload-error' );
1869
1870	                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);
1871
1872	                };
1873
1874	                imageToLoad.src = imageSource;
1875
1876	            });
1877
1878	        }
1879
1880	        if (_.options.centerMode === true) {
1881	            if (_.options.infinite === true) {
1882	                rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);
1883	                rangeEnd = rangeStart + _.options.slidesToShow + 2;
1884	            } else {
1885	                rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));
1886	                rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;
1887	            }
1888	        } else {
1889	            rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;
1890	            rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);
1891	            if (_.options.fade === true) {
1892	                if (rangeStart > 0) rangeStart--;
1893	                if (rangeEnd <= _.slideCount) rangeEnd++;
1894	            }
1895	        }
1896
1897	        loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);
1898
1899	        if (_.options.lazyLoad === 'anticipated') {
1900	            var prevSlide = rangeStart - 1,
1901	                nextSlide = rangeEnd,
1902	                $slides = _.$slider.find('.slick-slide');
1903
1904	            for (var i = 0; i < _.options.slidesToScroll; i++) {
1905	                if (prevSlide < 0) prevSlide = _.slideCount - 1;
1906	                loadRange = loadRange.add($slides.eq(prevSlide));
1907	                loadRange = loadRange.add($slides.eq(nextSlide));
1908	                prevSlide--;
1909	                nextSlide++;
1910	            }
1911	        }
1912
1913	        loadImages(loadRange);
1914
1915	        if (_.slideCount <= _.options.slidesToShow) {
1916	            cloneRange = _.$slider.find('.slick-slide');
1917	            loadImages(cloneRange);
1918	        } else
1919	        if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {
1920	            cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);
1921	            loadImages(cloneRange);
1922	        } else if (_.currentSlide === 0) {
1923	            cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);
1924	            loadImages(cloneRange);
1925	        }
1926
1927	    };
1928
1929	    Slick.prototype.loadSlider = function() {
1930
1931	        var _ = this;
1932
1933	        _.setPosition();
1934
1935	        _.$slideTrack.css({
1936	            opacity: 1
1937	        });
1938
1939	        _.$slider.removeClass('slick-loading');
1940
1941	        _.initUI();
1942
1943	        if (_.options.lazyLoad === 'progressive') {
1944	            _.progressiveLazyLoad();
1945	        }
1946
1947	    };
1948
1949	    Slick.prototype.next = Slick.prototype.slickNext = function() {
1950
1951	        var _ = this;
1952
1953	        _.changeSlide({
1954	            data: {
1955	                message: 'next'
1956	            }
1957	        });
1958
1959	    };
1960
1961	    Slick.prototype.orientationChange = function() {
1962
1963	        var _ = this;
1964
1965	        _.checkResponsive();
1966	        _.setPosition();
1967
1968	    };
1969
1970	    Slick.prototype.pause = Slick.prototype.slickPause = function() {
1971
1972	        var _ = this;
1973
1974	        _.autoPlayClear();
1975	        _.paused = true;
1976
1977	    };
1978
1979	    Slick.prototype.play = Slick.prototype.slickPlay = function() {
1980
1981	        var _ = this;
1982
1983	        _.autoPlay();
1984	        _.options.autoplay = true;
1985	        _.paused = false;
1986	        _.focussed = false;
1987	        _.interrupted = false;
1988
1989	    };
1990
1991	    Slick.prototype.postSlide = function(index) {
1992
1993	        var _ = this;
1994
1995	        if( !_.unslicked ) {
1996
1997	            _.$slider.trigger('afterChange', [_, index]);
1998
1999	            _.animating = false;
2000
2001	            if (_.slideCount > _.options.slidesToShow) {
2002	                _.setPosition();
2003	            }
2004
2005	            _.swipeLeft = null;
2006
2007	            if ( _.options.autoplay ) {
2008	                _.autoPlay();
2009	            }
2010
2011	            if (_.options.accessibility === true) {
2012	                _.initADA();
2013	                // for non-autoplay: once active slide (group) has updated, set focus on first newly showing slide 
2014	                if (!_.options.autoplay) {
2015	                    var $currentSlide = $(_.$slides.get(_.currentSlide));
2016	                    $currentSlide.attr('tabindex', 0).focus();
2017	                }
2018	            }
2019
2020	        }
2021
2022	    };
2023
2024	    Slick.prototype.prev = Slick.prototype.slickPrev = function() {
2025
2026	        var _ = this;
2027
2028	        _.changeSlide({
2029	            data: {
2030	                message: 'previous'
2031	            }
2032	        });
2033
2034	    };
2035
2036	    Slick.prototype.preventDefault = function(event) {
2037
2038	        event.preventDefault();
2039
2040	    };
2041
2042	    Slick.prototype.progressiveLazyLoad = function( tryCount ) {
2043
2044	        tryCount = tryCount || 1;
2045
2046	        var _ = this,
2047	            $imgsToLoad = $( 'img[data-lazy]', _.$slider ),
2048	            image,
2049	            imageSource,
2050	            imageSrcSet,
2051	            imageSizes,
2052	            imageToLoad;
2053
2054	        if ( $imgsToLoad.length ) {
2055
2056	            image = $imgsToLoad.first();
2057	            imageSource = image.attr('data-lazy');
2058	            imageSrcSet = image.attr('data-srcset');
2059	            imageSizes  = image.attr('data-sizes') || _.$slider.attr('data-sizes');
2060	            imageToLoad = document.createElement('img');
2061
2062	            imageToLoad.onload = function() {
2063
2064	                if (imageSrcSet) {
2065	                    image
2066	                        .attr('srcset', imageSrcSet );
2067
2068	                    if (imageSizes) {
2069	                        image
2070	                            .attr('sizes', imageSizes );
2071	                    }
2072	                }
2073
2074	                image
2075	                    .attr( 'src', imageSource )
2076	                    .removeAttr('data-lazy data-srcset data-sizes')
2077	                    .removeClass('slick-loading');
2078
2079	                if ( _.options.adaptiveHeight === true ) {
2080	                    _.setPosition();
2081	                }
2082
2083	                _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);
2084	                _.progressiveLazyLoad();
2085
2086	            };
2087
2088	            imageToLoad.onerror = function() {
2089
2090	                if ( tryCount < 3 ) {
2091
2092	                    /**
2093	                     * try to load the image 3 times,
2094	                     * leave a slight delay so we don't get
2095	                     * servers blocking the request.
2096	                     */
2097	                    setTimeout( function() {
2098	                        _.progressiveLazyLoad( tryCount + 1 );
2099	                    }, 500 );
2100
2101	                } else {
2102
2103	                    image
2104	                        .removeAttr( 'data-lazy' )
2105	                        .removeClass( 'slick-loading' )
2106	                        .addClass( 'slick-lazyload-error' );
2107
2108	                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);
2109
2110	                    _.progressiveLazyLoad();
2111
2112	                }
2113
2114	            };
2115
2116	            imageToLoad.src = imageSource;
2117
2118	        } else {
2119
2120	            _.$slider.trigger('allImagesLoaded', [ _ ]);
2121
2122	        }
2123
2124	    };
2125
2126	    Slick.prototype.refresh = function( initializing ) {
2127
2128	        var _ = this, currentSlide, lastVisibleIndex;
2129
2130	        lastVisibleIndex = _.slideCount - _.options.slidesToShow;
2131
2132	        // in non-infinite sliders, we don't want to go past the
2133	        // last visible index.
2134	        if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {
2135	            _.currentSlide = lastVisibleIndex;
2136	        }
2137
2138	        // if less slides than to show, go to start.
2139	        if ( _.slideCount <= _.options.slidesToShow ) {
2140	            _.currentSlide = 0;
2141
2142	        }
2143
2144	        currentSlide = _.currentSlide;
2145
2146	        _.destroy(true);
2147
2148	        $.extend(_, _.initials, { currentSlide: currentSlide });
2149
2150	        _.init();
2151
2152	        if( !initializing ) {
2153
2154	            _.changeSlide({
2155	                data: {
2156	                    message: 'index',
2157	                    index: currentSlide
2158	                }
2159	            }, false);
2160
2161	        }
2162
2163	    };
2164
2165	    Slick.prototype.registerBreakpoints = function() {
2166
2167	        var _ = this, breakpoint, currentBreakpoint, l,
2168	            responsiveSettings = _.options.responsive || null;
2169
2170	        if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {
2171
2172	            _.respondTo = _.options.respondTo || 'window';
2173
2174	            for ( breakpoint in responsiveSettings ) {
2175
2176	                l = _.breakpoints.length-1;
2177
2178	                if (responsiveSettings.hasOwnProperty(breakpoint)) {
2179	                    currentBreakpoint = responsiveSettings[breakpoint].breakpoint;
2180
2181	                    // loop through the breakpoints and cut out any existing
2182	                    // ones with the same breakpoint number, we don't want dupes.
2183	                    while( l >= 0 ) {
2184	                        if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {
2185	                            _.breakpoints.splice(l,1);
2186	                        }
2187	                        l--;
2188	                    }
2189
2190	                    _.breakpoints.push(currentBreakpoint);
2191	                    _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;
2192
2193	                }
2194
2195	            }
2196
2197	            _.breakpoints.sort(function(a, b) {
2198	                return ( _.options.mobileFirst ) ? a-b : b-a;
2199	            });
2200
2201	        }
2202
2203	    };
2204
2205	    Slick.prototype.reinit = function() {
2206
2207	        var _ = this;
2208
2209	        _.$slides =
2210	            _.$slideTrack
2211	                .children(_.options.slide)
2212	                .addClass('slick-slide');
2213
2214	        _.slideCount = _.$slides.length;
2215
2216	        if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {
2217	            _.currentSlide = _.currentSlide - _.options.slidesToScroll;
2218	        }
2219
2220	        if (_.slideCount <= _.options.slidesToShow) {
2221	            _.currentSlide = 0;
2222	        }
2223
2224	        _.registerBreakpoints();
2225
2226	        _.setProps();
2227	        _.setupInfinite();
2228	        _.buildArrows();
2229	        _.updateArrows();
2230	        _.initArrowEvents();
2231	        _.buildDots();
2232	        _.updateDots();
2233	        _.initDotEvents();
2234	        _.cleanUpSlideEvents();
2235	        _.initSlideEvents();
2236
2237	        _.checkResponsive(false, true);
2238
2239	        if (_.options.focusOnSelect === true) {
2240	            $(_.$slideTrack).children().on('click.slick', _.selectHandler);
2241	        }
2242
2243	        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);
2244
2245	        _.setPosition();
2246	        _.focusHandler();
2247
2248	        _.paused = !_.options.autoplay;
2249	        _.autoPlay();
2250
2251	        _.$slider.trigger('reInit', [_]);
2252
2253	    };
2254
2255	    Slick.prototype.resize = function() {
2256
2257	        var _ = this;
2258
2259	        if ($(window).width() !== _.windowWidth) {
2260	            clearTimeout(_.windowDelay);
2261	            _.windowDelay = window.setTimeout(function() {
2262	                _.windowWidth = $(window).width();
2263	                _.checkResponsive();
2264	                if( !_.unslicked ) { _.setPosition(); }
2265	            }, 50);
2266	        }
2267	    };
2268
2269	    Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {
2270
2271	        var _ = this;
2272
2273	        if (typeof(index) === 'boolean') {
2274	            removeBefore = index;
2275	            index = removeBefore === true ? 0 : _.slideCount - 1;
2276	        } else {
2277	            index = removeBefore === true ? --index : index;
2278	        }
2279
2280	        if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {
2281	            return false;
2282	        }
2283
2284	        _.unload();
2285
2286	        if (removeAll === true) {
2287	            _.$slideTrack.children().remove();
2288	        } else {
2289	            _.$slideTrack.children(this.options.slide).eq(index).remove();
2290	        }
2291
2292	        _.$slides = _.$slideTrack.children(this.options.slide);
2293
2294	        _.$slideTrack.children(this.options.slide).detach();
2295
2296	        _.$slideTrack.append(_.$slides);
2297
2298	        _.$slidesCache = _.$slides;
2299
2300	        _.reinit();
2301
2302	    };
2303
2304	    Slick.prototype.setCSS = function(position) {
2305
2306	        var _ = this,
2307	            positionProps = {},
2308	            x, y;
2309
2310	        if (_.options.rtl === true) {
2311	            position = -position;
2312	        }
2313	        x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';
2314	        y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';
2315
2316	        positionProps[_.positionProp] = position;
2317
2318	        if (_.transformsEnabled === false) {
2319	            _.$slideTrack.css(positionProps);
2320	        } else {
2321	            positionProps = {};
2322	            if (_.cssTransitions === false) {
2323	                positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';
2324	                _.$slideTrack.css(positionProps);
2325	            } else {
2326	                positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';
2327	                _.$slideTrack.css(positionProps);
2328	            }
2329	        }
2330
2331	    };
2332
2333	    Slick.prototype.setDimensions = function() {
2334
2335	        var _ = this;
2336
2337	        if (_.options.vertical === false) {
2338	            if (_.options.centerMode === true) {
2339	                _.$list.css({
2340	                    padding: ('0px ' + _.options.centerPadding)
2341	                });
2342	            }
2343	        } else {
2344	            _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);
2345	            if (_.options.centerMode === true) {
2346	                _.$list.css({
2347	                    padding: (_.options.centerPadding + ' 0px')
2348	                });
2349	            }
2350	        }
2351
2352	        _.listWidth = _.$list.width();
2353	        _.listHeight = _.$list.height();
2354
2355
2356	        if (_.options.vertical === false && _.options.variableWidth === false) {
2357	            _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);
2358	            _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));
2359
2360	        } else if (_.options.variableWidth === true) {
2361	            _.$slideTrack.width(5000 * _.slideCount);
2362	        } else {
2363	            _.slideWidth = Math.ceil(_.listWidth);
2364	            _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));
2365	        }
2366
2367	        var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();
2368	        if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);
2369
2370	    };
2371
2372	    Slick.prototype.setFade = function() {
2373
2374	        var _ = this,
2375	            targetLeft;
2376
2377	        _.$slides.each(function(index, element) {
2378	            targetLeft = (_.slideWidth * index) * -1;
2379	            if (_.options.rtl === true) {
2380	                $(element).css({
2381	                    position: 'relative',
2382	                    right: targetLeft,
2383	                    top: 0,
2384	                    zIndex: _.options.zIndex - 2,
2385	                    opacity: 0
2386	                });
2387	            } else {
2388	                $(element).css({
2389	                    position: 'relative',
2390	                    left: targetLeft,
2391	                    top: 0,
2392	                    zIndex: _.options.zIndex - 2,
2393	                    opacity: 0
2394	                });
2395	            }
2396	        });
2397
2398	        _.$slides.eq(_.currentSlide).css({
2399	            zIndex: _.options.zIndex - 1,
2400	            opacity: 1
2401	        });
2402
2403	    };
2404
2405	    Slick.prototype.setHeight = function() {
2406
2407	        var _ = this;
2408
2409	        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
2410	            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
2411	            _.$list.css('height', targetHeight);
2412	        }
2413
2414	    };
2415
2416	    Slick.prototype.setOption =
2417	    Slick.prototype.slickSetOption = function() {
2418
2419	        /**
2420	         * accepts arguments in format of:
2421	         *
2422	         *  - for changing a single option's value:
2423	         *     .slick("setOption", option, value, refresh )
2424	         *
2425	         *  - for changing a set of responsive options:
2426	         *     .slick("setOption", 'responsive', [{}, ...], refresh )
2427	         *
2428	         *  - for updating multiple values at once (not responsive)
2429	         *     .slick("setOption", { 'option': value, ... }, refresh )
2430	         */
2431
2432	        var _ = this, l, item, option, value, refresh = false, type;
2433
2434	        if( $.type( arguments[0] ) === 'object' ) {
2435
2436	            option =  arguments[0];
2437	            refresh = arguments[1];
2438	            type = 'multiple';
2439
2440	        } else if ( $.type( arguments[0] ) === 'string' ) {
2441
2442	            option =  arguments[0];
2443	            value = arguments[1];
2444	            refresh = arguments[2];
2445
2446	            if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {
2447
2448	                type = 'responsive';
2449
2450	            } else if ( typeof arguments[1] !== 'undefined' ) {
2451
2452	                type = 'single';
2453
2454	            }
2455
2456	        }
2457
2458	        if ( type === 'single' ) {
2459
2460	            _.options[option] = value;
2461
2462
2463	        } else if ( type === 'multiple' ) {
2464
2465	            $.each( option , function( opt, val ) {
2466
2467	                _.options[opt] = val;
2468
2469	            });
2470
2471
2472	        } else if ( type === 'responsive' ) {
2473
2474	            for ( item in value ) {
2475
2476	                if( $.type( _.options.responsive ) !== 'array' ) {
2477
2478	                    _.options.responsive = [ value[item] ];
2479
2480	                } else {
2481
2482	                    l = _.options.responsive.length-1;
2483
2484	                    // loop through the responsive object and splice out duplicates.
2485	                    while( l >= 0 ) {
2486
2487	                        if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {
2488
2489	                            _.options.responsive.splice(l,1);
2490
2491	                        }
2492
2493	                        l--;
2494
2495	                    }
2496
2497	                    _.options.responsive.push( value[item] );
2498
2499	                }
2500
2501	            }
2502
2503	        }
2504
2505	        if ( refresh ) {
2506
2507	            _.unload();
2508	            _.reinit();
2509
2510	        }
2511
2512	    };
2513
2514	    Slick.prototype.setPosition = function() {
2515
2516	        var _ = this;
2517
2518	        _.setDimensions();
2519
2520	        _.setHeight();
2521
2522	        if (_.options.fade === false) {
2523	            _.setCSS(_.getLeft(_.currentSlide));
2524	        } else {
2525	            _.setFade();
2526	        }
2527
2528	        _.$slider.trigger('setPosition', [_]);
2529
2530	    };
2531
2532	    Slick.prototype.setProps = function() {
2533
2534	        var _ = this,
2535	            bodyStyle = document.body.style;
2536
2537	        _.positionProp = _.options.vertical === true ? 'top' : 'left';
2538
2539	        if (_.positionProp === 'top') {
2540	            _.$slider.addClass('slick-vertical');
2541	        } else {
2542	            _.$slider.removeClass('slick-vertical');
2543	        }
2544
2545	        if (bodyStyle.WebkitTransition !== undefined ||
2546	            bodyStyle.MozTransition !== undefined ||
2547	            bodyStyle.msTransition !== undefined) {
2548	            if (_.options.useCSS === true) {
2549	                _.cssTransitions = true;
2550	            }
2551	        }
2552
2553	        if ( _.options.fade ) {
2554	            if ( typeof _.options.zIndex === 'number' ) {
2555	                if( _.options.zIndex < 3 ) {
2556	                    _.options.zIndex = 3;
2557	                }
2558	            } else {
2559	                _.options.zIndex = _.defaults.zIndex;
2560	            }
2561	        }
2562
2563	        if (bodyStyle.OTransform !== undefined) {
2564	            _.animType = 'OTransform';
2565	            _.transformType = '-o-transform';
2566	            _.transitionType = 'OTransition';
2567	            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
2568	        }
2569	        if (bodyStyle.MozTransform !== undefined) {
2570	            _.animType = 'MozTransform';
2571	            _.transformType = '-moz-transform';
2572	            _.transitionType = 'MozTransition';
2573	            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;
2574	        }
2575	        if (bodyStyle.webkitTransform !== undefined) {
2576	            _.animType = 'webkitTransform';
2577	            _.transformType = '-webkit-transform';
2578	            _.transitionType = 'webkitTransition';
2579	            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
2580	        }
2581	        if (bodyStyle.msTransform !== undefined) {
2582	            _.animType = 'msTransform';
2583	            _.transformType = '-ms-transform';
2584	            _.transitionType = 'msTransition';
2585	            if (bodyStyle.msTransform === undefined) _.animType = false;
2586	        }
2587	        if (bodyStyle.transform !== undefined && _.animType !== false) {
2588	            _.animType = 'transform';
2589	            _.transformType = 'transform';
2590	            _.transitionType = 'transition';
2591	        }
2592	        _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);
2593	    };
2594
2595
2596	    Slick.prototype.setSlideClasses = function(index) {
2597
2598	        var _ = this,
2599	            centerOffset, allSlides, indexOffset, remainder;
2600
2601	        allSlides = _.$slider
2602	            .find('.slick-slide')
2603	            .removeClass('slick-active slick-center slick-current')
2604	            .attr('aria-hidden', 'true');
2605
2606	        _.$slides
2607	            .eq(index)
2608	            .addClass('slick-current');
2609
2610	        if (_.options.centerMode === true) {
2611
2612	            var evenCoef = _.options.slidesToShow % 2 === 0 ? 1 : 0;
2613
2614	            centerOffset = Math.floor(_.options.slidesToShow / 2);
2615
2616	            if (_.options.infinite === true) {
2617
2618	                if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {
2619	                    _.$slides
2620	                        .slice(index - centerOffset + evenCoef, index + centerOffset + 1)
2621	                        .addClass('slick-active')
2622	                        .attr('aria-hidden', 'false');
2623
2624	                } else {
2625
2626	                    indexOffset = _.options.slidesToShow + index;
2627	                    allSlides
2628	                        .slice(indexOffset - centerOffset + 1 + evenCoef, indexOffset + centerOffset + 2)
2629	                        .addClass('slick-active')
2630	                        .attr('aria-hidden', 'false');
2631
2632	                }
2633
2634	                if (index === 0) {
2635
2636	                    allSlides
2637	                        .eq(allSlides.length - 1 - _.options.slidesToShow)
2638	                        .addClass('slick-center');
2639
2640	                } else if (index === _.slideCount - 1) {
2641
2642	                    allSlides
2643	                        .eq(_.options.slidesToShow)
2644	                        .addClass('slick-center');
2645
2646	                }
2647
2648	            }
2649
2650	            _.$slides
2651	                .eq(index)
2652	                .addClass('slick-center');
2653
2654	        } else {
2655
2656	            if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {
2657
2658	                _.$slides
2659	                    .slice(index, index + _.options.slidesToShow)
2660	                    .addClass('slick-active')
2661	                    .attr('aria-hidden', 'false');
2662
2663	            } else if (allSlides.length <= _.options.slidesToShow) {
2664
2665	                allSlides
2666	                    .addClass('slick-active')
2667	                    .attr('aria-hidden', 'false');
2668
2669	            } else {
2670
2671	                remainder = _.slideCount % _.options.slidesToShow;
2672	                indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;
2673
2674	                if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {
2675
2676	                    allSlides
2677	                        .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)
2678	                        .addClass('slick-active')
2679	                        .attr('aria-hidden', 'false');
2680
2681	                } else {
2682
2683	                    allSlides
2684	                        .slice(indexOffset, indexOffset + _.options.slidesToShow)
2685	                        .addClass('slick-active')
2686	                        .attr('aria-hidden', 'false');
2687
2688	                }
2689
2690	            }
2691
2692	        }
2693
2694	        if (_.options.lazyLoad === 'ondemand' || _.options.lazyLoad === 'anticipated') {
2695	            _.lazyLoad();
2696	        }
2697	    };
2698
2699	    Slick.prototype.setupInfinite = function() {
2700
2701	        var _ = this,
2702	            i, slideIndex, infiniteCount;
2703
2704	        if (_.options.fade === true) {
2705	            _.options.centerMode = false;
2706	        }
2707
2708	        if (_.options.infinite === true && _.options.fade === false) {
2709
2710	            slideIndex = null;
2711
2712	            if (_.slideCount > _.options.slidesToShow) {
2713
2714	                if (_.options.centerMode === true) {
2715	                    infiniteCount = _.options.slidesToShow + 1;
2716	                } else {
2717	                    infiniteCount = _.options.slidesToShow;
2718	                }
2719
2720	                for (i = _.slideCount; i > (_.slideCount -
2721	                        infiniteCount); i -= 1) {
2722	                    slideIndex = i - 1;
2723	                    $(_.$slides[slideIndex]).clone(true).attr('id', '')
2724	                        .attr('data-slick-index', slideIndex - _.slideCount)
2725	                        .prependTo(_.$slideTrack).addClass('slick-cloned');
2726	                }
2727	                for (i = 0; i < infiniteCount  + _.slideCount; i += 1) {
2728	                    slideIndex = i;
2729	                    $(_.$slides[slideIndex]).clone(true).attr('id', '')
2730	                        .attr('data-slick-index', slideIndex + _.slideCount)
2731	                        .appendTo(_.$slideTrack).addClass('slick-cloned');
2732	                }
2733	                _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {
2734	                    $(this).attr('id', '');
2735	                });
2736
2737	            }
2738
2739	        }
2740
2741	    };
2742
2743	    Slick.prototype.interrupt = function( toggle ) {
2744
2745	        var _ = this;
2746
2747	        if( !toggle ) {
2748	            _.autoPlay();
2749	        }
2750	        _.interrupted = toggle;
2751
2752	    };
2753
2754	    Slick.prototype.selectHandler = function(event) {
2755
2756	        var _ = this;
2757
2758	        var targetElement =
2759	            $(event.target).is('.slick-slide') ?
2760	                $(event.target) :
2761	                $(event.target).parents('.slick-slide');
2762
2763	        var index = parseInt(targetElement.attr('data-slick-index'));
2764
2765	        if (!index) index = 0;
2766
2767	        if (_.slideCount <= _.options.slidesToShow) {
2768
2769	            _.slideHandler(index, false, true);
2770	            return;
2771
2772	        }
2773
2774	        _.slideHandler(index);
2775
2776	    };
2777
2778	    Slick.prototype.slideHandler = function(index, sync, dontAnimate) {
2779
2780	        var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,
2781	            _ = this, navTarget;
2782
2783	        sync = sync || false;
2784
2785	        if (_.animating === true && _.options.waitForAnimate === true) {
2786	            return;
2787	        }
2788
2789	        if (_.options.fade === true && _.currentSlide === index) {
2790	            return;
2791	        }
2792
2793	        if (sync === false) {
2794	            _.asNavFor(index);
2795	        }
2796
2797	        targetSlide = index;
2798	        targetLeft = _.getLeft(targetSlide);
2799	        slideLeft = _.getLeft(_.currentSlide);
2800
2801	        _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;
2802
2803	        if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {
2804	            if (_.options.fade === false) {
2805	                targetSlide = _.currentSlide;
2806	                if (dontAnimate !== true) {
2807	                    _.animateSlide(slideLeft, function() {
2808	                        _.postSlide(targetSlide);
2809	                    });
2810	                } else {
2811	                    _.postSlide(targetSlide);
2812	                }
2813	            }
2814	            return;
2815	        } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {
2816	            if (_.options.fade === false) {
2817	                targetSlide = _.currentSlide;
2818	                if (dontAnimate !== true) {
2819	                    _.animateSlide(slideLeft, function() {
2820	                        _.postSlide(targetSlide);
2821	                    });
2822	                } else {
2823	                    _.postSlide(targetSlide);
2824	                }
2825	            }
2826	            return;
2827	        }
2828
2829	        if ( _.options.autoplay ) {
2830	            clearInterval(_.autoPlayTimer);
2831	        }
2832
2833	        if (targetSlide < 0) {
2834	            if (_.slideCount % _.options.slidesToScroll !== 0) {
2835	                animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);
2836	            } else {
2837	                animSlide = _.slideCount + targetSlide;
2838	            }
2839	        } else if (targetSlide >= _.slideCount) {
2840	            if (_.slideCount % _.options.slidesToScroll !== 0) {
2841	                animSlide = 0;
2842	            } else {
2843	                animSlide = targetSlide - _.slideCount;
2844	            }
2845	        } else {
2846	            animSlide = targetSlide;
2847	        }
2848
2849	        _.animating = true;
2850
2851	        _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);
2852
2853	        oldSlide = _.currentSlide;
2854	        _.currentSlide = animSlide;
2855
2856	        _.setSlideClasses(_.currentSlide);
2857
2858	        if ( _.options.asNavFor ) {
2859
2860	            navTarget = _.getNavTarget();
2861	            navTarget = navTarget.slick('getSlick');
2862
2863	            if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {
2864	                navTarget.setSlideClasses(_.currentSlide);
2865	            }
2866
2867	        }
2868
2869	        _.updateDots();
2870	        _.updateArrows();
2871
2872	        if (_.options.fade === true) {
2873	            if (dontAnimate !== true) {
2874
2875	                _.fadeSlideOut(oldSlide);
2876
2877	                _.fadeSlide(animSlide, function() {
2878	                    _.postSlide(animSlide);
2879	                });
2880
2881	            } else {
2882	                _.postSlide(animSlide);
2883	            }
2884	            _.animateHeight();
2885	            return;
2886	        }
2887
2888	        if (dontAnimate !== true) {
2889	            _.animateSlide(targetLeft, function() {
2890	                _.postSlide(animSlide);
2891	            });
2892	        } else {
2893	            _.postSlide(animSlide);
2894	        }
2895
2896	    };
2897
2898	    Slick.prototype.startLoad = function() {
2899
2900	        var _ = this;
2901
2902	        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
2903
2904	            _.$prevArrow.hide();
2905	            _.$nextArrow.hide();
2906
2907	        }
2908
2909	        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
2910
2911	            _.$dots.hide();
2912
2913	        }
2914
2915	        _.$slider.addClass('slick-loading');
2916
2917	    };
2918
2919	    Slick.prototype.swipeDirection = function() {
2920
2921	        var xDist, yDist, r, swipeAngle, _ = this;
2922
2923	        xDist = _.touchObject.startX - _.touchObject.curX;
2924	        yDist = _.touchObject.startY - _.touchObject.curY;
2925	        r = Math.atan2(yDist, xDist);
2926
2927	        swipeAngle = Math.round(r * 180 / Math.PI);
2928	        if (swipeAngle < 0) {
2929	            swipeAngle = 360 - Math.abs(swipeAngle);
2930	        }
2931
2932	        if ((swipeAngle <= 45) && (swipeAngle >= 0)) {
2933	            return (_.options.rtl === false ? 'left' : 'right');
2934	        }
2935	        if ((swipeAngle <= 360) && (swipeAngle >= 315)) {
2936	            return (_.options.rtl === false ? 'left' : 'right');
2937	        }
2938	        if ((swipeAngle >= 135) && (swipeAngle <= 225)) {
2939	            return (_.options.rtl === false ? 'right' : 'left');
2940	        }
2941	        if (_.options.verticalSwiping === true) {
2942	            if ((swipeAngle >= 35) && (swipeAngle <= 135)) {
2943	                return 'down';
2944	            } else {
2945	                return 'up';
2946	            }
2947	        }
2948
2949	        return 'vertical';
2950
2951	    };
2952
2953	    Slick.prototype.swipeEnd = function(event) {
2954
2955	        var _ = this,
2956	            slideCount,
2957	            direction;
2958
2959	        _.dragging = false;
2960	        _.swiping = false;
2961
2962	        if (_.scrolling) {
2963	            _.scrolling = false;
2964	            return false;
2965	        }
2966
2967	        _.interrupted = false;
2968	        _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;
2969
2970	        if ( _.touchObject.curX === undefined ) {
2971	            return false;
2972	        }
2973
2974	        if ( _.touchObject.edgeHit === true ) {
2975	            _.$slider.trigger('edge', [_, _.swipeDirection() ]);
2976	        }
2977
2978	        if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {
2979
2980	            direction = _.swipeDirection();
2981
2982	            switch ( direction ) {
2983
2984	                case 'left':
2985	                case 'down':
2986
2987	                    slideCount =
2988	                        _.options.swipeToSlide ?
2989	                            _.checkNavigable( _.currentSlide + _.getSlideCount() ) :
2990	                            _.currentSlide + _.getSlideCount();
2991
2992	                    _.currentDirection = 0;
2993
2994	                    break;
2995
2996	                case 'right':
2997	                case 'up':
2998
2999	                    slideCount =
3000	                        _.options.swipeToSlide ?
3001	                            _.checkNavigable( _.currentSlide - _.getSlideCount() ) :
3002	                            _.currentSlide - _.getSlideCount();
3003
3004	                    _.currentDirection = 1;
3005
3006	                    break;
3007
3008	                default:
3009
3010
3011	            }
3012
3013	            if( direction != 'vertical' ) {
3014
3015	                _.slideHandler( slideCount );
3016	                _.touchObject = {};
3017	                _.$slider.trigger('swipe', [_, direction ]);
3018
3019	            }
3020
3021	        } else {
3022
3023	            if ( _.touchObject.startX !== _.touchObject.curX ) {
3024
3025	                _.slideHandler( _.currentSlide );
3026	                _.touchObject = {};
3027
3028	            }
3029
3030	        }
3031
3032	    };
3033
3034	    Slick.prototype.swipeHandler = function(event) {
3035
3036	        var _ = this;
3037
3038	        if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {
3039	            return;
3040	        } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {
3041	            return;
3042	        }
3043
3044	        _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?
3045	            event.originalEvent.touches.length : 1;
3046
3047	        _.touchObject.minSwipe = _.listWidth / _.options
3048	            .touchThreshold;
3049
3050	        if (_.options.verticalSwiping === true) {
3051	            _.touchObject.minSwipe = _.listHeight / _.options
3052	                .touchThreshold;
3053	        }
3054
3055	        switch (event.data.action) {
3056
3057	            case 'start':
3058	                _.swipeStart(event);
3059	                break;
3060
3061	            case 'move':
3062	                _.swipeMove(event);
3063	                break;
3064
3065	            case 'end':
3066	                _.swipeEnd(event);
3067	                break;
3068
3069	        }
3070
3071	    };
3072
3073	    Slick.prototype.swipeMove = function(event) {
3074
3075	        var _ = this,
3076	            edgeWasHit = false,
3077	            curLeft, swipeDirection, swipeLength, positionOffset, touches, verticalSwipeLength;
3078
3079	        touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;
3080
3081	        if (!_.dragging || _.scrolling || touches && touches.length !== 1) {
3082	            return false;
3083	        }
3084
3085	        curLeft = _.getLeft(_.currentSlide);
3086
3087	        _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;
3088	        _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;
3089
3090	        _.touchObject.swipeLength = Math.round(Math.sqrt(
3091	            Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));
3092
3093	        verticalSwipeLength = Math.round(Math.sqrt(
3094	            Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));
3095
3096	        if (!_.options.verticalSwiping && !_.swiping && verticalSwipeLength > 4) {
3097	            _.scrolling = true;
3098	            return false;
3099	        }
3100
3101	        if (_.options.verticalSwiping === true) {
3102	            _.touchObject.swipeLength = verticalSwipeLength;
3103	        }
3104
3105	        swipeDirection = _.swipeDirection();
3106
3107	        if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {
3108	            _.swiping = true;
3109	            event.preventDefault();
3110	        }
3111
3112	        positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);
3113	        if (_.options.verticalSwiping === true) {
3114	            positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;
3115	        }
3116
3117
3118	        swipeLength = _.touchObject.swipeLength;
3119
3120	        _.touchObject.edgeHit = false;
3121
3122	        if (_.options.infinite === false) {
3123	            if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {
3124	                swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;
3125	                _.touchObject.edgeHit = true;
3126	            }
3127	        }
3128
3129	        if (_.options.vertical === false) {
3130	            _.swipeLeft = curLeft + swipeLength * positionOffset;
3131	        } else {
3132	            _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;
3133	        }
3134	        if (_.options.verticalSwiping === true) {
3135	            _.swipeLeft = curLeft + swipeLength * positionOffset;
3136	        }
3137
3138	        if (_.options.fade === true || _.options.touchMove === false) {
3139	            return false;
3140	        }
3141
3142	        if (_.animating === true) {
3143	            _.swipeLeft = null;
3144	            return false;
3145	        }
3146
3147	        _.setCSS(_.swipeLeft);
3148
3149	    };
3150
3151	    Slick.prototype.swipeStart = function(event) {
3152
3153	        var _ = this,
3154	            touches;
3155
3156	        _.interrupted = true;
3157
3158	        if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {
3159	            _.touchObject = {};
3160	            return false;
3161	        }
3162
3163	        if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {
3164	            touches = event.originalEvent.touches[0];
3165	        }
3166
3167	        _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;
3168	        _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;
3169
3170	        _.dragging = true;
3171
3172	    };
3173
3174	    Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {
3175
3176	        var _ = this;
3177
3178	        if (_.$slidesCache !== null) {
3179
3180	            _.unload();
3181
3182	            _.$slideTrack.children(this.options.slide).detach();
3183
3184	            _.$slidesCache.appendTo(_.$slideTrack);
3185
3186	            _.reinit();
3187
3188	        }
3189
3190	    };
3191
3192	    Slick.prototype.unload = function() {
3193
3194	        var _ = this;
3195
3196	        $('.slick-cloned', _.$slider).remove();
3197
3198	        if (_.$dots) {
3199	            _.$dots.remove();
3200	        }
3201
3202	        if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {
3203	            _.$prevArrow.remove();
3204	        }
3205
3206	        if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {
3207	            _.$nextArrow.remove();
3208	        }
3209
3210	        _.$slides
3211	            .removeClass('slick-slide slick-active slick-visible slick-current')
3212	            .attr('aria-hidden', 'true')
3213	            .css('width', '');
3214
3215	    };
3216
3217	    Slick.prototype.unslick = function(fromBreakpoint) {
3218
3219	        var _ = this;
3220	        _.$slider.trigger('unslick', [_, fromBreakpoint]);
3221	        _.destroy();
3222
3223	    };
3224
3225	    Slick.prototype.updateArrows = function() {
3226
3227	        var _ = this,
3228	            centerOffset;
3229
3230	        centerOffset = Math.floor(_.options.slidesToShow / 2);
3231
3232	        if ( _.options.arrows === true &&
3233	            _.slideCount > _.options.slidesToShow &&
3234	            !_.options.infinite ) {
3235
3236	            _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
3237	            _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
3238
3239	            if (_.currentSlide === 0) {
3240
3241	                _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
3242	                _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
3243
3244	            } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {
3245
3246	                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
3247	                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
3248
3249	            } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {
3250
3251	                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
3252	                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
3253
3254	            }
3255
3256	        }
3257
3258	    };
3259
3260	    Slick.prototype.updateDots = function() {
3261
3262	        var _ = this;
3263
3264	        if (_.$dots !== null) {
3265
3266	            _.$dots
3267	                .find('li')
3268	                    .removeClass('slick-active')
3269	                    .end();
3270
3271	            _.$dots
3272	                .find('li')
3273	                .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))
3274	                .addClass('slick-active');
3275
3276	        }
3277
3278	    };
3279
3280	    Slick.prototype.visibility = function() {
3281
3282	        var _ = this;
3283
3284	        if ( _.options.autoplay ) {
3285
3286	            if ( document[_.hidden] ) {
3287
3288	                _.interrupted = true;
3289
3290	            } else {
3291
3292	                _.interrupted = false;
3293
3294	            }
3295
3296	        }
3297
3298	    };
3299
3300	    $.fn.slick = function() {
3301	        var _ = this,
3302	            opt = arguments[0],
3303	            args = Array.prototype.slice.call(arguments, 1),
3304	            l = _.length,
3305	            i,
3306	            ret;
3307	        for (i = 0; i < l; i++) {
3308	            if (typeof opt == 'object' || typeof opt == 'undefined')
3309	                _[i].slick = new Slick(_[i], opt);
3310	            else
3311	                ret = _[i].slick[opt].apply(_[i].slick, args);
3312	            if (typeof ret != 'undefined') return ret;
3313	        }
3314	        return _;
3315	    };
3316
3317	}));
3318
3319
3320
3321/*!
3322 * parallax.js v1.5.0 (http://pixelcog.github.io/parallax.js/)
3323 * @copyright 2016 PixelCog, Inc.
3324 * @license MIT (https://github.com/pixelcog/parallax.js/blob/master/LICENSE)
3325 */
3326
3327	(function ( $, window, document, undefined ) {
3328
3329	  // Polyfill for requestAnimationFrame
3330	  // via: https://gist.github.com/paulirish/1579671
3331
3332	  (function() {
3333	    var lastTime = 0;
3334	    var vendors = ['ms', 'moz', 'webkit', 'o'];
3335	    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
3336	      window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
3337	      window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame'];
3338	    }
3339
3340	    if (!window.requestAnimationFrame)
3341	      window.requestAnimationFrame = function(callback) {
3342	        var currTime = new Date().getTime();
3343	        var timeToCall = Math.max(0, 16 - (currTime - lastTime));
3344	        var id = window.setTimeout(function() { callback(currTime + timeToCall); },
3345	          timeToCall);
3346	        lastTime = currTime + timeToCall;
3347	        return id;
3348	      };
3349
3350	    if (!window.cancelAnimationFrame)
3351	      window.cancelAnimationFrame = function(id) {
3352	        clearTimeout(id);
3353	      };
3354	  }());
3355
3356
3357	  // Parallax Constructor
3358
3359	  function Parallax(element, options) {
3360	    var self = this;
3361
3362	    if (typeof options == 'object') {
3363	      delete options.refresh;
3364	      delete options.render;
3365	      $.extend(this, options);
3366	    }
3367
3368	    this.$element = $(element);
3369
3370	    if (!this.imageSrc && this.$element.is('img')) {
3371	      this.imageSrc = this.$element.attr('src');
3372	    }
3373
3374	    var positions = (this.position + '').toLowerCase().match(/\S+/g) || [];
3375
3376	    if (positions.length < 1) {
3377	      positions.push('center');
3378	    }
3379	    if (positions.length == 1) {
3380	      positions.push(positions[0]);
3381	    }
3382
3383	    if (positions[0] == 'top' || positions[0] == 'bottom' || positions[1] == 'left' || positions[1] == 'right') {
3384	      positions = [positions[1], positions[0]];
3385	    }
3386
3387	    if (this.positionX !== undefined) positions[0] = this.positionX.toLowerCase();
3388	    if (this.positionY !== undefined) positions[1] = this.positionY.toLowerCase();
3389
3390	    self.positionX = positions[0];
3391	    self.positionY = positions[1];
3392
3393	    if (this.positionX != 'left' && this.positionX != 'right') {
3394	      if (isNaN(parseInt(this.positionX))) {
3395	        this.positionX = 'center';
3396	      } else {
3397	        this.positionX = parseInt(this.positionX);
3398	      }
3399	    }
3400
3401	    if (this.positionY != 'top' && this.positionY != 'bottom') {
3402	      if (isNaN(parseInt(this.positionY))) {
3403	        this.positionY = 'center';
3404	      } else {
3405	        this.positionY = parseInt(this.positionY);
3406	      }
3407	    }
3408
3409	    this.position =
3410	      this.positionX + (isNaN(this.positionX)? '' : 'px') + ' ' +
3411	      this.positionY + (isNaN(this.positionY)? '' : 'px');
3412
3413	    if (navigator.userAgent.match(/(iPod|iPhone|iPad)/)) {
3414	      if (this.imageSrc && this.iosFix && !this.$element.is('img')) {
3415	        this.$element.css({
3416	          backgroundImage: 'url("' + this.imageSrc + '")',
3417	          backgroundSize: 'cover',
3418	          backgroundPosition: this.position
3419	        });
3420	      }
3421	      return this;
3422	    }
3423
3424	    if (navigator.userAgent.match(/(Android)/)) {
3425	      if (this.imageSrc && this.androidFix && !this.$element.is('img')) {
3426	        this.$element.css({
3427	          backgroundImage: 'url("' + this.imageSrc + '")',
3428	          backgroundSize: 'cover',
3429	          backgroundPosition: this.position
3430	        });
3431	      }
3432	      return this;
3433	    }
3434
3435	    this.$mirror = $('<div />').prependTo(this.mirrorContainer);
3436
3437	    var slider = this.$element.find('>.parallax-slider');
3438	    var sliderExisted = false;
3439
3440	    if (slider.length == 0)
3441	      this.$slider = $('<img />').prependTo(this.$mirror);
3442	    else {
3443	      this.$slider = slider.prependTo(this.$mirror)
3444	      sliderExisted = true;
3445	    }
3446
3447	    this.$mirror.addClass('parallax-mirror').css({
3448	      visibility: 'hidden',
3449	      zIndex: this.zIndex,
3450	      position: 'fixed',
3451	      top: 0,
3452	      left: 0,
3453	      overflow: 'hidden'
3454	    });
3455
3456	    this.$slider.addClass('parallax-slider').one('load', function() {
vendor: 5,579 bytes, lines 3457-3613
3457	      if (!self.naturalHeight || !self.naturalWidth) {
3458	        self.naturalHeight = this.naturalHeight || this.height || 1;
3459	        self.naturalWidth  = this.naturalWidth  || this.width  || 1;
3460	      }
3461	      self.aspectRatio = self.naturalWidth / self.naturalHeight;
3462
3463	      Parallax.isSetup || Parallax.setup();
3464	      Parallax.sliders.push(self);
3465	      Parallax.isFresh = false;
3466	      Parallax.requestRender();
3467	    });
3468
3469	    if (!sliderExisted)
3470	      this.$slider[0].src = this.imageSrc;
3471
3472	    if (this.naturalHeight && this.naturalWidth || this.$slider[0].complete || slider.length > 0) {
3473	      this.$slider.trigger('load');
3474	    }
3475
3476	  }
3477
3478
3479	  // Parallax Instance Methods
3480
3481	  $.extend(Parallax.prototype, {
3482	    speed:    0.2,
3483	    bleed:    0,
3484	    zIndex:   -100,
3485	    iosFix:   true,
3486	    androidFix: true,
3487	    position: 'center',
3488	    overScrollFix: false,
3489	    mirrorContainer: 'body',
3490
3491	    refresh: function() {
3492	      this.boxWidth        = this.$element.outerWidth();
3493	      this.boxHeight       = this.$element.outerHeight() + this.bleed * 2;
3494	      this.boxOffsetTop    = this.$element.offset().top - this.bleed;
3495	      this.boxOffsetLeft   = this.$element.offset().left;
3496	      this.boxOffsetBottom = this.boxOffsetTop + this.boxHeight;
3497
3498	      var winHeight = Parallax.winHeight;
3499	      var docHeight = Parallax.docHeight;
3500	      var maxOffset = Math.min(this.boxOffsetTop, docHeight - winHeight);
3501	      var minOffset = Math.max(this.boxOffsetTop + this.boxHeight - winHeight, 0);
3502	      var imageHeightMin = this.boxHeight + (maxOffset - minOffset) * (1 - this.speed) | 0;
3503	      var imageOffsetMin = (this.boxOffsetTop - maxOffset) * (1 - this.speed) | 0;
3504	      var margin;
3505
3506	      if (imageHeightMin * this.aspectRatio >= this.boxWidth) {
3507	        this.imageWidth    = imageHeightMin * this.aspectRatio | 0;
3508	        this.imageHeight   = imageHeightMin;
3509	        this.offsetBaseTop = imageOffsetMin;
3510
3511	        margin = this.imageWidth - this.boxWidth;
3512
3513	        if (this.positionX == 'left') {
3514	          this.offsetLeft = 0;
3515	        } else if (this.positionX == 'right') {
3516	          this.offsetLeft = - margin;
3517	        } else if (!isNaN(this.positionX)) {
3518	          this.offsetLeft = Math.max(this.positionX, - margin);
3519	        } else {
3520	          this.offsetLeft = - margin / 2 | 0;
3521	        }
3522	      } else {
3523	        this.imageWidth    = this.boxWidth;
3524	        this.imageHeight   = this.boxWidth / this.aspectRatio | 0;
3525	        this.offsetLeft    = 0;
3526
3527	        margin = this.imageHeight - imageHeightMin;
3528
3529	        if (this.positionY == 'top') {
3530	          this.offsetBaseTop = imageOffsetMin;
3531	        } else if (this.positionY == 'bottom') {
3532	          this.offsetBaseTop = imageOffsetMin - margin;
3533	        } else if (!isNaN(this.positionY)) {
3534	          this.offsetBaseTop = imageOffsetMin + Math.max(this.positionY, - margin);
3535	        } else {
3536	          this.offsetBaseTop = imageOffsetMin - margin / 2 | 0;
3537	        }
3538	      }
3539	    },
3540
3541	    render: function() {
3542	      var scrollTop    = Parallax.scrollTop;
3543	      var scrollLeft   = Parallax.scrollLeft;
3544	      var overScroll   = this.overScrollFix ? Parallax.overScroll : 0;
3545	      var scrollBottom = scrollTop + Parallax.winHeight;
3546
3547	      if (this.boxOffsetBottom > scrollTop && this.boxOffsetTop <= scrollBottom) {
3548	        this.visibility = 'visible';
3549	        this.mirrorTop = this.boxOffsetTop  - scrollTop;
3550	        this.mirrorLeft = this.boxOffsetLeft - scrollLeft;
3551	        this.offsetTop = this.offsetBaseTop - this.mirrorTop * (1 - this.speed);
3552	      } else {
3553	        this.visibility = 'hidden';
3554	      }
3555
3556	      this.$mirror.css({
3557	        transform: 'translate3d('+this.mirrorLeft+'px, '+(this.mirrorTop - overScroll)+'px, 0px)',
3558	        visibility: this.visibility,
3559	        height: this.boxHeight,
3560	        width: this.boxWidth
3561	      });
3562
3563	      this.$slider.css({
3564	        transform: 'translate3d('+this.offsetLeft+'px, '+this.offsetTop+'px, 0px)',
3565	        position: 'absolute',
3566	        height: this.imageHeight,
3567	        width: this.imageWidth,
3568	        maxWidth: 'none'
3569	      });
3570	    }
3571	  });
3572
3573
3574	  // Parallax Static Methods
3575
3576	  $.extend(Parallax, {
3577	    scrollTop:    0,
3578	    scrollLeft:   0,
3579	    winHeight:    0,
3580	    winWidth:     0,
3581	    docHeight:    1 << 30,
3582	    docWidth:     1 << 30,
3583	    sliders:      [],
3584	    isReady:      false,
3585	    isFresh:      false,
3586	    isBusy:       false,
3587
3588	    setup: function() {
3589	      if (this.isReady) return;
3590
3591	      var self = this;
3592
3593	      var $doc = $(document), $win = $(window);
3594
3595	      var loadDimensions = function() {
3596	        Parallax.winHeight = $win.height();
3597	        Parallax.winWidth  = $win.width();
3598	        Parallax.docHeight = $doc.height();
3599	        Parallax.docWidth  = $doc.width();
3600	      };
3601
3602	      var loadScrollPosition = function() {
3603	        var winScrollTop  = $win.scrollTop();
3604	        var scrollTopMax  = Parallax.docHeight - Parallax.winHeight;
3605	        var scrollLeftMax = Parallax.docWidth  - Parallax.winWidth;
3606	        Parallax.scrollTop  = Math.max(0, Math.min(scrollTopMax,  winScrollTop));
3607	        Parallax.scrollLeft = Math.max(0, Math.min(scrollLeftMax, $win.scrollLeft()));
3608	        Parallax.overScroll = Math.max(winScrollTop - scrollTopMax, Math.min(winScrollTop, 0));
3609	      };
3610
3611	      $win.on('resize.px.parallax load.px.parallax', function() {
3612	          loadDimensions();
3613	          self.refresh();
3614	          Parallax.isFresh = false;
3615	          Parallax.requestRender();
3616	        })
3617	        .on('scroll.px.parallax load.px.parallax', function() {
3618	          loadScrollPosition();
3619	          Parallax.requestRender();
3620	        });
3621
3622	      loadDimensions();
3623	      loadScrollPosition();
3624
3625	      this.isReady = true;
3626
3627	      var lastPosition = -1;
3628
3629	      function frameLoop() {
3630	        if (lastPosition == window.pageYOffset) {   // Avoid overcalculations
3631	          window.requestAnimationFrame(frameLoop);
3632	          return false;
3633	        } else lastPosition = window.pageYOffset;
3634
3635	        self.render();
3636	        window.requestAnimationFrame(frameLoop);
3637	      }
3638
3639	      frameLoop();
3640	    },
3641
3642	    configure: function(options) {
3643	      if (typeof options == 'object') {
3644	        delete options.refresh;
3645	        delete options.render;
3646	        $.extend(this.prototype, options);
3647	      }
3648	    },
3649
3650	    refresh: function() {
3651	      $.each(this.sliders, function(){ this.refresh(); });
3652	      this.isFresh = true;
3653	    },
3654
3655	    render: function() {
3656	      this.isFresh || this.refresh();
3657	      $.each(this.sliders, function(){ this.render(); });
3658	    },
3659
3660	    requestRender: function() {
3661	      var self = this;
3662	      self.render();
3663	      self.isBusy = false;
3664	    },
3665	    destroy: function(el){
3666	      var i,
3667	          parallaxElement = $(el).data('px.parallax');
3668	      parallaxElement.$mirror.remove();
3669	      for(i=0; i < this.sliders.length; i+=1){
3670	        if(this.sliders[i] == parallaxElement){
3671	          this.sliders.splice(i, 1);
3672	        }
3673	      }
3674	      $(el).data('px.parallax', false);
3675	      if(this.sliders.length === 0){
3676	        $(window).off('scroll.px.parallax resize.px.parallax load.px.parallax');
3677	        this.isReady = false;
3678	        Parallax.isSetup = false;
3679	      }
3680	    }
3681	  });
3682
3683
3684	  // Parallax Plugin Definition
3685
3686	  function Plugin(option) {
3687	    return this.each(function () {
3688	      var $this = $(this);
3689	      var options = typeof option == 'object' && option;
3690
3691	      if (this == window || this == document || $this.is('body')) {
3692	        Parallax.configure(options);
3693	      }
3694	      else if (!$this.data('px.parallax')) {
3695	        options = $.extend({}, $this.data(), options);
3696	        $this.data('px.parallax', new Parallax(this, options));
3697	      }
3698	      else if (typeof option == 'object')
3699	      {
3700	        $.extend($this.data('px.parallax'), options);
3701	      }
3702	      if (typeof option == 'string') {
3703	        if(option == 'destroy'){
3704	            Parallax.destroy(this);
3705	        }else{
3706	          Parallax[option]();
3707	        }
3708	      }
3709	    });
3710	  }
3711
3712	  var old = $.fn.parallax;
3713
3714	  $.fn.parallax             = Plugin;
3715	  $.fn.parallax.Constructor = Parallax;
3716
3717
3718	  // Parallax No Conflict
3719
3720	  $.fn.parallax.noConflict = function () {
3721	    $.fn.parallax = old;
3722	    return this;
3723	  };
3724
3725
3726	  // Parallax Data-API
3727
3728	  $( function () { 
3729	    $('[data-parallax="scroll"]').parallax(); 
3730	  });
3731
3732	}(jQuery, window, document));
3733
3734
3735
3736
3737/*
3738* perfect-scrollbar - v0.4.9
3739*
3740* http://noraesae.github.com/perfect-scrollbar/
3741* Copyright (c) 2014 Hyeonje Jun;
3742*
3743*/
3744
3745	(function(e) {
3746	    "use strict";
3747	    "function" == typeof define && define.amd ? define(["jquery"], e) : "object" == typeof exports ? e(require("jquery")) : e(jQuery)
3748	})(function(e) {
3749	    "use strict";
3750	    var t = {
3751	            wheelSpeed: 10,
3752	            wheelPropagation: !1,
3753	            minScrollbarLength: null,
3754	            useBothWheelAxes: !1,
3755	            useKeyboard: !0,
3756	            suppressScrollX: !1,
3757	            suppressScrollY: !1,
3758	            scrollXMarginOffset: 0,
3759	            scrollYMarginOffset: 0,
3760	            includePadding: !1
3761	        },
3762	        n = function() {
3763	            var e = 0;
3764	            return function() {
3765	                var t = e;
3766	                return e += 1, ".perfect-scrollbar-" + t
3767	            }
3768	        }();
3769	    e.fn.perfectScrollbar = function(o, r) {
3770	        return this.each(function() {
3771	            var l = e.extend(!0, {}, t),
3772	                a = e(this);
3773	            if ("object" == typeof o ? e.extend(!0, l, o) : r = o, "update" === r) return a.data("perfect-scrollbar-update") && a.data("perfect-scrollbar-update")(), a;
3774	            if ("destroy" === r) return a.data("perfect-scrollbar-destroy") && a.data("perfect-scrollbar-destroy")(), a;
3775	            if (a.data("perfect-scrollbar")) return a.data("perfect-scrollbar");
3776	            a.addClass("ps-container");
3777	            var s, i, c, u, d, p, f, h, v, g, b = e("<div class='ps-scrollbar-x-rail'></div>").appendTo(a),
3778	                m = e("<div class='ps-scrollbar-y-rail'></div>").appendTo(a),
3779	                w = e("<div class='ps-scrollbar-x'></div>").appendTo(b),
3780	                T = e("<div class='ps-scrollbar-y'></div>").appendTo(m),
3781	                y = parseInt(b.css("bottom"), 10),
3782	                L = parseInt(m.css("right"), 10),
3783	                S = n(),
3784	                x = function(e, t) {
3785	                    var n = e + t,
3786	                        o = u - v;
3787	                    g = 0 > n ? 0 : n > o ? o : n;
3788	                    var r = parseInt(g * (p - u) / (u - v), 10);
3789	                    a.scrollTop(r), b.css({
3790	                        bottom: y - r
3791	                    })
3792	                },
3793	                M = function(e, t) {
3794	                    var n = e + t,
3795	                        o = c - f;
3796	                    h = 0 > n ? 0 : n > o ? o : n;
3797	                    var r = parseInt(h * (d - c) / (c - f), 10);
3798	                    a.scrollLeft(r), m.css({
3799	                        right: L - r
3800	                    })
3801	                },
3802	                P = function(e) {
3803	                    return l.minScrollbarLength && (e = Math.max(e, l.minScrollbarLength)), e
3804	                },
3805	                X = function() {
3806	                    b.css({
3807	                        left: a.scrollLeft(),
3808	                        bottom: y - a.scrollTop(),
3809	                        width: c,
3810	                        display: s ? "inherit" : "none"
3811	                    }), m.css({
3812	                        top: a.scrollTop(),
3813	                        right: L - a.scrollLeft(),
3814	                        height: u,
3815	                        display: i ? "inherit" : "none"
3816	                    }), w.css({
3817	                        left: h,
3818	                        width: f
3819	                    }), T.css({
3820	                        top: g,
3821	                        height: v
3822	                    })
3823	                },
3824	                D = function() {
3825	                    c = l.includePadding ? a.innerWidth() : a.width(), u = l.includePadding ? a.innerHeight() : a.height(), d = a.prop("scrollWidth"), p = a.prop("scrollHeight"), !l.suppressScrollX && d > c + l.scrollXMarginOffset ? (s = !0, f = P(parseInt(c * c / d, 10)), h = parseInt(a.scrollLeft() * (c - f) / (d - c), 10)) : (s = !1, f = 0, h = 0, a.scrollLeft(0)), !l.suppressScrollY && p > u + l.scrollYMarginOffset ? (i = !0, v = P(parseInt(u * u / p, 10)), g = parseInt(a.scrollTop() * (u - v) / (p - u), 10)) : (i = !1, v = 0, g = 0, a.scrollTop(0)), g >= u - v && (g = u - v), h >= c - f && (h = c - f), X()
3826	                },
3827	                I = function() {
3828	                    var t, n;
3829	                    w.bind("mousedown" + S, function(e) {
3830	                        n = e.pageX, t = w.position().left, b.addClass("in-scrolling"), e.stopPropagation(), e.preventDefault()
3831	                    }), e(document).bind("mousemove" + S, function(e) {
3832	                        b.hasClass("in-scrolling") && (M(t, e.pageX - n), e.stopPropagation(), e.preventDefault())
3833	                    }), e(document).bind("mouseup" + S, function() {
3834	                        b.hasClass("in-scrolling") && b.removeClass("in-scrolling")
3835	                    }), t = n = null
3836	                },
3837	                Y = function() {
3838	                    var t, n;
3839	                    T.bind("mousedown" + S, function(e) {
3840	                        n = e.pageY, t = T.position().top, m.addClass("in-scrolling"), e.stopPropagation(), e.preventDefault()
3841	                    }), e(document).bind("mousemove" + S, function(e) {
3842	                        m.hasClass("in-scrolling") && (x(t, e.pageY - n), e.stopPropagation(), e.preventDefault())
3843	                    }), e(document).bind("mouseup" + S, function() {
3844	                        m.hasClass("in-scrolling") && m.removeClass("in-scrolling")
3845	                    }), t = n = null
3846	                },
3847	                k = function(e, t) {
3848	                    var n = a.scrollTop();
3849	                    if (0 === e) {
3850	                        if (!i) return !1;
3851	                        if (0 === n && t > 0 || n >= p - u && 0 > t) return !l.wheelPropagation
3852	                    }
3853	                    var o = a.scrollLeft();
3854	                    if (0 === t) {
3855	                        if (!s) return !1;
3856	                        if (0 === o && 0 > e || o >= d - c && e > 0) return !l.wheelPropagation
3857	                    }
3858	                    return !0
3859	                },
3860	                C = function() {
3861	                    l.wheelSpeed /= 10;
3862	                    var e = !1;
3863	                    a.bind("mousewheel" + S, function(t, n, o, r) {
3864	                        var c = t.deltaX * t.deltaFactor || o,
3865	                            u = t.deltaY * t.deltaFactor || r;
3866	                        e = !1, l.useBothWheelAxes ? i && !s ? (u ? a.scrollTop(a.scrollTop() - u * l.wheelSpeed) : a.scrollTop(a.scrollTop() + c * l.wheelSpeed), e = !0) : s && !i && (c ? a.scrollLeft(a.scrollLeft() + c * l.wheelSpeed) : a.scrollLeft(a.scrollLeft() - u * l.wheelSpeed), e = !0) : (a.scrollTop(a.scrollTop() - u * l.wheelSpeed), a.scrollLeft(a.scrollLeft() + c * l.wheelSpeed)), D(), e = e || k(c, u), e && (t.stopPropagation(), t.preventDefault())
3867	                    }), a.bind("MozMousePixelScroll" + S, function(t) {
3868	                        e && t.preventDefault()
3869	                    })
3870	                },
3871	                j = function() {
3872	                    var t = !1;
3873	                    a.bind("mouseenter" + S, function() {
3874	                        t = !0
3875	                    }), a.bind("mouseleave" + S, function() {
3876	                        t = !1
3877	                    });
3878	                    var n = !1;
3879	                    e(document).bind("keydown" + S, function(o) {
3880	                        if (t && !e(document.activeElement).is(":input,[contenteditable]")) {
3881	                            var r = 0,
3882	                                l = 0;
3883	                            switch (o.which) {
3884	                                case 37:
3885	                                    r = -30;
3886	                                    break;
3887	                                case 38:
3888	                                    l = 30;
3889	                                    break;
3890	                                case 39:
3891	                                    r = 30;
3892	                                    break;
3893	                                case 40:
3894	                                    l = -30;
3895	                                    break;
3896	                                case 33:
3897	                                    l = 90;
3898	                                    break;
3899	                                case 32:
3900	                                case 34:
3901	                                    l = -90;
3902	                                    break;
3903	                                case 35:
3904	                                    l = -u;
3905	                                    break;
3906	                                case 36:
3907	                                    l = u;
3908	                                    break;
3909	                                default:
3910	                                    return
3911	                            }
3912	                            a.scrollTop(a.scrollTop() - l), a.scrollLeft(a.scrollLeft() + r), n = k(r, l), n && o.preventDefault()
3913	                        }
3914	                    })
3915	                },
3916	                O = function() {
3917	                    var e = function(e) {
3918	                        e.stopPropagation()
3919	                    };
3920	                    T.bind("click" + S, e), m.bind("click" + S, function(e) {
3921	                        var t = parseInt(v / 2, 10),
3922	                            n = e.pageY - m.offset().top - t,
3923	                            o = u - v,
3924	                            r = n / o;
3925	                        0 > r ? r = 0 : r > 1 && (r = 1), a.scrollTop((p - u) * r)
3926	                    }), w.bind("click" + S, e), b.bind("click" + S, function(e) {
3927	                        var t = parseInt(f / 2, 10),
3928	                            n = e.pageX - b.offset().left - t,
3929	                            o = c - f,
3930	                            r = n / o;
3931	                        0 > r ? r = 0 : r > 1 && (r = 1), a.scrollLeft((d - c) * r)
3932	                    })
3933	                },
3934	                E = function() {
3935	                    var t = function(e, t) {
3936	                            a.scrollTop(a.scrollTop() - t), a.scrollLeft(a.scrollLeft() - e), D()
3937	                        },
3938	                        n = {},
3939	                        o = 0,
3940	                        r = {},
3941	                        l = null,
3942	                        s = !1;
3943	                    e(window).bind("touchstart" + S, function() {
3944	                        s = !0
3945	                    }), e(window).bind("touchend" + S, function() {
3946	                        s = !1
3947	                    }), a.bind("touchstart" + S, function(e) {
3948	                        var t = e.originalEvent.targetTouches[0];
3949	                        n.pageX = t.pageX, n.pageY = t.pageY, o = (new Date).getTime(), null !== l && clearInterval(l), e.stopPropagation()
3950	                    }), a.bind("touchmove" + S, function(e) {
3951	                        if (!s && 1 === e.originalEvent.targetTouches.length) {
3952	                            var l = e.originalEvent.targetTouches[0],
3953	                                a = {};
3954	                            a.pageX = l.pageX, a.pageY = l.pageY;
3955	                            var i = a.pageX - n.pageX,
3956	                                c = a.pageY - n.pageY;
3957	                            t(i, c), n = a;
3958	                            var u = (new Date).getTime(),
3959	                                d = u - o;
3960	                            d > 0 && (r.x = i / d, r.y = c / d, o = u), e.preventDefault()
3961	                        }
3962	                    }), a.bind("touchend" + S, function() {
3963	                        clearInterval(l), l = setInterval(function() {
3964	                            return .01 > Math.abs(r.x) && .01 > Math.abs(r.y) ? (clearInterval(l), void 0) : (t(30 * r.x, 30 * r.y), r.x *= .8, r.y *= .8, void 0)
3965	                        }, 10)
3966	                    })
3967	                },
3968	                H = function() {
3969	                    a.bind("scroll" + S, function() {
3970	                        D()
3971	                    })
3972	                },
3973	                A = function() {
3974	                    a.unbind(S), e(window).unbind(S), e(document).unbind(S), a.data("perfect-scrollbar", null), a.data("perfect-scrollbar-update", null), a.data("perfect-scrollbar-destroy", null), w.remove(), T.remove(), b.remove(), m.remove(), w = T = c = u = d = p = f = h = y = v = g = L = null
3975	                },
3976	                W = function(t) {
3977	                    a.addClass("ie").addClass("ie" + t);
3978	                    var n = function() {
3979	                            var t = function() {
3980	                                    e(this).addClass("hover")
3981	                                },
3982	                                n = function() {
3983	                                    e(this).removeClass("hover")
3984	                                };
3985	                            a.bind("mouseenter" + S, t).bind("mouseleave" + S, n), b.bind("mouseenter" + S, t).bind("mouseleave" + S, n), m.bind("mouseenter" + S, t).bind("mouseleave" + S, n), w.bind("mouseenter" + S, t).bind("mouseleave" + S, n), T.bind("mouseenter" + S, t).bind("mouseleave" + S, n)
3986	                        },
3987	                        o = function() {
3988	                            X = function() {
3989	                                w.css({
3990	                                    left: h + a.scrollLeft(),
3991	                                    bottom: y,
3992	                                    width: f
3993	                                }), T.css({
3994	                                    top: g + a.scrollTop(),
3995	                                    right: L,
3996	                                    height: v
3997	                                }), w.hide().show(), T.hide().show()
3998	                            }
3999	                        };
4000	                    6 === t && (n(), o())
4001	                },
4002	                q = "ontouchstart" in window || window.DocumentTouch && document instanceof window.DocumentTouch,
4003	                F = function() {
4004	                    var e = navigator.userAgent.toLowerCase().match(/(msie) ([\w.]+)/);
4005	                    e && "msie" === e[1] && W(parseInt(e[2], 10)), D(), H(), I(), Y(), O(), q && E(), a.mousewheel && C(), l.useKeyboard && j(), a.data("perfect-scrollbar", a), a.data("perfect-scrollbar-update", D), a.data("perfect-scrollbar-destroy", A)
4006	                };
4007	            return F(), a
4008	        })
4009	    }
4010	}),
4011	function(e) {
4012	    "function" == typeof define && define.amd ? define(["jquery"], e) : "object" == typeof exports ? module.exports = e : e(jQuery)
4013	}(function(e) {
4014	    function t(t) {
4015	        var a = t || window.event,
4016	            s = i.call(arguments, 1),
4017	            c = 0,
4018	            u = 0,
4019	            d = 0,
4020	            p = 0;
4021	        if (t = e.event.fix(a), t.type = "mousewheel", "detail" in a && (d = -1 * a.detail), "wheelDelta" in a && (d = a.wheelDelta), "wheelDeltaY" in a && (d = a.wheelDeltaY), "wheelDeltaX" in a && (u = -1 * a.wheelDeltaX), "axis" in a && a.axis === a.HORIZONTAL_AXIS && (u = -1 * d, d = 0), c = 0 === d ? u : d, "deltaY" in a && (d = -1 * a.deltaY, c = d), "deltaX" in a && (u = a.deltaX, 0 === d && (c = -1 * u)), 0 !== d || 0 !== u) {
4022	            if (1 === a.deltaMode) {
4023	                var f = e.data(this, "mousewheel-line-height");
4024	                c *= f, d *= f, u *= f
4025	            } else if (2 === a.deltaMode) {
4026	                var h = e.data(this, "mousewheel-page-height");
4027	                c *= h, d *= h, u *= h
4028	            }
4029	            return p = Math.max(Math.abs(d), Math.abs(u)), (!l || l > p) && (l = p, o(a, p) && (l /= 40)), o(a, p) && (c /= 40, u /= 40, d /= 40), c = Math[c >= 1 ? "floor" : "ceil"](c / l), u = Math[u >= 1 ? "floor" : "ceil"](u / l), d = Math[d >= 1 ? "floor" : "ceil"](d / l), t.deltaX = u, t.deltaY = d, t.deltaFactor = l, t.deltaMode = 0, s.unshift(t, c, u, d), r && clearTimeout(r), r = setTimeout(n, 200), (e.event.dispatch || e.event.handle).apply(this, s)
4030	        }
4031	    }
4032
4033	    function n() {
4034	        l = null
4035	    }
4036
4037	    function o(e, t) {
4038	        return u.settings.adjustOldDeltas && "mousewheel" === e.type && 0 === t % 120
4039	    }
4040	    var r, l, a = ["wheel", "mousewheel", "DOMMouseScroll", "MozMousePixelScroll"],
4041	        s = "onwheel" in document || document.documentMode >= 9 ? ["wheel"] : ["mousewheel", "DomMouseScroll", "MozMousePixelScroll"],
4042	        i = Array.prototype.slice;
4043	    if (e.event.fixHooks)
4044	        for (var c = a.length; c;) e.event.fixHooks[a[--c]] = e.event.mouseHooks;
4045	    var u = e.event.special.mousewheel = {
4046	        version: "3.1.9",
4047	        setup: function() {
4048	            if (this.addEventListener)
4049	                for (var n = s.length; n;) this.addEventListener(s[--n], t, !1);
4050	            else this.onmousewheel = t;
4051	            e.data(this, "mousewheel-line-height", u.getLineHeight(this)), e.data(this, "mousewheel-page-height", u.getPageHeight(this))
4052	        },
4053	        teardown: function() {
4054	            if (this.removeEventListener)
4055	                for (var e = s.length; e;) this.removeEventListener(s[--e], t, !1);
4056	            else this.onmousewheel = null
4057	        },
4058	        getLineHeight: function(t) {
vendor: 8,838 bytes, lines 4059-4328
4059	            return parseInt(e(t)["offsetParent" in e.fn ? "offsetParent" : "parent"]().css("fontSize"), 10)
4060	        },
4061	        getPageHeight: function(t) {
4062	            return e(t).height()
4063	        },
4064	        settings: {
4065	            adjustOldDeltas: !0
4066	        }
4067	    };
4068	    e.fn.extend({
4069	        mousewheel: function(e) {
4070	            return e ? this.bind("mousewheel", e) : this.trigger("mousewheel")
4071	        },
4072	        unmousewheel: function(e) {
4073	            return this.unbind("mousewheel", e)
4074	        }
4075	    })
4076	});
4077
4078
4079
4080/*
4081Sticky-kit v1.1.2 | WTFPL | Leaf Corcoran 2015 | http://leafo.net
4082*/
4083
4084	(function() {
4085	  var $, win;
4086
4087	  $ = this.jQuery || window.jQuery;
4088
4089	  win = $(window);
4090
4091	  $.fn.stick_in_parent = function(opts) {
4092	    var doc, elm, enable_bottoming, fn, i, inner_scrolling, len, manual_spacer, offset_top, parent_selector, recalc_every, sticky_class;
4093	    if (opts == null) {
4094	      opts = {};
4095	    }
4096	    sticky_class = opts.sticky_class, inner_scrolling = opts.inner_scrolling, recalc_every = opts.recalc_every, parent_selector = opts.parent, offset_top = opts.offset_top, manual_spacer = opts.spacer, enable_bottoming = opts.bottoming;
4097	    if (offset_top == null) {
4098	      offset_top = 0;
4099	    }
4100	    if (parent_selector == null) {
4101	      parent_selector = void 0;
4102	    }
4103	    if (inner_scrolling == null) {
4104	      inner_scrolling = true;
4105	    }
4106	    if (sticky_class == null) {
4107	      sticky_class = "is_stuck";
4108	    }
4109	    doc = $(document);
4110	    if (enable_bottoming == null) {
4111	      enable_bottoming = true;
4112	    }
4113	    fn = function(elm, padding_bottom, parent_top, parent_height, top, height, el_float, detached) {
4114	      var bottomed, detach, fixed, last_pos, last_scroll_height, offset, parent, recalc, recalc_and_tick, recalc_counter, spacer, tick;
4115	      if (elm.data("sticky_kit")) {
4116	        return;
4117	      }
4118	      elm.data("sticky_kit", true);
4119	      last_scroll_height = doc.height();
4120	      parent = elm.parent();
4121	      if (parent_selector != null) {
4122	        parent = parent.closest(parent_selector);
4123	      }
4124	      if (!parent.length) {
4125	        throw "failed to find stick parent";
4126	      }
4127	      fixed = false;
4128	      bottomed = false;
4129	      spacer = manual_spacer != null ? manual_spacer && elm.closest(manual_spacer) : $("<div />");
4130	      if (spacer) {
4131	        spacer.css('position', elm.css('position'));
4132	      }
4133	      recalc = function() {
4134	        var border_top, padding_top, restore;
4135	        if (detached) {
4136	          return;
4137	        }
4138	        last_scroll_height = doc.height();
4139	        border_top = parseInt(parent.css("border-top-width"), 10);
4140	        padding_top = parseInt(parent.css("padding-top"), 10);
4141	        padding_bottom = parseInt(parent.css("padding-bottom"), 10);
4142	        parent_top = parent.offset().top + border_top + padding_top;
4143	        parent_height = parent.height();
4144	        if (fixed) {
4145	          fixed = false;
4146	          bottomed = false;
4147	          if (manual_spacer == null) {
4148	            elm.insertAfter(spacer);
4149	            spacer.detach();
4150	          }
4151	          elm.css({
4152	            position: "",
4153	            top: "",
4154	            width: "",
4155	            bottom: ""
4156	          }).removeClass(sticky_class);
4157	          restore = true;
4158	        }
4159	        top = elm.offset().top - (parseInt(elm.css("margin-top"), 10) || 0) - offset_top;
4160	        height = elm.outerHeight(true);
4161	        el_float = elm.css("float");
4162	        if (spacer) {
4163	          spacer.css({
4164	            width: elm.outerWidth(true),
4165	            height: height,
4166	            display: elm.css("display"),
4167	            "vertical-align": elm.css("vertical-align"),
4168	            "float": el_float
4169	          });
4170	        }
4171	        if (restore) {
4172	          return tick();
4173	        }
4174	      };
4175	      recalc();
4176	      if (height === parent_height) {
4177	        return;
4178	      }
4179	      last_pos = void 0;
4180	      offset = offset_top;
4181	      recalc_counter = recalc_every;
4182	      tick = function() {
4183	        var css, delta, recalced, scroll, will_bottom, win_height;
4184	        if (detached) {
4185	          return;
4186	        }
4187	        recalced = false;
4188	        if (recalc_counter != null) {
4189	          recalc_counter -= 1;
4190	          if (recalc_counter <= 0) {
4191	            recalc_counter = recalc_every;
4192	            recalc();
4193	            recalced = true;
4194	          }
4195	        }
4196	        if (!recalced && doc.height() !== last_scroll_height) {
4197	          recalc();
4198	          recalced = true;
4199	        }
4200	        scroll = win.scrollTop();
4201	        if (last_pos != null) {
4202	          delta = scroll - last_pos;
4203	        }
4204	        last_pos = scroll;
4205	        if (fixed) {
4206	          if (enable_bottoming) {
4207	            will_bottom = scroll + height + offset > parent_height + parent_top;
4208	            if (bottomed && !will_bottom) {
4209	              bottomed = false;
4210	              elm.css({
4211	                position: "fixed",
4212	                bottom: "",
4213	                top: offset
4214	              }).trigger("sticky_kit:unbottom");
4215	            }
4216	          }
4217	          if (scroll < top) {
4218	            fixed = false;
4219	            offset = offset_top;
4220	            if (manual_spacer == null) {
4221	              if (el_float === "left" || el_float === "right") {
4222	                elm.insertAfter(spacer);
4223	              }
4224	              spacer.detach();
4225	            }
4226	            css = {
4227	              position: "",
4228	              width: "",
4229	              top: ""
4230	            };
4231	            elm.css(css).removeClass(sticky_class).trigger("sticky_kit:unstick");
4232	          }
4233	          if (inner_scrolling) {
4234	            win_height = win.height();
4235	            if (height + offset_top > win_height) {
4236	              if (!bottomed) {
4237	                offset -= delta;
4238	                offset = Math.max(win_height - height, offset);
4239	                offset = Math.min(offset_top, offset);
4240	                if (fixed) {
4241	                  elm.css({
4242	                    top: offset + "px"
4243	                  });
4244	                }
4245	              }
4246	            }
4247	          }
4248	        } else {
4249	          if (scroll > top) {
4250	            fixed = true;
4251	            css = {
4252	              position: "fixed",
4253	              top: offset
4254	            };
4255	            css.width = elm.css("box-sizing") === "border-box" ? elm.outerWidth() + "px" : elm.width() + "px";
4256	            elm.css(css).addClass(sticky_class);
4257	            if (manual_spacer == null) {
4258	              elm.after(spacer);
4259	              if (el_float === "left" || el_float === "right") {
4260	                spacer.append(elm);
4261	              }
4262	            }
4263	            elm.trigger("sticky_kit:stick");
4264	          }
4265	        }
4266	        if (fixed && enable_bottoming) {
4267	          if (will_bottom == null) {
4268	            will_bottom = scroll + height + offset > parent_height + parent_top;
4269	          }
4270	          if (!bottomed && will_bottom) {
4271	            bottomed = true;
4272	            if (parent.css("position") === "static") {
4273	              parent.css({
4274	                position: "relative"
4275	              });
4276	            }
4277	            return elm.css({
4278	              position: "absolute",
4279	              bottom: padding_bottom,
4280	              top: "auto"
4281	            }).trigger("sticky_kit:bottom");
4282	          }
4283	        }
4284	      };
4285	      recalc_and_tick = function() {
4286	        recalc();
4287	        return tick();
4288	      };
4289	      detach = function() {
4290	        detached = true;
4291	        win.off("touchmove", tick);
4292	        win.off("scroll", tick);
4293	        win.off("resize", recalc_and_tick);
4294	        $(document.body).off("sticky_kit:recalc", recalc_and_tick);
4295	        elm.off("sticky_kit:detach", detach);
4296	        elm.removeData("sticky_kit");
4297	        elm.css({
4298	          position: "",
4299	          bottom: "",
4300	          top: "",
4301	          width: ""
4302	        });
4303	        parent.position("position", "");
4304	        if (fixed) {
4305	          if (manual_spacer == null) {
4306	            if (el_float === "left" || el_float === "right") {
4307	              elm.insertAfter(spacer);
4308	            }
4309	            spacer.remove();
4310	          }
4311	          return elm.removeClass(sticky_class);
4312	        }
4313	      };
4314	      win.on("touchmove", tick);
4315	      win.on("scroll", tick);
4316	      win.on("resize", recalc_and_tick);
4317	      $(document.body).on("sticky_kit:recalc", recalc_and_tick);
4318	      elm.on("sticky_kit:detach", detach);
4319	      return setTimeout(tick, 0);
4320	    };
4321	    for (i = 0, len = this.length; i < len; i++) {
4322	      elm = this[i];
4323	      fn($(elm));
4324	    }
4325	    return this;
4326	  };
4327
4328	}).call(this);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.