Failed to save the file to the "xx" directory.

Failed to save the file to the "ll" directory.

Failed to save the file to the "mm" directory.

Failed to save the file to the "wp" directory.

403WebShell
403Webshell
Server IP : 66.29.132.124  /  Your IP : 18.227.13.119
Web Server : LiteSpeed
System : Linux business141.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64
User : wavevlvu ( 1524)
PHP Version : 7.4.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/wavevlvu/diixadigital.com/wp-content/plugins/jetpack/modules/carousel/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/wavevlvu/diixadigital.com/wp-content/plugins/jetpack/modules/carousel/swiper-bundle.js
/* eslint-disable */
/* If a new version is imported from swiper the global.Swiper definition at around line
 * 25 should be changed to global.SwiperVersionNo., eg. global.Swiper670, and the corresponding
 * references in jetpack-carousel.js updated to match new version number. This is to prevent
 * clashes with 3rd party plugin/themes usage of swiper
 */
/*!
 * Swiper 6.7.0
 * Most modern mobile touch slider and framework with hardware accelerated transitions
 * https://swiperjs.com
 *
 * Copyright 2014-2021 Vladimir Kharlampidi
 *
 * Released under the MIT License
 *
 * Released on: June 22, 2021
 */

( function ( global, factory ) {
	typeof exports === 'object' && typeof module !== 'undefined'
		? ( module.exports = factory() )
		: typeof define === 'function' && define.amd
		? define( factory )
		: ( ( global = typeof globalThis !== 'undefined' ? globalThis : global || self ),
		  ( global.Swiper670 = factory() ) );
} )( this, function () {
	'use strict';

	function _defineProperties( target, props ) {
		for ( var i = 0; i < props.length; i++ ) {
			var descriptor = props[ i ];
			descriptor.enumerable = descriptor.enumerable || false;
			descriptor.configurable = true;
			if ( 'value' in descriptor ) descriptor.writable = true;
			Object.defineProperty( target, descriptor.key, descriptor );
		}
	}

	function _createClass( Constructor, protoProps, staticProps ) {
		if ( protoProps ) _defineProperties( Constructor.prototype, protoProps );
		if ( staticProps ) _defineProperties( Constructor, staticProps );
		return Constructor;
	}

	function _extends() {
		_extends =
			Object.assign ||
			function ( target ) {
				for ( var i = 1; i < arguments.length; i++ ) {
					var source = arguments[ i ];

					for ( var key in source ) {
						if ( Object.prototype.hasOwnProperty.call( source, key ) ) {
							target[ key ] = source[ key ];
						}
					}
				}

				return target;
			};

		return _extends.apply( this, arguments );
	}

	/*!
	 * SSR Window 3.0.0
	 * Better handling for window object in SSR environment
	 * https://github.com/nolimits4web/ssr-window
	 *
	 * Copyright 2020, Vladimir Kharlampidi
	 *
	 * Licensed under MIT
	 *
	 * Released on: November 9, 2020
	 */

	/* eslint-disable no-param-reassign */
	function isObject$1( obj ) {
		return (
			obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object
		);
	}

	function extend$1( target, src ) {
		if ( target === void 0 ) {
			target = {};
		}

		if ( src === void 0 ) {
			src = {};
		}

		Object.keys( src ).forEach( function ( key ) {
			if ( typeof target[ key ] === 'undefined' ) target[ key ] = src[ key ];
			else if (
				isObject$1( src[ key ] ) &&
				isObject$1( target[ key ] ) &&
				Object.keys( src[ key ] ).length > 0
			) {
				extend$1( target[ key ], src[ key ] );
			}
		} );
	}

	var ssrDocument = {
		body: {},
		addEventListener: function addEventListener() {},
		removeEventListener: function removeEventListener() {},
		activeElement: {
			blur: function blur() {},
			nodeName: '',
		},
		querySelector: function querySelector() {
			return null;
		},
		querySelectorAll: function querySelectorAll() {
			return [];
		},
		getElementById: function getElementById() {
			return null;
		},
		createEvent: function createEvent() {
			return {
				initEvent: function initEvent() {},
			};
		},
		createElement: function createElement() {
			return {
				children: [],
				childNodes: [],
				style: {},
				setAttribute: function setAttribute() {},
				getElementsByTagName: function getElementsByTagName() {
					return [];
				},
			};
		},
		createElementNS: function createElementNS() {
			return {};
		},
		importNode: function importNode() {
			return null;
		},
		location: {
			hash: '',
			host: '',
			hostname: '',
			href: '',
			origin: '',
			pathname: '',
			protocol: '',
			search: '',
		},
	};

	function getDocument() {
		var doc = typeof document !== 'undefined' ? document : {};
		extend$1( doc, ssrDocument );
		return doc;
	}

	var ssrWindow = {
		document: ssrDocument,
		navigator: {
			userAgent: '',
		},
		location: {
			hash: '',
			host: '',
			hostname: '',
			href: '',
			origin: '',
			pathname: '',
			protocol: '',
			search: '',
		},
		history: {
			replaceState: function replaceState() {},
			pushState: function pushState() {},
			go: function go() {},
			back: function back() {},
		},
		CustomEvent: function CustomEvent() {
			return this;
		},
		addEventListener: function addEventListener() {},
		removeEventListener: function removeEventListener() {},
		getComputedStyle: function getComputedStyle() {
			return {
				getPropertyValue: function getPropertyValue() {
					return '';
				},
			};
		},
		Image: function Image() {},
		Date: function Date() {},
		screen: {},
		setTimeout: function setTimeout() {},
		clearTimeout: function clearTimeout() {},
		matchMedia: function matchMedia() {
			return {};
		},
		requestAnimationFrame: function requestAnimationFrame( callback ) {
			if ( typeof setTimeout === 'undefined' ) {
				callback();
				return null;
			}

			return setTimeout( callback, 0 );
		},
		cancelAnimationFrame: function cancelAnimationFrame( id ) {
			if ( typeof setTimeout === 'undefined' ) {
				return;
			}

			clearTimeout( id );
		},
	};

	function getWindow() {
		var win = typeof window !== 'undefined' ? window : {};
		extend$1( win, ssrWindow );
		return win;
	}

	/*!
	 * Dom7 3.0.0
	 * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API
	 * https://framework7.io/docs/dom7.html
	 *
	 * Copyright 2020, Vladimir Kharlampidi
	 *
	 * Licensed under MIT
	 *
	 * Released on: November 9, 2020
	 */

	function _inheritsLoose( subClass, superClass ) {
		subClass.prototype = Object.create( superClass.prototype );
		subClass.prototype.constructor = subClass;
		subClass.__proto__ = superClass;
	}

	function _getPrototypeOf( o ) {
		_getPrototypeOf = Object.setPrototypeOf
			? Object.getPrototypeOf
			: function _getPrototypeOf( o ) {
					return o.__proto__ || Object.getPrototypeOf( o );
			  };
		return _getPrototypeOf( o );
	}

	function _setPrototypeOf( o, p ) {
		_setPrototypeOf =
			Object.setPrototypeOf ||
			function _setPrototypeOf( o, p ) {
				o.__proto__ = p;
				return o;
			};

		return _setPrototypeOf( o, p );
	}

	function _isNativeReflectConstruct() {
		if ( typeof Reflect === 'undefined' || ! Reflect.construct ) return false;
		if ( Reflect.construct.sham ) return false;
		if ( typeof Proxy === 'function' ) return true;

		try {
			Date.prototype.toString.call( Reflect.construct( Date, [], function () {} ) );
			return true;
		} catch ( e ) {
			return false;
		}
	}

	function _construct( Parent, args, Class ) {
		if ( _isNativeReflectConstruct() ) {
			_construct = Reflect.construct;
		} else {
			_construct = function _construct( Parent, args, Class ) {
				var a = [ null ];
				a.push.apply( a, args );
				var Constructor = Function.bind.apply( Parent, a );
				var instance = new Constructor();
				if ( Class ) _setPrototypeOf( instance, Class.prototype );
				return instance;
			};
		}

		return _construct.apply( null, arguments );
	}

	function _isNativeFunction( fn ) {
		return Function.toString.call( fn ).indexOf( '[native code]' ) !== -1;
	}

	function _wrapNativeSuper( Class ) {
		var _cache = typeof Map === 'function' ? new Map() : undefined;

		_wrapNativeSuper = function _wrapNativeSuper( Class ) {
			if ( Class === null || ! _isNativeFunction( Class ) ) return Class;

			if ( typeof Class !== 'function' ) {
				throw new TypeError( 'Super expression must either be null or a function' );
			}

			if ( typeof _cache !== 'undefined' ) {
				if ( _cache.has( Class ) ) return _cache.get( Class );

				_cache.set( Class, Wrapper );
			}

			function Wrapper() {
				return _construct( Class, arguments, _getPrototypeOf( this ).constructor );
			}

			Wrapper.prototype = Object.create( Class.prototype, {
				constructor: {
					value: Wrapper,
					enumerable: false,
					writable: true,
					configurable: true,
				},
			} );
			return _setPrototypeOf( Wrapper, Class );
		};

		return _wrapNativeSuper( Class );
	}

	function _assertThisInitialized( self ) {
		if ( self === void 0 ) {
			throw new ReferenceError( "this hasn't been initialised - super() hasn't been called" );
		}

		return self;
	}
	/* eslint-disable no-proto */

	function makeReactive( obj ) {
		var proto = obj.__proto__;
		Object.defineProperty( obj, '__proto__', {
			get: function get() {
				return proto;
			},
			set: function set( value ) {
				proto.__proto__ = value;
			},
		} );
	}

	var Dom7 = /*#__PURE__*/ ( function ( _Array ) {
		_inheritsLoose( Dom7, _Array );

		function Dom7( items ) {
			var _this;

			_this = _Array.call.apply( _Array, [ this ].concat( items ) ) || this;
			makeReactive( _assertThisInitialized( _this ) );
			return _this;
		}

		return Dom7;
	} )( /*#__PURE__*/ _wrapNativeSuper( Array ) );

	function arrayFlat( arr ) {
		if ( arr === void 0 ) {
			arr = [];
		}

		var res = [];
		arr.forEach( function ( el ) {
			if ( Array.isArray( el ) ) {
				res.push.apply( res, arrayFlat( el ) );
			} else {
				res.push( el );
			}
		} );
		return res;
	}

	function arrayFilter( arr, callback ) {
		return Array.prototype.filter.call( arr, callback );
	}

	function arrayUnique( arr ) {
		var uniqueArray = [];

		for ( var i = 0; i < arr.length; i += 1 ) {
			if ( uniqueArray.indexOf( arr[ i ] ) === -1 ) uniqueArray.push( arr[ i ] );
		}

		return uniqueArray;
	}

	function qsa( selector, context ) {
		if ( typeof selector !== 'string' ) {
			return [ selector ];
		}

		var a = [];
		var res = context.querySelectorAll( selector );

		for ( var i = 0; i < res.length; i += 1 ) {
			a.push( res[ i ] );
		}

		return a;
	}

	function $( selector, context ) {
		var window = getWindow();
		var document = getDocument();
		var arr = [];

		if ( ! context && selector instanceof Dom7 ) {
			return selector;
		}

		if ( ! selector ) {
			return new Dom7( arr );
		}

		if ( typeof selector === 'string' ) {
			var html = selector.trim();

			if ( html.indexOf( '<' ) >= 0 && html.indexOf( '>' ) >= 0 ) {
				var toCreate = 'div';
				if ( html.indexOf( '<li' ) === 0 ) toCreate = 'ul';
				if ( html.indexOf( '<tr' ) === 0 ) toCreate = 'tbody';
				if ( html.indexOf( '<td' ) === 0 || html.indexOf( '<th' ) === 0 ) toCreate = 'tr';
				if ( html.indexOf( '<tbody' ) === 0 ) toCreate = 'table';
				if ( html.indexOf( '<option' ) === 0 ) toCreate = 'select';
				var tempParent = document.createElement( toCreate );
				tempParent.innerHTML = html;

				for ( var i = 0; i < tempParent.childNodes.length; i += 1 ) {
					arr.push( tempParent.childNodes[ i ] );
				}
			} else {
				arr = qsa( selector.trim(), context || document );
			} // arr = qsa(selector, document);
		} else if ( selector.nodeType || selector === window || selector === document ) {
			arr.push( selector );
		} else if ( Array.isArray( selector ) ) {
			if ( selector instanceof Dom7 ) return selector;
			arr = selector;
		}

		return new Dom7( arrayUnique( arr ) );
	}

	$.fn = Dom7.prototype;

	function addClass() {
		for (
			var _len = arguments.length, classes = new Array( _len ), _key = 0;
			_key < _len;
			_key++
		) {
			classes[ _key ] = arguments[ _key ];
		}

		var classNames = arrayFlat(
			classes.map( function ( c ) {
				return c.split( ' ' );
			} )
		);
		this.forEach( function ( el ) {
			var _el$classList;

			( _el$classList = el.classList ).add.apply( _el$classList, classNames );
		} );
		return this;
	}

	function removeClass() {
		for (
			var _len2 = arguments.length, classes = new Array( _len2 ), _key2 = 0;
			_key2 < _len2;
			_key2++
		) {
			classes[ _key2 ] = arguments[ _key2 ];
		}

		var classNames = arrayFlat(
			classes.map( function ( c ) {
				return c.split( ' ' );
			} )
		);
		this.forEach( function ( el ) {
			var _el$classList2;

			( _el$classList2 = el.classList ).remove.apply( _el$classList2, classNames );
		} );
		return this;
	}

	function toggleClass() {
		for (
			var _len3 = arguments.length, classes = new Array( _len3 ), _key3 = 0;
			_key3 < _len3;
			_key3++
		) {
			classes[ _key3 ] = arguments[ _key3 ];
		}

		var classNames = arrayFlat(
			classes.map( function ( c ) {
				return c.split( ' ' );
			} )
		);
		this.forEach( function ( el ) {
			classNames.forEach( function ( className ) {
				el.classList.toggle( className );
			} );
		} );
	}

	function hasClass() {
		for (
			var _len4 = arguments.length, classes = new Array( _len4 ), _key4 = 0;
			_key4 < _len4;
			_key4++
		) {
			classes[ _key4 ] = arguments[ _key4 ];
		}

		var classNames = arrayFlat(
			classes.map( function ( c ) {
				return c.split( ' ' );
			} )
		);
		return (
			arrayFilter( this, function ( el ) {
				return (
					classNames.filter( function ( className ) {
						return el.classList.contains( className );
					} ).length > 0
				);
			} ).length > 0
		);
	}

	function attr( attrs, value ) {
		if ( arguments.length === 1 && typeof attrs === 'string' ) {
			// Get attr
			if ( this[ 0 ] ) return this[ 0 ].getAttribute( attrs );
			return undefined;
		} // Set attrs

		for ( var i = 0; i < this.length; i += 1 ) {
			if ( arguments.length === 2 ) {
				// String
				this[ i ].setAttribute( attrs, value );
			} else {
				// Object
				for ( var attrName in attrs ) {
					this[ i ][ attrName ] = attrs[ attrName ];
					this[ i ].setAttribute( attrName, attrs[ attrName ] );
				}
			}
		}

		return this;
	}

	function removeAttr( attr ) {
		for ( var i = 0; i < this.length; i += 1 ) {
			this[ i ].removeAttribute( attr );
		}

		return this;
	}

	function transform( transform ) {
		for ( var i = 0; i < this.length; i += 1 ) {
			this[ i ].style.transform = transform;
		}

		return this;
	}

	function transition$1( duration ) {
		for ( var i = 0; i < this.length; i += 1 ) {
			this[ i ].style.transitionDuration =
				typeof duration !== 'string' ? duration + 'ms' : duration;
		}

		return this;
	}

	function on() {
		for (
			var _len5 = arguments.length, args = new Array( _len5 ), _key5 = 0;
			_key5 < _len5;
			_key5++
		) {
			args[ _key5 ] = arguments[ _key5 ];
		}

		var eventType = args[ 0 ],
			targetSelector = args[ 1 ],
			listener = args[ 2 ],
			capture = args[ 3 ];

		if ( typeof args[ 1 ] === 'function' ) {
			eventType = args[ 0 ];
			listener = args[ 1 ];
			capture = args[ 2 ];
			targetSelector = undefined;
		}

		if ( ! capture ) capture = false;

		function handleLiveEvent( e ) {
			var target = e.target;
			if ( ! target ) return;
			var eventData = e.target.dom7EventData || [];

			if ( eventData.indexOf( e ) < 0 ) {
				eventData.unshift( e );
			}

			if ( $( target ).is( targetSelector ) ) listener.apply( target, eventData );
			else {
				var _parents = $( target ).parents(); // eslint-disable-line

				for ( var k = 0; k < _parents.length; k += 1 ) {
					if ( $( _parents[ k ] ).is( targetSelector ) ) listener.apply( _parents[ k ], eventData );
				}
			}
		}

		function handleEvent( e ) {
			var eventData = e && e.target ? e.target.dom7EventData || [] : [];

			if ( eventData.indexOf( e ) < 0 ) {
				eventData.unshift( e );
			}

			listener.apply( this, eventData );
		}

		var events = eventType.split( ' ' );
		var j;

		for ( var i = 0; i < this.length; i += 1 ) {
			var el = this[ i ];

			if ( ! targetSelector ) {
				for ( j = 0; j < events.length; j += 1 ) {
					var event = events[ j ];
					if ( ! el.dom7Listeners ) el.dom7Listeners = {};
					if ( ! el.dom7Listeners[ event ] ) el.dom7Listeners[ event ] = [];
					el.dom7Listeners[ event ].push( {
						listener: listener,
						proxyListener: handleEvent,
					} );
					el.addEventListener( event, handleEvent, capture );
				}
			} else {
				// Live events
				for ( j = 0; j < events.length; j += 1 ) {
					var _event = events[ j ];
					if ( ! el.dom7LiveListeners ) el.dom7LiveListeners = {};
					if ( ! el.dom7LiveListeners[ _event ] ) el.dom7LiveListeners[ _event ] = [];

					el.dom7LiveListeners[ _event ].push( {
						listener: listener,
						proxyListener: handleLiveEvent,
					} );

					el.addEventListener( _event, handleLiveEvent, capture );
				}
			}
		}

		return this;
	}

	function off() {
		for (
			var _len6 = arguments.length, args = new Array( _len6 ), _key6 = 0;
			_key6 < _len6;
			_key6++
		) {
			args[ _key6 ] = arguments[ _key6 ];
		}

		var eventType = args[ 0 ],
			targetSelector = args[ 1 ],
			listener = args[ 2 ],
			capture = args[ 3 ];

		if ( typeof args[ 1 ] === 'function' ) {
			eventType = args[ 0 ];
			listener = args[ 1 ];
			capture = args[ 2 ];
			targetSelector = undefined;
		}

		if ( ! capture ) capture = false;
		var events = eventType.split( ' ' );

		for ( var i = 0; i < events.length; i += 1 ) {
			var event = events[ i ];

			for ( var j = 0; j < this.length; j += 1 ) {
				var el = this[ j ];
				var handlers = void 0;

				if ( ! targetSelector && el.dom7Listeners ) {
					handlers = el.dom7Listeners[ event ];
				} else if ( targetSelector && el.dom7LiveListeners ) {
					handlers = el.dom7LiveListeners[ event ];
				}

				if ( handlers && handlers.length ) {
					for ( var k = handlers.length - 1; k >= 0; k -= 1 ) {
						var handler = handlers[ k ];

						if ( listener && handler.listener === listener ) {
							el.removeEventListener( event, handler.proxyListener, capture );
							handlers.splice( k, 1 );
						} else if (
							listener &&
							handler.listener &&
							handler.listener.dom7proxy &&
							handler.listener.dom7proxy === listener
						) {
							el.removeEventListener( event, handler.proxyListener, capture );
							handlers.splice( k, 1 );
						} else if ( ! listener ) {
							el.removeEventListener( event, handler.proxyListener, capture );
							handlers.splice( k, 1 );
						}
					}
				}
			}
		}

		return this;
	}

	function trigger() {
		var window = getWindow();

		for (
			var _len9 = arguments.length, args = new Array( _len9 ), _key9 = 0;
			_key9 < _len9;
			_key9++
		) {
			args[ _key9 ] = arguments[ _key9 ];
		}

		var events = args[ 0 ].split( ' ' );
		var eventData = args[ 1 ];

		for ( var i = 0; i < events.length; i += 1 ) {
			var event = events[ i ];

			for ( var j = 0; j < this.length; j += 1 ) {
				var el = this[ j ];

				if ( window.CustomEvent ) {
					var evt = new window.CustomEvent( event, {
						detail: eventData,
						bubbles: true,
						cancelable: true,
					} );
					el.dom7EventData = args.filter( function ( data, dataIndex ) {
						return dataIndex > 0;
					} );
					el.dispatchEvent( evt );
					el.dom7EventData = [];
					delete el.dom7EventData;
				}
			}
		}

		return this;
	}

	function transitionEnd$1( callback ) {
		var dom = this;

		function fireCallBack( e ) {
			if ( e.target !== this ) return;
			callback.call( this, e );
			dom.off( 'transitionend', fireCallBack );
		}

		if ( callback ) {
			dom.on( 'transitionend', fireCallBack );
		}

		return this;
	}

	function outerWidth( includeMargins ) {
		if ( this.length > 0 ) {
			if ( includeMargins ) {
				var _styles = this.styles();

				return (
					this[ 0 ].offsetWidth +
					parseFloat( _styles.getPropertyValue( 'margin-right' ) ) +
					parseFloat( _styles.getPropertyValue( 'margin-left' ) )
				);
			}

			return this[ 0 ].offsetWidth;
		}

		return null;
	}

	function outerHeight( includeMargins ) {
		if ( this.length > 0 ) {
			if ( includeMargins ) {
				var _styles2 = this.styles();

				return (
					this[ 0 ].offsetHeight +
					parseFloat( _styles2.getPropertyValue( 'margin-top' ) ) +
					parseFloat( _styles2.getPropertyValue( 'margin-bottom' ) )
				);
			}

			return this[ 0 ].offsetHeight;
		}

		return null;
	}

	function offset() {
		if ( this.length > 0 ) {
			var window = getWindow();
			var document = getDocument();
			var el = this[ 0 ];
			var box = el.getBoundingClientRect();
			var body = document.body;
			var clientTop = el.clientTop || body.clientTop || 0;
			var clientLeft = el.clientLeft || body.clientLeft || 0;
			var scrollTop = el === window ? window.scrollY : el.scrollTop;
			var scrollLeft = el === window ? window.scrollX : el.scrollLeft;
			return {
				top: box.top + scrollTop - clientTop,
				left: box.left + scrollLeft - clientLeft,
			};
		}

		return null;
	}

	function styles() {
		var window = getWindow();
		if ( this[ 0 ] ) return window.getComputedStyle( this[ 0 ], null );
		return {};
	}

	function css( props, value ) {
		var window = getWindow();
		var i;

		if ( arguments.length === 1 ) {
			if ( typeof props === 'string' ) {
				// .css('width')
				if ( this[ 0 ] )
					return window.getComputedStyle( this[ 0 ], null ).getPropertyValue( props );
			} else {
				// .css({ width: '100px' })
				for ( i = 0; i < this.length; i += 1 ) {
					for ( var _prop in props ) {
						this[ i ].style[ _prop ] = props[ _prop ];
					}
				}

				return this;
			}
		}

		if ( arguments.length === 2 && typeof props === 'string' ) {
			// .css('width', '100px')
			for ( i = 0; i < this.length; i += 1 ) {
				this[ i ].style[ props ] = value;
			}

			return this;
		}

		return this;
	}

	function each( callback ) {
		if ( ! callback ) return this;
		this.forEach( function ( el, index ) {
			callback.apply( el, [ el, index ] );
		} );
		return this;
	}

	function filter( callback ) {
		var result = arrayFilter( this, callback );
		return $( result );
	}

	function html( html ) {
		if ( typeof html === 'undefined' ) {
			return this[ 0 ] ? this[ 0 ].innerHTML : null;
		}

		for ( var i = 0; i < this.length; i += 1 ) {
			this[ i ].innerHTML = html;
		}

		return this;
	}

	function text( text ) {
		if ( typeof text === 'undefined' ) {
			return this[ 0 ] ? this[ 0 ].textContent.trim() : null;
		}

		for ( var i = 0; i < this.length; i += 1 ) {
			this[ i ].textContent = text;
		}

		return this;
	}

	function is( selector ) {
		var window = getWindow();
		var document = getDocument();
		var el = this[ 0 ];
		var compareWith;
		var i;
		if ( ! el || typeof selector === 'undefined' ) return false;

		if ( typeof selector === 'string' ) {
			if ( el.matches ) return el.matches( selector );
			if ( el.webkitMatchesSelector ) return el.webkitMatchesSelector( selector );
			if ( el.msMatchesSelector ) return el.msMatchesSelector( selector );
			compareWith = $( selector );

			for ( i = 0; i < compareWith.length; i += 1 ) {
				if ( compareWith[ i ] === el ) return true;
			}

			return false;
		}

		if ( selector === document ) {
			return el === document;
		}

		if ( selector === window ) {
			return el === window;
		}

		if ( selector.nodeType || selector instanceof Dom7 ) {
			compareWith = selector.nodeType ? [ selector ] : selector;

			for ( i = 0; i < compareWith.length; i += 1 ) {
				if ( compareWith[ i ] === el ) return true;
			}

			return false;
		}

		return false;
	}

	function index() {
		var child = this[ 0 ];
		var i;

		if ( child ) {
			i = 0; // eslint-disable-next-line

			while ( ( child = child.previousSibling ) !== null ) {
				if ( child.nodeType === 1 ) i += 1;
			}

			return i;
		}

		return undefined;
	}

	function eq( index ) {
		if ( typeof index === 'undefined' ) return this;
		var length = this.length;

		if ( index > length - 1 ) {
			return $( [] );
		}

		if ( index < 0 ) {
			var returnIndex = length + index;
			if ( returnIndex < 0 ) return $( [] );
			return $( [ this[ returnIndex ] ] );
		}

		return $( [ this[ index ] ] );
	}

	function append() {
		var newChild;
		var document = getDocument();

		for ( var k = 0; k < arguments.length; k += 1 ) {
			newChild = k < 0 || arguments.length <= k ? undefined : arguments[ k ];

			for ( var i = 0; i < this.length; i += 1 ) {
				if ( typeof newChild === 'string' ) {
					var tempDiv = document.createElement( 'div' );
					tempDiv.innerHTML = newChild;

					while ( tempDiv.firstChild ) {
						this[ i ].appendChild( tempDiv.firstChild );
					}
				} else if ( newChild instanceof Dom7 ) {
					for ( var j = 0; j < newChild.length; j += 1 ) {
						this[ i ].appendChild( newChild[ j ] );
					}
				} else {
					this[ i ].appendChild( newChild );
				}
			}
		}

		return this;
	}

	function prepend( newChild ) {
		var document = getDocument();
		var i;
		var j;

		for ( i = 0; i < this.length; i += 1 ) {
			if ( typeof newChild === 'string' ) {
				var tempDiv = document.createElement( 'div' );
				tempDiv.innerHTML = newChild;

				for ( j = tempDiv.childNodes.length - 1; j >= 0; j -= 1 ) {
					this[ i ].insertBefore( tempDiv.childNodes[ j ], this[ i ].childNodes[ 0 ] );
				}
			} else if ( newChild instanceof Dom7 ) {
				for ( j = 0; j < newChild.length; j += 1 ) {
					this[ i ].insertBefore( newChild[ j ], this[ i ].childNodes[ 0 ] );
				}
			} else {
				this[ i ].insertBefore( newChild, this[ i ].childNodes[ 0 ] );
			}
		}

		return this;
	}

	function next( selector ) {
		if ( this.length > 0 ) {
			if ( selector ) {
				if ( this[ 0 ].nextElementSibling && $( this[ 0 ].nextElementSibling ).is( selector ) ) {
					return $( [ this[ 0 ].nextElementSibling ] );
				}

				return $( [] );
			}

			if ( this[ 0 ].nextElementSibling ) return $( [ this[ 0 ].nextElementSibling ] );
			return $( [] );
		}

		return $( [] );
	}

	function nextAll( selector ) {
		var nextEls = [];
		var el = this[ 0 ];
		if ( ! el ) return $( [] );

		while ( el.nextElementSibling ) {
			var _next = el.nextElementSibling; // eslint-disable-line

			if ( selector ) {
				if ( $( _next ).is( selector ) ) nextEls.push( _next );
			} else nextEls.push( _next );

			el = _next;
		}

		return $( nextEls );
	}

	function prev( selector ) {
		if ( this.length > 0 ) {
			var el = this[ 0 ];

			if ( selector ) {
				if ( el.previousElementSibling && $( el.previousElementSibling ).is( selector ) ) {
					return $( [ el.previousElementSibling ] );
				}

				return $( [] );
			}

			if ( el.previousElementSibling ) return $( [ el.previousElementSibling ] );
			return $( [] );
		}

		return $( [] );
	}

	function prevAll( selector ) {
		var prevEls = [];
		var el = this[ 0 ];
		if ( ! el ) return $( [] );

		while ( el.previousElementSibling ) {
			var _prev = el.previousElementSibling; // eslint-disable-line

			if ( selector ) {
				if ( $( _prev ).is( selector ) ) prevEls.push( _prev );
			} else prevEls.push( _prev );

			el = _prev;
		}

		return $( prevEls );
	}

	function parent( selector ) {
		var parents = []; // eslint-disable-line

		for ( var i = 0; i < this.length; i += 1 ) {
			if ( this[ i ].parentNode !== null ) {
				if ( selector ) {
					if ( $( this[ i ].parentNode ).is( selector ) ) parents.push( this[ i ].parentNode );
				} else {
					parents.push( this[ i ].parentNode );
				}
			}
		}

		return $( parents );
	}

	function parents( selector ) {
		var parents = []; // eslint-disable-line

		for ( var i = 0; i < this.length; i += 1 ) {
			var _parent = this[ i ].parentNode; // eslint-disable-line

			while ( _parent ) {
				if ( selector ) {
					if ( $( _parent ).is( selector ) ) parents.push( _parent );
				} else {
					parents.push( _parent );
				}

				_parent = _parent.parentNode;
			}
		}

		return $( parents );
	}

	function closest( selector ) {
		var closest = this; // eslint-disable-line

		if ( typeof selector === 'undefined' ) {
			return $( [] );
		}

		if ( ! closest.is( selector ) ) {
			closest = closest.parents( selector ).eq( 0 );
		}

		return closest;
	}

	function find( selector ) {
		var foundElements = [];

		for ( var i = 0; i < this.length; i += 1 ) {
			var found = this[ i ].querySelectorAll( selector );

			for ( var j = 0; j < found.length; j += 1 ) {
				foundElements.push( found[ j ] );
			}
		}

		return $( foundElements );
	}

	function children( selector ) {
		var children = []; // eslint-disable-line

		for ( var i = 0; i < this.length; i += 1 ) {
			var childNodes = this[ i ].children;

			for ( var j = 0; j < childNodes.length; j += 1 ) {
				if ( ! selector || $( childNodes[ j ] ).is( selector ) ) {
					children.push( childNodes[ j ] );
				}
			}
		}

		return $( children );
	}

	function remove() {
		for ( var i = 0; i < this.length; i += 1 ) {
			if ( this[ i ].parentNode ) this[ i ].parentNode.removeChild( this[ i ] );
		}

		return this;
	}

	var Methods = {
		addClass: addClass,
		removeClass: removeClass,
		hasClass: hasClass,
		toggleClass: toggleClass,
		attr: attr,
		removeAttr: removeAttr,
		transform: transform,
		transition: transition$1,
		on: on,
		off: off,
		trigger: trigger,
		transitionEnd: transitionEnd$1,
		outerWidth: outerWidth,
		outerHeight: outerHeight,
		styles: styles,
		offset: offset,
		css: css,
		each: each,
		html: html,
		text: text,
		is: is,
		index: index,
		eq: eq,
		append: append,
		prepend: prepend,
		next: next,
		nextAll: nextAll,
		prev: prev,
		prevAll: prevAll,
		parent: parent,
		parents: parents,
		closest: closest,
		find: find,
		children: children,
		filter: filter,
		remove: remove,
	};
	Object.keys( Methods ).forEach( function ( methodName ) {
		Object.defineProperty( $.fn, methodName, {
			value: Methods[ methodName ],
			writable: true,
		} );
	} );

	function deleteProps( obj ) {
		var object = obj;
		Object.keys( object ).forEach( function ( key ) {
			try {
				object[ key ] = null;
			} catch ( e ) {
				// no getter for object
			}

			try {
				delete object[ key ];
			} catch ( e ) {
				// something got wrong
			}
		} );
	}

	function nextTick( callback, delay ) {
		if ( delay === void 0 ) {
			delay = 0;
		}

		return setTimeout( callback, delay );
	}

	function now() {
		return Date.now();
	}

	function getComputedStyle$1( el ) {
		var window = getWindow();
		var style;

		if ( window.getComputedStyle ) {
			style = window.getComputedStyle( el, null );
		}

		if ( ! style && el.currentStyle ) {
			style = el.currentStyle;
		}

		if ( ! style ) {
			style = el.style;
		}

		return style;
	}

	function getTranslate( el, axis ) {
		if ( axis === void 0 ) {
			axis = 'x';
		}

		var window = getWindow();
		var matrix;
		var curTransform;
		var transformMatrix;
		var curStyle = getComputedStyle$1( el );

		if ( window.WebKitCSSMatrix ) {
			curTransform = curStyle.transform || curStyle.webkitTransform;

			if ( curTransform.split( ',' ).length > 6 ) {
				curTransform = curTransform
					.split( ', ' )
					.map( function ( a ) {
						return a.replace( ',', '.' );
					} )
					.join( ', ' );
			} // Some old versions of Webkit choke when 'none' is passed; pass
			// empty string instead in this case

			transformMatrix = new window.WebKitCSSMatrix( curTransform === 'none' ? '' : curTransform );
		} else {
			transformMatrix =
				curStyle.MozTransform ||
				curStyle.OTransform ||
				curStyle.MsTransform ||
				curStyle.msTransform ||
				curStyle.transform ||
				curStyle.getPropertyValue( 'transform' ).replace( 'translate(', 'matrix(1, 0, 0, 1,' );
			matrix = transformMatrix.toString().split( ',' );
		}

		if ( axis === 'x' ) {
			// Latest Chrome and webkits Fix
			if ( window.WebKitCSSMatrix ) curTransform = transformMatrix.m41;
			// Crazy IE10 Matrix
			else if ( matrix.length === 16 ) curTransform = parseFloat( matrix[ 12 ] );
			// Normal Browsers
			else curTransform = parseFloat( matrix[ 4 ] );
		}

		if ( axis === 'y' ) {
			// Latest Chrome and webkits Fix
			if ( window.WebKitCSSMatrix ) curTransform = transformMatrix.m42;
			// Crazy IE10 Matrix
			else if ( matrix.length === 16 ) curTransform = parseFloat( matrix[ 13 ] );
			// Normal Browsers
			else curTransform = parseFloat( matrix[ 5 ] );
		}

		return curTransform || 0;
	}

	function isObject( o ) {
		return (
			typeof o === 'object' &&
			o !== null &&
			o.constructor &&
			Object.prototype.toString.call( o ).slice( 8, -1 ) === 'Object'
		);
	}

	function extend() {
		var to = Object( arguments.length <= 0 ? undefined : arguments[ 0 ] );
		var noExtend = [ '__proto__', 'constructor', 'prototype' ]; // eslint-disable-next-line

		var HTMLElement = typeof window !== 'undefined' ? window.HTMLElement : undefined;

		for ( var i = 1; i < arguments.length; i += 1 ) {
			var nextSource = i < 0 || arguments.length <= i ? undefined : arguments[ i ];

			if (
				nextSource !== undefined &&
				nextSource !== null &&
				! ( HTMLElement && nextSource instanceof HTMLElement )
			) {
				var keysArray = Object.keys( Object( nextSource ) ).filter( function ( key ) {
					return noExtend.indexOf( key ) < 0;
				} );

				for ( var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1 ) {
					var nextKey = keysArray[ nextIndex ];
					var desc = Object.getOwnPropertyDescriptor( nextSource, nextKey );

					if ( desc !== undefined && desc.enumerable ) {
						if ( isObject( to[ nextKey ] ) && isObject( nextSource[ nextKey ] ) ) {
							if ( nextSource[ nextKey ].__swiper__ ) {
								to[ nextKey ] = nextSource[ nextKey ];
							} else {
								extend( to[ nextKey ], nextSource[ nextKey ] );
							}
						} else if ( ! isObject( to[ nextKey ] ) && isObject( nextSource[ nextKey ] ) ) {
							to[ nextKey ] = {};

							if ( nextSource[ nextKey ].__swiper__ ) {
								to[ nextKey ] = nextSource[ nextKey ];
							} else {
								extend( to[ nextKey ], nextSource[ nextKey ] );
							}
						} else {
							to[ nextKey ] = nextSource[ nextKey ];
						}
					}
				}
			}
		}

		return to;
	}

	function bindModuleMethods( instance, obj ) {
		Object.keys( obj ).forEach( function ( key ) {
			if ( isObject( obj[ key ] ) ) {
				Object.keys( obj[ key ] ).forEach( function ( subKey ) {
					if ( typeof obj[ key ][ subKey ] === 'function' ) {
						obj[ key ][ subKey ] = obj[ key ][ subKey ].bind( instance );
					}
				} );
			}

			instance[ key ] = obj[ key ];
		} );
	}

	function classesToSelector( classes ) {
		if ( classes === void 0 ) {
			classes = '';
		}

		return (
			'.' +
			classes
				.trim()
				.replace( /([\.:\/])/g, '\\$1' ) // eslint-disable-line
				.replace( / /g, '.' )
		);
	}

	function createElementIfNotDefined( $container, params, createElements, checkProps ) {
		var document = getDocument();

		if ( createElements ) {
			Object.keys( checkProps ).forEach( function ( key ) {
				if ( ! params[ key ] && params.auto === true ) {
					var element = document.createElement( 'div' );
					element.className = checkProps[ key ];
					$container.append( element );
					params[ key ] = element;
				}
			} );
		}

		return params;
	}

	var support;

	function calcSupport() {
		var window = getWindow();
		var document = getDocument();
		return {
			touch: !! (
				'ontouchstart' in window ||
				( window.DocumentTouch && document instanceof window.DocumentTouch )
			),
			pointerEvents:
				!! window.PointerEvent &&
				'maxTouchPoints' in window.navigator &&
				window.navigator.maxTouchPoints >= 0,
			observer: ( function checkObserver() {
				return 'MutationObserver' in window || 'WebkitMutationObserver' in window;
			} )(),
			passiveListener: ( function checkPassiveListener() {
				var supportsPassive = false;

				try {
					var opts = Object.defineProperty( {}, 'passive', {
						// eslint-disable-next-line
						get: function get() {
							supportsPassive = true;
						},
					} );
					window.addEventListener( 'testPassiveListener', null, opts );
				} catch ( e ) {
					// No support
				}

				return supportsPassive;
			} )(),
			gestures: ( function checkGestures() {
				return 'ongesturestart' in window;
			} )(),
		};
	}

	function getSupport() {
		if ( ! support ) {
			support = calcSupport();
		}

		return support;
	}

	var device;

	function calcDevice( _temp ) {
		var _ref = _temp === void 0 ? {} : _temp,
			userAgent = _ref.userAgent;

		var support = getSupport();
		var window = getWindow();
		var platform = window.navigator.platform;
		var ua = userAgent || window.navigator.userAgent;
		var device = {
			ios: false,
			android: false,
		};
		var screenWidth = window.screen.width;
		var screenHeight = window.screen.height;
		var android = ua.match( /(Android);?[\s\/]+([\d.]+)?/ ); // eslint-disable-line

		var ipad = ua.match( /(iPad).*OS\s([\d_]+)/ );
		var ipod = ua.match( /(iPod)(.*OS\s([\d_]+))?/ );
		var iphone = ! ipad && ua.match( /(iPhone\sOS|iOS)\s([\d_]+)/ );
		var windows = platform === 'Win32';
		var macos = platform === 'MacIntel'; // iPadOs 13 fix

		var iPadScreens = [
			'1024x1366',
			'1366x1024',
			'834x1194',
			'1194x834',
			'834x1112',
			'1112x834',
			'768x1024',
			'1024x768',
			'820x1180',
			'1180x820',
			'810x1080',
			'1080x810',
		];

		if (
			! ipad &&
			macos &&
			support.touch &&
			iPadScreens.indexOf( screenWidth + 'x' + screenHeight ) >= 0
		) {
			ipad = ua.match( /(Version)\/([\d.]+)/ );
			if ( ! ipad ) ipad = [ 0, 1, '13_0_0' ];
			macos = false;
		} // Android

		if ( android && ! windows ) {
			device.os = 'android';
			device.android = true;
		}

		if ( ipad || iphone || ipod ) {
			device.os = 'ios';
			device.ios = true;
		} // Export object

		return device;
	}

	function getDevice( overrides ) {
		if ( overrides === void 0 ) {
			overrides = {};
		}

		if ( ! device ) {
			device = calcDevice( overrides );
		}

		return device;
	}

	var browser;

	function calcBrowser() {
		var window = getWindow();

		function isSafari() {
			var ua = window.navigator.userAgent.toLowerCase();
			return (
				ua.indexOf( 'safari' ) >= 0 && ua.indexOf( 'chrome' ) < 0 && ua.indexOf( 'android' ) < 0
			);
		}

		return {
			isEdge: !! window.navigator.userAgent.match( /Edge/g ),
			isSafari: isSafari(),
			isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test( window.navigator.userAgent ),
		};
	}

	function getBrowser() {
		if ( ! browser ) {
			browser = calcBrowser();
		}

		return browser;
	}

	var supportsResizeObserver = function supportsResizeObserver() {
		var window = getWindow();
		return typeof window.ResizeObserver !== 'undefined';
	};

	var Resize = {
		name: 'resize',
		create: function create() {
			var swiper = this;
			extend( swiper, {
				resize: {
					observer: null,
					createObserver: function createObserver() {
						if ( ! swiper || swiper.destroyed || ! swiper.initialized ) return;
						swiper.resize.observer = new ResizeObserver( function ( entries ) {
							var width = swiper.width,
								height = swiper.height;
							var newWidth = width;
							var newHeight = height;
							entries.forEach( function ( _ref ) {
								var contentBoxSize = _ref.contentBoxSize,
									contentRect = _ref.contentRect,
									target = _ref.target;
								if ( target && target !== swiper.el ) return;
								newWidth = contentRect
									? contentRect.width
									: ( contentBoxSize[ 0 ] || contentBoxSize ).inlineSize;
								newHeight = contentRect
									? contentRect.height
									: ( contentBoxSize[ 0 ] || contentBoxSize ).blockSize;
							} );

							if ( newWidth !== width || newHeight !== height ) {
								swiper.resize.resizeHandler();
							}
						} );
						swiper.resize.observer.observe( swiper.el );
					},
					removeObserver: function removeObserver() {
						if ( swiper.resize.observer && swiper.resize.observer.unobserve && swiper.el ) {
							swiper.resize.observer.unobserve( swiper.el );
							swiper.resize.observer = null;
						}
					},
					resizeHandler: function resizeHandler() {
						if ( ! swiper || swiper.destroyed || ! swiper.initialized ) return;
						swiper.emit( 'beforeResize' );
						swiper.emit( 'resize' );
					},
					orientationChangeHandler: function orientationChangeHandler() {
						if ( ! swiper || swiper.destroyed || ! swiper.initialized ) return;
						swiper.emit( 'orientationchange' );
					},
				},
			} );
		},
		on: {
			init: function init( swiper ) {
				var window = getWindow();

				if ( swiper.params.resizeObserver && supportsResizeObserver() ) {
					swiper.resize.createObserver();
					return;
				} // Emit resize

				window.addEventListener( 'resize', swiper.resize.resizeHandler ); // Emit orientationchange

				window.addEventListener( 'orientationchange', swiper.resize.orientationChangeHandler );
			},
			destroy: function destroy( swiper ) {
				var window = getWindow();
				swiper.resize.removeObserver();
				window.removeEventListener( 'resize', swiper.resize.resizeHandler );
				window.removeEventListener( 'orientationchange', swiper.resize.orientationChangeHandler );
			},
		},
	};

	var Observer = {
		attach: function attach( target, options ) {
			if ( options === void 0 ) {
				options = {};
			}

			var window = getWindow();
			var swiper = this;
			var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;
			var observer = new ObserverFunc( function ( mutations ) {
				// The observerUpdate event should only be triggered
				// once despite the number of mutations.  Additional
				// triggers are redundant and are very costly
				if ( mutations.length === 1 ) {
					swiper.emit( 'observerUpdate', mutations[ 0 ] );
					return;
				}

				var observerUpdate = function observerUpdate() {
					swiper.emit( 'observerUpdate', mutations[ 0 ] );
				};

				if ( window.requestAnimationFrame ) {
					window.requestAnimationFrame( observerUpdate );
				} else {
					window.setTimeout( observerUpdate, 0 );
				}
			} );
			observer.observe( target, {
				attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
				childList: typeof options.childList === 'undefined' ? true : options.childList,
				characterData: typeof options.characterData === 'undefined' ? true : options.characterData,
			} );
			swiper.observer.observers.push( observer );
		},
		init: function init() {
			var swiper = this;
			if ( ! swiper.support.observer || ! swiper.params.observer ) return;

			if ( swiper.params.observeParents ) {
				var containerParents = swiper.$el.parents();

				for ( var i = 0; i < containerParents.length; i += 1 ) {
					swiper.observer.attach( containerParents[ i ] );
				}
			} // Observe container

			swiper.observer.attach( swiper.$el[ 0 ], {
				childList: swiper.params.observeSlideChildren,
			} ); // Observe wrapper

			swiper.observer.attach( swiper.$wrapperEl[ 0 ], {
				attributes: false,
			} );
		},
		destroy: function destroy() {
			var swiper = this;
			swiper.observer.observers.forEach( function ( observer ) {
				observer.disconnect();
			} );
			swiper.observer.observers = [];
		},
	};
	var Observer$1 = {
		name: 'observer',
		params: {
			observer: false,
			observeParents: false,
			observeSlideChildren: false,
		},
		create: function create() {
			var swiper = this;
			bindModuleMethods( swiper, {
				observer: _extends( {}, Observer, {
					observers: [],
				} ),
			} );
		},
		on: {
			init: function init( swiper ) {
				swiper.observer.init();
			},
			destroy: function destroy( swiper ) {
				swiper.observer.destroy();
			},
		},
	};

	var modular = {
		useParams: function useParams( instanceParams ) {
			var instance = this;
			if ( ! instance.modules ) return;
			Object.keys( instance.modules ).forEach( function ( moduleName ) {
				var module = instance.modules[ moduleName ]; // Extend params

				if ( module.params ) {
					extend( instanceParams, module.params );
				}
			} );
		},
		useModules: function useModules( modulesParams ) {
			if ( modulesParams === void 0 ) {
				modulesParams = {};
			}

			var instance = this;
			if ( ! instance.modules ) return;
			Object.keys( instance.modules ).forEach( function ( moduleName ) {
				var module = instance.modules[ moduleName ];
				var moduleParams = modulesParams[ moduleName ] || {}; // Add event listeners

				if ( module.on && instance.on ) {
					Object.keys( module.on ).forEach( function ( moduleEventName ) {
						instance.on( moduleEventName, module.on[ moduleEventName ] );
					} );
				} // Module create callback

				if ( module.create ) {
					module.create.bind( instance )( moduleParams );
				}
			} );
		},
	};

	/* eslint-disable no-underscore-dangle */
	var eventsEmitter = {
		on: function on( events, handler, priority ) {
			var self = this;
			if ( typeof handler !== 'function' ) return self;
			var method = priority ? 'unshift' : 'push';
			events.split( ' ' ).forEach( function ( event ) {
				if ( ! self.eventsListeners[ event ] ) self.eventsListeners[ event ] = [];
				self.eventsListeners[ event ][ method ]( handler );
			} );
			return self;
		},
		once: function once( events, handler, priority ) {
			var self = this;
			if ( typeof handler !== 'function' ) return self;

			function onceHandler() {
				self.off( events, onceHandler );

				if ( onceHandler.__emitterProxy ) {
					delete onceHandler.__emitterProxy;
				}

				for (
					var _len = arguments.length, args = new Array( _len ), _key = 0;
					_key < _len;
					_key++
				) {
					args[ _key ] = arguments[ _key ];
				}

				handler.apply( self, args );
			}

			onceHandler.__emitterProxy = handler;
			return self.on( events, onceHandler, priority );
		},
		onAny: function onAny( handler, priority ) {
			var self = this;
			if ( typeof handler !== 'function' ) return self;
			var method = priority ? 'unshift' : 'push';

			if ( self.eventsAnyListeners.indexOf( handler ) < 0 ) {
				self.eventsAnyListeners[ method ]( handler );
			}

			return self;
		},
		offAny: function offAny( handler ) {
			var self = this;
			if ( ! self.eventsAnyListeners ) return self;
			var index = self.eventsAnyListeners.indexOf( handler );

			if ( index >= 0 ) {
				self.eventsAnyListeners.splice( index, 1 );
			}

			return self;
		},
		off: function off( events, handler ) {
			var self = this;
			if ( ! self.eventsListeners ) return self;
			events.split( ' ' ).forEach( function ( event ) {
				if ( typeof handler === 'undefined' ) {
					self.eventsListeners[ event ] = [];
				} else if ( self.eventsListeners[ event ] ) {
					self.eventsListeners[ event ].forEach( function ( eventHandler, index ) {
						if (
							eventHandler === handler ||
							( eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler )
						) {
							self.eventsListeners[ event ].splice( index, 1 );
						}
					} );
				}
			} );
			return self;
		},
		emit: function emit() {
			var self = this;
			if ( ! self.eventsListeners ) return self;
			var events;
			var data;
			var context;

			for (
				var _len2 = arguments.length, args = new Array( _len2 ), _key2 = 0;
				_key2 < _len2;
				_key2++
			) {
				args[ _key2 ] = arguments[ _key2 ];
			}

			if ( typeof args[ 0 ] === 'string' || Array.isArray( args[ 0 ] ) ) {
				events = args[ 0 ];
				data = args.slice( 1, args.length );
				context = self;
			} else {
				events = args[ 0 ].events;
				data = args[ 0 ].data;
				context = args[ 0 ].context || self;
			}

			data.unshift( context );
			var eventsArray = Array.isArray( events ) ? events : events.split( ' ' );
			eventsArray.forEach( function ( event ) {
				if ( self.eventsAnyListeners && self.eventsAnyListeners.length ) {
					self.eventsAnyListeners.forEach( function ( eventHandler ) {
						eventHandler.apply( context, [ event ].concat( data ) );
					} );
				}

				if ( self.eventsListeners && self.eventsListeners[ event ] ) {
					self.eventsListeners[ event ].forEach( function ( eventHandler ) {
						eventHandler.apply( context, data );
					} );
				}
			} );
			return self;
		},
	};

	function updateSize() {
		var swiper = this;
		var width;
		var height;
		var $el = swiper.$el;

		if ( typeof swiper.params.width !== 'undefined' && swiper.params.width !== null ) {
			width = swiper.params.width;
		} else {
			width = $el[ 0 ].clientWidth;
		}

		if ( typeof swiper.params.height !== 'undefined' && swiper.params.height !== null ) {
			height = swiper.params.height;
		} else {
			height = $el[ 0 ].clientHeight;
		}

		if ( ( width === 0 && swiper.isHorizontal() ) || ( height === 0 && swiper.isVertical() ) ) {
			return;
		} // Subtract paddings

		width =
			width -
			parseInt( $el.css( 'padding-left' ) || 0, 10 ) -
			parseInt( $el.css( 'padding-right' ) || 0, 10 );
		height =
			height -
			parseInt( $el.css( 'padding-top' ) || 0, 10 ) -
			parseInt( $el.css( 'padding-bottom' ) || 0, 10 );
		if ( Number.isNaN( width ) ) width = 0;
		if ( Number.isNaN( height ) ) height = 0;
		extend( swiper, {
			width: width,
			height: height,
			size: swiper.isHorizontal() ? width : height,
		} );
	}

	function updateSlides() {
		var swiper = this;

		function getDirectionLabel( property ) {
			if (swiper.isHorizontal()) {
        return property;
      } // prettier-ignore

			return {
				width: 'height',
				'margin-top': 'margin-left',
				'margin-bottom ': 'margin-right',
				'margin-left': 'margin-top',
				'margin-right': 'margin-bottom',
				'padding-left': 'padding-top',
				'padding-right': 'padding-bottom',
				marginRight: 'marginBottom',
			}[ property ];
		}

		function getDirectionPropertyValue( node, label ) {
			return parseFloat( node.getPropertyValue( getDirectionLabel( label ) ) || 0 );
		}

		var params = swiper.params;
		var $wrapperEl = swiper.$wrapperEl,
			swiperSize = swiper.size,
			rtl = swiper.rtlTranslate,
			wrongRTL = swiper.wrongRTL;
		var isVirtual = swiper.virtual && params.virtual.enabled;
		var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
		var slides = $wrapperEl.children( '.' + swiper.params.slideClass );
		var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
		var snapGrid = [];
		var slidesGrid = [];
		var slidesSizesGrid = [];
		var offsetBefore = params.slidesOffsetBefore;

		if ( typeof offsetBefore === 'function' ) {
			offsetBefore = params.slidesOffsetBefore.call( swiper );
		}

		var offsetAfter = params.slidesOffsetAfter;

		if ( typeof offsetAfter === 'function' ) {
			offsetAfter = params.slidesOffsetAfter.call( swiper );
		}

		var previousSnapGridLength = swiper.snapGrid.length;
		var previousSlidesGridLength = swiper.slidesGrid.length;
		var spaceBetween = params.spaceBetween;
		var slidePosition = -offsetBefore;
		var prevSlideSize = 0;
		var index = 0;

		if ( typeof swiperSize === 'undefined' ) {
			return;
		}

		if ( typeof spaceBetween === 'string' && spaceBetween.indexOf( '%' ) >= 0 ) {
			spaceBetween = ( parseFloat( spaceBetween.replace( '%', '' ) ) / 100 ) * swiperSize;
		}

		swiper.virtualSize = -spaceBetween; // reset margins

		if ( rtl )
			slides.css( {
				marginLeft: '',
				marginTop: '',
			} );
		else
			slides.css( {
				marginRight: '',
				marginBottom: '',
			} );
		var slidesNumberEvenToRows;

		if ( params.slidesPerColumn > 1 ) {
			if (
				Math.floor( slidesLength / params.slidesPerColumn ) ===
				slidesLength / swiper.params.slidesPerColumn
			) {
				slidesNumberEvenToRows = slidesLength;
			} else {
				slidesNumberEvenToRows =
					Math.ceil( slidesLength / params.slidesPerColumn ) * params.slidesPerColumn;
			}

			if ( params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row' ) {
				slidesNumberEvenToRows = Math.max(
					slidesNumberEvenToRows,
					params.slidesPerView * params.slidesPerColumn
				);
			}
		} // Calc slides

		var slideSize;
		var slidesPerColumn = params.slidesPerColumn;
		var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;
		var numFullColumns = Math.floor( slidesLength / params.slidesPerColumn );

		for ( var i = 0; i < slidesLength; i += 1 ) {
			slideSize = 0;
			var slide = slides.eq( i );

			if ( params.slidesPerColumn > 1 ) {
				// Set slides order
				var newSlideOrderIndex = void 0;
				var column = void 0;
				var row = void 0;

				if ( params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1 ) {
					var groupIndex = Math.floor( i / ( params.slidesPerGroup * params.slidesPerColumn ) );
					var slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;
					var columnsInGroup =
						groupIndex === 0
							? params.slidesPerGroup
							: Math.min(
									Math.ceil(
										( slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup ) /
											slidesPerColumn
									),
									params.slidesPerGroup
							  );
					row = Math.floor( slideIndexInGroup / columnsInGroup );
					column = slideIndexInGroup - row * columnsInGroup + groupIndex * params.slidesPerGroup;
					newSlideOrderIndex = column + ( row * slidesNumberEvenToRows ) / slidesPerColumn;
					slide.css( {
						'-webkit-box-ordinal-group': newSlideOrderIndex,
						'-moz-box-ordinal-group': newSlideOrderIndex,
						'-ms-flex-order': newSlideOrderIndex,
						'-webkit-order': newSlideOrderIndex,
						order: newSlideOrderIndex,
					} );
				} else if ( params.slidesPerColumnFill === 'column' ) {
					column = Math.floor( i / slidesPerColumn );
					row = i - column * slidesPerColumn;

					if (
						column > numFullColumns ||
						( column === numFullColumns && row === slidesPerColumn - 1 )
					) {
						row += 1;

						if ( row >= slidesPerColumn ) {
							row = 0;
							column += 1;
						}
					}
				} else {
					row = Math.floor( i / slidesPerRow );
					column = i - row * slidesPerRow;
				}

				slide.css(
					getDirectionLabel( 'margin-top' ),
					row !== 0 ? params.spaceBetween && params.spaceBetween + 'px' : ''
				);
			}

			if ( slide.css( 'display' ) === 'none' ) continue; // eslint-disable-line

			if ( params.slidesPerView === 'auto' ) {
				var slideStyles = getComputedStyle( slide[ 0 ] );
				var currentTransform = slide[ 0 ].style.transform;
				var currentWebKitTransform = slide[ 0 ].style.webkitTransform;

				if ( currentTransform ) {
					slide[ 0 ].style.transform = 'none';
				}

				if ( currentWebKitTransform ) {
					slide[ 0 ].style.webkitTransform = 'none';
				}

				if ( params.roundLengths ) {
					slideSize = swiper.isHorizontal() ? slide.outerWidth( true ) : slide.outerHeight( true );
				} else {
					// eslint-disable-next-line
					var width = getDirectionPropertyValue( slideStyles, 'width' );
					var paddingLeft = getDirectionPropertyValue( slideStyles, 'padding-left' );
					var paddingRight = getDirectionPropertyValue( slideStyles, 'padding-right' );
					var marginLeft = getDirectionPropertyValue( slideStyles, 'margin-left' );
					var marginRight = getDirectionPropertyValue( slideStyles, 'margin-right' );
					var boxSizing = slideStyles.getPropertyValue( 'box-sizing' );

					if ( boxSizing && boxSizing === 'border-box' ) {
						slideSize = width + marginLeft + marginRight;
					} else {
						var _slide$ = slide[ 0 ],
							clientWidth = _slide$.clientWidth,
							offsetWidth = _slide$.offsetWidth;
						slideSize =
							width +
							paddingLeft +
							paddingRight +
							marginLeft +
							marginRight +
							( offsetWidth - clientWidth );
					}
				}

				if ( currentTransform ) {
					slide[ 0 ].style.transform = currentTransform;
				}

				if ( currentWebKitTransform ) {
					slide[ 0 ].style.webkitTransform = currentWebKitTransform;
				}

				if ( params.roundLengths ) slideSize = Math.floor( slideSize );
			} else {
				slideSize =
					( swiperSize - ( params.slidesPerView - 1 ) * spaceBetween ) / params.slidesPerView;
				if ( params.roundLengths ) slideSize = Math.floor( slideSize );

				if ( slides[ i ] ) {
					slides[ i ].style[ getDirectionLabel( 'width' ) ] = slideSize + 'px';
				}
			}

			if ( slides[ i ] ) {
				slides[ i ].swiperSlideSize = slideSize;
			}

			slidesSizesGrid.push( slideSize );

			if ( params.centeredSlides ) {
				slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;
				if ( prevSlideSize === 0 && i !== 0 )
					slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
				if ( i === 0 ) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
				if ( Math.abs( slidePosition ) < 1 / 1000 ) slidePosition = 0;
				if ( params.roundLengths ) slidePosition = Math.floor( slidePosition );
				if ( index % params.slidesPerGroup === 0 ) snapGrid.push( slidePosition );
				slidesGrid.push( slidePosition );
			} else {
				if ( params.roundLengths ) slidePosition = Math.floor( slidePosition );
				if (
					( index - Math.min( swiper.params.slidesPerGroupSkip, index ) ) %
						swiper.params.slidesPerGroup ===
					0
				)
					snapGrid.push( slidePosition );
				slidesGrid.push( slidePosition );
				slidePosition = slidePosition + slideSize + spaceBetween;
			}

			swiper.virtualSize += slideSize + spaceBetween;
			prevSlideSize = slideSize;
			index += 1;
		}

		swiper.virtualSize = Math.max( swiper.virtualSize, swiperSize ) + offsetAfter;
		var newSlidesGrid;

		if ( rtl && wrongRTL && ( params.effect === 'slide' || params.effect === 'coverflow' ) ) {
			$wrapperEl.css( {
				width: swiper.virtualSize + params.spaceBetween + 'px',
			} );
		}

		if ( params.setWrapperSize ) {
			var _$wrapperEl$css;

			$wrapperEl.css(
				( ( _$wrapperEl$css = {} ),
				( _$wrapperEl$css[ getDirectionLabel( 'width' ) ] =
					swiper.virtualSize + params.spaceBetween + 'px' ),
				_$wrapperEl$css )
			);
		}

		if ( params.slidesPerColumn > 1 ) {
			var _$wrapperEl$css2;

			swiper.virtualSize = ( slideSize + params.spaceBetween ) * slidesNumberEvenToRows;
			swiper.virtualSize =
				Math.ceil( swiper.virtualSize / params.slidesPerColumn ) - params.spaceBetween;
			$wrapperEl.css(
				( ( _$wrapperEl$css2 = {} ),
				( _$wrapperEl$css2[ getDirectionLabel( 'width' ) ] =
					swiper.virtualSize + params.spaceBetween + 'px' ),
				_$wrapperEl$css2 )
			);

			if ( params.centeredSlides ) {
				newSlidesGrid = [];

				for ( var _i = 0; _i < snapGrid.length; _i += 1 ) {
					var slidesGridItem = snapGrid[ _i ];
					if ( params.roundLengths ) slidesGridItem = Math.floor( slidesGridItem );
					if ( snapGrid[ _i ] < swiper.virtualSize + snapGrid[ 0 ] )
						newSlidesGrid.push( slidesGridItem );
				}

				snapGrid = newSlidesGrid;
			}
		} // Remove last grid elements depending on width

		if ( ! params.centeredSlides ) {
			newSlidesGrid = [];

			for ( var _i2 = 0; _i2 < snapGrid.length; _i2 += 1 ) {
				var _slidesGridItem = snapGrid[ _i2 ];
				if ( params.roundLengths ) _slidesGridItem = Math.floor( _slidesGridItem );

				if ( snapGrid[ _i2 ] <= swiper.virtualSize - swiperSize ) {
					newSlidesGrid.push( _slidesGridItem );
				}
			}

			snapGrid = newSlidesGrid;

			if (
				Math.floor( swiper.virtualSize - swiperSize ) -
					Math.floor( snapGrid[ snapGrid.length - 1 ] ) >
				1
			) {
				snapGrid.push( swiper.virtualSize - swiperSize );
			}
		}

		if ( snapGrid.length === 0 ) snapGrid = [ 0 ];

		if ( params.spaceBetween !== 0 ) {
			var _slides$filter$css;

			var key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel( 'marginRight' );
			slides
				.filter( function ( _, slideIndex ) {
					if ( ! params.cssMode ) return true;

					if ( slideIndex === slides.length - 1 ) {
						return false;
					}

					return true;
				} )
				.css(
					( ( _slides$filter$css = {} ),
					( _slides$filter$css[ key ] = spaceBetween + 'px' ),
					_slides$filter$css )
				);
		}

		if ( params.centeredSlides && params.centeredSlidesBounds ) {
			var allSlidesSize = 0;
			slidesSizesGrid.forEach( function ( slideSizeValue ) {
				allSlidesSize += slideSizeValue + ( params.spaceBetween ? params.spaceBetween : 0 );
			} );
			allSlidesSize -= params.spaceBetween;
			var maxSnap = allSlidesSize - swiperSize;
			snapGrid = snapGrid.map( function ( snap ) {
				if ( snap < 0 ) return -offsetBefore;
				if ( snap > maxSnap ) return maxSnap + offsetAfter;
				return snap;
			} );
		}

		if ( params.centerInsufficientSlides ) {
			var _allSlidesSize = 0;
			slidesSizesGrid.forEach( function ( slideSizeValue ) {
				_allSlidesSize += slideSizeValue + ( params.spaceBetween ? params.spaceBetween : 0 );
			} );
			_allSlidesSize -= params.spaceBetween;

			if ( _allSlidesSize < swiperSize ) {
				var allSlidesOffset = ( swiperSize - _allSlidesSize ) / 2;
				snapGrid.forEach( function ( snap, snapIndex ) {
					snapGrid[ snapIndex ] = snap - allSlidesOffset;
				} );
				slidesGrid.forEach( function ( snap, snapIndex ) {
					slidesGrid[ snapIndex ] = snap + allSlidesOffset;
				} );
			}
		}

		extend( swiper, {
			slides: slides,
			snapGrid: snapGrid,
			slidesGrid: slidesGrid,
			slidesSizesGrid: slidesSizesGrid,
		} );

		if ( slidesLength !== previousSlidesLength ) {
			swiper.emit( 'slidesLengthChange' );
		}

		if ( snapGrid.length !== previousSnapGridLength ) {
			if ( swiper.params.watchOverflow ) swiper.checkOverflow();
			swiper.emit( 'snapGridLengthChange' );
		}

		if ( slidesGrid.length !== previousSlidesGridLength ) {
			swiper.emit( 'slidesGridLengthChange' );
		}

		if ( params.watchSlidesProgress || params.watchSlidesVisibility ) {
			swiper.updateSlidesOffset();
		}
	}

	function updateAutoHeight( speed ) {
		var swiper = this;
		var activeSlides = [];
		var isVirtual = swiper.virtual && swiper.params.virtual.enabled;
		var newHeight = 0;
		var i;

		if ( typeof speed === 'number' ) {
			swiper.setTransition( speed );
		} else if ( speed === true ) {
			swiper.setTransition( swiper.params.speed );
		}

		var getSlideByIndex = function getSlideByIndex( index ) {
			if ( isVirtual ) {
				return swiper.slides.filter( function ( el ) {
					return parseInt( el.getAttribute( 'data-swiper-slide-index' ), 10 ) === index;
				} )[ 0 ];
			}

			return swiper.slides.eq( index )[ 0 ];
		}; // Find slides currently in view

		if ( swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1 ) {
			if ( swiper.params.centeredSlides ) {
				swiper.visibleSlides.each( function ( slide ) {
					activeSlides.push( slide );
				} );
			} else {
				for ( i = 0; i < Math.ceil( swiper.params.slidesPerView ); i += 1 ) {
					var index = swiper.activeIndex + i;
					if ( index > swiper.slides.length && ! isVirtual ) break;
					activeSlides.push( getSlideByIndex( index ) );
				}
			}
		} else {
			activeSlides.push( getSlideByIndex( swiper.activeIndex ) );
		} // Find new height from highest slide in view

		for ( i = 0; i < activeSlides.length; i += 1 ) {
			if ( typeof activeSlides[ i ] !== 'undefined' ) {
				var height = activeSlides[ i ].offsetHeight;
				newHeight = height > newHeight ? height : newHeight;
			}
		} // Update Height

		if ( newHeight ) swiper.$wrapperEl.css( 'height', newHeight + 'px' );
	}

	function updateSlidesOffset() {
		var swiper = this;
		var slides = swiper.slides;

		for ( var i = 0; i < slides.length; i += 1 ) {
			slides[ i ].swiperSlideOffset = swiper.isHorizontal()
				? slides[ i ].offsetLeft
				: slides[ i ].offsetTop;
		}
	}

	function updateSlidesProgress( translate ) {
		if ( translate === void 0 ) {
			translate = ( this && this.translate ) || 0;
		}

		var swiper = this;
		var params = swiper.params;
		var slides = swiper.slides,
			rtl = swiper.rtlTranslate;
		if ( slides.length === 0 ) return;
		if ( typeof slides[ 0 ].swiperSlideOffset === 'undefined' ) swiper.updateSlidesOffset();
		var offsetCenter = -translate;
		if ( rtl ) offsetCenter = translate; // Visible Slides

		slides.removeClass( params.slideVisibleClass );
		swiper.visibleSlidesIndexes = [];
		swiper.visibleSlides = [];

		for ( var i = 0; i < slides.length; i += 1 ) {
			var slide = slides[ i ];
			var slideProgress =
				( offsetCenter +
					( params.centeredSlides ? swiper.minTranslate() : 0 ) -
					slide.swiperSlideOffset ) /
				( slide.swiperSlideSize + params.spaceBetween );

			if ( params.watchSlidesVisibility || ( params.centeredSlides && params.autoHeight ) ) {
				var slideBefore = -( offsetCenter - slide.swiperSlideOffset );
				var slideAfter = slideBefore + swiper.slidesSizesGrid[ i ];
				var isVisible =
					( slideBefore >= 0 && slideBefore < swiper.size - 1 ) ||
					( slideAfter > 1 && slideAfter <= swiper.size ) ||
					( slideBefore <= 0 && slideAfter >= swiper.size );

				if ( isVisible ) {
					swiper.visibleSlides.push( slide );
					swiper.visibleSlidesIndexes.push( i );
					slides.eq( i ).addClass( params.slideVisibleClass );
				}
			}

			slide.progress = rtl ? -slideProgress : slideProgress;
		}

		swiper.visibleSlides = $( swiper.visibleSlides );
	}

	function updateProgress( translate ) {
		var swiper = this;

		if ( typeof translate === 'undefined' ) {
			var multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line

			translate = ( swiper && swiper.translate && swiper.translate * multiplier ) || 0;
		}

		var params = swiper.params;
		var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
		var progress = swiper.progress,
			isBeginning = swiper.isBeginning,
			isEnd = swiper.isEnd;
		var wasBeginning = isBeginning;
		var wasEnd = isEnd;

		if ( translatesDiff === 0 ) {
			progress = 0;
			isBeginning = true;
			isEnd = true;
		} else {
			progress = ( translate - swiper.minTranslate() ) / translatesDiff;
			isBeginning = progress <= 0;
			isEnd = progress >= 1;
		}

		extend( swiper, {
			progress: progress,
			isBeginning: isBeginning,
			isEnd: isEnd,
		} );
		if (
			params.watchSlidesProgress ||
			params.watchSlidesVisibility ||
			( params.centeredSlides && params.autoHeight )
		)
			swiper.updateSlidesProgress( translate );

		if ( isBeginning && ! wasBeginning ) {
			swiper.emit( 'reachBeginning toEdge' );
		}

		if ( isEnd && ! wasEnd ) {
			swiper.emit( 'reachEnd toEdge' );
		}

		if ( ( wasBeginning && ! isBeginning ) || ( wasEnd && ! isEnd ) ) {
			swiper.emit( 'fromEdge' );
		}

		swiper.emit( 'progress', progress );
	}

	function updateSlidesClasses() {
		var swiper = this;
		var slides = swiper.slides,
			params = swiper.params,
			$wrapperEl = swiper.$wrapperEl,
			activeIndex = swiper.activeIndex,
			realIndex = swiper.realIndex;
		var isVirtual = swiper.virtual && params.virtual.enabled;
		slides.removeClass(
			params.slideActiveClass +
				' ' +
				params.slideNextClass +
				' ' +
				params.slidePrevClass +
				' ' +
				params.slideDuplicateActiveClass +
				' ' +
				params.slideDuplicateNextClass +
				' ' +
				params.slideDuplicatePrevClass
		);
		var activeSlide;

		if ( isVirtual ) {
			activeSlide = swiper.$wrapperEl.find(
				'.' + params.slideClass + '[data-swiper-slide-index="' + activeIndex + '"]'
			);
		} else {
			activeSlide = slides.eq( activeIndex );
		} // Active classes

		activeSlide.addClass( params.slideActiveClass );

		if ( params.loop ) {
			// Duplicate to all looped slides
			if ( activeSlide.hasClass( params.slideDuplicateClass ) ) {
				$wrapperEl
					.children(
						'.' +
							params.slideClass +
							':not(.' +
							params.slideDuplicateClass +
							')[data-swiper-slide-index="' +
							realIndex +
							'"]'
					)
					.addClass( params.slideDuplicateActiveClass );
			} else {
				$wrapperEl
					.children(
						'.' +
							params.slideClass +
							'.' +
							params.slideDuplicateClass +
							'[data-swiper-slide-index="' +
							realIndex +
							'"]'
					)
					.addClass( params.slideDuplicateActiveClass );
			}
		} // Next Slide

		var nextSlide = activeSlide
			.nextAll( '.' + params.slideClass )
			.eq( 0 )
			.addClass( params.slideNextClass );

		if ( params.loop && nextSlide.length === 0 ) {
			nextSlide = slides.eq( 0 );
			nextSlide.addClass( params.slideNextClass );
		} // Prev Slide

		var prevSlide = activeSlide
			.prevAll( '.' + params.slideClass )
			.eq( 0 )
			.addClass( params.slidePrevClass );

		if ( params.loop && prevSlide.length === 0 ) {
			prevSlide = slides.eq( -1 );
			prevSlide.addClass( params.slidePrevClass );
		}

		if ( params.loop ) {
			// Duplicate to all looped slides
			if ( nextSlide.hasClass( params.slideDuplicateClass ) ) {
				$wrapperEl
					.children(
						'.' +
							params.slideClass +
							':not(.' +
							params.slideDuplicateClass +
							')[data-swiper-slide-index="' +
							nextSlide.attr( 'data-swiper-slide-index' ) +
							'"]'
					)
					.addClass( params.slideDuplicateNextClass );
			} else {
				$wrapperEl
					.children(
						'.' +
							params.slideClass +
							'.' +
							params.slideDuplicateClass +
							'[data-swiper-slide-index="' +
							nextSlide.attr( 'data-swiper-slide-index' ) +
							'"]'
					)
					.addClass( params.slideDuplicateNextClass );
			}

			if ( prevSlide.hasClass( params.slideDuplicateClass ) ) {
				$wrapperEl
					.children(
						'.' +
							params.slideClass +
							':not(.' +
							params.slideDuplicateClass +
							')[data-swiper-slide-index="' +
							prevSlide.attr( 'data-swiper-slide-index' ) +
							'"]'
					)
					.addClass( params.slideDuplicatePrevClass );
			} else {
				$wrapperEl
					.children(
						'.' +
							params.slideClass +
							'.' +
							params.slideDuplicateClass +
							'[data-swiper-slide-index="' +
							prevSlide.attr( 'data-swiper-slide-index' ) +
							'"]'
					)
					.addClass( params.slideDuplicatePrevClass );
			}
		}

		swiper.emitSlidesClasses();
	}

	function updateActiveIndex( newActiveIndex ) {
		var swiper = this;
		var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
		var slidesGrid = swiper.slidesGrid,
			snapGrid = swiper.snapGrid,
			params = swiper.params,
			previousIndex = swiper.activeIndex,
			previousRealIndex = swiper.realIndex,
			previousSnapIndex = swiper.snapIndex;
		var activeIndex = newActiveIndex;
		var snapIndex;

		if ( typeof activeIndex === 'undefined' ) {
			for ( var i = 0; i < slidesGrid.length; i += 1 ) {
				if ( typeof slidesGrid[ i + 1 ] !== 'undefined' ) {
					if (
						translate >= slidesGrid[ i ] &&
						translate < slidesGrid[ i + 1 ] - ( slidesGrid[ i + 1 ] - slidesGrid[ i ] ) / 2
					) {
						activeIndex = i;
					} else if ( translate >= slidesGrid[ i ] && translate < slidesGrid[ i + 1 ] ) {
						activeIndex = i + 1;
					}
				} else if ( translate >= slidesGrid[ i ] ) {
					activeIndex = i;
				}
			} // Normalize slideIndex

			if ( params.normalizeSlideIndex ) {
				if ( activeIndex < 0 || typeof activeIndex === 'undefined' ) activeIndex = 0;
			}
		}

		if ( snapGrid.indexOf( translate ) >= 0 ) {
			snapIndex = snapGrid.indexOf( translate );
		} else {
			var skip = Math.min( params.slidesPerGroupSkip, activeIndex );
			snapIndex = skip + Math.floor( ( activeIndex - skip ) / params.slidesPerGroup );
		}

		if ( snapIndex >= snapGrid.length ) snapIndex = snapGrid.length - 1;

		if ( activeIndex === previousIndex ) {
			if ( snapIndex !== previousSnapIndex ) {
				swiper.snapIndex = snapIndex;
				swiper.emit( 'snapIndexChange' );
			}

			return;
		} // Get real index

		var realIndex = parseInt(
			swiper.slides.eq( activeIndex ).attr( 'data-swiper-slide-index' ) || activeIndex,
			10
		);
		extend( swiper, {
			snapIndex: snapIndex,
			realIndex: realIndex,
			previousIndex: previousIndex,
			activeIndex: activeIndex,
		} );
		swiper.emit( 'activeIndexChange' );
		swiper.emit( 'snapIndexChange' );

		if ( previousRealIndex !== realIndex ) {
			swiper.emit( 'realIndexChange' );
		}

		if ( swiper.initialized || swiper.params.runCallbacksOnInit ) {
			swiper.emit( 'slideChange' );
		}
	}

	function updateClickedSlide( e ) {
		var swiper = this;
		var params = swiper.params;
		var slide = $( e.target ).closest( '.' + params.slideClass )[ 0 ];
		var slideFound = false;
		var slideIndex;

		if ( slide ) {
			for ( var i = 0; i < swiper.slides.length; i += 1 ) {
				if ( swiper.slides[ i ] === slide ) {
					slideFound = true;
					slideIndex = i;
					break;
				}
			}
		}

		if ( slide && slideFound ) {
			swiper.clickedSlide = slide;

			if ( swiper.virtual && swiper.params.virtual.enabled ) {
				swiper.clickedIndex = parseInt( $( slide ).attr( 'data-swiper-slide-index' ), 10 );
			} else {
				swiper.clickedIndex = slideIndex;
			}
		} else {
			swiper.clickedSlide = undefined;
			swiper.clickedIndex = undefined;
			return;
		}

		if (
			params.slideToClickedSlide &&
			swiper.clickedIndex !== undefined &&
			swiper.clickedIndex !== swiper.activeIndex
		) {
			swiper.slideToClickedSlide();
		}
	}

	var update = {
		updateSize: updateSize,
		updateSlides: updateSlides,
		updateAutoHeight: updateAutoHeight,
		updateSlidesOffset: updateSlidesOffset,
		updateSlidesProgress: updateSlidesProgress,
		updateProgress: updateProgress,
		updateSlidesClasses: updateSlidesClasses,
		updateActiveIndex: updateActiveIndex,
		updateClickedSlide: updateClickedSlide,
	};

	function getSwiperTranslate( axis ) {
		if ( axis === void 0 ) {
			axis = this.isHorizontal() ? 'x' : 'y';
		}

		var swiper = this;
		var params = swiper.params,
			rtl = swiper.rtlTranslate,
			translate = swiper.translate,
			$wrapperEl = swiper.$wrapperEl;

		if ( params.virtualTranslate ) {
			return rtl ? -translate : translate;
		}

		if ( params.cssMode ) {
			return translate;
		}

		var currentTranslate = getTranslate( $wrapperEl[ 0 ], axis );
		if ( rtl ) currentTranslate = -currentTranslate;
		return currentTranslate || 0;
	}

	function setTranslate( translate, byController ) {
		var swiper = this;
		var rtl = swiper.rtlTranslate,
			params = swiper.params,
			$wrapperEl = swiper.$wrapperEl,
			wrapperEl = swiper.wrapperEl,
			progress = swiper.progress;
		var x = 0;
		var y = 0;
		var z = 0;

		if ( swiper.isHorizontal() ) {
			x = rtl ? -translate : translate;
		} else {
			y = translate;
		}

		if ( params.roundLengths ) {
			x = Math.floor( x );
			y = Math.floor( y );
		}

		if ( params.cssMode ) {
			wrapperEl[ swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop' ] = swiper.isHorizontal()
				? -x
				: -y;
		} else if ( ! params.virtualTranslate ) {
			$wrapperEl.transform( 'translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)' );
		}

		swiper.previousTranslate = swiper.translate;
		swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress

		var newProgress;
		var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();

		if ( translatesDiff === 0 ) {
			newProgress = 0;
		} else {
			newProgress = ( translate - swiper.minTranslate() ) / translatesDiff;
		}

		if ( newProgress !== progress ) {
			swiper.updateProgress( translate );
		}

		swiper.emit( 'setTranslate', swiper.translate, byController );
	}

	function minTranslate() {
		return -this.snapGrid[ 0 ];
	}

	function maxTranslate() {
		return -this.snapGrid[ this.snapGrid.length - 1 ];
	}

	function translateTo( translate, speed, runCallbacks, translateBounds, internal ) {
		if ( translate === void 0 ) {
			translate = 0;
		}

		if ( speed === void 0 ) {
			speed = this.params.speed;
		}

		if ( runCallbacks === void 0 ) {
			runCallbacks = true;
		}

		if ( translateBounds === void 0 ) {
			translateBounds = true;
		}

		var swiper = this;
		var params = swiper.params,
			wrapperEl = swiper.wrapperEl;

		if ( swiper.animating && params.preventInteractionOnTransition ) {
			return false;
		}

		var minTranslate = swiper.minTranslate();
		var maxTranslate = swiper.maxTranslate();
		var newTranslate;
		if ( translateBounds && translate > minTranslate ) newTranslate = minTranslate;
		else if ( translateBounds && translate < maxTranslate ) newTranslate = maxTranslate;
		else newTranslate = translate; // Update progress

		swiper.updateProgress( newTranslate );

		if ( params.cssMode ) {
			var isH = swiper.isHorizontal();

			if ( speed === 0 ) {
				wrapperEl[ isH ? 'scrollLeft' : 'scrollTop' ] = -newTranslate;
			} else {
				// eslint-disable-next-line
				if ( wrapperEl.scrollTo ) {
					var _wrapperEl$scrollTo;

					wrapperEl.scrollTo(
						( ( _wrapperEl$scrollTo = {} ),
						( _wrapperEl$scrollTo[ isH ? 'left' : 'top' ] = -newTranslate ),
						( _wrapperEl$scrollTo.behavior = 'smooth' ),
						_wrapperEl$scrollTo )
					);
				} else {
					wrapperEl[ isH ? 'scrollLeft' : 'scrollTop' ] = -newTranslate;
				}
			}

			return true;
		}

		if ( speed === 0 ) {
			swiper.setTransition( 0 );
			swiper.setTranslate( newTranslate );

			if ( runCallbacks ) {
				swiper.emit( 'beforeTransitionStart', speed, internal );
				swiper.emit( 'transitionEnd' );
			}
		} else {
			swiper.setTransition( speed );
			swiper.setTranslate( newTranslate );

			if ( runCallbacks ) {
				swiper.emit( 'beforeTransitionStart', speed, internal );
				swiper.emit( 'transitionStart' );
			}

			if ( ! swiper.animating ) {
				swiper.animating = true;

				if ( ! swiper.onTranslateToWrapperTransitionEnd ) {
					swiper.onTranslateToWrapperTransitionEnd = function transitionEnd( e ) {
						if ( ! swiper || swiper.destroyed ) return;
						if ( e.target !== this ) return;
						swiper.$wrapperEl[ 0 ].removeEventListener(
							'transitionend',
							swiper.onTranslateToWrapperTransitionEnd
						);
						swiper.$wrapperEl[ 0 ].removeEventListener(
							'webkitTransitionEnd',
							swiper.onTranslateToWrapperTransitionEnd
						);
						swiper.onTranslateToWrapperTransitionEnd = null;
						delete swiper.onTranslateToWrapperTransitionEnd;

						if ( runCallbacks ) {
							swiper.emit( 'transitionEnd' );
						}
					};
				}

				swiper.$wrapperEl[ 0 ].addEventListener(
					'transitionend',
					swiper.onTranslateToWrapperTransitionEnd
				);
				swiper.$wrapperEl[ 0 ].addEventListener(
					'webkitTransitionEnd',
					swiper.onTranslateToWrapperTransitionEnd
				);
			}
		}

		return true;
	}

	var translate = {
		getTranslate: getSwiperTranslate,
		setTranslate: setTranslate,
		minTranslate: minTranslate,
		maxTranslate: maxTranslate,
		translateTo: translateTo,
	};

	function setTransition( duration, byController ) {
		var swiper = this;

		if ( ! swiper.params.cssMode ) {
			swiper.$wrapperEl.transition( duration );
		}

		swiper.emit( 'setTransition', duration, byController );
	}

	function transitionStart( runCallbacks, direction ) {
		if ( runCallbacks === void 0 ) {
			runCallbacks = true;
		}

		var swiper = this;
		var activeIndex = swiper.activeIndex,
			params = swiper.params,
			previousIndex = swiper.previousIndex;
		if ( params.cssMode ) return;

		if ( params.autoHeight ) {
			swiper.updateAutoHeight();
		}

		var dir = direction;

		if ( ! dir ) {
			if ( activeIndex > previousIndex ) dir = 'next';
			else if ( activeIndex < previousIndex ) dir = 'prev';
			else dir = 'reset';
		}

		swiper.emit( 'transitionStart' );

		if ( runCallbacks && activeIndex !== previousIndex ) {
			if ( dir === 'reset' ) {
				swiper.emit( 'slideResetTransitionStart' );
				return;
			}

			swiper.emit( 'slideChangeTransitionStart' );

			if ( dir === 'next' ) {
				swiper.emit( 'slideNextTransitionStart' );
			} else {
				swiper.emit( 'slidePrevTransitionStart' );
			}
		}
	}

	function transitionEnd( runCallbacks, direction ) {
		if ( runCallbacks === void 0 ) {
			runCallbacks = true;
		}

		var swiper = this;
		var activeIndex = swiper.activeIndex,
			previousIndex = swiper.previousIndex,
			params = swiper.params;
		swiper.animating = false;
		if ( params.cssMode ) return;
		swiper.setTransition( 0 );
		var dir = direction;

		if ( ! dir ) {
			if ( activeIndex > previousIndex ) dir = 'next';
			else if ( activeIndex < previousIndex ) dir = 'prev';
			else dir = 'reset';
		}

		swiper.emit( 'transitionEnd' );

		if ( runCallbacks && activeIndex !== previousIndex ) {
			if ( dir === 'reset' ) {
				swiper.emit( 'slideResetTransitionEnd' );
				return;
			}

			swiper.emit( 'slideChangeTransitionEnd' );

			if ( dir === 'next' ) {
				swiper.emit( 'slideNextTransitionEnd' );
			} else {
				swiper.emit( 'slidePrevTransitionEnd' );
			}
		}
	}

	var transition = {
		setTransition: setTransition,
		transitionStart: transitionStart,
		transitionEnd: transitionEnd,
	};

	function slideTo( index, speed, runCallbacks, internal, initial ) {
		if ( index === void 0 ) {
			index = 0;
		}

		if ( speed === void 0 ) {
			speed = this.params.speed;
		}

		if ( runCallbacks === void 0 ) {
			runCallbacks = true;
		}

		if ( typeof index !== 'number' && typeof index !== 'string' ) {
			throw new Error(
				"The 'index' argument cannot have type other than 'number' or 'string'. [" +
					typeof index +
					'] given.'
			);
		}

		if ( typeof index === 'string' ) {
			/**
			 * The `index` argument converted from `string` to `number`.
			 * @type {number}
			 */
			var indexAsNumber = parseInt( index, 10 );
			/**
			 * Determines whether the `index` argument is a valid `number`
			 * after being converted from the `string` type.
			 * @type {boolean}
			 */

			var isValidNumber = isFinite( indexAsNumber );

			if ( ! isValidNumber ) {
				throw new Error(
					"The passed-in 'index' (string) couldn't be converted to 'number'. [" + index + '] given.'
				);
			} // Knowing that the converted `index` is a valid number,
			// we can update the original argument's value.

			index = indexAsNumber;
		}

		var swiper = this;
		var slideIndex = index;
		if ( slideIndex < 0 ) slideIndex = 0;
		var params = swiper.params,
			snapGrid = swiper.snapGrid,
			slidesGrid = swiper.slidesGrid,
			previousIndex = swiper.previousIndex,
			activeIndex = swiper.activeIndex,
			rtl = swiper.rtlTranslate,
			wrapperEl = swiper.wrapperEl,
			enabled = swiper.enabled;

		if (
			( swiper.animating && params.preventInteractionOnTransition ) ||
			( ! enabled && ! internal && ! initial )
		) {
			return false;
		}

		var skip = Math.min( swiper.params.slidesPerGroupSkip, slideIndex );
		var snapIndex = skip + Math.floor( ( slideIndex - skip ) / swiper.params.slidesPerGroup );
		if ( snapIndex >= snapGrid.length ) snapIndex = snapGrid.length - 1;

		if ( ( activeIndex || params.initialSlide || 0 ) === ( previousIndex || 0 ) && runCallbacks ) {
			swiper.emit( 'beforeSlideChangeStart' );
		}

		var translate = -snapGrid[ snapIndex ]; // Update progress

		swiper.updateProgress( translate ); // Normalize slideIndex

		if ( params.normalizeSlideIndex ) {
			for ( var i = 0; i < slidesGrid.length; i += 1 ) {
				var normalizedTranslate = -Math.floor( translate * 100 );
				var normalizedGird = Math.floor( slidesGrid[ i ] * 100 );
				var normalizedGridNext = Math.floor( slidesGrid[ i + 1 ] * 100 );

				if ( typeof slidesGrid[ i + 1 ] !== 'undefined' ) {
					if (
						normalizedTranslate >= normalizedGird &&
						normalizedTranslate < normalizedGridNext - ( normalizedGridNext - normalizedGird ) / 2
					) {
						slideIndex = i;
					} else if (
						normalizedTranslate >= normalizedGird &&
						normalizedTranslate < normalizedGridNext
					) {
						slideIndex = i + 1;
					}
				} else if ( normalizedTranslate >= normalizedGird ) {
					slideIndex = i;
				}
			}
		} // Directions locks

		if ( swiper.initialized && slideIndex !== activeIndex ) {
			if (
				! swiper.allowSlideNext &&
				translate < swiper.translate &&
				translate < swiper.minTranslate()
			) {
				return false;
			}

			if (
				! swiper.allowSlidePrev &&
				translate > swiper.translate &&
				translate > swiper.maxTranslate()
			) {
				if ( ( activeIndex || 0 ) !== slideIndex ) return false;
			}
		}

		var direction;
		if ( slideIndex > activeIndex ) direction = 'next';
		else if ( slideIndex < activeIndex ) direction = 'prev';
		else direction = 'reset'; // Update Index

		if (
			( rtl && -translate === swiper.translate ) ||
			( ! rtl && translate === swiper.translate )
		) {
			swiper.updateActiveIndex( slideIndex ); // Update Height

			if ( params.autoHeight ) {
				swiper.updateAutoHeight();
			}

			swiper.updateSlidesClasses();

			if ( params.effect !== 'slide' ) {
				swiper.setTranslate( translate );
			}

			if ( direction !== 'reset' ) {
				swiper.transitionStart( runCallbacks, direction );
				swiper.transitionEnd( runCallbacks, direction );
			}

			return false;
		}

		if ( params.cssMode ) {
			var isH = swiper.isHorizontal();
			var t = -translate;

			if ( rtl ) {
				t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t;
			}

			if ( speed === 0 ) {
				wrapperEl[ isH ? 'scrollLeft' : 'scrollTop' ] = t;
			} else {
				// eslint-disable-next-line
				if ( wrapperEl.scrollTo ) {
					var _wrapperEl$scrollTo;

					wrapperEl.scrollTo(
						( ( _wrapperEl$scrollTo = {} ),
						( _wrapperEl$scrollTo[ isH ? 'left' : 'top' ] = t ),
						( _wrapperEl$scrollTo.behavior = 'smooth' ),
						_wrapperEl$scrollTo )
					);
				} else {
					wrapperEl[ isH ? 'scrollLeft' : 'scrollTop' ] = t;
				}
			}

			return true;
		}

		if ( speed === 0 ) {
			swiper.setTransition( 0 );
			swiper.setTranslate( translate );
			swiper.updateActiveIndex( slideIndex );
			swiper.updateSlidesClasses();
			swiper.emit( 'beforeTransitionStart', speed, internal );
			swiper.transitionStart( runCallbacks, direction );
			swiper.transitionEnd( runCallbacks, direction );
		} else {
			swiper.setTransition( speed );
			swiper.setTranslate( translate );
			swiper.updateActiveIndex( slideIndex );
			swiper.updateSlidesClasses();
			swiper.emit( 'beforeTransitionStart', speed, internal );
			swiper.transitionStart( runCallbacks, direction );

			if ( ! swiper.animating ) {
				swiper.animating = true;

				if ( ! swiper.onSlideToWrapperTransitionEnd ) {
					swiper.onSlideToWrapperTransitionEnd = function transitionEnd( e ) {
						if ( ! swiper || swiper.destroyed ) return;
						if ( e.target !== this ) return;
						swiper.$wrapperEl[ 0 ].removeEventListener(
							'transitionend',
							swiper.onSlideToWrapperTransitionEnd
						);
						swiper.$wrapperEl[ 0 ].removeEventListener(
							'webkitTransitionEnd',
							swiper.onSlideToWrapperTransitionEnd
						);
						swiper.onSlideToWrapperTransitionEnd = null;
						delete swiper.onSlideToWrapperTransitionEnd;
						swiper.transitionEnd( runCallbacks, direction );
					};
				}

				swiper.$wrapperEl[ 0 ].addEventListener(
					'transitionend',
					swiper.onSlideToWrapperTransitionEnd
				);
				swiper.$wrapperEl[ 0 ].addEventListener(
					'webkitTransitionEnd',
					swiper.onSlideToWrapperTransitionEnd
				);
			}
		}

		return true;
	}

	function slideToLoop( index, speed, runCallbacks, internal ) {
		if ( index === void 0 ) {
			index = 0;
		}

		if ( speed === void 0 ) {
			speed = this.params.speed;
		}

		if ( runCallbacks === void 0 ) {
			runCallbacks = true;
		}

		var swiper = this;
		var newIndex = index;

		if ( swiper.params.loop ) {
			newIndex += swiper.loopedSlides;
		}

		return swiper.slideTo( newIndex, speed, runCallbacks, internal );
	}

	/* eslint no-unused-vars: "off" */
	function slideNext( speed, runCallbacks, internal ) {
		if ( speed === void 0 ) {
			speed = this.params.speed;
		}

		if ( runCallbacks === void 0 ) {
			runCallbacks = true;
		}

		var swiper = this;
		var params = swiper.params,
			animating = swiper.animating,
			enabled = swiper.enabled;
		if ( ! enabled ) return swiper;
		var increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;

		if ( params.loop ) {
			if ( animating && params.loopPreventsSlide ) return false;
			swiper.loopFix(); // eslint-disable-next-line

			swiper._clientLeft = swiper.$wrapperEl[ 0 ].clientLeft;
		}

		return swiper.slideTo( swiper.activeIndex + increment, speed, runCallbacks, internal );
	}

	/* eslint no-unused-vars: "off" */
	function slidePrev( speed, runCallbacks, internal ) {
		if ( speed === void 0 ) {
			speed = this.params.speed;
		}

		if ( runCallbacks === void 0 ) {
			runCallbacks = true;
		}

		var swiper = this;
		var params = swiper.params,
			animating = swiper.animating,
			snapGrid = swiper.snapGrid,
			slidesGrid = swiper.slidesGrid,
			rtlTranslate = swiper.rtlTranslate,
			enabled = swiper.enabled;
		if ( ! enabled ) return swiper;

		if ( params.loop ) {
			if ( animating && params.loopPreventsSlide ) return false;
			swiper.loopFix(); // eslint-disable-next-line

			swiper._clientLeft = swiper.$wrapperEl[ 0 ].clientLeft;
		}

		var translate = rtlTranslate ? swiper.translate : -swiper.translate;

		function normalize( val ) {
			if ( val < 0 ) return -Math.floor( Math.abs( val ) );
			return Math.floor( val );
		}

		var normalizedTranslate = normalize( translate );
		var normalizedSnapGrid = snapGrid.map( function ( val ) {
			return normalize( val );
		} );
		var prevSnap = snapGrid[ normalizedSnapGrid.indexOf( normalizedTranslate ) - 1 ];

		if ( typeof prevSnap === 'undefined' && params.cssMode ) {
			snapGrid.forEach( function ( snap ) {
				if ( ! prevSnap && normalizedTranslate >= snap ) prevSnap = snap;
			} );
		}

		var prevIndex;

		if ( typeof prevSnap !== 'undefined' ) {
			prevIndex = slidesGrid.indexOf( prevSnap );
			if ( prevIndex < 0 ) prevIndex = swiper.activeIndex - 1;
		}

		return swiper.slideTo( prevIndex, speed, runCallbacks, internal );
	}

	/* eslint no-unused-vars: "off" */
	function slideReset( speed, runCallbacks, internal ) {
		if ( speed === void 0 ) {
			speed = this.params.speed;
		}

		if ( runCallbacks === void 0 ) {
			runCallbacks = true;
		}

		var swiper = this;
		return swiper.slideTo( swiper.activeIndex, speed, runCallbacks, internal );
	}

	/* eslint no-unused-vars: "off" */
	function slideToClosest( speed, runCallbacks, internal, threshold ) {
		if ( speed === void 0 ) {
			speed = this.params.speed;
		}

		if ( runCallbacks === void 0 ) {
			runCallbacks = true;
		}

		if ( threshold === void 0 ) {
			threshold = 0.5;
		}

		var swiper = this;
		var index = swiper.activeIndex;
		var skip = Math.min( swiper.params.slidesPerGroupSkip, index );
		var snapIndex = skip + Math.floor( ( index - skip ) / swiper.params.slidesPerGroup );
		var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;

		if ( translate >= swiper.snapGrid[ snapIndex ] ) {
			// The current translate is on or after the current snap index, so the choice
			// is between the current index and the one after it.
			var currentSnap = swiper.snapGrid[ snapIndex ];
			var nextSnap = swiper.snapGrid[ snapIndex + 1 ];

			if ( translate - currentSnap > ( nextSnap - currentSnap ) * threshold ) {
				index += swiper.params.slidesPerGroup;
			}
		} else {
			// The current translate is before the current snap index, so the choice
			// is between the current index and the one before it.
			var prevSnap = swiper.snapGrid[ snapIndex - 1 ];
			var _currentSnap = swiper.snapGrid[ snapIndex ];

			if ( translate - prevSnap <= ( _currentSnap - prevSnap ) * threshold ) {
				index -= swiper.params.slidesPerGroup;
			}
		}

		index = Math.max( index, 0 );
		index = Math.min( index, swiper.slidesGrid.length - 1 );
		return swiper.slideTo( index, speed, runCallbacks, internal );
	}

	function slideToClickedSlide() {
		var swiper = this;
		var params = swiper.params,
			$wrapperEl = swiper.$wrapperEl;
		var slidesPerView =
			params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;
		var slideToIndex = swiper.clickedIndex;
		var realIndex;

		if ( params.loop ) {
			if ( swiper.animating ) return;
			realIndex = parseInt( $( swiper.clickedSlide ).attr( 'data-swiper-slide-index' ), 10 );

			if ( params.centeredSlides ) {
				if (
					slideToIndex < swiper.loopedSlides - slidesPerView / 2 ||
					slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2
				) {
					swiper.loopFix();
					slideToIndex = $wrapperEl
						.children(
							'.' +
								params.slideClass +
								'[data-swiper-slide-index="' +
								realIndex +
								'"]:not(.' +
								params.slideDuplicateClass +
								')'
						)
						.eq( 0 )
						.index();
					nextTick( function () {
						swiper.slideTo( slideToIndex );
					} );
				} else {
					swiper.slideTo( slideToIndex );
				}
			} else if ( slideToIndex > swiper.slides.length - slidesPerView ) {
				swiper.loopFix();
				slideToIndex = $wrapperEl
					.children(
						'.' +
							params.slideClass +
							'[data-swiper-slide-index="' +
							realIndex +
							'"]:not(.' +
							params.slideDuplicateClass +
							')'
					)
					.eq( 0 )
					.index();
				nextTick( function () {
					swiper.slideTo( slideToIndex );
				} );
			} else {
				swiper.slideTo( slideToIndex );
			}
		} else {
			swiper.slideTo( slideToIndex );
		}
	}

	var slide = {
		slideTo: slideTo,
		slideToLoop: slideToLoop,
		slideNext: slideNext,
		slidePrev: slidePrev,
		slideReset: slideReset,
		slideToClosest: slideToClosest,
		slideToClickedSlide: slideToClickedSlide,
	};

	function loopCreate() {
		var swiper = this;
		var document = getDocument();
		var params = swiper.params,
			$wrapperEl = swiper.$wrapperEl; // Remove duplicated slides

		$wrapperEl.children( '.' + params.slideClass + '.' + params.slideDuplicateClass ).remove();
		var slides = $wrapperEl.children( '.' + params.slideClass );

		if ( params.loopFillGroupWithBlank ) {
			var blankSlidesNum = params.slidesPerGroup - ( slides.length % params.slidesPerGroup );

			if ( blankSlidesNum !== params.slidesPerGroup ) {
				for ( var i = 0; i < blankSlidesNum; i += 1 ) {
					var blankNode = $( document.createElement( 'div' ) ).addClass(
						params.slideClass + ' ' + params.slideBlankClass
					);
					$wrapperEl.append( blankNode );
				}

				slides = $wrapperEl.children( '.' + params.slideClass );
			}
		}

		if ( params.slidesPerView === 'auto' && ! params.loopedSlides )
			params.loopedSlides = slides.length;
		swiper.loopedSlides = Math.ceil(
			parseFloat( params.loopedSlides || params.slidesPerView, 10 )
		);
		swiper.loopedSlides += params.loopAdditionalSlides;

		if ( swiper.loopedSlides > slides.length ) {
			swiper.loopedSlides = slides.length;
		}

		var prependSlides = [];
		var appendSlides = [];
		slides.each( function ( el, index ) {
			var slide = $( el );

			if ( index < swiper.loopedSlides ) {
				appendSlides.push( el );
			}

			if ( index < slides.length && index >= slides.length - swiper.loopedSlides ) {
				prependSlides.push( el );
			}

			slide.attr( 'data-swiper-slide-index', index );
		} );

		for ( var _i = 0; _i < appendSlides.length; _i += 1 ) {
			$wrapperEl.append(
				$( appendSlides[ _i ].cloneNode( true ) ).addClass( params.slideDuplicateClass )
			);
		}

		for ( var _i2 = prependSlides.length - 1; _i2 >= 0; _i2 -= 1 ) {
			$wrapperEl.prepend(
				$( prependSlides[ _i2 ].cloneNode( true ) ).addClass( params.slideDuplicateClass )
			);
		}
	}

	function loopFix() {
		var swiper = this;
		swiper.emit( 'beforeLoopFix' );
		var activeIndex = swiper.activeIndex,
			slides = swiper.slides,
			loopedSlides = swiper.loopedSlides,
			allowSlidePrev = swiper.allowSlidePrev,
			allowSlideNext = swiper.allowSlideNext,
			snapGrid = swiper.snapGrid,
			rtl = swiper.rtlTranslate;
		var newIndex;
		swiper.allowSlidePrev = true;
		swiper.allowSlideNext = true;
		var snapTranslate = -snapGrid[ activeIndex ];
		var diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding

		if ( activeIndex < loopedSlides ) {
			newIndex = slides.length - loopedSlides * 3 + activeIndex;
			newIndex += loopedSlides;
			var slideChanged = swiper.slideTo( newIndex, 0, false, true );

			if ( slideChanged && diff !== 0 ) {
				swiper.setTranslate( ( rtl ? -swiper.translate : swiper.translate ) - diff );
			}
		} else if ( activeIndex >= slides.length - loopedSlides ) {
			// Fix For Positive Oversliding
			newIndex = -slides.length + activeIndex + loopedSlides;
			newIndex += loopedSlides;

			var _slideChanged = swiper.slideTo( newIndex, 0, false, true );

			if ( _slideChanged && diff !== 0 ) {
				swiper.setTranslate( ( rtl ? -swiper.translate : swiper.translate ) - diff );
			}
		}

		swiper.allowSlidePrev = allowSlidePrev;
		swiper.allowSlideNext = allowSlideNext;
		swiper.emit( 'loopFix' );
	}

	function loopDestroy() {
		var swiper = this;
		var $wrapperEl = swiper.$wrapperEl,
			params = swiper.params,
			slides = swiper.slides;
		$wrapperEl
			.children(
				'.' +
					params.slideClass +
					'.' +
					params.slideDuplicateClass +
					',.' +
					params.slideClass +
					'.' +
					params.slideBlankClass
			)
			.remove();
		slides.removeAttr( 'data-swiper-slide-index' );
	}

	var loop = {
		loopCreate: loopCreate,
		loopFix: loopFix,
		loopDestroy: loopDestroy,
	};

	function setGrabCursor( moving ) {
		var swiper = this;
		if (
			swiper.support.touch ||
			! swiper.params.simulateTouch ||
			( swiper.params.watchOverflow && swiper.isLocked ) ||
			swiper.params.cssMode
		)
			return;
		var el = swiper.el;
		el.style.cursor = 'move';
		el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';
		el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';
		el.style.cursor = moving ? 'grabbing' : 'grab';
	}

	function unsetGrabCursor() {
		var swiper = this;

		if (
			swiper.support.touch ||
			( swiper.params.watchOverflow && swiper.isLocked ) ||
			swiper.params.cssMode
		) {
			return;
		}

		swiper.el.style.cursor = '';
	}

	var grabCursor = {
		setGrabCursor: setGrabCursor,
		unsetGrabCursor: unsetGrabCursor,
	};

	function appendSlide( slides ) {
		var swiper = this;
		var $wrapperEl = swiper.$wrapperEl,
			params = swiper.params;

		if ( params.loop ) {
			swiper.loopDestroy();
		}

		if ( typeof slides === 'object' && 'length' in slides ) {
			for ( var i = 0; i < slides.length; i += 1 ) {
				if ( slides[ i ] ) $wrapperEl.append( slides[ i ] );
			}
		} else {
			$wrapperEl.append( slides );
		}

		if ( params.loop ) {
			swiper.loopCreate();
		}

		if ( ! ( params.observer && swiper.support.observer ) ) {
			swiper.update();
		}
	}

	function prependSlide( slides ) {
		var swiper = this;
		var params = swiper.params,
			$wrapperEl = swiper.$wrapperEl,
			activeIndex = swiper.activeIndex;

		if ( params.loop ) {
			swiper.loopDestroy();
		}

		var newActiveIndex = activeIndex + 1;

		if ( typeof slides === 'object' && 'length' in slides ) {
			for ( var i = 0; i < slides.length; i += 1 ) {
				if ( slides[ i ] ) $wrapperEl.prepend( slides[ i ] );
			}

			newActiveIndex = activeIndex + slides.length;
		} else {
			$wrapperEl.prepend( slides );
		}

		if ( params.loop ) {
			swiper.loopCreate();
		}

		if ( ! ( params.observer && swiper.support.observer ) ) {
			swiper.update();
		}

		swiper.slideTo( newActiveIndex, 0, false );
	}

	function addSlide( index, slides ) {
		var swiper = this;
		var $wrapperEl = swiper.$wrapperEl,
			params = swiper.params,
			activeIndex = swiper.activeIndex;
		var activeIndexBuffer = activeIndex;

		if ( params.loop ) {
			activeIndexBuffer -= swiper.loopedSlides;
			swiper.loopDestroy();
			swiper.slides = $wrapperEl.children( '.' + params.slideClass );
		}

		var baseLength = swiper.slides.length;

		if ( index <= 0 ) {
			swiper.prependSlide( slides );
			return;
		}

		if ( index >= baseLength ) {
			swiper.appendSlide( slides );
			return;
		}

		var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;
		var slidesBuffer = [];

		for ( var i = baseLength - 1; i >= index; i -= 1 ) {
			var currentSlide = swiper.slides.eq( i );
			currentSlide.remove();
			slidesBuffer.unshift( currentSlide );
		}

		if ( typeof slides === 'object' && 'length' in slides ) {
			for ( var _i = 0; _i < slides.length; _i += 1 ) {
				if ( slides[ _i ] ) $wrapperEl.append( slides[ _i ] );
			}

			newActiveIndex =
				activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;
		} else {
			$wrapperEl.append( slides );
		}

		for ( var _i2 = 0; _i2 < slidesBuffer.length; _i2 += 1 ) {
			$wrapperEl.append( slidesBuffer[ _i2 ] );
		}

		if ( params.loop ) {
			swiper.loopCreate();
		}

		if ( ! ( params.observer && swiper.support.observer ) ) {
			swiper.update();
		}

		if ( params.loop ) {
			swiper.slideTo( newActiveIndex + swiper.loopedSlides, 0, false );
		} else {
			swiper.slideTo( newActiveIndex, 0, false );
		}
	}

	function removeSlide( slidesIndexes ) {
		var swiper = this;
		var params = swiper.params,
			$wrapperEl = swiper.$wrapperEl,
			activeIndex = swiper.activeIndex;
		var activeIndexBuffer = activeIndex;

		if ( params.loop ) {
			activeIndexBuffer -= swiper.loopedSlides;
			swiper.loopDestroy();
			swiper.slides = $wrapperEl.children( '.' + params.slideClass );
		}

		var newActiveIndex = activeIndexBuffer;
		var indexToRemove;

		if ( typeof slidesIndexes === 'object' && 'length' in slidesIndexes ) {
			for ( var i = 0; i < slidesIndexes.length; i += 1 ) {
				indexToRemove = slidesIndexes[ i ];
				if ( swiper.slides[ indexToRemove ] ) swiper.slides.eq( indexToRemove ).remove();
				if ( indexToRemove < newActiveIndex ) newActiveIndex -= 1;
			}

			newActiveIndex = Math.max( newActiveIndex, 0 );
		} else {
			indexToRemove = slidesIndexes;
			if ( swiper.slides[ indexToRemove ] ) swiper.slides.eq( indexToRemove ).remove();
			if ( indexToRemove < newActiveIndex ) newActiveIndex -= 1;
			newActiveIndex = Math.max( newActiveIndex, 0 );
		}

		if ( params.loop ) {
			swiper.loopCreate();
		}

		if ( ! ( params.observer && swiper.support.observer ) ) {
			swiper.update();
		}

		if ( params.loop ) {
			swiper.slideTo( newActiveIndex + swiper.loopedSlides, 0, false );
		} else {
			swiper.slideTo( newActiveIndex, 0, false );
		}
	}

	function removeAllSlides() {
		var swiper = this;
		var slidesIndexes = [];

		for ( var i = 0; i < swiper.slides.length; i += 1 ) {
			slidesIndexes.push( i );
		}

		swiper.removeSlide( slidesIndexes );
	}

	var manipulation = {
		appendSlide: appendSlide,
		prependSlide: prependSlide,
		addSlide: addSlide,
		removeSlide: removeSlide,
		removeAllSlides: removeAllSlides,
	};

	function onTouchStart( event ) {
		var swiper = this;
		var document = getDocument();
		var window = getWindow();
		var data = swiper.touchEventsData;
		var params = swiper.params,
			touches = swiper.touches,
			enabled = swiper.enabled;
		if ( ! enabled ) return;

		if ( swiper.animating && params.preventInteractionOnTransition ) {
			return;
		}

		var e = event;
		if ( e.originalEvent ) e = e.originalEvent;
		var $targetEl = $( e.target );

		if ( params.touchEventsTarget === 'wrapper' ) {
			if ( ! $targetEl.closest( swiper.wrapperEl ).length ) return;
		}

		data.isTouchEvent = e.type === 'touchstart';
		if ( ! data.isTouchEvent && 'which' in e && e.which === 3 ) return;
		if ( ! data.isTouchEvent && 'button' in e && e.button > 0 ) return;
		if ( data.isTouched && data.isMoved ) return; // change target el for shadow root componenet

		var swipingClassHasValue = !! params.noSwipingClass && params.noSwipingClass !== '';

		if (
			swipingClassHasValue &&
			e.target &&
			e.target.shadowRoot &&
			event.path &&
			event.path[ 0 ]
		) {
			$targetEl = $( event.path[ 0 ] );
		}

		if (
			params.noSwiping &&
			$targetEl.closest(
				params.noSwipingSelector ? params.noSwipingSelector : '.' + params.noSwipingClass
			)[ 0 ]
		) {
			swiper.allowClick = true;
			return;
		}

		if ( params.swipeHandler ) {
			if ( ! $targetEl.closest( params.swipeHandler )[ 0 ] ) return;
		}

		touches.currentX = e.type === 'touchstart' ? e.targetTouches[ 0 ].pageX : e.pageX;
		touches.currentY = e.type === 'touchstart' ? e.targetTouches[ 0 ].pageY : e.pageY;
		var startX = touches.currentX;
		var startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore

		var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;
		var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;

		if (
			edgeSwipeDetection &&
			( startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold )
		) {
			if ( edgeSwipeDetection === 'prevent' ) {
				event.preventDefault();
			} else {
				return;
			}
		}

		extend( data, {
			isTouched: true,
			isMoved: false,
			allowTouchCallbacks: true,
			isScrolling: undefined,
			startMoving: undefined,
		} );
		touches.startX = startX;
		touches.startY = startY;
		data.touchStartTime = now();
		swiper.allowClick = true;
		swiper.updateSize();
		swiper.swipeDirection = undefined;
		if ( params.threshold > 0 ) data.allowThresholdMove = false;

		if ( e.type !== 'touchstart' ) {
			var preventDefault = true;
			if ( $targetEl.is( data.focusableElements ) ) preventDefault = false;

			if (
				document.activeElement &&
				$( document.activeElement ).is( data.focusableElements ) &&
				document.activeElement !== $targetEl[ 0 ]
			) {
				document.activeElement.blur();
			}

			var shouldPreventDefault =
				preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;

			if (
				( params.touchStartForcePreventDefault || shouldPreventDefault ) &&
				! $targetEl[ 0 ].isContentEditable
			) {
				e.preventDefault();
			}
		}

		swiper.emit( 'touchStart', e );
	}

	function onTouchMove( event ) {
		var document = getDocument();
		var swiper = this;
		var data = swiper.touchEventsData;
		var params = swiper.params,
			touches = swiper.touches,
			rtl = swiper.rtlTranslate,
			enabled = swiper.enabled;
		if ( ! enabled ) return;
		var e = event;
		if ( e.originalEvent ) e = e.originalEvent;

		if ( ! data.isTouched ) {
			if ( data.startMoving && data.isScrolling ) {
				swiper.emit( 'touchMoveOpposite', e );
			}

			return;
		}

		if ( data.isTouchEvent && e.type !== 'touchmove' ) return;
		var targetTouch =
			e.type === 'touchmove' &&
			e.targetTouches &&
			( e.targetTouches[ 0 ] || e.changedTouches[ 0 ] );
		var pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;
		var pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;

		if ( e.preventedByNestedSwiper ) {
			touches.startX = pageX;
			touches.startY = pageY;
			return;
		}

		if ( ! swiper.allowTouchMove ) {
			// isMoved = true;
			swiper.allowClick = false;

			if ( data.isTouched ) {
				extend( touches, {
					startX: pageX,
					startY: pageY,
					currentX: pageX,
					currentY: pageY,
				} );
				data.touchStartTime = now();
			}

			return;
		}

		if ( data.isTouchEvent && params.touchReleaseOnEdges && ! params.loop ) {
			if ( swiper.isVertical() ) {
				// Vertical
				if (
					( pageY < touches.startY && swiper.translate <= swiper.maxTranslate() ) ||
					( pageY > touches.startY && swiper.translate >= swiper.minTranslate() )
				) {
					data.isTouched = false;
					data.isMoved = false;
					return;
				}
			} else if (
				( pageX < touches.startX && swiper.translate <= swiper.maxTranslate() ) ||
				( pageX > touches.startX && swiper.translate >= swiper.minTranslate() )
			) {
				return;
			}
		}

		if ( data.isTouchEvent && document.activeElement ) {
			if ( e.target === document.activeElement && $( e.target ).is( data.focusableElements ) ) {
				data.isMoved = true;
				swiper.allowClick = false;
				return;
			}
		}

		if ( data.allowTouchCallbacks ) {
			swiper.emit( 'touchMove', e );
		}

		if ( e.targetTouches && e.targetTouches.length > 1 ) return;
		touches.currentX = pageX;
		touches.currentY = pageY;
		var diffX = touches.currentX - touches.startX;
		var diffY = touches.currentY - touches.startY;
		if (
			swiper.params.threshold &&
			Math.sqrt( Math.pow( diffX, 2 ) + Math.pow( diffY, 2 ) ) < swiper.params.threshold
		)
			return;

		if ( typeof data.isScrolling === 'undefined' ) {
			var touchAngle;

			if (
				( swiper.isHorizontal() && touches.currentY === touches.startY ) ||
				( swiper.isVertical() && touches.currentX === touches.startX )
			) {
				data.isScrolling = false;
			} else {
				// eslint-disable-next-line
				if ( diffX * diffX + diffY * diffY >= 25 ) {
					touchAngle = ( Math.atan2( Math.abs( diffY ), Math.abs( diffX ) ) * 180 ) / Math.PI;
					data.isScrolling = swiper.isHorizontal()
						? touchAngle > params.touchAngle
						: 90 - touchAngle > params.touchAngle;
				}
			}
		}

		if ( data.isScrolling ) {
			swiper.emit( 'touchMoveOpposite', e );
		}

		if ( typeof data.startMoving === 'undefined' ) {
			if ( touches.currentX !== touches.startX || touches.currentY !== touches.startY ) {
				data.startMoving = true;
			}
		}

		if ( data.isScrolling ) {
			data.isTouched = false;
			return;
		}

		if ( ! data.startMoving ) {
			return;
		}

		swiper.allowClick = false;

		if ( ! params.cssMode && e.cancelable ) {
			e.preventDefault();
		}

		if ( params.touchMoveStopPropagation && ! params.nested ) {
			e.stopPropagation();
		}

		if ( ! data.isMoved ) {
			if ( params.loop ) {
				swiper.loopFix();
			}

			data.startTranslate = swiper.getTranslate();
			swiper.setTransition( 0 );

			if ( swiper.animating ) {
				swiper.$wrapperEl.trigger( 'webkitTransitionEnd transitionend' );
			}

			data.allowMomentumBounce = false; // Grab Cursor

			if (
				params.grabCursor &&
				( swiper.allowSlideNext === true || swiper.allowSlidePrev === true )
			) {
				swiper.setGrabCursor( true );
			}

			swiper.emit( 'sliderFirstMove', e );
		}

		swiper.emit( 'sliderMove', e );
		data.isMoved = true;
		var diff = swiper.isHorizontal() ? diffX : diffY;
		touches.diff = diff;
		diff *= params.touchRatio;
		if ( rtl ) diff = -diff;
		swiper.swipeDirection = diff > 0 ? 'prev' : 'next';
		data.currentTranslate = diff + data.startTranslate;
		var disableParentSwiper = true;
		var resistanceRatio = params.resistanceRatio;

		if ( params.touchReleaseOnEdges ) {
			resistanceRatio = 0;
		}

		if ( diff > 0 && data.currentTranslate > swiper.minTranslate() ) {
			disableParentSwiper = false;
			if ( params.resistance )
				data.currentTranslate =
					swiper.minTranslate() -
					1 +
					Math.pow( -swiper.minTranslate() + data.startTranslate + diff, resistanceRatio );
		} else if ( diff < 0 && data.currentTranslate < swiper.maxTranslate() ) {
			disableParentSwiper = false;
			if ( params.resistance )
				data.currentTranslate =
					swiper.maxTranslate() +
					1 -
					Math.pow( swiper.maxTranslate() - data.startTranslate - diff, resistanceRatio );
		}

		if ( disableParentSwiper ) {
			e.preventedByNestedSwiper = true;
		} // Directions locks

		if (
			! swiper.allowSlideNext &&
			swiper.swipeDirection === 'next' &&
			data.currentTranslate < data.startTranslate
		) {
			data.currentTranslate = data.startTranslate;
		}

		if (
			! swiper.allowSlidePrev &&
			swiper.swipeDirection === 'prev' &&
			data.currentTranslate > data.startTranslate
		) {
			data.currentTranslate = data.startTranslate;
		}

		if ( ! swiper.allowSlidePrev && ! swiper.allowSlideNext ) {
			data.currentTranslate = data.startTranslate;
		} // Threshold

		if ( params.threshold > 0 ) {
			if ( Math.abs( diff ) > params.threshold || data.allowThresholdMove ) {
				if ( ! data.allowThresholdMove ) {
					data.allowThresholdMove = true;
					touches.startX = touches.currentX;
					touches.startY = touches.currentY;
					data.currentTranslate = data.startTranslate;
					touches.diff = swiper.isHorizontal()
						? touches.currentX - touches.startX
						: touches.currentY - touches.startY;
					return;
				}
			} else {
				data.currentTranslate = data.startTranslate;
				return;
			}
		}

		if ( ! params.followFinger || params.cssMode ) return; // Update active index in free mode

		if ( params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility ) {
			swiper.updateActiveIndex();
			swiper.updateSlidesClasses();
		}

		if ( params.freeMode ) {
			// Velocity
			if ( data.velocities.length === 0 ) {
				data.velocities.push( {
					position: touches[ swiper.isHorizontal() ? 'startX' : 'startY' ],
					time: data.touchStartTime,
				} );
			}

			data.velocities.push( {
				position: touches[ swiper.isHorizontal() ? 'currentX' : 'currentY' ],
				time: now(),
			} );
		} // Update progress

		swiper.updateProgress( data.currentTranslate ); // Update translate

		swiper.setTranslate( data.currentTranslate );
	}

	function onTouchEnd( event ) {
		var swiper = this;
		var data = swiper.touchEventsData;
		var params = swiper.params,
			touches = swiper.touches,
			rtl = swiper.rtlTranslate,
			$wrapperEl = swiper.$wrapperEl,
			slidesGrid = swiper.slidesGrid,
			snapGrid = swiper.snapGrid,
			enabled = swiper.enabled;
		if ( ! enabled ) return;
		var e = event;
		if ( e.originalEvent ) e = e.originalEvent;

		if ( data.allowTouchCallbacks ) {
			swiper.emit( 'touchEnd', e );
		}

		data.allowTouchCallbacks = false;

		if ( ! data.isTouched ) {
			if ( data.isMoved && params.grabCursor ) {
				swiper.setGrabCursor( false );
			}

			data.isMoved = false;
			data.startMoving = false;
			return;
		} // Return Grab Cursor

		if (
			params.grabCursor &&
			data.isMoved &&
			data.isTouched &&
			( swiper.allowSlideNext === true || swiper.allowSlidePrev === true )
		) {
			swiper.setGrabCursor( false );
		} // Time diff

		var touchEndTime = now();
		var timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click

		if ( swiper.allowClick ) {
			swiper.updateClickedSlide( e );
			swiper.emit( 'tap click', e );

			if ( timeDiff < 300 && touchEndTime - data.lastClickTime < 300 ) {
				swiper.emit( 'doubleTap doubleClick', e );
			}
		}

		data.lastClickTime = now();
		nextTick( function () {
			if ( ! swiper.destroyed ) swiper.allowClick = true;
		} );

		if (
			! data.isTouched ||
			! data.isMoved ||
			! swiper.swipeDirection ||
			touches.diff === 0 ||
			data.currentTranslate === data.startTranslate
		) {
			data.isTouched = false;
			data.isMoved = false;
			data.startMoving = false;
			return;
		}

		data.isTouched = false;
		data.isMoved = false;
		data.startMoving = false;
		var currentPos;

		if ( params.followFinger ) {
			currentPos = rtl ? swiper.translate : -swiper.translate;
		} else {
			currentPos = -data.currentTranslate;
		}

		if ( params.cssMode ) {
			return;
		}

		if ( params.freeMode ) {
			if ( currentPos < -swiper.minTranslate() ) {
				swiper.slideTo( swiper.activeIndex );
				return;
			}

			if ( currentPos > -swiper.maxTranslate() ) {
				if ( swiper.slides.length < snapGrid.length ) {
					swiper.slideTo( snapGrid.length - 1 );
				} else {
					swiper.slideTo( swiper.slides.length - 1 );
				}

				return;
			}

			if ( params.freeModeMomentum ) {
				if ( data.velocities.length > 1 ) {
					var lastMoveEvent = data.velocities.pop();
					var velocityEvent = data.velocities.pop();
					var distance = lastMoveEvent.position - velocityEvent.position;
					var time = lastMoveEvent.time - velocityEvent.time;
					swiper.velocity = distance / time;
					swiper.velocity /= 2;

					if ( Math.abs( swiper.velocity ) < params.freeModeMinimumVelocity ) {
						swiper.velocity = 0;
					} // this implies that the user stopped moving a finger then released.
					// There would be no events with distance zero, so the last event is stale.

					if ( time > 150 || now() - lastMoveEvent.time > 300 ) {
						swiper.velocity = 0;
					}
				} else {
					swiper.velocity = 0;
				}

				swiper.velocity *= params.freeModeMomentumVelocityRatio;
				data.velocities.length = 0;
				var momentumDuration = 1000 * params.freeModeMomentumRatio;
				var momentumDistance = swiper.velocity * momentumDuration;
				var newPosition = swiper.translate + momentumDistance;
				if ( rtl ) newPosition = -newPosition;
				var doBounce = false;
				var afterBouncePosition;
				var bounceAmount = Math.abs( swiper.velocity ) * 20 * params.freeModeMomentumBounceRatio;
				var needsLoopFix;

				if ( newPosition < swiper.maxTranslate() ) {
					if ( params.freeModeMomentumBounce ) {
						if ( newPosition + swiper.maxTranslate() < -bounceAmount ) {
							newPosition = swiper.maxTranslate() - bounceAmount;
						}

						afterBouncePosition = swiper.maxTranslate();
						doBounce = true;
						data.allowMomentumBounce = true;
					} else {
						newPosition = swiper.maxTranslate();
					}

					if ( params.loop && params.centeredSlides ) needsLoopFix = true;
				} else if ( newPosition > swiper.minTranslate() ) {
					if ( params.freeModeMomentumBounce ) {
						if ( newPosition - swiper.minTranslate() > bounceAmount ) {
							newPosition = swiper.minTranslate() + bounceAmount;
						}

						afterBouncePosition = swiper.minTranslate();
						doBounce = true;
						data.allowMomentumBounce = true;
					} else {
						newPosition = swiper.minTranslate();
					}

					if ( params.loop && params.centeredSlides ) needsLoopFix = true;
				} else if ( params.freeModeSticky ) {
					var nextSlide;

					for ( var j = 0; j < snapGrid.length; j += 1 ) {
						if ( snapGrid[ j ] > -newPosition ) {
							nextSlide = j;
							break;
						}
					}

					if (
						Math.abs( snapGrid[ nextSlide ] - newPosition ) <
							Math.abs( snapGrid[ nextSlide - 1 ] - newPosition ) ||
						swiper.swipeDirection === 'next'
					) {
						newPosition = snapGrid[ nextSlide ];
					} else {
						newPosition = snapGrid[ nextSlide - 1 ];
					}

					newPosition = -newPosition;
				}

				if ( needsLoopFix ) {
					swiper.once( 'transitionEnd', function () {
						swiper.loopFix();
					} );
				} // Fix duration

				if ( swiper.velocity !== 0 ) {
					if ( rtl ) {
						momentumDuration = Math.abs( ( -newPosition - swiper.translate ) / swiper.velocity );
					} else {
						momentumDuration = Math.abs( ( newPosition - swiper.translate ) / swiper.velocity );
					}

					if ( params.freeModeSticky ) {
						// If freeModeSticky is active and the user ends a swipe with a slow-velocity
						// event, then durations can be 20+ seconds to slide one (or zero!) slides.
						// It's easy to see this when simulating touch with mouse events. To fix this,
						// limit single-slide swipes to the default slide duration. This also has the
						// nice side effect of matching slide speed if the user stopped moving before
						// lifting finger or mouse vs. moving slowly before lifting the finger/mouse.
						// For faster swipes, also apply limits (albeit higher ones).
						var moveDistance = Math.abs( ( rtl ? -newPosition : newPosition ) - swiper.translate );
						var currentSlideSize = swiper.slidesSizesGrid[ swiper.activeIndex ];

						if ( moveDistance < currentSlideSize ) {
							momentumDuration = params.speed;
						} else if ( moveDistance < 2 * currentSlideSize ) {
							momentumDuration = params.speed * 1.5;
						} else {
							momentumDuration = params.speed * 2.5;
						}
					}
				} else if ( params.freeModeSticky ) {
					swiper.slideToClosest();
					return;
				}

				if ( params.freeModeMomentumBounce && doBounce ) {
					swiper.updateProgress( afterBouncePosition );
					swiper.setTransition( momentumDuration );
					swiper.setTranslate( newPosition );
					swiper.transitionStart( true, swiper.swipeDirection );
					swiper.animating = true;
					$wrapperEl.transitionEnd( function () {
						if ( ! swiper || swiper.destroyed || ! data.allowMomentumBounce ) return;
						swiper.emit( 'momentumBounce' );
						swiper.setTransition( params.speed );
						setTimeout( function () {
							swiper.setTranslate( afterBouncePosition );
							$wrapperEl.transitionEnd( function () {
								if ( ! swiper || swiper.destroyed ) return;
								swiper.transitionEnd();
							} );
						}, 0 );
					} );
				} else if ( swiper.velocity ) {
					swiper.updateProgress( newPosition );
					swiper.setTransition( momentumDuration );
					swiper.setTranslate( newPosition );
					swiper.transitionStart( true, swiper.swipeDirection );

					if ( ! swiper.animating ) {
						swiper.animating = true;
						$wrapperEl.transitionEnd( function () {
							if ( ! swiper || swiper.destroyed ) return;
							swiper.transitionEnd();
						} );
					}
				} else {
					swiper.emit( '_freeModeNoMomentumRelease' );
					swiper.updateProgress( newPosition );
				}

				swiper.updateActiveIndex();
				swiper.updateSlidesClasses();
			} else if ( params.freeModeSticky ) {
				swiper.slideToClosest();
				return;
			} else if ( params.freeMode ) {
				swiper.emit( '_freeModeNoMomentumRelease' );
			}

			if ( ! params.freeModeMomentum || timeDiff >= params.longSwipesMs ) {
				swiper.updateProgress();
				swiper.updateActiveIndex();
				swiper.updateSlidesClasses();
			}

			return;
		} // Find current slide

		var stopIndex = 0;
		var groupSize = swiper.slidesSizesGrid[ 0 ];

		for (
			var i = 0;
			i < slidesGrid.length;
			i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup
		) {
			var _increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;

			if ( typeof slidesGrid[ i + _increment ] !== 'undefined' ) {
				if ( currentPos >= slidesGrid[ i ] && currentPos < slidesGrid[ i + _increment ] ) {
					stopIndex = i;
					groupSize = slidesGrid[ i + _increment ] - slidesGrid[ i ];
				}
			} else if ( currentPos >= slidesGrid[ i ] ) {
				stopIndex = i;
				groupSize = slidesGrid[ slidesGrid.length - 1 ] - slidesGrid[ slidesGrid.length - 2 ];
			}
		} // Find current slide size

		var ratio = ( currentPos - slidesGrid[ stopIndex ] ) / groupSize;
		var increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;

		if ( timeDiff > params.longSwipesMs ) {
			// Long touches
			if ( ! params.longSwipes ) {
				swiper.slideTo( swiper.activeIndex );
				return;
			}

			if ( swiper.swipeDirection === 'next' ) {
				if ( ratio >= params.longSwipesRatio ) swiper.slideTo( stopIndex + increment );
				else swiper.slideTo( stopIndex );
			}

			if ( swiper.swipeDirection === 'prev' ) {
				if ( ratio > 1 - params.longSwipesRatio ) swiper.slideTo( stopIndex + increment );
				else swiper.slideTo( stopIndex );
			}
		} else {
			// Short swipes
			if ( ! params.shortSwipes ) {
				swiper.slideTo( swiper.activeIndex );
				return;
			}

			var isNavButtonTarget =
				swiper.navigation &&
				( e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl );

			if ( ! isNavButtonTarget ) {
				if ( swiper.swipeDirection === 'next' ) {
					swiper.slideTo( stopIndex + increment );
				}

				if ( swiper.swipeDirection === 'prev' ) {
					swiper.slideTo( stopIndex );
				}
			} else if ( e.target === swiper.navigation.nextEl ) {
				swiper.slideTo( stopIndex + increment );
			} else {
				swiper.slideTo( stopIndex );
			}
		}
	}

	function onResize() {
		var swiper = this;
		var params = swiper.params,
			el = swiper.el;
		if ( el && el.offsetWidth === 0 ) return; // Breakpoints

		if ( params.breakpoints ) {
			swiper.setBreakpoint();
		} // Save locks

		var allowSlideNext = swiper.allowSlideNext,
			allowSlidePrev = swiper.allowSlidePrev,
			snapGrid = swiper.snapGrid; // Disable locks on resize

		swiper.allowSlideNext = true;
		swiper.allowSlidePrev = true;
		swiper.updateSize();
		swiper.updateSlides();
		swiper.updateSlidesClasses();

		if (
			( params.slidesPerView === 'auto' || params.slidesPerView > 1 ) &&
			swiper.isEnd &&
			! swiper.isBeginning &&
			! swiper.params.centeredSlides
		) {
			swiper.slideTo( swiper.slides.length - 1, 0, false, true );
		} else {
			swiper.slideTo( swiper.activeIndex, 0, false, true );
		}

		if ( swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused ) {
			swiper.autoplay.run();
		} // Return locks after resize

		swiper.allowSlidePrev = allowSlidePrev;
		swiper.allowSlideNext = allowSlideNext;

		if ( swiper.params.watchOverflow && snapGrid !== swiper.snapGrid ) {
			swiper.checkOverflow();
		}
	}

	function onClick( e ) {
		var swiper = this;
		if ( ! swiper.enabled ) return;

		if ( ! swiper.allowClick ) {
			if ( swiper.params.preventClicks ) e.preventDefault();

			if ( swiper.params.preventClicksPropagation && swiper.animating ) {
				e.stopPropagation();
				e.stopImmediatePropagation();
			}
		}
	}

	function onScroll() {
		var swiper = this;
		var wrapperEl = swiper.wrapperEl,
			rtlTranslate = swiper.rtlTranslate,
			enabled = swiper.enabled;
		if ( ! enabled ) return;
		swiper.previousTranslate = swiper.translate;

		if ( swiper.isHorizontal() ) {
			if ( rtlTranslate ) {
				swiper.translate = wrapperEl.scrollWidth - wrapperEl.offsetWidth - wrapperEl.scrollLeft;
			} else {
				swiper.translate = -wrapperEl.scrollLeft;
			}
		} else {
			swiper.translate = -wrapperEl.scrollTop;
		} // eslint-disable-next-line

		if ( swiper.translate === -0 ) swiper.translate = 0;
		swiper.updateActiveIndex();
		swiper.updateSlidesClasses();
		var newProgress;
		var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();

		if ( translatesDiff === 0 ) {
			newProgress = 0;
		} else {
			newProgress = ( swiper.translate - swiper.minTranslate() ) / translatesDiff;
		}

		if ( newProgress !== swiper.progress ) {
			swiper.updateProgress( rtlTranslate ? -swiper.translate : swiper.translate );
		}

		swiper.emit( 'setTranslate', swiper.translate, false );
	}

	var dummyEventAttached = false;

	function dummyEventListener() {}

	function attachEvents() {
		var swiper = this;
		var document = getDocument();
		var params = swiper.params,
			touchEvents = swiper.touchEvents,
			el = swiper.el,
			wrapperEl = swiper.wrapperEl,
			device = swiper.device,
			support = swiper.support;
		swiper.onTouchStart = onTouchStart.bind( swiper );
		swiper.onTouchMove = onTouchMove.bind( swiper );
		swiper.onTouchEnd = onTouchEnd.bind( swiper );

		if ( params.cssMode ) {
			swiper.onScroll = onScroll.bind( swiper );
		}

		swiper.onClick = onClick.bind( swiper );
		var capture = !! params.nested; // Touch Events

		if ( ! support.touch && support.pointerEvents ) {
			el.addEventListener( touchEvents.start, swiper.onTouchStart, false );
			document.addEventListener( touchEvents.move, swiper.onTouchMove, capture );
			document.addEventListener( touchEvents.end, swiper.onTouchEnd, false );
		} else {
			if ( support.touch ) {
				var passiveListener =
					touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners
						? {
								passive: true,
								capture: false,
						  }
						: false;
				el.addEventListener( touchEvents.start, swiper.onTouchStart, passiveListener );
				el.addEventListener(
					touchEvents.move,
					swiper.onTouchMove,
					support.passiveListener
						? {
								passive: false,
								capture: capture,
						  }
						: capture
				);
				el.addEventListener( touchEvents.end, swiper.onTouchEnd, passiveListener );

				if ( touchEvents.cancel ) {
					el.addEventListener( touchEvents.cancel, swiper.onTouchEnd, passiveListener );
				}

				if ( ! dummyEventAttached ) {
					document.addEventListener( 'touchstart', dummyEventListener );
					dummyEventAttached = true;
				}
			}

			if (
				( params.simulateTouch && ! device.ios && ! device.android ) ||
				( params.simulateTouch && ! support.touch && device.ios )
			) {
				el.addEventListener( 'mousedown', swiper.onTouchStart, false );
				document.addEventListener( 'mousemove', swiper.onTouchMove, capture );
				document.addEventListener( 'mouseup', swiper.onTouchEnd, false );
			}
		} // Prevent Links Clicks

		if ( params.preventClicks || params.preventClicksPropagation ) {
			el.addEventListener( 'click', swiper.onClick, true );
		}

		if ( params.cssMode ) {
			wrapperEl.addEventListener( 'scroll', swiper.onScroll );
		} // Resize handler

		if ( params.updateOnWindowResize ) {
			swiper.on(
				device.ios || device.android
					? 'resize orientationchange observerUpdate'
					: 'resize observerUpdate',
				onResize,
				true
			);
		} else {
			swiper.on( 'observerUpdate', onResize, true );
		}
	}

	function detachEvents() {
		var swiper = this;
		var document = getDocument();
		var params = swiper.params,
			touchEvents = swiper.touchEvents,
			el = swiper.el,
			wrapperEl = swiper.wrapperEl,
			device = swiper.device,
			support = swiper.support;
		var capture = !! params.nested; // Touch Events

		if ( ! support.touch && support.pointerEvents ) {
			el.removeEventListener( touchEvents.start, swiper.onTouchStart, false );
			document.removeEventListener( touchEvents.move, swiper.onTouchMove, capture );
			document.removeEventListener( touchEvents.end, swiper.onTouchEnd, false );
		} else {
			if ( support.touch ) {
				var passiveListener =
					touchEvents.start === 'onTouchStart' && support.passiveListener && params.passiveListeners
						? {
								passive: true,
								capture: false,
						  }
						: false;
				el.removeEventListener( touchEvents.start, swiper.onTouchStart, passiveListener );
				el.removeEventListener( touchEvents.move, swiper.onTouchMove, capture );
				el.removeEventListener( touchEvents.end, swiper.onTouchEnd, passiveListener );

				if ( touchEvents.cancel ) {
					el.removeEventListener( touchEvents.cancel, swiper.onTouchEnd, passiveListener );
				}
			}

			if (
				( params.simulateTouch && ! device.ios && ! device.android ) ||
				( params.simulateTouch && ! support.touch && device.ios )
			) {
				el.removeEventListener( 'mousedown', swiper.onTouchStart, false );
				document.removeEventListener( 'mousemove', swiper.onTouchMove, capture );
				document.removeEventListener( 'mouseup', swiper.onTouchEnd, false );
			}
		} // Prevent Links Clicks

		if ( params.preventClicks || params.preventClicksPropagation ) {
			el.removeEventListener( 'click', swiper.onClick, true );
		}

		if ( params.cssMode ) {
			wrapperEl.removeEventListener( 'scroll', swiper.onScroll );
		} // Resize handler

		swiper.off(
			device.ios || device.android
				? 'resize orientationchange observerUpdate'
				: 'resize observerUpdate',
			onResize
		);
	}

	var events = {
		attachEvents: attachEvents,
		detachEvents: detachEvents,
	};

	function setBreakpoint() {
		var swiper = this;
		var activeIndex = swiper.activeIndex,
			initialized = swiper.initialized,
			_swiper$loopedSlides = swiper.loopedSlides,
			loopedSlides = _swiper$loopedSlides === void 0 ? 0 : _swiper$loopedSlides,
			params = swiper.params,
			$el = swiper.$el;
		var breakpoints = params.breakpoints;
		if ( ! breakpoints || ( breakpoints && Object.keys( breakpoints ).length === 0 ) ) return; // Get breakpoint for window width and update parameters

		var breakpoint = swiper.getBreakpoint( breakpoints, swiper.params.breakpointsBase, swiper.el );
		if ( ! breakpoint || swiper.currentBreakpoint === breakpoint ) return;
		var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[ breakpoint ] : undefined;

		if ( breakpointOnlyParams ) {
			[
				'slidesPerView',
				'spaceBetween',
				'slidesPerGroup',
				'slidesPerGroupSkip',
				'slidesPerColumn',
			].forEach( function ( param ) {
				var paramValue = breakpointOnlyParams[ param ];
				if ( typeof paramValue === 'undefined' ) return;

				if ( param === 'slidesPerView' && ( paramValue === 'AUTO' || paramValue === 'auto' ) ) {
					breakpointOnlyParams[ param ] = 'auto';
				} else if ( param === 'slidesPerView' ) {
					breakpointOnlyParams[ param ] = parseFloat( paramValue );
				} else {
					breakpointOnlyParams[ param ] = parseInt( paramValue, 10 );
				}
			} );
		}

		var breakpointParams = breakpointOnlyParams || swiper.originalParams;
		var wasMultiRow = params.slidesPerColumn > 1;
		var isMultiRow = breakpointParams.slidesPerColumn > 1;
		var wasEnabled = params.enabled;

		if ( wasMultiRow && ! isMultiRow ) {
			$el.removeClass(
				params.containerModifierClass +
					'multirow ' +
					params.containerModifierClass +
					'multirow-column'
			);
			swiper.emitContainerClasses();
		} else if ( ! wasMultiRow && isMultiRow ) {
			$el.addClass( params.containerModifierClass + 'multirow' );

			if ( breakpointParams.slidesPerColumnFill === 'column' ) {
				$el.addClass( params.containerModifierClass + 'multirow-column' );
			}

			swiper.emitContainerClasses();
		}

		var directionChanged =
			breakpointParams.direction && breakpointParams.direction !== params.direction;
		var needsReLoop =
			params.loop &&
			( breakpointParams.slidesPerView !== params.slidesPerView || directionChanged );

		if ( directionChanged && initialized ) {
			swiper.changeDirection();
		}

		extend( swiper.params, breakpointParams );
		var isEnabled = swiper.params.enabled;
		extend( swiper, {
			allowTouchMove: swiper.params.allowTouchMove,
			allowSlideNext: swiper.params.allowSlideNext,
			allowSlidePrev: swiper.params.allowSlidePrev,
		} );

		if ( wasEnabled && ! isEnabled ) {
			swiper.disable();
		} else if ( ! wasEnabled && isEnabled ) {
			swiper.enable();
		}

		swiper.currentBreakpoint = breakpoint;
		swiper.emit( '_beforeBreakpoint', breakpointParams );

		if ( needsReLoop && initialized ) {
			swiper.loopDestroy();
			swiper.loopCreate();
			swiper.updateSlides();
			swiper.slideTo( activeIndex - loopedSlides + swiper.loopedSlides, 0, false );
		}

		swiper.emit( 'breakpoint', breakpointParams );
	}

	function getBreakpoint( breakpoints, base, containerEl ) {
		if ( base === void 0 ) {
			base = 'window';
		}

		if ( ! breakpoints || ( base === 'container' && ! containerEl ) ) return undefined;
		var breakpoint = false;
		var window = getWindow();
		var currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;
		var points = Object.keys( breakpoints ).map( function ( point ) {
			if ( typeof point === 'string' && point.indexOf( '@' ) === 0 ) {
				var minRatio = parseFloat( point.substr( 1 ) );
				var value = currentHeight * minRatio;
				return {
					value: value,
					point: point,
				};
			}

			return {
				value: point,
				point: point,
			};
		} );
		points.sort( function ( a, b ) {
			return parseInt( a.value, 10 ) - parseInt( b.value, 10 );
		} );

		for ( var i = 0; i < points.length; i += 1 ) {
			var _points$i = points[ i ],
				point = _points$i.point,
				value = _points$i.value;

			if ( base === 'window' ) {
				if ( window.matchMedia( '(min-width: ' + value + 'px)' ).matches ) {
					breakpoint = point;
				}
			} else if ( value <= containerEl.clientWidth ) {
				breakpoint = point;
			}
		}

		return breakpoint || 'max';
	}

	var breakpoints = {
		setBreakpoint: setBreakpoint,
		getBreakpoint: getBreakpoint,
	};

	function prepareClasses( entries, prefix ) {
		var resultClasses = [];
		entries.forEach( function ( item ) {
			if ( typeof item === 'object' ) {
				Object.keys( item ).forEach( function ( classNames ) {
					if ( item[ classNames ] ) {
						resultClasses.push( prefix + classNames );
					}
				} );
			} else if ( typeof item === 'string' ) {
				resultClasses.push( prefix + item );
			}
		} );
		return resultClasses;
	}

	function addClasses() {
		var swiper = this;
		var classNames = swiper.classNames,
        params = swiper.params,
        rtl = swiper.rtl,
        $el = swiper.$el,
        device = swiper.device,
        support = swiper.support; // prettier-ignore

		var suffixes = prepareClasses(
			[
				'initialized',
				params.direction,
				{
					'pointer-events': support.pointerEvents && ! support.touch,
				},
				{
					'free-mode': params.freeMode,
				},
				{
					autoheight: params.autoHeight,
				},
				{
					rtl: rtl,
				},
				{
					multirow: params.slidesPerColumn > 1,
				},
				{
					'multirow-column': params.slidesPerColumn > 1 && params.slidesPerColumnFill === 'column',
				},
				{
					android: device.android,
				},
				{
					ios: device.ios,
				},
				{
					'css-mode': params.cssMode,
				},
			],
			params.containerModifierClass
		);
		classNames.push.apply( classNames, suffixes );
		$el.addClass( [].concat( classNames ).join( ' ' ) );
		swiper.emitContainerClasses();
	}

	function removeClasses() {
		var swiper = this;
		var $el = swiper.$el,
			classNames = swiper.classNames;
		$el.removeClass( classNames.join( ' ' ) );
		swiper.emitContainerClasses();
	}

	var classes = {
		addClasses: addClasses,
		removeClasses: removeClasses,
	};

	function loadImage( imageEl, src, srcset, sizes, checkForComplete, callback ) {
		var window = getWindow();
		var image;

		function onReady() {
			if ( callback ) callback();
		}

		var isPicture = $( imageEl ).parent( 'picture' )[ 0 ];

		if ( ! isPicture && ( ! imageEl.complete || ! checkForComplete ) ) {
			if ( src ) {
				image = new window.Image();
				image.onload = onReady;
				image.onerror = onReady;

				if ( sizes ) {
					image.sizes = sizes;
				}

				if ( srcset ) {
					image.srcset = srcset;
				}

				if ( src ) {
					image.src = src;
				}
			} else {
				onReady();
			}
		} else {
			// image already loaded...
			onReady();
		}
	}

	function preloadImages() {
		var swiper = this;
		swiper.imagesToLoad = swiper.$el.find( 'img' );

		function onReady() {
			if ( typeof swiper === 'undefined' || swiper === null || ! swiper || swiper.destroyed )
				return;
			if ( swiper.imagesLoaded !== undefined ) swiper.imagesLoaded += 1;

			if ( swiper.imagesLoaded === swiper.imagesToLoad.length ) {
				if ( swiper.params.updateOnImagesReady ) swiper.update();
				swiper.emit( 'imagesReady' );
			}
		}

		for ( var i = 0; i < swiper.imagesToLoad.length; i += 1 ) {
			var imageEl = swiper.imagesToLoad[ i ];
			swiper.loadImage(
				imageEl,
				imageEl.currentSrc || imageEl.getAttribute( 'src' ),
				imageEl.srcset || imageEl.getAttribute( 'srcset' ),
				imageEl.sizes || imageEl.getAttribute( 'sizes' ),
				true,
				onReady
			);
		}
	}

	var images = {
		loadImage: loadImage,
		preloadImages: preloadImages,
	};

	function checkOverflow() {
		var swiper = this;
		var params = swiper.params;
		var wasLocked = swiper.isLocked;
		var lastSlidePosition =
			swiper.slides.length > 0 &&
			params.slidesOffsetBefore +
				params.spaceBetween * ( swiper.slides.length - 1 ) +
				swiper.slides[ 0 ].offsetWidth * swiper.slides.length;

		if ( params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition ) {
			swiper.isLocked = lastSlidePosition <= swiper.size;
		} else {
			swiper.isLocked = swiper.snapGrid.length === 1;
		}

		swiper.allowSlideNext = ! swiper.isLocked;
		swiper.allowSlidePrev = ! swiper.isLocked; // events

		if ( wasLocked !== swiper.isLocked ) swiper.emit( swiper.isLocked ? 'lock' : 'unlock' );

		if ( wasLocked && wasLocked !== swiper.isLocked ) {
			swiper.isEnd = false;
			if ( swiper.navigation ) swiper.navigation.update();
		}
	}

	var checkOverflow$1 = {
		checkOverflow: checkOverflow,
	};

	var defaults = {
		init: true,
		direction: 'horizontal',
		touchEventsTarget: 'container',
		initialSlide: 0,
		speed: 300,
		cssMode: false,
		updateOnWindowResize: true,
		resizeObserver: false,
		nested: false,
		createElements: false,
		enabled: true,
		focusableElements: 'input, select, option, textarea, button, video, label',
		// Overrides
		width: null,
		height: null,
		//
		preventInteractionOnTransition: false,
		// ssr
		userAgent: null,
		url: null,
		// To support iOS's swipe-to-go-back gesture (when being used in-app).
		edgeSwipeDetection: false,
		edgeSwipeThreshold: 20,
		// Free mode
		freeMode: false,
		freeModeMomentum: true,
		freeModeMomentumRatio: 1,
		freeModeMomentumBounce: true,
		freeModeMomentumBounceRatio: 1,
		freeModeMomentumVelocityRatio: 1,
		freeModeSticky: false,
		freeModeMinimumVelocity: 0.02,
		// Autoheight
		autoHeight: false,
		// Set wrapper width
		setWrapperSize: false,
		// Virtual Translate
		virtualTranslate: false,
		// Effects
		effect: 'slide',
		// 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'
		// Breakpoints
		breakpoints: undefined,
		breakpointsBase: 'window',
		// Slides grid
		spaceBetween: 0,
		slidesPerView: 1,
		slidesPerColumn: 1,
		slidesPerColumnFill: 'column',
		slidesPerGroup: 1,
		slidesPerGroupSkip: 0,
		centeredSlides: false,
		centeredSlidesBounds: false,
		slidesOffsetBefore: 0,
		// in px
		slidesOffsetAfter: 0,
		// in px
		normalizeSlideIndex: true,
		centerInsufficientSlides: false,
		// Disable swiper and hide navigation when container not overflow
		watchOverflow: false,
		// Round length
		roundLengths: false,
		// Touches
		touchRatio: 1,
		touchAngle: 45,
		simulateTouch: true,
		shortSwipes: true,
		longSwipes: true,
		longSwipesRatio: 0.5,
		longSwipesMs: 300,
		followFinger: true,
		allowTouchMove: true,
		threshold: 0,
		touchMoveStopPropagation: false,
		touchStartPreventDefault: true,
		touchStartForcePreventDefault: false,
		touchReleaseOnEdges: false,
		// Unique Navigation Elements
		uniqueNavElements: true,
		// Resistance
		resistance: true,
		resistanceRatio: 0.85,
		// Progress
		watchSlidesProgress: false,
		watchSlidesVisibility: false,
		// Cursor
		grabCursor: false,
		// Clicks
		preventClicks: true,
		preventClicksPropagation: true,
		slideToClickedSlide: false,
		// Images
		preloadImages: true,
		updateOnImagesReady: true,
		// loop
		loop: false,
		loopAdditionalSlides: 0,
		loopedSlides: null,
		loopFillGroupWithBlank: false,
		loopPreventsSlide: true,
		// Swiping/no swiping
		allowSlidePrev: true,
		allowSlideNext: true,
		swipeHandler: null,
		// '.swipe-handler',
		noSwiping: true,
		noSwipingClass: 'swiper-no-swiping',
		noSwipingSelector: null,
		// Passive Listeners
		passiveListeners: true,
		// NS
		containerModifierClass: 'swiper-container-',
		// NEW
		slideClass: 'swiper-slide',
		slideBlankClass: 'swiper-slide-invisible-blank',
		slideActiveClass: 'swiper-slide-active',
		slideDuplicateActiveClass: 'swiper-slide-duplicate-active',
		slideVisibleClass: 'swiper-slide-visible',
		slideDuplicateClass: 'swiper-slide-duplicate',
		slideNextClass: 'swiper-slide-next',
		slideDuplicateNextClass: 'swiper-slide-duplicate-next',
		slidePrevClass: 'swiper-slide-prev',
		slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',
		wrapperClass: 'swiper-wrapper',
		// Callbacks
		runCallbacksOnInit: true,
		// Internals
		_emitClasses: false,
	};

	var prototypes = {
		modular: modular,
		eventsEmitter: eventsEmitter,
		update: update,
		translate: translate,
		transition: transition,
		slide: slide,
		loop: loop,
		grabCursor: grabCursor,
		manipulation: manipulation,
		events: events,
		breakpoints: breakpoints,
		checkOverflow: checkOverflow$1,
		classes: classes,
		images: images,
	};
	var extendedDefaults = {};

	var Swiper = /*#__PURE__*/ ( function () {
		function Swiper() {
			var el;
			var params;

			for ( var _len = arguments.length, args = new Array( _len ), _key = 0; _key < _len; _key++ ) {
				args[ _key ] = arguments[ _key ];
			}

			if (
				args.length === 1 &&
				args[ 0 ].constructor &&
				Object.prototype.toString.call( args[ 0 ] ).slice( 8, -1 ) === 'Object'
			) {
				params = args[ 0 ];
			} else {
				el = args[ 0 ];
				params = args[ 1 ];
			}

			if ( ! params ) params = {};
			params = extend( {}, params );
			if ( el && ! params.el ) params.el = el;

			if ( params.el && $( params.el ).length > 1 ) {
				var swipers = [];
				$( params.el ).each( function ( containerEl ) {
					var newParams = extend( {}, params, {
						el: containerEl,
					} );
					swipers.push( new Swiper( newParams ) );
				} );
				return swipers;
			} // Swiper Instance

			var swiper = this;
			swiper.__swiper__ = true;
			swiper.support = getSupport();
			swiper.device = getDevice( {
				userAgent: params.userAgent,
			} );
			swiper.browser = getBrowser();
			swiper.eventsListeners = {};
			swiper.eventsAnyListeners = [];

			if ( typeof swiper.modules === 'undefined' ) {
				swiper.modules = {};
			}

			Object.keys( swiper.modules ).forEach( function ( moduleName ) {
				var module = swiper.modules[ moduleName ];

				if ( module.params ) {
					var moduleParamName = Object.keys( module.params )[ 0 ];
					var moduleParams = module.params[ moduleParamName ];
					if ( typeof moduleParams !== 'object' || moduleParams === null ) return;

					if (
						[ 'navigation', 'pagination', 'scrollbar' ].indexOf( moduleParamName ) >= 0 &&
						params[ moduleParamName ] === true
					) {
						params[ moduleParamName ] = {
							auto: true,
						};
					}

					if ( ! ( moduleParamName in params && 'enabled' in moduleParams ) ) return;

					if ( params[ moduleParamName ] === true ) {
						params[ moduleParamName ] = {
							enabled: true,
						};
					}

					if (
						typeof params[ moduleParamName ] === 'object' &&
						! ( 'enabled' in params[ moduleParamName ] )
					) {
						params[ moduleParamName ].enabled = true;
					}

					if ( ! params[ moduleParamName ] )
						params[ moduleParamName ] = {
							enabled: false,
						};
				}
			} ); // Extend defaults with modules params

			var swiperParams = extend( {}, defaults );
			swiper.useParams( swiperParams ); // Extend defaults with passed params

			swiper.params = extend( {}, swiperParams, extendedDefaults, params );
			swiper.originalParams = extend( {}, swiper.params );
			swiper.passedParams = extend( {}, params ); // add event listeners

			if ( swiper.params && swiper.params.on ) {
				Object.keys( swiper.params.on ).forEach( function ( eventName ) {
					swiper.on( eventName, swiper.params.on[ eventName ] );
				} );
			}

			if ( swiper.params && swiper.params.onAny ) {
				swiper.onAny( swiper.params.onAny );
			} // Save Dom lib

			swiper.$ = $; // Extend Swiper

			extend( swiper, {
				enabled: swiper.params.enabled,
				el: el,
				// Classes
				classNames: [],
				// Slides
				slides: $(),
				slidesGrid: [],
				snapGrid: [],
				slidesSizesGrid: [],
				// isDirection
				isHorizontal: function isHorizontal() {
					return swiper.params.direction === 'horizontal';
				},
				isVertical: function isVertical() {
					return swiper.params.direction === 'vertical';
				},
				// Indexes
				activeIndex: 0,
				realIndex: 0,
				//
				isBeginning: true,
				isEnd: false,
				// Props
				translate: 0,
				previousTranslate: 0,
				progress: 0,
				velocity: 0,
				animating: false,
				// Locks
				allowSlideNext: swiper.params.allowSlideNext,
				allowSlidePrev: swiper.params.allowSlidePrev,
				// Touch Events
				touchEvents: ( function touchEvents() {
					var touch = [ 'touchstart', 'touchmove', 'touchend', 'touchcancel' ];
					var desktop = [ 'mousedown', 'mousemove', 'mouseup' ];

					if ( swiper.support.pointerEvents ) {
						desktop = [ 'pointerdown', 'pointermove', 'pointerup' ];
					}

					swiper.touchEventsTouch = {
						start: touch[ 0 ],
						move: touch[ 1 ],
						end: touch[ 2 ],
						cancel: touch[ 3 ],
					};
					swiper.touchEventsDesktop = {
						start: desktop[ 0 ],
						move: desktop[ 1 ],
						end: desktop[ 2 ],
					};
					return swiper.support.touch || ! swiper.params.simulateTouch
						? swiper.touchEventsTouch
						: swiper.touchEventsDesktop;
				} )(),
				touchEventsData: {
					isTouched: undefined,
					isMoved: undefined,
					allowTouchCallbacks: undefined,
					touchStartTime: undefined,
					isScrolling: undefined,
					currentTranslate: undefined,
					startTranslate: undefined,
					allowThresholdMove: undefined,
					// Form elements to match
					focusableElements: swiper.params.focusableElements,
					// Last click time
					lastClickTime: now(),
					clickTimeout: undefined,
					// Velocities
					velocities: [],
					allowMomentumBounce: undefined,
					isTouchEvent: undefined,
					startMoving: undefined,
				},
				// Clicks
				allowClick: true,
				// Touches
				allowTouchMove: swiper.params.allowTouchMove,
				touches: {
					startX: 0,
					startY: 0,
					currentX: 0,
					currentY: 0,
					diff: 0,
				},
				// Images
				imagesToLoad: [],
				imagesLoaded: 0,
			} ); // Install Modules

			swiper.useModules();
			swiper.emit( '_swiper' ); // Init

			if ( swiper.params.init ) {
				swiper.init();
			} // Return app instance

			return swiper;
		}

		var _proto = Swiper.prototype;

		_proto.enable = function enable() {
			var swiper = this;
			if ( swiper.enabled ) return;
			swiper.enabled = true;

			if ( swiper.params.grabCursor ) {
				swiper.setGrabCursor();
			}

			swiper.emit( 'enable' );
		};

		_proto.disable = function disable() {
			var swiper = this;
			if ( ! swiper.enabled ) return;
			swiper.enabled = false;

			if ( swiper.params.grabCursor ) {
				swiper.unsetGrabCursor();
			}

			swiper.emit( 'disable' );
		};

		_proto.setProgress = function setProgress( progress, speed ) {
			var swiper = this;
			progress = Math.min( Math.max( progress, 0 ), 1 );
			var min = swiper.minTranslate();
			var max = swiper.maxTranslate();
			var current = ( max - min ) * progress + min;
			swiper.translateTo( current, typeof speed === 'undefined' ? 0 : speed );
			swiper.updateActiveIndex();
			swiper.updateSlidesClasses();
		};

		_proto.emitContainerClasses = function emitContainerClasses() {
			var swiper = this;
			if ( ! swiper.params._emitClasses || ! swiper.el ) return;
			var classes = swiper.el.className.split( ' ' ).filter( function ( className ) {
				return (
					className.indexOf( 'swiper-container' ) === 0 ||
					className.indexOf( swiper.params.containerModifierClass ) === 0
				);
			} );
			swiper.emit( '_containerClasses', classes.join( ' ' ) );
		};

		_proto.getSlideClasses = function getSlideClasses( slideEl ) {
			var swiper = this;
			return slideEl.className
				.split( ' ' )
				.filter( function ( className ) {
					return (
						className.indexOf( 'swiper-slide' ) === 0 ||
						className.indexOf( swiper.params.slideClass ) === 0
					);
				} )
				.join( ' ' );
		};

		_proto.emitSlidesClasses = function emitSlidesClasses() {
			var swiper = this;
			if ( ! swiper.params._emitClasses || ! swiper.el ) return;
			var updates = [];
			swiper.slides.each( function ( slideEl ) {
				var classNames = swiper.getSlideClasses( slideEl );
				updates.push( {
					slideEl: slideEl,
					classNames: classNames,
				} );
				swiper.emit( '_slideClass', slideEl, classNames );
			} );
			swiper.emit( '_slideClasses', updates );
		};

		_proto.slidesPerViewDynamic = function slidesPerViewDynamic() {
			var swiper = this;
			var params = swiper.params,
				slides = swiper.slides,
				slidesGrid = swiper.slidesGrid,
				swiperSize = swiper.size,
				activeIndex = swiper.activeIndex;
			var spv = 1;

			if ( params.centeredSlides ) {
				var slideSize = slides[ activeIndex ].swiperSlideSize;
				var breakLoop;

				for ( var i = activeIndex + 1; i < slides.length; i += 1 ) {
					if ( slides[ i ] && ! breakLoop ) {
						slideSize += slides[ i ].swiperSlideSize;
						spv += 1;
						if ( slideSize > swiperSize ) breakLoop = true;
					}
				}

				for ( var _i = activeIndex - 1; _i >= 0; _i -= 1 ) {
					if ( slides[ _i ] && ! breakLoop ) {
						slideSize += slides[ _i ].swiperSlideSize;
						spv += 1;
						if ( slideSize > swiperSize ) breakLoop = true;
					}
				}
			} else {
				for ( var _i2 = activeIndex + 1; _i2 < slides.length; _i2 += 1 ) {
					if ( slidesGrid[ _i2 ] - slidesGrid[ activeIndex ] < swiperSize ) {
						spv += 1;
					}
				}
			}

			return spv;
		};

		_proto.update = function update() {
			var swiper = this;
			if ( ! swiper || swiper.destroyed ) return;
			var snapGrid = swiper.snapGrid,
				params = swiper.params; // Breakpoints

			if ( params.breakpoints ) {
				swiper.setBreakpoint();
			}

			swiper.updateSize();
			swiper.updateSlides();
			swiper.updateProgress();
			swiper.updateSlidesClasses();

			function setTranslate() {
				var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
				var newTranslate = Math.min(
					Math.max( translateValue, swiper.maxTranslate() ),
					swiper.minTranslate()
				);
				swiper.setTranslate( newTranslate );
				swiper.updateActiveIndex();
				swiper.updateSlidesClasses();
			}

			var translated;

			if ( swiper.params.freeMode ) {
				setTranslate();

				if ( swiper.params.autoHeight ) {
					swiper.updateAutoHeight();
				}
			} else {
				if (
					( swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1 ) &&
					swiper.isEnd &&
					! swiper.params.centeredSlides
				) {
					translated = swiper.slideTo( swiper.slides.length - 1, 0, false, true );
				} else {
					translated = swiper.slideTo( swiper.activeIndex, 0, false, true );
				}

				if ( ! translated ) {
					setTranslate();
				}
			}

			if ( params.watchOverflow && snapGrid !== swiper.snapGrid ) {
				swiper.checkOverflow();
			}

			swiper.emit( 'update' );
		};

		_proto.changeDirection = function changeDirection( newDirection, needUpdate ) {
			if ( needUpdate === void 0 ) {
				needUpdate = true;
			}

			var swiper = this;
			var currentDirection = swiper.params.direction;

			if ( ! newDirection ) {
				// eslint-disable-next-line
				newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';
			}

			if (
				newDirection === currentDirection ||
				( newDirection !== 'horizontal' && newDirection !== 'vertical' )
			) {
				return swiper;
			}

			swiper.$el
				.removeClass( '' + swiper.params.containerModifierClass + currentDirection )
				.addClass( '' + swiper.params.containerModifierClass + newDirection );
			swiper.emitContainerClasses();
			swiper.params.direction = newDirection;
			swiper.slides.each( function ( slideEl ) {
				if ( newDirection === 'vertical' ) {
					slideEl.style.width = '';
				} else {
					slideEl.style.height = '';
				}
			} );
			swiper.emit( 'changeDirection' );
			if ( needUpdate ) swiper.update();
			return swiper;
		};

		_proto.mount = function mount( el ) {
			var swiper = this;
			if ( swiper.mounted ) return true; // Find el

			var $el = $( el || swiper.params.el );
			el = $el[ 0 ];

			if ( ! el ) {
				return false;
			}

			el.swiper = swiper;

			var getWrapperSelector = function getWrapperSelector() {
				return '.' + ( swiper.params.wrapperClass || '' ).trim().split( ' ' ).join( '.' );
			};

			var getWrapper = function getWrapper() {
				if ( el && el.shadowRoot && el.shadowRoot.querySelector ) {
					var res = $( el.shadowRoot.querySelector( getWrapperSelector() ) ); // Children needs to return slot items

					res.children = function ( options ) {
						return $el.children( options );
					};

					return res;
				}

				return $el.children( getWrapperSelector() );
			}; // Find Wrapper

			var $wrapperEl = getWrapper();

			if ( $wrapperEl.length === 0 && swiper.params.createElements ) {
				var document = getDocument();
				var wrapper = document.createElement( 'div' );
				$wrapperEl = $( wrapper );
				wrapper.className = swiper.params.wrapperClass;
				$el.append( wrapper );
				$el.children( '.' + swiper.params.slideClass ).each( function ( slideEl ) {
					$wrapperEl.append( slideEl );
				} );
			}

			extend( swiper, {
				$el: $el,
				el: el,
				$wrapperEl: $wrapperEl,
				wrapperEl: $wrapperEl[ 0 ],
				mounted: true,
				// RTL
				rtl: el.dir.toLowerCase() === 'rtl' || $el.css( 'direction' ) === 'rtl',
				rtlTranslate:
					swiper.params.direction === 'horizontal' &&
					( el.dir.toLowerCase() === 'rtl' || $el.css( 'direction' ) === 'rtl' ),
				wrongRTL: $wrapperEl.css( 'display' ) === '-webkit-box',
			} );
			return true;
		};

		_proto.init = function init( el ) {
			var swiper = this;
			if ( swiper.initialized ) return swiper;
			var mounted = swiper.mount( el );
			if ( mounted === false ) return swiper;
			swiper.emit( 'beforeInit' ); // Set breakpoint

			if ( swiper.params.breakpoints ) {
				swiper.setBreakpoint();
			} // Add Classes

			swiper.addClasses(); // Create loop

			if ( swiper.params.loop ) {
				swiper.loopCreate();
			} // Update size

			swiper.updateSize(); // Update slides

			swiper.updateSlides();

			if ( swiper.params.watchOverflow ) {
				swiper.checkOverflow();
			} // Set Grab Cursor

			if ( swiper.params.grabCursor && swiper.enabled ) {
				swiper.setGrabCursor();
			}

			if ( swiper.params.preloadImages ) {
				swiper.preloadImages();
			} // Slide To Initial Slide

			if ( swiper.params.loop ) {
				swiper.slideTo(
					swiper.params.initialSlide + swiper.loopedSlides,
					0,
					swiper.params.runCallbacksOnInit,
					false,
					true
				);
			} else {
				swiper.slideTo(
					swiper.params.initialSlide,
					0,
					swiper.params.runCallbacksOnInit,
					false,
					true
				);
			} // Attach events

			swiper.attachEvents(); // Init Flag

			swiper.initialized = true; // Emit

			swiper.emit( 'init' );
			swiper.emit( 'afterInit' );
			return swiper;
		};

		_proto.destroy = function destroy( deleteInstance, cleanStyles ) {
			if ( deleteInstance === void 0 ) {
				deleteInstance = true;
			}

			if ( cleanStyles === void 0 ) {
				cleanStyles = true;
			}

			var swiper = this;
			var params = swiper.params,
				$el = swiper.$el,
				$wrapperEl = swiper.$wrapperEl,
				slides = swiper.slides;

			if ( typeof swiper.params === 'undefined' || swiper.destroyed ) {
				return null;
			}

			swiper.emit( 'beforeDestroy' ); // Init Flag

			swiper.initialized = false; // Detach events

			swiper.detachEvents(); // Destroy loop

			if ( params.loop ) {
				swiper.loopDestroy();
			} // Cleanup styles

			if ( cleanStyles ) {
				swiper.removeClasses();
				$el.removeAttr( 'style' );
				$wrapperEl.removeAttr( 'style' );

				if ( slides && slides.length ) {
					slides
						.removeClass(
							[
								params.slideVisibleClass,
								params.slideActiveClass,
								params.slideNextClass,
								params.slidePrevClass,
							].join( ' ' )
						)
						.removeAttr( 'style' )
						.removeAttr( 'data-swiper-slide-index' );
				}
			}

			swiper.emit( 'destroy' ); // Detach emitter events

			Object.keys( swiper.eventsListeners ).forEach( function ( eventName ) {
				swiper.off( eventName );
			} );

			if ( deleteInstance !== false ) {
				swiper.$el[ 0 ].swiper = null;
				deleteProps( swiper );
			}

			swiper.destroyed = true;
			return null;
		};

		Swiper.extendDefaults = function extendDefaults( newDefaults ) {
			extend( extendedDefaults, newDefaults );
		};

		Swiper.installModule = function installModule( module ) {
			if ( ! Swiper.prototype.modules ) Swiper.prototype.modules = {};
			var name = module.name || Object.keys( Swiper.prototype.modules ).length + '_' + now();
			Swiper.prototype.modules[ name ] = module;
		};

		Swiper.use = function use( module ) {
			if ( Array.isArray( module ) ) {
				module.forEach( function ( m ) {
					return Swiper.installModule( m );
				} );
				return Swiper;
			}

			Swiper.installModule( module );
			return Swiper;
		};

		_createClass( Swiper, null, [
			{
				key: 'extendedDefaults',
				get: function get() {
					return extendedDefaults;
				},
			},
			{
				key: 'defaults',
				get: function get() {
					return defaults;
				},
			},
		] );

		return Swiper;
	} )();

	Object.keys( prototypes ).forEach( function ( prototypeGroup ) {
		Object.keys( prototypes[ prototypeGroup ] ).forEach( function ( protoMethod ) {
			Swiper.prototype[ protoMethod ] = prototypes[ prototypeGroup ][ protoMethod ];
		} );
	} );
	Swiper.use( [ Resize, Observer$1 ] );

	var Navigation = {
		toggleEl: function toggleEl( $el, disabled ) {
			$el[ disabled ? 'addClass' : 'removeClass' ]( this.params.navigation.disabledClass );
			if ( $el[ 0 ] && $el[ 0 ].tagName === 'BUTTON' ) $el[ 0 ].disabled = disabled;
		},
		update: function update() {
			// Update Navigation Buttons
			var swiper = this;
			var params = swiper.params.navigation;
			var toggleEl = swiper.navigation.toggleEl;
			if ( swiper.params.loop ) return;
			var _swiper$navigation = swiper.navigation,
				$nextEl = _swiper$navigation.$nextEl,
				$prevEl = _swiper$navigation.$prevEl;

			if ( $prevEl && $prevEl.length > 0 ) {
				if ( swiper.isBeginning ) {
					toggleEl( $prevEl, true );
				} else {
					toggleEl( $prevEl, false );
				}

				if ( swiper.params.watchOverflow && swiper.enabled ) {
					$prevEl[ swiper.isLocked ? 'addClass' : 'removeClass' ]( params.lockClass );
				}
			}

			if ( $nextEl && $nextEl.length > 0 ) {
				if ( swiper.isEnd ) {
					toggleEl( $nextEl, true );
				} else {
					toggleEl( $nextEl, false );
				}

				if ( swiper.params.watchOverflow && swiper.enabled ) {
					$nextEl[ swiper.isLocked ? 'addClass' : 'removeClass' ]( params.lockClass );
				}
			}
		},
		onPrevClick: function onPrevClick( e ) {
			var swiper = this;
			e.preventDefault();
			if ( swiper.isBeginning && ! swiper.params.loop ) return;
			swiper.slidePrev();
		},
		onNextClick: function onNextClick( e ) {
			var swiper = this;
			e.preventDefault();
			if ( swiper.isEnd && ! swiper.params.loop ) return;
			swiper.slideNext();
		},
		init: function init() {
			var swiper = this;
			var params = swiper.params.navigation;
			swiper.params.navigation = createElementIfNotDefined(
				swiper.$el,
				swiper.params.navigation,
				swiper.params.createElements,
				{
					nextEl: 'swiper-button-next',
					prevEl: 'swiper-button-prev',
				}
			);
			if ( ! ( params.nextEl || params.prevEl ) ) return;
			var $nextEl;
			var $prevEl;

			if ( params.nextEl ) {
				$nextEl = $( params.nextEl );

				if (
					swiper.params.uniqueNavElements &&
					typeof params.nextEl === 'string' &&
					$nextEl.length > 1 &&
					swiper.$el.find( params.nextEl ).length === 1
				) {
					$nextEl = swiper.$el.find( params.nextEl );
				}
			}

			if ( params.prevEl ) {
				$prevEl = $( params.prevEl );

				if (
					swiper.params.uniqueNavElements &&
					typeof params.prevEl === 'string' &&
					$prevEl.length > 1 &&
					swiper.$el.find( params.prevEl ).length === 1
				) {
					$prevEl = swiper.$el.find( params.prevEl );
				}
			}

			if ( $nextEl && $nextEl.length > 0 ) {
				$nextEl.on( 'click', swiper.navigation.onNextClick );
			}

			if ( $prevEl && $prevEl.length > 0 ) {
				$prevEl.on( 'click', swiper.navigation.onPrevClick );
			}

			extend( swiper.navigation, {
				$nextEl: $nextEl,
				nextEl: $nextEl && $nextEl[ 0 ],
				$prevEl: $prevEl,
				prevEl: $prevEl && $prevEl[ 0 ],
			} );

			if ( ! swiper.enabled ) {
				if ( $nextEl ) $nextEl.addClass( params.lockClass );
				if ( $prevEl ) $prevEl.addClass( params.lockClass );
			}
		},
		destroy: function destroy() {
			var swiper = this;
			var _swiper$navigation2 = swiper.navigation,
				$nextEl = _swiper$navigation2.$nextEl,
				$prevEl = _swiper$navigation2.$prevEl;

			if ( $nextEl && $nextEl.length ) {
				$nextEl.off( 'click', swiper.navigation.onNextClick );
				$nextEl.removeClass( swiper.params.navigation.disabledClass );
			}

			if ( $prevEl && $prevEl.length ) {
				$prevEl.off( 'click', swiper.navigation.onPrevClick );
				$prevEl.removeClass( swiper.params.navigation.disabledClass );
			}
		},
	};
	var Navigation$1 = {
		name: 'navigation',
		params: {
			navigation: {
				nextEl: null,
				prevEl: null,
				hideOnClick: false,
				disabledClass: 'swiper-button-disabled',
				hiddenClass: 'swiper-button-hidden',
				lockClass: 'swiper-button-lock',
			},
		},
		create: function create() {
			var swiper = this;
			bindModuleMethods( swiper, {
				navigation: _extends( {}, Navigation ),
			} );
		},
		on: {
			init: function init( swiper ) {
				swiper.navigation.init();
				swiper.navigation.update();
			},
			toEdge: function toEdge( swiper ) {
				swiper.navigation.update();
			},
			fromEdge: function fromEdge( swiper ) {
				swiper.navigation.update();
			},
			destroy: function destroy( swiper ) {
				swiper.navigation.destroy();
			},
			'enable disable': function enableDisable( swiper ) {
				var _swiper$navigation3 = swiper.navigation,
					$nextEl = _swiper$navigation3.$nextEl,
					$prevEl = _swiper$navigation3.$prevEl;

				if ( $nextEl ) {
					$nextEl[ swiper.enabled ? 'removeClass' : 'addClass' ](
						swiper.params.navigation.lockClass
					);
				}

				if ( $prevEl ) {
					$prevEl[ swiper.enabled ? 'removeClass' : 'addClass' ](
						swiper.params.navigation.lockClass
					);
				}
			},
			click: function click( swiper, e ) {
				var _swiper$navigation4 = swiper.navigation,
					$nextEl = _swiper$navigation4.$nextEl,
					$prevEl = _swiper$navigation4.$prevEl;
				var targetEl = e.target;

				if (
					swiper.params.navigation.hideOnClick &&
					! $( targetEl ).is( $prevEl ) &&
					! $( targetEl ).is( $nextEl )
				) {
					if (
						swiper.pagination &&
						swiper.params.pagination &&
						swiper.params.pagination.clickable &&
						( swiper.pagination.el === targetEl || swiper.pagination.el.contains( targetEl ) )
					)
						return;
					var isHidden;

					if ( $nextEl ) {
						isHidden = $nextEl.hasClass( swiper.params.navigation.hiddenClass );
					} else if ( $prevEl ) {
						isHidden = $prevEl.hasClass( swiper.params.navigation.hiddenClass );
					}

					if ( isHidden === true ) {
						swiper.emit( 'navigationShow' );
					} else {
						swiper.emit( 'navigationHide' );
					}

					if ( $nextEl ) {
						$nextEl.toggleClass( swiper.params.navigation.hiddenClass );
					}

					if ( $prevEl ) {
						$prevEl.toggleClass( swiper.params.navigation.hiddenClass );
					}
				}
			},
		},
	};

	var Pagination = {
		update: function update() {
			// Render || Update Pagination bullets/items
			var swiper = this;
			var rtl = swiper.rtl;
			var params = swiper.params.pagination;
			if (
				! params.el ||
				! swiper.pagination.el ||
				! swiper.pagination.$el ||
				swiper.pagination.$el.length === 0
			)
				return;
			var slidesLength =
				swiper.virtual && swiper.params.virtual.enabled
					? swiper.virtual.slides.length
					: swiper.slides.length;
			var $el = swiper.pagination.$el; // Current/Total

			var current;
			var total = swiper.params.loop
				? Math.ceil( ( slidesLength - swiper.loopedSlides * 2 ) / swiper.params.slidesPerGroup )
				: swiper.snapGrid.length;

			if ( swiper.params.loop ) {
				current = Math.ceil(
					( swiper.activeIndex - swiper.loopedSlides ) / swiper.params.slidesPerGroup
				);

				if ( current > slidesLength - 1 - swiper.loopedSlides * 2 ) {
					current -= slidesLength - swiper.loopedSlides * 2;
				}

				if ( current > total - 1 ) current -= total;
				if ( current < 0 && swiper.params.paginationType !== 'bullets' ) current = total + current;
			} else if ( typeof swiper.snapIndex !== 'undefined' ) {
				current = swiper.snapIndex;
			} else {
				current = swiper.activeIndex || 0;
			} // Types

			if (
				params.type === 'bullets' &&
				swiper.pagination.bullets &&
				swiper.pagination.bullets.length > 0
			) {
				var bullets = swiper.pagination.bullets;
				var firstIndex;
				var lastIndex;
				var midIndex;

				if ( params.dynamicBullets ) {
					swiper.pagination.bulletSize = bullets
						.eq( 0 )
						[ swiper.isHorizontal() ? 'outerWidth' : 'outerHeight' ]( true );
					$el.css(
						swiper.isHorizontal() ? 'width' : 'height',
						swiper.pagination.bulletSize * ( params.dynamicMainBullets + 4 ) + 'px'
					);

					if ( params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined ) {
						swiper.pagination.dynamicBulletIndex += current - swiper.previousIndex;

						if ( swiper.pagination.dynamicBulletIndex > params.dynamicMainBullets - 1 ) {
							swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;
						} else if ( swiper.pagination.dynamicBulletIndex < 0 ) {
							swiper.pagination.dynamicBulletIndex = 0;
						}
					}

					firstIndex = current - swiper.pagination.dynamicBulletIndex;
					lastIndex = firstIndex + ( Math.min( bullets.length, params.dynamicMainBullets ) - 1 );
					midIndex = ( lastIndex + firstIndex ) / 2;
				}

				bullets.removeClass(
					params.bulletActiveClass +
						' ' +
						params.bulletActiveClass +
						'-next ' +
						params.bulletActiveClass +
						'-next-next ' +
						params.bulletActiveClass +
						'-prev ' +
						params.bulletActiveClass +
						'-prev-prev ' +
						params.bulletActiveClass +
						'-main'
				);

				if ( $el.length > 1 ) {
					bullets.each( function ( bullet ) {
						var $bullet = $( bullet );
						var bulletIndex = $bullet.index();

						if ( bulletIndex === current ) {
							$bullet.addClass( params.bulletActiveClass );
						}

						if ( params.dynamicBullets ) {
							if ( bulletIndex >= firstIndex && bulletIndex <= lastIndex ) {
								$bullet.addClass( params.bulletActiveClass + '-main' );
							}

							if ( bulletIndex === firstIndex ) {
								$bullet
									.prev()
									.addClass( params.bulletActiveClass + '-prev' )
									.prev()
									.addClass( params.bulletActiveClass + '-prev-prev' );
							}

							if ( bulletIndex === lastIndex ) {
								$bullet
									.next()
									.addClass( params.bulletActiveClass + '-next' )
									.next()
									.addClass( params.bulletActiveClass + '-next-next' );
							}
						}
					} );
				} else {
					var $bullet = bullets.eq( current );
					var bulletIndex = $bullet.index();
					$bullet.addClass( params.bulletActiveClass );

					if ( params.dynamicBullets ) {
						var $firstDisplayedBullet = bullets.eq( firstIndex );
						var $lastDisplayedBullet = bullets.eq( lastIndex );

						for ( var i = firstIndex; i <= lastIndex; i += 1 ) {
							bullets.eq( i ).addClass( params.bulletActiveClass + '-main' );
						}

						if ( swiper.params.loop ) {
							if ( bulletIndex >= bullets.length - params.dynamicMainBullets ) {
								for ( var _i = params.dynamicMainBullets; _i >= 0; _i -= 1 ) {
									bullets.eq( bullets.length - _i ).addClass( params.bulletActiveClass + '-main' );
								}

								bullets
									.eq( bullets.length - params.dynamicMainBullets - 1 )
									.addClass( params.bulletActiveClass + '-prev' );
							} else {
								$firstDisplayedBullet
									.prev()
									.addClass( params.bulletActiveClass + '-prev' )
									.prev()
									.addClass( params.bulletActiveClass + '-prev-prev' );
								$lastDisplayedBullet
									.next()
									.addClass( params.bulletActiveClass + '-next' )
									.next()
									.addClass( params.bulletActiveClass + '-next-next' );
							}
						} else {
							$firstDisplayedBullet
								.prev()
								.addClass( params.bulletActiveClass + '-prev' )
								.prev()
								.addClass( params.bulletActiveClass + '-prev-prev' );
							$lastDisplayedBullet
								.next()
								.addClass( params.bulletActiveClass + '-next' )
								.next()
								.addClass( params.bulletActiveClass + '-next-next' );
						}
					}
				}

				if ( params.dynamicBullets ) {
					var dynamicBulletsLength = Math.min( bullets.length, params.dynamicMainBullets + 4 );
					var bulletsOffset =
						( swiper.pagination.bulletSize * dynamicBulletsLength - swiper.pagination.bulletSize ) /
							2 -
						midIndex * swiper.pagination.bulletSize;
					var offsetProp = rtl ? 'right' : 'left';
					bullets.css( swiper.isHorizontal() ? offsetProp : 'top', bulletsOffset + 'px' );
				}
			}

			if ( params.type === 'fraction' ) {
				$el
					.find( classesToSelector( params.currentClass ) )
					.text( params.formatFractionCurrent( current + 1 ) );
				$el
					.find( classesToSelector( params.totalClass ) )
					.text( params.formatFractionTotal( total ) );
			}

			if ( params.type === 'progressbar' ) {
				var progressbarDirection;

				if ( params.progressbarOpposite ) {
					progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';
				} else {
					progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';
				}

				var scale = ( current + 1 ) / total;
				var scaleX = 1;
				var scaleY = 1;

				if ( progressbarDirection === 'horizontal' ) {
					scaleX = scale;
				} else {
					scaleY = scale;
				}

				$el
					.find( classesToSelector( params.progressbarFillClass ) )
					.transform( 'translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')' )
					.transition( swiper.params.speed );
			}

			if ( params.type === 'custom' && params.renderCustom ) {
				$el.html( params.renderCustom( swiper, current + 1, total ) );
				swiper.emit( 'paginationRender', $el[ 0 ] );
			} else {
				swiper.emit( 'paginationUpdate', $el[ 0 ] );
			}

			if ( swiper.params.watchOverflow && swiper.enabled ) {
				$el[ swiper.isLocked ? 'addClass' : 'removeClass' ]( params.lockClass );
			}
		},
		render: function render() {
			// Render Container
			var swiper = this;
			var params = swiper.params.pagination;
			if (
				! params.el ||
				! swiper.pagination.el ||
				! swiper.pagination.$el ||
				swiper.pagination.$el.length === 0
			)
				return;
			var slidesLength =
				swiper.virtual && swiper.params.virtual.enabled
					? swiper.virtual.slides.length
					: swiper.slides.length;
			var $el = swiper.pagination.$el;
			var paginationHTML = '';

			if ( params.type === 'bullets' ) {
				var numberOfBullets = swiper.params.loop
					? Math.ceil( ( slidesLength - swiper.loopedSlides * 2 ) / swiper.params.slidesPerGroup )
					: swiper.snapGrid.length;

				if ( swiper.params.freeMode && ! swiper.params.loop && numberOfBullets > slidesLength ) {
					numberOfBullets = slidesLength;
				}

				for ( var i = 0; i < numberOfBullets; i += 1 ) {
					if ( params.renderBullet ) {
						paginationHTML += params.renderBullet.call( swiper, i, params.bulletClass );
					} else {
						paginationHTML +=
							'<' +
							params.bulletElement +
							' class="' +
							params.bulletClass +
							'"></' +
							params.bulletElement +
							'>';
					}
				}

				$el.html( paginationHTML );
				swiper.pagination.bullets = $el.find( classesToSelector( params.bulletClass ) );
			}

			if ( params.type === 'fraction' ) {
				if ( params.renderFraction ) {
					paginationHTML = params.renderFraction.call(
						swiper,
						params.currentClass,
						params.totalClass
					);
				} else {
					paginationHTML =
						'<span class="' +
						params.currentClass +
						'"></span>' +
						' / ' +
						( '<span class="' + params.totalClass + '"></span>' );
				}

				$el.html( paginationHTML );
			}

			if ( params.type === 'progressbar' ) {
				if ( params.renderProgressbar ) {
					paginationHTML = params.renderProgressbar.call( swiper, params.progressbarFillClass );
				} else {
					paginationHTML = '<span class="' + params.progressbarFillClass + '"></span>';
				}

				$el.html( paginationHTML );
			}

			if ( params.type !== 'custom' ) {
				swiper.emit( 'paginationRender', swiper.pagination.$el[ 0 ] );
			}
		},
		init: function init() {
			var swiper = this;
			swiper.params.pagination = createElementIfNotDefined(
				swiper.$el,
				swiper.params.pagination,
				swiper.params.createElements,
				{
					el: 'swiper-pagination',
				}
			);
			var params = swiper.params.pagination;
			if ( ! params.el ) return;
			var $el = $( params.el );
			if ( $el.length === 0 ) return;

			if ( swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 ) {
				$el = swiper.$el.find( params.el );
			}

			if ( params.type === 'bullets' && params.clickable ) {
				$el.addClass( params.clickableClass );
			}

			$el.addClass( params.modifierClass + params.type );

			if ( params.type === 'bullets' && params.dynamicBullets ) {
				$el.addClass( '' + params.modifierClass + params.type + '-dynamic' );
				swiper.pagination.dynamicBulletIndex = 0;

				if ( params.dynamicMainBullets < 1 ) {
					params.dynamicMainBullets = 1;
				}
			}

			if ( params.type === 'progressbar' && params.progressbarOpposite ) {
				$el.addClass( params.progressbarOppositeClass );
			}

			if ( params.clickable ) {
				$el.on( 'click', classesToSelector( params.bulletClass ), function onClick( e ) {
					e.preventDefault();
					var index = $( this ).index() * swiper.params.slidesPerGroup;
					if ( swiper.params.loop ) index += swiper.loopedSlides;
					swiper.slideTo( index );
				} );
			}

			extend( swiper.pagination, {
				$el: $el,
				el: $el[ 0 ],
			} );

			if ( ! swiper.enabled ) {
				$el.addClass( params.lockClass );
			}
		},
		destroy: function destroy() {
			var swiper = this;
			var params = swiper.params.pagination;
			if (
				! params.el ||
				! swiper.pagination.el ||
				! swiper.pagination.$el ||
				swiper.pagination.$el.length === 0
			)
				return;
			var $el = swiper.pagination.$el;
			$el.removeClass( params.hiddenClass );
			$el.removeClass( params.modifierClass + params.type );
			if ( swiper.pagination.bullets )
				swiper.pagination.bullets.removeClass( params.bulletActiveClass );

			if ( params.clickable ) {
				$el.off( 'click', classesToSelector( params.bulletClass ) );
			}
		},
	};
	var Pagination$1 = {
		name: 'pagination',
		params: {
			pagination: {
				el: null,
				bulletElement: 'span',
				clickable: false,
				hideOnClick: false,
				renderBullet: null,
				renderProgressbar: null,
				renderFraction: null,
				renderCustom: null,
				progressbarOpposite: false,
				type: 'bullets',
				// 'bullets' or 'progressbar' or 'fraction' or 'custom'
				dynamicBullets: false,
				dynamicMainBullets: 1,
				formatFractionCurrent: function formatFractionCurrent( number ) {
					return number;
				},
				formatFractionTotal: function formatFractionTotal( number ) {
					return number;
				},
				bulletClass: 'swiper-pagination-bullet',
				bulletActiveClass: 'swiper-pagination-bullet-active',
				modifierClass: 'swiper-pagination-',
				// NEW
				currentClass: 'swiper-pagination-current',
				totalClass: 'swiper-pagination-total',
				hiddenClass: 'swiper-pagination-hidden',
				progressbarFillClass: 'swiper-pagination-progressbar-fill',
				progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',
				clickableClass: 'swiper-pagination-clickable',
				// NEW
				lockClass: 'swiper-pagination-lock',
			},
		},
		create: function create() {
			var swiper = this;
			bindModuleMethods( swiper, {
				pagination: _extends(
					{
						dynamicBulletIndex: 0,
					},
					Pagination
				),
			} );
		},
		on: {
			init: function init( swiper ) {
				swiper.pagination.init();
				swiper.pagination.render();
				swiper.pagination.update();
			},
			activeIndexChange: function activeIndexChange( swiper ) {
				if ( swiper.params.loop ) {
					swiper.pagination.update();
				} else if ( typeof swiper.snapIndex === 'undefined' ) {
					swiper.pagination.update();
				}
			},
			snapIndexChange: function snapIndexChange( swiper ) {
				if ( ! swiper.params.loop ) {
					swiper.pagination.update();
				}
			},
			slidesLengthChange: function slidesLengthChange( swiper ) {
				if ( swiper.params.loop ) {
					swiper.pagination.render();
					swiper.pagination.update();
				}
			},
			snapGridLengthChange: function snapGridLengthChange( swiper ) {
				if ( ! swiper.params.loop ) {
					swiper.pagination.render();
					swiper.pagination.update();
				}
			},
			destroy: function destroy( swiper ) {
				swiper.pagination.destroy();
			},
			'enable disable': function enableDisable( swiper ) {
				var $el = swiper.pagination.$el;

				if ( $el ) {
					$el[ swiper.enabled ? 'removeClass' : 'addClass' ]( swiper.params.pagination.lockClass );
				}
			},
			click: function click( swiper, e ) {
				var targetEl = e.target;

				if (
					swiper.params.pagination.el &&
					swiper.params.pagination.hideOnClick &&
					swiper.pagination.$el.length > 0 &&
					! $( targetEl ).hasClass( swiper.params.pagination.bulletClass )
				) {
					if (
						swiper.navigation &&
						( ( swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl ) ||
							( swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl ) )
					)
						return;
					var isHidden = swiper.pagination.$el.hasClass( swiper.params.pagination.hiddenClass );

					if ( isHidden === true ) {
						swiper.emit( 'paginationShow' );
					} else {
						swiper.emit( 'paginationHide' );
					}

					swiper.pagination.$el.toggleClass( swiper.params.pagination.hiddenClass );
				}
			},
		},
	};

	var Zoom = {
		// Calc Scale From Multi-touches
		getDistanceBetweenTouches: function getDistanceBetweenTouches( e ) {
			if ( e.targetTouches.length < 2 ) return 1;
			var x1 = e.targetTouches[ 0 ].pageX;
			var y1 = e.targetTouches[ 0 ].pageY;
			var x2 = e.targetTouches[ 1 ].pageX;
			var y2 = e.targetTouches[ 1 ].pageY;
			var distance = Math.sqrt( Math.pow( x2 - x1, 2 ) + Math.pow( y2 - y1, 2 ) );
			return distance;
		},
		// Events
		onGestureStart: function onGestureStart( e ) {
			var swiper = this;
			var support = swiper.support;
			var params = swiper.params.zoom;
			var zoom = swiper.zoom;
			var gesture = zoom.gesture;
			zoom.fakeGestureTouched = false;
			zoom.fakeGestureMoved = false;

			if ( ! support.gestures ) {
				if (
					e.type !== 'touchstart' ||
					( e.type === 'touchstart' && e.targetTouches.length < 2 )
				) {
					return;
				}

				zoom.fakeGestureTouched = true;
				gesture.scaleStart = Zoom.getDistanceBetweenTouches( e );
			}

			if ( ! gesture.$slideEl || ! gesture.$slideEl.length ) {
				gesture.$slideEl = $( e.target ).closest( '.' + swiper.params.slideClass );
				if ( gesture.$slideEl.length === 0 )
					gesture.$slideEl = swiper.slides.eq( swiper.activeIndex );
				gesture.$imageEl = gesture.$slideEl.find(
					'img, svg, canvas, picture, .swiper-zoom-target'
				);
				gesture.$imageWrapEl = gesture.$imageEl.parent( '.' + params.containerClass );
				gesture.maxRatio = gesture.$imageWrapEl.attr( 'data-swiper-zoom' ) || params.maxRatio;

				if ( gesture.$imageWrapEl.length === 0 ) {
					gesture.$imageEl = undefined;
					return;
				}
			}

			if ( gesture.$imageEl ) {
				gesture.$imageEl.transition( 0 );
			}

			swiper.zoom.isScaling = true;
		},
		onGestureChange: function onGestureChange( e ) {
			var swiper = this;
			var support = swiper.support;
			var params = swiper.params.zoom;
			var zoom = swiper.zoom;
			var gesture = zoom.gesture;

			if ( ! support.gestures ) {
				if ( e.type !== 'touchmove' || ( e.type === 'touchmove' && e.targetTouches.length < 2 ) ) {
					return;
				}

				zoom.fakeGestureMoved = true;
				gesture.scaleMove = Zoom.getDistanceBetweenTouches( e );
			}

			if ( ! gesture.$imageEl || gesture.$imageEl.length === 0 ) {
				if ( e.type === 'gesturechange' ) zoom.onGestureStart( e );
				return;
			}

			if ( support.gestures ) {
				zoom.scale = e.scale * zoom.currentScale;
			} else {
				zoom.scale = ( gesture.scaleMove / gesture.scaleStart ) * zoom.currentScale;
			}

			if ( zoom.scale > gesture.maxRatio ) {
				zoom.scale = gesture.maxRatio - 1 + Math.pow( zoom.scale - gesture.maxRatio + 1, 0.5 );
			}

			if ( zoom.scale < params.minRatio ) {
				zoom.scale = params.minRatio + 1 - Math.pow( params.minRatio - zoom.scale + 1, 0.5 );
			}

			gesture.$imageEl.transform( 'translate3d(0,0,0) scale(' + zoom.scale + ')' );
		},
		onGestureEnd: function onGestureEnd( e ) {
			var swiper = this;
			var device = swiper.device;
			var support = swiper.support;
			var params = swiper.params.zoom;
			var zoom = swiper.zoom;
			var gesture = zoom.gesture;

			if ( ! support.gestures ) {
				if ( ! zoom.fakeGestureTouched || ! zoom.fakeGestureMoved ) {
					return;
				}

				if (
					e.type !== 'touchend' ||
					( e.type === 'touchend' && e.changedTouches.length < 2 && ! device.android )
				) {
					return;
				}

				zoom.fakeGestureTouched = false;
				zoom.fakeGestureMoved = false;
			}

			if ( ! gesture.$imageEl || gesture.$imageEl.length === 0 ) return;
			zoom.scale = Math.max( Math.min( zoom.scale, gesture.maxRatio ), params.minRatio );
			gesture.$imageEl
				.transition( swiper.params.speed )
				.transform( 'translate3d(0,0,0) scale(' + zoom.scale + ')' );
			zoom.currentScale = zoom.scale;
			zoom.isScaling = false;
			if ( zoom.scale === 1 ) gesture.$slideEl = undefined;
		},
		onTouchStart: function onTouchStart( e ) {
			var swiper = this;
			var device = swiper.device;
			var zoom = swiper.zoom;
			var gesture = zoom.gesture,
				image = zoom.image;
			if ( ! gesture.$imageEl || gesture.$imageEl.length === 0 ) return;
			if ( image.isTouched ) return;
			if ( device.android && e.cancelable ) e.preventDefault();
			image.isTouched = true;
			image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[ 0 ].pageX : e.pageX;
			image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[ 0 ].pageY : e.pageY;
		},
		onTouchMove: function onTouchMove( e ) {
			var swiper = this;
			var zoom = swiper.zoom;
			var gesture = zoom.gesture,
				image = zoom.image,
				velocity = zoom.velocity;
			if ( ! gesture.$imageEl || gesture.$imageEl.length === 0 ) return;
			swiper.allowClick = false;
			if ( ! image.isTouched || ! gesture.$slideEl ) return;

			if ( ! image.isMoved ) {
				image.width = gesture.$imageEl[ 0 ].offsetWidth;
				image.height = gesture.$imageEl[ 0 ].offsetHeight;
				image.startX = getTranslate( gesture.$imageWrapEl[ 0 ], 'x' ) || 0;
				image.startY = getTranslate( gesture.$imageWrapEl[ 0 ], 'y' ) || 0;
				gesture.slideWidth = gesture.$slideEl[ 0 ].offsetWidth;
				gesture.slideHeight = gesture.$slideEl[ 0 ].offsetHeight;
				gesture.$imageWrapEl.transition( 0 );

				if ( swiper.rtl ) {
					image.startX = -image.startX;
					image.startY = -image.startY;
				}
			} // Define if we need image drag

			var scaledWidth = image.width * zoom.scale;
			var scaledHeight = image.height * zoom.scale;
			if ( scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight ) return;
			image.minX = Math.min( gesture.slideWidth / 2 - scaledWidth / 2, 0 );
			image.maxX = -image.minX;
			image.minY = Math.min( gesture.slideHeight / 2 - scaledHeight / 2, 0 );
			image.maxY = -image.minY;
			image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[ 0 ].pageX : e.pageX;
			image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[ 0 ].pageY : e.pageY;

			if ( ! image.isMoved && ! zoom.isScaling ) {
				if (
					swiper.isHorizontal() &&
					( ( Math.floor( image.minX ) === Math.floor( image.startX ) &&
						image.touchesCurrent.x < image.touchesStart.x ) ||
						( Math.floor( image.maxX ) === Math.floor( image.startX ) &&
							image.touchesCurrent.x > image.touchesStart.x ) )
				) {
					image.isTouched = false;
					return;
				}

				if (
					! swiper.isHorizontal() &&
					( ( Math.floor( image.minY ) === Math.floor( image.startY ) &&
						image.touchesCurrent.y < image.touchesStart.y ) ||
						( Math.floor( image.maxY ) === Math.floor( image.startY ) &&
							image.touchesCurrent.y > image.touchesStart.y ) )
				) {
					image.isTouched = false;
					return;
				}
			}

			if ( e.cancelable ) {
				e.preventDefault();
			}

			e.stopPropagation();
			image.isMoved = true;
			image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;
			image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;

			if ( image.currentX < image.minX ) {
				image.currentX = image.minX + 1 - Math.pow( image.minX - image.currentX + 1, 0.8 );
			}

			if ( image.currentX > image.maxX ) {
				image.currentX = image.maxX - 1 + Math.pow( image.currentX - image.maxX + 1, 0.8 );
			}

			if ( image.currentY < image.minY ) {
				image.currentY = image.minY + 1 - Math.pow( image.minY - image.currentY + 1, 0.8 );
			}

			if ( image.currentY > image.maxY ) {
				image.currentY = image.maxY - 1 + Math.pow( image.currentY - image.maxY + 1, 0.8 );
			} // Velocity

			if ( ! velocity.prevPositionX ) velocity.prevPositionX = image.touchesCurrent.x;
			if ( ! velocity.prevPositionY ) velocity.prevPositionY = image.touchesCurrent.y;
			if ( ! velocity.prevTime ) velocity.prevTime = Date.now();
			velocity.x =
				( image.touchesCurrent.x - velocity.prevPositionX ) /
				( Date.now() - velocity.prevTime ) /
				2;
			velocity.y =
				( image.touchesCurrent.y - velocity.prevPositionY ) /
				( Date.now() - velocity.prevTime ) /
				2;
			if ( Math.abs( image.touchesCurrent.x - velocity.prevPositionX ) < 2 ) velocity.x = 0;
			if ( Math.abs( image.touchesCurrent.y - velocity.prevPositionY ) < 2 ) velocity.y = 0;
			velocity.prevPositionX = image.touchesCurrent.x;
			velocity.prevPositionY = image.touchesCurrent.y;
			velocity.prevTime = Date.now();
			gesture.$imageWrapEl.transform(
				'translate3d(' + image.currentX + 'px, ' + image.currentY + 'px,0)'
			);
		},
		onTouchEnd: function onTouchEnd() {
			var swiper = this;
			var zoom = swiper.zoom;
			var gesture = zoom.gesture,
				image = zoom.image,
				velocity = zoom.velocity;
			if ( ! gesture.$imageEl || gesture.$imageEl.length === 0 ) return;

			if ( ! image.isTouched || ! image.isMoved ) {
				image.isTouched = false;
				image.isMoved = false;
				return;
			}

			image.isTouched = false;
			image.isMoved = false;
			var momentumDurationX = 300;
			var momentumDurationY = 300;
			var momentumDistanceX = velocity.x * momentumDurationX;
			var newPositionX = image.currentX + momentumDistanceX;
			var momentumDistanceY = velocity.y * momentumDurationY;
			var newPositionY = image.currentY + momentumDistanceY; // Fix duration

			if ( velocity.x !== 0 )
				momentumDurationX = Math.abs( ( newPositionX - image.currentX ) / velocity.x );
			if ( velocity.y !== 0 )
				momentumDurationY = Math.abs( ( newPositionY - image.currentY ) / velocity.y );
			var momentumDuration = Math.max( momentumDurationX, momentumDurationY );
			image.currentX = newPositionX;
			image.currentY = newPositionY; // Define if we need image drag

			var scaledWidth = image.width * zoom.scale;
			var scaledHeight = image.height * zoom.scale;
			image.minX = Math.min( gesture.slideWidth / 2 - scaledWidth / 2, 0 );
			image.maxX = -image.minX;
			image.minY = Math.min( gesture.slideHeight / 2 - scaledHeight / 2, 0 );
			image.maxY = -image.minY;
			image.currentX = Math.max( Math.min( image.currentX, image.maxX ), image.minX );
			image.currentY = Math.max( Math.min( image.currentY, image.maxY ), image.minY );
			gesture.$imageWrapEl
				.transition( momentumDuration )
				.transform( 'translate3d(' + image.currentX + 'px, ' + image.currentY + 'px,0)' );
		},
		onTransitionEnd: function onTransitionEnd() {
			var swiper = this;
			var zoom = swiper.zoom;
			var gesture = zoom.gesture;

			if ( gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex ) {
				if ( gesture.$imageEl ) {
					gesture.$imageEl.transform( 'translate3d(0,0,0) scale(1)' );
				}

				if ( gesture.$imageWrapEl ) {
					gesture.$imageWrapEl.transform( 'translate3d(0,0,0)' );
				}

				zoom.scale = 1;
				zoom.currentScale = 1;
				gesture.$slideEl = undefined;
				gesture.$imageEl = undefined;
				gesture.$imageWrapEl = undefined;
			}
		},
		// Toggle Zoom
		toggle: function toggle( e ) {
			var swiper = this;
			var zoom = swiper.zoom;

			if ( zoom.scale && zoom.scale !== 1 ) {
				// Zoom Out
				zoom.out();
			} else {
				// Zoom In
				zoom.in( e );
			}
		},
		in: function _in( e ) {
			var swiper = this;
			var window = getWindow();
			var zoom = swiper.zoom;
			var params = swiper.params.zoom;
			var gesture = zoom.gesture,
				image = zoom.image;

			if ( ! gesture.$slideEl ) {
				if ( swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ) {
					gesture.$slideEl = swiper.$wrapperEl.children( '.' + swiper.params.slideActiveClass );
				} else {
					gesture.$slideEl = swiper.slides.eq( swiper.activeIndex );
				}

				gesture.$imageEl = gesture.$slideEl.find(
					'img, svg, canvas, picture, .swiper-zoom-target'
				);
				gesture.$imageWrapEl = gesture.$imageEl.parent( '.' + params.containerClass );
			}

			if (
				! gesture.$imageEl ||
				gesture.$imageEl.length === 0 ||
				! gesture.$imageWrapEl ||
				gesture.$imageWrapEl.length === 0
			)
				return;
			gesture.$slideEl.addClass( '' + params.zoomedSlideClass );
			var touchX;
			var touchY;
			var offsetX;
			var offsetY;
			var diffX;
			var diffY;
			var translateX;
			var translateY;
			var imageWidth;
			var imageHeight;
			var scaledWidth;
			var scaledHeight;
			var translateMinX;
			var translateMinY;
			var translateMaxX;
			var translateMaxY;
			var slideWidth;
			var slideHeight;

			if ( typeof image.touchesStart.x === 'undefined' && e ) {
				touchX = e.type === 'touchend' ? e.changedTouches[ 0 ].pageX : e.pageX;
				touchY = e.type === 'touchend' ? e.changedTouches[ 0 ].pageY : e.pageY;
			} else {
				touchX = image.touchesStart.x;
				touchY = image.touchesStart.y;
			}

			zoom.scale = gesture.$imageWrapEl.attr( 'data-swiper-zoom' ) || params.maxRatio;
			zoom.currentScale = gesture.$imageWrapEl.attr( 'data-swiper-zoom' ) || params.maxRatio;

			if ( e ) {
				slideWidth = gesture.$slideEl[ 0 ].offsetWidth;
				slideHeight = gesture.$slideEl[ 0 ].offsetHeight;
				offsetX = gesture.$slideEl.offset().left + window.scrollX;
				offsetY = gesture.$slideEl.offset().top + window.scrollY;
				diffX = offsetX + slideWidth / 2 - touchX;
				diffY = offsetY + slideHeight / 2 - touchY;
				imageWidth = gesture.$imageEl[ 0 ].offsetWidth;
				imageHeight = gesture.$imageEl[ 0 ].offsetHeight;
				scaledWidth = imageWidth * zoom.scale;
				scaledHeight = imageHeight * zoom.scale;
				translateMinX = Math.min( slideWidth / 2 - scaledWidth / 2, 0 );
				translateMinY = Math.min( slideHeight / 2 - scaledHeight / 2, 0 );
				translateMaxX = -translateMinX;
				translateMaxY = -translateMinY;
				translateX = diffX * zoom.scale;
				translateY = diffY * zoom.scale;

				if ( translateX < translateMinX ) {
					translateX = translateMinX;
				}

				if ( translateX > translateMaxX ) {
					translateX = translateMaxX;
				}

				if ( translateY < translateMinY ) {
					translateY = translateMinY;
				}

				if ( translateY > translateMaxY ) {
					translateY = translateMaxY;
				}
			} else {
				translateX = 0;
				translateY = 0;
			}

			gesture.$imageWrapEl
				.transition( 300 )
				.transform( 'translate3d(' + translateX + 'px, ' + translateY + 'px,0)' );
			gesture.$imageEl
				.transition( 300 )
				.transform( 'translate3d(0,0,0) scale(' + zoom.scale + ')' );
		},
		out: function out() {
			var swiper = this;
			var zoom = swiper.zoom;
			var params = swiper.params.zoom;
			var gesture = zoom.gesture;

			if ( ! gesture.$slideEl ) {
				if ( swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ) {
					gesture.$slideEl = swiper.$wrapperEl.children( '.' + swiper.params.slideActiveClass );
				} else {
					gesture.$slideEl = swiper.slides.eq( swiper.activeIndex );
				}

				gesture.$imageEl = gesture.$slideEl.find(
					'img, svg, canvas, picture, .swiper-zoom-target'
				);
				gesture.$imageWrapEl = gesture.$imageEl.parent( '.' + params.containerClass );
			}

			if (
				! gesture.$imageEl ||
				gesture.$imageEl.length === 0 ||
				! gesture.$imageWrapEl ||
				gesture.$imageWrapEl.length === 0
			)
				return;
			zoom.scale = 1;
			zoom.currentScale = 1;
			gesture.$imageWrapEl.transition( 300 ).transform( 'translate3d(0,0,0)' );
			gesture.$imageEl.transition( 300 ).transform( 'translate3d(0,0,0) scale(1)' );
			gesture.$slideEl.removeClass( '' + params.zoomedSlideClass );
			gesture.$slideEl = undefined;
		},
		toggleGestures: function toggleGestures( method ) {
			var swiper = this;
			var zoom = swiper.zoom;
			var selector = zoom.slideSelector,
				passive = zoom.passiveListener;
			swiper.$wrapperEl[ method ]( 'gesturestart', selector, zoom.onGestureStart, passive );
			swiper.$wrapperEl[ method ]( 'gesturechange', selector, zoom.onGestureChange, passive );
			swiper.$wrapperEl[ method ]( 'gestureend', selector, zoom.onGestureEnd, passive );
		},
		enableGestures: function enableGestures() {
			if ( this.zoom.gesturesEnabled ) return;
			this.zoom.gesturesEnabled = true;
			this.zoom.toggleGestures( 'on' );
		},
		disableGestures: function disableGestures() {
			if ( ! this.zoom.gesturesEnabled ) return;
			this.zoom.gesturesEnabled = false;
			this.zoom.toggleGestures( 'off' );
		},
		// Attach/Detach Events
		enable: function enable() {
			var swiper = this;
			var support = swiper.support;
			var zoom = swiper.zoom;
			if ( zoom.enabled ) return;
			zoom.enabled = true;
			var passiveListener =
				swiper.touchEvents.start === 'touchstart' &&
				support.passiveListener &&
				swiper.params.passiveListeners
					? {
							passive: true,
							capture: false,
					  }
					: false;
			var activeListenerWithCapture = support.passiveListener
				? {
						passive: false,
						capture: true,
				  }
				: true;
			var slideSelector = '.' + swiper.params.slideClass;
			swiper.zoom.passiveListener = passiveListener;
			swiper.zoom.slideSelector = slideSelector; // Scale image

			if ( support.gestures ) {
				swiper.$wrapperEl.on(
					swiper.touchEvents.start,
					swiper.zoom.enableGestures,
					passiveListener
				);
				swiper.$wrapperEl.on(
					swiper.touchEvents.end,
					swiper.zoom.disableGestures,
					passiveListener
				);
			} else if ( swiper.touchEvents.start === 'touchstart' ) {
				swiper.$wrapperEl.on(
					swiper.touchEvents.start,
					slideSelector,
					zoom.onGestureStart,
					passiveListener
				);
				swiper.$wrapperEl.on(
					swiper.touchEvents.move,
					slideSelector,
					zoom.onGestureChange,
					activeListenerWithCapture
				);
				swiper.$wrapperEl.on(
					swiper.touchEvents.end,
					slideSelector,
					zoom.onGestureEnd,
					passiveListener
				);

				if ( swiper.touchEvents.cancel ) {
					swiper.$wrapperEl.on(
						swiper.touchEvents.cancel,
						slideSelector,
						zoom.onGestureEnd,
						passiveListener
					);
				}
			} // Move image

			swiper.$wrapperEl.on(
				swiper.touchEvents.move,
				'.' + swiper.params.zoom.containerClass,
				zoom.onTouchMove,
				activeListenerWithCapture
			);
		},
		disable: function disable() {
			var swiper = this;
			var zoom = swiper.zoom;
			if ( ! zoom.enabled ) return;
			var support = swiper.support;
			swiper.zoom.enabled = false;
			var passiveListener =
				swiper.touchEvents.start === 'touchstart' &&
				support.passiveListener &&
				swiper.params.passiveListeners
					? {
							passive: true,
							capture: false,
					  }
					: false;
			var activeListenerWithCapture = support.passiveListener
				? {
						passive: false,
						capture: true,
				  }
				: true;
			var slideSelector = '.' + swiper.params.slideClass; // Scale image

			if ( support.gestures ) {
				swiper.$wrapperEl.off(
					swiper.touchEvents.start,
					swiper.zoom.enableGestures,
					passiveListener
				);
				swiper.$wrapperEl.off(
					swiper.touchEvents.end,
					swiper.zoom.disableGestures,
					passiveListener
				);
			} else if ( swiper.touchEvents.start === 'touchstart' ) {
				swiper.$wrapperEl.off(
					swiper.touchEvents.start,
					slideSelector,
					zoom.onGestureStart,
					passiveListener
				);
				swiper.$wrapperEl.off(
					swiper.touchEvents.move,
					slideSelector,
					zoom.onGestureChange,
					activeListenerWithCapture
				);
				swiper.$wrapperEl.off(
					swiper.touchEvents.end,
					slideSelector,
					zoom.onGestureEnd,
					passiveListener
				);

				if ( swiper.touchEvents.cancel ) {
					swiper.$wrapperEl.off(
						swiper.touchEvents.cancel,
						slideSelector,
						zoom.onGestureEnd,
						passiveListener
					);
				}
			} // Move image

			swiper.$wrapperEl.off(
				swiper.touchEvents.move,
				'.' + swiper.params.zoom.containerClass,
				zoom.onTouchMove,
				activeListenerWithCapture
			);
		},
	};
	var Zoom$1 = {
		name: 'zoom',
		params: {
			zoom: {
				enabled: false,
				maxRatio: 3,
				minRatio: 1,
				toggle: true,
				containerClass: 'swiper-zoom-container',
				zoomedSlideClass: 'swiper-slide-zoomed',
			},
		},
		create: function create() {
			var swiper = this;
			bindModuleMethods( swiper, {
				zoom: _extends(
					{
						enabled: false,
						scale: 1,
						currentScale: 1,
						isScaling: false,
						gesture: {
							$slideEl: undefined,
							slideWidth: undefined,
							slideHeight: undefined,
							$imageEl: undefined,
							$imageWrapEl: undefined,
							maxRatio: 3,
						},
						image: {
							isTouched: undefined,
							isMoved: undefined,
							currentX: undefined,
							currentY: undefined,
							minX: undefined,
							minY: undefined,
							maxX: undefined,
							maxY: undefined,
							width: undefined,
							height: undefined,
							startX: undefined,
							startY: undefined,
							touchesStart: {},
							touchesCurrent: {},
						},
						velocity: {
							x: undefined,
							y: undefined,
							prevPositionX: undefined,
							prevPositionY: undefined,
							prevTime: undefined,
						},
					},
					Zoom
				),
			} );
			var scale = 1;
			Object.defineProperty( swiper.zoom, 'scale', {
				get: function get() {
					return scale;
				},
				set: function set( value ) {
					if ( scale !== value ) {
						var imageEl = swiper.zoom.gesture.$imageEl
							? swiper.zoom.gesture.$imageEl[ 0 ]
							: undefined;
						var slideEl = swiper.zoom.gesture.$slideEl
							? swiper.zoom.gesture.$slideEl[ 0 ]
							: undefined;
						swiper.emit( 'zoomChange', value, imageEl, slideEl );
					}

					scale = value;
				},
			} );
		},
		on: {
			init: function init( swiper ) {
				if ( swiper.params.zoom.enabled ) {
					swiper.zoom.enable();
				}
			},
			destroy: function destroy( swiper ) {
				swiper.zoom.disable();
			},
			touchStart: function touchStart( swiper, e ) {
				if ( ! swiper.zoom.enabled ) return;
				swiper.zoom.onTouchStart( e );
			},
			touchEnd: function touchEnd( swiper, e ) {
				if ( ! swiper.zoom.enabled ) return;
				swiper.zoom.onTouchEnd( e );
			},
			doubleTap: function doubleTap( swiper, e ) {
				if (
					! swiper.animating &&
					swiper.params.zoom.enabled &&
					swiper.zoom.enabled &&
					swiper.params.zoom.toggle
				) {
					swiper.zoom.toggle( e );
				}
			},
			transitionEnd: function transitionEnd( swiper ) {
				if ( swiper.zoom.enabled && swiper.params.zoom.enabled ) {
					swiper.zoom.onTransitionEnd();
				}
			},
			slideChange: function slideChange( swiper ) {
				if ( swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode ) {
					swiper.zoom.onTransitionEnd();
				}
			},
		},
	};

	var A11y = {
		getRandomNumber: function getRandomNumber( size ) {
			if ( size === void 0 ) {
				size = 16;
			}

			var randomChar = function randomChar() {
				return Math.round( 16 * Math.random() ).toString( 16 );
			};

			return 'x'.repeat( size ).replace( /x/g, randomChar );
		},
		makeElFocusable: function makeElFocusable( $el ) {
			$el.attr( 'tabIndex', '0' );
			return $el;
		},
		makeElNotFocusable: function makeElNotFocusable( $el ) {
			$el.attr( 'tabIndex', '-1' );
			return $el;
		},
		addElRole: function addElRole( $el, role ) {
			$el.attr( 'role', role );
			return $el;
		},
		addElRoleDescription: function addElRoleDescription( $el, description ) {
			$el.attr( 'aria-roledescription', description );
			return $el;
		},
		addElControls: function addElControls( $el, controls ) {
			$el.attr( 'aria-controls', controls );
			return $el;
		},
		addElLabel: function addElLabel( $el, label ) {
			$el.attr( 'aria-label', label );
			return $el;
		},
		addElId: function addElId( $el, id ) {
			$el.attr( 'id', id );
			return $el;
		},
		addElLive: function addElLive( $el, live ) {
			$el.attr( 'aria-live', live );
			return $el;
		},
		disableEl: function disableEl( $el ) {
			$el.attr( 'aria-disabled', true );
			return $el;
		},
		enableEl: function enableEl( $el ) {
			$el.attr( 'aria-disabled', false );
			return $el;
		},
		onEnterOrSpaceKey: function onEnterOrSpaceKey( e ) {
			if ( e.keyCode !== 13 && e.keyCode !== 32 ) return;
			var swiper = this;
			var params = swiper.params.a11y;
			var $targetEl = $( e.target );

			if (
				swiper.navigation &&
				swiper.navigation.$nextEl &&
				$targetEl.is( swiper.navigation.$nextEl )
			) {
				if ( ! ( swiper.isEnd && ! swiper.params.loop ) ) {
					swiper.slideNext();
				}

				if ( swiper.isEnd ) {
					swiper.a11y.notify( params.lastSlideMessage );
				} else {
					swiper.a11y.notify( params.nextSlideMessage );
				}
			}

			if (
				swiper.navigation &&
				swiper.navigation.$prevEl &&
				$targetEl.is( swiper.navigation.$prevEl )
			) {
				if ( ! ( swiper.isBeginning && ! swiper.params.loop ) ) {
					swiper.slidePrev();
				}

				if ( swiper.isBeginning ) {
					swiper.a11y.notify( params.firstSlideMessage );
				} else {
					swiper.a11y.notify( params.prevSlideMessage );
				}
			}

			if (
				swiper.pagination &&
				$targetEl.is( classesToSelector( swiper.params.pagination.bulletClass ) )
			) {
				$targetEl[ 0 ].click();
			}
		},
		notify: function notify( message ) {
			var swiper = this;
			var notification = swiper.a11y.liveRegion;
			if ( notification.length === 0 ) return;
			notification.html( '' );
			notification.html( message );
		},
		updateNavigation: function updateNavigation() {
			var swiper = this;
			if ( swiper.params.loop || ! swiper.navigation ) return;
			var _swiper$navigation = swiper.navigation,
				$nextEl = _swiper$navigation.$nextEl,
				$prevEl = _swiper$navigation.$prevEl;

			if ( $prevEl && $prevEl.length > 0 ) {
				if ( swiper.isBeginning ) {
					swiper.a11y.disableEl( $prevEl );
					swiper.a11y.makeElNotFocusable( $prevEl );
				} else {
					swiper.a11y.enableEl( $prevEl );
					swiper.a11y.makeElFocusable( $prevEl );
				}
			}

			if ( $nextEl && $nextEl.length > 0 ) {
				if ( swiper.isEnd ) {
					swiper.a11y.disableEl( $nextEl );
					swiper.a11y.makeElNotFocusable( $nextEl );
				} else {
					swiper.a11y.enableEl( $nextEl );
					swiper.a11y.makeElFocusable( $nextEl );
				}
			}
		},
		updatePagination: function updatePagination() {
			var swiper = this;
			var params = swiper.params.a11y;

			if (
				swiper.pagination &&
				swiper.params.pagination.clickable &&
				swiper.pagination.bullets &&
				swiper.pagination.bullets.length
			) {
				swiper.pagination.bullets.each( function ( bulletEl ) {
					var $bulletEl = $( bulletEl );
					swiper.a11y.makeElFocusable( $bulletEl );

					if ( ! swiper.params.pagination.renderBullet ) {
						swiper.a11y.addElRole( $bulletEl, 'button' );
						swiper.a11y.addElLabel(
							$bulletEl,
							params.paginationBulletMessage.replace( /\{\{index\}\}/, $bulletEl.index() + 1 )
						);
					}
				} );
			}
		},
		init: function init() {
			var swiper = this;
			var params = swiper.params.a11y;
			swiper.$el.append( swiper.a11y.liveRegion ); // Container

			var $containerEl = swiper.$el;

			if ( params.containerRoleDescriptionMessage ) {
				swiper.a11y.addElRoleDescription( $containerEl, params.containerRoleDescriptionMessage );
			}

			if ( params.containerMessage ) {
				swiper.a11y.addElLabel( $containerEl, params.containerMessage );
			} // Wrapper

			var $wrapperEl = swiper.$wrapperEl;
			var wrapperId =
				$wrapperEl.attr( 'id' ) || 'swiper-wrapper-' + swiper.a11y.getRandomNumber( 16 );
			var live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';
			swiper.a11y.addElId( $wrapperEl, wrapperId );
			swiper.a11y.addElLive( $wrapperEl, live ); // Slide

			if ( params.itemRoleDescriptionMessage ) {
				swiper.a11y.addElRoleDescription( $( swiper.slides ), params.itemRoleDescriptionMessage );
			}

			swiper.a11y.addElRole( $( swiper.slides ), params.slideRole );
			swiper.slides.each( function ( slideEl ) {
				var $slideEl = $( slideEl );
				var ariaLabelMessage = params.slideLabelMessage
					.replace( /\{\{index\}\}/, $slideEl.index() + 1 )
					.replace( /\{\{slidesLength\}\}/, swiper.slides.length );
				swiper.a11y.addElLabel( $slideEl, ariaLabelMessage );
			} ); // Navigation

			var $nextEl;
			var $prevEl;

			if ( swiper.navigation && swiper.navigation.$nextEl ) {
				$nextEl = swiper.navigation.$nextEl;
			}

			if ( swiper.navigation && swiper.navigation.$prevEl ) {
				$prevEl = swiper.navigation.$prevEl;
			}

			if ( $nextEl && $nextEl.length ) {
				swiper.a11y.makeElFocusable( $nextEl );

				if ( $nextEl[ 0 ].tagName !== 'BUTTON' ) {
					swiper.a11y.addElRole( $nextEl, 'button' );
					$nextEl.on( 'keydown', swiper.a11y.onEnterOrSpaceKey );
				}

				swiper.a11y.addElLabel( $nextEl, params.nextSlideMessage );
				swiper.a11y.addElControls( $nextEl, wrapperId );
			}

			if ( $prevEl && $prevEl.length ) {
				swiper.a11y.makeElFocusable( $prevEl );

				if ( $prevEl[ 0 ].tagName !== 'BUTTON' ) {
					swiper.a11y.addElRole( $prevEl, 'button' );
					$prevEl.on( 'keydown', swiper.a11y.onEnterOrSpaceKey );
				}

				swiper.a11y.addElLabel( $prevEl, params.prevSlideMessage );
				swiper.a11y.addElControls( $prevEl, wrapperId );
			} // Pagination

			if (
				swiper.pagination &&
				swiper.params.pagination.clickable &&
				swiper.pagination.bullets &&
				swiper.pagination.bullets.length
			) {
				swiper.pagination.$el.on(
					'keydown',
					classesToSelector( swiper.params.pagination.bulletClass ),
					swiper.a11y.onEnterOrSpaceKey
				);
			}
		},
		destroy: function destroy() {
			var swiper = this;
			if ( swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0 )
				swiper.a11y.liveRegion.remove();
			var $nextEl;
			var $prevEl;

			if ( swiper.navigation && swiper.navigation.$nextEl ) {
				$nextEl = swiper.navigation.$nextEl;
			}

			if ( swiper.navigation && swiper.navigation.$prevEl ) {
				$prevEl = swiper.navigation.$prevEl;
			}

			if ( $nextEl ) {
				$nextEl.off( 'keydown', swiper.a11y.onEnterOrSpaceKey );
			}

			if ( $prevEl ) {
				$prevEl.off( 'keydown', swiper.a11y.onEnterOrSpaceKey );
			} // Pagination

			if (
				swiper.pagination &&
				swiper.params.pagination.clickable &&
				swiper.pagination.bullets &&
				swiper.pagination.bullets.length
			) {
				swiper.pagination.$el.off(
					'keydown',
					classesToSelector( swiper.params.pagination.bulletClass ),
					swiper.a11y.onEnterOrSpaceKey
				);
			}
		},
	};
	var A11y$1 = {
		name: 'a11y',
		params: {
			a11y: {
				enabled: true,
				notificationClass: 'swiper-notification',
				prevSlideMessage: 'Previous slide',
				nextSlideMessage: 'Next slide',
				firstSlideMessage: 'This is the first slide',
				lastSlideMessage: 'This is the last slide',
				paginationBulletMessage: 'Go to slide {{index}}',
				slideLabelMessage: '{{index}} / {{slidesLength}}',
				containerMessage: null,
				containerRoleDescriptionMessage: null,
				itemRoleDescriptionMessage: null,
				slideRole: 'group',
			},
		},
		create: function create() {
			var swiper = this;
			bindModuleMethods( swiper, {
				a11y: _extends( {}, A11y, {
					liveRegion: $(
						'<span class="' +
							swiper.params.a11y.notificationClass +
							'" aria-live="assertive" aria-atomic="true"></span>'
					),
				} ),
			} );
		},
		on: {
			afterInit: function afterInit( swiper ) {
				if ( ! swiper.params.a11y.enabled ) return;
				swiper.a11y.init();
				swiper.a11y.updateNavigation();
			},
			toEdge: function toEdge( swiper ) {
				if ( ! swiper.params.a11y.enabled ) return;
				swiper.a11y.updateNavigation();
			},
			fromEdge: function fromEdge( swiper ) {
				if ( ! swiper.params.a11y.enabled ) return;
				swiper.a11y.updateNavigation();
			},
			paginationUpdate: function paginationUpdate( swiper ) {
				if ( ! swiper.params.a11y.enabled ) return;
				swiper.a11y.updatePagination();
			},
			destroy: function destroy( swiper ) {
				if ( ! swiper.params.a11y.enabled ) return;
				swiper.a11y.destroy();
			},
		},
	};

	// Swiper Class
	var components = [ Navigation$1, Pagination$1, Zoom$1, A11y$1 ];
	Swiper.use( components );

	return Swiper;
} );
//# sourceMappingURL=swiper-bundle.js.map

Youez - 2016 - github.com/yon3zu
LinuXploit