PageSourceSearch

https://www.glasiaous.com/wp-content/themes/glasiaous-co-html/dist/assets/js/app.js?ver=1791120252

js glasiaous.com collected 2026-10-04 13:24:31 UTC 596,913 bytes, 20,542 lines download raw bytes

vendor: 3,619 bytes, lines 1-88
1/******/ (function(modules) { // webpackBootstrap
2/******/ 	// The module cache
3/******/ 	var installedModules = {};
4/******/
5/******/ 	// The require function
6/******/ 	function __webpack_require__(moduleId) {
7/******/
8/******/ 		// Check if module is in cache
9/******/ 		if(installedModules[moduleId]) {
10/******/ 			return installedModules[moduleId].exports;
11/******/ 		}
12/******/ 		// Create a new module (and put it into the cache)
13/******/ 		var module = installedModules[moduleId] = {
14/******/ 			i: moduleId,
15/******/ 			l: false,
16/******/ 			exports: {}
17/******/ 		};
18/******/
19/******/ 		// Execute the module function
20/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
21/******/
22/******/ 		// Flag the module as loaded
23/******/ 		module.l = true;
24/******/
25/******/ 		// Return the exports of the module
26/******/ 		return module.exports;
27/******/ 	}
28/******/
29/******/
30/******/ 	// expose the modules object (__webpack_modules__)
31/******/ 	__webpack_require__.m = modules;
32/******/
33/******/ 	// expose the module cache
34/******/ 	__webpack_require__.c = installedModules;
35/******/
36/******/ 	// define getter function for harmony exports
37/******/ 	__webpack_require__.d = function(exports, name, getter) {
38/******/ 		if(!__webpack_require__.o(exports, name)) {
39/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
40/******/ 		}
41/******/ 	};
42/******/
43/******/ 	// define __esModule on exports
44/******/ 	__webpack_require__.r = function(exports) {
45/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
46/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
47/******/ 		}
48/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
49/******/ 	};
50/******/
51/******/ 	// create a fake namespace object
52/******/ 	// mode & 1: value is a module id, require it
53/******/ 	// mode & 2: merge all properties of value into the ns
54/******/ 	// mode & 4: return value when already ns object
55/******/ 	// mode & 8|1: behave like require
56/******/ 	__webpack_require__.t = function(value, mode) {
57/******/ 		if(mode & 1) value = __webpack_require__(value);
58/******/ 		if(mode & 8) return value;
59/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
60/******/ 		var ns = Object.create(null);
61/******/ 		__webpack_require__.r(ns);
62/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
63/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
64/******/ 		return ns;
65/******/ 	};
66/******/
67/******/ 	// getDefaultExport function for compatibility with non-harmony modules
68/******/ 	__webpack_require__.n = function(module) {
69/******/ 		var getter = module && module.__esModule ?
70/******/ 			function getDefault() { return module['default']; } :
71/******/ 			function getModuleExports() { return module; };
72/******/ 		__webpack_require__.d(getter, 'a', getter);
73/******/ 		return getter;
74/******/ 	};
75/******/
76/******/ 	// Object.prototype.hasOwnProperty.call
77/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
78/******/
79/******/ 	// __webpack_public_path__
80/******/ 	__webpack_require__.p = "../../";
81/******/
82/******/
83/******/ 	// Load entry module and return exports
84/******/ 	return __webpack_require__(__webpack_require__.s = "./assets/js/app.js");
85/******/ })
86/************************************************************************/
87/******/ ({
88
vendor: 830 bytes, lines 89-115
89/***/ "../node_modules/call-bind/callBound.js":
90/*!**********************************************!*\
91  !*** ../node_modules/call-bind/callBound.js ***!
92  \**********************************************/
93/*! no static exports found */
94/***/ (function(module, exports, __webpack_require__) {
95
96"use strict";
97
98
99var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "../node_modules/get-intrinsic/index.js");
100
101var callBind = __webpack_require__(/*! ./ */ "../node_modules/call-bind/index.js");
102
103var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));
104
105module.exports = function callBoundIntrinsic(name, allowMissing) {
106	var intrinsic = GetIntrinsic(name, !!allowMissing);
107	if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {
108		return callBind(intrinsic);
109	}
110	return intrinsic;
111};
112
113
114/***/ }),
115
vendor: 1,622 bytes, lines 116-162
116/***/ "../node_modules/call-bind/index.js":
117/*!******************************************!*\
118  !*** ../node_modules/call-bind/index.js ***!
119  \******************************************/
120/*! no static exports found */
121/***/ (function(module, exports, __webpack_require__) {
122
123"use strict";
124
125
126var bind = __webpack_require__(/*! function-bind */ "../node_modules/function-bind/index.js");
127var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "../node_modules/get-intrinsic/index.js");
128var setFunctionLength = __webpack_require__(/*! set-function-length */ "../node_modules/set-function-length/index.js");
129
130var $TypeError = __webpack_require__(/*! es-errors/type */ "../node_modules/es-errors/type.js");
131var $apply = GetIntrinsic('%Function.prototype.apply%');
132var $call = GetIntrinsic('%Function.prototype.call%');
133var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);
134
135var $defineProperty = __webpack_require__(/*! es-define-property */ "../node_modules/es-define-property/index.js");
136var $max = GetIntrinsic('%Math.max%');
137
138module.exports = function callBind(originalFunction) {
139	if (typeof originalFunction !== 'function') {
140		throw new $TypeError('a function is required');
141	}
142	var func = $reflectApply(bind, $call, arguments);
143	return setFunctionLength(
144		func,
145		1 + $max(0, originalFunction.length - (arguments.length - 1)),
146		true
147	);
148};
149
150var applyBind = function applyBind() {
151	return $reflectApply(bind, $apply, arguments);
152};
153
154if ($defineProperty) {
155	$defineProperty(module.exports, 'apply', { value: applyBind });
156} else {
157	module.exports.apply = applyBind;
158}
159
160
161/***/ }),
162
vendor: 2,889 bytes, lines 163-230
163/***/ "../node_modules/define-data-property/index.js":
164/*!*****************************************************!*\
165  !*** ../node_modules/define-data-property/index.js ***!
166  \*****************************************************/
167/*! no static exports found */
168/***/ (function(module, exports, __webpack_require__) {
169
170"use strict";
171
172
173var $defineProperty = __webpack_require__(/*! es-define-property */ "../node_modules/es-define-property/index.js");
174
175var $SyntaxError = __webpack_require__(/*! es-errors/syntax */ "../node_modules/es-errors/syntax.js");
176var $TypeError = __webpack_require__(/*! es-errors/type */ "../node_modules/es-errors/type.js");
177
178var gopd = __webpack_require__(/*! gopd */ "../node_modules/gopd/index.js");
179
180/** @type {import('.')} */
181module.exports = function defineDataProperty(
182	obj,
183	property,
184	value
185) {
186	if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {
187		throw new $TypeError('`obj` must be an object or a function`');
188	}
189	if (typeof property !== 'string' && typeof property !== 'symbol') {
190		throw new $TypeError('`property` must be a string or a symbol`');
191	}
192	if (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) {
193		throw new $TypeError('`nonEnumerable`, if provided, must be a boolean or null');
194	}
195	if (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) {
196		throw new $TypeError('`nonWritable`, if provided, must be a boolean or null');
197	}
198	if (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) {
199		throw new $TypeError('`nonConfigurable`, if provided, must be a boolean or null');
200	}
201	if (arguments.length > 6 && typeof arguments[6] !== 'boolean') {
202		throw new $TypeError('`loose`, if provided, must be a boolean');
203	}
204
205	var nonEnumerable = arguments.length > 3 ? arguments[3] : null;
206	var nonWritable = arguments.length > 4 ? arguments[4] : null;
207	var nonConfigurable = arguments.length > 5 ? arguments[5] : null;
208	var loose = arguments.length > 6 ? arguments[6] : false;
209
210	/* @type {false | TypedPropertyDescriptor<unknown>} */
211	var desc = !!gopd && gopd(obj, property);
212
213	if ($defineProperty) {
214		$defineProperty(obj, property, {
215			configurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable,
216			enumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable,
217			value: value,
218			writable: nonWritable === null && desc ? desc.writable : !nonWritable
219		});
220	} else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) {
221		// must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable
222		obj[property] = value; // eslint-disable-line no-param-reassign
223	} else {
224		throw new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.');
225	}
226};
227
228
229/***/ }),
230
vendor: 741 bytes, lines 231-258
231/***/ "../node_modules/es-define-property/index.js":
232/*!***************************************************!*\
233  !*** ../node_modules/es-define-property/index.js ***!
234  \***************************************************/
235/*! no static exports found */
236/***/ (function(module, exports, __webpack_require__) {
237
238"use strict";
239
240
241var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "../node_modules/get-intrinsic/index.js");
242
243/** @type {import('.')} */
244var $defineProperty = GetIntrinsic('%Object.defineProperty%', true) || false;
245if ($defineProperty) {
246	try {
247		$defineProperty({}, 'a', { value: 1 });
248	} catch (e) {
249		// IE 8 has a broken defineProperty
250		$defineProperty = false;
251	}
252}
253
254module.exports = $defineProperty;
255
256
257/***/ }),
258
vendor: 360 bytes, lines 259-274
259/***/ "../node_modules/es-errors/eval.js":
260/*!*****************************************!*\
261  !*** ../node_modules/es-errors/eval.js ***!
262  \*****************************************/
263/*! no static exports found */
264/***/ (function(module, exports, __webpack_require__) {
265
266"use strict";
267
268
269/** @type {import('./eval')} */
270module.exports = EvalError;
271
272
273/***/ }),
274
vendor: 355 bytes, lines 275-290
275/***/ "../node_modules/es-errors/index.js":
276/*!******************************************!*\
277  !*** ../node_modules/es-errors/index.js ***!
278  \******************************************/
279/*! no static exports found */
280/***/ (function(module, exports, __webpack_require__) {
281
282"use strict";
283
284
285/** @type {import('.')} */
286module.exports = Error;
287
288
289/***/ }),
290
vendor: 366 bytes, lines 291-306
291/***/ "../node_modules/es-errors/range.js":
292/*!******************************************!*\
293  !*** ../node_modules/es-errors/range.js ***!
294  \******************************************/
295/*! no static exports found */
296/***/ (function(module, exports, __webpack_require__) {
297
298"use strict";
299
300
301/** @type {import('./range')} */
302module.exports = RangeError;
303
304
305/***/ }),
306
vendor: 360 bytes, lines 307-322
307/***/ "../node_modules/es-errors/ref.js":
308/*!****************************************!*\
309  !*** ../node_modules/es-errors/ref.js ***!
310  \****************************************/
311/*! no static exports found */
312/***/ (function(module, exports, __webpack_require__) {
313
314"use strict";
315
316
317/** @type {import('./ref')} */
318module.exports = ReferenceError;
319
320
321/***/ }),
322
vendor: 372 bytes, lines 323-338
323/***/ "../node_modules/es-errors/syntax.js":
324/*!*******************************************!*\
325  !*** ../node_modules/es-errors/syntax.js ***!
326  \*******************************************/
327/*! no static exports found */
328/***/ (function(module, exports, __webpack_require__) {
329
330"use strict";
331
332
333/** @type {import('./syntax')} */
334module.exports = SyntaxError;
335
336
337/***/ }),
338
vendor: 360 bytes, lines 339-354
339/***/ "../node_modules/es-errors/type.js":
340/*!*****************************************!*\
341  !*** ../node_modules/es-errors/type.js ***!
342  \*****************************************/
343/*! no static exports found */
344/***/ (function(module, exports, __webpack_require__) {
345
346"use strict";
347
348
349/** @type {import('./type')} */
350module.exports = TypeError;
351
352
353/***/ }),
354
vendor: 354 bytes, lines 355-370
355/***/ "../node_modules/es-errors/uri.js":
356/*!****************************************!*\
357  !*** ../node_modules/es-errors/uri.js ***!
358  \****************************************/
359/*! no static exports found */
360/***/ (function(module, exports, __webpack_require__) {
361
362"use strict";
363
364
365/** @type {import('./uri')} */
366module.exports = URIError;
367
368
369/***/ }),
370
vendor: 3,202 bytes, lines 371-491
371/***/ "../node_modules/ev-emitter/ev-emitter.js":
372/*!************************************************!*\
373  !*** ../node_modules/ev-emitter/ev-emitter.js ***!
374  \************************************************/
375/*! no static exports found */
376/***/ (function(module, exports, __webpack_require__) {
377
378var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/**
379 * EvEmitter v1.1.0
380 * Lil' event emitter
381 * MIT License
382 */
383
384/* jshint unused: true, undef: true, strict: true */
385
386( function( global, factory ) {
387  // universal module definition
388  /* jshint strict: false */ /* globals define, module, window */
389  if ( true ) {
390    // AMD - RequireJS
391    !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
392				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
393				(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :
394				__WEBPACK_AMD_DEFINE_FACTORY__),
395				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
396  } else {}
397
398}( typeof window != 'undefined' ? window : this, function() {
399
400"use strict";
401
402function EvEmitter() {}
403
404var proto = EvEmitter.prototype;
405
406proto.on = function( eventName, listener ) {
407  if ( !eventName || !listener ) {
408    return;
409  }
410  // set events hash
411  var events = this._events = this._events || {};
412  // set listeners array
413  var listeners = events[ eventName ] = events[ eventName ] || [];
414  // only add once
415  if ( listeners.indexOf( listener ) == -1 ) {
416    listeners.push( listener );
417  }
418
419  return this;
420};
421
422proto.once = function( eventName, listener ) {
423  if ( !eventName || !listener ) {
424    return;
425  }
426  // add event
427  this.on( eventName, listener );
428  // set once flag
429  // set onceEvents hash
430  var onceEvents = this._onceEvents = this._onceEvents || {};
431  // set onceListeners object
432  var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};
433  // set flag
434  onceListeners[ listener ] = true;
435
436  return this;
437};
438
439proto.off = function( eventName, listener ) {
440  var listeners = this._events && this._events[ eventName ];
441  if ( !listeners || !listeners.length ) {
442    return;
443  }
444  var index = listeners.indexOf( listener );
445  if ( index != -1 ) {
446    listeners.splice( index, 1 );
447  }
448
449  return this;
450};
451
452proto.emitEvent = function( eventName, args ) {
453  var listeners = this._events && this._events[ eventName ];
454  if ( !listeners || !listeners.length ) {
455    return;
456  }
457  // copy over to avoid interference if .off() in listener
458  listeners = listeners.slice(0);
459  args = args || [];
460  // once stuff
461  var onceListeners = this._onceEvents && this._onceEvents[ eventName ];
462
463  for ( var i=0; i < listeners.length; i++ ) {
464    var listener = listeners[i]
465    var isOnce = onceListeners && onceListeners[ listener ];
466    if ( isOnce ) {
467      // remove listener
468      // remove before trigger to prevent recursion
469      this.off( eventName, listener );
470      // unset once flag
471      delete onceListeners[ listener ];
472    }
473    // trigger listener
474    listener.apply( this, args );
475  }
476
477  return this;
478};
479
480proto.allOff = function() {
481  delete this._events;
482  delete this._onceEvents;
483};
484
485return EvEmitter;
486
487}));
488
489
490/***/ }),
491
vendor: 395 bytes, lines 492-502
492/***/ "../node_modules/font-awesome/scss/font-awesome.scss":
493/*!***********************************************************!*\
494  !*** ../node_modules/font-awesome/scss/font-awesome.scss ***!
495  \***********************************************************/
496/*! no static exports found */
497/***/ (function(module, exports, __webpack_require__) {
498
499// extracted by mini-css-extract-plugin
500
501/***/ }),
502
vendor: 2,384 bytes, lines 503-598
503/***/ "../node_modules/function-bind/implementation.js":
504/*!*******************************************************!*\
505  !*** ../node_modules/function-bind/implementation.js ***!
506  \*******************************************************/
507/*! no static exports found */
508/***/ (function(module, exports, __webpack_require__) {
509
510"use strict";
511
512
513/* eslint no-invalid-this: 1 */
514
515var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';
516var toStr = Object.prototype.toString;
517var max = Math.max;
518var funcType = '[object Function]';
519
520var concatty = function concatty(a, b) {
521    var arr = [];
522
523    for (var i = 0; i < a.length; i += 1) {
524        arr[i] = a[i];
525    }
526    for (var j = 0; j < b.length; j += 1) {
527        arr[j + a.length] = b[j];
528    }
529
530    return arr;
531};
532
533var slicy = function slicy(arrLike, offset) {
534    var arr = [];
535    for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {
536        arr[j] = arrLike[i];
537    }
538    return arr;
539};
540
541var joiny = function (arr, joiner) {
542    var str = '';
543    for (var i = 0; i < arr.length; i += 1) {
544        str += arr[i];
545        if (i + 1 < arr.length) {
546            str += joiner;
547        }
548    }
549    return str;
550};
551
552module.exports = function bind(that) {
553    var target = this;
554    if (typeof target !== 'function' || toStr.apply(target) !== funcType) {
555        throw new TypeError(ERROR_MESSAGE + target);
556    }
557    var args = slicy(arguments, 1);
558
559    var bound;
560    var binder = function () {
561        if (this instanceof bound) {
562            var result = target.apply(
563                this,
564                concatty(args, arguments)
565            );
566            if (Object(result) === result) {
567                return result;
568            }
569            return this;
570        }
571        return target.apply(
572            that,
573            concatty(args, arguments)
574        );
575
576    };
577
578    var boundLength = max(0, target.length - args.length);
579    var boundArgs = [];
580    for (var i = 0; i < boundLength; i++) {
581        boundArgs[i] = '$' + i;
582    }
583
584    bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);
585
586    if (target.prototype) {
587        var Empty = function Empty() {};
588        Empty.prototype = target.prototype;
589        bound.prototype = new Empty();
590        Empty.prototype = null;
591    }
592
593    return bound;
594};
595
596
597/***/ }),
598
vendor: 498 bytes, lines 599-615
599/***/ "../node_modules/function-bind/index.js":
600/*!**********************************************!*\
601  !*** ../node_modules/function-bind/index.js ***!
602  \**********************************************/
603/*! no static exports found */
604/***/ (function(module, exports, __webpack_require__) {
605
606"use strict";
607
608
609var implementation = __webpack_require__(/*! ./implementation */ "../node_modules/function-bind/implementation.js");
610
611module.exports = Function.prototype.bind || implementation;
612
613
614/***/ }),
615
vendor: 14,512 bytes, lines 616-986
616/***/ "../node_modules/get-intrinsic/index.js":
617/*!**********************************************!*\
618  !*** ../node_modules/get-intrinsic/index.js ***!
619  \**********************************************/
620/*! no static exports found */
621/***/ (function(module, exports, __webpack_require__) {
622
623"use strict";
624
625
626var undefined;
627
628var $Error = __webpack_require__(/*! es-errors */ "../node_modules/es-errors/index.js");
629var $EvalError = __webpack_require__(/*! es-errors/eval */ "../node_modules/es-errors/eval.js");
630var $RangeError = __webpack_require__(/*! es-errors/range */ "../node_modules/es-errors/range.js");
631var $ReferenceError = __webpack_require__(/*! es-errors/ref */ "../node_modules/es-errors/ref.js");
632var $SyntaxError = __webpack_require__(/*! es-errors/syntax */ "../node_modules/es-errors/syntax.js");
633var $TypeError = __webpack_require__(/*! es-errors/type */ "../node_modules/es-errors/type.js");
634var $URIError = __webpack_require__(/*! es-errors/uri */ "../node_modules/es-errors/uri.js");
635
636var $Function = Function;
637
638// eslint-disable-next-line consistent-return
639var getEvalledConstructor = function (expressionSyntax) {
640	try {
641		return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')();
642	} catch (e) {}
643};
644
645var $gOPD = Object.getOwnPropertyDescriptor;
646if ($gOPD) {
647	try {
648		$gOPD({}, '');
649	} catch (e) {
650		$gOPD = null; // this is IE 8, which has a broken gOPD
651	}
652}
653
654var throwTypeError = function () {
655	throw new $TypeError();
656};
657var ThrowTypeError = $gOPD
658	? (function () {
659		try {
660			// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties
661			arguments.callee; // IE 8 does not throw here
662			return throwTypeError;
663		} catch (calleeThrows) {
664			try {
665				// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')
666				return $gOPD(arguments, 'callee').get;
667			} catch (gOPDthrows) {
668				return throwTypeError;
669			}
670		}
671	}())
672	: throwTypeError;
673
674var hasSymbols = __webpack_require__(/*! has-symbols */ "../node_modules/has-symbols/index.js")();
675var hasProto = __webpack_require__(/*! has-proto */ "../node_modules/has-proto/index.js")();
676
677var getProto = Object.getPrototypeOf || (
678	hasProto
679		? function (x) { return x.__proto__; } // eslint-disable-line no-proto
680		: null
681);
682
683var needsEval = {};
684
685var TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);
686
687var INTRINSICS = {
688	__proto__: null,
689	'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,
690	'%Array%': Array,
691	'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,
692	'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,
693	'%AsyncFromSyncIteratorPrototype%': undefined,
694	'%AsyncFunction%': needsEval,
695	'%AsyncGenerator%': needsEval,
696	'%AsyncGeneratorFunction%': needsEval,
697	'%AsyncIteratorPrototype%': needsEval,
698	'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,
699	'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,
700	'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,
701	'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,
702	'%Boolean%': Boolean,
703	'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,
704	'%Date%': Date,
705	'%decodeURI%': decodeURI,
706	'%decodeURIComponent%': decodeURIComponent,
707	'%encodeURI%': encodeURI,
708	'%encodeURIComponent%': encodeURIComponent,
709	'%Error%': $Error,
710	'%eval%': eval, // eslint-disable-line no-eval
711	'%EvalError%': $EvalError,
712	'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,
713	'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,
714	'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,
715	'%Function%': $Function,
716	'%GeneratorFunction%': needsEval,
717	'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,
718	'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,
719	'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,
720	'%isFinite%': isFinite,
721	'%isNaN%': isNaN,
722	'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,
723	'%JSON%': typeof JSON === 'object' ? JSON : undefined,
724	'%Map%': typeof Map === 'undefined' ? undefined : Map,
725	'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),
726	'%Math%': Math,
727	'%Number%': Number,
728	'%Object%': Object,
729	'%parseFloat%': parseFloat,
730	'%parseInt%': parseInt,
731	'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,
732	'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,
733	'%RangeError%': $RangeError,
734	'%ReferenceError%': $ReferenceError,
735	'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,
736	'%RegExp%': RegExp,
737	'%Set%': typeof Set === 'undefined' ? undefined : Set,
738	'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),
739	'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,
740	'%String%': String,
741	'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,
742	'%Symbol%': hasSymbols ? Symbol : undefined,
743	'%SyntaxError%': $SyntaxError,
744	'%ThrowTypeError%': ThrowTypeError,
745	'%TypedArray%': TypedArray,
746	'%TypeError%': $TypeError,
747	'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,
748	'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,
749	'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,
750	'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,
751	'%URIError%': $URIError,
752	'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,
753	'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,
754	'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet
755};
756
757if (getProto) {
758	try {
759		null.error; // eslint-disable-line no-unused-expressions
760	} catch (e) {
761		// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229
762		var errorProto = getProto(getProto(e));
763		INTRINSICS['%Error.prototype%'] = errorProto;
764	}
765}
766
767var doEval = function doEval(name) {
768	var value;
769	if (name === '%AsyncFunction%') {
770		value = getEvalledConstructor('async function () {}');
771	} else if (name === '%GeneratorFunction%') {
772		value = getEvalledConstructor('function* () {}');
773	} else if (name === '%AsyncGeneratorFunction%') {
774		value = getEvalledConstructor('async function* () {}');
775	} else if (name === '%AsyncGenerator%') {
776		var fn = doEval('%AsyncGeneratorFunction%');
777		if (fn) {
778			value = fn.prototype;
779		}
780	} else if (name === '%AsyncIteratorPrototype%') {
781		var gen = doEval('%AsyncGenerator%');
782		if (gen && getProto) {
783			value = getProto(gen.prototype);
784		}
785	}
786
787	INTRINSICS[name] = value;
788
789	return value;
790};
791
792var LEGACY_ALIASES = {
793	__proto__: null,
794	'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],
795	'%ArrayPrototype%': ['Array', 'prototype'],
796	'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],
797	'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],
798	'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],
799	'%ArrayProto_values%': ['Array', 'prototype', 'values'],
800	'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],
801	'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],
802	'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],
803	'%BooleanPrototype%': ['Boolean', 'prototype'],
804	'%DataViewPrototype%': ['DataView', 'prototype'],
805	'%DatePrototype%': ['Date', 'prototype'],
806	'%ErrorPrototype%': ['Error', 'prototype'],
807	'%EvalErrorPrototype%': ['EvalError', 'prototype'],
808	'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],
809	'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],
810	'%FunctionPrototype%': ['Function', 'prototype'],
811	'%Generator%': ['GeneratorFunction', 'prototype'],
812	'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],
813	'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],
814	'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],
815	'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],
816	'%JSONParse%': ['JSON', 'parse'],
817	'%JSONStringify%': ['JSON', 'stringify'],
818	'%MapPrototype%': ['Map', 'prototype'],
819	'%NumberPrototype%': ['Number', 'prototype'],
820	'%ObjectPrototype%': ['Object', 'prototype'],
821	'%ObjProto_toString%': ['Object', 'prototype', 'toString'],
822	'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],
823	'%PromisePrototype%': ['Promise', 'prototype'],
824	'%PromiseProto_then%': ['Promise', 'prototype', 'then'],
825	'%Promise_all%': ['Promise', 'all'],
826	'%Promise_reject%': ['Promise', 'reject'],
827	'%Promise_resolve%': ['Promise', 'resolve'],
828	'%RangeErrorPrototype%': ['RangeError', 'prototype'],
829	'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],
830	'%RegExpPrototype%': ['RegExp', 'prototype'],
831	'%SetPrototype%': ['Set', 'prototype'],
832	'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],
833	'%StringPrototype%': ['String', 'prototype'],
834	'%SymbolPrototype%': ['Symbol', 'prototype'],
835	'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],
836	'%TypedArrayPrototype%': ['TypedArray', 'prototype'],
837	'%TypeErrorPrototype%': ['TypeError', 'prototype'],
838	'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],
839	'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],
840	'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],
841	'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],
842	'%URIErrorPrototype%': ['URIError', 'prototype'],
843	'%WeakMapPrototype%': ['WeakMap', 'prototype'],
844	'%WeakSetPrototype%': ['WeakSet', 'prototype']
845};
846
847var bind = __webpack_require__(/*! function-bind */ "../node_modules/function-bind/index.js");
848var hasOwn = __webpack_require__(/*! hasown */ "../node_modules/hasown/index.js");
849var $concat = bind.call(Function.call, Array.prototype.concat);
850var $spliceApply = bind.call(Function.apply, Array.prototype.splice);
851var $replace = bind.call(Function.call, String.prototype.replace);
852var $strSlice = bind.call(Function.call, String.prototype.slice);
853var $exec = bind.call(Function.call, RegExp.prototype.exec);
854
855/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */
856var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g;
857var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */
858var stringToPath = function stringToPath(string) {
859	var first = $strSlice(string, 0, 1);
860	var last = $strSlice(string, -1);
861	if (first === '%' && last !== '%') {
862		throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`');
863	} else if (last === '%' && first !== '%') {
864		throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`');
865	}
866	var result = [];
867	$replace(string, rePropName, function (match, number, quote, subString) {
868		result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;
869	});
870	return result;
871};
872/* end adaptation */
873
874var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {
875	var intrinsicName = name;
876	var alias;
877	if (hasOwn(LEGACY_ALIASES, intrinsicName)) {
878		alias = LEGACY_ALIASES[intrinsicName];
879		intrinsicName = '%' + alias[0] + '%';
880	}
881
882	if (hasOwn(INTRINSICS, intrinsicName)) {
883		var value = INTRINSICS[intrinsicName];
884		if (value === needsEval) {
885			value = doEval(intrinsicName);
886		}
887		if (typeof value === 'undefined' && !allowMissing) {
888			throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');
889		}
890
891		return {
892			alias: alias,
893			name: intrinsicName,
894			value: value
895		};
896	}
897
898	throw new $SyntaxError('intrinsic ' + name + ' does not exist!');
899};
900
901module.exports = function GetIntrinsic(name, allowMissing) {
902	if (typeof name !== 'string' || name.length === 0) {
903		throw new $TypeError('intrinsic name must be a non-empty string');
904	}
905	if (arguments.length > 1 && typeof allowMissing !== 'boolean') {
906		throw new $TypeError('"allowMissing" argument must be a boolean');
907	}
908
909	if ($exec(/^%?[^%]*%?$/, name) === null) {
910		throw new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');
911	}
912	var parts = stringToPath(name);
913	var intrinsicBaseName = parts.length > 0 ? parts[0] : '';
914
915	var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);
916	var intrinsicRealName = intrinsic.name;
917	var value = intrinsic.value;
918	var skipFurtherCaching = false;
919
920	var alias = intrinsic.alias;
921	if (alias) {
922		intrinsicBaseName = alias[0];
923		$spliceApply(parts, $concat([0, 1], alias));
924	}
925
926	for (var i = 1, isOwn = true; i < parts.length; i += 1) {
927		var part = parts[i];
928		var first = $strSlice(part, 0, 1);
929		var last = $strSlice(part, -1);
930		if (
931			(
932				(first === '"' || first === "'" || first === '`')
933				|| (last === '"' || last === "'" || last === '`')
934			)
935			&& first !== last
936		) {
937			throw new $SyntaxError('property names with quotes must have matching quotes');
938		}
939		if (part === 'constructor' || !isOwn) {
940			skipFurtherCaching = true;
941		}
942
943		intrinsicBaseName += '.' + part;
944		intrinsicRealName = '%' + intrinsicBaseName + '%';
945
946		if (hasOwn(INTRINSICS, intrinsicRealName)) {
947			value = INTRINSICS[intrinsicRealName];
948		} else if (value != null) {
949			if (!(part in value)) {
950				if (!allowMissing) {
951					throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');
952				}
953				return void undefined;
954			}
955			if ($gOPD && (i + 1) >= parts.length) {
956				var desc = $gOPD(value, part);
957				isOwn = !!desc;
958
959				// By convention, when a data property is converted to an accessor
960				// property to emulate a data property that does not suffer from
961				// the override mistake, that accessor's getter is marked with
962				// an `originalValue` property. Here, when we detect this, we
963				// uphold the illusion by pretending to see that original data
964				// property, i.e., returning the value rather than the getter
965				// itself.
966				if (isOwn && 'get' in desc && !('originalValue' in desc.get)) {
967					value = desc.get;
968				} else {
969					value = value[part];
970				}
971			} else {
972				isOwn = hasOwn(value, part);
973				value = value[part];
974			}
975
976			if (isOwn && !skipFurtherCaching) {
977				INTRINSICS[intrinsicRealName] = value;
978			}
979		}
980	}
981	return value;
982};
983
984
985/***/ }),
986
vendor: 590 bytes, lines 987-1014
987/***/ "../node_modules/gopd/index.js":
988/*!*************************************!*\
989  !*** ../node_modules/gopd/index.js ***!
990  \*************************************/
991/*! no static exports found */
992/***/ (function(module, exports, __webpack_require__) {
993
994"use strict";
995
996
997var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "../node_modules/get-intrinsic/index.js");
998
999var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);
1000
1001if ($gOPD) {
1002	try {
1003		$gOPD([], 'length');
1004	} catch (e) {
1005		// IE 8 has a broken gOPD
1006		$gOPD = null;
1007	}
1008}
1009
1010module.exports = $gOPD;
1011
1012
1013/***/ }),
1014
vendor: 1,000 bytes, lines 1015-1048
1015/***/ "../node_modules/has-property-descriptors/index.js":
1016/*!*********************************************************!*\
1017  !*** ../node_modules/has-property-descriptors/index.js ***!
1018  \*********************************************************/
1019/*! no static exports found */
1020/***/ (function(module, exports, __webpack_require__) {
1021
1022"use strict";
1023
1024
1025var $defineProperty = __webpack_require__(/*! es-define-property */ "../node_modules/es-define-property/index.js");
1026
1027var hasPropertyDescriptors = function hasPropertyDescriptors() {
1028	return !!$defineProperty;
1029};
1030
1031hasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {
1032	// node v0.6 has a bug where array lengths can be Set but not Defined
1033	if (!$defineProperty) {
1034		return null;
1035	}
1036	try {
1037		return $defineProperty([], 'length', { value: 1 }).length !== 1;
1038	} catch (e) {
1039		// In Firefox 4-22, defining length on an array throws an exception.
1040		return true;
1041	}
1042};
1043
1044module.exports = hasPropertyDescriptors;
1045
1046
1047/***/ }),
1048
vendor: 591 bytes, lines 1049-1075
1049/***/ "../node_modules/has-proto/index.js":
1050/*!******************************************!*\
1051  !*** ../node_modules/has-proto/index.js ***!
1052  \******************************************/
1053/*! no static exports found */
1054/***/ (function(module, exports, __webpack_require__) {
1055
1056"use strict";
1057
1058
1059var test = {
1060	__proto__: null,
1061	foo: {}
1062};
1063
1064var $Object = Object;
1065
1066/** @type {import('.')} */
1067module.exports = function hasProto() {
1068	// @ts-expect-error: TS errors on an inherited property for some reason
1069	return { __proto__: test }.foo === test.foo
1070		&& !(test instanceof $Object);
1071};
1072
1073
1074/***/ }),
1075
vendor: 773 bytes, lines 1076-1100
1076/***/ "../node_modules/has-symbols/index.js":
1077/*!********************************************!*\
1078  !*** ../node_modules/has-symbols/index.js ***!
1079  \********************************************/
1080/*! no static exports found */
1081/***/ (function(module, exports, __webpack_require__) {
1082
1083"use strict";
1084
1085
1086var origSymbol = typeof Symbol !== 'undefined' && Symbol;
1087var hasSymbolSham = __webpack_require__(/*! ./shams */ "../node_modules/has-symbols/shams.js");
1088
1089module.exports = function hasNativeSymbols() {
1090	if (typeof origSymbol !== 'function') { return false; }
1091	if (typeof Symbol !== 'function') { return false; }
1092	if (typeof origSymbol('foo') !== 'symbol') { return false; }
1093	if (typeof Symbol('bar') !== 'symbol') { return false; }
1094
1095	return hasSymbolSham();
1096};
1097
1098
1099/***/ }),
1100
vendor: 2,058 bytes, lines 1101-1154
1101/***/ "../node_modules/has-symbols/shams.js":
1102/*!********************************************!*\
1103  !*** ../node_modules/has-symbols/shams.js ***!
1104  \********************************************/
1105/*! no static exports found */
1106/***/ (function(module, exports, __webpack_require__) {
1107
1108"use strict";
1109
1110
1111/* eslint complexity: [2, 18], max-statements: [2, 33] */
1112module.exports = function hasSymbols() {
1113	if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }
1114	if (typeof Symbol.iterator === 'symbol') { return true; }
1115
1116	var obj = {};
1117	var sym = Symbol('test');
1118	var symObj = Object(sym);
1119	if (typeof sym === 'string') { return false; }
1120
1121	if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }
1122	if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }
1123
1124	// temp disabled per https://github.com/ljharb/object.assign/issues/17
1125	// if (sym instanceof Symbol) { return false; }
1126	// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4
1127	// if (!(symObj instanceof Symbol)) { return false; }
1128
1129	// if (typeof Symbol.prototype.toString !== 'function') { return false; }
1130	// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }
1131
1132	var symVal = 42;
1133	obj[sym] = symVal;
1134	for (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop
1135	if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }
1136
1137	if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }
1138
1139	var syms = Object.getOwnPropertySymbols(obj);
1140	if (syms.length !== 1 || syms[0] !== sym) { return false; }
1141
1142	if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }
1143
1144	if (typeof Object.getOwnPropertyDescriptor === 'function') {
1145		var descriptor = Object.getOwnPropertyDescriptor(obj, sym);
1146		if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }
1147	}
1148
1149	return true;
1150};
1151
1152
1153/***/ }),
1154
vendor: 541 bytes, lines 1155-1174
1155/***/ "../node_modules/hasown/index.js":
1156/*!***************************************!*\
1157  !*** ../node_modules/hasown/index.js ***!
1158  \***************************************/
1159/*! no static exports found */
1160/***/ (function(module, exports, __webpack_require__) {
1161
1162"use strict";
1163
1164
1165var call = Function.prototype.call;
1166var $hasOwn = Object.prototype.hasOwnProperty;
1167var bind = __webpack_require__(/*! function-bind */ "../node_modules/function-bind/index.js");
1168
1169/** @type {import('.')} */
1170module.exports = bind.call(call, $hasOwn);
1171
1172
1173/***/ }),
1174
vendor: 10,333 bytes, lines 1175-1551
1175/***/ "../node_modules/imagesloaded/imagesloaded.js":
1176/*!****************************************************!*\
1177  !*** ../node_modules/imagesloaded/imagesloaded.js ***!
1178  \****************************************************/
1179/*! no static exports found */
1180/***/ (function(module, exports, __webpack_require__) {
1181
1182var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
1183 * imagesLoaded v4.1.4
1184 * JavaScript is all like "You images are done yet or what?"
1185 * MIT License
1186 */
1187
1188( function( window, factory ) { 'use strict';
1189  // universal module definition
1190
1191  /*global define: false, module: false, require: false */
1192
1193  if ( true ) {
1194    // AMD
1195    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [
1196      __webpack_require__(/*! ev-emitter/ev-emitter */ "../node_modules/ev-emitter/ev-emitter.js")
1197    ], __WEBPACK_AMD_DEFINE_RESULT__ = (function( EvEmitter ) {
1198      return factory( window, EvEmitter );
1199    }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
1200				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1201  } else {}
1202
1203})( typeof window !== 'undefined' ? window : this,
1204
1205// --------------------------  factory -------------------------- //
1206
1207function factory( window, EvEmitter ) {
1208
1209'use strict';
1210
1211var $ = window.jQuery;
1212var console = window.console;
1213
1214// -------------------------- helpers -------------------------- //
1215
1216// extend objects
1217function extend( a, b ) {
1218  for ( var prop in b ) {
1219    a[ prop ] = b[ prop ];
1220  }
1221  return a;
1222}
1223
1224var arraySlice = Array.prototype.slice;
1225
1226// turn element or nodeList into an array
1227function makeArray( obj ) {
1228  if ( Array.isArray( obj ) ) {
1229    // use object if already an array
1230    return obj;
1231  }
1232
1233  var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';
1234  if ( isArrayLike ) {
1235    // convert nodeList to array
1236    return arraySlice.call( obj );
1237  }
1238
1239  // array of single index
1240  return [ obj ];
1241}
1242
1243// -------------------------- imagesLoaded -------------------------- //
1244
1245/**
1246 * @param {Array, Element, NodeList, String} elem
1247 * @param {Object or Function} options - if function, use as callback
1248 * @param {Function} onAlways - callback function
1249 */
1250function ImagesLoaded( elem, options, onAlways ) {
1251  // coerce ImagesLoaded() without new, to be new ImagesLoaded()
1252  if ( !( this instanceof ImagesLoaded ) ) {
1253    return new ImagesLoaded( elem, options, onAlways );
1254  }
1255  // use elem as selector string
1256  var queryElem = elem;
1257  if ( typeof elem == 'string' ) {
1258    queryElem = document.querySelectorAll( elem );
1259  }
1260  // bail if bad element
1261  if ( !queryElem ) {
1262    console.error( 'Bad element for imagesLoaded ' + ( queryElem || elem ) );
1263    return;
1264  }
1265
1266  this.elements = makeArray( queryElem );
1267  this.options = extend( {}, this.options );
1268  // shift arguments if no options set
1269  if ( typeof options == 'function' ) {
1270    onAlways = options;
1271  } else {
1272    extend( this.options, options );
1273  }
1274
1275  if ( onAlways ) {
1276    this.on( 'always', onAlways );
1277  }
1278
1279  this.getImages();
1280
1281  if ( $ ) {
1282    // add jQuery Deferred object
1283    this.jqDeferred = new $.Deferred();
1284  }
1285
1286  // HACK check async to allow time to bind listeners
1287  setTimeout( this.check.bind( this ) );
1288}
1289
1290ImagesLoaded.prototype = Object.create( EvEmitter.prototype );
1291
1292ImagesLoaded.prototype.options = {};
1293
1294ImagesLoaded.prototype.getImages = function() {
1295  this.images = [];
1296
1297  // filter & find items if we have an item selector
1298  this.elements.forEach( this.addElementImages, this );
1299};
1300
1301/**
1302 * @param {Node} element
1303 */
1304ImagesLoaded.prototype.addElementImages = function( elem ) {
1305  // filter siblings
1306  if ( elem.nodeName == 'IMG' ) {
1307    this.addImage( elem );
1308  }
1309  // get background image on element
1310  if ( this.options.background === true ) {
1311    this.addElementBackgroundImages( elem );
1312  }
1313
1314  // find children
1315  // no non-element nodes, #143
1316  var nodeType = elem.nodeType;
1317  if ( !nodeType || !elementNodeTypes[ nodeType ] ) {
1318    return;
1319  }
1320  var childImgs = elem.querySelectorAll('img');
1321  // concat childElems to filterFound array
1322  for ( var i=0; i < childImgs.length; i++ ) {
1323    var img = childImgs[i];
1324    this.addImage( img );
1325  }
1326
1327  // get child background images
1328  if ( typeof this.options.background == 'string' ) {
1329    var children = elem.querySelectorAll( this.options.background );
1330    for ( i=0; i < children.length; i++ ) {
1331      var child = children[i];
1332      this.addElementBackgroundImages( child );
1333    }
1334  }
1335};
1336
1337var elementNodeTypes = {
1338  1: true,
1339  9: true,
1340  11: true
1341};
1342
1343ImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {
1344  var style = getComputedStyle( elem );
1345  if ( !style ) {
1346    // Firefox returns null if in a hidden iframe https://bugzil.la/548397
1347    return;
1348  }
1349  // get url inside url("...")
1350  var reURL = /url\((['"])?(.*?)\1\)/gi;
1351  var matches = reURL.exec( style.backgroundImage );
1352  while ( matches !== null ) {
1353    var url = matches && matches[2];
1354    if ( url ) {
1355      this.addBackground( url, elem );
1356    }
1357    matches = reURL.exec( style.backgroundImage );
1358  }
1359};
1360
1361/**
1362 * @param {Image} img
1363 */
1364ImagesLoaded.prototype.addImage = function( img ) {
1365  var loadingImage = new LoadingImage( img );
1366  this.images.push( loadingImage );
1367};
1368
1369ImagesLoaded.prototype.addBackground = function( url, elem ) {
1370  var background = new Background( url, elem );
1371  this.images.push( background );
1372};
1373
1374ImagesLoaded.prototype.check = function() {
1375  var _this = this;
1376  this.progressedCount = 0;
1377  this.hasAnyBroken = false;
1378  // complete if no images
1379  if ( !this.images.length ) {
1380    this.complete();
1381    return;
1382  }
1383
1384  function onProgress( image, elem, message ) {
1385    // HACK - Chrome triggers event before object properties have changed. #83
1386    setTimeout( function() {
1387      _this.progress( image, elem, message );
1388    });
1389  }
1390
1391  this.images.forEach( function( loadingImage ) {
1392    loadingImage.once( 'progress', onProgress );
1393    loadingImage.check();
1394  });
1395};
1396
1397ImagesLoaded.prototype.progress = function( image, elem, message ) {
1398  this.progressedCount++;
1399  this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;
1400  // progress event
1401  this.emitEvent( 'progress', [ this, image, elem ] );
1402  if ( this.jqDeferred && this.jqDeferred.notify ) {
1403    this.jqDeferred.notify( this, image );
1404  }
1405  // check if completed
1406  if ( this.progressedCount == this.images.length ) {
1407    this.complete();
1408  }
1409
1410  if ( this.options.debug && console ) {
1411    console.log( 'progress: ' + message, image, elem );
1412  }
1413};
1414
1415ImagesLoaded.prototype.complete = function() {
1416  var eventName = this.hasAnyBroken ? 'fail' : 'done';
1417  this.isComplete = true;
1418  this.emitEvent( eventName, [ this ] );
1419  this.emitEvent( 'always', [ this ] );
1420  if ( this.jqDeferred ) {
1421    var jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';
1422    this.jqDeferred[ jqMethod ]( this );
1423  }
1424};
1425
1426// --------------------------  -------------------------- //
1427
1428function LoadingImage( img ) {
1429  this.img = img;
1430}
1431
1432LoadingImage.prototype = Object.create( EvEmitter.prototype );
1433
1434LoadingImage.prototype.check = function() {
1435  // If complete is true and browser supports natural sizes,
1436  // try to check for image status manually.
1437  var isComplete = this.getIsImageComplete();
1438  if ( isComplete ) {
1439    // report based on naturalWidth
1440    this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );
1441    return;
1442  }
1443
1444  // If none of the checks above matched, simulate loading on detached element.
1445  this.proxyImage = new Image();
1446  this.proxyImage.addEventListener( 'load', this );
1447  this.proxyImage.addEventListener( 'error', this );
1448  // bind to image as well for Firefox. #191
1449  this.img.addEventListener( 'load', this );
1450  this.img.addEventListener( 'error', this );
1451  this.proxyImage.src = this.img.src;
1452};
1453
1454LoadingImage.prototype.getIsImageComplete = function() {
1455  // check for non-zero, non-undefined naturalWidth
1456  // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671
1457  return this.img.complete && this.img.naturalWidth;
1458};
1459
1460LoadingImage.prototype.confirm = function( isLoaded, message ) {
1461  this.isLoaded = isLoaded;
1462  this.emitEvent( 'progress', [ this, this.img, message ] );
1463};
1464
1465// ----- events ----- //
1466
1467// trigger specified handler for event type
1468LoadingImage.prototype.handleEvent = function( event ) {
1469  var method = 'on' + event.type;
1470  if ( this[ method ] ) {
1471    this[ method ]( event );
1472  }
1473};
1474
1475LoadingImage.prototype.onload = function() {
1476  this.confirm( true, 'onload' );
1477  this.unbindEvents();
1478};
1479
1480LoadingImage.prototype.onerror = function() {
1481  this.confirm( false, 'onerror' );
1482  this.unbindEvents();
1483};
1484
1485LoadingImage.prototype.unbindEvents = function() {
1486  this.proxyImage.removeEventListener( 'load', this );
1487  this.proxyImage.removeEventListener( 'error', this );
1488  this.img.removeEventListener( 'load', this );
1489  this.img.removeEventListener( 'error', this );
1490};
1491
1492// -------------------------- Background -------------------------- //
1493
1494function Background( url, element ) {
1495  this.url = url;
1496  this.element = element;
1497  this.img = new Image();
1498}
1499
1500// inherit LoadingImage prototype
1501Background.prototype = Object.create( LoadingImage.prototype );
1502
1503Background.prototype.check = function() {
1504  this.img.addEventListener( 'load', this );
1505  this.img.addEventListener( 'error', this );
1506  this.img.src = this.url;
1507  // check if image is already complete
1508  var isComplete = this.getIsImageComplete();
1509  if ( isComplete ) {
1510    this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );
1511    this.unbindEvents();
1512  }
1513};
1514
1515Background.prototype.unbindEvents = function() {
1516  this.img.removeEventListener( 'load', this );
1517  this.img.removeEventListener( 'error', this );
1518};
1519
1520Background.prototype.confirm = function( isLoaded, message ) {
1521  this.isLoaded = isLoaded;
1522  this.emitEvent( 'progress', [ this, this.element, message ] );
1523};
1524
1525// -------------------------- jQuery -------------------------- //
1526
1527ImagesLoaded.makeJQueryPlugin = function( jQuery ) {
1528  jQuery = jQuery || window.jQuery;
1529  if ( !jQuery ) {
1530    return;
1531  }
1532  // set local variable
1533  $ = jQuery;
1534  // $().imagesLoaded()
1535  $.fn.imagesLoaded = function( options, callback ) {
1536    var instance = new ImagesLoaded( this, options, callback );
1537    return instance.jqDeferred.promise( $(this) );
1538  };
1539};
1540// try making plugin
1541ImagesLoaded.makeJQueryPlugin();
1542
1543// --------------------------  -------------------------- //
1544
1545return ImagesLoaded;
1546
1547});
1548
1549
1550/***/ }),
1551
vendor: 285,813 bytes, lines 1552-12279
1552/***/ "../node_modules/jquery/dist/jquery.js":
1553/*!*********************************************!*\
1554  !*** ../node_modules/jquery/dist/jquery.js ***!
1555  \*********************************************/
1556/*! no static exports found */
1557/***/ (function(module, exports, __webpack_require__) {
1558
1559var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
1560 * jQuery JavaScript Library v3.7.1
1561 * https://jquery.com/
1562 *
1563 * Copyright OpenJS Foundation and other contributors
1564 * Released under the MIT license
1565 * https://jquery.org/license
1566 *
1567 * Date: 2023-08-28T13:37Z
1568 */
1569( function( global, factory ) {
1570
1571	"use strict";
1572
1573	if (  true && typeof module.exports === "object" ) {
1574
1575		// For CommonJS and CommonJS-like environments where a proper `window`
1576		// is present, execute the factory and get jQuery.
1577		// For environments that do not have a `window` with a `document`
1578		// (such as Node.js), expose a factory as module.exports.
1579		// This accentuates the need for the creation of a real `window`.
1580		// e.g. var jQuery = require("jquery")(window);
1581		// See ticket trac-14549 for more info.
1582		module.exports = global.document ?
1583			factory( global, true ) :
1584			function( w ) {
1585				if ( !w.document ) {
1586					throw new Error( "jQuery requires a window with a document" );
1587				}
1588				return factory( w );
1589			};
1590	} else {
1591		factory( global );
1592	}
1593
1594// Pass this if window is not defined yet
1595} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
1596
1597// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
1598// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
1599// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
1600// enough that all such attempts are guarded in a try block.
1601"use strict";
1602
1603var arr = [];
1604
1605var getProto = Object.getPrototypeOf;
1606
1607var slice = arr.slice;
1608
1609var flat = arr.flat ? function( array ) {
1610	return arr.flat.call( array );
1611} : function( array ) {
1612	return arr.concat.apply( [], array );
1613};
1614
1615
1616var push = arr.push;
1617
1618var indexOf = arr.indexOf;
1619
1620var class2type = {};
1621
1622var toString = class2type.toString;
1623
1624var hasOwn = class2type.hasOwnProperty;
1625
1626var fnToString = hasOwn.toString;
1627
1628var ObjectFunctionString = fnToString.call( Object );
1629
1630var support = {};
1631
1632var isFunction = function isFunction( obj ) {
1633
1634		// Support: Chrome <=57, Firefox <=52
1635		// In some browsers, typeof returns "function" for HTML <object> elements
1636		// (i.e., `typeof document.createElement( "object" ) === "function"`).
1637		// We don't want to classify *any* DOM node as a function.
1638		// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5
1639		// Plus for old WebKit, typeof returns "function" for HTML collections
1640		// (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)
1641		return typeof obj === "function" && typeof obj.nodeType !== "number" &&
1642			typeof obj.item !== "function";
1643	};
1644
1645
1646var isWindow = function isWindow( obj ) {
1647		return obj != null && obj === obj.window;
1648	};
1649
1650
1651var document = window.document;
1652
1653
1654
1655	var preservedScriptAttributes = {
1656		type: true,
1657		src: true,
1658		nonce: true,
1659		noModule: true
1660	};
1661
1662	function DOMEval( code, node, doc ) {
1663		doc = doc || document;
1664
1665		var i, val,
1666			script = doc.createElement( "script" );
1667
1668		script.text = code;
1669		if ( node ) {
1670			for ( i in preservedScriptAttributes ) {
1671
1672				// Support: Firefox 64+, Edge 18+
1673				// Some browsers don't support the "nonce" property on scripts.
1674				// On the other hand, just using `getAttribute` is not enough as
1675				// the `nonce` attribute is reset to an empty string whenever it
1676				// becomes browsing-context connected.
1677				// See https://github.com/whatwg/html/issues/2369
1678				// See https://html.spec.whatwg.org/#nonce-attributes
1679				// The `node.getAttribute` check was added for the sake of
1680				// `jQuery.globalEval` so that it can fake a nonce-containing node
1681				// via an object.
1682				val = node[ i ] || node.getAttribute && node.getAttribute( i );
1683				if ( val ) {
1684					script.setAttribute( i, val );
1685				}
1686			}
1687		}
1688		doc.head.appendChild( script ).parentNode.removeChild( script );
1689	}
1690
1691
1692function toType( obj ) {
1693	if ( obj == null ) {
1694		return obj + "";
1695	}
1696
1697	// Support: Android <=2.3 only (functionish RegExp)
1698	return typeof obj === "object" || typeof obj === "function" ?
1699		class2type[ toString.call( obj ) ] || "object" :
1700		typeof obj;
1701}
1702/* global Symbol */
1703// Defining this global in .eslintrc.json would create a danger of using the global
1704// unguarded in another place, it seems safer to define global only for this module
1705
1706
1707
1708var version = "3.7.1",
1709
1710	rhtmlSuffix = /HTML$/i,
1711
1712	// Define a local copy of jQuery
1713	jQuery = function( selector, context ) {
1714
1715		// The jQuery object is actually just the init constructor 'enhanced'
1716		// Need init if jQuery is called (just allow error to be thrown if not included)
1717		return new jQuery.fn.init( selector, context );
1718	};
1719
1720jQuery.fn = jQuery.prototype = {
1721
1722	// The current version of jQuery being used
1723	jquery: version,
1724
1725	constructor: jQuery,
1726
1727	// The default length of a jQuery object is 0
1728	length: 0,
1729
1730	toArray: function() {
1731		return slice.call( this );
1732	},
1733
1734	// Get the Nth element in the matched element set OR
1735	// Get the whole matched element set as a clean array
1736	get: function( num ) {
1737
1738		// Return all the elements in a clean array
1739		if ( num == null ) {
1740			return slice.call( this );
1741		}
1742
1743		// Return just the one element from the set
1744		return num < 0 ? this[ num + this.length ] : this[ num ];
1745	},
1746
1747	// Take an array of elements and push it onto the stack
1748	// (returning the new matched element set)
1749	pushStack: function( elems ) {
1750
1751		// Build a new jQuery matched element set
1752		var ret = jQuery.merge( this.constructor(), elems );
1753
1754		// Add the old object onto the stack (as a reference)
1755		ret.prevObject = this;
1756
1757		// Return the newly-formed element set
1758		return ret;
1759	},
1760
1761	// Execute a callback for every element in the matched set.
1762	each: function( callback ) {
1763		return jQuery.each( this, callback );
1764	},
1765
1766	map: function( callback ) {
1767		return this.pushStack( jQuery.map( this, function( elem, i ) {
1768			return callback.call( elem, i, elem );
1769		} ) );
1770	},
1771
1772	slice: function() {
1773		return this.pushStack( slice.apply( this, arguments ) );
1774	},
1775
1776	first: function() {
1777		return this.eq( 0 );
1778	},
1779
1780	last: function() {
1781		return this.eq( -1 );
1782	},
1783
1784	even: function() {
1785		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
1786			return ( i + 1 ) % 2;
1787		} ) );
1788	},
1789
1790	odd: function() {
1791		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
1792			return i % 2;
1793		} ) );
1794	},
1795
1796	eq: function( i ) {
1797		var len = this.length,
1798			j = +i + ( i < 0 ? len : 0 );
1799		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
1800	},
1801
1802	end: function() {
1803		return this.prevObject || this.constructor();
1804	},
1805
1806	// For internal use only.
1807	// Behaves like an Array's method, not like a jQuery method.
1808	push: push,
1809	sort: arr.sort,
1810	splice: arr.splice
1811};
1812
1813jQuery.extend = jQuery.fn.extend = function() {
1814	var options, name, src, copy, copyIsArray, clone,
1815		target = arguments[ 0 ] || {},
1816		i = 1,
1817		length = arguments.length,
1818		deep = false;
1819
1820	// Handle a deep copy situation
1821	if ( typeof target === "boolean" ) {
1822		deep = target;
1823
1824		// Skip the boolean and the target
1825		target = arguments[ i ] || {};
1826		i++;
1827	}
1828
1829	// Handle case when target is a string or something (possible in deep copy)
1830	if ( typeof target !== "object" && !isFunction( target ) ) {
1831		target = {};
1832	}
1833
1834	// Extend jQuery itself if only one argument is passed
1835	if ( i === length ) {
1836		target = this;
1837		i--;
1838	}
1839
1840	for ( ; i < length; i++ ) {
1841
1842		// Only deal with non-null/undefined values
1843		if ( ( options = arguments[ i ] ) != null ) {
1844
1845			// Extend the base object
1846			for ( name in options ) {
1847				copy = options[ name ];
1848
1849				// Prevent Object.prototype pollution
1850				// Prevent never-ending loop
1851				if ( name === "__proto__" || target === copy ) {
1852					continue;
1853				}
1854
1855				// Recurse if we're merging plain objects or arrays
1856				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
1857					( copyIsArray = Array.isArray( copy ) ) ) ) {
1858					src = target[ name ];
1859
1860					// Ensure proper type for the source value
1861					if ( copyIsArray && !Array.isArray( src ) ) {
1862						clone = [];
1863					} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
1864						clone = {};
1865					} else {
1866						clone = src;
1867					}
1868					copyIsArray = false;
1869
1870					// Never move original objects, clone them
1871					target[ name ] = jQuery.extend( deep, clone, copy );
1872
1873				// Don't bring in undefined values
1874				} else if ( copy !== undefined ) {
1875					target[ name ] = copy;
1876				}
1877			}
1878		}
1879	}
1880
1881	// Return the modified object
1882	return target;
1883};
1884
1885jQuery.extend( {
1886
1887	// Unique for each copy of jQuery on the page
1888	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
1889
1890	// Assume jQuery is ready without the ready module
1891	isReady: true,
1892
1893	error: function( msg ) {
1894		throw new Error( msg );
1895	},
1896
1897	noop: function() {},
1898
1899	isPlainObject: function( obj ) {
1900		var proto, Ctor;
1901
1902		// Detect obvious negatives
1903		// Use toString instead of jQuery.type to catch host objects
1904		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
1905			return false;
1906		}
1907
1908		proto = getProto( obj );
1909
1910		// Objects with no prototype (e.g., `Object.create( null )`) are plain
1911		if ( !proto ) {
1912			return true;
1913		}
1914
1915		// Objects with prototype are plain iff they were constructed by a global Object function
1916		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
1917		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
1918	},
1919
1920	isEmptyObject: function( obj ) {
1921		var name;
1922
1923		for ( name in obj ) {
1924			return false;
1925		}
1926		return true;
1927	},
1928
1929	// Evaluates a script in a provided context; falls back to the global one
1930	// if not specified.
1931	globalEval: function( code, options, doc ) {
1932		DOMEval( code, { nonce: options && options.nonce }, doc );
1933	},
1934
1935	each: function( obj, callback ) {
1936		var length, i = 0;
1937
1938		if ( isArrayLike( obj ) ) {
1939			length = obj.length;
1940			for ( ; i < length; i++ ) {
1941				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
1942					break;
1943				}
1944			}
1945		} else {
1946			for ( i in obj ) {
1947				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
1948					break;
1949				}
1950			}
1951		}
1952
1953		return obj;
1954	},
1955
1956
1957	// Retrieve the text value of an array of DOM nodes
1958	text: function( elem ) {
1959		var node,
1960			ret = "",
1961			i = 0,
1962			nodeType = elem.nodeType;
1963
1964		if ( !nodeType ) {
1965
1966			// If no nodeType, this is expected to be an array
1967			while ( ( node = elem[ i++ ] ) ) {
1968
1969				// Do not traverse comment nodes
1970				ret += jQuery.text( node );
1971			}
1972		}
1973		if ( nodeType === 1 || nodeType === 11 ) {
1974			return elem.textContent;
1975		}
1976		if ( nodeType === 9 ) {
1977			return elem.documentElement.textContent;
1978		}
1979		if ( nodeType === 3 || nodeType === 4 ) {
1980			return elem.nodeValue;
1981		}
1982
1983		// Do not include comment or processing instruction nodes
1984
1985		return ret;
1986	},
1987
1988	// results is for internal usage only
1989	makeArray: function( arr, results ) {
1990		var ret = results || [];
1991
1992		if ( arr != null ) {
1993			if ( isArrayLike( Object( arr ) ) ) {
1994				jQuery.merge( ret,
1995					typeof arr === "string" ?
1996						[ arr ] : arr
1997				);
1998			} else {
1999				push.call( ret, arr );
2000			}
2001		}
2002
2003		return ret;
2004	},
2005
2006	inArray: function( elem, arr, i ) {
2007		return arr == null ? -1 : indexOf.call( arr, elem, i );
2008	},
2009
2010	isXMLDoc: function( elem ) {
2011		var namespace = elem && elem.namespaceURI,
2012			docElem = elem && ( elem.ownerDocument || elem ).documentElement;
2013
2014		// Assume HTML when documentElement doesn't yet exist, such as inside
2015		// document fragments.
2016		return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" );
2017	},
2018
2019	// Support: Android <=4.0 only, PhantomJS 1 only
2020	// push.apply(_, arraylike) throws on ancient WebKit
2021	merge: function( first, second ) {
2022		var len = +second.length,
2023			j = 0,
2024			i = first.length;
2025
2026		for ( ; j < len; j++ ) {
2027			first[ i++ ] = second[ j ];
2028		}
2029
2030		first.length = i;
2031
2032		return first;
2033	},
2034
2035	grep: function( elems, callback, invert ) {
2036		var callbackInverse,
2037			matches = [],
2038			i = 0,
2039			length = elems.length,
2040			callbackExpect = !invert;
2041
2042		// Go through the array, only saving the items
2043		// that pass the validator function
2044		for ( ; i < length; i++ ) {
2045			callbackInverse = !callback( elems[ i ], i );
2046			if ( callbackInverse !== callbackExpect ) {
2047				matches.push( elems[ i ] );
2048			}
2049		}
2050
2051		return matches;
2052	},
2053
2054	// arg is for internal usage only
2055	map: function( elems, callback, arg ) {
2056		var length, value,
2057			i = 0,
2058			ret = [];
2059
2060		// Go through the array, translating each of the items to their new values
2061		if ( isArrayLike( elems ) ) {
2062			length = elems.length;
2063			for ( ; i < length; i++ ) {
2064				value = callback( elems[ i ], i, arg );
2065
2066				if ( value != null ) {
2067					ret.push( value );
2068				}
2069			}
2070
2071		// Go through every key on the object,
2072		} else {
2073			for ( i in elems ) {
2074				value = callback( elems[ i ], i, arg );
2075
2076				if ( value != null ) {
2077					ret.push( value );
2078				}
2079			}
2080		}
2081
2082		// Flatten any nested arrays
2083		return flat( ret );
2084	},
2085
2086	// A global GUID counter for objects
2087	guid: 1,
2088
2089	// jQuery.support is not used in Core but other projects attach their
2090	// properties to it so it needs to exist.
2091	support: support
2092} );
2093
2094if ( typeof Symbol === "function" ) {
2095	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
2096}
2097
2098// Populate the class2type map
2099jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
2100	function( _i, name ) {
2101		class2type[ "[object " + name + "]" ] = name.toLowerCase();
2102	} );
2103
2104function isArrayLike( obj ) {
2105
2106	// Support: real iOS 8.2 only (not reproducible in simulator)
2107	// `in` check used to prevent JIT error (gh-2145)
2108	// hasOwn isn't used here due to false negatives
2109	// regarding Nodelist length in IE
2110	var length = !!obj && "length" in obj && obj.length,
2111		type = toType( obj );
2112
2113	if ( isFunction( obj ) || isWindow( obj ) ) {
2114		return false;
2115	}
2116
2117	return type === "array" || length === 0 ||
2118		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
2119}
2120
2121
2122function nodeName( elem, name ) {
2123
2124	return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
2125
2126}
2127var pop = arr.pop;
2128
2129
2130var sort = arr.sort;
2131
2132
2133var splice = arr.splice;
2134
2135
2136var whitespace = "[\\x20\\t\\r\\n\\f]";
2137
2138
2139var rtrimCSS = new RegExp(
2140	"^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$",
2141	"g"
2142);
2143
2144
2145
2146
2147// Note: an element does not contain itself
2148jQuery.contains = function( a, b ) {
2149	var bup = b && b.parentNode;
2150
2151	return a === bup || !!( bup && bup.nodeType === 1 && (
2152
2153		// Support: IE 9 - 11+
2154		// IE doesn't have `contains` on SVG.
2155		a.contains ?
2156			a.contains( bup ) :
2157			a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
2158	) );
2159};
2160
2161
2162
2163
2164// CSS string/identifier serialization
2165// https://drafts.csswg.org/cssom/#common-serializing-idioms
2166var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
2167
2168function fcssescape( ch, asCodePoint ) {
2169	if ( asCodePoint ) {
2170
2171		// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
2172		if ( ch === "\0" ) {
2173			return "\uFFFD";
2174		}
2175
2176		// Control characters and (dependent upon position) numbers get escaped as code points
2177		return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
2178	}
2179
2180	// Other potentially-special ASCII characters get backslash-escaped
2181	return "\\" + ch;
2182}
2183
2184jQuery.escapeSelector = function( sel ) {
2185	return ( sel + "" ).replace( rcssescape, fcssescape );
2186};
2187
2188
2189
2190
2191var preferredDoc = document,
2192	pushNative = push;
2193
2194( function() {
2195
2196var i,
2197	Expr,
2198	outermostContext,
2199	sortInput,
2200	hasDuplicate,
2201	push = pushNative,
2202
2203	// Local document vars
2204	document,
2205	documentElement,
2206	documentIsHTML,
2207	rbuggyQSA,
2208	matches,
2209
2210	// Instance-specific data
2211	expando = jQuery.expando,
2212	dirruns = 0,
2213	done = 0,
2214	classCache = createCache(),
2215	tokenCache = createCache(),
2216	compilerCache = createCache(),
2217	nonnativeSelectorCache = createCache(),
2218	sortOrder = function( a, b ) {
2219		if ( a === b ) {
2220			hasDuplicate = true;
2221		}
2222		return 0;
2223	},
2224
2225	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" +
2226		"loop|multiple|open|readonly|required|scoped",
2227
2228	// Regular expressions
2229
2230	// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
2231	identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
2232		"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
2233
2234	// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors
2235	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
2236
2237		// Operator (capture 2)
2238		"*([*^$|!~]?=)" + whitespace +
2239
2240		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
2241		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
2242		whitespace + "*\\]",
2243
2244	pseudos = ":(" + identifier + ")(?:\\((" +
2245
2246		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
2247		// 1. quoted (capture 3; capture 4 or capture 5)
2248		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
2249
2250		// 2. simple (capture 6)
2251		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
2252
2253		// 3. anything else (capture 2)
2254		".*" +
2255		")\\)|)",
2256
2257	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
2258	rwhitespace = new RegExp( whitespace + "+", "g" ),
2259
2260	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
2261	rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" +
2262		whitespace + "*" ),
2263	rdescend = new RegExp( whitespace + "|>" ),
2264
2265	rpseudo = new RegExp( pseudos ),
2266	ridentifier = new RegExp( "^" + identifier + "$" ),
2267
2268	matchExpr = {
2269		ID: new RegExp( "^#(" + identifier + ")" ),
2270		CLASS: new RegExp( "^\\.(" + identifier + ")" ),
2271		TAG: new RegExp( "^(" + identifier + "|[*])" ),
2272		ATTR: new RegExp( "^" + attributes ),
2273		PSEUDO: new RegExp( "^" + pseudos ),
2274		CHILD: new RegExp(
2275			"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
2276				whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
2277				whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
2278		bool: new RegExp( "^(?:" + booleans + ")$", "i" ),
2279
2280		// For use in libraries implementing .is()
2281		// We use this for POS matching in `select`
2282		needsContext: new RegExp( "^" + whitespace +
2283			"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
2284			"*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
2285	},
2286
2287	rinputs = /^(?:input|select|textarea|button)$/i,
2288	rheader = /^h\d$/i,
2289
2290	// Easily-parseable/retrievable ID or TAG or CLASS selectors
2291	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
2292
2293	rsibling = /[+~]/,
2294
2295	// CSS escapes
2296	// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters
2297	runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace +
2298		"?|\\\\([^\\r\\n\\f])", "g" ),
2299	funescape = function( escape, nonHex ) {
2300		var high = "0x" + escape.slice( 1 ) - 0x10000;
2301
2302		if ( nonHex ) {
2303
2304			// Strip the backslash prefix from a non-hex escape sequence
2305			return nonHex;
2306		}
2307
2308		// Replace a hexadecimal escape sequence with the encoded Unicode code point
2309		// Support: IE <=11+
2310		// For values outside the Basic Multilingual Plane (BMP), manually construct a
2311		// surrogate pair
2312		return high < 0 ?
2313			String.fromCharCode( high + 0x10000 ) :
2314			String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
2315	},
2316
2317	// Used for iframes; see `setDocument`.
2318	// Support: IE 9 - 11+, Edge 12 - 18+
2319	// Removing the function wrapper causes a "Permission Denied"
2320	// error in IE/Edge.
2321	unloadHandler = function() {
2322		setDocument();
2323	},
2324
2325	inDisabledFieldset = addCombinator(
2326		function( elem ) {
2327			return elem.disabled === true && nodeName( elem, "fieldset" );
2328		},
2329		{ dir: "parentNode", next: "legend" }
2330	);
2331
2332// Support: IE <=9 only
2333// Accessing document.activeElement can throw unexpectedly
2334// https://bugs.jquery.com/ticket/13393
2335function safeActiveElement() {
2336	try {
2337		return document.activeElement;
2338	} catch ( err ) { }
2339}
2340
2341// Optimize for push.apply( _, NodeList )
2342try {
2343	push.apply(
2344		( arr = slice.call( preferredDoc.childNodes ) ),
2345		preferredDoc.childNodes
2346	);
2347
2348	// Support: Android <=4.0
2349	// Detect silently failing push.apply
2350	// eslint-disable-next-line no-unused-expressions
2351	arr[ preferredDoc.childNodes.length ].nodeType;
2352} catch ( e ) {
2353	push = {
2354		apply: function( target, els ) {
2355			pushNative.apply( target, slice.call( els ) );
2356		},
2357		call: function( target ) {
2358			pushNative.apply( target, slice.call( arguments, 1 ) );
2359		}
2360	};
2361}
2362
2363function find( selector, context, results, seed ) {
2364	var m, i, elem, nid, match, groups, newSelector,
2365		newContext = context && context.ownerDocument,
2366
2367		// nodeType defaults to 9, since context defaults to document
2368		nodeType = context ? context.nodeType : 9;
2369
2370	results = results || [];
2371
2372	// Return early from calls with invalid selector or context
2373	if ( typeof selector !== "string" || !selector ||
2374		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
2375
2376		return results;
2377	}
2378
2379	// Try to shortcut find operations (as opposed to filters) in HTML documents
2380	if ( !seed ) {
2381		setDocument( context );
2382		context = context || document;
2383
2384		if ( documentIsHTML ) {
2385
2386			// If the selector is sufficiently simple, try using a "get*By*" DOM method
2387			// (excepting DocumentFragment context, where the methods don't exist)
2388			if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {
2389
2390				// ID selector
2391				if ( ( m = match[ 1 ] ) ) {
2392
2393					// Document context
2394					if ( nodeType === 9 ) {
2395						if ( ( elem = context.getElementById( m ) ) ) {
2396
2397							// Support: IE 9 only
2398							// getElementById can match elements by name instead of ID
2399							if ( elem.id === m ) {
2400								push.call( results, elem );
2401								return results;
2402							}
2403						} else {
2404							return results;
2405						}
2406
2407					// Element context
2408					} else {
2409
2410						// Support: IE 9 only
2411						// getElementById can match elements by name instead of ID
2412						if ( newContext && ( elem = newContext.getElementById( m ) ) &&
2413							find.contains( context, elem ) &&
2414							elem.id === m ) {
2415
2416							push.call( results, elem );
2417							return results;
2418						}
2419					}
2420
2421				// Type selector
2422				} else if ( match[ 2 ] ) {
2423					push.apply( results, context.getElementsByTagName( selector ) );
2424					return results;
2425
2426				// Class selector
2427				} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {
2428					push.apply( results, context.getElementsByClassName( m ) );
2429					return results;
2430				}
2431			}
2432
2433			// Take advantage of querySelectorAll
2434			if ( !nonnativeSelectorCache[ selector + " " ] &&
2435				( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {
2436
2437				newSelector = selector;
2438				newContext = context;
2439
2440				// qSA considers elements outside a scoping root when evaluating child or
2441				// descendant combinators, which is not what we want.
2442				// In such cases, we work around the behavior by prefixing every selector in the
2443				// list with an ID selector referencing the scope context.
2444				// The technique has to be used as well when a leading combinator is used
2445				// as such selectors are not recognized by querySelectorAll.
2446				// Thanks to Andrew Dupont for this technique.
2447				if ( nodeType === 1 &&
2448					( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {
2449
2450					// Expand context for sibling selectors
2451					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
2452						context;
2453
2454					// We can use :scope instead of the ID hack if the browser
2455					// supports it & if we're not changing the context.
2456					// Support: IE 11+, Edge 17 - 18+
2457					// IE/Edge sometimes throw a "Permission denied" error when
2458					// strict-comparing two documents; shallow comparisons work.
2459					// eslint-disable-next-line eqeqeq
2460					if ( newContext != context || !support.scope ) {
2461
2462						// Capture the context ID, setting it first if necessary
2463						if ( ( nid = context.getAttribute( "id" ) ) ) {
2464							nid = jQuery.escapeSelector( nid );
2465						} else {
2466							context.setAttribute( "id", ( nid = expando ) );
2467						}
2468					}
2469
2470					// Prefix every selector in the list
2471					groups = tokenize( selector );
2472					i = groups.length;
2473					while ( i-- ) {
2474						groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
2475							toSelector( groups[ i ] );
2476					}
2477					newSelector = groups.join( "," );
2478				}
2479
2480				try {
2481					push.apply( results,
2482						newContext.querySelectorAll( newSelector )
2483					);
2484					return results;
2485				} catch ( qsaError ) {
2486					nonnativeSelectorCache( selector, true );
2487				} finally {
2488					if ( nid === expando ) {
2489						context.removeAttribute( "id" );
2490					}
2491				}
2492			}
2493		}
2494	}
2495
2496	// All others
2497	return select( selector.replace( rtrimCSS, "$1" ), context, results, seed );
2498}
2499
2500/**
2501 * Create key-value caches of limited size
2502 * @returns {function(string, object)} Returns the Object data after storing it on itself with
2503 *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
2504 *	deleting the oldest entry
2505 */
2506function createCache() {
2507	var keys = [];
2508
2509	function cache( key, value ) {
2510
2511		// Use (key + " ") to avoid collision with native prototype properties
2512		// (see https://github.com/jquery/sizzle/issues/157)
2513		if ( keys.push( key + " " ) > Expr.cacheLength ) {
2514
2515			// Only keep the most recent entries
2516			delete cache[ keys.shift() ];
2517		}
2518		return ( cache[ key + " " ] = value );
2519	}
2520	return cache;
2521}
2522
2523/**
2524 * Mark a function for special use by jQuery selector module
2525 * @param {Function} fn The function to mark
2526 */
2527function markFunction( fn ) {
2528	fn[ expando ] = true;
2529	return fn;
2530}
2531
2532/**
2533 * Support testing using an element
2534 * @param {Function} fn Passed the created element and returns a boolean result
2535 */
2536function assert( fn ) {
2537	var el = document.createElement( "fieldset" );
2538
2539	try {
2540		return !!fn( el );
2541	} catch ( e ) {
2542		return false;
2543	} finally {
2544
2545		// Remove from its parent by default
2546		if ( el.parentNode ) {
2547			el.parentNode.removeChild( el );
2548		}
2549
2550		// release memory in IE
2551		el = null;
2552	}
2553}
2554
2555/**
2556 * Returns a function to use in pseudos for input types
2557 * @param {String} type
2558 */
2559function createInputPseudo( type ) {
2560	return function( elem ) {
2561		return nodeName( elem, "input" ) && elem.type === type;
2562	};
2563}
2564
2565/**
2566 * Returns a function to use in pseudos for buttons
2567 * @param {String} type
2568 */
2569function createButtonPseudo( type ) {
2570	return function( elem ) {
2571		return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) &&
2572			elem.type === type;
2573	};
2574}
2575
2576/**
2577 * Returns a function to use in pseudos for :enabled/:disabled
2578 * @param {Boolean} disabled true for :disabled; false for :enabled
2579 */
2580function createDisabledPseudo( disabled ) {
2581
2582	// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
2583	return function( elem ) {
2584
2585		// Only certain elements can match :enabled or :disabled
2586		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
2587		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
2588		if ( "form" in elem ) {
2589
2590			// Check for inherited disabledness on relevant non-disabled elements:
2591			// * listed form-associated elements in a disabled fieldset
2592			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
2593			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
2594			// * option elements in a disabled optgroup
2595			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
2596			// All such elements have a "form" property.
2597			if ( elem.parentNode && elem.disabled === false ) {
2598
2599				// Option elements defer to a parent optgroup if present
2600				if ( "label" in elem ) {
2601					if ( "label" in elem.parentNode ) {
2602						return elem.parentNode.disabled === disabled;
2603					} else {
2604						return elem.disabled === disabled;
2605					}
2606				}
2607
2608				// Support: IE 6 - 11+
2609				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
2610				return elem.isDisabled === disabled ||
2611
2612					// Where there is no isDisabled, check manually
2613					elem.isDisabled !== !disabled &&
2614						inDisabledFieldset( elem ) === disabled;
2615			}
2616
2617			return elem.disabled === disabled;
2618
2619		// Try to winnow out elements that can't be disabled before trusting the disabled property.
2620		// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
2621		// even exist on them, let alone have a boolean value.
2622		} else if ( "label" in elem ) {
2623			return elem.disabled === disabled;
2624		}
2625
2626		// Remaining elements are neither :enabled nor :disabled
2627		return false;
2628	};
2629}
2630
2631/**
2632 * Returns a function to use in pseudos for positionals
2633 * @param {Function} fn
2634 */
2635function createPositionalPseudo( fn ) {
2636	return markFunction( function( argument ) {
2637		argument = +argument;
2638		return markFunction( function( seed, matches ) {
2639			var j,
2640				matchIndexes = fn( [], seed.length, argument ),
2641				i = matchIndexes.length;
2642
2643			// Match elements found at the specified indexes
2644			while ( i-- ) {
2645				if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
2646					seed[ j ] = !( matches[ j ] = seed[ j ] );
2647				}
2648			}
2649		} );
2650	} );
2651}
2652
2653/**
2654 * Checks a node for validity as a jQuery selector context
2655 * @param {Element|Object=} context
2656 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
2657 */
2658function testContext( context ) {
2659	return context && typeof context.getElementsByTagName !== "undefined" && context;
2660}
2661
2662/**
2663 * Sets document-related variables once based on the current document
2664 * @param {Element|Object} [node] An element or document object to use to set the document
2665 * @returns {Object} Returns the current document
2666 */
2667function setDocument( node ) {
2668	var subWindow,
2669		doc = node ? node.ownerDocument || node : preferredDoc;
2670
2671	// Return early if doc is invalid or already selected
2672	// Support: IE 11+, Edge 17 - 18+
2673	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2674	// two documents; shallow comparisons work.
2675	// eslint-disable-next-line eqeqeq
2676	if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
2677		return document;
2678	}
2679
2680	// Update global variables
2681	document = doc;
2682	documentElement = document.documentElement;
2683	documentIsHTML = !jQuery.isXMLDoc( document );
2684
2685	// Support: iOS 7 only, IE 9 - 11+
2686	// Older browsers didn't support unprefixed `matches`.
2687	matches = documentElement.matches ||
2688		documentElement.webkitMatchesSelector ||
2689		documentElement.msMatchesSelector;
2690
2691	// Support: IE 9 - 11+, Edge 12 - 18+
2692	// Accessing iframe documents after unload throws "permission denied" errors
2693	// (see trac-13936).
2694	// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,
2695	// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.
2696	if ( documentElement.msMatchesSelector &&
2697
2698		// Support: IE 11+, Edge 17 - 18+
2699		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2700		// two documents; shallow comparisons work.
2701		// eslint-disable-next-line eqeqeq
2702		preferredDoc != document &&
2703		( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
2704
2705		// Support: IE 9 - 11+, Edge 12 - 18+
2706		subWindow.addEventListener( "unload", unloadHandler );
2707	}
2708
2709	// Support: IE <10
2710	// Check if getElementById returns elements by name
2711	// The broken getElementById methods don't pick up programmatically-set names,
2712	// so use a roundabout getElementsByName test
2713	support.getById = assert( function( el ) {
2714		documentElement.appendChild( el ).id = jQuery.expando;
2715		return !document.getElementsByName ||
2716			!document.getElementsByName( jQuery.expando ).length;
2717	} );
2718
2719	// Support: IE 9 only
2720	// Check to see if it's possible to do matchesSelector
2721	// on a disconnected node.
2722	support.disconnectedMatch = assert( function( el ) {
2723		return matches.call( el, "*" );
2724	} );
2725
2726	// Support: IE 9 - 11+, Edge 12 - 18+
2727	// IE/Edge don't support the :scope pseudo-class.
2728	support.scope = assert( function() {
2729		return document.querySelectorAll( ":scope" );
2730	} );
2731
2732	// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only
2733	// Make sure the `:has()` argument is parsed unforgivingly.
2734	// We include `*` in the test to detect buggy implementations that are
2735	// _selectively_ forgiving (specifically when the list includes at least
2736	// one valid selector).
2737	// Note that we treat complete lack of support for `:has()` as if it were
2738	// spec-compliant support, which is fine because use of `:has()` in such
2739	// environments will fail in the qSA path and fall back to jQuery traversal
2740	// anyway.
2741	support.cssHas = assert( function() {
2742		try {
2743			document.querySelector( ":has(*,:jqfake)" );
2744			return false;
2745		} catch ( e ) {
2746			return true;
2747		}
2748	} );
2749
2750	// ID filter and find
2751	if ( support.getById ) {
2752		Expr.filter.ID = function( id ) {
2753			var attrId = id.replace( runescape, funescape );
2754			return function( elem ) {
2755				return elem.getAttribute( "id" ) === attrId;
2756			};
2757		};
2758		Expr.find.ID = function( id, context ) {
2759			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
2760				var elem = context.getElementById( id );
2761				return elem ? [ elem ] : [];
2762			}
2763		};
2764	} else {
2765		Expr.filter.ID =  function( id ) {
2766			var attrId = id.replace( runescape, funescape );
2767			return function( elem ) {
2768				var node = typeof elem.getAttributeNode !== "undefined" &&
2769					elem.getAttributeNode( "id" );
2770				return node && node.value === attrId;
2771			};
2772		};
2773
2774		// Support: IE 6 - 7 only
2775		// getElementById is not reliable as a find shortcut
2776		Expr.find.ID = function( id, context ) {
2777			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
2778				var node, i, elems,
2779					elem = context.getElementById( id );
2780
2781				if ( elem ) {
2782
2783					// Verify the id attribute
2784					node = elem.getAttributeNode( "id" );
2785					if ( node && node.value === id ) {
2786						return [ elem ];
2787					}
2788
2789					// Fall back on getElementsByName
2790					elems = context.getElementsByName( id );
2791					i = 0;
2792					while ( ( elem = elems[ i++ ] ) ) {
2793						node = elem.getAttributeNode( "id" );
2794						if ( node && node.value === id ) {
2795							return [ elem ];
2796						}
2797					}
2798				}
2799
2800				return [];
2801			}
2802		};
2803	}
2804
2805	// Tag
2806	Expr.find.TAG = function( tag, context ) {
2807		if ( typeof context.getElementsByTagName !== "undefined" ) {
2808			return context.getElementsByTagName( tag );
2809
2810		// DocumentFragment nodes don't have gEBTN
2811		} else {
2812			return context.querySelectorAll( tag );
2813		}
2814	};
2815
2816	// Class
2817	Expr.find.CLASS = function( className, context ) {
2818		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
2819			return context.getElementsByClassName( className );
2820		}
2821	};
2822
2823	/* QSA/matchesSelector
2824	---------------------------------------------------------------------- */
2825
2826	// QSA and matchesSelector support
2827
2828	rbuggyQSA = [];
2829
2830	// Build QSA regex
2831	// Regex strategy adopted from Diego Perini
2832	assert( function( el ) {
2833
2834		var input;
2835
2836		documentElement.appendChild( el ).innerHTML =
2837			"<a id='" + expando + "' href='' disabled='disabled'></a>" +
2838			"<select id='" + expando + "-\r\\' disabled='disabled'>" +
2839			"<option selected=''></option></select>";
2840
2841		// Support: iOS <=7 - 8 only
2842		// Boolean attributes and "value" are not treated correctly in some XML documents
2843		if ( !el.querySelectorAll( "[selected]" ).length ) {
2844			rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
2845		}
2846
2847		// Support: iOS <=7 - 8 only
2848		if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
2849			rbuggyQSA.push( "~=" );
2850		}
2851
2852		// Support: iOS 8 only
2853		// https://bugs.webkit.org/show_bug.cgi?id=136851
2854		// In-page `selector#id sibling-combinator selector` fails
2855		if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
2856			rbuggyQSA.push( ".#.+[+~]" );
2857		}
2858
2859		// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+
2860		// In some of the document kinds, these selectors wouldn't work natively.
2861		// This is probably OK but for backwards compatibility we want to maintain
2862		// handling them through jQuery traversal in jQuery 3.x.
2863		if ( !el.querySelectorAll( ":checked" ).length ) {
2864			rbuggyQSA.push( ":checked" );
2865		}
2866
2867		// Support: Windows 8 Native Apps
2868		// The type and name attributes are restricted during .innerHTML assignment
2869		input = document.createElement( "input" );
2870		input.setAttribute( "type", "hidden" );
2871		el.appendChild( input ).setAttribute( "name", "D" );
2872
2873		// Support: IE 9 - 11+
2874		// IE's :disabled selector does not pick up the children of disabled fieldsets
2875		// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+
2876		// In some of the document kinds, these selectors wouldn't work natively.
2877		// This is probably OK but for backwards compatibility we want to maintain
2878		// handling them through jQuery traversal in jQuery 3.x.
2879		documentElement.appendChild( el ).disabled = true;
2880		if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
2881			rbuggyQSA.push( ":enabled", ":disabled" );
2882		}
2883
2884		// Support: IE 11+, Edge 15 - 18+
2885		// IE 11/Edge don't find elements on a `[name='']` query in some cases.
2886		// Adding a temporary attribute to the document before the selection works
2887		// around the issue.
2888		// Interestingly, IE 10 & older don't seem to have the issue.
2889		input = document.createElement( "input" );
2890		input.setAttribute( "name", "" );
2891		el.appendChild( input );
2892		if ( !el.querySelectorAll( "[name='']" ).length ) {
2893			rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
2894				whitespace + "*(?:''|\"\")" );
2895		}
2896	} );
2897
2898	if ( !support.cssHas ) {
2899
2900		// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+
2901		// Our regular `try-catch` mechanism fails to detect natively-unsupported
2902		// pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`)
2903		// in browsers that parse the `:has()` argument as a forgiving selector list.
2904		// https://drafts.csswg.org/selectors/#relational now requires the argument
2905		// to be parsed unforgivingly, but browsers have not yet fully adjusted.
2906		rbuggyQSA.push( ":has" );
2907	}
2908
2909	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
2910
2911	/* Sorting
2912	---------------------------------------------------------------------- */
2913
2914	// Document order sorting
2915	sortOrder = function( a, b ) {
2916
2917		// Flag for duplicate removal
2918		if ( a === b ) {
2919			hasDuplicate = true;
2920			return 0;
2921		}
2922
2923		// Sort on method existence if only one input has compareDocumentPosition
2924		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
2925		if ( compare ) {
2926			return compare;
2927		}
2928
2929		// Calculate position if both inputs belong to the same document
2930		// Support: IE 11+, Edge 17 - 18+
2931		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2932		// two documents; shallow comparisons work.
2933		// eslint-disable-next-line eqeqeq
2934		compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
2935			a.compareDocumentPosition( b ) :
2936
2937			// Otherwise we know they are disconnected
2938			1;
2939
2940		// Disconnected nodes
2941		if ( compare & 1 ||
2942			( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
2943
2944			// Choose the first element that is related to our preferred document
2945			// Support: IE 11+, Edge 17 - 18+
2946			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2947			// two documents; shallow comparisons work.
2948			// eslint-disable-next-line eqeqeq
2949			if ( a === document || a.ownerDocument == preferredDoc &&
2950				find.contains( preferredDoc, a ) ) {
2951				return -1;
2952			}
2953
2954			// Support: IE 11+, Edge 17 - 18+
2955			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2956			// two documents; shallow comparisons work.
2957			// eslint-disable-next-line eqeqeq
2958			if ( b === document || b.ownerDocument == preferredDoc &&
2959				find.contains( preferredDoc, b ) ) {
2960				return 1;
2961			}
2962
2963			// Maintain original order
2964			return sortInput ?
2965				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
2966				0;
2967		}
2968
2969		return compare & 4 ? -1 : 1;
2970	};
2971
2972	return document;
2973}
2974
2975find.matches = function( expr, elements ) {
2976	return find( expr, null, null, elements );
2977};
2978
2979find.matchesSelector = function( elem, expr ) {
2980	setDocument( elem );
2981
2982	if ( documentIsHTML &&
2983		!nonnativeSelectorCache[ expr + " " ] &&
2984		( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
2985
2986		try {
2987			var ret = matches.call( elem, expr );
2988
2989			// IE 9's matchesSelector returns false on disconnected nodes
2990			if ( ret || support.disconnectedMatch ||
2991
2992					// As well, disconnected nodes are said to be in a document
2993					// fragment in IE 9
2994					elem.document && elem.document.nodeType !== 11 ) {
2995				return ret;
2996			}
2997		} catch ( e ) {
2998			nonnativeSelectorCache( expr, true );
2999		}
3000	}
3001
3002	return find( expr, document, null, [ elem ] ).length > 0;
3003};
3004
3005find.contains = function( context, elem ) {
3006
3007	// Set document vars if needed
3008	// Support: IE 11+, Edge 17 - 18+
3009	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
3010	// two documents; shallow comparisons work.
3011	// eslint-disable-next-line eqeqeq
3012	if ( ( context.ownerDocument || context ) != document ) {
3013		setDocument( context );
3014	}
3015	return jQuery.contains( context, elem );
3016};
3017
3018
3019find.attr = function( elem, name ) {
3020
3021	// Set document vars if needed
3022	// Support: IE 11+, Edge 17 - 18+
3023	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
3024	// two documents; shallow comparisons work.
3025	// eslint-disable-next-line eqeqeq
3026	if ( ( elem.ownerDocument || elem ) != document ) {
3027		setDocument( elem );
3028	}
3029
3030	var fn = Expr.attrHandle[ name.toLowerCase() ],
3031
3032		// Don't get fooled by Object.prototype properties (see trac-13807)
3033		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
3034			fn( elem, name, !documentIsHTML ) :
3035			undefined;
3036
3037	if ( val !== undefined ) {
3038		return val;
3039	}
3040
3041	return elem.getAttribute( name );
3042};
3043
3044find.error = function( msg ) {
3045	throw new Error( "Syntax error, unrecognized expression: " + msg );
3046};
3047
3048/**
3049 * Document sorting and removing duplicates
3050 * @param {ArrayLike} results
3051 */
3052jQuery.uniqueSort = function( results ) {
3053	var elem,
3054		duplicates = [],
3055		j = 0,
3056		i = 0;
3057
3058	// Unless we *know* we can detect duplicates, assume their presence
3059	//
3060	// Support: Android <=4.0+
3061	// Testing for detecting duplicates is unpredictable so instead assume we can't
3062	// depend on duplicate detection in all browsers without a stable sort.
3063	hasDuplicate = !support.sortStable;
3064	sortInput = !support.sortStable && slice.call( results, 0 );
3065	sort.call( results, sortOrder );
3066
3067	if ( hasDuplicate ) {
3068		while ( ( elem = results[ i++ ] ) ) {
3069			if ( elem === results[ i ] ) {
3070				j = duplicates.push( i );
3071			}
3072		}
3073		while ( j-- ) {
3074			splice.call( results, duplicates[ j ], 1 );
3075		}
3076	}
3077
3078	// Clear input after sorting to release objects
3079	// See https://github.com/jquery/sizzle/pull/225
3080	sortInput = null;
3081
3082	return results;
3083};
3084
3085jQuery.fn.uniqueSort = function() {
3086	return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );
3087};
3088
3089Expr = jQuery.expr = {
3090
3091	// Can be adjusted by the user
3092	cacheLength: 50,
3093
3094	createPseudo: markFunction,
3095
3096	match: matchExpr,
3097
3098	attrHandle: {},
3099
3100	find: {},
3101
3102	relative: {
3103		">": { dir: "parentNode", first: true },
3104		" ": { dir: "parentNode" },
3105		"+": { dir: "previousSibling", first: true },
3106		"~": { dir: "previousSibling" }
3107	},
3108
3109	preFilter: {
3110		ATTR: function( match ) {
3111			match[ 1 ] = match[ 1 ].replace( runescape, funescape );
3112
3113			// Move the given value to match[3] whether quoted or unquoted
3114			match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" )
3115				.replace( runescape, funescape );
3116
3117			if ( match[ 2 ] === "~=" ) {
3118				match[ 3 ] = " " + match[ 3 ] + " ";
3119			}
3120
3121			return match.slice( 0, 4 );
3122		},
3123
3124		CHILD: function( match ) {
3125
3126			/* matches from matchExpr["CHILD"]
3127				1 type (only|nth|...)
3128				2 what (child|of-type)
3129				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
3130				4 xn-component of xn+y argument ([+-]?\d*n|)
3131				5 sign of xn-component
3132				6 x of xn-component
3133				7 sign of y-component
3134				8 y of y-component
3135			*/
3136			match[ 1 ] = match[ 1 ].toLowerCase();
3137
3138			if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
3139
3140				// nth-* requires argument
3141				if ( !match[ 3 ] ) {
3142					find.error( match[ 0 ] );
3143				}
3144
3145				// numeric x and y parameters for Expr.filter.CHILD
3146				// remember that false/true cast respectively to 0/1
3147				match[ 4 ] = +( match[ 4 ] ?
3148					match[ 5 ] + ( match[ 6 ] || 1 ) :
3149					2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" )
3150				);
3151				match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
3152
3153			// other types prohibit arguments
3154			} else if ( match[ 3 ] ) {
3155				find.error( match[ 0 ] );
3156			}
3157
3158			return match;
3159		},
3160
3161		PSEUDO: function( match ) {
3162			var excess,
3163				unquoted = !match[ 6 ] && match[ 2 ];
3164
3165			if ( matchExpr.CHILD.test( match[ 0 ] ) ) {
3166				return null;
3167			}
3168
3169			// Accept quoted arguments as-is
3170			if ( match[ 3 ] ) {
3171				match[ 2 ] = match[ 4 ] || match[ 5 ] || "";
3172
3173			// Strip excess characters from unquoted arguments
3174			} else if ( unquoted && rpseudo.test( unquoted ) &&
3175
3176				// Get excess from tokenize (recursively)
3177				( excess = tokenize( unquoted, true ) ) &&
3178
3179				// advance to the next closing parenthesis
3180				( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
3181
3182				// excess is a negative index
3183				match[ 0 ] = match[ 0 ].slice( 0, excess );
3184				match[ 2 ] = unquoted.slice( 0, excess );
3185			}
3186
3187			// Return only captures needed by the pseudo filter method (type and argument)
3188			return match.slice( 0, 3 );
3189		}
3190	},
3191
3192	filter: {
3193
3194		TAG: function( nodeNameSelector ) {
3195			var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
3196			return nodeNameSelector === "*" ?
3197				function() {
3198					return true;
3199				} :
3200				function( elem ) {
3201					return nodeName( elem, expectedNodeName );
3202				};
3203		},
3204
3205		CLASS: function( className ) {
3206			var pattern = classCache[ className + " " ];
3207
3208			return pattern ||
3209				( pattern = new RegExp( "(^|" + whitespace + ")" + className +
3210					"(" + whitespace + "|$)" ) ) &&
3211				classCache( className, function( elem ) {
3212					return pattern.test(
3213						typeof elem.className === "string" && elem.className ||
3214							typeof elem.getAttribute !== "undefined" &&
3215								elem.getAttribute( "class" ) ||
3216							""
3217					);
3218				} );
3219		},
3220
3221		ATTR: function( name, operator, check ) {
3222			return function( elem ) {
3223				var result = find.attr( elem, name );
3224
3225				if ( result == null ) {
3226					return operator === "!=";
3227				}
3228				if ( !operator ) {
3229					return true;
3230				}
3231
3232				result += "";
3233
3234				if ( operator === "=" ) {
3235					return result === check;
3236				}
3237				if ( operator === "!=" ) {
3238					return result !== check;
3239				}
3240				if ( operator === "^=" ) {
3241					return check && result.indexOf( check ) === 0;
3242				}
3243				if ( operator === "*=" ) {
3244					return check && result.indexOf( check ) > -1;
3245				}
3246				if ( operator === "$=" ) {
3247					return check && result.slice( -check.length ) === check;
3248				}
3249				if ( operator === "~=" ) {
3250					return ( " " + result.replace( rwhitespace, " " ) + " " )
3251						.indexOf( check ) > -1;
3252				}
3253				if ( operator === "|=" ) {
3254					return result === check || result.slice( 0, check.length + 1 ) === check + "-";
3255				}
3256
3257				return false;
3258			};
3259		},
3260
3261		CHILD: function( type, what, _argument, first, last ) {
3262			var simple = type.slice( 0, 3 ) !== "nth",
3263				forward = type.slice( -4 ) !== "last",
3264				ofType = what === "of-type";
3265
3266			return first === 1 && last === 0 ?
3267
3268				// Shortcut for :nth-*(n)
3269				function( elem ) {
3270					return !!elem.parentNode;
3271				} :
3272
3273				function( elem, _context, xml ) {
3274					var cache, outerCache, node, nodeIndex, start,
3275						dir = simple !== forward ? "nextSibling" : "previousSibling",
3276						parent = elem.parentNode,
3277						name = ofType && elem.nodeName.toLowerCase(),
3278						useCache = !xml && !ofType,
3279						diff = false;
3280
3281					if ( parent ) {
3282
3283						// :(first|last|only)-(child|of-type)
3284						if ( simple ) {
3285							while ( dir ) {
3286								node = elem;
3287								while ( ( node = node[ dir ] ) ) {
3288									if ( ofType ?
3289										nodeName( node, name ) :
3290										node.nodeType === 1 ) {
3291
3292										return false;
3293									}
3294								}
3295
3296								// Reverse direction for :only-* (if we haven't yet done so)
3297								start = dir = type === "only" && !start && "nextSibling";
3298							}
3299							return true;
3300						}
3301
3302						start = [ forward ? parent.firstChild : parent.lastChild ];
3303
3304						// non-xml :nth-child(...) stores cache data on `parent`
3305						if ( forward && useCache ) {
3306
3307							// Seek `elem` from a previously-cached index
3308							outerCache = parent[ expando ] || ( parent[ expando ] = {} );
3309							cache = outerCache[ type ] || [];
3310							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
3311							diff = nodeIndex && cache[ 2 ];
3312							node = nodeIndex && parent.childNodes[ nodeIndex ];
3313
3314							while ( ( node = ++nodeIndex && node && node[ dir ] ||
3315
3316								// Fallback to seeking `elem` from the start
3317								( diff = nodeIndex = 0 ) || start.pop() ) ) {
3318
3319								// When found, cache indexes on `parent` and break
3320								if ( node.nodeType === 1 && ++diff && node === elem ) {
3321									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
3322									break;
3323								}
3324							}
3325
3326						} else {
3327
3328							// Use previously-cached element index if available
3329							if ( useCache ) {
3330								outerCache = elem[ expando ] || ( elem[ expando ] = {} );
3331								cache = outerCache[ type ] || [];
3332								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
3333								diff = nodeIndex;
3334							}
3335
3336							// xml :nth-child(...)
3337							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
3338							if ( diff === false ) {
3339
3340								// Use the same loop as above to seek `elem` from the start
3341								while ( ( node = ++nodeIndex && node && node[ dir ] ||
3342									( diff = nodeIndex = 0 ) || start.pop() ) ) {
3343
3344									if ( ( ofType ?
3345										nodeName( node, name ) :
3346										node.nodeType === 1 ) &&
3347										++diff ) {
3348
3349										// Cache the index of each encountered element
3350										if ( useCache ) {
3351											outerCache = node[ expando ] ||
3352												( node[ expando ] = {} );
3353											outerCache[ type ] = [ dirruns, diff ];
3354										}
3355
3356										if ( node === elem ) {
3357											break;
3358										}
3359									}
3360								}
3361							}
3362						}
3363
3364						// Incorporate the offset, then check against cycle size
3365						diff -= last;
3366						return diff === first || ( diff % first === 0 && diff / first >= 0 );
3367					}
3368				};
3369		},
3370
3371		PSEUDO: function( pseudo, argument ) {
3372
3373			// pseudo-class names are case-insensitive
3374			// https://www.w3.org/TR/selectors/#pseudo-classes
3375			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
3376			// Remember that setFilters inherits from pseudos
3377			var args,
3378				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
3379					find.error( "unsupported pseudo: " + pseudo );
3380
3381			// The user may use createPseudo to indicate that
3382			// arguments are needed to create the filter function
3383			// just as jQuery does
3384			if ( fn[ expando ] ) {
3385				return fn( argument );
3386			}
3387
3388			// But maintain support for old signatures
3389			if ( fn.length > 1 ) {
3390				args = [ pseudo, pseudo, "", argument ];
3391				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
3392					markFunction( function( seed, matches ) {
3393						var idx,
3394							matched = fn( seed, argument ),
3395							i = matched.length;
3396						while ( i-- ) {
3397							idx = indexOf.call( seed, matched[ i ] );
3398							seed[ idx ] = !( matches[ idx ] = matched[ i ] );
3399						}
3400					} ) :
3401					function( elem ) {
3402						return fn( elem, 0, args );
3403					};
3404			}
3405
3406			return fn;
3407		}
3408	},
3409
3410	pseudos: {
3411
3412		// Potentially complex pseudos
3413		not: markFunction( function( selector ) {
3414
3415			// Trim the selector passed to compile
3416			// to avoid treating leading and trailing
3417			// spaces as combinators
3418			var input = [],
3419				results = [],
3420				matcher = compile( selector.replace( rtrimCSS, "$1" ) );
3421
3422			return matcher[ expando ] ?
3423				markFunction( function( seed, matches, _context, xml ) {
3424					var elem,
3425						unmatched = matcher( seed, null, xml, [] ),
3426						i = seed.length;
3427
3428					// Match elements unmatched by `matcher`
3429					while ( i-- ) {
3430						if ( ( elem = unmatched[ i ] ) ) {
3431							seed[ i ] = !( matches[ i ] = elem );
3432						}
3433					}
3434				} ) :
3435				function( elem, _context, xml ) {
3436					input[ 0 ] = elem;
3437					matcher( input, null, xml, results );
3438
3439					// Don't keep the element
3440					// (see https://github.com/jquery/sizzle/issues/299)
3441					input[ 0 ] = null;
3442					return !results.pop();
3443				};
3444		} ),
3445
3446		has: markFunction( function( selector ) {
3447			return function( elem ) {
3448				return find( selector, elem ).length > 0;
3449			};
3450		} ),
3451
3452		contains: markFunction( function( text ) {
3453			text = text.replace( runescape, funescape );
3454			return function( elem ) {
3455				return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;
3456			};
3457		} ),
3458
3459		// "Whether an element is represented by a :lang() selector
3460		// is based solely on the element's language value
3461		// being equal to the identifier C,
3462		// or beginning with the identifier C immediately followed by "-".
3463		// The matching of C against the element's language value is performed case-insensitively.
3464		// The identifier C does not have to be a valid language name."
3465		// https://www.w3.org/TR/selectors/#lang-pseudo
3466		lang: markFunction( function( lang ) {
3467
3468			// lang value must be a valid identifier
3469			if ( !ridentifier.test( lang || "" ) ) {
3470				find.error( "unsupported lang: " + lang );
3471			}
3472			lang = lang.replace( runescape, funescape ).toLowerCase();
3473			return function( elem ) {
3474				var elemLang;
3475				do {
3476					if ( ( elemLang = documentIsHTML ?
3477						elem.lang :
3478						elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) {
3479
3480						elemLang = elemLang.toLowerCase();
3481						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
3482					}
3483				} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );
3484				return false;
3485			};
3486		} ),
3487
3488		// Miscellaneous
3489		target: function( elem ) {
3490			var hash = window.location && window.location.hash;
3491			return hash && hash.slice( 1 ) === elem.id;
3492		},
3493
3494		root: function( elem ) {
3495			return elem === documentElement;
3496		},
3497
3498		focus: function( elem ) {
3499			return elem === safeActiveElement() &&
3500				document.hasFocus() &&
3501				!!( elem.type || elem.href || ~elem.tabIndex );
3502		},
3503
3504		// Boolean properties
3505		enabled: createDisabledPseudo( false ),
3506		disabled: createDisabledPseudo( true ),
3507
3508		checked: function( elem ) {
3509
3510			// In CSS3, :checked should return both checked and selected elements
3511			// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
3512			return ( nodeName( elem, "input" ) && !!elem.checked ) ||
3513				( nodeName( elem, "option" ) && !!elem.selected );
3514		},
3515
3516		selected: function( elem ) {
3517
3518			// Support: IE <=11+
3519			// Accessing the selectedIndex property
3520			// forces the browser to treat the default option as
3521			// selected when in an optgroup.
3522			if ( elem.parentNode ) {
3523				// eslint-disable-next-line no-unused-expressions
3524				elem.parentNode.selectedIndex;
3525			}
3526
3527			return elem.selected === true;
3528		},
3529
3530		// Contents
3531		empty: function( elem ) {
3532
3533			// https://www.w3.org/TR/selectors/#empty-pseudo
3534			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
3535			//   but not by others (comment: 8; processing instruction: 7; etc.)
3536			// nodeType < 6 works because attributes (2) do not appear as children
3537			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
3538				if ( elem.nodeType < 6 ) {
3539					return false;
3540				}
3541			}
3542			return true;
3543		},
3544
3545		parent: function( elem ) {
3546			return !Expr.pseudos.empty( elem );
3547		},
3548
3549		// Element/input types
3550		header: function( elem ) {
3551			return rheader.test( elem.nodeName );
3552		},
3553
3554		input: function( elem ) {
3555			return rinputs.test( elem.nodeName );
3556		},
3557
3558		button: function( elem ) {
3559			return nodeName( elem, "input" ) && elem.type === "button" ||
3560				nodeName( elem, "button" );
3561		},
3562
3563		text: function( elem ) {
3564			var attr;
3565			return nodeName( elem, "input" ) && elem.type === "text" &&
3566
3567				// Support: IE <10 only
3568				// New HTML5 attribute values (e.g., "search") appear
3569				// with elem.type === "text"
3570				( ( attr = elem.getAttribute( "type" ) ) == null ||
3571					attr.toLowerCase() === "text" );
3572		},
3573
3574		// Position-in-collection
3575		first: createPositionalPseudo( function() {
3576			return [ 0 ];
3577		} ),
3578
3579		last: createPositionalPseudo( function( _matchIndexes, length ) {
3580			return [ length - 1 ];
3581		} ),
3582
3583		eq: createPositionalPseudo( function( _matchIndexes, length, argument ) {
3584			return [ argument < 0 ? argument + length : argument ];
3585		} ),
3586
3587		even: createPositionalPseudo( function( matchIndexes, length ) {
3588			var i = 0;
3589			for ( ; i < length; i += 2 ) {
3590				matchIndexes.push( i );
3591			}
3592			return matchIndexes;
3593		} ),
3594
3595		odd: createPositionalPseudo( function( matchIndexes, length ) {
3596			var i = 1;
3597			for ( ; i < length; i += 2 ) {
3598				matchIndexes.push( i );
3599			}
3600			return matchIndexes;
3601		} ),
3602
3603		lt: createPositionalPseudo( function( matchIndexes, length, argument ) {
3604			var i;
3605
3606			if ( argument < 0 ) {
3607				i = argument + length;
3608			} else if ( argument > length ) {
3609				i = length;
3610			} else {
3611				i = argument;
3612			}
3613
3614			for ( ; --i >= 0; ) {
3615				matchIndexes.push( i );
3616			}
3617			return matchIndexes;
3618		} ),
3619
3620		gt: createPositionalPseudo( function( matchIndexes, length, argument ) {
3621			var i = argument < 0 ? argument + length : argument;
3622			for ( ; ++i < length; ) {
3623				matchIndexes.push( i );
3624			}
3625			return matchIndexes;
3626		} )
3627	}
3628};
3629
3630Expr.pseudos.nth = Expr.pseudos.eq;
3631
3632// Add button/input type pseudos
3633for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
3634	Expr.pseudos[ i ] = createInputPseudo( i );
3635}
3636for ( i in { submit: true, reset: true } ) {
3637	Expr.pseudos[ i ] = createButtonPseudo( i );
3638}
3639
3640// Easy API for creating new setFilters
3641function setFilters() {}
3642setFilters.prototype = Expr.filters = Expr.pseudos;
3643Expr.setFilters = new setFilters();
3644
3645function tokenize( selector, parseOnly ) {
3646	var matched, match, tokens, type,
3647		soFar, groups, preFilters,
3648		cached = tokenCache[ selector + " " ];
3649
3650	if ( cached ) {
3651		return parseOnly ? 0 : cached.slice( 0 );
3652	}
3653
3654	soFar = selector;
3655	groups = [];
3656	preFilters = Expr.preFilter;
3657
3658	while ( soFar ) {
3659
3660		// Comma and first run
3661		if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
3662			if ( match ) {
3663
3664				// Don't consume trailing commas as valid
3665				soFar = soFar.slice( match[ 0 ].length ) || soFar;
3666			}
3667			groups.push( ( tokens = [] ) );
3668		}
3669
3670		matched = false;
3671
3672		// Combinators
3673		if ( ( match = rleadingCombinator.exec( soFar ) ) ) {
3674			matched = match.shift();
3675			tokens.push( {
3676				value: matched,
3677
3678				// Cast descendant combinators to space
3679				type: match[ 0 ].replace( rtrimCSS, " " )
3680			} );
3681			soFar = soFar.slice( matched.length );
3682		}
3683
3684		// Filters
3685		for ( type in Expr.filter ) {
3686			if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||
3687				( match = preFilters[ type ]( match ) ) ) ) {
3688				matched = match.shift();
3689				tokens.push( {
3690					value: matched,
3691					type: type,
3692					matches: match
3693				} );
3694				soFar = soFar.slice( matched.length );
3695			}
3696		}
3697
3698		if ( !matched ) {
3699			break;
3700		}
3701	}
3702
3703	// Return the length of the invalid excess
3704	// if we're just parsing
3705	// Otherwise, throw an error or return tokens
3706	if ( parseOnly ) {
3707		return soFar.length;
3708	}
3709
3710	return soFar ?
3711		find.error( selector ) :
3712
3713		// Cache the tokens
3714		tokenCache( selector, groups ).slice( 0 );
3715}
3716
3717function toSelector( tokens ) {
3718	var i = 0,
3719		len = tokens.length,
3720		selector = "";
3721	for ( ; i < len; i++ ) {
3722		selector += tokens[ i ].value;
3723	}
3724	return selector;
3725}
3726
3727function addCombinator( matcher, combinator, base ) {
3728	var dir = combinator.dir,
3729		skip = combinator.next,
3730		key = skip || dir,
3731		checkNonElements = base && key === "parentNode",
3732		doneName = done++;
3733
3734	return combinator.first ?
3735
3736		// Check against closest ancestor/preceding element
3737		function( elem, context, xml ) {
3738			while ( ( elem = elem[ dir ] ) ) {
3739				if ( elem.nodeType === 1 || checkNonElements ) {
3740					return matcher( elem, context, xml );
3741				}
3742			}
3743			return false;
3744		} :
3745
3746		// Check against all ancestor/preceding elements
3747		function( elem, context, xml ) {
3748			var oldCache, outerCache,
3749				newCache = [ dirruns, doneName ];
3750
3751			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
3752			if ( xml ) {
3753				while ( ( elem = elem[ dir ] ) ) {
3754					if ( elem.nodeType === 1 || checkNonElements ) {
3755						if ( matcher( elem, context, xml ) ) {
3756							return true;
3757						}
3758					}
3759				}
3760			} else {
3761				while ( ( elem = elem[ dir ] ) ) {
3762					if ( elem.nodeType === 1 || checkNonElements ) {
3763						outerCache = elem[ expando ] || ( elem[ expando ] = {} );
3764
3765						if ( skip && nodeName( elem, skip ) ) {
3766							elem = elem[ dir ] || elem;
3767						} else if ( ( oldCache = outerCache[ key ] ) &&
3768							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
3769
3770							// Assign to newCache so results back-propagate to previous elements
3771							return ( newCache[ 2 ] = oldCache[ 2 ] );
3772						} else {
3773
3774							// Reuse newcache so results back-propagate to previous elements
3775							outerCache[ key ] = newCache;
3776
3777							// A match means we're done; a fail means we have to keep checking
3778							if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
3779								return true;
3780							}
3781						}
3782					}
3783				}
3784			}
3785			return false;
3786		};
3787}
3788
3789function elementMatcher( matchers ) {
3790	return matchers.length > 1 ?
3791		function( elem, context, xml ) {
3792			var i = matchers.length;
3793			while ( i-- ) {
3794				if ( !matchers[ i ]( elem, context, xml ) ) {
3795					return false;
3796				}
3797			}
3798			return true;
3799		} :
3800		matchers[ 0 ];
3801}
3802
3803function multipleContexts( selector, contexts, results ) {
3804	var i = 0,
3805		len = contexts.length;
3806	for ( ; i < len; i++ ) {
3807		find( selector, contexts[ i ], results );
3808	}
3809	return results;
3810}
3811
3812function condense( unmatched, map, filter, context, xml ) {
3813	var elem,
3814		newUnmatched = [],
3815		i = 0,
3816		len = unmatched.length,
3817		mapped = map != null;
3818
3819	for ( ; i < len; i++ ) {
3820		if ( ( elem = unmatched[ i ] ) ) {
3821			if ( !filter || filter( elem, context, xml ) ) {
3822				newUnmatched.push( elem );
3823				if ( mapped ) {
3824					map.push( i );
3825				}
3826			}
3827		}
3828	}
3829
3830	return newUnmatched;
3831}
3832
3833function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
3834	if ( postFilter && !postFilter[ expando ] ) {
3835		postFilter = setMatcher( postFilter );
3836	}
3837	if ( postFinder && !postFinder[ expando ] ) {
3838		postFinder = setMatcher( postFinder, postSelector );
3839	}
3840	return markFunction( function( seed, results, context, xml ) {
3841		var temp, i, elem, matcherOut,
3842			preMap = [],
3843			postMap = [],
3844			preexisting = results.length,
3845
3846			// Get initial elements from seed or context
3847			elems = seed ||
3848				multipleContexts( selector || "*",
3849					context.nodeType ? [ context ] : context, [] ),
3850
3851			// Prefilter to get matcher input, preserving a map for seed-results synchronization
3852			matcherIn = preFilter && ( seed || !selector ) ?
3853				condense( elems, preMap, preFilter, context, xml ) :
3854				elems;
3855
3856		if ( matcher ) {
3857
3858			// If we have a postFinder, or filtered seed, or non-seed postFilter
3859			// or preexisting results,
3860			matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
3861
3862				// ...intermediate processing is necessary
3863				[] :
3864
3865				// ...otherwise use results directly
3866				results;
3867
3868			// Find primary matches
3869			matcher( matcherIn, matcherOut, context, xml );
3870		} else {
3871			matcherOut = matcherIn;
3872		}
3873
3874		// Apply postFilter
3875		if ( postFilter ) {
3876			temp = condense( matcherOut, postMap );
3877			postFilter( temp, [], context, xml );
3878
3879			// Un-match failing elements by moving them back to matcherIn
3880			i = temp.length;
3881			while ( i-- ) {
3882				if ( ( elem = temp[ i ] ) ) {
3883					matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );
3884				}
3885			}
3886		}
3887
3888		if ( seed ) {
3889			if ( postFinder || preFilter ) {
3890				if ( postFinder ) {
3891
3892					// Get the final matcherOut by condensing this intermediate into postFinder contexts
3893					temp = [];
3894					i = matcherOut.length;
3895					while ( i-- ) {
3896						if ( ( elem = matcherOut[ i ] ) ) {
3897
3898							// Restore matcherIn since elem is not yet a final match
3899							temp.push( ( matcherIn[ i ] = elem ) );
3900						}
3901					}
3902					postFinder( null, ( matcherOut = [] ), temp, xml );
3903				}
3904
3905				// Move matched elements from seed to results to keep them synchronized
3906				i = matcherOut.length;
3907				while ( i-- ) {
3908					if ( ( elem = matcherOut[ i ] ) &&
3909						( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {
3910
3911						seed[ temp ] = !( results[ temp ] = elem );
3912					}
3913				}
3914			}
3915
3916		// Add elements to results, through postFinder if defined
3917		} else {
3918			matcherOut = condense(
3919				matcherOut === results ?
3920					matcherOut.splice( preexisting, matcherOut.length ) :
3921					matcherOut
3922			);
3923			if ( postFinder ) {
3924				postFinder( null, results, matcherOut, xml );
3925			} else {
3926				push.apply( results, matcherOut );
3927			}
3928		}
3929	} );
3930}
3931
3932function matcherFromTokens( tokens ) {
3933	var checkContext, matcher, j,
3934		len = tokens.length,
3935		leadingRelative = Expr.relative[ tokens[ 0 ].type ],
3936		implicitRelative = leadingRelative || Expr.relative[ " " ],
3937		i = leadingRelative ? 1 : 0,
3938
3939		// The foundational matcher ensures that elements are reachable from top-level context(s)
3940		matchContext = addCombinator( function( elem ) {
3941			return elem === checkContext;
3942		}, implicitRelative, true ),
3943		matchAnyContext = addCombinator( function( elem ) {
3944			return indexOf.call( checkContext, elem ) > -1;
3945		}, implicitRelative, true ),
3946		matchers = [ function( elem, context, xml ) {
3947
3948			// Support: IE 11+, Edge 17 - 18+
3949			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
3950			// two documents; shallow comparisons work.
3951			// eslint-disable-next-line eqeqeq
3952			var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (
3953				( checkContext = context ).nodeType ?
3954					matchContext( elem, context, xml ) :
3955					matchAnyContext( elem, context, xml ) );
3956
3957			// Avoid hanging onto element
3958			// (see https://github.com/jquery/sizzle/issues/299)
3959			checkContext = null;
3960			return ret;
3961		} ];
3962
3963	for ( ; i < len; i++ ) {
3964		if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {
3965			matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
3966		} else {
3967			matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );
3968
3969			// Return special upon seeing a positional matcher
3970			if ( matcher[ expando ] ) {
3971
3972				// Find the next relative operator (if any) for proper handling
3973				j = ++i;
3974				for ( ; j < len; j++ ) {
3975					if ( Expr.relative[ tokens[ j ].type ] ) {
3976						break;
3977					}
3978				}
3979				return setMatcher(
3980					i > 1 && elementMatcher( matchers ),
3981					i > 1 && toSelector(
3982
3983						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
3984						tokens.slice( 0, i - 1 )
3985							.concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
3986					).replace( rtrimCSS, "$1" ),
3987					matcher,
3988					i < j && matcherFromTokens( tokens.slice( i, j ) ),
3989					j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
3990					j < len && toSelector( tokens )
3991				);
3992			}
3993			matchers.push( matcher );
3994		}
3995	}
3996
3997	return elementMatcher( matchers );
3998}
3999
4000function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
4001	var bySet = setMatchers.length > 0,
4002		byElement = elementMatchers.length > 0,
4003		superMatcher = function( seed, context, xml, results, outermost ) {
4004			var elem, j, matcher,
4005				matchedCount = 0,
4006				i = "0",
4007				unmatched = seed && [],
4008				setMatched = [],
4009				contextBackup = outermostContext,
4010
4011				// We must always have either seed elements or outermost context
4012				elems = seed || byElement && Expr.find.TAG( "*", outermost ),
4013
4014				// Use integer dirruns iff this is the outermost matcher
4015				dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
4016				len = elems.length;
4017
4018			if ( outermost ) {
4019
4020				// Support: IE 11+, Edge 17 - 18+
4021				// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
4022				// two documents; shallow comparisons work.
4023				// eslint-disable-next-line eqeqeq
4024				outermostContext = context == document || context || outermost;
4025			}
4026
4027			// Add elements passing elementMatchers directly to results
4028			// Support: iOS <=7 - 9 only
4029			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching
4030			// elements by id. (see trac-14142)
4031			for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
4032				if ( byElement && elem ) {
4033					j = 0;
4034
4035					// Support: IE 11+, Edge 17 - 18+
4036					// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
4037					// two documents; shallow comparisons work.
4038					// eslint-disable-next-line eqeqeq
4039					if ( !context && elem.ownerDocument != document ) {
4040						setDocument( elem );
4041						xml = !documentIsHTML;
4042					}
4043					while ( ( matcher = elementMatchers[ j++ ] ) ) {
4044						if ( matcher( elem, context || document, xml ) ) {
4045							push.call( results, elem );
4046							break;
4047						}
4048					}
4049					if ( outermost ) {
4050						dirruns = dirrunsUnique;
4051					}
4052				}
4053
4054				// Track unmatched elements for set filters
4055				if ( bySet ) {
4056
4057					// They will have gone through all possible matchers
4058					if ( ( elem = !matcher && elem ) ) {
4059						matchedCount--;
4060					}
4061
4062					// Lengthen the array for every element, matched or not
4063					if ( seed ) {
4064						unmatched.push( elem );
4065					}
4066				}
4067			}
4068
4069			// `i` is now the count of elements visited above, and adding it to `matchedCount`
4070			// makes the latter nonnegative.
4071			matchedCount += i;
4072
4073			// Apply set filters to unmatched elements
4074			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
4075			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
4076			// no element matchers and no seed.
4077			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
4078			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
4079			// numerically zero.
4080			if ( bySet && i !== matchedCount ) {
4081				j = 0;
4082				while ( ( matcher = setMatchers[ j++ ] ) ) {
4083					matcher( unmatched, setMatched, context, xml );
4084				}
4085
4086				if ( seed ) {
4087
4088					// Reintegrate element matches to eliminate the need for sorting
4089					if ( matchedCount > 0 ) {
4090						while ( i-- ) {
4091							if ( !( unmatched[ i ] || setMatched[ i ] ) ) {
4092								setMatched[ i ] = pop.call( results );
4093							}
4094						}
4095					}
4096
4097					// Discard index placeholder values to get only actual matches
4098					setMatched = condense( setMatched );
4099				}
4100
4101				// Add matches to results
4102				push.apply( results, setMatched );
4103
4104				// Seedless set matches succeeding multiple successful matchers stipulate sorting
4105				if ( outermost && !seed && setMatched.length > 0 &&
4106					( matchedCount + setMatchers.length ) > 1 ) {
4107
4108					jQuery.uniqueSort( results );
4109				}
4110			}
4111
4112			// Override manipulation of globals by nested matchers
4113			if ( outermost ) {
4114				dirruns = dirrunsUnique;
4115				outermostContext = contextBackup;
4116			}
4117
4118			return unmatched;
4119		};
4120
4121	return bySet ?
4122		markFunction( superMatcher ) :
4123		superMatcher;
4124}
4125
4126function compile( selector, match /* Internal Use Only */ ) {
4127	var i,
4128		setMatchers = [],
4129		elementMatchers = [],
4130		cached = compilerCache[ selector + " " ];
4131
4132	if ( !cached ) {
4133
4134		// Generate a function of recursive functions that can be used to check each element
4135		if ( !match ) {
4136			match = tokenize( selector );
4137		}
4138		i = match.length;
4139		while ( i-- ) {
4140			cached = matcherFromTokens( match[ i ] );
4141			if ( cached[ expando ] ) {
4142				setMatchers.push( cached );
4143			} else {
4144				elementMatchers.push( cached );
4145			}
4146		}
4147
4148		// Cache the compiled function
4149		cached = compilerCache( selector,
4150			matcherFromGroupMatchers( elementMatchers, setMatchers ) );
4151
4152		// Save selector and tokenization
4153		cached.selector = selector;
4154	}
4155	return cached;
4156}
4157
4158/**
4159 * A low-level selection function that works with jQuery's compiled
4160 *  selector functions
4161 * @param {String|Function} selector A selector or a pre-compiled
4162 *  selector function built with jQuery selector compile
4163 * @param {Element} context
4164 * @param {Array} [results]
4165 * @param {Array} [seed] A set of elements to match against
4166 */
4167function select( selector, context, results, seed ) {
4168	var i, tokens, token, type, find,
4169		compiled = typeof selector === "function" && selector,
4170		match = !seed && tokenize( ( selector = compiled.selector || selector ) );
4171
4172	results = results || [];
4173
4174	// Try to minimize operations if there is only one selector in the list and no seed
4175	// (the latter of which guarantees us context)
4176	if ( match.length === 1 ) {
4177
4178		// Reduce context if the leading compound selector is an ID
4179		tokens = match[ 0 ] = match[ 0 ].slice( 0 );
4180		if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
4181				context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
4182
4183			context = ( Expr.find.ID(
4184				token.matches[ 0 ].replace( runescape, funescape ),
4185				context
4186			) || [] )[ 0 ];
4187			if ( !context ) {
4188				return results;
4189
4190			// Precompiled matchers will still verify ancestry, so step up a level
4191			} else if ( compiled ) {
4192				context = context.parentNode;
4193			}
4194
4195			selector = selector.slice( tokens.shift().value.length );
4196		}
4197
4198		// Fetch a seed set for right-to-left matching
4199		i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;
4200		while ( i-- ) {
4201			token = tokens[ i ];
4202
4203			// Abort if we hit a combinator
4204			if ( Expr.relative[ ( type = token.type ) ] ) {
4205				break;
4206			}
4207			if ( ( find = Expr.find[ type ] ) ) {
4208
4209				// Search, expanding context for leading sibling combinators
4210				if ( ( seed = find(
4211					token.matches[ 0 ].replace( runescape, funescape ),
4212					rsibling.test( tokens[ 0 ].type ) &&
4213						testContext( context.parentNode ) || context
4214				) ) ) {
4215
4216					// If seed is empty or no tokens remain, we can return early
4217					tokens.splice( i, 1 );
4218					selector = seed.length && toSelector( tokens );
4219					if ( !selector ) {
4220						push.apply( results, seed );
4221						return results;
4222					}
4223
4224					break;
4225				}
4226			}
4227		}
4228	}
4229
4230	// Compile and execute a filtering function if one is not provided
4231	// Provide `match` to avoid retokenization if we modified the selector above
4232	( compiled || compile( selector, match ) )(
4233		seed,
4234		context,
4235		!documentIsHTML,
4236		results,
4237		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
4238	);
4239	return results;
4240}
4241
4242// One-time assignments
4243
4244// Support: Android <=4.0 - 4.1+
4245// Sort stability
4246support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;
4247
4248// Initialize against the default document
4249setDocument();
4250
4251// Support: Android <=4.0 - 4.1+
4252// Detached nodes confoundingly follow *each other*
4253support.sortDetached = assert( function( el ) {
4254
4255	// Should return 1, but returns 4 (following)
4256	return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
4257} );
4258
4259jQuery.find = find;
4260
4261// Deprecated
4262jQuery.expr[ ":" ] = jQuery.expr.pseudos;
4263jQuery.unique = jQuery.uniqueSort;
4264
4265// These have always been private, but they used to be documented as part of
4266// Sizzle so let's maintain them for now for backwards compatibility purposes.
4267find.compile = compile;
4268find.select = select;
4269find.setDocument = setDocument;
4270find.tokenize = tokenize;
4271
4272find.escape = jQuery.escapeSelector;
4273find.getText = jQuery.text;
4274find.isXML = jQuery.isXMLDoc;
4275find.selectors = jQuery.expr;
4276find.support = jQuery.support;
4277find.uniqueSort = jQuery.uniqueSort;
4278
4279	/* eslint-enable */
4280
4281} )();
4282
4283
4284var dir = function( elem, dir, until ) {
4285	var matched = [],
4286		truncate = until !== undefined;
4287
4288	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
4289		if ( elem.nodeType === 1 ) {
4290			if ( truncate && jQuery( elem ).is( until ) ) {
4291				break;
4292			}
4293			matched.push( elem );
4294		}
4295	}
4296	return matched;
4297};
4298
4299
4300var siblings = function( n, elem ) {
4301	var matched = [];
4302
4303	for ( ; n; n = n.nextSibling ) {
4304		if ( n.nodeType === 1 && n !== elem ) {
4305			matched.push( n );
4306		}
4307	}
4308
4309	return matched;
4310};
4311
4312
4313var rneedsContext = jQuery.expr.match.needsContext;
4314
4315var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
4316
4317
4318
4319// Implement the identical functionality for filter and not
4320function winnow( elements, qualifier, not ) {
4321	if ( isFunction( qualifier ) ) {
4322		return jQuery.grep( elements, function( elem, i ) {
4323			return !!qualifier.call( elem, i, elem ) !== not;
4324		} );
4325	}
4326
4327	// Single element
4328	if ( qualifier.nodeType ) {
4329		return jQuery.grep( elements, function( elem ) {
4330			return ( elem === qualifier ) !== not;
4331		} );
4332	}
4333
4334	// Arraylike of elements (jQuery, arguments, Array)
4335	if ( typeof qualifier !== "string" ) {
4336		return jQuery.grep( elements, function( elem ) {
4337			return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
4338		} );
4339	}
4340
4341	// Filtered directly for both simple and complex selectors
4342	return jQuery.filter( qualifier, elements, not );
4343}
4344
4345jQuery.filter = function( expr, elems, not ) {
4346	var elem = elems[ 0 ];
4347
4348	if ( not ) {
4349		expr = ":not(" + expr + ")";
4350	}
4351
4352	if ( elems.length === 1 && elem.nodeType === 1 ) {
4353		return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
4354	}
4355
4356	return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
4357		return elem.nodeType === 1;
4358	} ) );
4359};
4360
4361jQuery.fn.extend( {
4362	find: function( selector ) {
4363		var i, ret,
4364			len = this.length,
4365			self = this;
4366
4367		if ( typeof selector !== "string" ) {
4368			return this.pushStack( jQuery( selector ).filter( function() {
4369				for ( i = 0; i < len; i++ ) {
4370					if ( jQuery.contains( self[ i ], this ) ) {
4371						return true;
4372					}
4373				}
4374			} ) );
4375		}
4376
4377		ret = this.pushStack( [] );
4378
4379		for ( i = 0; i < len; i++ ) {
4380			jQuery.find( selector, self[ i ], ret );
4381		}
4382
4383		return len > 1 ? jQuery.uniqueSort( ret ) : ret;
4384	},
4385	filter: function( selector ) {
4386		return this.pushStack( winnow( this, selector || [], false ) );
4387	},
4388	not: function( selector ) {
4389		return this.pushStack( winnow( this, selector || [], true ) );
4390	},
4391	is: function( selector ) {
4392		return !!winnow(
4393			this,
4394
4395			// If this is a positional/relative selector, check membership in the returned set
4396			// so $("p:first").is("p:last") won't return true for a doc with two "p".
4397			typeof selector === "string" && rneedsContext.test( selector ) ?
4398				jQuery( selector ) :
4399				selector || [],
4400			false
4401		).length;
4402	}
4403} );
4404
4405
4406// Initialize a jQuery object
4407
4408
4409// A central reference to the root jQuery(document)
4410var rootjQuery,
4411
4412	// A simple way to check for HTML strings
4413	// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)
4414	// Strict HTML recognition (trac-11290: must start with <)
4415	// Shortcut simple #id case for speed
4416	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
4417
4418	init = jQuery.fn.init = function( selector, context, root ) {
4419		var match, elem;
4420
4421		// HANDLE: $(""), $(null), $(undefined), $(false)
4422		if ( !selector ) {
4423			return this;
4424		}
4425
4426		// Method init() accepts an alternate rootjQuery
4427		// so migrate can support jQuery.sub (gh-2101)
4428		root = root || rootjQuery;
4429
4430		// Handle HTML strings
4431		if ( typeof selector === "string" ) {
4432			if ( selector[ 0 ] === "<" &&
4433				selector[ selector.length - 1 ] === ">" &&
4434				selector.length >= 3 ) {
4435
4436				// Assume that strings that start and end with <> are HTML and skip the regex check
4437				match = [ null, selector, null ];
4438
4439			} else {
4440				match = rquickExpr.exec( selector );
4441			}
4442
4443			// Match html or make sure no context is specified for #id
4444			if ( match && ( match[ 1 ] || !context ) ) {
4445
4446				// HANDLE: $(html) -> $(array)
4447				if ( match[ 1 ] ) {
4448					context = context instanceof jQuery ? context[ 0 ] : context;
4449
4450					// Option to run scripts is true for back-compat
4451					// Intentionally let the error be thrown if parseHTML is not present
4452					jQuery.merge( this, jQuery.parseHTML(
4453						match[ 1 ],
4454						context && context.nodeType ? context.ownerDocument || context : document,
4455						true
4456					) );
4457
4458					// HANDLE: $(html, props)
4459					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
4460						for ( match in context ) {
4461
4462							// Properties of context are called as methods if possible
4463							if ( isFunction( this[ match ] ) ) {
4464								this[ match ]( context[ match ] );
4465
4466							// ...and otherwise set as attributes
4467							} else {
4468								this.attr( match, context[ match ] );
4469							}
4470						}
4471					}
4472
4473					return this;
4474
4475				// HANDLE: $(#id)
4476				} else {
4477					elem = document.getElementById( match[ 2 ] );
4478
4479					if ( elem ) {
4480
4481						// Inject the element directly into the jQuery object
4482						this[ 0 ] = elem;
4483						this.length = 1;
4484					}
4485					return this;
4486				}
4487
4488			// HANDLE: $(expr, $(...))
4489			} else if ( !context || context.jquery ) {
4490				return ( context || root ).find( selector );
4491
4492			// HANDLE: $(expr, context)
4493			// (which is just equivalent to: $(context).find(expr)
4494			} else {
4495				return this.constructor( context ).find( selector );
4496			}
4497
4498		// HANDLE: $(DOMElement)
4499		} else if ( selector.nodeType ) {
4500			this[ 0 ] = selector;
4501			this.length = 1;
4502			return this;
4503
4504		// HANDLE: $(function)
4505		// Shortcut for document ready
4506		} else if ( isFunction( selector ) ) {
4507			return root.ready !== undefined ?
4508				root.ready( selector ) :
4509
4510				// Execute immediately if ready is not present
4511				selector( jQuery );
4512		}
4513
4514		return jQuery.makeArray( selector, this );
4515	};
4516
4517// Give the init function the jQuery prototype for later instantiation
4518init.prototype = jQuery.fn;
4519
4520// Initialize central reference
4521rootjQuery = jQuery( document );
4522
4523
4524var rparentsprev = /^(?:parents|prev(?:Until|All))/,
4525
4526	// Methods guaranteed to produce a unique set when starting from a unique set
4527	guaranteedUnique = {
4528		children: true,
4529		contents: true,
4530		next: true,
4531		prev: true
4532	};
4533
4534jQuery.fn.extend( {
4535	has: function( target ) {
4536		var targets = jQuery( target, this ),
4537			l = targets.length;
4538
4539		return this.filter( function() {
4540			var i = 0;
4541			for ( ; i < l; i++ ) {
4542				if ( jQuery.contains( this, targets[ i ] ) ) {
4543					return true;
4544				}
4545			}
4546		} );
4547	},
4548
4549	closest: function( selectors, context ) {
4550		var cur,
4551			i = 0,
4552			l = this.length,
4553			matched = [],
4554			targets = typeof selectors !== "string" && jQuery( selectors );
4555
4556		// Positional selectors never match, since there's no _selection_ context
4557		if ( !rneedsContext.test( selectors ) ) {
4558			for ( ; i < l; i++ ) {
4559				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
4560
4561					// Always skip document fragments
4562					if ( cur.nodeType < 11 && ( targets ?
4563						targets.index( cur ) > -1 :
4564
4565						// Don't pass non-elements to jQuery#find
4566						cur.nodeType === 1 &&
4567							jQuery.find.matchesSelector( cur, selectors ) ) ) {
4568
4569						matched.push( cur );
4570						break;
4571					}
4572				}
4573			}
4574		}
4575
4576		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
4577	},
4578
4579	// Determine the position of an element within the set
4580	index: function( elem ) {
4581
4582		// No argument, return index in parent
4583		if ( !elem ) {
4584			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
4585		}
4586
4587		// Index in selector
4588		if ( typeof elem === "string" ) {
4589			return indexOf.call( jQuery( elem ), this[ 0 ] );
4590		}
4591
4592		// Locate the position of the desired element
4593		return indexOf.call( this,
4594
4595			// If it receives a jQuery object, the first element is used
4596			elem.jquery ? elem[ 0 ] : elem
4597		);
4598	},
4599
4600	add: function( selector, context ) {
4601		return this.pushStack(
4602			jQuery.uniqueSort(
4603				jQuery.merge( this.get(), jQuery( selector, context ) )
4604			)
4605		);
4606	},
4607
4608	addBack: function( selector ) {
4609		return this.add( selector == null ?
4610			this.prevObject : this.prevObject.filter( selector )
4611		);
4612	}
4613} );
4614
4615function sibling( cur, dir ) {
4616	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
4617	return cur;
4618}
4619
4620jQuery.each( {
4621	parent: function( elem ) {
4622		var parent = elem.parentNode;
4623		return parent && parent.nodeType !== 11 ? parent : null;
4624	},
4625	parents: function( elem ) {
4626		return dir( elem, "parentNode" );
4627	},
4628	parentsUntil: function( elem, _i, until ) {
4629		return dir( elem, "parentNode", until );
4630	},
4631	next: function( elem ) {
4632		return sibling( elem, "nextSibling" );
4633	},
4634	prev: function( elem ) {
4635		return sibling( elem, "previousSibling" );
4636	},
4637	nextAll: function( elem ) {
4638		return dir( elem, "nextSibling" );
4639	},
4640	prevAll: function( elem ) {
4641		return dir( elem, "previousSibling" );
4642	},
4643	nextUntil: function( elem, _i, until ) {
4644		return dir( elem, "nextSibling", until );
4645	},
4646	prevUntil: function( elem, _i, until ) {
4647		return dir( elem, "previousSibling", until );
4648	},
4649	siblings: function( elem ) {
4650		return siblings( ( elem.parentNode || {} ).firstChild, elem );
4651	},
4652	children: function( elem ) {
4653		return siblings( elem.firstChild );
4654	},
4655	contents: function( elem ) {
4656		if ( elem.contentDocument != null &&
4657
4658			// Support: IE 11+
4659			// <object> elements with no `data` attribute has an object
4660			// `contentDocument` with a `null` prototype.
4661			getProto( elem.contentDocument ) ) {
4662
4663			return elem.contentDocument;
4664		}
4665
4666		// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
4667		// Treat the template element as a regular one in browsers that
4668		// don't support it.
4669		if ( nodeName( elem, "template" ) ) {
4670			elem = elem.content || elem;
4671		}
4672
4673		return jQuery.merge( [], elem.childNodes );
4674	}
4675}, function( name, fn ) {
4676	jQuery.fn[ name ] = function( until, selector ) {
4677		var matched = jQuery.map( this, fn, until );
4678
4679		if ( name.slice( -5 ) !== "Until" ) {
4680			selector = until;
4681		}
4682
4683		if ( selector && typeof selector === "string" ) {
4684			matched = jQuery.filter( selector, matched );
4685		}
4686
4687		if ( this.length > 1 ) {
4688
4689			// Remove duplicates
4690			if ( !guaranteedUnique[ name ] ) {
4691				jQuery.uniqueSort( matched );
4692			}
4693
4694			// Reverse order for parents* and prev-derivatives
4695			if ( rparentsprev.test( name ) ) {
4696				matched.reverse();
4697			}
4698		}
4699
4700		return this.pushStack( matched );
4701	};
4702} );
4703var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
4704
4705
4706
4707// Convert String-formatted options into Object-formatted ones
4708function createOptions( options ) {
4709	var object = {};
4710	jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
4711		object[ flag ] = true;
4712	} );
4713	return object;
4714}
4715
4716/*
4717 * Create a callback list using the following parameters:
4718 *
4719 *	options: an optional list of space-separated options that will change how
4720 *			the callback list behaves or a more traditional option object
4721 *
4722 * By default a callback list will act like an event callback list and can be
4723 * "fired" multiple times.
4724 *
4725 * Possible options:
4726 *
4727 *	once:			will ensure the callback list can only be fired once (like a Deferred)
4728 *
4729 *	memory:			will keep track of previous values and will call any callback added
4730 *					after the list has been fired right away with the latest "memorized"
4731 *					values (like a Deferred)
4732 *
4733 *	unique:			will ensure a callback can only be added once (no duplicate in the list)
4734 *
4735 *	stopOnFalse:	interrupt callings when a callback returns false
4736 *
4737 */
4738jQuery.Callbacks = function( options ) {
4739
4740	// Convert options from String-formatted to Object-formatted if needed
4741	// (we check in cache first)
4742	options = typeof options === "string" ?
4743		createOptions( options ) :
4744		jQuery.extend( {}, options );
4745
4746	var // Flag to know if list is currently firing
4747		firing,
4748
4749		// Last fire value for non-forgettable lists
4750		memory,
4751
4752		// Flag to know if list was already fired
4753		fired,
4754
4755		// Flag to prevent firing
4756		locked,
4757
4758		// Actual callback list
4759		list = [],
4760
4761		// Queue of execution data for repeatable lists
4762		queue = [],
4763
4764		// Index of currently firing callback (modified by add/remove as needed)
4765		firingIndex = -1,
4766
4767		// Fire callbacks
4768		fire = function() {
4769
4770			// Enforce single-firing
4771			locked = locked || options.once;
4772
4773			// Execute callbacks for all pending executions,
4774			// respecting firingIndex overrides and runtime changes
4775			fired = firing = true;
4776			for ( ; queue.length; firingIndex = -1 ) {
4777				memory = queue.shift();
4778				while ( ++firingIndex < list.length ) {
4779
4780					// Run callback and check for early termination
4781					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
4782						options.stopOnFalse ) {
4783
4784						// Jump to end and forget the data so .add doesn't re-fire
4785						firingIndex = list.length;
4786						memory = false;
4787					}
4788				}
4789			}
4790
4791			// Forget the data if we're done with it
4792			if ( !options.memory ) {
4793				memory = false;
4794			}
4795
4796			firing = false;
4797
4798			// Clean up if we're done firing for good
4799			if ( locked ) {
4800
4801				// Keep an empty list if we have data for future add calls
4802				if ( memory ) {
4803					list = [];
4804
4805				// Otherwise, this object is spent
4806				} else {
4807					list = "";
4808				}
4809			}
4810		},
4811
4812		// Actual Callbacks object
4813		self = {
4814
4815			// Add a callback or a collection of callbacks to the list
4816			add: function() {
4817				if ( list ) {
4818
4819					// If we have memory from a past run, we should fire after adding
4820					if ( memory && !firing ) {
4821						firingIndex = list.length - 1;
4822						queue.push( memory );
4823					}
4824
4825					( function add( args ) {
4826						jQuery.each( args, function( _, arg ) {
4827							if ( isFunction( arg ) ) {
4828								if ( !options.unique || !self.has( arg ) ) {
4829									list.push( arg );
4830								}
4831							} else if ( arg && arg.length && toType( arg ) !== "string" ) {
4832
4833								// Inspect recursively
4834								add( arg );
4835							}
4836						} );
4837					} )( arguments );
4838
4839					if ( memory && !firing ) {
4840						fire();
4841					}
4842				}
4843				return this;
4844			},
4845
4846			// Remove a callback from the list
4847			remove: function() {
4848				jQuery.each( arguments, function( _, arg ) {
4849					var index;
4850					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
4851						list.splice( index, 1 );
4852
4853						// Handle firing indexes
4854						if ( index <= firingIndex ) {
4855							firingIndex--;
4856						}
4857					}
4858				} );
4859				return this;
4860			},
4861
4862			// Check if a given callback is in the list.
4863			// If no argument is given, return whether or not list has callbacks attached.
4864			has: function( fn ) {
4865				return fn ?
4866					jQuery.inArray( fn, list ) > -1 :
4867					list.length > 0;
4868			},
4869
4870			// Remove all callbacks from the list
4871			empty: function() {
4872				if ( list ) {
4873					list = [];
4874				}
4875				return this;
4876			},
4877
4878			// Disable .fire and .add
4879			// Abort any current/pending executions
4880			// Clear all callbacks and values
4881			disable: function() {
4882				locked = queue = [];
4883				list = memory = "";
4884				return this;
4885			},
4886			disabled: function() {
4887				return !list;
4888			},
4889
4890			// Disable .fire
4891			// Also disable .add unless we have memory (since it would have no effect)
4892			// Abort any pending executions
4893			lock: function() {
4894				locked = queue = [];
4895				if ( !memory && !firing ) {
4896					list = memory = "";
4897				}
4898				return this;
4899			},
4900			locked: function() {
4901				return !!locked;
4902			},
4903
4904			// Call all callbacks with the given context and arguments
4905			fireWith: function( context, args ) {
4906				if ( !locked ) {
4907					args = args || [];
4908					args = [ context, args.slice ? args.slice() : args ];
4909					queue.push( args );
4910					if ( !firing ) {
4911						fire();
4912					}
4913				}
4914				return this;
4915			},
4916
4917			// Call all the callbacks with the given arguments
4918			fire: function() {
4919				self.fireWith( this, arguments );
4920				return this;
4921			},
4922
4923			// To know if the callbacks have already been called at least once
4924			fired: function() {
4925				return !!fired;
4926			}
4927		};
4928
4929	return self;
4930};
4931
4932
4933function Identity( v ) {
4934	return v;
4935}
4936function Thrower( ex ) {
4937	throw ex;
4938}
4939
4940function adoptValue( value, resolve, reject, noValue ) {
4941	var method;
4942
4943	try {
4944
4945		// Check for promise aspect first to privilege synchronous behavior
4946		if ( value && isFunction( ( method = value.promise ) ) ) {
4947			method.call( value ).done( resolve ).fail( reject );
4948
4949		// Other thenables
4950		} else if ( value && isFunction( ( method = value.then ) ) ) {
4951			method.call( value, resolve, reject );
4952
4953		// Other non-thenables
4954		} else {
4955
4956			// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
4957			// * false: [ value ].slice( 0 ) => resolve( value )
4958			// * true: [ value ].slice( 1 ) => resolve()
4959			resolve.apply( undefined, [ value ].slice( noValue ) );
4960		}
4961
4962	// For Promises/A+, convert exceptions into rejections
4963	// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
4964	// Deferred#then to conditionally suppress rejection.
4965	} catch ( value ) {
4966
4967		// Support: Android 4.0 only
4968		// Strict mode functions invoked without .call/.apply get global-object context
4969		reject.apply( undefined, [ value ] );
4970	}
4971}
4972
4973jQuery.extend( {
4974
4975	Deferred: function( func ) {
4976		var tuples = [
4977
4978				// action, add listener, callbacks,
4979				// ... .then handlers, argument index, [final state]
4980				[ "notify", "progress", jQuery.Callbacks( "memory" ),
4981					jQuery.Callbacks( "memory" ), 2 ],
4982				[ "resolve", "done", jQuery.Callbacks( "once memory" ),
4983					jQuery.Callbacks( "once memory" ), 0, "resolved" ],
4984				[ "reject", "fail", jQuery.Callbacks( "once memory" ),
4985					jQuery.Callbacks( "once memory" ), 1, "rejected" ]
4986			],
4987			state = "pending",
4988			promise = {
4989				state: function() {
4990					return state;
4991				},
4992				always: function() {
4993					deferred.done( arguments ).fail( arguments );
4994					return this;
4995				},
4996				"catch": function( fn ) {
4997					return promise.then( null, fn );
4998				},
4999
5000				// Keep pipe for back-compat
5001				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
5002					var fns = arguments;
5003
5004					return jQuery.Deferred( function( newDefer ) {
5005						jQuery.each( tuples, function( _i, tuple ) {
5006
5007							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
5008							var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
5009
5010							// deferred.progress(function() { bind to newDefer or newDefer.notify })
5011							// deferred.done(function() { bind to newDefer or newDefer.resolve })
5012							// deferred.fail(function() { bind to newDefer or newDefer.reject })
5013							deferred[ tuple[ 1 ] ]( function() {
5014								var returned = fn && fn.apply( this, arguments );
5015								if ( returned && isFunction( returned.promise ) ) {
5016									returned.promise()
5017										.progress( newDefer.notify )
5018										.done( newDefer.resolve )
5019										.fail( newDefer.reject );
5020								} else {
5021									newDefer[ tuple[ 0 ] + "With" ](
5022										this,
5023										fn ? [ returned ] : arguments
5024									);
5025								}
5026							} );
5027						} );
5028						fns = null;
5029					} ).promise();
5030				},
5031				then: function( onFulfilled, onRejected, onProgress ) {
5032					var maxDepth = 0;
5033					function resolve( depth, deferred, handler, special ) {
5034						return function() {
5035							var that = this,
5036								args = arguments,
5037								mightThrow = function() {
5038									var returned, then;
5039
5040									// Support: Promises/A+ section 2.3.3.3.3
5041									// https://promisesaplus.com/#point-59
5042									// Ignore double-resolution attempts
5043									if ( depth < maxDepth ) {
5044										return;
5045									}
5046
5047									returned = handler.apply( that, args );
5048
5049									// Support: Promises/A+ section 2.3.1
5050									// https://promisesaplus.com/#point-48
5051									if ( returned === deferred.promise() ) {
5052										throw new TypeError( "Thenable self-resolution" );
5053									}
5054
5055									// Support: Promises/A+ sections 2.3.3.1, 3.5
5056									// https://promisesaplus.com/#point-54
5057									// https://promisesaplus.com/#point-75
5058									// Retrieve `then` only once
5059									then = returned &&
5060
5061										// Support: Promises/A+ section 2.3.4
5062										// https://promisesaplus.com/#point-64
5063										// Only check objects and functions for thenability
5064										( typeof returned === "object" ||
5065											typeof returned === "function" ) &&
5066										returned.then;
5067
5068									// Handle a returned thenable
5069									if ( isFunction( then ) ) {
5070
5071										// Special processors (notify) just wait for resolution
5072										if ( special ) {
5073											then.call(
5074												returned,
5075												resolve( maxDepth, deferred, Identity, special ),
5076												resolve( maxDepth, deferred, Thrower, special )
5077											);
5078
5079										// Normal processors (resolve) also hook into progress
5080										} else {
5081
5082											// ...and disregard older resolution values
5083											maxDepth++;
5084
5085											then.call(
5086												returned,
5087												resolve( maxDepth, deferred, Identity, special ),
5088												resolve( maxDepth, deferred, Thrower, special ),
5089												resolve( maxDepth, deferred, Identity,
5090													deferred.notifyWith )
5091											);
5092										}
5093
5094									// Handle all other returned values
5095									} else {
5096
5097										// Only substitute handlers pass on context
5098										// and multiple values (non-spec behavior)
5099										if ( handler !== Identity ) {
5100											that = undefined;
5101											args = [ returned ];
5102										}
5103
5104										// Process the value(s)
5105										// Default process is resolve
5106										( special || deferred.resolveWith )( that, args );
5107									}
5108								},
5109
5110								// Only normal processors (resolve) catch and reject exceptions
5111								process = special ?
5112									mightThrow :
5113									function() {
5114										try {
5115											mightThrow();
5116										} catch ( e ) {
5117
5118											if ( jQuery.Deferred.exceptionHook ) {
5119												jQuery.Deferred.exceptionHook( e,
5120													process.error );
5121											}
5122
5123											// Support: Promises/A+ section 2.3.3.3.4.1
5124											// https://promisesaplus.com/#point-61
5125											// Ignore post-resolution exceptions
5126											if ( depth + 1 >= maxDepth ) {
5127
5128												// Only substitute handlers pass on context
5129												// and multiple values (non-spec behavior)
5130												if ( handler !== Thrower ) {
5131													that = undefined;
5132													args = [ e ];
5133												}
5134
5135												deferred.rejectWith( that, args );
5136											}
5137										}
5138									};
5139
5140							// Support: Promises/A+ section 2.3.3.3.1
5141							// https://promisesaplus.com/#point-57
5142							// Re-resolve promises immediately to dodge false rejection from
5143							// subsequent errors
5144							if ( depth ) {
5145								process();
5146							} else {
5147
5148								// Call an optional hook to record the error, in case of exception
5149								// since it's otherwise lost when execution goes async
5150								if ( jQuery.Deferred.getErrorHook ) {
5151									process.error = jQuery.Deferred.getErrorHook();
5152
5153								// The deprecated alias of the above. While the name suggests
5154								// returning the stack, not an error instance, jQuery just passes
5155								// it directly to `console.warn` so both will work; an instance
5156								// just better cooperates with source maps.
5157								} else if ( jQuery.Deferred.getStackHook ) {
5158									process.error = jQuery.Deferred.getStackHook();
5159								}
5160								window.setTimeout( process );
5161							}
5162						};
5163					}
5164
5165					return jQuery.Deferred( function( newDefer ) {
5166
5167						// progress_handlers.add( ... )
5168						tuples[ 0 ][ 3 ].add(
5169							resolve(
5170								0,
5171								newDefer,
5172								isFunction( onProgress ) ?
5173									onProgress :
5174									Identity,
5175								newDefer.notifyWith
5176							)
5177						);
5178
5179						// fulfilled_handlers.add( ... )
5180						tuples[ 1 ][ 3 ].add(
5181							resolve(
5182								0,
5183								newDefer,
5184								isFunction( onFulfilled ) ?
5185									onFulfilled :
5186									Identity
5187							)
5188						);
5189
5190						// rejected_handlers.add( ... )
5191						tuples[ 2 ][ 3 ].add(
5192							resolve(
5193								0,
5194								newDefer,
5195								isFunction( onRejected ) ?
5196									onRejected :
5197									Thrower
5198							)
5199						);
5200					} ).promise();
5201				},
5202
5203				// Get a promise for this deferred
5204				// If obj is provided, the promise aspect is added to the object
5205				promise: function( obj ) {
5206					return obj != null ? jQuery.extend( obj, promise ) : promise;
5207				}
5208			},
5209			deferred = {};
5210
5211		// Add list-specific methods
5212		jQuery.each( tuples, function( i, tuple ) {
5213			var list = tuple[ 2 ],
5214				stateString = tuple[ 5 ];
5215
5216			// promise.progress = list.add
5217			// promise.done = list.add
5218			// promise.fail = list.add
5219			promise[ tuple[ 1 ] ] = list.add;
5220
5221			// Handle state
5222			if ( stateString ) {
5223				list.add(
5224					function() {
5225
5226						// state = "resolved" (i.e., fulfilled)
5227						// state = "rejected"
5228						state = stateString;
5229					},
5230
5231					// rejected_callbacks.disable
5232					// fulfilled_callbacks.disable
5233					tuples[ 3 - i ][ 2 ].disable,
5234
5235					// rejected_handlers.disable
5236					// fulfilled_handlers.disable
5237					tuples[ 3 - i ][ 3 ].disable,
5238
5239					// progress_callbacks.lock
5240					tuples[ 0 ][ 2 ].lock,
5241
5242					// progress_handlers.lock
5243					tuples[ 0 ][ 3 ].lock
5244				);
5245			}
5246
5247			// progress_handlers.fire
5248			// fulfilled_handlers.fire
5249			// rejected_handlers.fire
5250			list.add( tuple[ 3 ].fire );
5251
5252			// deferred.notify = function() { deferred.notifyWith(...) }
5253			// deferred.resolve = function() { deferred.resolveWith(...) }
5254			// deferred.reject = function() { deferred.rejectWith(...) }
5255			deferred[ tuple[ 0 ] ] = function() {
5256				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
5257				return this;
5258			};
5259
5260			// deferred.notifyWith = list.fireWith
5261			// deferred.resolveWith = list.fireWith
5262			// deferred.rejectWith = list.fireWith
5263			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
5264		} );
5265
5266		// Make the deferred a promise
5267		promise.promise( deferred );
5268
5269		// Call given func if any
5270		if ( func ) {
5271			func.call( deferred, deferred );
5272		}
5273
5274		// All done!
5275		return deferred;
5276	},
5277
5278	// Deferred helper
5279	when: function( singleValue ) {
5280		var
5281
5282			// count of uncompleted subordinates
5283			remaining = arguments.length,
5284
5285			// count of unprocessed arguments
5286			i = remaining,
5287
5288			// subordinate fulfillment data
5289			resolveContexts = Array( i ),
5290			resolveValues = slice.call( arguments ),
5291
5292			// the primary Deferred
5293			primary = jQuery.Deferred(),
5294
5295			// subordinate callback factory
5296			updateFunc = function( i ) {
5297				return function( value ) {
5298					resolveContexts[ i ] = this;
5299					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
5300					if ( !( --remaining ) ) {
5301						primary.resolveWith( resolveContexts, resolveValues );
5302					}
5303				};
5304			};
5305
5306		// Single- and empty arguments are adopted like Promise.resolve
5307		if ( remaining <= 1 ) {
5308			adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,
5309				!remaining );
5310
5311			// Use .then() to unwrap secondary thenables (cf. gh-3000)
5312			if ( primary.state() === "pending" ||
5313				isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
5314
5315				return primary.then();
5316			}
5317		}
5318
5319		// Multiple arguments are aggregated like Promise.all array elements
5320		while ( i-- ) {
5321			adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );
5322		}
5323
5324		return primary.promise();
5325	}
5326} );
5327
5328
5329// These usually indicate a programmer mistake during development,
5330// warn about them ASAP rather than swallowing them by default.
5331var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
5332
5333// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error
5334// captured before the async barrier to get the original error cause
5335// which may otherwise be hidden.
5336jQuery.Deferred.exceptionHook = function( error, asyncError ) {
5337
5338	// Support: IE 8 - 9 only
5339	// Console exists when dev tools are open, which can happen at any time
5340	if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
5341		window.console.warn( "jQuery.Deferred exception: " + error.message,
5342			error.stack, asyncError );
5343	}
5344};
5345
5346
5347
5348
5349jQuery.readyException = function( error ) {
5350	window.setTimeout( function() {
5351		throw error;
5352	} );
5353};
5354
5355
5356
5357
5358// The deferred used on DOM ready
5359var readyList = jQuery.Deferred();
5360
5361jQuery.fn.ready = function( fn ) {
5362
5363	readyList
5364		.then( fn )
5365
5366		// Wrap jQuery.readyException in a function so that the lookup
5367		// happens at the time of error handling instead of callback
5368		// registration.
5369		.catch( function( error ) {
5370			jQuery.readyException( error );
5371		} );
5372
5373	return this;
5374};
5375
5376jQuery.extend( {
5377
5378	// Is the DOM ready to be used? Set to true once it occurs.
5379	isReady: false,
5380
5381	// A counter to track how many items to wait for before
5382	// the ready event fires. See trac-6781
5383	readyWait: 1,
5384
5385	// Handle when the DOM is ready
5386	ready: function( wait ) {
5387
5388		// Abort if there are pending holds or we're already ready
5389		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
5390			return;
5391		}
5392
5393		// Remember that the DOM is ready
5394		jQuery.isReady = true;
5395
5396		// If a normal DOM Ready event fired, decrement, and wait if need be
5397		if ( wait !== true && --jQuery.readyWait > 0 ) {
5398			return;
5399		}
5400
5401		// If there are functions bound, to execute
5402		readyList.resolveWith( document, [ jQuery ] );
5403	}
5404} );
5405
5406jQuery.ready.then = readyList.then;
5407
5408// The ready event handler and self cleanup method
5409function completed() {
5410	document.removeEventListener( "DOMContentLoaded", completed );
5411	window.removeEventListener( "load", completed );
5412	jQuery.ready();
5413}
5414
5415// Catch cases where $(document).ready() is called
5416// after the browser event has already occurred.
5417// Support: IE <=9 - 10 only
5418// Older IE sometimes signals "interactive" too soon
5419if ( document.readyState === "complete" ||
5420	( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
5421
5422	// Handle it asynchronously to allow scripts the opportunity to delay ready
5423	window.setTimeout( jQuery.ready );
5424
5425} else {
5426
5427	// Use the handy event callback
5428	document.addEventListener( "DOMContentLoaded", completed );
5429
5430	// A fallback to window.onload, that will always work
5431	window.addEventListener( "load", completed );
5432}
5433
5434
5435
5436
5437// Multifunctional method to get and set values of a collection
5438// The value/s can optionally be executed if it's a function
5439var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
5440	var i = 0,
5441		len = elems.length,
5442		bulk = key == null;
5443
5444	// Sets many values
5445	if ( toType( key ) === "object" ) {
5446		chainable = true;
5447		for ( i in key ) {
5448			access( elems, fn, i, key[ i ], true, emptyGet, raw );
5449		}
5450
5451	// Sets one value
5452	} else if ( value !== undefined ) {
5453		chainable = true;
5454
5455		if ( !isFunction( value ) ) {
5456			raw = true;
5457		}
5458
5459		if ( bulk ) {
5460
5461			// Bulk operations run against the entire set
5462			if ( raw ) {
5463				fn.call( elems, value );
5464				fn = null;
5465
5466			// ...except when executing function values
5467			} else {
5468				bulk = fn;
5469				fn = function( elem, _key, value ) {
5470					return bulk.call( jQuery( elem ), value );
5471				};
5472			}
5473		}
5474
5475		if ( fn ) {
5476			for ( ; i < len; i++ ) {
5477				fn(
5478					elems[ i ], key, raw ?
5479						value :
5480						value.call( elems[ i ], i, fn( elems[ i ], key ) )
5481				);
5482			}
5483		}
5484	}
5485
5486	if ( chainable ) {
5487		return elems;
5488	}
5489
5490	// Gets
5491	if ( bulk ) {
5492		return fn.call( elems );
5493	}
5494
5495	return len ? fn( elems[ 0 ], key ) : emptyGet;
5496};
5497
5498
5499// Matches dashed string for camelizing
5500var rmsPrefix = /^-ms-/,
5501	rdashAlpha = /-([a-z])/g;
5502
5503// Used by camelCase as callback to replace()
5504function fcamelCase( _all, letter ) {
5505	return letter.toUpperCase();
5506}
5507
5508// Convert dashed to camelCase; used by the css and data modules
5509// Support: IE <=9 - 11, Edge 12 - 15
5510// Microsoft forgot to hump their vendor prefix (trac-9572)
5511function camelCase( string ) {
5512	return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
5513}
5514var acceptData = function( owner ) {
5515
5516	// Accepts only:
5517	//  - Node
5518	//    - Node.ELEMENT_NODE
5519	//    - Node.DOCUMENT_NODE
5520	//  - Object
5521	//    - Any
5522	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
5523};
5524
5525
5526
5527
5528function Data() {
5529	this.expando = jQuery.expando + Data.uid++;
5530}
5531
5532Data.uid = 1;
5533
5534Data.prototype = {
5535
5536	cache: function( owner ) {
5537
5538		// Check if the owner object already has a cache
5539		var value = owner[ this.expando ];
5540
5541		// If not, create one
5542		if ( !value ) {
5543			value = {};
5544
5545			// We can accept data for non-element nodes in modern browsers,
5546			// but we should not, see trac-8335.
5547			// Always return an empty object.
5548			if ( acceptData( owner ) ) {
5549
5550				// If it is a node unlikely to be stringify-ed or looped over
5551				// use plain assignment
5552				if ( owner.nodeType ) {
5553					owner[ this.expando ] = value;
5554
5555				// Otherwise secure it in a non-enumerable property
5556				// configurable must be true to allow the property to be
5557				// deleted when data is removed
5558				} else {
5559					Object.defineProperty( owner, this.expando, {
5560						value: value,
5561						configurable: true
5562					} );
5563				}
5564			}
5565		}
5566
5567		return value;
5568	},
5569	set: function( owner, data, value ) {
5570		var prop,
5571			cache = this.cache( owner );
5572
5573		// Handle: [ owner, key, value ] args
5574		// Always use camelCase key (gh-2257)
5575		if ( typeof data === "string" ) {
5576			cache[ camelCase( data ) ] = value;
5577
5578		// Handle: [ owner, { properties } ] args
5579		} else {
5580
5581			// Copy the properties one-by-one to the cache object
5582			for ( prop in data ) {
5583				cache[ camelCase( prop ) ] = data[ prop ];
5584			}
5585		}
5586		return cache;
5587	},
5588	get: function( owner, key ) {
5589		return key === undefined ?
5590			this.cache( owner ) :
5591
5592			// Always use camelCase key (gh-2257)
5593			owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
5594	},
5595	access: function( owner, key, value ) {
5596
5597		// In cases where either:
5598		//
5599		//   1. No key was specified
5600		//   2. A string key was specified, but no value provided
5601		//
5602		// Take the "read" path and allow the get method to determine
5603		// which value to return, respectively either:
5604		//
5605		//   1. The entire cache object
5606		//   2. The data stored at the key
5607		//
5608		if ( key === undefined ||
5609				( ( key && typeof key === "string" ) && value === undefined ) ) {
5610
5611			return this.get( owner, key );
5612		}
5613
5614		// When the key is not a string, or both a key and value
5615		// are specified, set or extend (existing objects) with either:
5616		//
5617		//   1. An object of properties
5618		//   2. A key and value
5619		//
5620		this.set( owner, key, value );
5621
5622		// Since the "set" path can have two possible entry points
5623		// return the expected data based on which path was taken[*]
5624		return value !== undefined ? value : key;
5625	},
5626	remove: function( owner, key ) {
5627		var i,
5628			cache = owner[ this.expando ];
5629
5630		if ( cache === undefined ) {
5631			return;
5632		}
5633
5634		if ( key !== undefined ) {
5635
5636			// Support array or space separated string of keys
5637			if ( Array.isArray( key ) ) {
5638
5639				// If key is an array of keys...
5640				// We always set camelCase keys, so remove that.
5641				key = key.map( camelCase );
5642			} else {
5643				key = camelCase( key );
5644
5645				// If a key with the spaces exists, use it.
5646				// Otherwise, create an array by matching non-whitespace
5647				key = key in cache ?
5648					[ key ] :
5649					( key.match( rnothtmlwhite ) || [] );
5650			}
5651
5652			i = key.length;
5653
5654			while ( i-- ) {
5655				delete cache[ key[ i ] ];
5656			}
5657		}
5658
5659		// Remove the expando if there's no more data
5660		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
5661
5662			// Support: Chrome <=35 - 45
5663			// Webkit & Blink performance suffers when deleting properties
5664			// from DOM nodes, so set to undefined instead
5665			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
5666			if ( owner.nodeType ) {
5667				owner[ this.expando ] = undefined;
5668			} else {
5669				delete owner[ this.expando ];
5670			}
5671		}
5672	},
5673	hasData: function( owner ) {
5674		var cache = owner[ this.expando ];
5675		return cache !== undefined && !jQuery.isEmptyObject( cache );
5676	}
5677};
5678var dataPriv = new Data();
5679
5680var dataUser = new Data();
5681
5682
5683
5684//	Implementation Summary
5685//
5686//	1. Enforce API surface and semantic compatibility with 1.9.x branch
5687//	2. Improve the module's maintainability by reducing the storage
5688//		paths to a single mechanism.
5689//	3. Use the same single mechanism to support "private" and "user" data.
5690//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
5691//	5. Avoid exposing implementation details on user objects (eg. expando properties)
5692//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
5693
5694var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
5695	rmultiDash = /[A-Z]/g;
5696
5697function getData( data ) {
5698	if ( data === "true" ) {
5699		return true;
5700	}
5701
5702	if ( data === "false" ) {
5703		return false;
5704	}
5705
5706	if ( data === "null" ) {
5707		return null;
5708	}
5709
5710	// Only convert to a number if it doesn't change the string
5711	if ( data === +data + "" ) {
5712		return +data;
5713	}
5714
5715	if ( rbrace.test( data ) ) {
5716		return JSON.parse( data );
5717	}
5718
5719	return data;
5720}
5721
5722function dataAttr( elem, key, data ) {
5723	var name;
5724
5725	// If nothing was found internally, try to fetch any
5726	// data from the HTML5 data-* attribute
5727	if ( data === undefined && elem.nodeType === 1 ) {
5728		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
5729		data = elem.getAttribute( name );
5730
5731		if ( typeof data === "string" ) {
5732			try {
5733				data = getData( data );
5734			} catch ( e ) {}
5735
5736			// Make sure we set the data so it isn't changed later
5737			dataUser.set( elem, key, data );
5738		} else {
5739			data = undefined;
5740		}
5741	}
5742	return data;
5743}
5744
5745jQuery.extend( {
5746	hasData: function( elem ) {
5747		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
5748	},
5749
5750	data: function( elem, name, data ) {
5751		return dataUser.access( elem, name, data );
5752	},
5753
5754	removeData: function( elem, name ) {
5755		dataUser.remove( elem, name );
5756	},
5757
5758	// TODO: Now that all calls to _data and _removeData have been replaced
5759	// with direct calls to dataPriv methods, these can be deprecated.
5760	_data: function( elem, name, data ) {
5761		return dataPriv.access( elem, name, data );
5762	},
5763
5764	_removeData: function( elem, name ) {
5765		dataPriv.remove( elem, name );
5766	}
5767} );
5768
5769jQuery.fn.extend( {
5770	data: function( key, value ) {
5771		var i, name, data,
5772			elem = this[ 0 ],
5773			attrs = elem && elem.attributes;
5774
5775		// Gets all values
5776		if ( key === undefined ) {
5777			if ( this.length ) {
5778				data = dataUser.get( elem );
5779
5780				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
5781					i = attrs.length;
5782					while ( i-- ) {
5783
5784						// Support: IE 11 only
5785						// The attrs elements can be null (trac-14894)
5786						if ( attrs[ i ] ) {
5787							name = attrs[ i ].name;
5788							if ( name.indexOf( "data-" ) === 0 ) {
5789								name = camelCase( name.slice( 5 ) );
5790								dataAttr( elem, name, data[ name ] );
5791							}
5792						}
5793					}
5794					dataPriv.set( elem, "hasDataAttrs", true );
5795				}
5796			}
5797
5798			return data;
5799		}
5800
5801		// Sets multiple values
5802		if ( typeof key === "object" ) {
5803			return this.each( function() {
5804				dataUser.set( this, key );
5805			} );
5806		}
5807
5808		return access( this, function( value ) {
5809			var data;
5810
5811			// The calling jQuery object (element matches) is not empty
5812			// (and therefore has an element appears at this[ 0 ]) and the
5813			// `value` parameter was not undefined. An empty jQuery object
5814			// will result in `undefined` for elem = this[ 0 ] which will
5815			// throw an exception if an attempt to read a data cache is made.
5816			if ( elem && value === undefined ) {
5817
5818				// Attempt to get data from the cache
5819				// The key will always be camelCased in Data
5820				data = dataUser.get( elem, key );
5821				if ( data !== undefined ) {
5822					return data;
5823				}
5824
5825				// Attempt to "discover" the data in
5826				// HTML5 custom data-* attrs
5827				data = dataAttr( elem, key );
5828				if ( data !== undefined ) {
5829					return data;
5830				}
5831
5832				// We tried really hard, but the data doesn't exist.
5833				return;
5834			}
5835
5836			// Set the data...
5837			this.each( function() {
5838
5839				// We always store the camelCased key
5840				dataUser.set( this, key, value );
5841			} );
5842		}, null, value, arguments.length > 1, null, true );
5843	},
5844
5845	removeData: function( key ) {
5846		return this.each( function() {
5847			dataUser.remove( this, key );
5848		} );
5849	}
5850} );
5851
5852
5853jQuery.extend( {
5854	queue: function( elem, type, data ) {
5855		var queue;
5856
5857		if ( elem ) {
5858			type = ( type || "fx" ) + "queue";
5859			queue = dataPriv.get( elem, type );
5860
5861			// Speed up dequeue by getting out quickly if this is just a lookup
5862			if ( data ) {
5863				if ( !queue || Array.isArray( data ) ) {
5864					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
5865				} else {
5866					queue.push( data );
5867				}
5868			}
5869			return queue || [];
5870		}
5871	},
5872
5873	dequeue: function( elem, type ) {
5874		type = type || "fx";
5875
5876		var queue = jQuery.queue( elem, type ),
5877			startLength = queue.length,
5878			fn = queue.shift(),
5879			hooks = jQuery._queueHooks( elem, type ),
5880			next = function() {
5881				jQuery.dequeue( elem, type );
5882			};
5883
5884		// If the fx queue is dequeued, always remove the progress sentinel
5885		if ( fn === "inprogress" ) {
5886			fn = queue.shift();
5887			startLength--;
5888		}
5889
5890		if ( fn ) {
5891
5892			// Add a progress sentinel to prevent the fx queue from being
5893			// automatically dequeued
5894			if ( type === "fx" ) {
5895				queue.unshift( "inprogress" );
5896			}
5897
5898			// Clear up the last queue stop function
5899			delete hooks.stop;
5900			fn.call( elem, next, hooks );
5901		}
5902
5903		if ( !startLength && hooks ) {
5904			hooks.empty.fire();
5905		}
5906	},
5907
5908	// Not public - generate a queueHooks object, or return the current one
5909	_queueHooks: function( elem, type ) {
5910		var key = type + "queueHooks";
5911		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
5912			empty: jQuery.Callbacks( "once memory" ).add( function() {
5913				dataPriv.remove( elem, [ type + "queue", key ] );
5914			} )
5915		} );
5916	}
5917} );
5918
5919jQuery.fn.extend( {
5920	queue: function( type, data ) {
5921		var setter = 2;
5922
5923		if ( typeof type !== "string" ) {
5924			data = type;
5925			type = "fx";
5926			setter--;
5927		}
5928
5929		if ( arguments.length < setter ) {
5930			return jQuery.queue( this[ 0 ], type );
5931		}
5932
5933		return data === undefined ?
5934			this :
5935			this.each( function() {
5936				var queue = jQuery.queue( this, type, data );
5937
5938				// Ensure a hooks for this queue
5939				jQuery._queueHooks( this, type );
5940
5941				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
5942					jQuery.dequeue( this, type );
5943				}
5944			} );
5945	},
5946	dequeue: function( type ) {
5947		return this.each( function() {
5948			jQuery.dequeue( this, type );
5949		} );
5950	},
5951	clearQueue: function( type ) {
5952		return this.queue( type || "fx", [] );
5953	},
5954
5955	// Get a promise resolved when queues of a certain type
5956	// are emptied (fx is the type by default)
5957	promise: function( type, obj ) {
5958		var tmp,
5959			count = 1,
5960			defer = jQuery.Deferred(),
5961			elements = this,
5962			i = this.length,
5963			resolve = function() {
5964				if ( !( --count ) ) {
5965					defer.resolveWith( elements, [ elements ] );
5966				}
5967			};
5968
5969		if ( typeof type !== "string" ) {
5970			obj = type;
5971			type = undefined;
5972		}
5973		type = type || "fx";
5974
5975		while ( i-- ) {
5976			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
5977			if ( tmp && tmp.empty ) {
5978				count++;
5979				tmp.empty.add( resolve );
5980			}
5981		}
5982		resolve();
5983		return defer.promise( obj );
5984	}
5985} );
5986var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
5987
5988var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
5989
5990
5991var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
5992
5993var documentElement = document.documentElement;
5994
5995
5996
5997	var isAttached = function( elem ) {
5998			return jQuery.contains( elem.ownerDocument, elem );
5999		},
6000		composed = { composed: true };
6001
6002	// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
6003	// Check attachment across shadow DOM boundaries when possible (gh-3504)
6004	// Support: iOS 10.0-10.2 only
6005	// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
6006	// leading to errors. We need to check for `getRootNode`.
6007	if ( documentElement.getRootNode ) {
6008		isAttached = function( elem ) {
6009			return jQuery.contains( elem.ownerDocument, elem ) ||
6010				elem.getRootNode( composed ) === elem.ownerDocument;
6011		};
6012	}
6013var isHiddenWithinTree = function( elem, el ) {
6014
6015		// isHiddenWithinTree might be called from jQuery#filter function;
6016		// in that case, element will be second argument
6017		elem = el || elem;
6018
6019		// Inline style trumps all
6020		return elem.style.display === "none" ||
6021			elem.style.display === "" &&
6022
6023			// Otherwise, check computed style
6024			// Support: Firefox <=43 - 45
6025			// Disconnected elements can have computed display: none, so first confirm that elem is
6026			// in the document.
6027			isAttached( elem ) &&
6028
6029			jQuery.css( elem, "display" ) === "none";
6030	};
6031
6032
6033
6034function adjustCSS( elem, prop, valueParts, tween ) {
6035	var adjusted, scale,
6036		maxIterations = 20,
6037		currentValue = tween ?
6038			function() {
6039				return tween.cur();
6040			} :
6041			function() {
6042				return jQuery.css( elem, prop, "" );
6043			},
6044		initial = currentValue(),
6045		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
6046
6047		// Starting value computation is required for potential unit mismatches
6048		initialInUnit = elem.nodeType &&
6049			( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
6050			rcssNum.exec( jQuery.css( elem, prop ) );
6051
6052	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
6053
6054		// Support: Firefox <=54
6055		// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
6056		initial = initial / 2;
6057
6058		// Trust units reported by jQuery.css
6059		unit = unit || initialInUnit[ 3 ];
6060
6061		// Iteratively approximate from a nonzero starting point
6062		initialInUnit = +initial || 1;
6063
6064		while ( maxIterations-- ) {
6065
6066			// Evaluate and update our best guess (doubling guesses that zero out).
6067			// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
6068			jQuery.style( elem, prop, initialInUnit + unit );
6069			if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
6070				maxIterations = 0;
6071			}
6072			initialInUnit = initialInUnit / scale;
6073
6074		}
6075
6076		initialInUnit = initialInUnit * 2;
6077		jQuery.style( elem, prop, initialInUnit + unit );
6078
6079		// Make sure we update the tween properties later on
6080		valueParts = valueParts || [];
6081	}
6082
6083	if ( valueParts ) {
6084		initialInUnit = +initialInUnit || +initial || 0;
6085
6086		// Apply relative offset (+=/-=) if specified
6087		adjusted = valueParts[ 1 ] ?
6088			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
6089			+valueParts[ 2 ];
6090		if ( tween ) {
6091			tween.unit = unit;
6092			tween.start = initialInUnit;
6093			tween.end = adjusted;
6094		}
6095	}
6096	return adjusted;
6097}
6098
6099
6100var defaultDisplayMap = {};
6101
6102function getDefaultDisplay( elem ) {
6103	var temp,
6104		doc = elem.ownerDocument,
6105		nodeName = elem.nodeName,
6106		display = defaultDisplayMap[ nodeName ];
6107
6108	if ( display ) {
6109		return display;
6110	}
6111
6112	temp = doc.body.appendChild( doc.createElement( nodeName ) );
6113	display = jQuery.css( temp, "display" );
6114
6115	temp.parentNode.removeChild( temp );
6116
6117	if ( display === "none" ) {
6118		display = "block";
6119	}
6120	defaultDisplayMap[ nodeName ] = display;
6121
6122	return display;
6123}
6124
6125function showHide( elements, show ) {
6126	var display, elem,
6127		values = [],
6128		index = 0,
6129		length = elements.length;
6130
6131	// Determine new display value for elements that need to change
6132	for ( ; index < length; index++ ) {
6133		elem = elements[ index ];
6134		if ( !elem.style ) {
6135			continue;
6136		}
6137
6138		display = elem.style.display;
6139		if ( show ) {
6140
6141			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
6142			// check is required in this first loop unless we have a nonempty display value (either
6143			// inline or about-to-be-restored)
6144			if ( display === "none" ) {
6145				values[ index ] = dataPriv.get( elem, "display" ) || null;
6146				if ( !values[ index ] ) {
6147					elem.style.display = "";
6148				}
6149			}
6150			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
6151				values[ index ] = getDefaultDisplay( elem );
6152			}
6153		} else {
6154			if ( display !== "none" ) {
6155				values[ index ] = "none";
6156
6157				// Remember what we're overwriting
6158				dataPriv.set( elem, "display", display );
6159			}
6160		}
6161	}
6162
6163	// Set the display of the elements in a second loop to avoid constant reflow
6164	for ( index = 0; index < length; index++ ) {
6165		if ( values[ index ] != null ) {
6166			elements[ index ].style.display = values[ index ];
6167		}
6168	}
6169
6170	return elements;
6171}
6172
6173jQuery.fn.extend( {
6174	show: function() {
6175		return showHide( this, true );
6176	},
6177	hide: function() {
6178		return showHide( this );
6179	},
6180	toggle: function( state ) {
6181		if ( typeof state === "boolean" ) {
6182			return state ? this.show() : this.hide();
6183		}
6184
6185		return this.each( function() {
6186			if ( isHiddenWithinTree( this ) ) {
6187				jQuery( this ).show();
6188			} else {
6189				jQuery( this ).hide();
6190			}
6191		} );
6192	}
6193} );
6194var rcheckableType = ( /^(?:checkbox|radio)$/i );
6195
6196var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
6197
6198var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
6199
6200
6201
6202( function() {
6203	var fragment = document.createDocumentFragment(),
6204		div = fragment.appendChild( document.createElement( "div" ) ),
6205		input = document.createElement( "input" );
6206
6207	// Support: Android 4.0 - 4.3 only
6208	// Check state lost if the name is set (trac-11217)
6209	// Support: Windows Web Apps (WWA)
6210	// `name` and `type` must use .setAttribute for WWA (trac-14901)
6211	input.setAttribute( "type", "radio" );
6212	input.setAttribute( "checked", "checked" );
6213	input.setAttribute( "name", "t" );
6214
6215	div.appendChild( input );
6216
6217	// Support: Android <=4.1 only
6218	// Older WebKit doesn't clone checked state correctly in fragments
6219	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
6220
6221	// Support: IE <=11 only
6222	// Make sure textarea (and checkbox) defaultValue is properly cloned
6223	div.innerHTML = "<textarea>x</textarea>";
6224	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
6225
6226	// Support: IE <=9 only
6227	// IE <=9 replaces <option> tags with their contents when inserted outside of
6228	// the select element.
6229	div.innerHTML = "<option></option>";
6230	support.option = !!div.lastChild;
6231} )();
6232
6233
6234// We have to close these tags to support XHTML (trac-13200)
6235var wrapMap = {
6236
6237	// XHTML parsers do not magically insert elements in the
6238	// same way that tag soup parsers do. So we cannot shorten
6239	// this by omitting <tbody> or other required elements.
6240	thead: [ 1, "<table>", "</table>" ],
6241	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
6242	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
6243	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
6244
6245	_default: [ 0, "", "" ]
6246};
6247
6248wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
6249wrapMap.th = wrapMap.td;
6250
6251// Support: IE <=9 only
6252if ( !support.option ) {
6253	wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ];
6254}
6255
6256
6257function getAll( context, tag ) {
6258
6259	// Support: IE <=9 - 11 only
6260	// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)
6261	var ret;
6262
6263	if ( typeof context.getElementsByTagName !== "undefined" ) {
6264		ret = context.getElementsByTagName( tag || "*" );
6265
6266	} else if ( typeof context.querySelectorAll !== "undefined" ) {
6267		ret = context.querySelectorAll( tag || "*" );
6268
6269	} else {
6270		ret = [];
6271	}
6272
6273	if ( tag === undefined || tag && nodeName( context, tag ) ) {
6274		return jQuery.merge( [ context ], ret );
6275	}
6276
6277	return ret;
6278}
6279
6280
6281// Mark scripts as having already been evaluated
6282function setGlobalEval( elems, refElements ) {
6283	var i = 0,
6284		l = elems.length;
6285
6286	for ( ; i < l; i++ ) {
6287		dataPriv.set(
6288			elems[ i ],
6289			"globalEval",
6290			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
6291		);
6292	}
6293}
6294
6295
6296var rhtml = /<|&#?\w+;/;
6297
6298function buildFragment( elems, context, scripts, selection, ignored ) {
6299	var elem, tmp, tag, wrap, attached, j,
6300		fragment = context.createDocumentFragment(),
6301		nodes = [],
6302		i = 0,
6303		l = elems.length;
6304
6305	for ( ; i < l; i++ ) {
6306		elem = elems[ i ];
6307
6308		if ( elem || elem === 0 ) {
6309
6310			// Add nodes directly
6311			if ( toType( elem ) === "object" ) {
6312
6313				// Support: Android <=4.0 only, PhantomJS 1 only
6314				// push.apply(_, arraylike) throws on ancient WebKit
6315				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
6316
6317			// Convert non-html into a text node
6318			} else if ( !rhtml.test( elem ) ) {
6319				nodes.push( context.createTextNode( elem ) );
6320
6321			// Convert html into DOM nodes
6322			} else {
6323				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
6324
6325				// Deserialize a standard representation
6326				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
6327				wrap = wrapMap[ tag ] || wrapMap._default;
6328				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
6329
6330				// Descend through wrappers to the right content
6331				j = wrap[ 0 ];
6332				while ( j-- ) {
6333					tmp = tmp.lastChild;
6334				}
6335
6336				// Support: Android <=4.0 only, PhantomJS 1 only
6337				// push.apply(_, arraylike) throws on ancient WebKit
6338				jQuery.merge( nodes, tmp.childNodes );
6339
6340				// Remember the top-level container
6341				tmp = fragment.firstChild;
6342
6343				// Ensure the created nodes are orphaned (trac-12392)
6344				tmp.textContent = "";
6345			}
6346		}
6347	}
6348
6349	// Remove wrapper from fragment
6350	fragment.textContent = "";
6351
6352	i = 0;
6353	while ( ( elem = nodes[ i++ ] ) ) {
6354
6355		// Skip elements already in the context collection (trac-4087)
6356		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
6357			if ( ignored ) {
6358				ignored.push( elem );
6359			}
6360			continue;
6361		}
6362
6363		attached = isAttached( elem );
6364
6365		// Append to fragment
6366		tmp = getAll( fragment.appendChild( elem ), "script" );
6367
6368		// Preserve script evaluation history
6369		if ( attached ) {
6370			setGlobalEval( tmp );
6371		}
6372
6373		// Capture executables
6374		if ( scripts ) {
6375			j = 0;
6376			while ( ( elem = tmp[ j++ ] ) ) {
6377				if ( rscriptType.test( elem.type || "" ) ) {
6378					scripts.push( elem );
6379				}
6380			}
6381		}
6382	}
6383
6384	return fragment;
6385}
6386
6387
6388var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
6389
6390function returnTrue() {
6391	return true;
6392}
6393
6394function returnFalse() {
6395	return false;
6396}
6397
6398function on( elem, types, selector, data, fn, one ) {
6399	var origFn, type;
6400
6401	// Types can be a map of types/handlers
6402	if ( typeof types === "object" ) {
6403
6404		// ( types-Object, selector, data )
6405		if ( typeof selector !== "string" ) {
6406
6407			// ( types-Object, data )
6408			data = data || selector;
6409			selector = undefined;
6410		}
6411		for ( type in types ) {
6412			on( elem, type, selector, data, types[ type ], one );
6413		}
6414		return elem;
6415	}
6416
6417	if ( data == null && fn == null ) {
6418
6419		// ( types, fn )
6420		fn = selector;
6421		data = selector = undefined;
6422	} else if ( fn == null ) {
6423		if ( typeof selector === "string" ) {
6424
6425			// ( types, selector, fn )
6426			fn = data;
6427			data = undefined;
6428		} else {
6429
6430			// ( types, data, fn )
6431			fn = data;
6432			data = selector;
6433			selector = undefined;
6434		}
6435	}
6436	if ( fn === false ) {
6437		fn = returnFalse;
6438	} else if ( !fn ) {
6439		return elem;
6440	}
6441
6442	if ( one === 1 ) {
6443		origFn = fn;
6444		fn = function( event ) {
6445
6446			// Can use an empty set, since event contains the info
6447			jQuery().off( event );
6448			return origFn.apply( this, arguments );
6449		};
6450
6451		// Use same guid so caller can remove using origFn
6452		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
6453	}
6454	return elem.each( function() {
6455		jQuery.event.add( this, types, fn, data, selector );
6456	} );
6457}
6458
6459/*
6460 * Helper functions for managing events -- not part of the public interface.
6461 * Props to Dean Edwards' addEvent library for many of the ideas.
6462 */
6463jQuery.event = {
6464
6465	global: {},
6466
6467	add: function( elem, types, handler, data, selector ) {
6468
6469		var handleObjIn, eventHandle, tmp,
6470			events, t, handleObj,
6471			special, handlers, type, namespaces, origType,
6472			elemData = dataPriv.get( elem );
6473
6474		// Only attach events to objects that accept data
6475		if ( !acceptData( elem ) ) {
6476			return;
6477		}
6478
6479		// Caller can pass in an object of custom data in lieu of the handler
6480		if ( handler.handler ) {
6481			handleObjIn = handler;
6482			handler = handleObjIn.handler;
6483			selector = handleObjIn.selector;
6484		}
6485
6486		// Ensure that invalid selectors throw exceptions at attach time
6487		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
6488		if ( selector ) {
6489			jQuery.find.matchesSelector( documentElement, selector );
6490		}
6491
6492		// Make sure that the handler has a unique ID, used to find/remove it later
6493		if ( !handler.guid ) {
6494			handler.guid = jQuery.guid++;
6495		}
6496
6497		// Init the element's event structure and main handler, if this is the first
6498		if ( !( events = elemData.events ) ) {
6499			events = elemData.events = Object.create( null );
6500		}
6501		if ( !( eventHandle = elemData.handle ) ) {
6502			eventHandle = elemData.handle = function( e ) {
6503
6504				// Discard the second event of a jQuery.event.trigger() and
6505				// when an event is called after a page has unloaded
6506				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
6507					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
6508			};
6509		}
6510
6511		// Handle multiple events separated by a space
6512		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
6513		t = types.length;
6514		while ( t-- ) {
6515			tmp = rtypenamespace.exec( types[ t ] ) || [];
6516			type = origType = tmp[ 1 ];
6517			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
6518
6519			// There *must* be a type, no attaching namespace-only handlers
6520			if ( !type ) {
6521				continue;
6522			}
6523
6524			// If event changes its type, use the special event handlers for the changed type
6525			special = jQuery.event.special[ type ] || {};
6526
6527			// If selector defined, determine special event api type, otherwise given type
6528			type = ( selector ? special.delegateType : special.bindType ) || type;
6529
6530			// Update special based on newly reset type
6531			special = jQuery.event.special[ type ] || {};
6532
6533			// handleObj is passed to all event handlers
6534			handleObj = jQuery.extend( {
6535				type: type,
6536				origType: origType,
6537				data: data,
6538				handler: handler,
6539				guid: handler.guid,
6540				selector: selector,
6541				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
6542				namespace: namespaces.join( "." )
6543			}, handleObjIn );
6544
6545			// Init the event handler queue if we're the first
6546			if ( !( handlers = events[ type ] ) ) {
6547				handlers = events[ type ] = [];
6548				handlers.delegateCount = 0;
6549
6550				// Only use addEventListener if the special events handler returns false
6551				if ( !special.setup ||
6552					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
6553
6554					if ( elem.addEventListener ) {
6555						elem.addEventListener( type, eventHandle );
6556					}
6557				}
6558			}
6559
6560			if ( special.add ) {
6561				special.add.call( elem, handleObj );
6562
6563				if ( !handleObj.handler.guid ) {
6564					handleObj.handler.guid = handler.guid;
6565				}
6566			}
6567
6568			// Add to the element's handler list, delegates in front
6569			if ( selector ) {
6570				handlers.splice( handlers.delegateCount++, 0, handleObj );
6571			} else {
6572				handlers.push( handleObj );
6573			}
6574
6575			// Keep track of which events have ever been used, for event optimization
6576			jQuery.event.global[ type ] = true;
6577		}
6578
6579	},
6580
6581	// Detach an event or set of events from an element
6582	remove: function( elem, types, handler, selector, mappedTypes ) {
6583
6584		var j, origCount, tmp,
6585			events, t, handleObj,
6586			special, handlers, type, namespaces, origType,
6587			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
6588
6589		if ( !elemData || !( events = elemData.events ) ) {
6590			return;
6591		}
6592
6593		// Once for each type.namespace in types; type may be omitted
6594		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
6595		t = types.length;
6596		while ( t-- ) {
6597			tmp = rtypenamespace.exec( types[ t ] ) || [];
6598			type = origType = tmp[ 1 ];
6599			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
6600
6601			// Unbind all events (on this namespace, if provided) for the element
6602			if ( !type ) {
6603				for ( type in events ) {
6604					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
6605				}
6606				continue;
6607			}
6608
6609			special = jQuery.event.special[ type ] || {};
6610			type = ( selector ? special.delegateType : special.bindType ) || type;
6611			handlers = events[ type ] || [];
6612			tmp = tmp[ 2 ] &&
6613				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
6614
6615			// Remove matching events
6616			origCount = j = handlers.length;
6617			while ( j-- ) {
6618				handleObj = handlers[ j ];
6619
6620				if ( ( mappedTypes || origType === handleObj.origType ) &&
6621					( !handler || handler.guid === handleObj.guid ) &&
6622					( !tmp || tmp.test( handleObj.namespace ) ) &&
6623					( !selector || selector === handleObj.selector ||
6624						selector === "**" && handleObj.selector ) ) {
6625					handlers.splice( j, 1 );
6626
6627					if ( handleObj.selector ) {
6628						handlers.delegateCount--;
6629					}
6630					if ( special.remove ) {
6631						special.remove.call( elem, handleObj );
6632					}
6633				}
6634			}
6635
6636			// Remove generic event handler if we removed something and no more handlers exist
6637			// (avoids potential for endless recursion during removal of special event handlers)
6638			if ( origCount && !handlers.length ) {
6639				if ( !special.teardown ||
6640					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
6641
6642					jQuery.removeEvent( elem, type, elemData.handle );
6643				}
6644
6645				delete events[ type ];
6646			}
6647		}
6648
6649		// Remove data and the expando if it's no longer used
6650		if ( jQuery.isEmptyObject( events ) ) {
6651			dataPriv.remove( elem, "handle events" );
6652		}
6653	},
6654
6655	dispatch: function( nativeEvent ) {
6656
6657		var i, j, ret, matched, handleObj, handlerQueue,
6658			args = new Array( arguments.length ),
6659
6660			// Make a writable jQuery.Event from the native event object
6661			event = jQuery.event.fix( nativeEvent ),
6662
6663			handlers = (
6664				dataPriv.get( this, "events" ) || Object.create( null )
6665			)[ event.type ] || [],
6666			special = jQuery.event.special[ event.type ] || {};
6667
6668		// Use the fix-ed jQuery.Event rather than the (read-only) native event
6669		args[ 0 ] = event;
6670
6671		for ( i = 1; i < arguments.length; i++ ) {
6672			args[ i ] = arguments[ i ];
6673		}
6674
6675		event.delegateTarget = this;
6676
6677		// Call the preDispatch hook for the mapped type, and let it bail if desired
6678		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
6679			return;
6680		}
6681
6682		// Determine handlers
6683		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
6684
6685		// Run delegates first; they may want to stop propagation beneath us
6686		i = 0;
6687		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
6688			event.currentTarget = matched.elem;
6689
6690			j = 0;
6691			while ( ( handleObj = matched.handlers[ j++ ] ) &&
6692				!event.isImmediatePropagationStopped() ) {
6693
6694				// If the event is namespaced, then each handler is only invoked if it is
6695				// specially universal or its namespaces are a superset of the event's.
6696				if ( !event.rnamespace || handleObj.namespace === false ||
6697					event.rnamespace.test( handleObj.namespace ) ) {
6698
6699					event.handleObj = handleObj;
6700					event.data = handleObj.data;
6701
6702					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
6703						handleObj.handler ).apply( matched.elem, args );
6704
6705					if ( ret !== undefined ) {
6706						if ( ( event.result = ret ) === false ) {
6707							event.preventDefault();
6708							event.stopPropagation();
6709						}
6710					}
6711				}
6712			}
6713		}
6714
6715		// Call the postDispatch hook for the mapped type
6716		if ( special.postDispatch ) {
6717			special.postDispatch.call( this, event );
6718		}
6719
6720		return event.result;
6721	},
6722
6723	handlers: function( event, handlers ) {
6724		var i, handleObj, sel, matchedHandlers, matchedSelectors,
6725			handlerQueue = [],
6726			delegateCount = handlers.delegateCount,
6727			cur = event.target;
6728
6729		// Find delegate handlers
6730		if ( delegateCount &&
6731
6732			// Support: IE <=9
6733			// Black-hole SVG <use> instance trees (trac-13180)
6734			cur.nodeType &&
6735
6736			// Support: Firefox <=42
6737			// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
6738			// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
6739			// Support: IE 11 only
6740			// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
6741			!( event.type === "click" && event.button >= 1 ) ) {
6742
6743			for ( ; cur !== this; cur = cur.parentNode || this ) {
6744
6745				// Don't check non-elements (trac-13208)
6746				// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)
6747				if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
6748					matchedHandlers = [];
6749					matchedSelectors = {};
6750					for ( i = 0; i < delegateCount; i++ ) {
6751						handleObj = handlers[ i ];
6752
6753						// Don't conflict with Object.prototype properties (trac-13203)
6754						sel = handleObj.selector + " ";
6755
6756						if ( matchedSelectors[ sel ] === undefined ) {
6757							matchedSelectors[ sel ] = handleObj.needsContext ?
6758								jQuery( sel, this ).index( cur ) > -1 :
6759								jQuery.find( sel, this, null, [ cur ] ).length;
6760						}
6761						if ( matchedSelectors[ sel ] ) {
6762							matchedHandlers.push( handleObj );
6763						}
6764					}
6765					if ( matchedHandlers.length ) {
6766						handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
6767					}
6768				}
6769			}
6770		}
6771
6772		// Add the remaining (directly-bound) handlers
6773		cur = this;
6774		if ( delegateCount < handlers.length ) {
6775			handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
6776		}
6777
6778		return handlerQueue;
6779	},
6780
6781	addProp: function( name, hook ) {
6782		Object.defineProperty( jQuery.Event.prototype, name, {
6783			enumerable: true,
6784			configurable: true,
6785
6786			get: isFunction( hook ) ?
6787				function() {
6788					if ( this.originalEvent ) {
6789						return hook( this.originalEvent );
6790					}
6791				} :
6792				function() {
6793					if ( this.originalEvent ) {
6794						return this.originalEvent[ name ];
6795					}
6796				},
6797
6798			set: function( value ) {
6799				Object.defineProperty( this, name, {
6800					enumerable: true,
6801					configurable: true,
6802					writable: true,
6803					value: value
6804				} );
6805			}
6806		} );
6807	},
6808
6809	fix: function( originalEvent ) {
6810		return originalEvent[ jQuery.expando ] ?
6811			originalEvent :
6812			new jQuery.Event( originalEvent );
6813	},
6814
6815	special: {
6816		load: {
6817
6818			// Prevent triggered image.load events from bubbling to window.load
6819			noBubble: true
6820		},
6821		click: {
6822
6823			// Utilize native event to ensure correct state for checkable inputs
6824			setup: function( data ) {
6825
6826				// For mutual compressibility with _default, replace `this` access with a local var.
6827				// `|| data` is dead code meant only to preserve the variable through minification.
6828				var el = this || data;
6829
6830				// Claim the first handler
6831				if ( rcheckableType.test( el.type ) &&
6832					el.click && nodeName( el, "input" ) ) {
6833
6834					// dataPriv.set( el, "click", ... )
6835					leverageNative( el, "click", true );
6836				}
6837
6838				// Return false to allow normal processing in the caller
6839				return false;
6840			},
6841			trigger: function( data ) {
6842
6843				// For mutual compressibility with _default, replace `this` access with a local var.
6844				// `|| data` is dead code meant only to preserve the variable through minification.
6845				var el = this || data;
6846
6847				// Force setup before triggering a click
6848				if ( rcheckableType.test( el.type ) &&
6849					el.click && nodeName( el, "input" ) ) {
6850
6851					leverageNative( el, "click" );
6852				}
6853
6854				// Return non-false to allow normal event-path propagation
6855				return true;
6856			},
6857
6858			// For cross-browser consistency, suppress native .click() on links
6859			// Also prevent it if we're currently inside a leveraged native-event stack
6860			_default: function( event ) {
6861				var target = event.target;
6862				return rcheckableType.test( target.type ) &&
6863					target.click && nodeName( target, "input" ) &&
6864					dataPriv.get( target, "click" ) ||
6865					nodeName( target, "a" );
6866			}
6867		},
6868
6869		beforeunload: {
6870			postDispatch: function( event ) {
6871
6872				// Support: Firefox 20+
6873				// Firefox doesn't alert if the returnValue field is not set.
6874				if ( event.result !== undefined && event.originalEvent ) {
6875					event.originalEvent.returnValue = event.result;
6876				}
6877			}
6878		}
6879	}
6880};
6881
6882// Ensure the presence of an event listener that handles manually-triggered
6883// synthetic events by interrupting progress until reinvoked in response to
6884// *native* events that it fires directly, ensuring that state changes have
6885// already occurred before other listeners are invoked.
6886function leverageNative( el, type, isSetup ) {
6887
6888	// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add
6889	if ( !isSetup ) {
6890		if ( dataPriv.get( el, type ) === undefined ) {
6891			jQuery.event.add( el, type, returnTrue );
6892		}
6893		return;
6894	}
6895
6896	// Register the controller as a special universal handler for all event namespaces
6897	dataPriv.set( el, type, false );
6898	jQuery.event.add( el, type, {
6899		namespace: false,
6900		handler: function( event ) {
6901			var result,
6902				saved = dataPriv.get( this, type );
6903
6904			if ( ( event.isTrigger & 1 ) && this[ type ] ) {
6905
6906				// Interrupt processing of the outer synthetic .trigger()ed event
6907				if ( !saved ) {
6908
6909					// Store arguments for use when handling the inner native event
6910					// There will always be at least one argument (an event object), so this array
6911					// will not be confused with a leftover capture object.
6912					saved = slice.call( arguments );
6913					dataPriv.set( this, type, saved );
6914
6915					// Trigger the native event and capture its result
6916					this[ type ]();
6917					result = dataPriv.get( this, type );
6918					dataPriv.set( this, type, false );
6919
6920					if ( saved !== result ) {
6921
6922						// Cancel the outer synthetic event
6923						event.stopImmediatePropagation();
6924						event.preventDefault();
6925
6926						return result;
6927					}
6928
6929				// If this is an inner synthetic event for an event with a bubbling surrogate
6930				// (focus or blur), assume that the surrogate already propagated from triggering
6931				// the native event and prevent that from happening again here.
6932				// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
6933				// bubbling surrogate propagates *after* the non-bubbling base), but that seems
6934				// less bad than duplication.
6935				} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
6936					event.stopPropagation();
6937				}
6938
6939			// If this is a native event triggered above, everything is now in order
6940			// Fire an inner synthetic event with the original arguments
6941			} else if ( saved ) {
6942
6943				// ...and capture the result
6944				dataPriv.set( this, type, jQuery.event.trigger(
6945					saved[ 0 ],
6946					saved.slice( 1 ),
6947					this
6948				) );
6949
6950				// Abort handling of the native event by all jQuery handlers while allowing
6951				// native handlers on the same element to run. On target, this is achieved
6952				// by stopping immediate propagation just on the jQuery event. However,
6953				// the native event is re-wrapped by a jQuery one on each level of the
6954				// propagation so the only way to stop it for jQuery is to stop it for
6955				// everyone via native `stopPropagation()`. This is not a problem for
6956				// focus/blur which don't bubble, but it does also stop click on checkboxes
6957				// and radios. We accept this limitation.
6958				event.stopPropagation();
6959				event.isImmediatePropagationStopped = returnTrue;
6960			}
6961		}
6962	} );
6963}
6964
6965jQuery.removeEvent = function( elem, type, handle ) {
6966
6967	// This "if" is needed for plain objects
6968	if ( elem.removeEventListener ) {
6969		elem.removeEventListener( type, handle );
6970	}
6971};
6972
6973jQuery.Event = function( src, props ) {
6974
6975	// Allow instantiation without the 'new' keyword
6976	if ( !( this instanceof jQuery.Event ) ) {
6977		return new jQuery.Event( src, props );
6978	}
6979
6980	// Event object
6981	if ( src && src.type ) {
6982		this.originalEvent = src;
6983		this.type = src.type;
6984
6985		// Events bubbling up the document may have been marked as prevented
6986		// by a handler lower down the tree; reflect the correct value.
6987		this.isDefaultPrevented = src.defaultPrevented ||
6988				src.defaultPrevented === undefined &&
6989
6990				// Support: Android <=2.3 only
6991				src.returnValue === false ?
6992			returnTrue :
6993			returnFalse;
6994
6995		// Create target properties
6996		// Support: Safari <=6 - 7 only
6997		// Target should not be a text node (trac-504, trac-13143)
6998		this.target = ( src.target && src.target.nodeType === 3 ) ?
6999			src.target.parentNode :
7000			src.target;
7001
7002		this.currentTarget = src.currentTarget;
7003		this.relatedTarget = src.relatedTarget;
7004
7005	// Event type
7006	} else {
7007		this.type = src;
7008	}
7009
7010	// Put explicitly provided properties onto the event object
7011	if ( props ) {
7012		jQuery.extend( this, props );
7013	}
7014
7015	// Create a timestamp if incoming event doesn't have one
7016	this.timeStamp = src && src.timeStamp || Date.now();
7017
7018	// Mark it as fixed
7019	this[ jQuery.expando ] = true;
7020};
7021
7022// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
7023// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
7024jQuery.Event.prototype = {
7025	constructor: jQuery.Event,
7026	isDefaultPrevented: returnFalse,
7027	isPropagationStopped: returnFalse,
7028	isImmediatePropagationStopped: returnFalse,
7029	isSimulated: false,
7030
7031	preventDefault: function() {
7032		var e = this.originalEvent;
7033
7034		this.isDefaultPrevented = returnTrue;
7035
7036		if ( e && !this.isSimulated ) {
7037			e.preventDefault();
7038		}
7039	},
7040	stopPropagation: function() {
7041		var e = this.originalEvent;
7042
7043		this.isPropagationStopped = returnTrue;
7044
7045		if ( e && !this.isSimulated ) {
7046			e.stopPropagation();
7047		}
7048	},
7049	stopImmediatePropagation: function() {
7050		var e = this.originalEvent;
7051
7052		this.isImmediatePropagationStopped = returnTrue;
7053
7054		if ( e && !this.isSimulated ) {
7055			e.stopImmediatePropagation();
7056		}
7057
7058		this.stopPropagation();
7059	}
7060};
7061
7062// Includes all common event props including KeyEvent and MouseEvent specific props
7063jQuery.each( {
7064	altKey: true,
7065	bubbles: true,
7066	cancelable: true,
7067	changedTouches: true,
7068	ctrlKey: true,
7069	detail: true,
7070	eventPhase: true,
7071	metaKey: true,
7072	pageX: true,
7073	pageY: true,
7074	shiftKey: true,
7075	view: true,
7076	"char": true,
7077	code: true,
7078	charCode: true,
7079	key: true,
7080	keyCode: true,
7081	button: true,
7082	buttons: true,
7083	clientX: true,
7084	clientY: true,
7085	offsetX: true,
7086	offsetY: true,
7087	pointerId: true,
7088	pointerType: true,
7089	screenX: true,
7090	screenY: true,
7091	targetTouches: true,
7092	toElement: true,
7093	touches: true,
7094	which: true
7095}, jQuery.event.addProp );
7096
7097jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
7098
7099	function focusMappedHandler( nativeEvent ) {
7100		if ( document.documentMode ) {
7101
7102			// Support: IE 11+
7103			// Attach a single focusin/focusout handler on the document while someone wants
7104			// focus/blur. This is because the former are synchronous in IE while the latter
7105			// are async. In other browsers, all those handlers are invoked synchronously.
7106
7107			// `handle` from private data would already wrap the event, but we need
7108			// to change the `type` here.
7109			var handle = dataPriv.get( this, "handle" ),
7110				event = jQuery.event.fix( nativeEvent );
7111			event.type = nativeEvent.type === "focusin" ? "focus" : "blur";
7112			event.isSimulated = true;
7113
7114			// First, handle focusin/focusout
7115			handle( nativeEvent );
7116
7117			// ...then, handle focus/blur
7118			//
7119			// focus/blur don't bubble while focusin/focusout do; simulate the former by only
7120			// invoking the handler at the lower level.
7121			if ( event.target === event.currentTarget ) {
7122
7123				// The setup part calls `leverageNative`, which, in turn, calls
7124				// `jQuery.event.add`, so event handle will already have been set
7125				// by this point.
7126				handle( event );
7127			}
7128		} else {
7129
7130			// For non-IE browsers, attach a single capturing handler on the document
7131			// while someone wants focusin/focusout.
7132			jQuery.event.simulate( delegateType, nativeEvent.target,
7133				jQuery.event.fix( nativeEvent ) );
7134		}
7135	}
7136
7137	jQuery.event.special[ type ] = {
7138
7139		// Utilize native event if possible so blur/focus sequence is correct
7140		setup: function() {
7141
7142			var attaches;
7143
7144			// Claim the first handler
7145			// dataPriv.set( this, "focus", ... )
7146			// dataPriv.set( this, "blur", ... )
7147			leverageNative( this, type, true );
7148
7149			if ( document.documentMode ) {
7150
7151				// Support: IE 9 - 11+
7152				// We use the same native handler for focusin & focus (and focusout & blur)
7153				// so we need to coordinate setup & teardown parts between those events.
7154				// Use `delegateType` as the key as `type` is already used by `leverageNative`.
7155				attaches = dataPriv.get( this, delegateType );
7156				if ( !attaches ) {
7157					this.addEventListener( delegateType, focusMappedHandler );
7158				}
7159				dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );
7160			} else {
7161
7162				// Return false to allow normal processing in the caller
7163				return false;
7164			}
7165		},
7166		trigger: function() {
7167
7168			// Force setup before trigger
7169			leverageNative( this, type );
7170
7171			// Return non-false to allow normal event-path propagation
7172			return true;
7173		},
7174
7175		teardown: function() {
7176			var attaches;
7177
7178			if ( document.documentMode ) {
7179				attaches = dataPriv.get( this, delegateType ) - 1;
7180				if ( !attaches ) {
7181					this.removeEventListener( delegateType, focusMappedHandler );
7182					dataPriv.remove( this, delegateType );
7183				} else {
7184					dataPriv.set( this, delegateType, attaches );
7185				}
7186			} else {
7187
7188				// Return false to indicate standard teardown should be applied
7189				return false;
7190			}
7191		},
7192
7193		// Suppress native focus or blur if we're currently inside
7194		// a leveraged native-event stack
7195		_default: function( event ) {
7196			return dataPriv.get( event.target, type );
7197		},
7198
7199		delegateType: delegateType
7200	};
7201
7202	// Support: Firefox <=44
7203	// Firefox doesn't have focus(in | out) events
7204	// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
7205	//
7206	// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
7207	// focus(in | out) events fire after focus & blur events,
7208	// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
7209	// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
7210	//
7211	// Support: IE 9 - 11+
7212	// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,
7213	// attach a single handler for both events in IE.
7214	jQuery.event.special[ delegateType ] = {
7215		setup: function() {
7216
7217			// Handle: regular nodes (via `this.ownerDocument`), window
7218			// (via `this.document`) & document (via `this`).
7219			var doc = this.ownerDocument || this.document || this,
7220				dataHolder = document.documentMode ? this : doc,
7221				attaches = dataPriv.get( dataHolder, delegateType );
7222
7223			// Support: IE 9 - 11+
7224			// We use the same native handler for focusin & focus (and focusout & blur)
7225			// so we need to coordinate setup & teardown parts between those events.
7226			// Use `delegateType` as the key as `type` is already used by `leverageNative`.
7227			if ( !attaches ) {
7228				if ( document.documentMode ) {
7229					this.addEventListener( delegateType, focusMappedHandler );
7230				} else {
7231					doc.addEventListener( type, focusMappedHandler, true );
7232				}
7233			}
7234			dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );
7235		},
7236		teardown: function() {
7237			var doc = this.ownerDocument || this.document || this,
7238				dataHolder = document.documentMode ? this : doc,
7239				attaches = dataPriv.get( dataHolder, delegateType ) - 1;
7240
7241			if ( !attaches ) {
7242				if ( document.documentMode ) {
7243					this.removeEventListener( delegateType, focusMappedHandler );
7244				} else {
7245					doc.removeEventListener( type, focusMappedHandler, true );
7246				}
7247				dataPriv.remove( dataHolder, delegateType );
7248			} else {
7249				dataPriv.set( dataHolder, delegateType, attaches );
7250			}
7251		}
7252	};
7253} );
7254
7255// Create mouseenter/leave events using mouseover/out and event-time checks
7256// so that event delegation works in jQuery.
7257// Do the same for pointerenter/pointerleave and pointerover/pointerout
7258//
7259// Support: Safari 7 only
7260// Safari sends mouseenter too often; see:
7261// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
7262// for the description of the bug (it existed in older Chrome versions as well).
7263jQuery.each( {
7264	mouseenter: "mouseover",
7265	mouseleave: "mouseout",
7266	pointerenter: "pointerover",
7267	pointerleave: "pointerout"
7268}, function( orig, fix ) {
7269	jQuery.event.special[ orig ] = {
7270		delegateType: fix,
7271		bindType: fix,
7272
7273		handle: function( event ) {
7274			var ret,
7275				target = this,
7276				related = event.relatedTarget,
7277				handleObj = event.handleObj;
7278
7279			// For mouseenter/leave call the handler if related is outside the target.
7280			// NB: No relatedTarget if the mouse left/entered the browser window
7281			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
7282				event.type = handleObj.origType;
7283				ret = handleObj.handler.apply( this, arguments );
7284				event.type = fix;
7285			}
7286			return ret;
7287		}
7288	};
7289} );
7290
7291jQuery.fn.extend( {
7292
7293	on: function( types, selector, data, fn ) {
7294		return on( this, types, selector, data, fn );
7295	},
7296	one: function( types, selector, data, fn ) {
7297		return on( this, types, selector, data, fn, 1 );
7298	},
7299	off: function( types, selector, fn ) {
7300		var handleObj, type;
7301		if ( types && types.preventDefault && types.handleObj ) {
7302
7303			// ( event )  dispatched jQuery.Event
7304			handleObj = types.handleObj;
7305			jQuery( types.delegateTarget ).off(
7306				handleObj.namespace ?
7307					handleObj.origType + "." + handleObj.namespace :
7308					handleObj.origType,
7309				handleObj.selector,
7310				handleObj.handler
7311			);
7312			return this;
7313		}
7314		if ( typeof types === "object" ) {
7315
7316			// ( types-object [, selector] )
7317			for ( type in types ) {
7318				this.off( type, selector, types[ type ] );
7319			}
7320			return this;
7321		}
7322		if ( selector === false || typeof selector === "function" ) {
7323
7324			// ( types [, fn] )
7325			fn = selector;
7326			selector = undefined;
7327		}
7328		if ( fn === false ) {
7329			fn = returnFalse;
7330		}
7331		return this.each( function() {
7332			jQuery.event.remove( this, types, fn, selector );
7333		} );
7334	}
7335} );
7336
7337
7338var
7339
7340	// Support: IE <=10 - 11, Edge 12 - 13 only
7341	// In IE/Edge using regex groups here causes severe slowdowns.
7342	// See https://connect.microsoft.com/IE/feedback/details/1736512/
7343	rnoInnerhtml = /<script|<style|<link/i,
7344
7345	// checked="checked" or checked
7346	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
7347
7348	rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g;
7349
7350// Prefer a tbody over its parent table for containing new rows
7351function manipulationTarget( elem, content ) {
7352	if ( nodeName( elem, "table" ) &&
7353		nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
7354
7355		return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
7356	}
7357
7358	return elem;
7359}
7360
7361// Replace/restore the type attribute of script elements for safe DOM manipulation
7362function disableScript( elem ) {
7363	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
7364	return elem;
7365}
7366function restoreScript( elem ) {
7367	if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
7368		elem.type = elem.type.slice( 5 );
7369	} else {
7370		elem.removeAttribute( "type" );
7371	}
7372
7373	return elem;
7374}
7375
7376function cloneCopyEvent( src, dest ) {
7377	var i, l, type, pdataOld, udataOld, udataCur, events;
7378
7379	if ( dest.nodeType !== 1 ) {
7380		return;
7381	}
7382
7383	// 1. Copy private data: events, handlers, etc.
7384	if ( dataPriv.hasData( src ) ) {
7385		pdataOld = dataPriv.get( src );
7386		events = pdataOld.events;
7387
7388		if ( events ) {
7389			dataPriv.remove( dest, "handle events" );
7390
7391			for ( type in events ) {
7392				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
7393					jQuery.event.add( dest, type, events[ type ][ i ] );
7394				}
7395			}
7396		}
7397	}
7398
7399	// 2. Copy user data
7400	if ( dataUser.hasData( src ) ) {
7401		udataOld = dataUser.access( src );
7402		udataCur = jQuery.extend( {}, udataOld );
7403
7404		dataUser.set( dest, udataCur );
7405	}
7406}
7407
7408// Fix IE bugs, see support tests
7409function fixInput( src, dest ) {
7410	var nodeName = dest.nodeName.toLowerCase();
7411
7412	// Fails to persist the checked state of a cloned checkbox or radio button.
7413	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
7414		dest.checked = src.checked;
7415
7416	// Fails to return the selected option to the default selected state when cloning options
7417	} else if ( nodeName === "input" || nodeName === "textarea" ) {
7418		dest.defaultValue = src.defaultValue;
7419	}
7420}
7421
7422function domManip( collection, args, callback, ignored ) {
7423
7424	// Flatten any nested arrays
7425	args = flat( args );
7426
7427	var fragment, first, scripts, hasScripts, node, doc,
7428		i = 0,
7429		l = collection.length,
7430		iNoClone = l - 1,
7431		value = args[ 0 ],
7432		valueIsFunction = isFunction( value );
7433
7434	// We can't cloneNode fragments that contain checked, in WebKit
7435	if ( valueIsFunction ||
7436			( l > 1 && typeof value === "string" &&
7437				!support.checkClone && rchecked.test( value ) ) ) {
7438		return collection.each( function( index ) {
7439			var self = collection.eq( index );
7440			if ( valueIsFunction ) {
7441				args[ 0 ] = value.call( this, index, self.html() );
7442			}
7443			domManip( self, args, callback, ignored );
7444		} );
7445	}
7446
7447	if ( l ) {
7448		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
7449		first = fragment.firstChild;
7450
7451		if ( fragment.childNodes.length === 1 ) {
7452			fragment = first;
7453		}
7454
7455		// Require either new content or an interest in ignored elements to invoke the callback
7456		if ( first || ignored ) {
7457			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
7458			hasScripts = scripts.length;
7459
7460			// Use the original fragment for the last item
7461			// instead of the first because it can end up
7462			// being emptied incorrectly in certain situations (trac-8070).
7463			for ( ; i < l; i++ ) {
7464				node = fragment;
7465
7466				if ( i !== iNoClone ) {
7467					node = jQuery.clone( node, true, true );
7468
7469					// Keep references to cloned scripts for later restoration
7470					if ( hasScripts ) {
7471
7472						// Support: Android <=4.0 only, PhantomJS 1 only
7473						// push.apply(_, arraylike) throws on ancient WebKit
7474						jQuery.merge( scripts, getAll( node, "script" ) );
7475					}
7476				}
7477
7478				callback.call( collection[ i ], node, i );
7479			}
7480
7481			if ( hasScripts ) {
7482				doc = scripts[ scripts.length - 1 ].ownerDocument;
7483
7484				// Re-enable scripts
7485				jQuery.map( scripts, restoreScript );
7486
7487				// Evaluate executable scripts on first document insertion
7488				for ( i = 0; i < hasScripts; i++ ) {
7489					node = scripts[ i ];
7490					if ( rscriptType.test( node.type || "" ) &&
7491						!dataPriv.access( node, "globalEval" ) &&
7492						jQuery.contains( doc, node ) ) {
7493
7494						if ( node.src && ( node.type || "" ).toLowerCase()  !== "module" ) {
7495
7496							// Optional AJAX dependency, but won't run scripts if not present
7497							if ( jQuery._evalUrl && !node.noModule ) {
7498								jQuery._evalUrl( node.src, {
7499									nonce: node.nonce || node.getAttribute( "nonce" )
7500								}, doc );
7501							}
7502						} else {
7503
7504							// Unwrap a CDATA section containing script contents. This shouldn't be
7505							// needed as in XML documents they're already not visible when
7506							// inspecting element contents and in HTML documents they have no
7507							// meaning but we're preserving that logic for backwards compatibility.
7508							// This will be removed completely in 4.0. See gh-4904.
7509							DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
7510						}
7511					}
7512				}
7513			}
7514		}
7515	}
7516
7517	return collection;
7518}
7519
7520function remove( elem, selector, keepData ) {
7521	var node,
7522		nodes = selector ? jQuery.filter( selector, elem ) : elem,
7523		i = 0;
7524
7525	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
7526		if ( !keepData && node.nodeType === 1 ) {
7527			jQuery.cleanData( getAll( node ) );
7528		}
7529
7530		if ( node.parentNode ) {
7531			if ( keepData && isAttached( node ) ) {
7532				setGlobalEval( getAll( node, "script" ) );
7533			}
7534			node.parentNode.removeChild( node );
7535		}
7536	}
7537
7538	return elem;
7539}
7540
7541jQuery.extend( {
7542	htmlPrefilter: function( html ) {
7543		return html;
7544	},
7545
7546	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
7547		var i, l, srcElements, destElements,
7548			clone = elem.cloneNode( true ),
7549			inPage = isAttached( elem );
7550
7551		// Fix IE cloning issues
7552		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
7553				!jQuery.isXMLDoc( elem ) ) {
7554
7555			// We eschew jQuery#find here for performance reasons:
7556			// https://jsperf.com/getall-vs-sizzle/2
7557			destElements = getAll( clone );
7558			srcElements = getAll( elem );
7559
7560			for ( i = 0, l = srcElements.length; i < l; i++ ) {
7561				fixInput( srcElements[ i ], destElements[ i ] );
7562			}
7563		}
7564
7565		// Copy the events from the original to the clone
7566		if ( dataAndEvents ) {
7567			if ( deepDataAndEvents ) {
7568				srcElements = srcElements || getAll( elem );
7569				destElements = destElements || getAll( clone );
7570
7571				for ( i = 0, l = srcElements.length; i < l; i++ ) {
7572					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
7573				}
7574			} else {
7575				cloneCopyEvent( elem, clone );
7576			}
7577		}
7578
7579		// Preserve script evaluation history
7580		destElements = getAll( clone, "script" );
7581		if ( destElements.length > 0 ) {
7582			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
7583		}
7584
7585		// Return the cloned set
7586		return clone;
7587	},
7588
7589	cleanData: function( elems ) {
7590		var data, elem, type,
7591			special = jQuery.event.special,
7592			i = 0;
7593
7594		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
7595			if ( acceptData( elem ) ) {
7596				if ( ( data = elem[ dataPriv.expando ] ) ) {
7597					if ( data.events ) {
7598						for ( type in data.events ) {
7599							if ( special[ type ] ) {
7600								jQuery.event.remove( elem, type );
7601
7602							// This is a shortcut to avoid jQuery.event.remove's overhead
7603							} else {
7604								jQuery.removeEvent( elem, type, data.handle );
7605							}
7606						}
7607					}
7608
7609					// Support: Chrome <=35 - 45+
7610					// Assign undefined instead of using delete, see Data#remove
7611					elem[ dataPriv.expando ] = undefined;
7612				}
7613				if ( elem[ dataUser.expando ] ) {
7614
7615					// Support: Chrome <=35 - 45+
7616					// Assign undefined instead of using delete, see Data#remove
7617					elem[ dataUser.expando ] = undefined;
7618				}
7619			}
7620		}
7621	}
7622} );
7623
7624jQuery.fn.extend( {
7625	detach: function( selector ) {
7626		return remove( this, selector, true );
7627	},
7628
7629	remove: function( selector ) {
7630		return remove( this, selector );
7631	},
7632
7633	text: function( value ) {
7634		return access( this, function( value ) {
7635			return value === undefined ?
7636				jQuery.text( this ) :
7637				this.empty().each( function() {
7638					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
7639						this.textContent = value;
7640					}
7641				} );
7642		}, null, value, arguments.length );
7643	},
7644
7645	append: function() {
7646		return domManip( this, arguments, function( elem ) {
7647			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
7648				var target = manipulationTarget( this, elem );
7649				target.appendChild( elem );
7650			}
7651		} );
7652	},
7653
7654	prepend: function() {
7655		return domManip( this, arguments, function( elem ) {
7656			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
7657				var target = manipulationTarget( this, elem );
7658				target.insertBefore( elem, target.firstChild );
7659			}
7660		} );
7661	},
7662
7663	before: function() {
7664		return domManip( this, arguments, function( elem ) {
7665			if ( this.parentNode ) {
7666				this.parentNode.insertBefore( elem, this );
7667			}
7668		} );
7669	},
7670
7671	after: function() {
7672		return domManip( this, arguments, function( elem ) {
7673			if ( this.parentNode ) {
7674				this.parentNode.insertBefore( elem, this.nextSibling );
7675			}
7676		} );
7677	},
7678
7679	empty: function() {
7680		var elem,
7681			i = 0;
7682
7683		for ( ; ( elem = this[ i ] ) != null; i++ ) {
7684			if ( elem.nodeType === 1 ) {
7685
7686				// Prevent memory leaks
7687				jQuery.cleanData( getAll( elem, false ) );
7688
7689				// Remove any remaining nodes
7690				elem.textContent = "";
7691			}
7692		}
7693
7694		return this;
7695	},
7696
7697	clone: function( dataAndEvents, deepDataAndEvents ) {
7698		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
7699		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
7700
7701		return this.map( function() {
7702			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
7703		} );
7704	},
7705
7706	html: function( value ) {
7707		return access( this, function( value ) {
7708			var elem = this[ 0 ] || {},
7709				i = 0,
7710				l = this.length;
7711
7712			if ( value === undefined && elem.nodeType === 1 ) {
7713				return elem.innerHTML;
7714			}
7715
7716			// See if we can take a shortcut and just use innerHTML
7717			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
7718				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
7719
7720				value = jQuery.htmlPrefilter( value );
7721
7722				try {
7723					for ( ; i < l; i++ ) {
7724						elem = this[ i ] || {};
7725
7726						// Remove element nodes and prevent memory leaks
7727						if ( elem.nodeType === 1 ) {
7728							jQuery.cleanData( getAll( elem, false ) );
7729							elem.innerHTML = value;
7730						}
7731					}
7732
7733					elem = 0;
7734
7735				// If using innerHTML throws an exception, use the fallback method
7736				} catch ( e ) {}
7737			}
7738
7739			if ( elem ) {
7740				this.empty().append( value );
7741			}
7742		}, null, value, arguments.length );
7743	},
7744
7745	replaceWith: function() {
7746		var ignored = [];
7747
7748		// Make the changes, replacing each non-ignored context element with the new content
7749		return domManip( this, arguments, function( elem ) {
7750			var parent = this.parentNode;
7751
7752			if ( jQuery.inArray( this, ignored ) < 0 ) {
7753				jQuery.cleanData( getAll( this ) );
7754				if ( parent ) {
7755					parent.replaceChild( elem, this );
7756				}
7757			}
7758
7759		// Force callback invocation
7760		}, ignored );
7761	}
7762} );
7763
7764jQuery.each( {
7765	appendTo: "append",
7766	prependTo: "prepend",
7767	insertBefore: "before",
7768	insertAfter: "after",
7769	replaceAll: "replaceWith"
7770}, function( name, original ) {
7771	jQuery.fn[ name ] = function( selector ) {
7772		var elems,
7773			ret = [],
7774			insert = jQuery( selector ),
7775			last = insert.length - 1,
7776			i = 0;
7777
7778		for ( ; i <= last; i++ ) {
7779			elems = i === last ? this : this.clone( true );
7780			jQuery( insert[ i ] )[ original ]( elems );
7781
7782			// Support: Android <=4.0 only, PhantomJS 1 only
7783			// .get() because push.apply(_, arraylike) throws on ancient WebKit
7784			push.apply( ret, elems.get() );
7785		}
7786
7787		return this.pushStack( ret );
7788	};
7789} );
7790var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
7791
7792var rcustomProp = /^--/;
7793
7794
7795var getStyles = function( elem ) {
7796
7797		// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)
7798		// IE throws on elements created in popups
7799		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
7800		var view = elem.ownerDocument.defaultView;
7801
7802		if ( !view || !view.opener ) {
7803			view = window;
7804		}
7805
7806		return view.getComputedStyle( elem );
7807	};
7808
7809var swap = function( elem, options, callback ) {
7810	var ret, name,
7811		old = {};
7812
7813	// Remember the old values, and insert the new ones
7814	for ( name in options ) {
7815		old[ name ] = elem.style[ name ];
7816		elem.style[ name ] = options[ name ];
7817	}
7818
7819	ret = callback.call( elem );
7820
7821	// Revert the old values
7822	for ( name in options ) {
7823		elem.style[ name ] = old[ name ];
7824	}
7825
7826	return ret;
7827};
7828
7829
7830var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
7831
7832
7833
7834( function() {
7835
7836	// Executing both pixelPosition & boxSizingReliable tests require only one layout
7837	// so they're executed at the same time to save the second computation.
7838	function computeStyleTests() {
7839
7840		// This is a singleton, we need to execute it only once
7841		if ( !div ) {
7842			return;
7843		}
7844
7845		container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
7846			"margin-top:1px;padding:0;border:0";
7847		div.style.cssText =
7848			"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
7849			"margin:auto;border:1px;padding:1px;" +
7850			"width:60%;top:1%";
7851		documentElement.appendChild( container ).appendChild( div );
7852
7853		var divStyle = window.getComputedStyle( div );
7854		pixelPositionVal = divStyle.top !== "1%";
7855
7856		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
7857		reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
7858
7859		// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
7860		// Some styles come back with percentage values, even though they shouldn't
7861		div.style.right = "60%";
7862		pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
7863
7864		// Support: IE 9 - 11 only
7865		// Detect misreporting of content dimensions for box-sizing:border-box elements
7866		boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
7867
7868		// Support: IE 9 only
7869		// Detect overflow:scroll screwiness (gh-3699)
7870		// Support: Chrome <=64
7871		// Don't get tricked when zoom affects offsetWidth (gh-4029)
7872		div.style.position = "absolute";
7873		scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
7874
7875		documentElement.removeChild( container );
7876
7877		// Nullify the div so it wouldn't be stored in the memory and
7878		// it will also be a sign that checks already performed
7879		div = null;
7880	}
7881
7882	function roundPixelMeasures( measure ) {
7883		return Math.round( parseFloat( measure ) );
7884	}
7885
7886	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
7887		reliableTrDimensionsVal, reliableMarginLeftVal,
7888		container = document.createElement( "div" ),
7889		div = document.createElement( "div" );
7890
7891	// Finish early in limited (non-browser) environments
7892	if ( !div.style ) {
7893		return;
7894	}
7895
7896	// Support: IE <=9 - 11 only
7897	// Style of cloned element affects source element cloned (trac-8908)
7898	div.style.backgroundClip = "content-box";
7899	div.cloneNode( true ).style.backgroundClip = "";
7900	support.clearCloneStyle = div.style.backgroundClip === "content-box";
7901
7902	jQuery.extend( support, {
7903		boxSizingReliable: function() {
7904			computeStyleTests();
7905			return boxSizingReliableVal;
7906		},
7907		pixelBoxStyles: function() {
7908			computeStyleTests();
7909			return pixelBoxStylesVal;
7910		},
7911		pixelPosition: function() {
7912			computeStyleTests();
7913			return pixelPositionVal;
7914		},
7915		reliableMarginLeft: function() {
7916			computeStyleTests();
7917			return reliableMarginLeftVal;
7918		},
7919		scrollboxSize: function() {
7920			computeStyleTests();
7921			return scrollboxSizeVal;
7922		},
7923
7924		// Support: IE 9 - 11+, Edge 15 - 18+
7925		// IE/Edge misreport `getComputedStyle` of table rows with width/height
7926		// set in CSS while `offset*` properties report correct values.
7927		// Behavior in IE 9 is more subtle than in newer versions & it passes
7928		// some versions of this test; make sure not to make it pass there!
7929		//
7930		// Support: Firefox 70+
7931		// Only Firefox includes border widths
7932		// in computed dimensions. (gh-4529)
7933		reliableTrDimensions: function() {
7934			var table, tr, trChild, trStyle;
7935			if ( reliableTrDimensionsVal == null ) {
7936				table = document.createElement( "table" );
7937				tr = document.createElement( "tr" );
7938				trChild = document.createElement( "div" );
7939
7940				table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
7941				tr.style.cssText = "box-sizing:content-box;border:1px solid";
7942
7943				// Support: Chrome 86+
7944				// Height set through cssText does not get applied.
7945				// Computed height then comes back as 0.
7946				tr.style.height = "1px";
7947				trChild.style.height = "9px";
7948
7949				// Support: Android 8 Chrome 86+
7950				// In our bodyBackground.html iframe,
7951				// display for all div elements is set to "inline",
7952				// which causes a problem only in Android 8 Chrome 86.
7953				// Ensuring the div is `display: block`
7954				// gets around this issue.
7955				trChild.style.display = "block";
7956
7957				documentElement
7958					.appendChild( table )
7959					.appendChild( tr )
7960					.appendChild( trChild );
7961
7962				trStyle = window.getComputedStyle( tr );
7963				reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
7964					parseInt( trStyle.borderTopWidth, 10 ) +
7965					parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
7966
7967				documentElement.removeChild( table );
7968			}
7969			return reliableTrDimensionsVal;
7970		}
7971	} );
7972} )();
7973
7974
7975function curCSS( elem, name, computed ) {
7976	var width, minWidth, maxWidth, ret,
7977		isCustomProp = rcustomProp.test( name ),
7978
7979		// Support: Firefox 51+
7980		// Retrieving style before computed somehow
7981		// fixes an issue with getting wrong values
7982		// on detached elements
7983		style = elem.style;
7984
7985	computed = computed || getStyles( elem );
7986
7987	// getPropertyValue is needed for:
7988	//   .css('filter') (IE 9 only, trac-12537)
7989	//   .css('--customProperty) (gh-3144)
7990	if ( computed ) {
7991
7992		// Support: IE <=9 - 11+
7993		// IE only supports `"float"` in `getPropertyValue`; in computed styles
7994		// it's only available as `"cssFloat"`. We no longer modify properties
7995		// sent to `.css()` apart from camelCasing, so we need to check both.
7996		// Normally, this would create difference in behavior: if
7997		// `getPropertyValue` returns an empty string, the value returned
7998		// by `.css()` would be `undefined`. This is usually the case for
7999		// disconnected elements. However, in IE even disconnected elements
8000		// with no styles return `"none"` for `getPropertyValue( "float" )`
8001		ret = computed.getPropertyValue( name ) || computed[ name ];
8002
8003		if ( isCustomProp && ret ) {
8004
8005			// Support: Firefox 105+, Chrome <=105+
8006			// Spec requires trimming whitespace for custom properties (gh-4926).
8007			// Firefox only trims leading whitespace. Chrome just collapses
8008			// both leading & trailing whitespace to a single space.
8009			//
8010			// Fall back to `undefined` if empty string returned.
8011			// This collapses a missing definition with property defined
8012			// and set to an empty string but there's no standard API
8013			// allowing us to differentiate them without a performance penalty
8014			// and returning `undefined` aligns with older jQuery.
8015			//
8016			// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED
8017			// as whitespace while CSS does not, but this is not a problem
8018			// because CSS preprocessing replaces them with U+000A LINE FEED
8019			// (which *is* CSS whitespace)
8020			// https://www.w3.org/TR/css-syntax-3/#input-preprocessing
8021			ret = ret.replace( rtrimCSS, "$1" ) || undefined;
8022		}
8023
8024		if ( ret === "" && !isAttached( elem ) ) {
8025			ret = jQuery.style( elem, name );
8026		}
8027
8028		// A tribute to the "awesome hack by Dean Edwards"
8029		// Android Browser returns percentage for some values,
8030		// but width seems to be reliably pixels.
8031		// This is against the CSSOM draft spec:
8032		// https://drafts.csswg.org/cssom/#resolved-values
8033		if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
8034
8035			// Remember the original values
8036			width = style.width;
8037			minWidth = style.minWidth;
8038			maxWidth = style.maxWidth;
8039
8040			// Put in the new values to get a computed value out
8041			style.minWidth = style.maxWidth = style.width = ret;
8042			ret = computed.width;
8043
8044			// Revert the changed values
8045			style.width = width;
8046			style.minWidth = minWidth;
8047			style.maxWidth = maxWidth;
8048		}
8049	}
8050
8051	return ret !== undefined ?
8052
8053		// Support: IE <=9 - 11 only
8054		// IE returns zIndex value as an integer.
8055		ret + "" :
8056		ret;
8057}
8058
8059
8060function addGetHookIf( conditionFn, hookFn ) {
8061
8062	// Define the hook, we'll check on the first run if it's really needed.
8063	return {
8064		get: function() {
8065			if ( conditionFn() ) {
8066
8067				// Hook not needed (or it's not possible to use it due
8068				// to missing dependency), remove it.
8069				delete this.get;
8070				return;
8071			}
8072
8073			// Hook needed; redefine it so that the support test is not executed again.
8074			return ( this.get = hookFn ).apply( this, arguments );
8075		}
8076	};
8077}
8078
8079
8080var cssPrefixes = [ "Webkit", "Moz", "ms" ],
8081	emptyStyle = document.createElement( "div" ).style,
8082	vendorProps = {};
8083
8084// Return a vendor-prefixed property or undefined
8085function vendorPropName( name ) {
8086
8087	// Check for vendor prefixed names
8088	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
8089		i = cssPrefixes.length;
8090
8091	while ( i-- ) {
8092		name = cssPrefixes[ i ] + capName;
8093		if ( name in emptyStyle ) {
8094			return name;
8095		}
8096	}
8097}
8098
8099// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
8100function finalPropName( name ) {
8101	var final = jQuery.cssProps[ name ] || vendorProps[ name ];
8102
8103	if ( final ) {
8104		return final;
8105	}
8106	if ( name in emptyStyle ) {
8107		return name;
8108	}
8109	return vendorProps[ name ] = vendorPropName( name ) || name;
8110}
8111
8112
8113var
8114
8115	// Swappable if display is none or starts with table
8116	// except "table", "table-cell", or "table-caption"
8117	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
8118	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
8119	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
8120	cssNormalTransform = {
8121		letterSpacing: "0",
8122		fontWeight: "400"
8123	};
8124
8125function setPositiveNumber( _elem, value, subtract ) {
8126
8127	// Any relative (+/-) values have already been
8128	// normalized at this point
8129	var matches = rcssNum.exec( value );
8130	return matches ?
8131
8132		// Guard against undefined "subtract", e.g., when used as in cssHooks
8133		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
8134		value;
8135}
8136
8137function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
8138	var i = dimension === "width" ? 1 : 0,
8139		extra = 0,
8140		delta = 0,
8141		marginDelta = 0;
8142
8143	// Adjustment may not be necessary
8144	if ( box === ( isBorderBox ? "border" : "content" ) ) {
8145		return 0;
8146	}
8147
8148	for ( ; i < 4; i += 2 ) {
8149
8150		// Both box models exclude margin
8151		// Count margin delta separately to only add it after scroll gutter adjustment.
8152		// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).
8153		if ( box === "margin" ) {
8154			marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
8155		}
8156
8157		// If we get here with a content-box, we're seeking "padding" or "border" or "margin"
8158		if ( !isBorderBox ) {
8159
8160			// Add padding
8161			delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
8162
8163			// For "border" or "margin", add border
8164			if ( box !== "padding" ) {
8165				delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
8166
8167			// But still keep track of it otherwise
8168			} else {
8169				extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
8170			}
8171
8172		// If we get here with a border-box (content + padding + border), we're seeking "content" or
8173		// "padding" or "margin"
8174		} else {
8175
8176			// For "content", subtract padding
8177			if ( box === "content" ) {
8178				delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
8179			}
8180
8181			// For "content" or "padding", subtract border
8182			if ( box !== "margin" ) {
8183				delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
8184			}
8185		}
8186	}
8187
8188	// Account for positive content-box scroll gutter when requested by providing computedVal
8189	if ( !isBorderBox && computedVal >= 0 ) {
8190
8191		// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
8192		// Assuming integer scroll gutter, subtract the rest and round down
8193		delta += Math.max( 0, Math.ceil(
8194			elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
8195			computedVal -
8196			delta -
8197			extra -
8198			0.5
8199
8200		// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
8201		// Use an explicit zero to avoid NaN (gh-3964)
8202		) ) || 0;
8203	}
8204
8205	return delta + marginDelta;
8206}
8207
8208function getWidthOrHeight( elem, dimension, extra ) {
8209
8210	// Start with computed style
8211	var styles = getStyles( elem ),
8212
8213		// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
8214		// Fake content-box until we know it's needed to know the true value.
8215		boxSizingNeeded = !support.boxSizingReliable() || extra,
8216		isBorderBox = boxSizingNeeded &&
8217			jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
8218		valueIsBorderBox = isBorderBox,
8219
8220		val = curCSS( elem, dimension, styles ),
8221		offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
8222
8223	// Support: Firefox <=54
8224	// Return a confounding non-pixel value or feign ignorance, as appropriate.
8225	if ( rnumnonpx.test( val ) ) {
8226		if ( !extra ) {
8227			return val;
8228		}
8229		val = "auto";
8230	}
8231
8232
8233	// Support: IE 9 - 11 only
8234	// Use offsetWidth/offsetHeight for when box sizing is unreliable.
8235	// In those cases, the computed value can be trusted to be border-box.
8236	if ( ( !support.boxSizingReliable() && isBorderBox ||
8237
8238		// Support: IE 10 - 11+, Edge 15 - 18+
8239		// IE/Edge misreport `getComputedStyle` of table rows with width/height
8240		// set in CSS while `offset*` properties report correct values.
8241		// Interestingly, in some cases IE 9 doesn't suffer from this issue.
8242		!support.reliableTrDimensions() && nodeName( elem, "tr" ) ||
8243
8244		// Fall back to offsetWidth/offsetHeight when value is "auto"
8245		// This happens for inline elements with no explicit setting (gh-3571)
8246		val === "auto" ||
8247
8248		// Support: Android <=4.1 - 4.3 only
8249		// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
8250		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
8251
8252		// Make sure the element is visible & connected
8253		elem.getClientRects().length ) {
8254
8255		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
8256
8257		// Where available, offsetWidth/offsetHeight approximate border box dimensions.
8258		// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
8259		// retrieved value as a content box dimension.
8260		valueIsBorderBox = offsetProp in elem;
8261		if ( valueIsBorderBox ) {
8262			val = elem[ offsetProp ];
8263		}
8264	}
8265
8266	// Normalize "" and auto
8267	val = parseFloat( val ) || 0;
8268
8269	// Adjust for the element's box model
8270	return ( val +
8271		boxModelAdjustment(
8272			elem,
8273			dimension,
8274			extra || ( isBorderBox ? "border" : "content" ),
8275			valueIsBorderBox,
8276			styles,
8277
8278			// Provide the current computed size to request scroll gutter calculation (gh-3589)
8279			val
8280		)
8281	) + "px";
8282}
8283
8284jQuery.extend( {
8285
8286	// Add in style property hooks for overriding the default
8287	// behavior of getting and setting a style property
8288	cssHooks: {
8289		opacity: {
8290			get: function( elem, computed ) {
8291				if ( computed ) {
8292
8293					// We should always get a number back from opacity
8294					var ret = curCSS( elem, "opacity" );
8295					return ret === "" ? "1" : ret;
8296				}
8297			}
8298		}
8299	},
8300
8301	// Don't automatically add "px" to these possibly-unitless properties
8302	cssNumber: {
8303		animationIterationCount: true,
8304		aspectRatio: true,
8305		borderImageSlice: true,
8306		columnCount: true,
8307		flexGrow: true,
8308		flexShrink: true,
8309		fontWeight: true,
8310		gridArea: true,
8311		gridColumn: true,
8312		gridColumnEnd: true,
8313		gridColumnStart: true,
8314		gridRow: true,
8315		gridRowEnd: true,
8316		gridRowStart: true,
8317		lineHeight: true,
8318		opacity: true,
8319		order: true,
8320		orphans: true,
8321		scale: true,
8322		widows: true,
8323		zIndex: true,
8324		zoom: true,
8325
8326		// SVG-related
8327		fillOpacity: true,
8328		floodOpacity: true,
8329		stopOpacity: true,
8330		strokeMiterlimit: true,
8331		strokeOpacity: true
8332	},
8333
8334	// Add in properties whose names you wish to fix before
8335	// setting or getting the value
8336	cssProps: {},
8337
8338	// Get and set the style property on a DOM Node
8339	style: function( elem, name, value, extra ) {
8340
8341		// Don't set styles on text and comment nodes
8342		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
8343			return;
8344		}
8345
8346		// Make sure that we're working with the right name
8347		var ret, type, hooks,
8348			origName = camelCase( name ),
8349			isCustomProp = rcustomProp.test( name ),
8350			style = elem.style;
8351
8352		// Make sure that we're working with the right name. We don't
8353		// want to query the value if it is a CSS custom property
8354		// since they are user-defined.
8355		if ( !isCustomProp ) {
8356			name = finalPropName( origName );
8357		}
8358
8359		// Gets hook for the prefixed version, then unprefixed version
8360		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
8361
8362		// Check if we're setting a value
8363		if ( value !== undefined ) {
8364			type = typeof value;
8365
8366			// Convert "+=" or "-=" to relative numbers (trac-7345)
8367			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
8368				value = adjustCSS( elem, name, ret );
8369
8370				// Fixes bug trac-9237
8371				type = "number";
8372			}
8373
8374			// Make sure that null and NaN values aren't set (trac-7116)
8375			if ( value == null || value !== value ) {
8376				return;
8377			}
8378
8379			// If a number was passed in, add the unit (except for certain CSS properties)
8380			// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
8381			// "px" to a few hardcoded values.
8382			if ( type === "number" && !isCustomProp ) {
8383				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
8384			}
8385
8386			// background-* props affect original clone's values
8387			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
8388				style[ name ] = "inherit";
8389			}
8390
8391			// If a hook was provided, use that value, otherwise just set the specified value
8392			if ( !hooks || !( "set" in hooks ) ||
8393				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
8394
8395				if ( isCustomProp ) {
8396					style.setProperty( name, value );
8397				} else {
8398					style[ name ] = value;
8399				}
8400			}
8401
8402		} else {
8403
8404			// If a hook was provided get the non-computed value from there
8405			if ( hooks && "get" in hooks &&
8406				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
8407
8408				return ret;
8409			}
8410
8411			// Otherwise just get the value from the style object
8412			return style[ name ];
8413		}
8414	},
8415
8416	css: function( elem, name, extra, styles ) {
8417		var val, num, hooks,
8418			origName = camelCase( name ),
8419			isCustomProp = rcustomProp.test( name );
8420
8421		// Make sure that we're working with the right name. We don't
8422		// want to modify the value if it is a CSS custom property
8423		// since they are user-defined.
8424		if ( !isCustomProp ) {
8425			name = finalPropName( origName );
8426		}
8427
8428		// Try prefixed name followed by the unprefixed name
8429		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
8430
8431		// If a hook was provided get the computed value from there
8432		if ( hooks && "get" in hooks ) {
8433			val = hooks.get( elem, true, extra );
8434		}
8435
8436		// Otherwise, if a way to get the computed value exists, use that
8437		if ( val === undefined ) {
8438			val = curCSS( elem, name, styles );
8439		}
8440
8441		// Convert "normal" to computed value
8442		if ( val === "normal" && name in cssNormalTransform ) {
8443			val = cssNormalTransform[ name ];
8444		}
8445
8446		// Make numeric if forced or a qualifier was provided and val looks numeric
8447		if ( extra === "" || extra ) {
8448			num = parseFloat( val );
8449			return extra === true || isFinite( num ) ? num || 0 : val;
8450		}
8451
8452		return val;
8453	}
8454} );
8455
8456jQuery.each( [ "height", "width" ], function( _i, dimension ) {
8457	jQuery.cssHooks[ dimension ] = {
8458		get: function( elem, computed, extra ) {
8459			if ( computed ) {
8460
8461				// Certain elements can have dimension info if we invisibly show them
8462				// but it must have a current display style that would benefit
8463				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
8464
8465					// Support: Safari 8+
8466					// Table columns in Safari have non-zero offsetWidth & zero
8467					// getBoundingClientRect().width unless display is changed.
8468					// Support: IE <=11 only
8469					// Running getBoundingClientRect on a disconnected node
8470					// in IE throws an error.
8471					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
8472					swap( elem, cssShow, function() {
8473						return getWidthOrHeight( elem, dimension, extra );
8474					} ) :
8475					getWidthOrHeight( elem, dimension, extra );
8476			}
8477		},
8478
8479		set: function( elem, value, extra ) {
8480			var matches,
8481				styles = getStyles( elem ),
8482
8483				// Only read styles.position if the test has a chance to fail
8484				// to avoid forcing a reflow.
8485				scrollboxSizeBuggy = !support.scrollboxSize() &&
8486					styles.position === "absolute",
8487
8488				// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
8489				boxSizingNeeded = scrollboxSizeBuggy || extra,
8490				isBorderBox = boxSizingNeeded &&
8491					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
8492				subtract = extra ?
8493					boxModelAdjustment(
8494						elem,
8495						dimension,
8496						extra,
8497						isBorderBox,
8498						styles
8499					) :
8500					0;
8501
8502			// Account for unreliable border-box dimensions by comparing offset* to computed and
8503			// faking a content-box to get border and padding (gh-3699)
8504			if ( isBorderBox && scrollboxSizeBuggy ) {
8505				subtract -= Math.ceil(
8506					elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
8507					parseFloat( styles[ dimension ] ) -
8508					boxModelAdjustment( elem, dimension, "border", false, styles ) -
8509					0.5
8510				);
8511			}
8512
8513			// Convert to pixels if value adjustment is needed
8514			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
8515				( matches[ 3 ] || "px" ) !== "px" ) {
8516
8517				elem.style[ dimension ] = value;
8518				value = jQuery.css( elem, dimension );
8519			}
8520
8521			return setPositiveNumber( elem, value, subtract );
8522		}
8523	};
8524} );
8525
8526jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
8527	function( elem, computed ) {
8528		if ( computed ) {
8529			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
8530				elem.getBoundingClientRect().left -
8531					swap( elem, { marginLeft: 0 }, function() {
8532						return elem.getBoundingClientRect().left;
8533					} )
8534			) + "px";
8535		}
8536	}
8537);
8538
8539// These hooks are used by animate to expand properties
8540jQuery.each( {
8541	margin: "",
8542	padding: "",
8543	border: "Width"
8544}, function( prefix, suffix ) {
8545	jQuery.cssHooks[ prefix + suffix ] = {
8546		expand: function( value ) {
8547			var i = 0,
8548				expanded = {},
8549
8550				// Assumes a single number if not a string
8551				parts = typeof value === "string" ? value.split( " " ) : [ value ];
8552
8553			for ( ; i < 4; i++ ) {
8554				expanded[ prefix + cssExpand[ i ] + suffix ] =
8555					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
8556			}
8557
8558			return expanded;
8559		}
8560	};
8561
8562	if ( prefix !== "margin" ) {
8563		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
8564	}
8565} );
8566
8567jQuery.fn.extend( {
8568	css: function( name, value ) {
8569		return access( this, function( elem, name, value ) {
8570			var styles, len,
8571				map = {},
8572				i = 0;
8573
8574			if ( Array.isArray( name ) ) {
8575				styles = getStyles( elem );
8576				len = name.length;
8577
8578				for ( ; i < len; i++ ) {
8579					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
8580				}
8581
8582				return map;
8583			}
8584
8585			return value !== undefined ?
8586				jQuery.style( elem, name, value ) :
8587				jQuery.css( elem, name );
8588		}, name, value, arguments.length > 1 );
8589	}
8590} );
8591
8592
8593function Tween( elem, options, prop, end, easing ) {
8594	return new Tween.prototype.init( elem, options, prop, end, easing );
8595}
8596jQuery.Tween = Tween;
8597
8598Tween.prototype = {
8599	constructor: Tween,
8600	init: function( elem, options, prop, end, easing, unit ) {
8601		this.elem = elem;
8602		this.prop = prop;
8603		this.easing = easing || jQuery.easing._default;
8604		this.options = options;
8605		this.start = this.now = this.cur();
8606		this.end = end;
8607		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
8608	},
8609	cur: function() {
8610		var hooks = Tween.propHooks[ this.prop ];
8611
8612		return hooks && hooks.get ?
8613			hooks.get( this ) :
8614			Tween.propHooks._default.get( this );
8615	},
8616	run: function( percent ) {
8617		var eased,
8618			hooks = Tween.propHooks[ this.prop ];
8619
8620		if ( this.options.duration ) {
8621			this.pos = eased = jQuery.easing[ this.easing ](
8622				percent, this.options.duration * percent, 0, 1, this.options.duration
8623			);
8624		} else {
8625			this.pos = eased = percent;
8626		}
8627		this.now = ( this.end - this.start ) * eased + this.start;
8628
8629		if ( this.options.step ) {
8630			this.options.step.call( this.elem, this.now, this );
8631		}
8632
8633		if ( hooks && hooks.set ) {
8634			hooks.set( this );
8635		} else {
8636			Tween.propHooks._default.set( this );
8637		}
8638		return this;
8639	}
8640};
8641
8642Tween.prototype.init.prototype = Tween.prototype;
8643
8644Tween.propHooks = {
8645	_default: {
8646		get: function( tween ) {
8647			var result;
8648
8649			// Use a property on the element directly when it is not a DOM element,
8650			// or when there is no matching style property that exists.
8651			if ( tween.elem.nodeType !== 1 ||
8652				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
8653				return tween.elem[ tween.prop ];
8654			}
8655
8656			// Passing an empty string as a 3rd parameter to .css will automatically
8657			// attempt a parseFloat and fallback to a string if the parse fails.
8658			// Simple values such as "10px" are parsed to Float;
8659			// complex values such as "rotate(1rad)" are returned as-is.
8660			result = jQuery.css( tween.elem, tween.prop, "" );
8661
8662			// Empty strings, null, undefined and "auto" are converted to 0.
8663			return !result || result === "auto" ? 0 : result;
8664		},
8665		set: function( tween ) {
8666
8667			// Use step hook for back compat.
8668			// Use cssHook if its there.
8669			// Use .style if available and use plain properties where available.
8670			if ( jQuery.fx.step[ tween.prop ] ) {
8671				jQuery.fx.step[ tween.prop ]( tween );
8672			} else if ( tween.elem.nodeType === 1 && (
8673				jQuery.cssHooks[ tween.prop ] ||
8674					tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
8675				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
8676			} else {
8677				tween.elem[ tween.prop ] = tween.now;
8678			}
8679		}
8680	}
8681};
8682
8683// Support: IE <=9 only
8684// Panic based approach to setting things on disconnected nodes
8685Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
8686	set: function( tween ) {
8687		if ( tween.elem.nodeType && tween.elem.parentNode ) {
8688			tween.elem[ tween.prop ] = tween.now;
8689		}
8690	}
8691};
8692
8693jQuery.easing = {
8694	linear: function( p ) {
8695		return p;
8696	},
8697	swing: function( p ) {
8698		return 0.5 - Math.cos( p * Math.PI ) / 2;
8699	},
8700	_default: "swing"
8701};
8702
8703jQuery.fx = Tween.prototype.init;
8704
8705// Back compat <1.8 extension point
8706jQuery.fx.step = {};
8707
8708
8709
8710
8711var
8712	fxNow, inProgress,
8713	rfxtypes = /^(?:toggle|show|hide)$/,
8714	rrun = /queueHooks$/;
8715
8716function schedule() {
8717	if ( inProgress ) {
8718		if ( document.hidden === false && window.requestAnimationFrame ) {
8719			window.requestAnimationFrame( schedule );
8720		} else {
8721			window.setTimeout( schedule, jQuery.fx.interval );
8722		}
8723
8724		jQuery.fx.tick();
8725	}
8726}
8727
8728// Animations created synchronously will run synchronously
8729function createFxNow() {
8730	window.setTimeout( function() {
8731		fxNow = undefined;
8732	} );
8733	return ( fxNow = Date.now() );
8734}
8735
8736// Generate parameters to create a standard animation
8737function genFx( type, includeWidth ) {
8738	var which,
8739		i = 0,
8740		attrs = { height: type };
8741
8742	// If we include width, step value is 1 to do all cssExpand values,
8743	// otherwise step value is 2 to skip over Left and Right
8744	includeWidth = includeWidth ? 1 : 0;
8745	for ( ; i < 4; i += 2 - includeWidth ) {
8746		which = cssExpand[ i ];
8747		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
8748	}
8749
8750	if ( includeWidth ) {
8751		attrs.opacity = attrs.width = type;
8752	}
8753
8754	return attrs;
8755}
8756
8757function createTween( value, prop, animation ) {
8758	var tween,
8759		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
8760		index = 0,
8761		length = collection.length;
8762	for ( ; index < length; index++ ) {
8763		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
8764
8765			// We're done with this property
8766			return tween;
8767		}
8768	}
8769}
8770
8771function defaultPrefilter( elem, props, opts ) {
8772	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
8773		isBox = "width" in props || "height" in props,
8774		anim = this,
8775		orig = {},
8776		style = elem.style,
8777		hidden = elem.nodeType && isHiddenWithinTree( elem ),
8778		dataShow = dataPriv.get( elem, "fxshow" );
8779
8780	// Queue-skipping animations hijack the fx hooks
8781	if ( !opts.queue ) {
8782		hooks = jQuery._queueHooks( elem, "fx" );
8783		if ( hooks.unqueued == null ) {
8784			hooks.unqueued = 0;
8785			oldfire = hooks.empty.fire;
8786			hooks.empty.fire = function() {
8787				if ( !hooks.unqueued ) {
8788					oldfire();
8789				}
8790			};
8791		}
8792		hooks.unqueued++;
8793
8794		anim.always( function() {
8795
8796			// Ensure the complete handler is called before this completes
8797			anim.always( function() {
8798				hooks.unqueued--;
8799				if ( !jQuery.queue( elem, "fx" ).length ) {
8800					hooks.empty.fire();
8801				}
8802			} );
8803		} );
8804	}
8805
8806	// Detect show/hide animations
8807	for ( prop in props ) {
8808		value = props[ prop ];
8809		if ( rfxtypes.test( value ) ) {
8810			delete props[ prop ];
8811			toggle = toggle || value === "toggle";
8812			if ( value === ( hidden ? "hide" : "show" ) ) {
8813
8814				// Pretend to be hidden if this is a "show" and
8815				// there is still data from a stopped show/hide
8816				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
8817					hidden = true;
8818
8819				// Ignore all other no-op show/hide data
8820				} else {
8821					continue;
8822				}
8823			}
8824			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
8825		}
8826	}
8827
8828	// Bail out if this is a no-op like .hide().hide()
8829	propTween = !jQuery.isEmptyObject( props );
8830	if ( !propTween && jQuery.isEmptyObject( orig ) ) {
8831		return;
8832	}
8833
8834	// Restrict "overflow" and "display" styles during box animations
8835	if ( isBox && elem.nodeType === 1 ) {
8836
8837		// Support: IE <=9 - 11, Edge 12 - 15
8838		// Record all 3 overflow attributes because IE does not infer the shorthand
8839		// from identically-valued overflowX and overflowY and Edge just mirrors
8840		// the overflowX value there.
8841		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
8842
8843		// Identify a display type, preferring old show/hide data over the CSS cascade
8844		restoreDisplay = dataShow && dataShow.display;
8845		if ( restoreDisplay == null ) {
8846			restoreDisplay = dataPriv.get( elem, "display" );
8847		}
8848		display = jQuery.css( elem, "display" );
8849		if ( display === "none" ) {
8850			if ( restoreDisplay ) {
8851				display = restoreDisplay;
8852			} else {
8853
8854				// Get nonempty value(s) by temporarily forcing visibility
8855				showHide( [ elem ], true );
8856				restoreDisplay = elem.style.display || restoreDisplay;
8857				display = jQuery.css( elem, "display" );
8858				showHide( [ elem ] );
8859			}
8860		}
8861
8862		// Animate inline elements as inline-block
8863		if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
8864			if ( jQuery.css( elem, "float" ) === "none" ) {
8865
8866				// Restore the original display value at the end of pure show/hide animations
8867				if ( !propTween ) {
8868					anim.done( function() {
8869						style.display = restoreDisplay;
8870					} );
8871					if ( restoreDisplay == null ) {
8872						display = style.display;
8873						restoreDisplay = display === "none" ? "" : display;
8874					}
8875				}
8876				style.display = "inline-block";
8877			}
8878		}
8879	}
8880
8881	if ( opts.overflow ) {
8882		style.overflow = "hidden";
8883		anim.always( function() {
8884			style.overflow = opts.overflow[ 0 ];
8885			style.overflowX = opts.overflow[ 1 ];
8886			style.overflowY = opts.overflow[ 2 ];
8887		} );
8888	}
8889
8890	// Implement show/hide animations
8891	propTween = false;
8892	for ( prop in orig ) {
8893
8894		// General show/hide setup for this element animation
8895		if ( !propTween ) {
8896			if ( dataShow ) {
8897				if ( "hidden" in dataShow ) {
8898					hidden = dataShow.hidden;
8899				}
8900			} else {
8901				dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
8902			}
8903
8904			// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
8905			if ( toggle ) {
8906				dataShow.hidden = !hidden;
8907			}
8908
8909			// Show elements before animating them
8910			if ( hidden ) {
8911				showHide( [ elem ], true );
8912			}
8913
8914			/* eslint-disable no-loop-func */
8915
8916			anim.done( function() {
8917
8918				/* eslint-enable no-loop-func */
8919
8920				// The final step of a "hide" animation is actually hiding the element
8921				if ( !hidden ) {
8922					showHide( [ elem ] );
8923				}
8924				dataPriv.remove( elem, "fxshow" );
8925				for ( prop in orig ) {
8926					jQuery.style( elem, prop, orig[ prop ] );
8927				}
8928			} );
8929		}
8930
8931		// Per-property setup
8932		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
8933		if ( !( prop in dataShow ) ) {
8934			dataShow[ prop ] = propTween.start;
8935			if ( hidden ) {
8936				propTween.end = propTween.start;
8937				propTween.start = 0;
8938			}
8939		}
8940	}
8941}
8942
8943function propFilter( props, specialEasing ) {
8944	var index, name, easing, value, hooks;
8945
8946	// camelCase, specialEasing and expand cssHook pass
8947	for ( index in props ) {
8948		name = camelCase( index );
8949		easing = specialEasing[ name ];
8950		value = props[ index ];
8951		if ( Array.isArray( value ) ) {
8952			easing = value[ 1 ];
8953			value = props[ index ] = value[ 0 ];
8954		}
8955
8956		if ( index !== name ) {
8957			props[ name ] = value;
8958			delete props[ index ];
8959		}
8960
8961		hooks = jQuery.cssHooks[ name ];
8962		if ( hooks && "expand" in hooks ) {
8963			value = hooks.expand( value );
8964			delete props[ name ];
8965
8966			// Not quite $.extend, this won't overwrite existing keys.
8967			// Reusing 'index' because we have the correct "name"
8968			for ( index in value ) {
8969				if ( !( index in props ) ) {
8970					props[ index ] = value[ index ];
8971					specialEasing[ index ] = easing;
8972				}
8973			}
8974		} else {
8975			specialEasing[ name ] = easing;
8976		}
8977	}
8978}
8979
8980function Animation( elem, properties, options ) {
8981	var result,
8982		stopped,
8983		index = 0,
8984		length = Animation.prefilters.length,
8985		deferred = jQuery.Deferred().always( function() {
8986
8987			// Don't match elem in the :animated selector
8988			delete tick.elem;
8989		} ),
8990		tick = function() {
8991			if ( stopped ) {
8992				return false;
8993			}
8994			var currentTime = fxNow || createFxNow(),
8995				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
8996
8997				// Support: Android 2.3 only
8998				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)
8999				temp = remaining / animation.duration || 0,
9000				percent = 1 - temp,
9001				index = 0,
9002				length = animation.tweens.length;
9003
9004			for ( ; index < length; index++ ) {
9005				animation.tweens[ index ].run( percent );
9006			}
9007
9008			deferred.notifyWith( elem, [ animation, percent, remaining ] );
9009
9010			// If there's more to do, yield
9011			if ( percent < 1 && length ) {
9012				return remaining;
9013			}
9014
9015			// If this was an empty animation, synthesize a final progress notification
9016			if ( !length ) {
9017				deferred.notifyWith( elem, [ animation, 1, 0 ] );
9018			}
9019
9020			// Resolve the animation and report its conclusion
9021			deferred.resolveWith( elem, [ animation ] );
9022			return false;
9023		},
9024		animation = deferred.promise( {
9025			elem: elem,
9026			props: jQuery.extend( {}, properties ),
9027			opts: jQuery.extend( true, {
9028				specialEasing: {},
9029				easing: jQuery.easing._default
9030			}, options ),
9031			originalProperties: properties,
9032			originalOptions: options,
9033			startTime: fxNow || createFxNow(),
9034			duration: options.duration,
9035			tweens: [],
9036			createTween: function( prop, end ) {
9037				var tween = jQuery.Tween( elem, animation.opts, prop, end,
9038					animation.opts.specialEasing[ prop ] || animation.opts.easing );
9039				animation.tweens.push( tween );
9040				return tween;
9041			},
9042			stop: function( gotoEnd ) {
9043				var index = 0,
9044
9045					// If we are going to the end, we want to run all the tweens
9046					// otherwise we skip this part
9047					length = gotoEnd ? animation.tweens.length : 0;
9048				if ( stopped ) {
9049					return this;
9050				}
9051				stopped = true;
9052				for ( ; index < length; index++ ) {
9053					animation.tweens[ index ].run( 1 );
9054				}
9055
9056				// Resolve when we played the last frame; otherwise, reject
9057				if ( gotoEnd ) {
9058					deferred.notifyWith( elem, [ animation, 1, 0 ] );
9059					deferred.resolveWith( elem, [ animation, gotoEnd ] );
9060				} else {
9061					deferred.rejectWith( elem, [ animation, gotoEnd ] );
9062				}
9063				return this;
9064			}
9065		} ),
9066		props = animation.props;
9067
9068	propFilter( props, animation.opts.specialEasing );
9069
9070	for ( ; index < length; index++ ) {
9071		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
9072		if ( result ) {
9073			if ( isFunction( result.stop ) ) {
9074				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
9075					result.stop.bind( result );
9076			}
9077			return result;
9078		}
9079	}
9080
9081	jQuery.map( props, createTween, animation );
9082
9083	if ( isFunction( animation.opts.start ) ) {
9084		animation.opts.start.call( elem, animation );
9085	}
9086
9087	// Attach callbacks from options
9088	animation
9089		.progress( animation.opts.progress )
9090		.done( animation.opts.done, animation.opts.complete )
9091		.fail( animation.opts.fail )
9092		.always( animation.opts.always );
9093
9094	jQuery.fx.timer(
9095		jQuery.extend( tick, {
9096			elem: elem,
9097			anim: animation,
9098			queue: animation.opts.queue
9099		} )
9100	);
9101
9102	return animation;
9103}
9104
9105jQuery.Animation = jQuery.extend( Animation, {
9106
9107	tweeners: {
9108		"*": [ function( prop, value ) {
9109			var tween = this.createTween( prop, value );
9110			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
9111			return tween;
9112		} ]
9113	},
9114
9115	tweener: function( props, callback ) {
9116		if ( isFunction( props ) ) {
9117			callback = props;
9118			props = [ "*" ];
9119		} else {
9120			props = props.match( rnothtmlwhite );
9121		}
9122
9123		var prop,
9124			index = 0,
9125			length = props.length;
9126
9127		for ( ; index < length; index++ ) {
9128			prop = props[ index ];
9129			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
9130			Animation.tweeners[ prop ].unshift( callback );
9131		}
9132	},
9133
9134	prefilters: [ defaultPrefilter ],
9135
9136	prefilter: function( callback, prepend ) {
9137		if ( prepend ) {
9138			Animation.prefilters.unshift( callback );
9139		} else {
9140			Animation.prefilters.push( callback );
9141		}
9142	}
9143} );
9144
9145jQuery.speed = function( speed, easing, fn ) {
9146	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
9147		complete: fn || !fn && easing ||
9148			isFunction( speed ) && speed,
9149		duration: speed,
9150		easing: fn && easing || easing && !isFunction( easing ) && easing
9151	};
9152
9153	// Go to the end state if fx are off
9154	if ( jQuery.fx.off ) {
9155		opt.duration = 0;
9156
9157	} else {
9158		if ( typeof opt.duration !== "number" ) {
9159			if ( opt.duration in jQuery.fx.speeds ) {
9160				opt.duration = jQuery.fx.speeds[ opt.duration ];
9161
9162			} else {
9163				opt.duration = jQuery.fx.speeds._default;
9164			}
9165		}
9166	}
9167
9168	// Normalize opt.queue - true/undefined/null -> "fx"
9169	if ( opt.queue == null || opt.queue === true ) {
9170		opt.queue = "fx";
9171	}
9172
9173	// Queueing
9174	opt.old = opt.complete;
9175
9176	opt.complete = function() {
9177		if ( isFunction( opt.old ) ) {
9178			opt.old.call( this );
9179		}
9180
9181		if ( opt.queue ) {
9182			jQuery.dequeue( this, opt.queue );
9183		}
9184	};
9185
9186	return opt;
9187};
9188
9189jQuery.fn.extend( {
9190	fadeTo: function( speed, to, easing, callback ) {
9191
9192		// Show any hidden elements after setting opacity to 0
9193		return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
9194
9195			// Animate to the value specified
9196			.end().animate( { opacity: to }, speed, easing, callback );
9197	},
9198	animate: function( prop, speed, easing, callback ) {
9199		var empty = jQuery.isEmptyObject( prop ),
9200			optall = jQuery.speed( speed, easing, callback ),
9201			doAnimation = function() {
9202
9203				// Operate on a copy of prop so per-property easing won't be lost
9204				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
9205
9206				// Empty animations, or finishing resolves immediately
9207				if ( empty || dataPriv.get( this, "finish" ) ) {
9208					anim.stop( true );
9209				}
9210			};
9211
9212		doAnimation.finish = doAnimation;
9213
9214		return empty || optall.queue === false ?
9215			this.each( doAnimation ) :
9216			this.queue( optall.queue, doAnimation );
9217	},
9218	stop: function( type, clearQueue, gotoEnd ) {
9219		var stopQueue = function( hooks ) {
9220			var stop = hooks.stop;
9221			delete hooks.stop;
9222			stop( gotoEnd );
9223		};
9224
9225		if ( typeof type !== "string" ) {
9226			gotoEnd = clearQueue;
9227			clearQueue = type;
9228			type = undefined;
9229		}
9230		if ( clearQueue ) {
9231			this.queue( type || "fx", [] );
9232		}
9233
9234		return this.each( function() {
9235			var dequeue = true,
9236				index = type != null && type + "queueHooks",
9237				timers = jQuery.timers,
9238				data = dataPriv.get( this );
9239
9240			if ( index ) {
9241				if ( data[ index ] && data[ index ].stop ) {
9242					stopQueue( data[ index ] );
9243				}
9244			} else {
9245				for ( index in data ) {
9246					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
9247						stopQueue( data[ index ] );
9248					}
9249				}
9250			}
9251
9252			for ( index = timers.length; index--; ) {
9253				if ( timers[ index ].elem === this &&
9254					( type == null || timers[ index ].queue === type ) ) {
9255
9256					timers[ index ].anim.stop( gotoEnd );
9257					dequeue = false;
9258					timers.splice( index, 1 );
9259				}
9260			}
9261
9262			// Start the next in the queue if the last step wasn't forced.
9263			// Timers currently will call their complete callbacks, which
9264			// will dequeue but only if they were gotoEnd.
9265			if ( dequeue || !gotoEnd ) {
9266				jQuery.dequeue( this, type );
9267			}
9268		} );
9269	},
9270	finish: function( type ) {
9271		if ( type !== false ) {
9272			type = type || "fx";
9273		}
9274		return this.each( function() {
9275			var index,
9276				data = dataPriv.get( this ),
9277				queue = data[ type + "queue" ],
9278				hooks = data[ type + "queueHooks" ],
9279				timers = jQuery.timers,
9280				length = queue ? queue.length : 0;
9281
9282			// Enable finishing flag on private data
9283			data.finish = true;
9284
9285			// Empty the queue first
9286			jQuery.queue( this, type, [] );
9287
9288			if ( hooks && hooks.stop ) {
9289				hooks.stop.call( this, true );
9290			}
9291
9292			// Look for any active animations, and finish them
9293			for ( index = timers.length; index--; ) {
9294				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
9295					timers[ index ].anim.stop( true );
9296					timers.splice( index, 1 );
9297				}
9298			}
9299
9300			// Look for any animations in the old queue and finish them
9301			for ( index = 0; index < length; index++ ) {
9302				if ( queue[ index ] && queue[ index ].finish ) {
9303					queue[ index ].finish.call( this );
9304				}
9305			}
9306
9307			// Turn off finishing flag
9308			delete data.finish;
9309		} );
9310	}
9311} );
9312
9313jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) {
9314	var cssFn = jQuery.fn[ name ];
9315	jQuery.fn[ name ] = function( speed, easing, callback ) {
9316		return speed == null || typeof speed === "boolean" ?
9317			cssFn.apply( this, arguments ) :
9318			this.animate( genFx( name, true ), speed, easing, callback );
9319	};
9320} );
9321
9322// Generate shortcuts for custom animations
9323jQuery.each( {
9324	slideDown: genFx( "show" ),
9325	slideUp: genFx( "hide" ),
9326	slideToggle: genFx( "toggle" ),
9327	fadeIn: { opacity: "show" },
9328	fadeOut: { opacity: "hide" },
9329	fadeToggle: { opacity: "toggle" }
9330}, function( name, props ) {
9331	jQuery.fn[ name ] = function( speed, easing, callback ) {
9332		return this.animate( props, speed, easing, callback );
9333	};
9334} );
9335
9336jQuery.timers = [];
9337jQuery.fx.tick = function() {
9338	var timer,
9339		i = 0,
9340		timers = jQuery.timers;
9341
9342	fxNow = Date.now();
9343
9344	for ( ; i < timers.length; i++ ) {
9345		timer = timers[ i ];
9346
9347		// Run the timer and safely remove it when done (allowing for external removal)
9348		if ( !timer() && timers[ i ] === timer ) {
9349			timers.splice( i--, 1 );
9350		}
9351	}
9352
9353	if ( !timers.length ) {
9354		jQuery.fx.stop();
9355	}
9356	fxNow = undefined;
9357};
9358
9359jQuery.fx.timer = function( timer ) {
9360	jQuery.timers.push( timer );
9361	jQuery.fx.start();
9362};
9363
9364jQuery.fx.interval = 13;
9365jQuery.fx.start = function() {
9366	if ( inProgress ) {
9367		return;
9368	}
9369
9370	inProgress = true;
9371	schedule();
9372};
9373
9374jQuery.fx.stop = function() {
9375	inProgress = null;
9376};
9377
9378jQuery.fx.speeds = {
9379	slow: 600,
9380	fast: 200,
9381
9382	// Default speed
9383	_default: 400
9384};
9385
9386
9387// Based off of the plugin by Clint Helfers, with permission.
9388jQuery.fn.delay = function( time, type ) {
9389	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
9390	type = type || "fx";
9391
9392	return this.queue( type, function( next, hooks ) {
9393		var timeout = window.setTimeout( next, time );
9394		hooks.stop = function() {
9395			window.clearTimeout( timeout );
9396		};
9397	} );
9398};
9399
9400
9401( function() {
9402	var input = document.createElement( "input" ),
9403		select = document.createElement( "select" ),
9404		opt = select.appendChild( document.createElement( "option" ) );
9405
9406	input.type = "checkbox";
9407
9408	// Support: Android <=4.3 only
9409	// Default value for a checkbox should be "on"
9410	support.checkOn = input.value !== "";
9411
9412	// Support: IE <=11 only
9413	// Must access selectedIndex to make default options select
9414	support.optSelected = opt.selected;
9415
9416	// Support: IE <=11 only
9417	// An input loses its value after becoming a radio
9418	input = document.createElement( "input" );
9419	input.value = "t";
9420	input.type = "radio";
9421	support.radioValue = input.value === "t";
9422} )();
9423
9424
9425var boolHook,
9426	attrHandle = jQuery.expr.attrHandle;
9427
9428jQuery.fn.extend( {
9429	attr: function( name, value ) {
9430		return access( this, jQuery.attr, name, value, arguments.length > 1 );
9431	},
9432
9433	removeAttr: function( name ) {
9434		return this.each( function() {
9435			jQuery.removeAttr( this, name );
9436		} );
9437	}
9438} );
9439
9440jQuery.extend( {
9441	attr: function( elem, name, value ) {
9442		var ret, hooks,
9443			nType = elem.nodeType;
9444
9445		// Don't get/set attributes on text, comment and attribute nodes
9446		if ( nType === 3 || nType === 8 || nType === 2 ) {
9447			return;
9448		}
9449
9450		// Fallback to prop when attributes are not supported
9451		if ( typeof elem.getAttribute === "undefined" ) {
9452			return jQuery.prop( elem, name, value );
9453		}
9454
9455		// Attribute hooks are determined by the lowercase version
9456		// Grab necessary hook if one is defined
9457		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
9458			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
9459				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
9460		}
9461
9462		if ( value !== undefined ) {
9463			if ( value === null ) {
9464				jQuery.removeAttr( elem, name );
9465				return;
9466			}
9467
9468			if ( hooks && "set" in hooks &&
9469				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
9470				return ret;
9471			}
9472
9473			elem.setAttribute( name, value + "" );
9474			return value;
9475		}
9476
9477		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
9478			return ret;
9479		}
9480
9481		ret = jQuery.find.attr( elem, name );
9482
9483		// Non-existent attributes return null, we normalize to undefined
9484		return ret == null ? undefined : ret;
9485	},
9486
9487	attrHooks: {
9488		type: {
9489			set: function( elem, value ) {
9490				if ( !support.radioValue && value === "radio" &&
9491					nodeName( elem, "input" ) ) {
9492					var val = elem.value;
9493					elem.setAttribute( "type", value );
9494					if ( val ) {
9495						elem.value = val;
9496					}
9497					return value;
9498				}
9499			}
9500		}
9501	},
9502
9503	removeAttr: function( elem, value ) {
9504		var name,
9505			i = 0,
9506
9507			// Attribute names can contain non-HTML whitespace characters
9508			// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
9509			attrNames = value && value.match( rnothtmlwhite );
9510
9511		if ( attrNames && elem.nodeType === 1 ) {
9512			while ( ( name = attrNames[ i++ ] ) ) {
9513				elem.removeAttribute( name );
9514			}
9515		}
9516	}
9517} );
9518
9519// Hooks for boolean attributes
9520boolHook = {
9521	set: function( elem, value, name ) {
9522		if ( value === false ) {
9523
9524			// Remove boolean attributes when set to false
9525			jQuery.removeAttr( elem, name );
9526		} else {
9527			elem.setAttribute( name, name );
9528		}
9529		return name;
9530	}
9531};
9532
9533jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) {
9534	var getter = attrHandle[ name ] || jQuery.find.attr;
9535
9536	attrHandle[ name ] = function( elem, name, isXML ) {
9537		var ret, handle,
9538			lowercaseName = name.toLowerCase();
9539
9540		if ( !isXML ) {
9541
9542			// Avoid an infinite loop by temporarily removing this function from the getter
9543			handle = attrHandle[ lowercaseName ];
9544			attrHandle[ lowercaseName ] = ret;
9545			ret = getter( elem, name, isXML ) != null ?
9546				lowercaseName :
9547				null;
9548			attrHandle[ lowercaseName ] = handle;
9549		}
9550		return ret;
9551	};
9552} );
9553
9554
9555
9556
9557var rfocusable = /^(?:input|select|textarea|button)$/i,
9558	rclickable = /^(?:a|area)$/i;
9559
9560jQuery.fn.extend( {
9561	prop: function( name, value ) {
9562		return access( this, jQuery.prop, name, value, arguments.length > 1 );
9563	},
9564
9565	removeProp: function( name ) {
9566		return this.each( function() {
9567			delete this[ jQuery.propFix[ name ] || name ];
9568		} );
9569	}
9570} );
9571
9572jQuery.extend( {
9573	prop: function( elem, name, value ) {
9574		var ret, hooks,
9575			nType = elem.nodeType;
9576
9577		// Don't get/set properties on text, comment and attribute nodes
9578		if ( nType === 3 || nType === 8 || nType === 2 ) {
9579			return;
9580		}
9581
9582		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
9583
9584			// Fix name and attach hooks
9585			name = jQuery.propFix[ name ] || name;
9586			hooks = jQuery.propHooks[ name ];
9587		}
9588
9589		if ( value !== undefined ) {
9590			if ( hooks && "set" in hooks &&
9591				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
9592				return ret;
9593			}
9594
9595			return ( elem[ name ] = value );
9596		}
9597
9598		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
9599			return ret;
9600		}
9601
9602		return elem[ name ];
9603	},
9604
9605	propHooks: {
9606		tabIndex: {
9607			get: function( elem ) {
9608
9609				// Support: IE <=9 - 11 only
9610				// elem.tabIndex doesn't always return the
9611				// correct value when it hasn't been explicitly set
9612				// Use proper attribute retrieval (trac-12072)
9613				var tabindex = jQuery.find.attr( elem, "tabindex" );
9614
9615				if ( tabindex ) {
9616					return parseInt( tabindex, 10 );
9617				}
9618
9619				if (
9620					rfocusable.test( elem.nodeName ) ||
9621					rclickable.test( elem.nodeName ) &&
9622					elem.href
9623				) {
9624					return 0;
9625				}
9626
9627				return -1;
9628			}
9629		}
9630	},
9631
9632	propFix: {
9633		"for": "htmlFor",
9634		"class": "className"
9635	}
9636} );
9637
9638// Support: IE <=11 only
9639// Accessing the selectedIndex property
9640// forces the browser to respect setting selected
9641// on the option
9642// The getter ensures a default option is selected
9643// when in an optgroup
9644// eslint rule "no-unused-expressions" is disabled for this code
9645// since it considers such accessions noop
9646if ( !support.optSelected ) {
9647	jQuery.propHooks.selected = {
9648		get: function( elem ) {
9649
9650			/* eslint no-unused-expressions: "off" */
9651
9652			var parent = elem.parentNode;
9653			if ( parent && parent.parentNode ) {
9654				parent.parentNode.selectedIndex;
9655			}
9656			return null;
9657		},
9658		set: function( elem ) {
9659
9660			/* eslint no-unused-expressions: "off" */
9661
9662			var parent = elem.parentNode;
9663			if ( parent ) {
9664				parent.selectedIndex;
9665
9666				if ( parent.parentNode ) {
9667					parent.parentNode.selectedIndex;
9668				}
9669			}
9670		}
9671	};
9672}
9673
9674jQuery.each( [
9675	"tabIndex",
9676	"readOnly",
9677	"maxLength",
9678	"cellSpacing",
9679	"cellPadding",
9680	"rowSpan",
9681	"colSpan",
9682	"useMap",
9683	"frameBorder",
9684	"contentEditable"
9685], function() {
9686	jQuery.propFix[ this.toLowerCase() ] = this;
9687} );
9688
9689
9690
9691
9692	// Strip and collapse whitespace according to HTML spec
9693	// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
9694	function stripAndCollapse( value ) {
9695		var tokens = value.match( rnothtmlwhite ) || [];
9696		return tokens.join( " " );
9697	}
9698
9699
9700function getClass( elem ) {
9701	return elem.getAttribute && elem.getAttribute( "class" ) || "";
9702}
9703
9704function classesToArray( value ) {
9705	if ( Array.isArray( value ) ) {
9706		return value;
9707	}
9708	if ( typeof value === "string" ) {
9709		return value.match( rnothtmlwhite ) || [];
9710	}
9711	return [];
9712}
9713
9714jQuery.fn.extend( {
9715	addClass: function( value ) {
9716		var classNames, cur, curValue, className, i, finalValue;
9717
9718		if ( isFunction( value ) ) {
9719			return this.each( function( j ) {
9720				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
9721			} );
9722		}
9723
9724		classNames = classesToArray( value );
9725
9726		if ( classNames.length ) {
9727			return this.each( function() {
9728				curValue = getClass( this );
9729				cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
9730
9731				if ( cur ) {
9732					for ( i = 0; i < classNames.length; i++ ) {
9733						className = classNames[ i ];
9734						if ( cur.indexOf( " " + className + " " ) < 0 ) {
9735							cur += className + " ";
9736						}
9737					}
9738
9739					// Only assign if different to avoid unneeded rendering.
9740					finalValue = stripAndCollapse( cur );
9741					if ( curValue !== finalValue ) {
9742						this.setAttribute( "class", finalValue );
9743					}
9744				}
9745			} );
9746		}
9747
9748		return this;
9749	},
9750
9751	removeClass: function( value ) {
9752		var classNames, cur, curValue, className, i, finalValue;
9753
9754		if ( isFunction( value ) ) {
9755			return this.each( function( j ) {
9756				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
9757			} );
9758		}
9759
9760		if ( !arguments.length ) {
9761			return this.attr( "class", "" );
9762		}
9763
9764		classNames = classesToArray( value );
9765
9766		if ( classNames.length ) {
9767			return this.each( function() {
9768				curValue = getClass( this );
9769
9770				// This expression is here for better compressibility (see addClass)
9771				cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
9772
9773				if ( cur ) {
9774					for ( i = 0; i < classNames.length; i++ ) {
9775						className = classNames[ i ];
9776
9777						// Remove *all* instances
9778						while ( cur.indexOf( " " + className + " " ) > -1 ) {
9779							cur = cur.replace( " " + className + " ", " " );
9780						}
9781					}
9782
9783					// Only assign if different to avoid unneeded rendering.
9784					finalValue = stripAndCollapse( cur );
9785					if ( curValue !== finalValue ) {
9786						this.setAttribute( "class", finalValue );
9787					}
9788				}
9789			} );
9790		}
9791
9792		return this;
9793	},
9794
9795	toggleClass: function( value, stateVal ) {
9796		var classNames, className, i, self,
9797			type = typeof value,
9798			isValidValue = type === "string" || Array.isArray( value );
9799
9800		if ( isFunction( value ) ) {
9801			return this.each( function( i ) {
9802				jQuery( this ).toggleClass(
9803					value.call( this, i, getClass( this ), stateVal ),
9804					stateVal
9805				);
9806			} );
9807		}
9808
9809		if ( typeof stateVal === "boolean" && isValidValue ) {
9810			return stateVal ? this.addClass( value ) : this.removeClass( value );
9811		}
9812
9813		classNames = classesToArray( value );
9814
9815		return this.each( function() {
9816			if ( isValidValue ) {
9817
9818				// Toggle individual class names
9819				self = jQuery( this );
9820
9821				for ( i = 0; i < classNames.length; i++ ) {
9822					className = classNames[ i ];
9823
9824					// Check each className given, space separated list
9825					if ( self.hasClass( className ) ) {
9826						self.removeClass( className );
9827					} else {
9828						self.addClass( className );
9829					}
9830				}
9831
9832			// Toggle whole class name
9833			} else if ( value === undefined || type === "boolean" ) {
9834				className = getClass( this );
9835				if ( className ) {
9836
9837					// Store className if set
9838					dataPriv.set( this, "__className__", className );
9839				}
9840
9841				// If the element has a class name or if we're passed `false`,
9842				// then remove the whole classname (if there was one, the above saved it).
9843				// Otherwise bring back whatever was previously saved (if anything),
9844				// falling back to the empty string if nothing was stored.
9845				if ( this.setAttribute ) {
9846					this.setAttribute( "class",
9847						className || value === false ?
9848							"" :
9849							dataPriv.get( this, "__className__" ) || ""
9850					);
9851				}
9852			}
9853		} );
9854	},
9855
9856	hasClass: function( selector ) {
9857		var className, elem,
9858			i = 0;
9859
9860		className = " " + selector + " ";
9861		while ( ( elem = this[ i++ ] ) ) {
9862			if ( elem.nodeType === 1 &&
9863				( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
9864				return true;
9865			}
9866		}
9867
9868		return false;
9869	}
9870} );
9871
9872
9873
9874
9875var rreturn = /\r/g;
9876
9877jQuery.fn.extend( {
9878	val: function( value ) {
9879		var hooks, ret, valueIsFunction,
9880			elem = this[ 0 ];
9881
9882		if ( !arguments.length ) {
9883			if ( elem ) {
9884				hooks = jQuery.valHooks[ elem.type ] ||
9885					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
9886
9887				if ( hooks &&
9888					"get" in hooks &&
9889					( ret = hooks.get( elem, "value" ) ) !== undefined
9890				) {
9891					return ret;
9892				}
9893
9894				ret = elem.value;
9895
9896				// Handle most common string cases
9897				if ( typeof ret === "string" ) {
9898					return ret.replace( rreturn, "" );
9899				}
9900
9901				// Handle cases where value is null/undef or number
9902				return ret == null ? "" : ret;
9903			}
9904
9905			return;
9906		}
9907
9908		valueIsFunction = isFunction( value );
9909
9910		return this.each( function( i ) {
9911			var val;
9912
9913			if ( this.nodeType !== 1 ) {
9914				return;
9915			}
9916
9917			if ( valueIsFunction ) {
9918				val = value.call( this, i, jQuery( this ).val() );
9919			} else {
9920				val = value;
9921			}
9922
9923			// Treat null/undefined as ""; convert numbers to string
9924			if ( val == null ) {
9925				val = "";
9926
9927			} else if ( typeof val === "number" ) {
9928				val += "";
9929
9930			} else if ( Array.isArray( val ) ) {
9931				val = jQuery.map( val, function( value ) {
9932					return value == null ? "" : value + "";
9933				} );
9934			}
9935
9936			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
9937
9938			// If set returns undefined, fall back to normal setting
9939			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
9940				this.value = val;
9941			}
9942		} );
9943	}
9944} );
9945
9946jQuery.extend( {
9947	valHooks: {
9948		option: {
9949			get: function( elem ) {
9950
9951				var val = jQuery.find.attr( elem, "value" );
9952				return val != null ?
9953					val :
9954
9955					// Support: IE <=10 - 11 only
9956					// option.text throws exceptions (trac-14686, trac-14858)
9957					// Strip and collapse whitespace
9958					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
9959					stripAndCollapse( jQuery.text( elem ) );
9960			}
9961		},
9962		select: {
9963			get: function( elem ) {
9964				var value, option, i,
9965					options = elem.options,
9966					index = elem.selectedIndex,
9967					one = elem.type === "select-one",
9968					values = one ? null : [],
9969					max = one ? index + 1 : options.length;
9970
9971				if ( index < 0 ) {
9972					i = max;
9973
9974				} else {
9975					i = one ? index : 0;
9976				}
9977
9978				// Loop through all the selected options
9979				for ( ; i < max; i++ ) {
9980					option = options[ i ];
9981
9982					// Support: IE <=9 only
9983					// IE8-9 doesn't update selected after form reset (trac-2551)
9984					if ( ( option.selected || i === index ) &&
9985
9986							// Don't return options that are disabled or in a disabled optgroup
9987							!option.disabled &&
9988							( !option.parentNode.disabled ||
9989								!nodeName( option.parentNode, "optgroup" ) ) ) {
9990
9991						// Get the specific value for the option
9992						value = jQuery( option ).val();
9993
9994						// We don't need an array for one selects
9995						if ( one ) {
9996							return value;
9997						}
9998
9999						// Multi-Selects return an array
10000						values.push( value );
10001					}
10002				}
10003
10004				return values;
10005			},
10006
10007			set: function( elem, value ) {
10008				var optionSet, option,
10009					options = elem.options,
10010					values = jQuery.makeArray( value ),
10011					i = options.length;
10012
10013				while ( i-- ) {
10014					option = options[ i ];
10015
10016					/* eslint-disable no-cond-assign */
10017
10018					if ( option.selected =
10019						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
10020					) {
10021						optionSet = true;
10022					}
10023
10024					/* eslint-enable no-cond-assign */
10025				}
10026
10027				// Force browsers to behave consistently when non-matching value is set
10028				if ( !optionSet ) {
10029					elem.selectedIndex = -1;
10030				}
10031				return values;
10032			}
10033		}
10034	}
10035} );
10036
10037// Radios and checkboxes getter/setter
10038jQuery.each( [ "radio", "checkbox" ], function() {
10039	jQuery.valHooks[ this ] = {
10040		set: function( elem, value ) {
10041			if ( Array.isArray( value ) ) {
10042				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
10043			}
10044		}
10045	};
10046	if ( !support.checkOn ) {
10047		jQuery.valHooks[ this ].get = function( elem ) {
10048			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
10049		};
10050	}
10051} );
10052
10053
10054
10055
10056// Return jQuery for attributes-only inclusion
10057var location = window.location;
10058
10059var nonce = { guid: Date.now() };
10060
10061var rquery = ( /\?/ );
10062
10063
10064
10065// Cross-browser xml parsing
10066jQuery.parseXML = function( data ) {
10067	var xml, parserErrorElem;
10068	if ( !data || typeof data !== "string" ) {
10069		return null;
10070	}
10071
10072	// Support: IE 9 - 11 only
10073	// IE throws on parseFromString with invalid input.
10074	try {
10075		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
10076	} catch ( e ) {}
10077
10078	parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];
10079	if ( !xml || parserErrorElem ) {
10080		jQuery.error( "Invalid XML: " + (
10081			parserErrorElem ?
10082				jQuery.map( parserErrorElem.childNodes, function( el ) {
10083					return el.textContent;
10084				} ).join( "\n" ) :
10085				data
10086		) );
10087	}
10088	return xml;
10089};
10090
10091
10092var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
10093	stopPropagationCallback = function( e ) {
10094		e.stopPropagation();
10095	};
10096
10097jQuery.extend( jQuery.event, {
10098
10099	trigger: function( event, data, elem, onlyHandlers ) {
10100
10101		var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
10102			eventPath = [ elem || document ],
10103			type = hasOwn.call( event, "type" ) ? event.type : event,
10104			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
10105
10106		cur = lastElement = tmp = elem = elem || document;
10107
10108		// Don't do events on text and comment nodes
10109		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
10110			return;
10111		}
10112
10113		// focus/blur morphs to focusin/out; ensure we're not firing them right now
10114		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
10115			return;
10116		}
10117
10118		if ( type.indexOf( "." ) > -1 ) {
10119
10120			// Namespaced trigger; create a regexp to match event type in handle()
10121			namespaces = type.split( "." );
10122			type = namespaces.shift();
10123			namespaces.sort();
10124		}
10125		ontype = type.indexOf( ":" ) < 0 && "on" + type;
10126
10127		// Caller can pass in a jQuery.Event object, Object, or just an event type string
10128		event = event[ jQuery.expando ] ?
10129			event :
10130			new jQuery.Event( type, typeof event === "object" && event );
10131
10132		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
10133		event.isTrigger = onlyHandlers ? 2 : 3;
10134		event.namespace = namespaces.join( "." );
10135		event.rnamespace = event.namespace ?
10136			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
10137			null;
10138
10139		// Clean up the event in case it is being reused
10140		event.result = undefined;
10141		if ( !event.target ) {
10142			event.target = elem;
10143		}
10144
10145		// Clone any incoming data and prepend the event, creating the handler arg list
10146		data = data == null ?
10147			[ event ] :
10148			jQuery.makeArray( data, [ event ] );
10149
10150		// Allow special events to draw outside the lines
10151		special = jQuery.event.special[ type ] || {};
10152		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
10153			return;
10154		}
10155
10156		// Determine event propagation path in advance, per W3C events spec (trac-9951)
10157		// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)
10158		if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
10159
10160			bubbleType = special.delegateType || type;
10161			if ( !rfocusMorph.test( bubbleType + type ) ) {
10162				cur = cur.parentNode;
10163			}
10164			for ( ; cur; cur = cur.parentNode ) {
10165				eventPath.push( cur );
10166				tmp = cur;
10167			}
10168
10169			// Only add window if we got to document (e.g., not plain obj or detached DOM)
10170			if ( tmp === ( elem.ownerDocument || document ) ) {
10171				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
10172			}
10173		}
10174
10175		// Fire handlers on the event path
10176		i = 0;
10177		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
10178			lastElement = cur;
10179			event.type = i > 1 ?
10180				bubbleType :
10181				special.bindType || type;
10182
10183			// jQuery handler
10184			handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] &&
10185				dataPriv.get( cur, "handle" );
10186			if ( handle ) {
10187				handle.apply( cur, data );
10188			}
10189
10190			// Native handler
10191			handle = ontype && cur[ ontype ];
10192			if ( handle && handle.apply && acceptData( cur ) ) {
10193				event.result = handle.apply( cur, data );
10194				if ( event.result === false ) {
10195					event.preventDefault();
10196				}
10197			}
10198		}
10199		event.type = type;
10200
10201		// If nobody prevented the default action, do it now
10202		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
10203
10204			if ( ( !special._default ||
10205				special._default.apply( eventPath.pop(), data ) === false ) &&
10206				acceptData( elem ) ) {
10207
10208				// Call a native DOM method on the target with the same name as the event.
10209				// Don't do default actions on window, that's where global variables be (trac-6170)
10210				if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
10211
10212					// Don't re-trigger an onFOO event when we call its FOO() method
10213					tmp = elem[ ontype ];
10214
10215					if ( tmp ) {
10216						elem[ ontype ] = null;
10217					}
10218
10219					// Prevent re-triggering of the same event, since we already bubbled it above
10220					jQuery.event.triggered = type;
10221
10222					if ( event.isPropagationStopped() ) {
10223						lastElement.addEventListener( type, stopPropagationCallback );
10224					}
10225
10226					elem[ type ]();
10227
10228					if ( event.isPropagationStopped() ) {
10229						lastElement.removeEventListener( type, stopPropagationCallback );
10230					}
10231
10232					jQuery.event.triggered = undefined;
10233
10234					if ( tmp ) {
10235						elem[ ontype ] = tmp;
10236					}
10237				}
10238			}
10239		}
10240
10241		return event.result;
10242	},
10243
10244	// Piggyback on a donor event to simulate a different one
10245	// Used only for `focus(in | out)` events
10246	simulate: function( type, elem, event ) {
10247		var e = jQuery.extend(
10248			new jQuery.Event(),
10249			event,
10250			{
10251				type: type,
10252				isSimulated: true
10253			}
10254		);
10255
10256		jQuery.event.trigger( e, null, elem );
10257	}
10258
10259} );
10260
10261jQuery.fn.extend( {
10262
10263	trigger: function( type, data ) {
10264		return this.each( function() {
10265			jQuery.event.trigger( type, data, this );
10266		} );
10267	},
10268	triggerHandler: function( type, data ) {
10269		var elem = this[ 0 ];
10270		if ( elem ) {
10271			return jQuery.event.trigger( type, data, elem, true );
10272		}
10273	}
10274} );
10275
10276
10277var
10278	rbracket = /\[\]$/,
10279	rCRLF = /\r?\n/g,
10280	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
10281	rsubmittable = /^(?:input|select|textarea|keygen)/i;
10282
10283function buildParams( prefix, obj, traditional, add ) {
10284	var name;
10285
10286	if ( Array.isArray( obj ) ) {
10287
10288		// Serialize array item.
10289		jQuery.each( obj, function( i, v ) {
10290			if ( traditional || rbracket.test( prefix ) ) {
10291
10292				// Treat each array item as a scalar.
10293				add( prefix, v );
10294
10295			} else {
10296
10297				// Item is non-scalar (array or object), encode its numeric index.
10298				buildParams(
10299					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
10300					v,
10301					traditional,
10302					add
10303				);
10304			}
10305		} );
10306
10307	} else if ( !traditional && toType( obj ) === "object" ) {
10308
10309		// Serialize object item.
10310		for ( name in obj ) {
10311			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
10312		}
10313
10314	} else {
10315
10316		// Serialize scalar item.
10317		add( prefix, obj );
10318	}
10319}
10320
10321// Serialize an array of form elements or a set of
10322// key/values into a query string
10323jQuery.param = function( a, traditional ) {
10324	var prefix,
10325		s = [],
10326		add = function( key, valueOrFunction ) {
10327
10328			// If value is a function, invoke it and use its return value
10329			var value = isFunction( valueOrFunction ) ?
10330				valueOrFunction() :
10331				valueOrFunction;
10332
10333			s[ s.length ] = encodeURIComponent( key ) + "=" +
10334				encodeURIComponent( value == null ? "" : value );
10335		};
10336
10337	if ( a == null ) {
10338		return "";
10339	}
10340
10341	// If an array was passed in, assume that it is an array of form elements.
10342	if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
10343
10344		// Serialize the form elements
10345		jQuery.each( a, function() {
10346			add( this.name, this.value );
10347		} );
10348
10349	} else {
10350
10351		// If traditional, encode the "old" way (the way 1.3.2 or older
10352		// did it), otherwise encode params recursively.
10353		for ( prefix in a ) {
10354			buildParams( prefix, a[ prefix ], traditional, add );
10355		}
10356	}
10357
10358	// Return the resulting serialization
10359	return s.join( "&" );
10360};
10361
10362jQuery.fn.extend( {
10363	serialize: function() {
10364		return jQuery.param( this.serializeArray() );
10365	},
10366	serializeArray: function() {
10367		return this.map( function() {
10368
10369			// Can add propHook for "elements" to filter or add form elements
10370			var elements = jQuery.prop( this, "elements" );
10371			return elements ? jQuery.makeArray( elements ) : this;
10372		} ).filter( function() {
10373			var type = this.type;
10374
10375			// Use .is( ":disabled" ) so that fieldset[disabled] works
10376			return this.name && !jQuery( this ).is( ":disabled" ) &&
10377				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
10378				( this.checked || !rcheckableType.test( type ) );
10379		} ).map( function( _i, elem ) {
10380			var val = jQuery( this ).val();
10381
10382			if ( val == null ) {
10383				return null;
10384			}
10385
10386			if ( Array.isArray( val ) ) {
10387				return jQuery.map( val, function( val ) {
10388					return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
10389				} );
10390			}
10391
10392			return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
10393		} ).get();
10394	}
10395} );
10396
10397
10398var
10399	r20 = /%20/g,
10400	rhash = /#.*$/,
10401	rantiCache = /([?&])_=[^&]*/,
10402	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
10403
10404	// trac-7653, trac-8125, trac-8152: local protocol detection
10405	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
10406	rnoContent = /^(?:GET|HEAD)$/,
10407	rprotocol = /^\/\//,
10408
10409	/* Prefilters
10410	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
10411	 * 2) These are called:
10412	 *    - BEFORE asking for a transport
10413	 *    - AFTER param serialization (s.data is a string if s.processData is true)
10414	 * 3) key is the dataType
10415	 * 4) the catchall symbol "*" can be used
10416	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
10417	 */
10418	prefilters = {},
10419
10420	/* Transports bindings
10421	 * 1) key is the dataType
10422	 * 2) the catchall symbol "*" can be used
10423	 * 3) selection will start with transport dataType and THEN go to "*" if needed
10424	 */
10425	transports = {},
10426
10427	// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression
10428	allTypes = "*/".concat( "*" ),
10429
10430	// Anchor tag for parsing the document origin
10431	originAnchor = document.createElement( "a" );
10432
10433originAnchor.href = location.href;
10434
10435// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
10436function addToPrefiltersOrTransports( structure ) {
10437
10438	// dataTypeExpression is optional and defaults to "*"
10439	return function( dataTypeExpression, func ) {
10440
10441		if ( typeof dataTypeExpression !== "string" ) {
10442			func = dataTypeExpression;
10443			dataTypeExpression = "*";
10444		}
10445
10446		var dataType,
10447			i = 0,
10448			dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
10449
10450		if ( isFunction( func ) ) {
10451
10452			// For each dataType in the dataTypeExpression
10453			while ( ( dataType = dataTypes[ i++ ] ) ) {
10454
10455				// Prepend if requested
10456				if ( dataType[ 0 ] === "+" ) {
10457					dataType = dataType.slice( 1 ) || "*";
10458					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
10459
10460				// Otherwise append
10461				} else {
10462					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
10463				}
10464			}
10465		}
10466	};
10467}
10468
10469// Base inspection function for prefilters and transports
10470function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
10471
10472	var inspected = {},
10473		seekingTransport = ( structure === transports );
10474
10475	function inspect( dataType ) {
10476		var selected;
10477		inspected[ dataType ] = true;
10478		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
10479			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
10480			if ( typeof dataTypeOrTransport === "string" &&
10481				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
10482
10483				options.dataTypes.unshift( dataTypeOrTransport );
10484				inspect( dataTypeOrTransport );
10485				return false;
10486			} else if ( seekingTransport ) {
10487				return !( selected = dataTypeOrTransport );
10488			}
10489		} );
10490		return selected;
10491	}
10492
10493	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
10494}
10495
10496// A special extend for ajax options
10497// that takes "flat" options (not to be deep extended)
10498// Fixes trac-9887
10499function ajaxExtend( target, src ) {
10500	var key, deep,
10501		flatOptions = jQuery.ajaxSettings.flatOptions || {};
10502
10503	for ( key in src ) {
10504		if ( src[ key ] !== undefined ) {
10505			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
10506		}
10507	}
10508	if ( deep ) {
10509		jQuery.extend( true, target, deep );
10510	}
10511
10512	return target;
10513}
10514
10515/* Handles responses to an ajax request:
10516 * - finds the right dataType (mediates between content-type and expected dataType)
10517 * - returns the corresponding response
10518 */
10519function ajaxHandleResponses( s, jqXHR, responses ) {
10520
10521	var ct, type, finalDataType, firstDataType,
10522		contents = s.contents,
10523		dataTypes = s.dataTypes;
10524
10525	// Remove auto dataType and get content-type in the process
10526	while ( dataTypes[ 0 ] === "*" ) {
10527		dataTypes.shift();
10528		if ( ct === undefined ) {
10529			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
10530		}
10531	}
10532
10533	// Check if we're dealing with a known content-type
10534	if ( ct ) {
10535		for ( type in contents ) {
10536			if ( contents[ type ] && contents[ type ].test( ct ) ) {
10537				dataTypes.unshift( type );
10538				break;
10539			}
10540		}
10541	}
10542
10543	// Check to see if we have a response for the expected dataType
10544	if ( dataTypes[ 0 ] in responses ) {
10545		finalDataType = dataTypes[ 0 ];
10546	} else {
10547
10548		// Try convertible dataTypes
10549		for ( type in responses ) {
10550			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
10551				finalDataType = type;
10552				break;
10553			}
10554			if ( !firstDataType ) {
10555				firstDataType = type;
10556			}
10557		}
10558
10559		// Or just use first one
10560		finalDataType = finalDataType || firstDataType;
10561	}
10562
10563	// If we found a dataType
10564	// We add the dataType to the list if needed
10565	// and return the corresponding response
10566	if ( finalDataType ) {
10567		if ( finalDataType !== dataTypes[ 0 ] ) {
10568			dataTypes.unshift( finalDataType );
10569		}
10570		return responses[ finalDataType ];
10571	}
10572}
10573
10574/* Chain conversions given the request and the original response
10575 * Also sets the responseXXX fields on the jqXHR instance
10576 */
10577function ajaxConvert( s, response, jqXHR, isSuccess ) {
10578	var conv2, current, conv, tmp, prev,
10579		converters = {},
10580
10581		// Work with a copy of dataTypes in case we need to modify it for conversion
10582		dataTypes = s.dataTypes.slice();
10583
10584	// Create converters map with lowercased keys
10585	if ( dataTypes[ 1 ] ) {
10586		for ( conv in s.converters ) {
10587			converters[ conv.toLowerCase() ] = s.converters[ conv ];
10588		}
10589	}
10590
10591	current = dataTypes.shift();
10592
10593	// Convert to each sequential dataType
10594	while ( current ) {
10595
10596		if ( s.responseFields[ current ] ) {
10597			jqXHR[ s.responseFields[ current ] ] = response;
10598		}
10599
10600		// Apply the dataFilter if provided
10601		if ( !prev && isSuccess && s.dataFilter ) {
10602			response = s.dataFilter( response, s.dataType );
10603		}
10604
10605		prev = current;
10606		current = dataTypes.shift();
10607
10608		if ( current ) {
10609
10610			// There's only work to do if current dataType is non-auto
10611			if ( current === "*" ) {
10612
10613				current = prev;
10614
10615			// Convert response if prev dataType is non-auto and differs from current
10616			} else if ( prev !== "*" && prev !== current ) {
10617
10618				// Seek a direct converter
10619				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
10620
10621				// If none found, seek a pair
10622				if ( !conv ) {
10623					for ( conv2 in converters ) {
10624
10625						// If conv2 outputs current
10626						tmp = conv2.split( " " );
10627						if ( tmp[ 1 ] === current ) {
10628
10629							// If prev can be converted to accepted input
10630							conv = converters[ prev + " " + tmp[ 0 ] ] ||
10631								converters[ "* " + tmp[ 0 ] ];
10632							if ( conv ) {
10633
10634								// Condense equivalence converters
10635								if ( conv === true ) {
10636									conv = converters[ conv2 ];
10637
10638								// Otherwise, insert the intermediate dataType
10639								} else if ( converters[ conv2 ] !== true ) {
10640									current = tmp[ 0 ];
10641									dataTypes.unshift( tmp[ 1 ] );
10642								}
10643								break;
10644							}
10645						}
10646					}
10647				}
10648
10649				// Apply converter (if not an equivalence)
10650				if ( conv !== true ) {
10651
10652					// Unless errors are allowed to bubble, catch and return them
10653					if ( conv && s.throws ) {
10654						response = conv( response );
10655					} else {
10656						try {
10657							response = conv( response );
10658						} catch ( e ) {
10659							return {
10660								state: "parsererror",
10661								error: conv ? e : "No conversion from " + prev + " to " + current
10662							};
10663						}
10664					}
10665				}
10666			}
10667		}
10668	}
10669
10670	return { state: "success", data: response };
10671}
10672
10673jQuery.extend( {
10674
10675	// Counter for holding the number of active queries
10676	active: 0,
10677
10678	// Last-Modified header cache for next request
10679	lastModified: {},
10680	etag: {},
10681
10682	ajaxSettings: {
10683		url: location.href,
10684		type: "GET",
10685		isLocal: rlocalProtocol.test( location.protocol ),
10686		global: true,
10687		processData: true,
10688		async: true,
10689		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
10690
10691		/*
10692		timeout: 0,
10693		data: null,
10694		dataType: null,
10695		username: null,
10696		password: null,
10697		cache: null,
10698		throws: false,
10699		traditional: false,
10700		headers: {},
10701		*/
10702
10703		accepts: {
10704			"*": allTypes,
10705			text: "text/plain",
10706			html: "text/html",
10707			xml: "application/xml, text/xml",
10708			json: "application/json, text/javascript"
10709		},
10710
10711		contents: {
10712			xml: /\bxml\b/,
10713			html: /\bhtml/,
10714			json: /\bjson\b/
10715		},
10716
10717		responseFields: {
10718			xml: "responseXML",
10719			text: "responseText",
10720			json: "responseJSON"
10721		},
10722
10723		// Data converters
10724		// Keys separate source (or catchall "*") and destination types with a single space
10725		converters: {
10726
10727			// Convert anything to text
10728			"* text": String,
10729
10730			// Text to html (true = no transformation)
10731			"text html": true,
10732
10733			// Evaluate text as a json expression
10734			"text json": JSON.parse,
10735
10736			// Parse text as xml
10737			"text xml": jQuery.parseXML
10738		},
10739
10740		// For options that shouldn't be deep extended:
10741		// you can add your own custom options here if
10742		// and when you create one that shouldn't be
10743		// deep extended (see ajaxExtend)
10744		flatOptions: {
10745			url: true,
10746			context: true
10747		}
10748	},
10749
10750	// Creates a full fledged settings object into target
10751	// with both ajaxSettings and settings fields.
10752	// If target is omitted, writes into ajaxSettings.
10753	ajaxSetup: function( target, settings ) {
10754		return settings ?
10755
10756			// Building a settings object
10757			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
10758
10759			// Extending ajaxSettings
10760			ajaxExtend( jQuery.ajaxSettings, target );
10761	},
10762
10763	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
10764	ajaxTransport: addToPrefiltersOrTransports( transports ),
10765
10766	// Main method
10767	ajax: function( url, options ) {
10768
10769		// If url is an object, simulate pre-1.5 signature
10770		if ( typeof url === "object" ) {
10771			options = url;
10772			url = undefined;
10773		}
10774
10775		// Force options to be an object
10776		options = options || {};
10777
10778		var transport,
10779
10780			// URL without anti-cache param
10781			cacheURL,
10782
10783			// Response headers
10784			responseHeadersString,
10785			responseHeaders,
10786
10787			// timeout handle
10788			timeoutTimer,
10789
10790			// Url cleanup var
10791			urlAnchor,
10792
10793			// Request state (becomes false upon send and true upon completion)
10794			completed,
10795
10796			// To know if global events are to be dispatched
10797			fireGlobals,
10798
10799			// Loop variable
10800			i,
10801
10802			// uncached part of the url
10803			uncached,
10804
10805			// Create the final options object
10806			s = jQuery.ajaxSetup( {}, options ),
10807
10808			// Callbacks context
10809			callbackContext = s.context || s,
10810
10811			// Context for global events is callbackContext if it is a DOM node or jQuery collection
10812			globalEventContext = s.context &&
10813				( callbackContext.nodeType || callbackContext.jquery ) ?
10814				jQuery( callbackContext ) :
10815				jQuery.event,
10816
10817			// Deferreds
10818			deferred = jQuery.Deferred(),
10819			completeDeferred = jQuery.Callbacks( "once memory" ),
10820
10821			// Status-dependent callbacks
10822			statusCode = s.statusCode || {},
10823
10824			// Headers (they are sent all at once)
10825			requestHeaders = {},
10826			requestHeadersNames = {},
10827
10828			// Default abort message
10829			strAbort = "canceled",
10830
10831			// Fake xhr
10832			jqXHR = {
10833				readyState: 0,
10834
10835				// Builds headers hashtable if needed
10836				getResponseHeader: function( key ) {
10837					var match;
10838					if ( completed ) {
10839						if ( !responseHeaders ) {
10840							responseHeaders = {};
10841							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
10842								responseHeaders[ match[ 1 ].toLowerCase() + " " ] =
10843									( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
10844										.concat( match[ 2 ] );
10845							}
10846						}
10847						match = responseHeaders[ key.toLowerCase() + " " ];
10848					}
10849					return match == null ? null : match.join( ", " );
10850				},
10851
10852				// Raw string
10853				getAllResponseHeaders: function() {
10854					return completed ? responseHeadersString : null;
10855				},
10856
10857				// Caches the header
10858				setRequestHeader: function( name, value ) {
10859					if ( completed == null ) {
10860						name = requestHeadersNames[ name.toLowerCase() ] =
10861							requestHeadersNames[ name.toLowerCase() ] || name;
10862						requestHeaders[ name ] = value;
10863					}
10864					return this;
10865				},
10866
10867				// Overrides response content-type header
10868				overrideMimeType: function( type ) {
10869					if ( completed == null ) {
10870						s.mimeType = type;
10871					}
10872					return this;
10873				},
10874
10875				// Status-dependent callbacks
10876				statusCode: function( map ) {
10877					var code;
10878					if ( map ) {
10879						if ( completed ) {
10880
10881							// Execute the appropriate callbacks
10882							jqXHR.always( map[ jqXHR.status ] );
10883						} else {
10884
10885							// Lazy-add the new callbacks in a way that preserves old ones
10886							for ( code in map ) {
10887								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
10888							}
10889						}
10890					}
10891					return this;
10892				},
10893
10894				// Cancel the request
10895				abort: function( statusText ) {
10896					var finalText = statusText || strAbort;
10897					if ( transport ) {
10898						transport.abort( finalText );
10899					}
10900					done( 0, finalText );
10901					return this;
10902				}
10903			};
10904
10905		// Attach deferreds
10906		deferred.promise( jqXHR );
10907
10908		// Add protocol if not provided (prefilters might expect it)
10909		// Handle falsy url in the settings object (trac-10093: consistency with old signature)
10910		// We also use the url parameter if available
10911		s.url = ( ( url || s.url || location.href ) + "" )
10912			.replace( rprotocol, location.protocol + "//" );
10913
10914		// Alias method option to type as per ticket trac-12004
10915		s.type = options.method || options.type || s.method || s.type;
10916
10917		// Extract dataTypes list
10918		s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
10919
10920		// A cross-domain request is in order when the origin doesn't match the current origin.
10921		if ( s.crossDomain == null ) {
10922			urlAnchor = document.createElement( "a" );
10923
10924			// Support: IE <=8 - 11, Edge 12 - 15
10925			// IE throws exception on accessing the href property if url is malformed,
10926			// e.g. http://example.com:80x/
10927			try {
10928				urlAnchor.href = s.url;
10929
10930				// Support: IE <=8 - 11 only
10931				// Anchor's host property isn't correctly set when s.url is relative
10932				urlAnchor.href = urlAnchor.href;
10933				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
10934					urlAnchor.protocol + "//" + urlAnchor.host;
10935			} catch ( e ) {
10936
10937				// If there is an error parsing the URL, assume it is crossDomain,
10938				// it can be rejected by the transport if it is invalid
10939				s.crossDomain = true;
10940			}
10941		}
10942
10943		// Convert data if not already a string
10944		if ( s.data && s.processData && typeof s.data !== "string" ) {
10945			s.data = jQuery.param( s.data, s.traditional );
10946		}
10947
10948		// Apply prefilters
10949		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
10950
10951		// If request was aborted inside a prefilter, stop there
10952		if ( completed ) {
10953			return jqXHR;
10954		}
10955
10956		// We can fire global events as of now if asked to
10957		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)
10958		fireGlobals = jQuery.event && s.global;
10959
10960		// Watch for a new set of requests
10961		if ( fireGlobals && jQuery.active++ === 0 ) {
10962			jQuery.event.trigger( "ajaxStart" );
10963		}
10964
10965		// Uppercase the type
10966		s.type = s.type.toUpperCase();
10967
10968		// Determine if request has content
10969		s.hasContent = !rnoContent.test( s.type );
10970
10971		// Save the URL in case we're toying with the If-Modified-Since
10972		// and/or If-None-Match header later on
10973		// Remove hash to simplify url manipulation
10974		cacheURL = s.url.replace( rhash, "" );
10975
10976		// More options handling for requests with no content
10977		if ( !s.hasContent ) {
10978
10979			// Remember the hash so we can put it back
10980			uncached = s.url.slice( cacheURL.length );
10981
10982			// If data is available and should be processed, append data to url
10983			if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
10984				cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
10985
10986				// trac-9682: remove data so that it's not used in an eventual retry
10987				delete s.data;
10988			}
10989
10990			// Add or update anti-cache param if needed
10991			if ( s.cache === false ) {
10992				cacheURL = cacheURL.replace( rantiCache, "$1" );
10993				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) +
10994					uncached;
10995			}
10996
10997			// Put hash and anti-cache on the URL that will be requested (gh-1732)
10998			s.url = cacheURL + uncached;
10999
11000		// Change '%20' to '+' if this is encoded form body content (gh-2658)
11001		} else if ( s.data && s.processData &&
11002			( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
11003			s.data = s.data.replace( r20, "+" );
11004		}
11005
11006		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
11007		if ( s.ifModified ) {
11008			if ( jQuery.lastModified[ cacheURL ] ) {
11009				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
11010			}
11011			if ( jQuery.etag[ cacheURL ] ) {
11012				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
11013			}
11014		}
11015
11016		// Set the correct header, if data is being sent
11017		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
11018			jqXHR.setRequestHeader( "Content-Type", s.contentType );
11019		}
11020
11021		// Set the Accepts header for the server, depending on the dataType
11022		jqXHR.setRequestHeader(
11023			"Accept",
11024			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
11025				s.accepts[ s.dataTypes[ 0 ] ] +
11026					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
11027				s.accepts[ "*" ]
11028		);
11029
11030		// Check for headers option
11031		for ( i in s.headers ) {
11032			jqXHR.setRequestHeader( i, s.headers[ i ] );
11033		}
11034
11035		// Allow custom headers/mimetypes and early abort
11036		if ( s.beforeSend &&
11037			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
11038
11039			// Abort if not done already and return
11040			return jqXHR.abort();
11041		}
11042
11043		// Aborting is no longer a cancellation
11044		strAbort = "abort";
11045
11046		// Install callbacks on deferreds
11047		completeDeferred.add( s.complete );
11048		jqXHR.done( s.success );
11049		jqXHR.fail( s.error );
11050
11051		// Get transport
11052		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
11053
11054		// If no transport, we auto-abort
11055		if ( !transport ) {
11056			done( -1, "No Transport" );
11057		} else {
11058			jqXHR.readyState = 1;
11059
11060			// Send global event
11061			if ( fireGlobals ) {
11062				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
11063			}
11064
11065			// If request was aborted inside ajaxSend, stop there
11066			if ( completed ) {
11067				return jqXHR;
11068			}
11069
11070			// Timeout
11071			if ( s.async && s.timeout > 0 ) {
11072				timeoutTimer = window.setTimeout( function() {
11073					jqXHR.abort( "timeout" );
11074				}, s.timeout );
11075			}
11076
11077			try {
11078				completed = false;
11079				transport.send( requestHeaders, done );
11080			} catch ( e ) {
11081
11082				// Rethrow post-completion exceptions
11083				if ( completed ) {
11084					throw e;
11085				}
11086
11087				// Propagate others as results
11088				done( -1, e );
11089			}
11090		}
11091
11092		// Callback for when everything is done
11093		function done( status, nativeStatusText, responses, headers ) {
11094			var isSuccess, success, error, response, modified,
11095				statusText = nativeStatusText;
11096
11097			// Ignore repeat invocations
11098			if ( completed ) {
11099				return;
11100			}
11101
11102			completed = true;
11103
11104			// Clear timeout if it exists
11105			if ( timeoutTimer ) {
11106				window.clearTimeout( timeoutTimer );
11107			}
11108
11109			// Dereference transport for early garbage collection
11110			// (no matter how long the jqXHR object will be used)
11111			transport = undefined;
11112
11113			// Cache response headers
11114			responseHeadersString = headers || "";
11115
11116			// Set readyState
11117			jqXHR.readyState = status > 0 ? 4 : 0;
11118
11119			// Determine if successful
11120			isSuccess = status >= 200 && status < 300 || status === 304;
11121
11122			// Get response data
11123			if ( responses ) {
11124				response = ajaxHandleResponses( s, jqXHR, responses );
11125			}
11126
11127			// Use a noop converter for missing script but not if jsonp
11128			if ( !isSuccess &&
11129				jQuery.inArray( "script", s.dataTypes ) > -1 &&
11130				jQuery.inArray( "json", s.dataTypes ) < 0 ) {
11131				s.converters[ "text script" ] = function() {};
11132			}
11133
11134			// Convert no matter what (that way responseXXX fields are always set)
11135			response = ajaxConvert( s, response, jqXHR, isSuccess );
11136
11137			// If successful, handle type chaining
11138			if ( isSuccess ) {
11139
11140				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
11141				if ( s.ifModified ) {
11142					modified = jqXHR.getResponseHeader( "Last-Modified" );
11143					if ( modified ) {
11144						jQuery.lastModified[ cacheURL ] = modified;
11145					}
11146					modified = jqXHR.getResponseHeader( "etag" );
11147					if ( modified ) {
11148						jQuery.etag[ cacheURL ] = modified;
11149					}
11150				}
11151
11152				// if no content
11153				if ( status === 204 || s.type === "HEAD" ) {
11154					statusText = "nocontent";
11155
11156				// if not modified
11157				} else if ( status === 304 ) {
11158					statusText = "notmodified";
11159
11160				// If we have data, let's convert it
11161				} else {
11162					statusText = response.state;
11163					success = response.data;
11164					error = response.error;
11165					isSuccess = !error;
11166				}
11167			} else {
11168
11169				// Extract error from statusText and normalize for non-aborts
11170				error = statusText;
11171				if ( status || !statusText ) {
11172					statusText = "error";
11173					if ( status < 0 ) {
11174						status = 0;
11175					}
11176				}
11177			}
11178
11179			// Set data for the fake xhr object
11180			jqXHR.status = status;
11181			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
11182
11183			// Success/Error
11184			if ( isSuccess ) {
11185				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
11186			} else {
11187				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
11188			}
11189
11190			// Status-dependent callbacks
11191			jqXHR.statusCode( statusCode );
11192			statusCode = undefined;
11193
11194			if ( fireGlobals ) {
11195				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
11196					[ jqXHR, s, isSuccess ? success : error ] );
11197			}
11198
11199			// Complete
11200			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
11201
11202			if ( fireGlobals ) {
11203				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
11204
11205				// Handle the global AJAX counter
11206				if ( !( --jQuery.active ) ) {
11207					jQuery.event.trigger( "ajaxStop" );
11208				}
11209			}
11210		}
11211
11212		return jqXHR;
11213	},
11214
11215	getJSON: function( url, data, callback ) {
11216		return jQuery.get( url, data, callback, "json" );
11217	},
11218
11219	getScript: function( url, callback ) {
11220		return jQuery.get( url, undefined, callback, "script" );
11221	}
11222} );
11223
11224jQuery.each( [ "get", "post" ], function( _i, method ) {
11225	jQuery[ method ] = function( url, data, callback, type ) {
11226
11227		// Shift arguments if data argument was omitted
11228		if ( isFunction( data ) ) {
11229			type = type || callback;
11230			callback = data;
11231			data = undefined;
11232		}
11233
11234		// The url can be an options object (which then must have .url)
11235		return jQuery.ajax( jQuery.extend( {
11236			url: url,
11237			type: method,
11238			dataType: type,
11239			data: data,
11240			success: callback
11241		}, jQuery.isPlainObject( url ) && url ) );
11242	};
11243} );
11244
11245jQuery.ajaxPrefilter( function( s ) {
11246	var i;
11247	for ( i in s.headers ) {
11248		if ( i.toLowerCase() === "content-type" ) {
11249			s.contentType = s.headers[ i ] || "";
11250		}
11251	}
11252} );
11253
11254
11255jQuery._evalUrl = function( url, options, doc ) {
11256	return jQuery.ajax( {
11257		url: url,
11258
11259		// Make this explicit, since user can override this through ajaxSetup (trac-11264)
11260		type: "GET",
11261		dataType: "script",
11262		cache: true,
11263		async: false,
11264		global: false,
11265
11266		// Only evaluate the response if it is successful (gh-4126)
11267		// dataFilter is not invoked for failure responses, so using it instead
11268		// of the default converter is kludgy but it works.
11269		converters: {
11270			"text script": function() {}
11271		},
11272		dataFilter: function( response ) {
11273			jQuery.globalEval( response, options, doc );
11274		}
11275	} );
11276};
11277
11278
11279jQuery.fn.extend( {
11280	wrapAll: function( html ) {
11281		var wrap;
11282
11283		if ( this[ 0 ] ) {
11284			if ( isFunction( html ) ) {
11285				html = html.call( this[ 0 ] );
11286			}
11287
11288			// The elements to wrap the target around
11289			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
11290
11291			if ( this[ 0 ].parentNode ) {
11292				wrap.insertBefore( this[ 0 ] );
11293			}
11294
11295			wrap.map( function() {
11296				var elem = this;
11297
11298				while ( elem.firstElementChild ) {
11299					elem = elem.firstElementChild;
11300				}
11301
11302				return elem;
11303			} ).append( this );
11304		}
11305
11306		return this;
11307	},
11308
11309	wrapInner: function( html ) {
11310		if ( isFunction( html ) ) {
11311			return this.each( function( i ) {
11312				jQuery( this ).wrapInner( html.call( this, i ) );
11313			} );
11314		}
11315
11316		return this.each( function() {
11317			var self = jQuery( this ),
11318				contents = self.contents();
11319
11320			if ( contents.length ) {
11321				contents.wrapAll( html );
11322
11323			} else {
11324				self.append( html );
11325			}
11326		} );
11327	},
11328
11329	wrap: function( html ) {
11330		var htmlIsFunction = isFunction( html );
11331
11332		return this.each( function( i ) {
11333			jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
11334		} );
11335	},
11336
11337	unwrap: function( selector ) {
11338		this.parent( selector ).not( "body" ).each( function() {
11339			jQuery( this ).replaceWith( this.childNodes );
11340		} );
11341		return this;
11342	}
11343} );
11344
11345
11346jQuery.expr.pseudos.hidden = function( elem ) {
11347	return !jQuery.expr.pseudos.visible( elem );
11348};
11349jQuery.expr.pseudos.visible = function( elem ) {
11350	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
11351};
11352
11353
11354
11355
11356jQuery.ajaxSettings.xhr = function() {
11357	try {
11358		return new window.XMLHttpRequest();
11359	} catch ( e ) {}
11360};
11361
11362var xhrSuccessStatus = {
11363
11364		// File protocol always yields status code 0, assume 200
11365		0: 200,
11366
11367		// Support: IE <=9 only
11368		// trac-1450: sometimes IE returns 1223 when it should be 204
11369		1223: 204
11370	},
11371	xhrSupported = jQuery.ajaxSettings.xhr();
11372
11373support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
11374support.ajax = xhrSupported = !!xhrSupported;
11375
11376jQuery.ajaxTransport( function( options ) {
11377	var callback, errorCallback;
11378
11379	// Cross domain only allowed if supported through XMLHttpRequest
11380	if ( support.cors || xhrSupported && !options.crossDomain ) {
11381		return {
11382			send: function( headers, complete ) {
11383				var i,
11384					xhr = options.xhr();
11385
11386				xhr.open(
11387					options.type,
11388					options.url,
11389					options.async,
11390					options.username,
11391					options.password
11392				);
11393
11394				// Apply custom fields if provided
11395				if ( options.xhrFields ) {
11396					for ( i in options.xhrFields ) {
11397						xhr[ i ] = options.xhrFields[ i ];
11398					}
11399				}
11400
11401				// Override mime type if needed
11402				if ( options.mimeType && xhr.overrideMimeType ) {
11403					xhr.overrideMimeType( options.mimeType );
11404				}
11405
11406				// X-Requested-With header
11407				// For cross-domain requests, seeing as conditions for a preflight are
11408				// akin to a jigsaw puzzle, we simply never set it to be sure.
11409				// (it can always be set on a per-request basis or even using ajaxSetup)
11410				// For same-domain requests, won't change header if already provided.
11411				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
11412					headers[ "X-Requested-With" ] = "XMLHttpRequest";
11413				}
11414
11415				// Set headers
11416				for ( i in headers ) {
11417					xhr.setRequestHeader( i, headers[ i ] );
11418				}
11419
11420				// Callback
11421				callback = function( type ) {
11422					return function() {
11423						if ( callback ) {
11424							callback = errorCallback = xhr.onload =
11425								xhr.onerror = xhr.onabort = xhr.ontimeout =
11426									xhr.onreadystatechange = null;
11427
11428							if ( type === "abort" ) {
11429								xhr.abort();
11430							} else if ( type === "error" ) {
11431
11432								// Support: IE <=9 only
11433								// On a manual native abort, IE9 throws
11434								// errors on any property access that is not readyState
11435								if ( typeof xhr.status !== "number" ) {
11436									complete( 0, "error" );
11437								} else {
11438									complete(
11439
11440										// File: protocol always yields status 0; see trac-8605, trac-14207
11441										xhr.status,
11442										xhr.statusText
11443									);
11444								}
11445							} else {
11446								complete(
11447									xhrSuccessStatus[ xhr.status ] || xhr.status,
11448									xhr.statusText,
11449
11450									// Support: IE <=9 only
11451									// IE9 has no XHR2 but throws on binary (trac-11426)
11452									// For XHR2 non-text, let the caller handle it (gh-2498)
11453									( xhr.responseType || "text" ) !== "text"  ||
11454									typeof xhr.responseText !== "string" ?
11455										{ binary: xhr.response } :
11456										{ text: xhr.responseText },
11457									xhr.getAllResponseHeaders()
11458								);
11459							}
11460						}
11461					};
11462				};
11463
11464				// Listen to events
11465				xhr.onload = callback();
11466				errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
11467
11468				// Support: IE 9 only
11469				// Use onreadystatechange to replace onabort
11470				// to handle uncaught aborts
11471				if ( xhr.onabort !== undefined ) {
11472					xhr.onabort = errorCallback;
11473				} else {
11474					xhr.onreadystatechange = function() {
11475
11476						// Check readyState before timeout as it changes
11477						if ( xhr.readyState === 4 ) {
11478
11479							// Allow onerror to be called first,
11480							// but that will not handle a native abort
11481							// Also, save errorCallback to a variable
11482							// as xhr.onerror cannot be accessed
11483							window.setTimeout( function() {
11484								if ( callback ) {
11485									errorCallback();
11486								}
11487							} );
11488						}
11489					};
11490				}
11491
11492				// Create the abort callback
11493				callback = callback( "abort" );
11494
11495				try {
11496
11497					// Do send the request (this may raise an exception)
11498					xhr.send( options.hasContent && options.data || null );
11499				} catch ( e ) {
11500
11501					// trac-14683: Only rethrow if this hasn't been notified as an error yet
11502					if ( callback ) {
11503						throw e;
11504					}
11505				}
11506			},
11507
11508			abort: function() {
11509				if ( callback ) {
11510					callback();
11511				}
11512			}
11513		};
11514	}
11515} );
11516
11517
11518
11519
11520// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
11521jQuery.ajaxPrefilter( function( s ) {
11522	if ( s.crossDomain ) {
11523		s.contents.script = false;
11524	}
11525} );
11526
11527// Install script dataType
11528jQuery.ajaxSetup( {
11529	accepts: {
11530		script: "text/javascript, application/javascript, " +
11531			"application/ecmascript, application/x-ecmascript"
11532	},
11533	contents: {
11534		script: /\b(?:java|ecma)script\b/
11535	},
11536	converters: {
11537		"text script": function( text ) {
11538			jQuery.globalEval( text );
11539			return text;
11540		}
11541	}
11542} );
11543
11544// Handle cache's special case and crossDomain
11545jQuery.ajaxPrefilter( "script", function( s ) {
11546	if ( s.cache === undefined ) {
11547		s.cache = false;
11548	}
11549	if ( s.crossDomain ) {
11550		s.type = "GET";
11551	}
11552} );
11553
11554// Bind script tag hack transport
11555jQuery.ajaxTransport( "script", function( s ) {
11556
11557	// This transport only deals with cross domain or forced-by-attrs requests
11558	if ( s.crossDomain || s.scriptAttrs ) {
11559		var script, callback;
11560		return {
11561			send: function( _, complete ) {
11562				script = jQuery( "<script>" )
11563					.attr( s.scriptAttrs || {} )
11564					.prop( { charset: s.scriptCharset, src: s.url } )
11565					.on( "load error", callback = function( evt ) {
11566						script.remove();
11567						callback = null;
11568						if ( evt ) {
11569							complete( evt.type === "error" ? 404 : 200, evt.type );
11570						}
11571					} );
11572
11573				// Use native DOM manipulation to avoid our domManip AJAX trickery
11574				document.head.appendChild( script[ 0 ] );
11575			},
11576			abort: function() {
11577				if ( callback ) {
11578					callback();
11579				}
11580			}
11581		};
11582	}
11583} );
11584
11585
11586
11587
11588var oldCallbacks = [],
11589	rjsonp = /(=)\?(?=&|$)|\?\?/;
11590
11591// Default jsonp settings
11592jQuery.ajaxSetup( {
11593	jsonp: "callback",
11594	jsonpCallback: function() {
11595		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) );
11596		this[ callback ] = true;
11597		return callback;
11598	}
11599} );
11600
11601// Detect, normalize options and install callbacks for jsonp requests
11602jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
11603
11604	var callbackName, overwritten, responseContainer,
11605		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
11606			"url" :
11607			typeof s.data === "string" &&
11608				( s.contentType || "" )
11609					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
11610				rjsonp.test( s.data ) && "data"
11611		);
11612
11613	// Handle iff the expected data type is "jsonp" or we have a parameter to set
11614	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
11615
11616		// Get callback name, remembering preexisting value associated with it
11617		callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
11618			s.jsonpCallback() :
11619			s.jsonpCallback;
11620
11621		// Insert callback into url or form data
11622		if ( jsonProp ) {
11623			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
11624		} else if ( s.jsonp !== false ) {
11625			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
11626		}
11627
11628		// Use data converter to retrieve json after script execution
11629		s.converters[ "script json" ] = function() {
11630			if ( !responseContainer ) {
11631				jQuery.error( callbackName + " was not called" );
11632			}
11633			return responseContainer[ 0 ];
11634		};
11635
11636		// Force json dataType
11637		s.dataTypes[ 0 ] = "json";
11638
11639		// Install callback
11640		overwritten = window[ callbackName ];
11641		window[ callbackName ] = function() {
11642			responseContainer = arguments;
11643		};
11644
11645		// Clean-up function (fires after converters)
11646		jqXHR.always( function() {
11647
11648			// If previous value didn't exist - remove it
11649			if ( overwritten === undefined ) {
11650				jQuery( window ).removeProp( callbackName );
11651
11652			// Otherwise restore preexisting value
11653			} else {
11654				window[ callbackName ] = overwritten;
11655			}
11656
11657			// Save back as free
11658			if ( s[ callbackName ] ) {
11659
11660				// Make sure that re-using the options doesn't screw things around
11661				s.jsonpCallback = originalSettings.jsonpCallback;
11662
11663				// Save the callback name for future use
11664				oldCallbacks.push( callbackName );
11665			}
11666
11667			// Call if it was a function and we have a response
11668			if ( responseContainer && isFunction( overwritten ) ) {
11669				overwritten( responseContainer[ 0 ] );
11670			}
11671
11672			responseContainer = overwritten = undefined;
11673		} );
11674
11675		// Delegate to script
11676		return "script";
11677	}
11678} );
11679
11680
11681
11682
11683// Support: Safari 8 only
11684// In Safari 8 documents created via document.implementation.createHTMLDocument
11685// collapse sibling forms: the second one becomes a child of the first one.
11686// Because of that, this security measure has to be disabled in Safari 8.
11687// https://bugs.webkit.org/show_bug.cgi?id=137337
11688support.createHTMLDocument = ( function() {
11689	var body = document.implementation.createHTMLDocument( "" ).body;
11690	body.innerHTML = "<form></form><form></form>";
11691	return body.childNodes.length === 2;
11692} )();
11693
11694
11695// Argument "data" should be string of html
11696// context (optional): If specified, the fragment will be created in this context,
11697// defaults to document
11698// keepScripts (optional): If true, will include scripts passed in the html string
11699jQuery.parseHTML = function( data, context, keepScripts ) {
11700	if ( typeof data !== "string" ) {
11701		return [];
11702	}
11703	if ( typeof context === "boolean" ) {
11704		keepScripts = context;
11705		context = false;
11706	}
11707
11708	var base, parsed, scripts;
11709
11710	if ( !context ) {
11711
11712		// Stop scripts or inline event handlers from being executed immediately
11713		// by using document.implementation
11714		if ( support.createHTMLDocument ) {
11715			context = document.implementation.createHTMLDocument( "" );
11716
11717			// Set the base href for the created document
11718			// so any parsed elements with URLs
11719			// are based on the document's URL (gh-2965)
11720			base = context.createElement( "base" );
11721			base.href = document.location.href;
11722			context.head.appendChild( base );
11723		} else {
11724			context = document;
11725		}
11726	}
11727
11728	parsed = rsingleTag.exec( data );
11729	scripts = !keepScripts && [];
11730
11731	// Single tag
11732	if ( parsed ) {
11733		return [ context.createElement( parsed[ 1 ] ) ];
11734	}
11735
11736	parsed = buildFragment( [ data ], context, scripts );
11737
11738	if ( scripts && scripts.length ) {
11739		jQuery( scripts ).remove();
11740	}
11741
11742	return jQuery.merge( [], parsed.childNodes );
11743};
11744
11745
11746/**
11747 * Load a url into a page
11748 */
11749jQuery.fn.load = function( url, params, callback ) {
11750	var selector, type, response,
11751		self = this,
11752		off = url.indexOf( " " );
11753
11754	if ( off > -1 ) {
11755		selector = stripAndCollapse( url.slice( off ) );
11756		url = url.slice( 0, off );
11757	}
11758
11759	// If it's a function
11760	if ( isFunction( params ) ) {
11761
11762		// We assume that it's the callback
11763		callback = params;
11764		params = undefined;
11765
11766	// Otherwise, build a param string
11767	} else if ( params && typeof params === "object" ) {
11768		type = "POST";
11769	}
11770
11771	// If we have elements to modify, make the request
11772	if ( self.length > 0 ) {
11773		jQuery.ajax( {
11774			url: url,
11775
11776			// If "type" variable is undefined, then "GET" method will be used.
11777			// Make value of this field explicit since
11778			// user can override it through ajaxSetup method
11779			type: type || "GET",
11780			dataType: "html",
11781			data: params
11782		} ).done( function( responseText ) {
11783
11784			// Save response for use in complete callback
11785			response = arguments;
11786
11787			self.html( selector ?
11788
11789				// If a selector was specified, locate the right elements in a dummy div
11790				// Exclude scripts to avoid IE 'Permission Denied' errors
11791				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
11792
11793				// Otherwise use the full result
11794				responseText );
11795
11796		// If the request succeeds, this function gets "data", "status", "jqXHR"
11797		// but they are ignored because response was set above.
11798		// If it fails, this function gets "jqXHR", "status", "error"
11799		} ).always( callback && function( jqXHR, status ) {
11800			self.each( function() {
11801				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
11802			} );
11803		} );
11804	}
11805
11806	return this;
11807};
11808
11809
11810
11811
11812jQuery.expr.pseudos.animated = function( elem ) {
11813	return jQuery.grep( jQuery.timers, function( fn ) {
11814		return elem === fn.elem;
11815	} ).length;
11816};
11817
11818
11819
11820
11821jQuery.offset = {
11822	setOffset: function( elem, options, i ) {
11823		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
11824			position = jQuery.css( elem, "position" ),
11825			curElem = jQuery( elem ),
11826			props = {};
11827
11828		// Set position first, in-case top/left are set even on static elem
11829		if ( position === "static" ) {
11830			elem.style.position = "relative";
11831		}
11832
11833		curOffset = curElem.offset();
11834		curCSSTop = jQuery.css( elem, "top" );
11835		curCSSLeft = jQuery.css( elem, "left" );
11836		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
11837			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
11838
11839		// Need to be able to calculate position if either
11840		// top or left is auto and position is either absolute or fixed
11841		if ( calculatePosition ) {
11842			curPosition = curElem.position();
11843			curTop = curPosition.top;
11844			curLeft = curPosition.left;
11845
11846		} else {
11847			curTop = parseFloat( curCSSTop ) || 0;
11848			curLeft = parseFloat( curCSSLeft ) || 0;
11849		}
11850
11851		if ( isFunction( options ) ) {
11852
11853			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
11854			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
11855		}
11856
11857		if ( options.top != null ) {
11858			props.top = ( options.top - curOffset.top ) + curTop;
11859		}
11860		if ( options.left != null ) {
11861			props.left = ( options.left - curOffset.left ) + curLeft;
11862		}
11863
11864		if ( "using" in options ) {
11865			options.using.call( elem, props );
11866
11867		} else {
11868			curElem.css( props );
11869		}
11870	}
11871};
11872
11873jQuery.fn.extend( {
11874
11875	// offset() relates an element's border box to the document origin
11876	offset: function( options ) {
11877
11878		// Preserve chaining for setter
11879		if ( arguments.length ) {
11880			return options === undefined ?
11881				this :
11882				this.each( function( i ) {
11883					jQuery.offset.setOffset( this, options, i );
11884				} );
11885		}
11886
11887		var rect, win,
11888			elem = this[ 0 ];
11889
11890		if ( !elem ) {
11891			return;
11892		}
11893
11894		// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
11895		// Support: IE <=11 only
11896		// Running getBoundingClientRect on a
11897		// disconnected node in IE throws an error
11898		if ( !elem.getClientRects().length ) {
11899			return { top: 0, left: 0 };
11900		}
11901
11902		// Get document-relative position by adding viewport scroll to viewport-relative gBCR
11903		rect = elem.getBoundingClientRect();
11904		win = elem.ownerDocument.defaultView;
11905		return {
11906			top: rect.top + win.pageYOffset,
11907			left: rect.left + win.pageXOffset
11908		};
11909	},
11910
11911	// position() relates an element's margin box to its offset parent's padding box
11912	// This corresponds to the behavior of CSS absolute positioning
11913	position: function() {
11914		if ( !this[ 0 ] ) {
11915			return;
11916		}
11917
11918		var offsetParent, offset, doc,
11919			elem = this[ 0 ],
11920			parentOffset = { top: 0, left: 0 };
11921
11922		// position:fixed elements are offset from the viewport, which itself always has zero offset
11923		if ( jQuery.css( elem, "position" ) === "fixed" ) {
11924
11925			// Assume position:fixed implies availability of getBoundingClientRect
11926			offset = elem.getBoundingClientRect();
11927
11928		} else {
11929			offset = this.offset();
11930
11931			// Account for the *real* offset parent, which can be the document or its root element
11932			// when a statically positioned element is identified
11933			doc = elem.ownerDocument;
11934			offsetParent = elem.offsetParent || doc.documentElement;
11935			while ( offsetParent &&
11936				( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
11937				jQuery.css( offsetParent, "position" ) === "static" ) {
11938
11939				offsetParent = offsetParent.parentNode;
11940			}
11941			if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
11942
11943				// Incorporate borders into its offset, since they are outside its content origin
11944				parentOffset = jQuery( offsetParent ).offset();
11945				parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
11946				parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
11947			}
11948		}
11949
11950		// Subtract parent offsets and element margins
11951		return {
11952			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
11953			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
11954		};
11955	},
11956
11957	// This method will return documentElement in the following cases:
11958	// 1) For the element inside the iframe without offsetParent, this method will return
11959	//    documentElement of the parent window
11960	// 2) For the hidden or detached element
11961	// 3) For body or html element, i.e. in case of the html node - it will return itself
11962	//
11963	// but those exceptions were never presented as a real life use-cases
11964	// and might be considered as more preferable results.
11965	//
11966	// This logic, however, is not guaranteed and can change at any point in the future
11967	offsetParent: function() {
11968		return this.map( function() {
11969			var offsetParent = this.offsetParent;
11970
11971			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
11972				offsetParent = offsetParent.offsetParent;
11973			}
11974
11975			return offsetParent || documentElement;
11976		} );
11977	}
11978} );
11979
11980// Create scrollLeft and scrollTop methods
11981jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
11982	var top = "pageYOffset" === prop;
11983
11984	jQuery.fn[ method ] = function( val ) {
11985		return access( this, function( elem, method, val ) {
11986
11987			// Coalesce documents and windows
11988			var win;
11989			if ( isWindow( elem ) ) {
11990				win = elem;
11991			} else if ( elem.nodeType === 9 ) {
11992				win = elem.defaultView;
11993			}
11994
11995			if ( val === undefined ) {
11996				return win ? win[ prop ] : elem[ method ];
11997			}
11998
11999			if ( win ) {
12000				win.scrollTo(
12001					!top ? val : win.pageXOffset,
12002					top ? val : win.pageYOffset
12003				);
12004
12005			} else {
12006				elem[ method ] = val;
12007			}
12008		}, method, val, arguments.length );
12009	};
12010} );
12011
12012// Support: Safari <=7 - 9.1, Chrome <=37 - 49
12013// Add the top/left cssHooks using jQuery.fn.position
12014// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
12015// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
12016// getComputedStyle returns percent when specified for top/left/bottom/right;
12017// rather than make the css module depend on the offset module, just check for it here
12018jQuery.each( [ "top", "left" ], function( _i, prop ) {
12019	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
12020		function( elem, computed ) {
12021			if ( computed ) {
12022				computed = curCSS( elem, prop );
12023
12024				// If curCSS returns percentage, fallback to offset
12025				return rnumnonpx.test( computed ) ?
12026					jQuery( elem ).position()[ prop ] + "px" :
12027					computed;
12028			}
12029		}
12030	);
12031} );
12032
12033
12034// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
12035jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
12036	jQuery.each( {
12037		padding: "inner" + name,
12038		content: type,
12039		"": "outer" + name
12040	}, function( defaultExtra, funcName ) {
12041
12042		// Margin is only for outerHeight, outerWidth
12043		jQuery.fn[ funcName ] = function( margin, value ) {
12044			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
12045				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
12046
12047			return access( this, function( elem, type, value ) {
12048				var doc;
12049
12050				if ( isWindow( elem ) ) {
12051
12052					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
12053					return funcName.indexOf( "outer" ) === 0 ?
12054						elem[ "inner" + name ] :
12055						elem.document.documentElement[ "client" + name ];
12056				}
12057
12058				// Get document width or height
12059				if ( elem.nodeType === 9 ) {
12060					doc = elem.documentElement;
12061
12062					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
12063					// whichever is greatest
12064					return Math.max(
12065						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
12066						elem.body[ "offset" + name ], doc[ "offset" + name ],
12067						doc[ "client" + name ]
12068					);
12069				}
12070
12071				return value === undefined ?
12072
12073					// Get width or height on the element, requesting but not forcing parseFloat
12074					jQuery.css( elem, type, extra ) :
12075
12076					// Set width or height on the element
12077					jQuery.style( elem, type, value, extra );
12078			}, type, chainable ? margin : undefined, chainable );
12079		};
12080	} );
12081} );
12082
12083
12084jQuery.each( [
12085	"ajaxStart",
12086	"ajaxStop",
12087	"ajaxComplete",
12088	"ajaxError",
12089	"ajaxSuccess",
12090	"ajaxSend"
12091], function( _i, type ) {
12092	jQuery.fn[ type ] = function( fn ) {
12093		return this.on( type, fn );
12094	};
12095} );
12096
12097
12098
12099
12100jQuery.fn.extend( {
12101
12102	bind: function( types, data, fn ) {
12103		return this.on( types, null, data, fn );
12104	},
12105	unbind: function( types, fn ) {
12106		return this.off( types, null, fn );
12107	},
12108
12109	delegate: function( selector, types, data, fn ) {
12110		return this.on( types, selector, data, fn );
12111	},
12112	undelegate: function( selector, types, fn ) {
12113
12114		// ( namespace ) or ( selector, types [, fn] )
12115		return arguments.length === 1 ?
12116			this.off( selector, "**" ) :
12117			this.off( types, selector || "**", fn );
12118	},
12119
12120	hover: function( fnOver, fnOut ) {
12121		return this
12122			.on( "mouseenter", fnOver )
12123			.on( "mouseleave", fnOut || fnOver );
12124	}
12125} );
12126
12127jQuery.each(
12128	( "blur focus focusin focusout resize scroll click dblclick " +
12129	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
12130	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
12131	function( _i, name ) {
12132
12133		// Handle event binding
12134		jQuery.fn[ name ] = function( data, fn ) {
12135			return arguments.length > 0 ?
12136				this.on( name, null, data, fn ) :
12137				this.trigger( name );
12138		};
12139	}
12140);
12141
12142
12143
12144
12145// Support: Android <=4.0 only
12146// Make sure we trim BOM and NBSP
12147// Require that the "whitespace run" starts from a non-whitespace
12148// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position.
12149var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
12150
12151// Bind a function to a context, optionally partially applying any
12152// arguments.
12153// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
12154// However, it is not slated for removal any time soon
12155jQuery.proxy = function( fn, context ) {
12156	var tmp, args, proxy;
12157
12158	if ( typeof context === "string" ) {
12159		tmp = fn[ context ];
12160		context = fn;
12161		fn = tmp;
12162	}
12163
12164	// Quick check to determine if target is callable, in the spec
12165	// this throws a TypeError, but we will just return undefined.
12166	if ( !isFunction( fn ) ) {
12167		return undefined;
12168	}
12169
12170	// Simulated bind
12171	args = slice.call( arguments, 2 );
12172	proxy = function() {
12173		return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
12174	};
12175
12176	// Set the guid of unique handler to the same of original handler, so it can be removed
12177	proxy.guid = fn.guid = fn.guid || jQuery.guid++;
12178
12179	return proxy;
12180};
12181
12182jQuery.holdReady = function( hold ) {
12183	if ( hold ) {
12184		jQuery.readyWait++;
12185	} else {
12186		jQuery.ready( true );
12187	}
12188};
12189jQuery.isArray = Array.isArray;
12190jQuery.parseJSON = JSON.parse;
12191jQuery.nodeName = nodeName;
12192jQuery.isFunction = isFunction;
12193jQuery.isWindow = isWindow;
12194jQuery.camelCase = camelCase;
12195jQuery.type = toType;
12196
12197jQuery.now = Date.now;
12198
12199jQuery.isNumeric = function( obj ) {
12200
12201	// As of jQuery 3.0, isNumeric is limited to
12202	// strings and numbers (primitives or objects)
12203	// that can be coerced to finite numbers (gh-2662)
12204	var type = jQuery.type( obj );
12205	return ( type === "number" || type === "string" ) &&
12206
12207		// parseFloat NaNs numeric-cast false positives ("")
12208		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
12209		// subtraction forces infinities to NaN
12210		!isNaN( obj - parseFloat( obj ) );
12211};
12212
12213jQuery.trim = function( text ) {
12214	return text == null ?
12215		"" :
12216		( text + "" ).replace( rtrim, "$1" );
12217};
12218
12219
12220
12221// Register as a named AMD module, since jQuery can be concatenated with other
12222// files that may use define, but not via a proper concatenation script that
12223// understands anonymous AMD modules. A named AMD is safest and most robust
12224// way to register. Lowercase jquery is used because AMD module names are
12225// derived from file names, and jQuery is normally delivered in a lowercase
12226// file name. Do this after creating the global so that if an AMD module wants
12227// to call noConflict to hide this version of jQuery, it will work.
12228
12229// Note that for maximum portability, libraries that are not jQuery should
12230// declare themselves as anonymous modules, and avoid setting a global if an
12231// AMD loader is present. jQuery is a special case. For more information, see
12232// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
12233
12234if ( true ) {
12235	!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {
12236		return jQuery;
12237	}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
12238				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
12239}
12240
12241
12242
12243
12244var
12245
12246	// Map over jQuery in case of overwrite
12247	_jQuery = window.jQuery,
12248
12249	// Map over the $ in case of overwrite
12250	_$ = window.$;
12251
12252jQuery.noConflict = function( deep ) {
12253	if ( window.$ === jQuery ) {
12254		window.$ = _$;
12255	}
12256
12257	if ( deep && window.jQuery === jQuery ) {
12258		window.jQuery = _jQuery;
12259	}
12260
12261	return jQuery;
12262};
12263
12264// Expose jQuery and $ identifiers, even in AMD
12265// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)
12266// and CommonJS for browser emulators (trac-13566)
12267if ( typeof noGlobal === "undefined" ) {
12268	window.jQuery = window.$ = jQuery;
12269}
12270
12271
12272
12273
12274return jQuery;
12275} );
12276
12277
12278/***/ }),
12279
vendor: 15,128 bytes, lines 12280-12810
12280/***/ "../node_modules/node-libs-browser/node_modules/punycode/punycode.js":
12281/*!***************************************************************************!*\
12282  !*** ../node_modules/node-libs-browser/node_modules/punycode/punycode.js ***!
12283  \***************************************************************************/
12284/*! no static exports found */
12285/***/ (function(module, exports, __webpack_require__) {
12286
12287/* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/punycode v1.4.1 by @mathias */
12288;(function(root) {
12289
12290	/** Detect free variables */
12291	var freeExports =  true && exports &&
12292		!exports.nodeType && exports;
12293	var freeModule =  true && module &&
12294		!module.nodeType && module;
12295	var freeGlobal = typeof global == 'object' && global;
12296	if (
12297		freeGlobal.global === freeGlobal ||
12298		freeGlobal.window === freeGlobal ||
12299		freeGlobal.self === freeGlobal
12300	) {
12301		root = freeGlobal;
12302	}
12303
12304	/**
12305	 * The `punycode` object.
12306	 * @name punycode
12307	 * @type Object
12308	 */
12309	var punycode,
12310
12311	/** Highest positive signed 32-bit float value */
12312	maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
12313
12314	/** Bootstring parameters */
12315	base = 36,
12316	tMin = 1,
12317	tMax = 26,
12318	skew = 38,
12319	damp = 700,
12320	initialBias = 72,
12321	initialN = 128, // 0x80
12322	delimiter = '-', // '\x2D'
12323
12324	/** Regular expressions */
12325	regexPunycode = /^xn--/,
12326	regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
12327	regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
12328
12329	/** Error messages */
12330	errors = {
12331		'overflow': 'Overflow: input needs wider integers to process',
12332		'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
12333		'invalid-input': 'Invalid input'
12334	},
12335
12336	/** Convenience shortcuts */
12337	baseMinusTMin = base - tMin,
12338	floor = Math.floor,
12339	stringFromCharCode = String.fromCharCode,
12340
12341	/** Temporary variable */
12342	key;
12343
12344	/*--------------------------------------------------------------------------*/
12345
12346	/**
12347	 * A generic error utility function.
12348	 * @private
12349	 * @param {String} type The error type.
12350	 * @returns {Error} Throws a `RangeError` with the applicable error message.
12351	 */
12352	function error(type) {
12353		throw new RangeError(errors[type]);
12354	}
12355
12356	/**
12357	 * A generic `Array#map` utility function.
12358	 * @private
12359	 * @param {Array} array The array to iterate over.
12360	 * @param {Function} callback The function that gets called for every array
12361	 * item.
12362	 * @returns {Array} A new array of values returned by the callback function.
12363	 */
12364	function map(array, fn) {
12365		var length = array.length;
12366		var result = [];
12367		while (length--) {
12368			result[length] = fn(array[length]);
12369		}
12370		return result;
12371	}
12372
12373	/**
12374	 * A simple `Array#map`-like wrapper to work with domain name strings or email
12375	 * addresses.
12376	 * @private
12377	 * @param {String} domain The domain name or email address.
12378	 * @param {Function} callback The function that gets called for every
12379	 * character.
12380	 * @returns {Array} A new string of characters returned by the callback
12381	 * function.
12382	 */
12383	function mapDomain(string, fn) {
12384		var parts = string.split('@');
12385		var result = '';
12386		if (parts.length > 1) {
12387			// In email addresses, only the domain name should be punycoded. Leave
12388			// the local part (i.e. everything up to `@`) intact.
12389			result = parts[0] + '@';
12390			string = parts[1];
12391		}
12392		// Avoid `split(regex)` for IE8 compatibility. See #17.
12393		string = string.replace(regexSeparators, '\x2E');
12394		var labels = string.split('.');
12395		var encoded = map(labels, fn).join('.');
12396		return result + encoded;
12397	}
12398
12399	/**
12400	 * Creates an array containing the numeric code points of each Unicode
12401	 * character in the string. While JavaScript uses UCS-2 internally,
12402	 * this function will convert a pair of surrogate halves (each of which
12403	 * UCS-2 exposes as separate characters) into a single code point,
12404	 * matching UTF-16.
12405	 * @see `punycode.ucs2.encode`
12406	 * @see <https://mathiasbynens.be/notes/javascript-encoding>
12407	 * @memberOf punycode.ucs2
12408	 * @name decode
12409	 * @param {String} string The Unicode input string (UCS-2).
12410	 * @returns {Array} The new array of code points.
12411	 */
12412	function ucs2decode(string) {
12413		var output = [],
12414		    counter = 0,
12415		    length = string.length,
12416		    value,
12417		    extra;
12418		while (counter < length) {
12419			value = string.charCodeAt(counter++);
12420			if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
12421				// high surrogate, and there is a next character
12422				extra = string.charCodeAt(counter++);
12423				if ((extra & 0xFC00) == 0xDC00) { // low surrogate
12424					output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
12425				} else {
12426					// unmatched surrogate; only append this code unit, in case the next
12427					// code unit is the high surrogate of a surrogate pair
12428					output.push(value);
12429					counter--;
12430				}
12431			} else {
12432				output.push(value);
12433			}
12434		}
12435		return output;
12436	}
12437
12438	/**
12439	 * Creates a string based on an array of numeric code points.
12440	 * @see `punycode.ucs2.decode`
12441	 * @memberOf punycode.ucs2
12442	 * @name encode
12443	 * @param {Array} codePoints The array of numeric code points.
12444	 * @returns {String} The new Unicode string (UCS-2).
12445	 */
12446	function ucs2encode(array) {
12447		return map(array, function(value) {
12448			var output = '';
12449			if (value > 0xFFFF) {
12450				value -= 0x10000;
12451				output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
12452				value = 0xDC00 | value & 0x3FF;
12453			}
12454			output += stringFromCharCode(value);
12455			return output;
12456		}).join('');
12457	}
12458
12459	/**
12460	 * Converts a basic code point into a digit/integer.
12461	 * @see `digitToBasic()`
12462	 * @private
12463	 * @param {Number} codePoint The basic numeric code point value.
12464	 * @returns {Number} The numeric value of a basic code point (for use in
12465	 * representing integers) in the range `0` to `base - 1`, or `base` if
12466	 * the code point does not represent a value.
12467	 */
12468	function basicToDigit(codePoint) {
12469		if (codePoint - 48 < 10) {
12470			return codePoint - 22;
12471		}
12472		if (codePoint - 65 < 26) {
12473			return codePoint - 65;
12474		}
12475		if (codePoint - 97 < 26) {
12476			return codePoint - 97;
12477		}
12478		return base;
12479	}
12480
12481	/**
12482	 * Converts a digit/integer into a basic code point.
12483	 * @see `basicToDigit()`
12484	 * @private
12485	 * @param {Number} digit The numeric value of a basic code point.
12486	 * @returns {Number} The basic code point whose value (when used for
12487	 * representing integers) is `digit`, which needs to be in the range
12488	 * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
12489	 * used; else, the lowercase form is used. The behavior is undefined
12490	 * if `flag` is non-zero and `digit` has no uppercase form.
12491	 */
12492	function digitToBasic(digit, flag) {
12493		//  0..25 map to ASCII a..z or A..Z
12494		// 26..35 map to ASCII 0..9
12495		return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
12496	}
12497
12498	/**
12499	 * Bias adaptation function as per section 3.4 of RFC 3492.
12500	 * https://tools.ietf.org/html/rfc3492#section-3.4
12501	 * @private
12502	 */
12503	function adapt(delta, numPoints, firstTime) {
12504		var k = 0;
12505		delta = firstTime ? floor(delta / damp) : delta >> 1;
12506		delta += floor(delta / numPoints);
12507		for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
12508			delta = floor(delta / baseMinusTMin);
12509		}
12510		return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
12511	}
12512
12513	/**
12514	 * Converts a Punycode string of ASCII-only symbols to a string of Unicode
12515	 * symbols.
12516	 * @memberOf punycode
12517	 * @param {String} input The Punycode string of ASCII-only symbols.
12518	 * @returns {String} The resulting string of Unicode symbols.
12519	 */
12520	function decode(input) {
12521		// Don't use UCS-2
12522		var output = [],
12523		    inputLength = input.length,
12524		    out,
12525		    i = 0,
12526		    n = initialN,
12527		    bias = initialBias,
12528		    basic,
12529		    j,
12530		    index,
12531		    oldi,
12532		    w,
12533		    k,
12534		    digit,
12535		    t,
12536		    /** Cached calculation results */
12537		    baseMinusT;
12538
12539		// Handle the basic code points: let `basic` be the number of input code
12540		// points before the last delimiter, or `0` if there is none, then copy
12541		// the first basic code points to the output.
12542
12543		basic = input.lastIndexOf(delimiter);
12544		if (basic < 0) {
12545			basic = 0;
12546		}
12547
12548		for (j = 0; j < basic; ++j) {
12549			// if it's not a basic code point
12550			if (input.charCodeAt(j) >= 0x80) {
12551				error('not-basic');
12552			}
12553			output.push(input.charCodeAt(j));
12554		}
12555
12556		// Main decoding loop: start just after the last delimiter if any basic code
12557		// points were copied; start at the beginning otherwise.
12558
12559		for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
12560
12561			// `index` is the index of the next character to be consumed.
12562			// Decode a generalized variable-length integer into `delta`,
12563			// which gets added to `i`. The overflow checking is easier
12564			// if we increase `i` as we go, then subtract off its starting
12565			// value at the end to obtain `delta`.
12566			for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
12567
12568				if (index >= inputLength) {
12569					error('invalid-input');
12570				}
12571
12572				digit = basicToDigit(input.charCodeAt(index++));
12573
12574				if (digit >= base || digit > floor((maxInt - i) / w)) {
12575					error('overflow');
12576				}
12577
12578				i += digit * w;
12579				t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
12580
12581				if (digit < t) {
12582					break;
12583				}
12584
12585				baseMinusT = base - t;
12586				if (w > floor(maxInt / baseMinusT)) {
12587					error('overflow');
12588				}
12589
12590				w *= baseMinusT;
12591
12592			}
12593
12594			out = output.length + 1;
12595			bias = adapt(i - oldi, out, oldi == 0);
12596
12597			// `i` was supposed to wrap around from `out` to `0`,
12598			// incrementing `n` each time, so we'll fix that now:
12599			if (floor(i / out) > maxInt - n) {
12600				error('overflow');
12601			}
12602
12603			n += floor(i / out);
12604			i %= out;
12605
12606			// Insert `n` at position `i` of the output
12607			output.splice(i++, 0, n);
12608
12609		}
12610
12611		return ucs2encode(output);
12612	}
12613
12614	/**
12615	 * Converts a string of Unicode symbols (e.g. a domain name label) to a
12616	 * Punycode string of ASCII-only symbols.
12617	 * @memberOf punycode
12618	 * @param {String} input The string of Unicode symbols.
12619	 * @returns {String} The resulting Punycode string of ASCII-only symbols.
12620	 */
12621	function encode(input) {
12622		var n,
12623		    delta,
12624		    handledCPCount,
12625		    basicLength,
12626		    bias,
12627		    j,
12628		    m,
12629		    q,
12630		    k,
12631		    t,
12632		    currentValue,
12633		    output = [],
12634		    /** `inputLength` will hold the number of code points in `input`. */
12635		    inputLength,
12636		    /** Cached calculation results */
12637		    handledCPCountPlusOne,
12638		    baseMinusT,
12639		    qMinusT;
12640
12641		// Convert the input in UCS-2 to Unicode
12642		input = ucs2decode(input);
12643
12644		// Cache the length
12645		inputLength = input.length;
12646
12647		// Initialize the state
12648		n = initialN;
12649		delta = 0;
12650		bias = initialBias;
12651
12652		// Handle the basic code points
12653		for (j = 0; j < inputLength; ++j) {
12654			currentValue = input[j];
12655			if (currentValue < 0x80) {
12656				output.push(stringFromCharCode(currentValue));
12657			}
12658		}
12659
12660		handledCPCount = basicLength = output.length;
12661
12662		// `handledCPCount` is the number of code points that have been handled;
12663		// `basicLength` is the number of basic code points.
12664
12665		// Finish the basic string - if it is not empty - with a delimiter
12666		if (basicLength) {
12667			output.push(delimiter);
12668		}
12669
12670		// Main encoding loop:
12671		while (handledCPCount < inputLength) {
12672
12673			// All non-basic code points < n have been handled already. Find the next
12674			// larger one:
12675			for (m = maxInt, j = 0; j < inputLength; ++j) {
12676				currentValue = input[j];
12677				if (currentValue >= n && currentValue < m) {
12678					m = currentValue;
12679				}
12680			}
12681
12682			// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
12683			// but guard against overflow
12684			handledCPCountPlusOne = handledCPCount + 1;
12685			if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
12686				error('overflow');
12687			}
12688
12689			delta += (m - n) * handledCPCountPlusOne;
12690			n = m;
12691
12692			for (j = 0; j < inputLength; ++j) {
12693				currentValue = input[j];
12694
12695				if (currentValue < n && ++delta > maxInt) {
12696					error('overflow');
12697				}
12698
12699				if (currentValue == n) {
12700					// Represent delta as a generalized variable-length integer
12701					for (q = delta, k = base; /* no condition */; k += base) {
12702						t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
12703						if (q < t) {
12704							break;
12705						}
12706						qMinusT = q - t;
12707						baseMinusT = base - t;
12708						output.push(
12709							stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
12710						);
12711						q = floor(qMinusT / baseMinusT);
12712					}
12713
12714					output.push(stringFromCharCode(digitToBasic(q, 0)));
12715					bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
12716					delta = 0;
12717					++handledCPCount;
12718				}
12719			}
12720
12721			++delta;
12722			++n;
12723
12724		}
12725		return output.join('');
12726	}
12727
12728	/**
12729	 * Converts a Punycode string representing a domain name or an email address
12730	 * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
12731	 * it doesn't matter if you call it on a string that has already been
12732	 * converted to Unicode.
12733	 * @memberOf punycode
12734	 * @param {String} input The Punycoded domain name or email address to
12735	 * convert to Unicode.
12736	 * @returns {String} The Unicode representation of the given Punycode
12737	 * string.
12738	 */
12739	function toUnicode(input) {
12740		return mapDomain(input, function(string) {
12741			return regexPunycode.test(string)
12742				? decode(string.slice(4).toLowerCase())
12743				: string;
12744		});
12745	}
12746
12747	/**
12748	 * Converts a Unicode string representing a domain name or an email address to
12749	 * Punycode. Only the non-ASCII parts of the domain name will be converted,
12750	 * i.e. it doesn't matter if you call it with a domain that's already in
12751	 * ASCII.
12752	 * @memberOf punycode
12753	 * @param {String} input The domain name or email address to convert, as a
12754	 * Unicode string.
12755	 * @returns {String} The Punycode representation of the given domain name or
12756	 * email address.
12757	 */
12758	function toASCII(input) {
12759		return mapDomain(input, function(string) {
12760			return regexNonASCII.test(string)
12761				? 'xn--' + encode(string)
12762				: string;
12763		});
12764	}
12765
12766	/*--------------------------------------------------------------------------*/
12767
12768	/** Define the public API */
12769	punycode = {
12770		/**
12771		 * A string representing the current Punycode.js version number.
12772		 * @memberOf punycode
12773		 * @type String
12774		 */
12775		'version': '1.4.1',
12776		/**
12777		 * An object of methods to convert from JavaScript's internal character
12778		 * representation (UCS-2) to Unicode code points, and back.
12779		 * @see <https://mathiasbynens.be/notes/javascript-encoding>
12780		 * @memberOf punycode
12781		 * @type Object
12782		 */
12783		'ucs2': {
12784			'decode': ucs2decode,
12785			'encode': ucs2encode
12786		},
12787		'decode': decode,
12788		'encode': encode,
12789		'toASCII': toASCII,
12790		'toUnicode': toUnicode
12791	};
12792
12793	/** Expose `punycode` */
12794	// Some AMD build optimizers, like r.js, check for specific condition patterns
12795	// like the following:
12796	if (
12797		true
12798	) {
12799		!(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
12800			return punycode;
12801		}).call(exports, __webpack_require__, exports, module),
12802				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
12803	} else {}
12804
12805}(this));
12806
12807/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ "../node_modules/webpack/buildin/module.js")(module), __webpack_require__(/*! ./../../../webpack/buildin/global.js */ "../node_modules/webpack/buildin/global.js")))
12808
12809/***/ }),
12810
vendor: 19,400 bytes, lines 12811-13346
12811/***/ "../node_modules/object-inspect/index.js":
12812/*!***********************************************!*\
12813  !*** ../node_modules/object-inspect/index.js ***!
12814  \***********************************************/
12815/*! no static exports found */
12816/***/ (function(module, exports, __webpack_require__) {
12817
12818/* WEBPACK VAR INJECTION */(function(global) {var hasMap = typeof Map === 'function' && Map.prototype;
12819var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;
12820var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;
12821var mapForEach = hasMap && Map.prototype.forEach;
12822var hasSet = typeof Set === 'function' && Set.prototype;
12823var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;
12824var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;
12825var setForEach = hasSet && Set.prototype.forEach;
12826var hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;
12827var weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;
12828var hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;
12829var weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;
12830var hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;
12831var weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;
12832var booleanValueOf = Boolean.prototype.valueOf;
12833var objectToString = Object.prototype.toString;
12834var functionToString = Function.prototype.toString;
12835var $match = String.prototype.match;
12836var $slice = String.prototype.slice;
12837var $replace = String.prototype.replace;
12838var $toUpperCase = String.prototype.toUpperCase;
12839var $toLowerCase = String.prototype.toLowerCase;
12840var $test = RegExp.prototype.test;
12841var $concat = Array.prototype.concat;
12842var $join = Array.prototype.join;
12843var $arrSlice = Array.prototype.slice;
12844var $floor = Math.floor;
12845var bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;
12846var gOPS = Object.getOwnPropertySymbols;
12847var symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;
12848var hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';
12849// ie, `has-tostringtag/shams
12850var toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol')
12851    ? Symbol.toStringTag
12852    : null;
12853var isEnumerable = Object.prototype.propertyIsEnumerable;
12854
12855var gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (
12856    [].__proto__ === Array.prototype // eslint-disable-line no-proto
12857        ? function (O) {
12858            return O.__proto__; // eslint-disable-line no-proto
12859        }
12860        : null
12861);
12862
12863function addNumericSeparator(num, str) {
12864    if (
12865        num === Infinity
12866        || num === -Infinity
12867        || num !== num
12868        || (num && num > -1000 && num < 1000)
12869        || $test.call(/e/, str)
12870    ) {
12871        return str;
12872    }
12873    var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;
12874    if (typeof num === 'number') {
12875        var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)
12876        if (int !== num) {
12877            var intStr = String(int);
12878            var dec = $slice.call(str, intStr.length + 1);
12879            return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');
12880        }
12881    }
12882    return $replace.call(str, sepRegex, '$&_');
12883}
12884
12885var utilInspect = __webpack_require__(/*! ./util.inspect */ 0);
12886var inspectCustom = utilInspect.custom;
12887var inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null;
12888
12889module.exports = function inspect_(obj, options, depth, seen) {
12890    var opts = options || {};
12891
12892    if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {
12893        throw new TypeError('option "quoteStyle" must be "single" or "double"');
12894    }
12895    if (
12896        has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'
12897            ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity
12898            : opts.maxStringLength !== null
12899        )
12900    ) {
12901        throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');
12902    }
12903    var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;
12904    if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {
12905        throw new TypeError('option "customInspect", if provided, must be `true`, `false`, or `\'symbol\'`');
12906    }
12907
12908    if (
12909        has(opts, 'indent')
12910        && opts.indent !== null
12911        && opts.indent !== '\t'
12912        && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)
12913    ) {
12914        throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');
12915    }
12916    if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {
12917        throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');
12918    }
12919    var numericSeparator = opts.numericSeparator;
12920
12921    if (typeof obj === 'undefined') {
12922        return 'undefined';
12923    }
12924    if (obj === null) {
12925        return 'null';
12926    }
12927    if (typeof obj === 'boolean') {
12928        return obj ? 'true' : 'false';
12929    }
12930
12931    if (typeof obj === 'string') {
12932        return inspectString(obj, opts);
12933    }
12934    if (typeof obj === 'number') {
12935        if (obj === 0) {
12936            return Infinity / obj > 0 ? '0' : '-0';
12937        }
12938        var str = String(obj);
12939        return numericSeparator ? addNumericSeparator(obj, str) : str;
12940    }
12941    if (typeof obj === 'bigint') {
12942        var bigIntStr = String(obj) + 'n';
12943        return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;
12944    }
12945
12946    var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;
12947    if (typeof depth === 'undefined') { depth = 0; }
12948    if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {
12949        return isArray(obj) ? '[Array]' : '[Object]';
12950    }
12951
12952    var indent = getIndent(opts, depth);
12953
12954    if (typeof seen === 'undefined') {
12955        seen = [];
12956    } else if (indexOf(seen, obj) >= 0) {
12957        return '[Circular]';
12958    }
12959
12960    function inspect(value, from, noIndent) {
12961        if (from) {
12962            seen = $arrSlice.call(seen);
12963            seen.push(from);
12964        }
12965        if (noIndent) {
12966            var newOpts = {
12967                depth: opts.depth
12968            };
12969            if (has(opts, 'quoteStyle')) {
12970                newOpts.quoteStyle = opts.quoteStyle;
12971            }
12972            return inspect_(value, newOpts, depth + 1, seen);
12973        }
12974        return inspect_(value, opts, depth + 1, seen);
12975    }
12976
12977    if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable
12978        var name = nameOf(obj);
12979        var keys = arrObjKeys(obj, inspect);
12980        return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');
12981    }
12982    if (isSymbol(obj)) {
12983        var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\(.*\))_[^)]*$/, '$1') : symToString.call(obj);
12984        return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;
12985    }
12986    if (isElement(obj)) {
12987        var s = '<' + $toLowerCase.call(String(obj.nodeName));
12988        var attrs = obj.attributes || [];
12989        for (var i = 0; i < attrs.length; i++) {
12990            s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);
12991        }
12992        s += '>';
12993        if (obj.childNodes && obj.childNodes.length) { s += '...'; }
12994        s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>';
12995        return s;
12996    }
12997    if (isArray(obj)) {
12998        if (obj.length === 0) { return '[]'; }
12999        var xs = arrObjKeys(obj, inspect);
13000        if (indent && !singleLineValues(xs)) {
13001            return '[' + indentedJoin(xs, indent) + ']';
13002        }
13003        return '[ ' + $join.call(xs, ', ') + ' ]';
13004    }
13005    if (isError(obj)) {
13006        var parts = arrObjKeys(obj, inspect);
13007        if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) {
13008            return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';
13009        }
13010        if (parts.length === 0) { return '[' + String(obj) + ']'; }
13011        return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';
13012    }
13013    if (typeof obj === 'object' && customInspect) {
13014        if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) {
13015            return utilInspect(obj, { depth: maxDepth - depth });
13016        } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {
13017            return obj.inspect();
13018        }
13019    }
13020    if (isMap(obj)) {
13021        var mapParts = [];
13022        if (mapForEach) {
13023            mapForEach.call(obj, function (value, key) {
13024                mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));
13025            });
13026        }
13027        return collectionOf('Map', mapSize.call(obj), mapParts, indent);
13028    }
13029    if (isSet(obj)) {
13030        var setParts = [];
13031        if (setForEach) {
13032            setForEach.call(obj, function (value) {
13033                setParts.push(inspect(value, obj));
13034            });
13035        }
13036        return collectionOf('Set', setSize.call(obj), setParts, indent);
13037    }
13038    if (isWeakMap(obj)) {
13039        return weakCollectionOf('WeakMap');
13040    }
13041    if (isWeakSet(obj)) {
13042        return weakCollectionOf('WeakSet');
13043    }
13044    if (isWeakRef(obj)) {
13045        return weakCollectionOf('WeakRef');
13046    }
13047    if (isNumber(obj)) {
13048        return markBoxed(inspect(Number(obj)));
13049    }
13050    if (isBigInt(obj)) {
13051        return markBoxed(inspect(bigIntValueOf.call(obj)));
13052    }
13053    if (isBoolean(obj)) {
13054        return markBoxed(booleanValueOf.call(obj));
13055    }
13056    if (isString(obj)) {
13057        return markBoxed(inspect(String(obj)));
13058    }
13059    // note: in IE 8, sometimes `global !== window` but both are the prototypes of each other
13060    /* eslint-env browser */
13061    if (typeof window !== 'undefined' && obj === window) {
13062        return '{ [object Window] }';
13063    }
13064    if (obj === global) {
13065        return '{ [object globalThis] }';
13066    }
13067    if (!isDate(obj) && !isRegExp(obj)) {
13068        var ys = arrObjKeys(obj, inspect);
13069        var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;
13070        var protoTag = obj instanceof Object ? '' : 'null prototype';
13071        var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';
13072        var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';
13073        var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');
13074        if (ys.length === 0) { return tag + '{}'; }
13075        if (indent) {
13076            return tag + '{' + indentedJoin(ys, indent) + '}';
13077        }
13078        return tag + '{ ' + $join.call(ys, ', ') + ' }';
13079    }
13080    return String(obj);
13081};
13082
13083function wrapQuotes(s, defaultStyle, opts) {
13084    var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '"' : "'";
13085    return quoteChar + s + quoteChar;
13086}
13087
13088function quote(s) {
13089    return $replace.call(String(s), /"/g, '&quot;');
13090}
13091
13092function isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }
13093function isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }
13094function isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }
13095function isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }
13096function isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }
13097function isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }
13098function isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }
13099
13100// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives
13101function isSymbol(obj) {
13102    if (hasShammedSymbols) {
13103        return obj && typeof obj === 'object' && obj instanceof Symbol;
13104    }
13105    if (typeof obj === 'symbol') {
13106        return true;
13107    }
13108    if (!obj || typeof obj !== 'object' || !symToString) {
13109        return false;
13110    }
13111    try {
13112        symToString.call(obj);
13113        return true;
13114    } catch (e) {}
13115    return false;
13116}
13117
13118function isBigInt(obj) {
13119    if (!obj || typeof obj !== 'object' || !bigIntValueOf) {
13120        return false;
13121    }
13122    try {
13123        bigIntValueOf.call(obj);
13124        return true;
13125    } catch (e) {}
13126    return false;
13127}
13128
13129var hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };
13130function has(obj, key) {
13131    return hasOwn.call(obj, key);
13132}
13133
13134function toStr(obj) {
13135    return objectToString.call(obj);
13136}
13137
13138function nameOf(f) {
13139    if (f.name) { return f.name; }
13140    var m = $match.call(functionToString.call(f), /^function\s*([\w$]+)/);
13141    if (m) { return m[1]; }
13142    return null;
13143}
13144
13145function indexOf(xs, x) {
13146    if (xs.indexOf) { return xs.indexOf(x); }
13147    for (var i = 0, l = xs.length; i < l; i++) {
13148        if (xs[i] === x) { return i; }
13149    }
13150    return -1;
13151}
13152
13153function isMap(x) {
13154    if (!mapSize || !x || typeof x !== 'object') {
13155        return false;
13156    }
13157    try {
13158        mapSize.call(x);
13159        try {
13160            setSize.call(x);
13161        } catch (s) {
13162            return true;
13163        }
13164        return x instanceof Map; // core-js workaround, pre-v2.5.0
13165    } catch (e) {}
13166    return false;
13167}
13168
13169function isWeakMap(x) {
13170    if (!weakMapHas || !x || typeof x !== 'object') {
13171        return false;
13172    }
13173    try {
13174        weakMapHas.call(x, weakMapHas);
13175        try {
13176            weakSetHas.call(x, weakSetHas);
13177        } catch (s) {
13178            return true;
13179        }
13180        return x instanceof WeakMap; // core-js workaround, pre-v2.5.0
13181    } catch (e) {}
13182    return false;
13183}
13184
13185function isWeakRef(x) {
13186    if (!weakRefDeref || !x || typeof x !== 'object') {
13187        return false;
13188    }
13189    try {
13190        weakRefDeref.call(x);
13191        return true;
13192    } catch (e) {}
13193    return false;
13194}
13195
13196function isSet(x) {
13197    if (!setSize || !x || typeof x !== 'object') {
13198        return false;
13199    }
13200    try {
13201        setSize.call(x);
13202        try {
13203            mapSize.call(x);
13204        } catch (m) {
13205            return true;
13206        }
13207        return x instanceof Set; // core-js workaround, pre-v2.5.0
13208    } catch (e) {}
13209    return false;
13210}
13211
13212function isWeakSet(x) {
13213    if (!weakSetHas || !x || typeof x !== 'object') {
13214        return false;
13215    }
13216    try {
13217        weakSetHas.call(x, weakSetHas);
13218        try {
13219            weakMapHas.call(x, weakMapHas);
13220        } catch (s) {
13221            return true;
13222        }
13223        return x instanceof WeakSet; // core-js workaround, pre-v2.5.0
13224    } catch (e) {}
13225    return false;
13226}
13227
13228function isElement(x) {
13229    if (!x || typeof x !== 'object') { return false; }
13230    if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {
13231        return true;
13232    }
13233    return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';
13234}
13235
13236function inspectString(str, opts) {
13237    if (str.length > opts.maxStringLength) {
13238        var remaining = str.length - opts.maxStringLength;
13239        var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');
13240        return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;
13241    }
13242    // eslint-disable-next-line no-control-regex
13243    var s = $replace.call($replace.call(str, /(['\\])/g, '\\$1'), /[\x00-\x1f]/g, lowbyte);
13244    return wrapQuotes(s, 'single', opts);
13245}
13246
13247function lowbyte(c) {
13248    var n = c.charCodeAt(0);
13249    var x = {
13250        8: 'b',
13251        9: 't',
13252        10: 'n',
13253        12: 'f',
13254        13: 'r'
13255    }[n];
13256    if (x) { return '\\' + x; }
13257    return '\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));
13258}
13259
13260function markBoxed(str) {
13261    return 'Object(' + str + ')';
13262}
13263
13264function weakCollectionOf(type) {
13265    return type + ' { ? }';
13266}
13267
13268function collectionOf(type, size, entries, indent) {
13269    var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');
13270    return type + ' (' + size + ') {' + joinedEntries + '}';
13271}
13272
13273function singleLineValues(xs) {
13274    for (var i = 0; i < xs.length; i++) {
13275        if (indexOf(xs[i], '\n') >= 0) {
13276            return false;
13277        }
13278    }
13279    return true;
13280}
13281
13282function getIndent(opts, depth) {
13283    var baseIndent;
13284    if (opts.indent === '\t') {
13285        baseIndent = '\t';
13286    } else if (typeof opts.indent === 'number' && opts.indent > 0) {
13287        baseIndent = $join.call(Array(opts.indent + 1), ' ');
13288    } else {
13289        return null;
13290    }
13291    return {
13292        base: baseIndent,
13293        prev: $join.call(Array(depth + 1), baseIndent)
13294    };
13295}
13296
13297function indentedJoin(xs, indent) {
13298    if (xs.length === 0) { return ''; }
13299    var lineJoiner = '\n' + indent.prev + indent.base;
13300    return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\n' + indent.prev;
13301}
13302
13303function arrObjKeys(obj, inspect) {
13304    var isArr = isArray(obj);
13305    var xs = [];
13306    if (isArr) {
13307        xs.length = obj.length;
13308        for (var i = 0; i < obj.length; i++) {
13309            xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';
13310        }
13311    }
13312    var syms = typeof gOPS === 'function' ? gOPS(obj) : [];
13313    var symMap;
13314    if (hasShammedSymbols) {
13315        symMap = {};
13316        for (var k = 0; k < syms.length; k++) {
13317            symMap['$' + syms[k]] = syms[k];
13318        }
13319    }
13320
13321    for (var key in obj) { // eslint-disable-line no-restricted-syntax
13322        if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue
13323        if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue
13324        if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {
13325            // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section
13326            continue; // eslint-disable-line no-restricted-syntax, no-continue
13327        } else if ($test.call(/[^\w$]/, key)) {
13328            xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));
13329        } else {
13330            xs.push(key + ': ' + inspect(obj[key], obj));
13331        }
13332    }
13333    if (typeof gOPS === 'function') {
13334        for (var j = 0; j < syms.length; j++) {
13335            if (isEnumerable.call(obj, syms[j])) {
13336                xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));
13337            }
13338        }
13339    }
13340    return xs;
13341}
13342
13343/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "../node_modules/webpack/buildin/global.js")))
13344
13345/***/ }),
13346
vendor: 419 bytes, lines 13347-13357
13347/***/ "../node_modules/owl.carousel/dist/assets/owl.carousel.css":
13348/*!*****************************************************************!*\
13349  !*** ../node_modules/owl.carousel/dist/assets/owl.carousel.css ***!
13350  \*****************************************************************/
13351/*! no static exports found */
13352/***/ (function(module, exports, __webpack_require__) {
13353
13354// extracted by mini-css-extract-plugin
13355
13356/***/ }),
13357
vendor: 439 bytes, lines 13358-13368
13358/***/ "../node_modules/owl.carousel/dist/assets/owl.theme.default.css":
13359/*!**********************************************************************!*\
13360  !*** ../node_modules/owl.carousel/dist/assets/owl.theme.default.css ***!
13361  \**********************************************************************/
13362/*! no static exports found */
13363/***/ (function(module, exports, __webpack_require__) {
13364
13365// extracted by mini-css-extract-plugin
13366
13367/***/ }),
13368
vendor: 90,847 bytes, lines 13369-16828
13369/***/ "../node_modules/owl.carousel/dist/owl.carousel.js":
13370/*!*********************************************************!*\
13371  !*** ../node_modules/owl.carousel/dist/owl.carousel.js ***!
13372  \*********************************************************/
13373/*! no static exports found */
13374/***/ (function(module, exports, __webpack_require__) {
13375
13376/* WEBPACK VAR INJECTION */(function(__webpack_provided_window_dot_jQuery, jQuery) {/**
13377 * Owl Carousel v2.3.4
13378 * Copyright 2013-2018 David Deutsch
13379 * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE
13380 */
13381/**
13382 * Owl carousel
13383 * @version 2.3.4
13384 * @author Bartosz Wojciechowski
13385 * @author David Deutsch
13386 * @license The MIT License (MIT)
13387 * @todo Lazy Load Icon
13388 * @todo prevent animationend bubling
13389 * @todo itemsScaleUp
13390 * @todo Test Zepto
13391 * @todo stagePadding calculate wrong active classes
13392 */
13393;(function($, window, document, undefined) {
13394
13395	/**
13396	 * Creates a carousel.
13397	 * @class The Owl Carousel.
13398	 * @public
13399	 * @param {HTMLElement|jQuery} element - The element to create the carousel for.
13400	 * @param {Object} [options] - The options
13401	 */
13402	function Owl(element, options) {
13403
13404		/**
13405		 * Current settings for the carousel.
13406		 * @public
13407		 */
13408		this.settings = null;
13409
13410		/**
13411		 * Current options set by the caller including defaults.
13412		 * @public
13413		 */
13414		this.options = $.extend({}, Owl.Defaults, options);
13415
13416		/**
13417		 * Plugin element.
13418		 * @public
13419		 */
13420		this.$element = $(element);
13421
13422		/**
13423		 * Proxied event handlers.
13424		 * @protected
13425		 */
13426		this._handlers = {};
13427
13428		/**
13429		 * References to the running plugins of this carousel.
13430		 * @protected
13431		 */
13432		this._plugins = {};
13433
13434		/**
13435		 * Currently suppressed events to prevent them from being retriggered.
13436		 * @protected
13437		 */
13438		this._supress = {};
13439
13440		/**
13441		 * Absolute current position.
13442		 * @protected
13443		 */
13444		this._current = null;
13445
13446		/**
13447		 * Animation speed in milliseconds.
13448		 * @protected
13449		 */
13450		this._speed = null;
13451
13452		/**
13453		 * Coordinates of all items in pixel.
13454		 * @todo The name of this member is missleading.
13455		 * @protected
13456		 */
13457		this._coordinates = [];
13458
13459		/**
13460		 * Current breakpoint.
13461		 * @todo Real media queries would be nice.
13462		 * @protected
13463		 */
13464		this._breakpoint = null;
13465
13466		/**
13467		 * Current width of the plugin element.
13468		 */
13469		this._width = null;
13470
13471		/**
13472		 * All real items.
13473		 * @protected
13474		 */
13475		this._items = [];
13476
13477		/**
13478		 * All cloned items.
13479		 * @protected
13480		 */
13481		this._clones = [];
13482
13483		/**
13484		 * Merge values of all items.
13485		 * @todo Maybe this could be part of a plugin.
13486		 * @protected
13487		 */
13488		this._mergers = [];
13489
13490		/**
13491		 * Widths of all items.
13492		 */
13493		this._widths = [];
13494
13495		/**
13496		 * Invalidated parts within the update process.
13497		 * @protected
13498		 */
13499		this._invalidated = {};
13500
13501		/**
13502		 * Ordered list of workers for the update process.
13503		 * @protected
13504		 */
13505		this._pipe = [];
13506
13507		/**
13508		 * Current state information for the drag operation.
13509		 * @todo #261
13510		 * @protected
13511		 */
13512		this._drag = {
13513			time: null,
13514			target: null,
13515			pointer: null,
13516			stage: {
13517				start: null,
13518				current: null
13519			},
13520			direction: null
13521		};
13522
13523		/**
13524		 * Current state information and their tags.
13525		 * @type {Object}
13526		 * @protected
13527		 */
13528		this._states = {
13529			current: {},
13530			tags: {
13531				'initializing': [ 'busy' ],
13532				'animating': [ 'busy' ],
13533				'dragging': [ 'interacting' ]
13534			}
13535		};
13536
13537		$.each([ 'onResize', 'onThrottledResize' ], $.proxy(function(i, handler) {
13538			this._handlers[handler] = $.proxy(this[handler], this);
13539		}, this));
13540
13541		$.each(Owl.Plugins, $.proxy(function(key, plugin) {
13542			this._plugins[key.charAt(0).toLowerCase() + key.slice(1)]
13543				= new plugin(this);
13544		}, this));
13545
13546		$.each(Owl.Workers, $.proxy(function(priority, worker) {
13547			this._pipe.push({
13548				'filter': worker.filter,
13549				'run': $.proxy(worker.run, this)
13550			});
13551		}, this));
13552
13553		this.setup();
13554		this.initialize();
13555	}
13556
13557	/**
13558	 * Default options for the carousel.
13559	 * @public
13560	 */
13561	Owl.Defaults = {
13562		items: 3,
13563		loop: false,
13564		center: false,
13565		rewind: false,
13566		checkVisibility: true,
13567
13568		mouseDrag: true,
13569		touchDrag: true,
13570		pullDrag: true,
13571		freeDrag: false,
13572
13573		margin: 0,
13574		stagePadding: 0,
13575
13576		merge: false,
13577		mergeFit: true,
13578		autoWidth: false,
13579
13580		startPosition: 0,
13581		rtl: false,
13582
13583		smartSpeed: 250,
13584		fluidSpeed: false,
13585		dragEndSpeed: false,
13586
13587		responsive: {},
13588		responsiveRefreshRate: 200,
13589		responsiveBaseElement: window,
13590
13591		fallbackEasing: 'swing',
13592		slideTransition: '',
13593
13594		info: false,
13595
13596		nestedItemSelector: false,
13597		itemElement: 'div',
13598		stageElement: 'div',
13599
13600		refreshClass: 'owl-refresh',
13601		loadedClass: 'owl-loaded',
13602		loadingClass: 'owl-loading',
13603		rtlClass: 'owl-rtl',
13604		responsiveClass: 'owl-responsive',
13605		dragClass: 'owl-drag',
13606		itemClass: 'owl-item',
13607		stageClass: 'owl-stage',
13608		stageOuterClass: 'owl-stage-outer',
13609		grabClass: 'owl-grab'
13610	};
13611
13612	/**
13613	 * Enumeration for width.
13614	 * @public
13615	 * @readonly
13616	 * @enum {String}
13617	 */
13618	Owl.Width = {
13619		Default: 'default',
13620		Inner: 'inner',
13621		Outer: 'outer'
13622	};
13623
13624	/**
13625	 * Enumeration for types.
13626	 * @public
13627	 * @readonly
13628	 * @enum {String}
13629	 */
13630	Owl.Type = {
13631		Event: 'event',
13632		State: 'state'
13633	};
13634
13635	/**
13636	 * Contains all registered plugins.
13637	 * @public
13638	 */
13639	Owl.Plugins = {};
13640
13641	/**
13642	 * List of workers involved in the update process.
13643	 */
13644	Owl.Workers = [ {
13645		filter: [ 'width', 'settings' ],
13646		run: function() {
13647			this._width = this.$element.width();
13648		}
13649	}, {
13650		filter: [ 'width', 'items', 'settings' ],
13651		run: function(cache) {
13652			cache.current = this._items && this._items[this.relative(this._current)];
13653		}
13654	}, {
13655		filter: [ 'items', 'settings' ],
13656		run: function() {
13657			this.$stage.children('.cloned').remove();
13658		}
13659	}, {
13660		filter: [ 'width', 'items', 'settings' ],
13661		run: function(cache) {
13662			var margin = this.settings.margin || '',
13663				grid = !this.settings.autoWidth,
13664				rtl = this.settings.rtl,
13665				css = {
13666					'width': 'auto',
13667					'margin-left': rtl ? margin : '',
13668					'margin-right': rtl ? '' : margin
13669				};
13670
13671			!grid && this.$stage.children().css(css);
13672
13673			cache.css = css;
13674		}
13675	}, {
13676		filter: [ 'width', 'items', 'settings' ],
13677		run: function(cache) {
13678			var width = (this.width() / this.settings.items).toFixed(3) - this.settings.margin,
13679				merge = null,
13680				iterator = this._items.length,
13681				grid = !this.settings.autoWidth,
13682				widths = [];
13683
13684			cache.items = {
13685				merge: false,
13686				width: width
13687			};
13688
13689			while (iterator--) {
13690				merge = this._mergers[iterator];
13691				merge = this.settings.mergeFit && Math.min(merge, this.settings.items) || merge;
13692
13693				cache.items.merge = merge > 1 || cache.items.merge;
13694
13695				widths[iterator] = !grid ? this._items[iterator].width() : width * merge;
13696			}
13697
13698			this._widths = widths;
13699		}
13700	}, {
13701		filter: [ 'items', 'settings' ],
13702		run: function() {
13703			var clones = [],
13704				items = this._items,
13705				settings = this.settings,
13706				// TODO: Should be computed from number of min width items in stage
13707				view = Math.max(settings.items * 2, 4),
13708				size = Math.ceil(items.length / 2) * 2,
13709				repeat = settings.loop && items.length ? settings.rewind ? view : Math.max(view, size) : 0,
13710				append = '',
13711				prepend = '';
13712
13713			repeat /= 2;
13714
13715			while (repeat > 0) {
13716				// Switch to only using appended clones
13717				clones.push(this.normalize(clones.length / 2, true));
13718				append = append + items[clones[clones.length - 1]][0].outerHTML;
13719				clones.push(this.normalize(items.length - 1 - (clones.length - 1) / 2, true));
13720				prepend = items[clones[clones.length - 1]][0].outerHTML + prepend;
13721				repeat -= 1;
13722			}
13723
13724			this._clones = clones;
13725
13726			$(append).addClass('cloned').appendTo(this.$stage);
13727			$(prepend).addClass('cloned').prependTo(this.$stage);
13728		}
13729	}, {
13730		filter: [ 'width', 'items', 'settings' ],
13731		run: function() {
13732			var rtl = this.settings.rtl ? 1 : -1,
13733				size = this._clones.length + this._items.length,
13734				iterator = -1,
13735				previous = 0,
13736				current = 0,
13737				coordinates = [];
13738
13739			while (++iterator < size) {
13740				previous = coordinates[iterator - 1] || 0;
13741				current = this._widths[this.relative(iterator)] + this.settings.margin;
13742				coordinates.push(previous + current * rtl);
13743			}
13744
13745			this._coordinates = coordinates;
13746		}
13747	}, {
13748		filter: [ 'width', 'items', 'settings' ],
13749		run: function() {
13750			var padding = this.settings.stagePadding,
13751				coordinates = this._coordinates,
13752				css = {
13753					'width': Math.ceil(Math.abs(coordinates[coordinates.length - 1])) + padding * 2,
13754					'padding-left': padding || '',
13755					'padding-right': padding || ''
13756				};
13757
13758			this.$stage.css(css);
13759		}
13760	}, {
13761		filter: [ 'width', 'items', 'settings' ],
13762		run: function(cache) {
13763			var iterator = this._coordinates.length,
13764				grid = !this.settings.autoWidth,
13765				items = this.$stage.children();
13766
13767			if (grid && cache.items.merge) {
13768				while (iterator--) {
13769					cache.css.width = this._widths[this.relative(iterator)];
13770					items.eq(iterator).css(cache.css);
13771				}
13772			} else if (grid) {
13773				cache.css.width = cache.items.width;
13774				items.css(cache.css);
13775			}
13776		}
13777	}, {
13778		filter: [ 'items' ],
13779		run: function() {
13780			this._coordinates.length < 1 && this.$stage.removeAttr('style');
13781		}
13782	}, {
13783		filter: [ 'width', 'items', 'settings' ],
13784		run: function(cache) {
13785			cache.current = cache.current ? this.$stage.children().index(cache.current) : 0;
13786			cache.current = Math.max(this.minimum(), Math.min(this.maximum(), cache.current));
13787			this.reset(cache.current);
13788		}
13789	}, {
13790		filter: [ 'position' ],
13791		run: function() {
13792			this.animate(this.coordinates(this._current));
13793		}
13794	}, {
13795		filter: [ 'width', 'position', 'items', 'settings' ],
13796		run: function() {
13797			var rtl = this.settings.rtl ? 1 : -1,
13798				padding = this.settings.stagePadding * 2,
13799				begin = this.coordinates(this.current()) + padding,
13800				end = begin + this.width() * rtl,
13801				inner, outer, matches = [], i, n;
13802
13803			for (i = 0, n = this._coordinates.length; i < n; i++) {
13804				inner = this._coordinates[i - 1] || 0;
13805				outer = Math.abs(this._coordinates[i]) + padding * rtl;
13806
13807				if ((this.op(inner, '<=', begin) && (this.op(inner, '>', end)))
13808					|| (this.op(outer, '<', begin) && this.op(outer, '>', end))) {
13809					matches.push(i);
13810				}
13811			}
13812
13813			this.$stage.children('.active').removeClass('active');
13814			this.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass('active');
13815
13816			this.$stage.children('.center').removeClass('center');
13817			if (this.settings.center) {
13818				this.$stage.children().eq(this.current()).addClass('center');
13819			}
13820		}
13821	} ];
13822
13823	/**
13824	 * Create the stage DOM element
13825	 */
13826	Owl.prototype.initializeStage = function() {
13827		this.$stage = this.$element.find('.' + this.settings.stageClass);
13828
13829		// if the stage is already in the DOM, grab it and skip stage initialization
13830		if (this.$stage.length) {
13831			return;
13832		}
13833
13834		this.$element.addClass(this.options.loadingClass);
13835
13836		// create stage
13837		this.$stage = $('<' + this.settings.stageElement + '>', {
13838			"class": this.settings.stageClass
13839		}).wrap( $( '<div/>', {
13840			"class": this.settings.stageOuterClass
13841		}));
13842
13843		// append stage
13844		this.$element.append(this.$stage.parent());
13845	};
13846
13847	/**
13848	 * Create item DOM elements
13849	 */
13850	Owl.prototype.initializeItems = function() {
13851		var $items = this.$element.find('.owl-item');
13852
13853		// if the items are already in the DOM, grab them and skip item initialization
13854		if ($items.length) {
13855			this._items = $items.get().map(function(item) {
13856				return $(item);
13857			});
13858
13859			this._mergers = this._items.map(function() {
13860				return 1;
13861			});
13862
13863			this.refresh();
13864
13865			return;
13866		}
13867
13868		// append content
13869		this.replace(this.$element.children().not(this.$stage.parent()));
13870
13871		// check visibility
13872		if (this.isVisible()) {
13873			// update view
13874			this.refresh();
13875		} else {
13876			// invalidate width
13877			this.invalidate('width');
13878		}
13879
13880		this.$element
13881			.removeClass(this.options.loadingClass)
13882			.addClass(this.options.loadedClass);
13883	};
13884
13885	/**
13886	 * Initializes the carousel.
13887	 * @protected
13888	 */
13889	Owl.prototype.initialize = function() {
13890		this.enter('initializing');
13891		this.trigger('initialize');
13892
13893		this.$element.toggleClass(this.settings.rtlClass, this.settings.rtl);
13894
13895		if (this.settings.autoWidth && !this.is('pre-loading')) {
13896			var imgs, nestedSelector, width;
13897			imgs = this.$element.find('img');
13898			nestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined;
13899			width = this.$element.children(nestedSelector).width();
13900
13901			if (imgs.length && width <= 0) {
13902				this.preloadAutoWidthImages(imgs);
13903			}
13904		}
13905
13906		this.initializeStage();
13907		this.initializeItems();
13908
13909		// register event handlers
13910		this.registerEventHandlers();
13911
13912		this.leave('initializing');
13913		this.trigger('initialized');
13914	};
13915
13916	/**
13917	 * @returns {Boolean} visibility of $element
13918	 *                    if you know the carousel will always be visible you can set `checkVisibility` to `false` to
13919	 *                    prevent the expensive browser layout forced reflow the $element.is(':visible') does
13920	 */
13921	Owl.prototype.isVisible = function() {
13922		return this.settings.checkVisibility
13923			? this.$element.is(':visible')
13924			: true;
13925	};
13926
13927	/**
13928	 * Setups the current settings.
13929	 * @todo Remove responsive classes. Why should adaptive designs be brought into IE8?
13930	 * @todo Support for media queries by using `matchMedia` would be nice.
13931	 * @public
13932	 */
13933	Owl.prototype.setup = function() {
13934		var viewport = this.viewport(),
13935			overwrites = this.options.responsive,
13936			match = -1,
13937			settings = null;
13938
13939		if (!overwrites) {
13940			settings = $.extend({}, this.options);
13941		} else {
13942			$.each(overwrites, function(breakpoint) {
13943				if (breakpoint <= viewport && breakpoint > match) {
13944					match = Number(breakpoint);
13945				}
13946			});
13947
13948			settings = $.extend({}, this.options, overwrites[match]);
13949			if (typeof settings.stagePadding === 'function') {
13950				settings.stagePadding = settings.stagePadding();
13951			}
13952			delete settings.responsive;
13953
13954			// responsive class
13955			if (settings.responsiveClass) {
13956				this.$element.attr('class',
13957					this.$element.attr('class').replace(new RegExp('(' + this.options.responsiveClass + '-)\\S+\\s', 'g'), '$1' + match)
13958				);
13959			}
13960		}
13961
13962		this.trigger('change', { property: { name: 'settings', value: settings } });
13963		this._breakpoint = match;
13964		this.settings = settings;
13965		this.invalidate('settings');
13966		this.trigger('changed', { property: { name: 'settings', value: this.settings } });
13967	};
13968
13969	/**
13970	 * Updates option logic if necessery.
13971	 * @protected
13972	 */
13973	Owl.prototype.optionsLogic = function() {
13974		if (this.settings.autoWidth) {
13975			this.settings.stagePadding = false;
13976			this.settings.merge = false;
13977		}
13978	};
13979
13980	/**
13981	 * Prepares an item before add.
13982	 * @todo Rename event parameter `content` to `item`.
13983	 * @protected
13984	 * @returns {jQuery|HTMLElement} - The item container.
13985	 */
13986	Owl.prototype.prepare = function(item) {
13987		var event = this.trigger('prepare', { content: item });
13988
13989		if (!event.data) {
13990			event.data = $('<' + this.settings.itemElement + '/>')
13991				.addClass(this.options.itemClass).append(item)
13992		}
13993
13994		this.trigger('prepared', { content: event.data });
13995
13996		return event.data;
13997	};
13998
13999	/**
14000	 * Updates the view.
14001	 * @public
14002	 */
14003	Owl.prototype.update = function() {
14004		var i = 0,
14005			n = this._pipe.length,
14006			filter = $.proxy(function(p) { return this[p] }, this._invalidated),
14007			cache = {};
14008
14009		while (i < n) {
14010			if (this._invalidated.all || $.grep(this._pipe[i].filter, filter).length > 0) {
14011				this._pipe[i].run(cache);
14012			}
14013			i++;
14014		}
14015
14016		this._invalidated = {};
14017
14018		!this.is('valid') && this.enter('valid');
14019	};
14020
14021	/**
14022	 * Gets the width of the view.
14023	 * @public
14024	 * @param {Owl.Width} [dimension=Owl.Width.Default] - The dimension to return.
14025	 * @returns {Number} - The width of the view in pixel.
14026	 */
14027	Owl.prototype.width = function(dimension) {
14028		dimension = dimension || Owl.Width.Default;
14029		switch (dimension) {
14030			case Owl.Width.Inner:
14031			case Owl.Width.Outer:
14032				return this._width;
14033			default:
14034				return this._width - this.settings.stagePadding * 2 + this.settings.margin;
14035		}
14036	};
14037
14038	/**
14039	 * Refreshes the carousel primarily for adaptive purposes.
14040	 * @public
14041	 */
14042	Owl.prototype.refresh = function() {
14043		this.enter('refreshing');
14044		this.trigger('refresh');
14045
14046		this.setup();
14047
14048		this.optionsLogic();
14049
14050		this.$element.addClass(this.options.refreshClass);
14051
14052		this.update();
14053
14054		this.$element.removeClass(this.options.refreshClass);
14055
14056		this.leave('refreshing');
14057		this.trigger('refreshed');
14058	};
14059
14060	/**
14061	 * Checks window `resize` event.
14062	 * @protected
14063	 */
14064	Owl.prototype.onThrottledResize = function() {
14065		window.clearTimeout(this.resizeTimer);
14066		this.resizeTimer = window.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate);
14067	};
14068
14069	/**
14070	 * Checks window `resize` event.
14071	 * @protected
14072	 */
14073	Owl.prototype.onResize = function() {
14074		if (!this._items.length) {
14075			return false;
14076		}
14077
14078		if (this._width === this.$element.width()) {
14079			return false;
14080		}
14081
14082		if (!this.isVisible()) {
14083			return false;
14084		}
14085
14086		this.enter('resizing');
14087
14088		if (this.trigger('resize').isDefaultPrevented()) {
14089			this.leave('resizing');
14090			return false;
14091		}
14092
14093		this.invalidate('width');
14094
14095		this.refresh();
14096
14097		this.leave('resizing');
14098		this.trigger('resized');
14099	};
14100
14101	/**
14102	 * Registers event handlers.
14103	 * @todo Check `msPointerEnabled`
14104	 * @todo #261
14105	 * @protected
14106	 */
14107	Owl.prototype.registerEventHandlers = function() {
14108		if ($.support.transition) {
14109			this.$stage.on($.support.transition.end + '.owl.core', $.proxy(this.onTransitionEnd, this));
14110		}
14111
14112		if (this.settings.responsive !== false) {
14113			this.on(window, 'resize', this._handlers.onThrottledResize);
14114		}
14115
14116		if (this.settings.mouseDrag) {
14117			this.$element.addClass(this.options.dragClass);
14118			this.$stage.on('mousedown.owl.core', $.proxy(this.onDragStart, this));
14119			this.$stage.on('dragstart.owl.core selectstart.owl.core', function() { return false });
14120		}
14121
14122		if (this.settings.touchDrag){
14123			this.$stage.on('touchstart.owl.core', $.proxy(this.onDragStart, this));
14124			this.$stage.on('touchcancel.owl.core', $.proxy(this.onDragEnd, this));
14125		}
14126	};
14127
14128	/**
14129	 * Handles `touchstart` and `mousedown` events.
14130	 * @todo Horizontal swipe threshold as option
14131	 * @todo #261
14132	 * @protected
14133	 * @param {Event} event - The event arguments.
14134	 */
14135	Owl.prototype.onDragStart = function(event) {
14136		var stage = null;
14137
14138		if (event.which === 3) {
14139			return;
14140		}
14141
14142		if ($.support.transform) {
14143			stage = this.$stage.css('transform').replace(/.*\(|\)| /g, '').split(',');
14144			stage = {
14145				x: stage[stage.length === 16 ? 12 : 4],
14146				y: stage[stage.length === 16 ? 13 : 5]
14147			};
14148		} else {
14149			stage = this.$stage.position();
14150			stage = {
14151				x: this.settings.rtl ?
14152					stage.left + this.$stage.width() - this.width() + this.settings.margin :
14153					stage.left,
14154				y: stage.top
14155			};
14156		}
14157
14158		if (this.is('animating')) {
14159			$.support.transform ? this.animate(stage.x) : this.$stage.stop()
14160			this.invalidate('position');
14161		}
14162
14163		this.$element.toggleClass(this.options.grabClass, event.type === 'mousedown');
14164
14165		this.speed(0);
14166
14167		this._drag.time = new Date().getTime();
14168		this._drag.target = $(event.target);
14169		this._drag.stage.start = stage;
14170		this._drag.stage.current = stage;
14171		this._drag.pointer = this.pointer(event);
14172
14173		$(document).on('mouseup.owl.core touchend.owl.core', $.proxy(this.onDragEnd, this));
14174
14175		$(document).one('mousemove.owl.core touchmove.owl.core', $.proxy(function(event) {
14176			var delta = this.difference(this._drag.pointer, this.pointer(event));
14177
14178			$(document).on('mousemove.owl.core touchmove.owl.core', $.proxy(this.onDragMove, this));
14179
14180			if (Math.abs(delta.x) < Math.abs(delta.y) && this.is('valid')) {
14181				return;
14182			}
14183
14184			event.preventDefault();
14185
14186			this.enter('dragging');
14187			this.trigger('drag');
14188		}, this));
14189	};
14190
14191	/**
14192	 * Handles the `touchmove` and `mousemove` events.
14193	 * @todo #261
14194	 * @protected
14195	 * @param {Event} event - The event arguments.
14196	 */
14197	Owl.prototype.onDragMove = function(event) {
14198		var minimum = null,
14199			maximum = null,
14200			pull = null,
14201			delta = this.difference(this._drag.pointer, this.pointer(event)),
14202			stage = this.difference(this._drag.stage.start, delta);
14203
14204		if (!this.is('dragging')) {
14205			return;
14206		}
14207
14208		event.preventDefault();
14209
14210		if (this.settings.loop) {
14211			minimum = this.coordinates(this.minimum());
14212			maximum = this.coordinates(this.maximum() + 1) - minimum;
14213			stage.x = (((stage.x - minimum) % maximum + maximum) % maximum) + minimum;
14214		} else {
14215			minimum = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum());
14216			maximum = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum());
14217			pull = this.settings.pullDrag ? -1 * delta.x / 5 : 0;
14218			stage.x = Math.max(Math.min(stage.x, minimum + pull), maximum + pull);
14219		}
14220
14221		this._drag.stage.current = stage;
14222
14223		this.animate(stage.x);
14224	};
14225
14226	/**
14227	 * Handles the `touchend` and `mouseup` events.
14228	 * @todo #261
14229	 * @todo Threshold for click event
14230	 * @protected
14231	 * @param {Event} event - The event arguments.
14232	 */
14233	Owl.prototype.onDragEnd = function(event) {
14234		var delta = this.difference(this._drag.pointer, this.pointer(event)),
14235			stage = this._drag.stage.current,
14236			direction = delta.x > 0 ^ this.settings.rtl ? 'left' : 'right';
14237
14238		$(document).off('.owl.core');
14239
14240		this.$element.removeClass(this.options.grabClass);
14241
14242		if (delta.x !== 0 && this.is('dragging') || !this.is('valid')) {
14243			this.speed(this.settings.dragEndSpeed || this.settings.smartSpeed);
14244			this.current(this.closest(stage.x, delta.x !== 0 ? direction : this._drag.direction));
14245			this.invalidate('position');
14246			this.update();
14247
14248			this._drag.direction = direction;
14249
14250			if (Math.abs(delta.x) > 3 || new Date().getTime() - this._drag.time > 300) {
14251				this._drag.target.one('click.owl.core', function() { return false; });
14252			}
14253		}
14254
14255		if (!this.is('dragging')) {
14256			return;
14257		}
14258
14259		this.leave('dragging');
14260		this.trigger('dragged');
14261	};
14262
14263	/**
14264	 * Gets absolute position of the closest item for a coordinate.
14265	 * @todo Setting `freeDrag` makes `closest` not reusable. See #165.
14266	 * @protected
14267	 * @param {Number} coordinate - The coordinate in pixel.
14268	 * @param {String} direction - The direction to check for the closest item. Ether `left` or `right`.
14269	 * @return {Number} - The absolute position of the closest item.
14270	 */
14271	Owl.prototype.closest = function(coordinate, direction) {
14272		var position = -1,
14273			pull = 30,
14274			width = this.width(),
14275			coordinates = this.coordinates();
14276
14277		if (!this.settings.freeDrag) {
14278			// check closest item
14279			$.each(coordinates, $.proxy(function(index, value) {
14280				// on a left pull, check on current index
14281				if (direction === 'left' && coordinate > value - pull && coordinate < value + pull) {
14282					position = index;
14283				// on a right pull, check on previous index
14284				// to do so, subtract width from value and set position = index + 1
14285				} else if (direction === 'right' && coordinate > value - width - pull && coordinate < value - width + pull) {
14286					position = index + 1;
14287				} else if (this.op(coordinate, '<', value)
14288					&& this.op(coordinate, '>', coordinates[index + 1] !== undefined ? coordinates[index + 1] : value - width)) {
14289					position = direction === 'left' ? index + 1 : index;
14290				}
14291				return position === -1;
14292			}, this));
14293		}
14294
14295		if (!this.settings.loop) {
14296			// non loop boundries
14297			if (this.op(coordinate, '>', coordinates[this.minimum()])) {
14298				position = coordinate = this.minimum();
14299			} else if (this.op(coordinate, '<', coordinates[this.maximum()])) {
14300				position = coordinate = this.maximum();
14301			}
14302		}
14303
14304		return position;
14305	};
14306
14307	/**
14308	 * Animates the stage.
14309	 * @todo #270
14310	 * @public
14311	 * @param {Number} coordinate - The coordinate in pixels.
14312	 */
14313	Owl.prototype.animate = function(coordinate) {
14314		var animate = this.speed() > 0;
14315
14316		this.is('animating') && this.onTransitionEnd();
14317
14318		if (animate) {
14319			this.enter('animating');
14320			this.trigger('translate');
14321		}
14322
14323		if ($.support.transform3d && $.support.transition) {
14324			this.$stage.css({
14325				transform: 'translate3d(' + coordinate + 'px,0px,0px)',
14326				transition: (this.speed() / 1000) + 's' + (
14327					this.settings.slideTransition ? ' ' + this.settings.slideTransition : ''
14328				)
14329			});
14330		} else if (animate) {
14331			this.$stage.animate({
14332				left: coordinate + 'px'
14333			}, this.speed(), this.settings.fallbackEasing, $.proxy(this.onTransitionEnd, this));
14334		} else {
14335			this.$stage.css({
14336				left: coordinate + 'px'
14337			});
14338		}
14339	};
14340
14341	/**
14342	 * Checks whether the carousel is in a specific state or not.
14343	 * @param {String} state - The state to check.
14344	 * @returns {Boolean} - The flag which indicates if the carousel is busy.
14345	 */
14346	Owl.prototype.is = function(state) {
14347		return this._states.current[state] && this._states.current[state] > 0;
14348	};
14349
14350	/**
14351	 * Sets the absolute position of the current item.
14352	 * @public
14353	 * @param {Number} [position] - The new absolute position or nothing to leave it unchanged.
14354	 * @returns {Number} - The absolute position of the current item.
14355	 */
14356	Owl.prototype.current = function(position) {
14357		if (position === undefined) {
14358			return this._current;
14359		}
14360
14361		if (this._items.length === 0) {
14362			return undefined;
14363		}
14364
14365		position = this.normalize(position);
14366
14367		if (this._current !== position) {
14368			var event = this.trigger('change', { property: { name: 'position', value: position } });
14369
14370			if (event.data !== undefined) {
14371				position = this.normalize(event.data);
14372			}
14373
14374			this._current = position;
14375
14376			this.invalidate('position');
14377
14378			this.trigger('changed', { property: { name: 'position', value: this._current } });
14379		}
14380
14381		return this._current;
14382	};
14383
14384	/**
14385	 * Invalidates the given part of the update routine.
14386	 * @param {String} [part] - The part to invalidate.
14387	 * @returns {Array.<String>} - The invalidated parts.
14388	 */
14389	Owl.prototype.invalidate = function(part) {
14390		if ($.type(part) === 'string') {
14391			this._invalidated[part] = true;
14392			this.is('valid') && this.leave('valid');
14393		}
14394		return $.map(this._invalidated, function(v, i) { return i });
14395	};
14396
14397	/**
14398	 * Resets the absolute position of the current item.
14399	 * @public
14400	 * @param {Number} position - The absolute position of the new item.
14401	 */
14402	Owl.prototype.reset = function(position) {
14403		position = this.normalize(position);
14404
14405		if (position === undefined) {
14406			return;
14407		}
14408
14409		this._speed = 0;
14410		this._current = position;
14411
14412		this.suppress([ 'translate', 'translated' ]);
14413
14414		this.animate(this.coordinates(position));
14415
14416		this.release([ 'translate', 'translated' ]);
14417	};
14418
14419	/**
14420	 * Normalizes an absolute or a relative position of an item.
14421	 * @public
14422	 * @param {Number} position - The absolute or relative position to normalize.
14423	 * @param {Boolean} [relative=false] - Whether the given position is relative or not.
14424	 * @returns {Number} - The normalized position.
14425	 */
14426	Owl.prototype.normalize = function(position, relative) {
14427		var n = this._items.length,
14428			m = relative ? 0 : this._clones.length;
14429
14430		if (!this.isNumeric(position) || n < 1) {
14431			position = undefined;
14432		} else if (position < 0 || position >= n + m) {
14433			position = ((position - m / 2) % n + n) % n + m / 2;
14434		}
14435
14436		return position;
14437	};
14438
14439	/**
14440	 * Converts an absolute position of an item into a relative one.
14441	 * @public
14442	 * @param {Number} position - The absolute position to convert.
14443	 * @returns {Number} - The converted position.
14444	 */
14445	Owl.prototype.relative = function(position) {
14446		position -= this._clones.length / 2;
14447		return this.normalize(position, true);
14448	};
14449
14450	/**
14451	 * Gets the maximum position for the current item.
14452	 * @public
14453	 * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.
14454	 * @returns {Number}
14455	 */
14456	Owl.prototype.maximum = function(relative) {
14457		var settings = this.settings,
14458			maximum = this._coordinates.length,
14459			iterator,
14460			reciprocalItemsWidth,
14461			elementWidth;
14462
14463		if (settings.loop) {
14464			maximum = this._clones.length / 2 + this._items.length - 1;
14465		} else if (settings.autoWidth || settings.merge) {
14466			iterator = this._items.length;
14467			if (iterator) {
14468				reciprocalItemsWidth = this._items[--iterator].width();
14469				elementWidth = this.$element.width();
14470				while (iterator--) {
14471					reciprocalItemsWidth += this._items[iterator].width() + this.settings.margin;
14472					if (reciprocalItemsWidth > elementWidth) {
14473						break;
14474					}
14475				}
14476			}
14477			maximum = iterator + 1;
14478		} else if (settings.center) {
14479			maximum = this._items.length - 1;
14480		} else {
14481			maximum = this._items.length - settings.items;
14482		}
14483
14484		if (relative) {
14485			maximum -= this._clones.length / 2;
14486		}
14487
14488		return Math.max(maximum, 0);
14489	};
14490
14491	/**
14492	 * Gets the minimum position for the current item.
14493	 * @public
14494	 * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.
14495	 * @returns {Number}
14496	 */
14497	Owl.prototype.minimum = function(relative) {
14498		return relative ? 0 : this._clones.length / 2;
14499	};
14500
14501	/**
14502	 * Gets an item at the specified relative position.
14503	 * @public
14504	 * @param {Number} [position] - The relative position of the item.
14505	 * @return {jQuery|Array.<jQuery>} - The item at the given position or all items if no position was given.
14506	 */
14507	Owl.prototype.items = function(position) {
14508		if (position === undefined) {
14509			return this._items.slice();
14510		}
14511
14512		position = this.normalize(position, true);
14513		return this._items[position];
14514	};
14515
14516	/**
14517	 * Gets an item at the specified relative position.
14518	 * @public
14519	 * @param {Number} [position] - The relative position of the item.
14520	 * @return {jQuery|Array.<jQuery>} - The item at the given position or all items if no position was given.
14521	 */
14522	Owl.prototype.mergers = function(position) {
14523		if (position === undefined) {
14524			return this._mergers.slice();
14525		}
14526
14527		position = this.normalize(position, true);
14528		return this._mergers[position];
14529	};
14530
14531	/**
14532	 * Gets the absolute positions of clones for an item.
14533	 * @public
14534	 * @param {Number} [position] - The relative position of the item.
14535	 * @returns {Array.<Number>} - The absolute positions of clones for the item or all if no position was given.
14536	 */
14537	Owl.prototype.clones = function(position) {
14538		var odd = this._clones.length / 2,
14539			even = odd + this._items.length,
14540			map = function(index) { return index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2 };
14541
14542		if (position === undefined) {
14543			return $.map(this._clones, function(v, i) { return map(i) });
14544		}
14545
14546		return $.map(this._clones, function(v, i) { return v === position ? map(i) : null });
14547	};
14548
14549	/**
14550	 * Sets the current animation speed.
14551	 * @public
14552	 * @param {Number} [speed] - The animation speed in milliseconds or nothing to leave it unchanged.
14553	 * @returns {Number} - The current animation speed in milliseconds.
14554	 */
14555	Owl.prototype.speed = function(speed) {
14556		if (speed !== undefined) {
14557			this._speed = speed;
14558		}
14559
14560		return this._speed;
14561	};
14562
14563	/**
14564	 * Gets the coordinate of an item.
14565	 * @todo The name of this method is missleanding.
14566	 * @public
14567	 * @param {Number} position - The absolute position of the item within `minimum()` and `maximum()`.
14568	 * @returns {Number|Array.<Number>} - The coordinate of the item in pixel or all coordinates.
14569	 */
14570	Owl.prototype.coordinates = function(position) {
14571		var multiplier = 1,
14572			newPosition = position - 1,
14573			coordinate;
14574
14575		if (position === undefined) {
14576			return $.map(this._coordinates, $.proxy(function(coordinate, index) {
14577				return this.coordinates(index);
14578			}, this));
14579		}
14580
14581		if (this.settings.center) {
14582			if (this.settings.rtl) {
14583				multiplier = -1;
14584				newPosition = position + 1;
14585			}
14586
14587			coordinate = this._coordinates[position];
14588			coordinate += (this.width() - coordinate + (this._coordinates[newPosition] || 0)) / 2 * multiplier;
14589		} else {
14590			coordinate = this._coordinates[newPosition] || 0;
14591		}
14592
14593		coordinate = Math.ceil(coordinate);
14594
14595		return coordinate;
14596	};
14597
14598	/**
14599	 * Calculates the speed for a translation.
14600	 * @protected
14601	 * @param {Number} from - The absolute position of the start item.
14602	 * @param {Number} to - The absolute position of the target item.
14603	 * @param {Number} [factor=undefined] - The time factor in milliseconds.
14604	 * @returns {Number} - The time in milliseconds for the translation.
14605	 */
14606	Owl.prototype.duration = function(from, to, factor) {
14607		if (factor === 0) {
14608			return 0;
14609		}
14610
14611		return Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs((factor || this.settings.smartSpeed));
14612	};
14613
14614	/**
14615	 * Slides to the specified item.
14616	 * @public
14617	 * @param {Number} position - The position of the item.
14618	 * @param {Number} [speed] - The time in milliseconds for the transition.
14619	 */
14620	Owl.prototype.to = function(position, speed) {
14621		var current = this.current(),
14622			revert = null,
14623			distance = position - this.relative(current),
14624			direction = (distance > 0) - (distance < 0),
14625			items = this._items.length,
14626			minimum = this.minimum(),
14627			maximum = this.maximum();
14628
14629		if (this.settings.loop) {
14630			if (!this.settings.rewind && Math.abs(distance) > items / 2) {
14631				distance += direction * -1 * items;
14632			}
14633
14634			position = current + distance;
14635			revert = ((position - minimum) % items + items) % items + minimum;
14636
14637			if (revert !== position && revert - distance <= maximum && revert - distance > 0) {
14638				current = revert - distance;
14639				position = revert;
14640				this.reset(current);
14641			}
14642		} else if (this.settings.rewind) {
14643			maximum += 1;
14644			position = (position % maximum + maximum) % maximum;
14645		} else {
14646			position = Math.max(minimum, Math.min(maximum, position));
14647		}
14648
14649		this.speed(this.duration(current, position, speed));
14650		this.current(position);
14651
14652		if (this.isVisible()) {
14653			this.update();
14654		}
14655	};
14656
14657	/**
14658	 * Slides to the next item.
14659	 * @public
14660	 * @param {Number} [speed] - The time in milliseconds for the transition.
14661	 */
14662	Owl.prototype.next = function(speed) {
14663		speed = speed || false;
14664		this.to(this.relative(this.current()) + 1, speed);
14665	};
14666
14667	/**
14668	 * Slides to the previous item.
14669	 * @public
14670	 * @param {Number} [speed] - The time in milliseconds for the transition.
14671	 */
14672	Owl.prototype.prev = function(speed) {
14673		speed = speed || false;
14674		this.to(this.relative(this.current()) - 1, speed);
14675	};
14676
14677	/**
14678	 * Handles the end of an animation.
14679	 * @protected
14680	 * @param {Event} event - The event arguments.
14681	 */
14682	Owl.prototype.onTransitionEnd = function(event) {
14683
14684		// if css2 animation then event object is undefined
14685		if (event !== undefined) {
14686			event.stopPropagation();
14687
14688			// Catch only owl-stage transitionEnd event
14689			if ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)) {
14690				return false;
14691			}
14692		}
14693
14694		this.leave('animating');
14695		this.trigger('translated');
14696	};
14697
14698	/**
14699	 * Gets viewport width.
14700	 * @protected
14701	 * @return {Number} - The width in pixel.
14702	 */
14703	Owl.prototype.viewport = function() {
14704		var width;
14705		if (this.options.responsiveBaseElement !== window) {
14706			width = $(this.options.responsiveBaseElement).width();
14707		} else if (window.innerWidth) {
14708			width = window.innerWidth;
14709		} else if (document.documentElement && document.documentElement.clientWidth) {
14710			width = document.documentElement.clientWidth;
14711		} else {
14712			console.warn('Can not detect viewport width.');
14713		}
14714		return width;
14715	};
14716
14717	/**
14718	 * Replaces the current content.
14719	 * @public
14720	 * @param {HTMLElement|jQuery|String} content - The new content.
14721	 */
14722	Owl.prototype.replace = function(content) {
14723		this.$stage.empty();
14724		this._items = [];
14725
14726		if (content) {
14727			content = (content instanceof jQuery) ? content : $(content);
14728		}
14729
14730		if (this.settings.nestedItemSelector) {
14731			content = content.find('.' + this.settings.nestedItemSelector);
14732		}
14733
14734		content.filter(function() {
14735			return this.nodeType === 1;
14736		}).each($.proxy(function(index, item) {
14737			item = this.prepare(item);
14738			this.$stage.append(item);
14739			this._items.push(item);
14740			this._mergers.push(item.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);
14741		}, this));
14742
14743		this.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0);
14744
14745		this.invalidate('items');
14746	};
14747
14748	/**
14749	 * Adds an item.
14750	 * @todo Use `item` instead of `content` for the event arguments.
14751	 * @public
14752	 * @param {HTMLElement|jQuery|String} content - The item content to add.
14753	 * @param {Number} [position] - The relative position at which to insert the item otherwise the item will be added to the end.
14754	 */
14755	Owl.prototype.add = function(content, position) {
14756		var current = this.relative(this._current);
14757
14758		position = position === undefined ? this._items.length : this.normalize(position, true);
14759		content = content instanceof jQuery ? content : $(content);
14760
14761		this.trigger('add', { content: content, position: position });
14762
14763		content = this.prepare(content);
14764
14765		if (this._items.length === 0 || position === this._items.length) {
14766			this._items.length === 0 && this.$stage.append(content);
14767			this._items.length !== 0 && this._items[position - 1].after(content);
14768			this._items.push(content);
14769			this._mergers.push(content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);
14770		} else {
14771			this._items[position].before(content);
14772			this._items.splice(position, 0, content);
14773			this._mergers.splice(position, 0, content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);
14774		}
14775
14776		this._items[current] && this.reset(this._items[current].index());
14777
14778		this.invalidate('items');
14779
14780		this.trigger('added', { content: content, position: position });
14781	};
14782
14783	/**
14784	 * Removes an item by its position.
14785	 * @todo Use `item` instead of `content` for the event arguments.
14786	 * @public
14787	 * @param {Number} position - The relative position of the item to remove.
14788	 */
14789	Owl.prototype.remove = function(position) {
14790		position = this.normalize(position, true);
14791
14792		if (position === undefined) {
14793			return;
14794		}
14795
14796		this.trigger('remove', { content: this._items[position], position: position });
14797
14798		this._items[position].remove();
14799		this._items.splice(position, 1);
14800		this._mergers.splice(position, 1);
14801
14802		this.invalidate('items');
14803
14804		this.trigger('removed', { content: null, position: position });
14805	};
14806
14807	/**
14808	 * Preloads images with auto width.
14809	 * @todo Replace by a more generic approach
14810	 * @protected
14811	 */
14812	Owl.prototype.preloadAutoWidthImages = function(images) {
14813		images.each($.proxy(function(i, element) {
14814			this.enter('pre-loading');
14815			element = $(element);
14816			$(new Image()).one('load', $.proxy(function(e) {
14817				element.attr('src', e.target.src);
14818				element.css('opacity', 1);
14819				this.leave('pre-loading');
14820				!this.is('pre-loading') && !this.is('initializing') && this.refresh();
14821			}, this)).attr('src', element.attr('src') || element.attr('data-src') || element.attr('data-src-retina'));
14822		}, this));
14823	};
14824
14825	/**
14826	 * Destroys the carousel.
14827	 * @public
14828	 */
14829	Owl.prototype.destroy = function() {
14830
14831		this.$element.off('.owl.core');
14832		this.$stage.off('.owl.core');
14833		$(document).off('.owl.core');
14834
14835		if (this.settings.responsive !== false) {
14836			window.clearTimeout(this.resizeTimer);
14837			this.off(window, 'resize', this._handlers.onThrottledResize);
14838		}
14839
14840		for (var i in this._plugins) {
14841			this._plugins[i].destroy();
14842		}
14843
14844		this.$stage.children('.cloned').remove();
14845
14846		this.$stage.unwrap();
14847		this.$stage.children().contents().unwrap();
14848		this.$stage.children().unwrap();
14849		this.$stage.remove();
14850		this.$element
14851			.removeClass(this.options.refreshClass)
14852			.removeClass(this.options.loadingClass)
14853			.removeClass(this.options.loadedClass)
14854			.removeClass(this.options.rtlClass)
14855			.removeClass(this.options.dragClass)
14856			.removeClass(this.options.grabClass)
14857			.attr('class', this.$element.attr('class').replace(new RegExp(this.options.responsiveClass + '-\\S+\\s', 'g'), ''))
14858			.removeData('owl.carousel');
14859	};
14860
14861	/**
14862	 * Operators to calculate right-to-left and left-to-right.
14863	 * @protected
14864	 * @param {Number} [a] - The left side operand.
14865	 * @param {String} [o] - The operator.
14866	 * @param {Number} [b] - The right side operand.
14867	 */
14868	Owl.prototype.op = function(a, o, b) {
14869		var rtl = this.settings.rtl;
14870		switch (o) {
14871			case '<':
14872				return rtl ? a > b : a < b;
14873			case '>':
14874				return rtl ? a < b : a > b;
14875			case '>=':
14876				return rtl ? a <= b : a >= b;
14877			case '<=':
14878				return rtl ? a >= b : a <= b;
14879			default:
14880				break;
14881		}
14882	};
14883
14884	/**
14885	 * Attaches to an internal event.
14886	 * @protected
14887	 * @param {HTMLElement} element - The event source.
14888	 * @param {String} event - The event name.
14889	 * @param {Function} listener - The event handler to attach.
14890	 * @param {Boolean} capture - Wether the event should be handled at the capturing phase or not.
14891	 */
14892	Owl.prototype.on = function(element, event, listener, capture) {
14893		if (element.addEventListener) {
14894			element.addEventListener(event, listener, capture);
14895		} else if (element.attachEvent) {
14896			element.attachEvent('on' + event, listener);
14897		}
14898	};
14899
14900	/**
14901	 * Detaches from an internal event.
14902	 * @protected
14903	 * @param {HTMLElement} element - The event source.
14904	 * @param {String} event - The event name.
14905	 * @param {Function} listener - The attached event handler to detach.
14906	 * @param {Boolean} capture - Wether the attached event handler was registered as a capturing listener or not.
14907	 */
14908	Owl.prototype.off = function(element, event, listener, capture) {
14909		if (element.removeEventListener) {
14910			element.removeEventListener(event, listener, capture);
14911		} else if (element.detachEvent) {
14912			element.detachEvent('on' + event, listener);
14913		}
14914	};
14915
14916	/**
14917	 * Triggers a public event.
14918	 * @todo Remove `status`, `relatedTarget` should be used instead.
14919	 * @protected
14920	 * @param {String} name - The event name.
14921	 * @param {*} [data=null] - The event data.
14922	 * @param {String} [namespace=carousel] - The event namespace.
14923	 * @param {String} [state] - The state which is associated with the event.
14924	 * @param {Boolean} [enter=false] - Indicates if the call enters the specified state or not.
14925	 * @returns {Event} - The event arguments.
14926	 */
14927	Owl.prototype.trigger = function(name, data, namespace, state, enter) {
14928		var status = {
14929			item: { count: this._items.length, index: this.current() }
14930		}, handler = $.camelCase(
14931			$.grep([ 'on', name, namespace ], function(v) { return v })
14932				.join('-').toLowerCase()
14933		), event = $.Event(
14934			[ name, 'owl', namespace || 'carousel' ].join('.').toLowerCase(),
14935			$.extend({ relatedTarget: this }, status, data)
14936		);
14937
14938		if (!this._supress[name]) {
14939			$.each(this._plugins, function(name, plugin) {
14940				if (plugin.onTrigger) {
14941					plugin.onTrigger(event);
14942				}
14943			});
14944
14945			this.register({ type: Owl.Type.Event, name: name });
14946			this.$element.trigger(event);
14947
14948			if (this.settings && typeof this.settings[handler] === 'function') {
14949				this.settings[handler].call(this, event);
14950			}
14951		}
14952
14953		return event;
14954	};
14955
14956	/**
14957	 * Enters a state.
14958	 * @param name - The state name.
14959	 */
14960	Owl.prototype.enter = function(name) {
14961		$.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {
14962			if (this._states.current[name] === undefined) {
14963				this._states.current[name] = 0;
14964			}
14965
14966			this._states.current[name]++;
14967		}, this));
14968	};
14969
14970	/**
14971	 * Leaves a state.
14972	 * @param name - The state name.
14973	 */
14974	Owl.prototype.leave = function(name) {
14975		$.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {
14976			this._states.current[name]--;
14977		}, this));
14978	};
14979
14980	/**
14981	 * Registers an event or state.
14982	 * @public
14983	 * @param {Object} object - The event or state to register.
14984	 */
14985	Owl.prototype.register = function(object) {
14986		if (object.type === Owl.Type.Event) {
14987			if (!$.event.special[object.name]) {
14988				$.event.special[object.name] = {};
14989			}
14990
14991			if (!$.event.special[object.name].owl) {
14992				var _default = $.event.special[object.name]._default;
14993				$.event.special[object.name]._default = function(e) {
14994					if (_default && _default.apply && (!e.namespace || e.namespace.indexOf('owl') === -1)) {
14995						return _default.apply(this, arguments);
14996					}
14997					return e.namespace && e.namespace.indexOf('owl') > -1;
14998				};
14999				$.event.special[object.name].owl = true;
15000			}
15001		} else if (object.type === Owl.Type.State) {
15002			if (!this._states.tags[object.name]) {
15003				this._states.tags[object.name] = object.tags;
15004			} else {
15005				this._states.tags[object.name] = this._states.tags[object.name].concat(object.tags);
15006			}
15007
15008			this._states.tags[object.name] = $.grep(this._states.tags[object.name], $.proxy(function(tag, i) {
15009				return $.inArray(tag, this._states.tags[object.name]) === i;
15010			}, this));
15011		}
15012	};
15013
15014	/**
15015	 * Suppresses events.
15016	 * @protected
15017	 * @param {Array.<String>} events - The events to suppress.
15018	 */
15019	Owl.prototype.suppress = function(events) {
15020		$.each(events, $.proxy(function(index, event) {
15021			this._supress[event] = true;
15022		}, this));
15023	};
15024
15025	/**
15026	 * Releases suppressed events.
15027	 * @protected
15028	 * @param {Array.<String>} events - The events to release.
15029	 */
15030	Owl.prototype.release = function(events) {
15031		$.each(events, $.proxy(function(index, event) {
15032			delete this._supress[event];
15033		}, this));
15034	};
15035
15036	/**
15037	 * Gets unified pointer coordinates from event.
15038	 * @todo #261
15039	 * @protected
15040	 * @param {Event} - The `mousedown` or `touchstart` event.
15041	 * @returns {Object} - Contains `x` and `y` coordinates of current pointer position.
15042	 */
15043	Owl.prototype.pointer = function(event) {
15044		var result = { x: null, y: null };
15045
15046		event = event.originalEvent || event || window.event;
15047
15048		event = event.touches && event.touches.length ?
15049			event.touches[0] : event.changedTouches && event.changedTouches.length ?
15050				event.changedTouches[0] : event;
15051
15052		if (event.pageX) {
15053			result.x = event.pageX;
15054			result.y = event.pageY;
15055		} else {
15056			result.x = event.clientX;
15057			result.y = event.clientY;
15058		}
15059
15060		return result;
15061	};
15062
15063	/**
15064	 * Determines if the input is a Number or something that can be coerced to a Number
15065	 * @protected
15066	 * @param {Number|String|Object|Array|Boolean|RegExp|Function|Symbol} - The input to be tested
15067	 * @returns {Boolean} - An indication if the input is a Number or can be coerced to a Number
15068	 */
15069	Owl.prototype.isNumeric = function(number) {
15070		return !isNaN(parseFloat(number));
15071	};
15072
15073	/**
15074	 * Gets the difference of two vectors.
15075	 * @todo #261
15076	 * @protected
15077	 * @param {Object} - The first vector.
15078	 * @param {Object} - The second vector.
15079	 * @returns {Object} - The difference.
15080	 */
15081	Owl.prototype.difference = function(first, second) {
15082		return {
15083			x: first.x - second.x,
15084			y: first.y - second.y
15085		};
15086	};
15087
15088	/**
15089	 * The jQuery Plugin for the Owl Carousel
15090	 * @todo Navigation plugin `next` and `prev`
15091	 * @public
15092	 */
15093	$.fn.owlCarousel = function(option) {
15094		var args = Array.prototype.slice.call(arguments, 1);
15095
15096		return this.each(function() {
15097			var $this = $(this),
15098				data = $this.data('owl.carousel');
15099
15100			if (!data) {
15101				data = new Owl(this, typeof option == 'object' && option);
15102				$this.data('owl.carousel', data);
15103
15104				$.each([
15105					'next', 'prev', 'to', 'destroy', 'refresh', 'replace', 'add', 'remove'
15106				], function(i, event) {
15107					data.register({ type: Owl.Type.Event, name: event });
15108					data.$element.on(event + '.owl.carousel.core', $.proxy(function(e) {
15109						if (e.namespace && e.relatedTarget !== this) {
15110							this.suppress([ event ]);
15111							data[event].apply(this, [].slice.call(arguments, 1));
15112							this.release([ event ]);
15113						}
15114					}, data));
15115				});
15116			}
15117
15118			if (typeof option == 'string' && option.charAt(0) !== '_') {
15119				data[option].apply(data, args);
15120			}
15121		});
15122	};
15123
15124	/**
15125	 * The constructor for the jQuery Plugin
15126	 * @public
15127	 */
15128	$.fn.owlCarousel.Constructor = Owl;
15129
15130})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document);
15131
15132/**
15133 * AutoRefresh Plugin
15134 * @version 2.3.4
15135 * @author Artus Kolanowski
15136 * @author David Deutsch
15137 * @license The MIT License (MIT)
15138 */
15139;(function($, window, document, undefined) {
15140
15141	/**
15142	 * Creates the auto refresh plugin.
15143	 * @class The Auto Refresh Plugin
15144	 * @param {Owl} carousel - The Owl Carousel
15145	 */
15146	var AutoRefresh = function(carousel) {
15147		/**
15148		 * Reference to the core.
15149		 * @protected
15150		 * @type {Owl}
15151		 */
15152		this._core = carousel;
15153
15154		/**
15155		 * Refresh interval.
15156		 * @protected
15157		 * @type {number}
15158		 */
15159		this._interval = null;
15160
15161		/**
15162		 * Whether the element is currently visible or not.
15163		 * @protected
15164		 * @type {Boolean}
15165		 */
15166		this._visible = null;
15167
15168		/**
15169		 * All event handlers.
15170		 * @protected
15171		 * @type {Object}
15172		 */
15173		this._handlers = {
15174			'initialized.owl.carousel': $.proxy(function(e) {
15175				if (e.namespace && this._core.settings.autoRefresh) {
15176					this.watch();
15177				}
15178			}, this)
15179		};
15180
15181		// set default options
15182		this._core.options = $.extend({}, AutoRefresh.Defaults, this._core.options);
15183
15184		// register event handlers
15185		this._core.$element.on(this._handlers);
15186	};
15187
15188	/**
15189	 * Default options.
15190	 * @public
15191	 */
15192	AutoRefresh.Defaults = {
15193		autoRefresh: true,
15194		autoRefreshInterval: 500
15195	};
15196
15197	/**
15198	 * Watches the element.
15199	 */
15200	AutoRefresh.prototype.watch = function() {
15201		if (this._interval) {
15202			return;
15203		}
15204
15205		this._visible = this._core.isVisible();
15206		this._interval = window.setInterval($.proxy(this.refresh, this), this._core.settings.autoRefreshInterval);
15207	};
15208
15209	/**
15210	 * Refreshes the element.
15211	 */
15212	AutoRefresh.prototype.refresh = function() {
15213		if (this._core.isVisible() === this._visible) {
15214			return;
15215		}
15216
15217		this._visible = !this._visible;
15218
15219		this._core.$element.toggleClass('owl-hidden', !this._visible);
15220
15221		this._visible && (this._core.invalidate('width') && this._core.refresh());
15222	};
15223
15224	/**
15225	 * Destroys the plugin.
15226	 */
15227	AutoRefresh.prototype.destroy = function() {
15228		var handler, property;
15229
15230		window.clearInterval(this._interval);
15231
15232		for (handler in this._handlers) {
15233			this._core.$element.off(handler, this._handlers[handler]);
15234		}
15235		for (property in Object.getOwnPropertyNames(this)) {
15236			typeof this[property] != 'function' && (this[property] = null);
15237		}
15238	};
15239
15240	$.fn.owlCarousel.Constructor.Plugins.AutoRefresh = AutoRefresh;
15241
15242})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document);
15243
15244/**
15245 * Lazy Plugin
15246 * @version 2.3.4
15247 * @author Bartosz Wojciechowski
15248 * @author David Deutsch
15249 * @license The MIT License (MIT)
15250 */
15251;(function($, window, document, undefined) {
15252
15253	/**
15254	 * Creates the lazy plugin.
15255	 * @class The Lazy Plugin
15256	 * @param {Owl} carousel - The Owl Carousel
15257	 */
15258	var Lazy = function(carousel) {
15259
15260		/**
15261		 * Reference to the core.
15262		 * @protected
15263		 * @type {Owl}
15264		 */
15265		this._core = carousel;
15266
15267		/**
15268		 * Already loaded items.
15269		 * @protected
15270		 * @type {Array.<jQuery>}
15271		 */
15272		this._loaded = [];
15273
15274		/**
15275		 * Event handlers.
15276		 * @protected
15277		 * @type {Object}
15278		 */
15279		this._handlers = {
15280			'initialized.owl.carousel change.owl.carousel resized.owl.carousel': $.proxy(function(e) {
15281				if (!e.namespace) {
15282					return;
15283				}
15284
15285				if (!this._core.settings || !this._core.settings.lazyLoad) {
15286					return;
15287				}
15288
15289				if ((e.property && e.property.name == 'position') || e.type == 'initialized') {
15290					var settings = this._core.settings,
15291						n = (settings.center && Math.ceil(settings.items / 2) || settings.items),
15292						i = ((settings.center && n * -1) || 0),
15293						position = (e.property && e.property.value !== undefined ? e.property.value : this._core.current()) + i,
15294						clones = this._core.clones().length,
15295						load = $.proxy(function(i, v) { this.load(v) }, this);
15296					//TODO: Need documentation for this new option
15297					if (settings.lazyLoadEager > 0) {
15298						n += settings.lazyLoadEager;
15299						// If the carousel is looping also preload images that are to the "left"
15300						if (settings.loop) {
15301              position -= settings.lazyLoadEager;
15302              n++;
15303            }
15304					}
15305
15306					while (i++ < n) {
15307						this.load(clones / 2 + this._core.relative(position));
15308						clones && $.each(this._core.clones(this._core.relative(position)), load);
15309						position++;
15310					}
15311				}
15312			}, this)
15313		};
15314
15315		// set the default options
15316		this._core.options = $.extend({}, Lazy.Defaults, this._core.options);
15317
15318		// register event handler
15319		this._core.$element.on(this._handlers);
15320	};
15321
15322	/**
15323	 * Default options.
15324	 * @public
15325	 */
15326	Lazy.Defaults = {
15327		lazyLoad: false,
15328		lazyLoadEager: 0
15329	};
15330
15331	/**
15332	 * Loads all resources of an item at the specified position.
15333	 * @param {Number} position - The absolute position of the item.
15334	 * @protected
15335	 */
15336	Lazy.prototype.load = function(position) {
15337		var $item = this._core.$stage.children().eq(position),
15338			$elements = $item && $item.find('.owl-lazy');
15339
15340		if (!$elements || $.inArray($item.get(0), this._loaded) > -1) {
15341			return;
15342		}
15343
15344		$elements.each($.proxy(function(index, element) {
15345			var $element = $(element), image,
15346                url = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src') || $element.attr('data-srcset');
15347
15348			this._core.trigger('load', { element: $element, url: url }, 'lazy');
15349
15350			if ($element.is('img')) {
15351				$element.one('load.owl.lazy', $.proxy(function() {
15352					$element.css('opacity', 1);
15353					this._core.trigger('loaded', { element: $element, url: url }, 'lazy');
15354				}, this)).attr('src', url);
15355            } else if ($element.is('source')) {
15356                $element.one('load.owl.lazy', $.proxy(function() {
15357                    this._core.trigger('loaded', { element: $element, url: url }, 'lazy');
15358                }, this)).attr('srcset', url);
15359			} else {
15360				image = new Image();
15361				image.onload = $.proxy(function() {
15362					$element.css({
15363						'background-image': 'url("' + url + '")',
15364						'opacity': '1'
15365					});
15366					this._core.trigger('loaded', { element: $element, url: url }, 'lazy');
15367				}, this);
15368				image.src = url;
15369			}
15370		}, this));
15371
15372		this._loaded.push($item.get(0));
15373	};
15374
15375	/**
15376	 * Destroys the plugin.
15377	 * @public
15378	 */
15379	Lazy.prototype.destroy = function() {
15380		var handler, property;
15381
15382		for (handler in this.handlers) {
15383			this._core.$element.off(handler, this.handlers[handler]);
15384		}
15385		for (property in Object.getOwnPropertyNames(this)) {
15386			typeof this[property] != 'function' && (this[property] = null);
15387		}
15388	};
15389
15390	$.fn.owlCarousel.Constructor.Plugins.Lazy = Lazy;
15391
15392})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document);
15393
15394/**
15395 * AutoHeight Plugin
15396 * @version 2.3.4
15397 * @author Bartosz Wojciechowski
15398 * @author David Deutsch
15399 * @license The MIT License (MIT)
15400 */
15401;(function($, window, document, undefined) {
15402
15403	/**
15404	 * Creates the auto height plugin.
15405	 * @class The Auto Height Plugin
15406	 * @param {Owl} carousel - The Owl Carousel
15407	 */
15408	var AutoHeight = function(carousel) {
15409		/**
15410		 * Reference to the core.
15411		 * @protected
15412		 * @type {Owl}
15413		 */
15414		this._core = carousel;
15415
15416		this._previousHeight = null;
15417
15418		/**
15419		 * All event handlers.
15420		 * @protected
15421		 * @type {Object}
15422		 */
15423		this._handlers = {
15424			'initialized.owl.carousel refreshed.owl.carousel': $.proxy(function(e) {
15425				if (e.namespace && this._core.settings.autoHeight) {
15426					this.update();
15427				}
15428			}, this),
15429			'changed.owl.carousel': $.proxy(function(e) {
15430				if (e.namespace && this._core.settings.autoHeight && e.property.name === 'position'){
15431					this.update();
15432				}
15433			}, this),
15434			'loaded.owl.lazy': $.proxy(function(e) {
15435				if (e.namespace && this._core.settings.autoHeight
15436					&& e.element.closest('.' + this._core.settings.itemClass).index() === this._core.current()) {
15437					this.update();
15438				}
15439			}, this)
15440		};
15441
15442		// set default options
15443		this._core.options = $.extend({}, AutoHeight.Defaults, this._core.options);
15444
15445		// register event handlers
15446		this._core.$element.on(this._handlers);
15447		this._intervalId = null;
15448		var refThis = this;
15449
15450		// These changes have been taken from a PR by gavrochelegnou proposed in #1575
15451		// and have been made compatible with the latest jQuery version
15452		$(window).on('load', function() {
15453			if (refThis._core.settings.autoHeight) {
15454				refThis.update();
15455			}
15456		});
15457
15458		// Autoresize the height of the carousel when window is resized
15459		// When carousel has images, the height is dependent on the width
15460		// and should also change on resize
15461		$(window).resize(function() {
15462			if (refThis._core.settings.autoHeight) {
15463				if (refThis._intervalId != null) {
15464					clearTimeout(refThis._intervalId);
15465				}
15466
15467				refThis._intervalId = setTimeout(function() {
15468					refThis.update();
15469				}, 250);
15470			}
15471		});
15472
15473	};
15474
15475	/**
15476	 * Default options.
15477	 * @public
15478	 */
15479	AutoHeight.Defaults = {
15480		autoHeight: false,
15481		autoHeightClass: 'owl-height'
15482	};
15483
15484	/**
15485	 * Updates the view.
15486	 */
15487	AutoHeight.prototype.update = function() {
15488		var start = this._core._current,
15489			end = start + this._core.settings.items,
15490			lazyLoadEnabled = this._core.settings.lazyLoad,
15491			visible = this._core.$stage.children().toArray().slice(start, end),
15492			heights = [],
15493			maxheight = 0;
15494
15495		$.each(visible, function(index, item) {
15496			heights.push($(item).height());
15497		});
15498
15499		maxheight = Math.max.apply(null, heights);
15500
15501		if (maxheight <= 1 && lazyLoadEnabled && this._previousHeight) {
15502			maxheight = this._previousHeight;
15503		}
15504
15505		this._previousHeight = maxheight;
15506
15507		this._core.$stage.parent()
15508			.height(maxheight)
15509			.addClass(this._core.settings.autoHeightClass);
15510	};
15511
15512	AutoHeight.prototype.destroy = function() {
15513		var handler, property;
15514
15515		for (handler in this._handlers) {
15516			this._core.$element.off(handler, this._handlers[handler]);
15517		}
15518		for (property in Object.getOwnPropertyNames(this)) {
15519			typeof this[property] !== 'function' && (this[property] = null);
15520		}
15521	};
15522
15523	$.fn.owlCarousel.Constructor.Plugins.AutoHeight = AutoHeight;
15524
15525})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document);
15526
15527/**
15528 * Video Plugin
15529 * @version 2.3.4
15530 * @author Bartosz Wojciechowski
15531 * @author David Deutsch
15532 * @license The MIT License (MIT)
15533 */
15534;(function($, window, document, undefined) {
15535
15536	/**
15537	 * Creates the video plugin.
15538	 * @class The Video Plugin
15539	 * @param {Owl} carousel - The Owl Carousel
15540	 */
15541	var Video = function(carousel) {
15542		/**
15543		 * Reference to the core.
15544		 * @protected
15545		 * @type {Owl}
15546		 */
15547		this._core = carousel;
15548
15549		/**
15550		 * Cache all video URLs.
15551		 * @protected
15552		 * @type {Object}
15553		 */
15554		this._videos = {};
15555
15556		/**
15557		 * Current playing item.
15558		 * @protected
15559		 * @type {jQuery}
15560		 */
15561		this._playing = null;
15562
15563		/**
15564		 * All event handlers.
15565		 * @todo The cloned content removale is too late
15566		 * @protected
15567		 * @type {Object}
15568		 */
15569		this._handlers = {
15570			'initialized.owl.carousel': $.proxy(function(e) {
15571				if (e.namespace) {
15572					this._core.register({ type: 'state', name: 'playing', tags: [ 'interacting' ] });
15573				}
15574			}, this),
15575			'resize.owl.carousel': $.proxy(function(e) {
15576				if (e.namespace && this._core.settings.video && this.isInFullScreen()) {
15577					e.preventDefault();
15578				}
15579			}, this),
15580			'refreshed.owl.carousel': $.proxy(function(e) {
15581				if (e.namespace && this._core.is('resizing')) {
15582					this._core.$stage.find('.cloned .owl-video-frame').remove();
15583				}
15584			}, this),
15585			'changed.owl.carousel': $.proxy(function(e) {
15586				if (e.namespace && e.property.name === 'position' && this._playing) {
15587					this.stop();
15588				}
15589			}, this),
15590			'prepared.owl.carousel': $.proxy(function(e) {
15591				if (!e.namespace) {
15592					return;
15593				}
15594
15595				var $element = $(e.content).find('.owl-video');
15596
15597				if ($element.length) {
15598					$element.css('display', 'none');
15599					this.fetch($element, $(e.content));
15600				}
15601			}, this)
15602		};
15603
15604		// set default options
15605		this._core.options = $.extend({}, Video.Defaults, this._core.options);
15606
15607		// register event handlers
15608		this._core.$element.on(this._handlers);
15609
15610		this._core.$element.on('click.owl.video', '.owl-video-play-icon', $.proxy(function(e) {
15611			this.play(e);
15612		}, this));
15613	};
15614
15615	/**
15616	 * Default options.
15617	 * @public
15618	 */
15619	Video.Defaults = {
15620		video: false,
15621		videoHeight: false,
15622		videoWidth: false
15623	};
15624
15625	/**
15626	 * Gets the video ID and the type (YouTube/Vimeo/vzaar only).
15627	 * @protected
15628	 * @param {jQuery} target - The target containing the video data.
15629	 * @param {jQuery} item - The item containing the video.
15630	 */
15631	Video.prototype.fetch = function(target, item) {
15632			var type = (function() {
15633					if (target.attr('data-vimeo-id')) {
15634						return 'vimeo';
15635					} else if (target.attr('data-vzaar-id')) {
15636						return 'vzaar'
15637					} else {
15638						return 'youtube';
15639					}
15640				})(),
15641				id = target.attr('data-vimeo-id') || target.attr('data-youtube-id') || target.attr('data-vzaar-id'),
15642				width = target.attr('data-width') || this._core.settings.videoWidth,
15643				height = target.attr('data-height') || this._core.settings.videoHeight,
15644				url = target.attr('href');
15645
15646		if (url) {
15647
15648			/*
15649					Parses the id's out of the following urls (and probably more):
15650					https://www.youtube.com/watch?v=:id
15651					https://youtu.be/:id
15652					https://vimeo.com/:id
15653					https://vimeo.com/channels/:channel/:id
15654					https://vimeo.com/groups/:group/videos/:id
15655					https://app.vzaar.com/videos/:id
15656
15657					Visual example: https://regexper.com/#(http%3A%7Chttps%3A%7C)%5C%2F%5C%2F(player.%7Cwww.%7Capp.)%3F(vimeo%5C.com%7Cyoutu(be%5C.com%7C%5C.be%7Cbe%5C.googleapis%5C.com)%7Cvzaar%5C.com)%5C%2F(video%5C%2F%7Cvideos%5C%2F%7Cembed%5C%2F%7Cchannels%5C%2F.%2B%5C%2F%7Cgroups%5C%2F.%2B%5C%2F%7Cwatch%5C%3Fv%3D%7Cv%5C%2F)%3F(%5BA-Za-z0-9._%25-%5D*)(%5C%26%5CS%2B)%3F
15658			*/
15659
15660			id = url.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com|be\-nocookie\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/);
15661
15662			if (id[3].indexOf('youtu') > -1) {
15663				type = 'youtube';
15664			} else if (id[3].indexOf('vimeo') > -1) {
15665				type = 'vimeo';
15666			} else if (id[3].indexOf('vzaar') > -1) {
15667				type = 'vzaar';
15668			} else {
15669				throw new Error('Video URL not supported.');
15670			}
15671			id = id[6];
15672		} else {
15673			throw new Error('Missing video URL.');
15674		}
15675
15676		this._videos[url] = {
15677			type: type,
15678			id: id,
15679			width: width,
15680			height: height
15681		};
15682
15683		item.attr('data-video', url);
15684
15685		this.thumbnail(target, this._videos[url]);
15686	};
15687
15688	/**
15689	 * Creates video thumbnail.
15690	 * @protected
15691	 * @param {jQuery} target - The target containing the video data.
15692	 * @param {Object} info - The video info object.
15693	 * @see `fetch`
15694	 */
15695	Video.prototype.thumbnail = function(target, video) {
15696		var tnLink,
15697			icon,
15698			path,
15699			dimensions = video.width && video.height ? 'width:' + video.width + 'px;height:' + video.height + 'px;' : '',
15700			customTn = target.find('img'),
15701			srcType = 'src',
15702			lazyClass = '',
15703			settings = this._core.settings,
15704			create = function(path) {
15705				icon = '<div class="owl-video-play-icon"></div>';
15706
15707				if (settings.lazyLoad) {
15708					tnLink = $('<div/>',{
15709						"class": 'owl-video-tn ' + lazyClass,
15710						"srcType": path
15711					});
15712				} else {
15713					tnLink = $( '<div/>', {
15714						"class": "owl-video-tn",
15715						"style": 'opacity:1;background-image:url(' + path + ')'
15716					});
15717				}
15718				target.after(tnLink);
15719				target.after(icon);
15720			};
15721
15722		// wrap video content into owl-video-wrapper div
15723		target.wrap( $( '<div/>', {
15724			"class": "owl-video-wrapper",
15725			"style": dimensions
15726		}));
15727
15728		if (this._core.settings.lazyLoad) {
15729			srcType = 'data-src';
15730			lazyClass = 'owl-lazy';
15731		}
15732
15733		// custom thumbnail
15734		if (customTn.length) {
15735			create(customTn.attr(srcType));
15736			customTn.remove();
15737			return false;
15738		}
15739
15740		if (video.type === 'youtube') {
15741			path = "//img.youtube.com/vi/" + video.id + "/hqdefault.jpg";
15742			create(path);
15743		} else if (video.type === 'vimeo') {
15744			$.ajax({
15745				type: 'GET',
15746				url: '//vimeo.com/api/v2/video/' + video.id + '.json',
15747				jsonp: 'callback',
15748				dataType: 'jsonp',
15749				success: function(data) {
15750					path = data[0].thumbnail_large;
15751					create(path);
15752				}
15753			});
15754		} else if (video.type === 'vzaar') {
15755			$.ajax({
15756				type: 'GET',
15757				url: '//vzaar.com/api/videos/' + video.id + '.json',
15758				jsonp: 'callback',
15759				dataType: 'jsonp',
15760				success: function(data) {
15761					path = data.framegrab_url;
15762					create(path);
15763				}
15764			});
15765		}
15766	};
15767
15768	/**
15769	 * Stops the current video.
15770	 * @public
15771	 */
15772	Video.prototype.stop = function() {
15773		this._core.trigger('stop', null, 'video');
15774		this._playing.find('.owl-video-frame').remove();
15775		this._playing.removeClass('owl-video-playing');
15776		this._playing = null;
15777		this._core.leave('playing');
15778		this._core.trigger('stopped', null, 'video');
15779	};
15780
15781	/**
15782	 * Starts the current video.
15783	 * @public
15784	 * @param {Event} event - The event arguments.
15785	 */
15786	Video.prototype.play = function(event) {
15787		var target = $(event.target),
15788			item = target.closest('.' + this._core.settings.itemClass),
15789			video = this._videos[item.attr('data-video')],
15790			width = video.width || '100%',
15791			height = video.height || this._core.$stage.height(),
15792			html,
15793			iframe;
15794
15795		if (this._playing) {
15796			return;
15797		}
15798
15799		this._core.enter('playing');
15800		this._core.trigger('play', null, 'video');
15801
15802		item = this._core.items(this._core.relative(item.index()));
15803
15804		this._core.reset(item.index());
15805
15806		html = $( '<iframe frameborder="0" allowfullscreen mozallowfullscreen webkitAllowFullScreen ></iframe>' );
15807		html.attr( 'height', height );
15808		html.attr( 'width', width );
15809		if (video.type === 'youtube') {
15810			html.attr( 'src', '//www.youtube.com/embed/' + video.id + '?autoplay=1&rel=0&v=' + video.id );
15811		} else if (video.type === 'vimeo') {
15812			html.attr( 'src', '//player.vimeo.com/video/' + video.id + '?autoplay=1' );
15813		} else if (video.type === 'vzaar') {
15814			html.attr( 'src', '//view.vzaar.com/' + video.id + '/player?autoplay=true' );
15815		}
15816
15817		iframe = $(html).wrap( '<div class="owl-video-frame" />' ).insertAfter(item.find('.owl-video'));
15818
15819		this._playing = item.addClass('owl-video-playing');
15820	};
15821
15822	/**
15823	 * Checks whether an video is currently in full screen mode or not.
15824	 * @todo Bad style because looks like a readonly method but changes members.
15825	 * @protected
15826	 * @returns {Boolean}
15827	 */
15828	Video.prototype.isInFullScreen = function() {
15829		var element = document.fullscreenElement || document.mozFullScreenElement ||
15830				document.webkitFullscreenElement;
15831
15832		return element && $(element).parent().hasClass('owl-video-frame');
15833	};
15834
15835	/**
15836	 * Destroys the plugin.
15837	 */
15838	Video.prototype.destroy = function() {
15839		var handler, property;
15840
15841		this._core.$element.off('click.owl.video');
15842
15843		for (handler in this._handlers) {
15844			this._core.$element.off(handler, this._handlers[handler]);
15845		}
15846		for (property in Object.getOwnPropertyNames(this)) {
15847			typeof this[property] != 'function' && (this[property] = null);
15848		}
15849	};
15850
15851	$.fn.owlCarousel.Constructor.Plugins.Video = Video;
15852
15853})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document);
15854
15855/**
15856 * Animate Plugin
15857 * @version 2.3.4
15858 * @author Bartosz Wojciechowski
15859 * @author David Deutsch
15860 * @license The MIT License (MIT)
15861 */
15862;(function($, window, document, undefined) {
15863
15864	/**
15865	 * Creates the animate plugin.
15866	 * @class The Navigation Plugin
15867	 * @param {Owl} scope - The Owl Carousel
15868	 */
15869	var Animate = function(scope) {
15870		this.core = scope;
15871		this.core.options = $.extend({}, Animate.Defaults, this.core.options);
15872		this.swapping = true;
15873		this.previous = undefined;
15874		this.next = undefined;
15875
15876		this.handlers = {
15877			'change.owl.carousel': $.proxy(function(e) {
15878				if (e.namespace && e.property.name == 'position') {
15879					this.previous = this.core.current();
15880					this.next = e.property.value;
15881				}
15882			}, this),
15883			'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': $.proxy(function(e) {
15884				if (e.namespace) {
15885					this.swapping = e.type == 'translated';
15886				}
15887			}, this),
15888			'translate.owl.carousel': $.proxy(function(e) {
15889				if (e.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn)) {
15890					this.swap();
15891				}
15892			}, this)
15893		};
15894
15895		this.core.$element.on(this.handlers);
15896	};
15897
15898	/**
15899	 * Default options.
15900	 * @public
15901	 */
15902	Animate.Defaults = {
15903		animateOut: false,
15904		animateIn: false
15905	};
15906
15907	/**
15908	 * Toggles the animation classes whenever an translations starts.
15909	 * @protected
15910	 * @returns {Boolean|undefined}
15911	 */
15912	Animate.prototype.swap = function() {
15913
15914		if (this.core.settings.items !== 1) {
15915			return;
15916		}
15917
15918		if (!$.support.animation || !$.support.transition) {
15919			return;
15920		}
15921
15922		this.core.speed(0);
15923
15924		var left,
15925			clear = $.proxy(this.clear, this),
15926			previous = this.core.$stage.children().eq(this.previous),
15927			next = this.core.$stage.children().eq(this.next),
15928			incoming = this.core.settings.animateIn,
15929			outgoing = this.core.settings.animateOut;
15930
15931		if (this.core.current() === this.previous) {
15932			return;
15933		}
15934
15935		if (outgoing) {
15936			left = this.core.coordinates(this.previous) - this.core.coordinates(this.next);
15937			previous.one($.support.animation.end, clear)
15938				.css( { 'left': left + 'px' } )
15939				.addClass('animated owl-animated-out')
15940				.addClass(outgoing);
15941		}
15942
15943		if (incoming) {
15944			next.one($.support.animation.end, clear)
15945				.addClass('animated owl-animated-in')
15946				.addClass(incoming);
15947		}
15948	};
15949
15950	Animate.prototype.clear = function(e) {
15951		$(e.target).css( { 'left': '' } )
15952			.removeClass('animated owl-animated-out owl-animated-in')
15953			.removeClass(this.core.settings.animateIn)
15954			.removeClass(this.core.settings.animateOut);
15955		this.core.onTransitionEnd();
15956	};
15957
15958	/**
15959	 * Destroys the plugin.
15960	 * @public
15961	 */
15962	Animate.prototype.destroy = function() {
15963		var handler, property;
15964
15965		for (handler in this.handlers) {
15966			this.core.$element.off(handler, this.handlers[handler]);
15967		}
15968		for (property in Object.getOwnPropertyNames(this)) {
15969			typeof this[property] != 'function' && (this[property] = null);
15970		}
15971	};
15972
15973	$.fn.owlCarousel.Constructor.Plugins.Animate = Animate;
15974
15975})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document);
15976
15977/**
15978 * Autoplay Plugin
15979 * @version 2.3.4
15980 * @author Bartosz Wojciechowski
15981 * @author Artus Kolanowski
15982 * @author David Deutsch
15983 * @author Tom De Caluwé
15984 * @license The MIT License (MIT)
15985 */
15986;(function($, window, document, undefined) {
15987
15988	/**
15989	 * Creates the autoplay plugin.
15990	 * @class The Autoplay Plugin
15991	 * @param {Owl} scope - The Owl Carousel
15992	 */
15993	var Autoplay = function(carousel) {
15994		/**
15995		 * Reference to the core.
15996		 * @protected
15997		 * @type {Owl}
15998		 */
15999		this._core = carousel;
16000
16001		/**
16002		 * The autoplay timeout id.
16003		 * @type {Number}
16004		 */
16005		this._call = null;
16006
16007		/**
16008		 * Depending on the state of the plugin, this variable contains either
16009		 * the start time of the timer or the current timer value if it's
16010		 * paused. Since we start in a paused state we initialize the timer
16011		 * value.
16012		 * @type {Number}
16013		 */
16014		this._time = 0;
16015
16016		/**
16017		 * Stores the timeout currently used.
16018		 * @type {Number}
16019		 */
16020		this._timeout = 0;
16021
16022		/**
16023		 * Indicates whenever the autoplay is paused.
16024		 * @type {Boolean}
16025		 */
16026		this._paused = true;
16027
16028		/**
16029		 * All event handlers.
16030		 * @protected
16031		 * @type {Object}
16032		 */
16033		this._handlers = {
16034			'changed.owl.carousel': $.proxy(function(e) {
16035				if (e.namespace && e.property.name === 'settings') {
16036					if (this._core.settings.autoplay) {
16037						this.play();
16038					} else {
16039						this.stop();
16040					}
16041				} else if (e.namespace && e.property.name === 'position' && this._paused) {
16042					// Reset the timer. This code is triggered when the position
16043					// of the carousel was changed through user interaction.
16044					this._time = 0;
16045				}
16046			}, this),
16047			'initialized.owl.carousel': $.proxy(function(e) {
16048				if (e.namespace && this._core.settings.autoplay) {
16049					this.play();
16050				}
16051			}, this),
16052			'play.owl.autoplay': $.proxy(function(e, t, s) {
16053				if (e.namespace) {
16054					this.play(t, s);
16055				}
16056			}, this),
16057			'stop.owl.autoplay': $.proxy(function(e) {
16058				if (e.namespace) {
16059					this.stop();
16060				}
16061			}, this),
16062			'mouseover.owl.autoplay': $.proxy(function() {
16063				if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {
16064					this.pause();
16065				}
16066			}, this),
16067			'mouseleave.owl.autoplay': $.proxy(function() {
16068				if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {
16069					this.play();
16070				}
16071			}, this),
16072			'touchstart.owl.core': $.proxy(function() {
16073				if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {
16074					this.pause();
16075				}
16076			}, this),
16077			'touchend.owl.core': $.proxy(function() {
16078				if (this._core.settings.autoplayHoverPause) {
16079					this.play();
16080				}
16081			}, this)
16082		};
16083
16084		// register event handlers
16085		this._core.$element.on(this._handlers);
16086
16087		// set default options
16088		this._core.options = $.extend({}, Autoplay.Defaults, this._core.options);
16089	};
16090
16091	/**
16092	 * Default options.
16093	 * @public
16094	 */
16095	Autoplay.Defaults = {
16096		autoplay: false,
16097		autoplayTimeout: 5000,
16098		autoplayHoverPause: false,
16099		autoplaySpeed: false
16100	};
16101
16102	/**
16103	 * Transition to the next slide and set a timeout for the next transition.
16104	 * @private
16105	 * @param {Number} [speed] - The animation speed for the animations.
16106	 */
16107	Autoplay.prototype._next = function(speed) {
16108		this._call = window.setTimeout(
16109			$.proxy(this._next, this, speed),
16110			this._timeout * (Math.round(this.read() / this._timeout) + 1) - this.read()
16111		);
16112
16113		if (this._core.is('interacting') || document.hidden) {
16114			return;
16115		}
16116		this._core.next(speed || this._core.settings.autoplaySpeed);
16117	}
16118
16119	/**
16120	 * Reads the current timer value when the timer is playing.
16121	 * @public
16122	 */
16123	Autoplay.prototype.read = function() {
16124		return new Date().getTime() - this._time;
16125	};
16126
16127	/**
16128	 * Starts the autoplay.
16129	 * @public
16130	 * @param {Number} [timeout] - The interval before the next animation starts.
16131	 * @param {Number} [speed] - The animation speed for the animations.
16132	 */
16133	Autoplay.prototype.play = function(timeout, speed) {
16134		var elapsed;
16135
16136		if (!this._core.is('rotating')) {
16137			this._core.enter('rotating');
16138		}
16139
16140		timeout = timeout || this._core.settings.autoplayTimeout;
16141
16142		// Calculate the elapsed time since the last transition. If the carousel
16143		// wasn't playing this calculation will yield zero.
16144		elapsed = Math.min(this._time % (this._timeout || timeout), timeout);
16145
16146		if (this._paused) {
16147			// Start the clock.
16148			this._time = this.read();
16149			this._paused = false;
16150		} else {
16151			// Clear the active timeout to allow replacement.
16152			window.clearTimeout(this._call);
16153		}
16154
16155		// Adjust the origin of the timer to match the new timeout value.
16156		this._time += this.read() % timeout - elapsed;
16157
16158		this._timeout = timeout;
16159		this._call = window.setTimeout($.proxy(this._next, this, speed), timeout - elapsed);
16160	};
16161
16162	/**
16163	 * Stops the autoplay.
16164	 * @public
16165	 */
16166	Autoplay.prototype.stop = function() {
16167		if (this._core.is('rotating')) {
16168			// Reset the clock.
16169			this._time = 0;
16170			this._paused = true;
16171
16172			window.clearTimeout(this._call);
16173			this._core.leave('rotating');
16174		}
16175	};
16176
16177	/**
16178	 * Pauses the autoplay.
16179	 * @public
16180	 */
16181	Autoplay.prototype.pause = function() {
16182		if (this._core.is('rotating') && !this._paused) {
16183			// Pause the clock.
16184			this._time = this.read();
16185			this._paused = true;
16186
16187			window.clearTimeout(this._call);
16188		}
16189	};
16190
16191	/**
16192	 * Destroys the plugin.
16193	 */
16194	Autoplay.prototype.destroy = function() {
16195		var handler, property;
16196
16197		this.stop();
16198
16199		for (handler in this._handlers) {
16200			this._core.$element.off(handler, this._handlers[handler]);
16201		}
16202		for (property in Object.getOwnPropertyNames(this)) {
16203			typeof this[property] != 'function' && (this[property] = null);
16204		}
16205	};
16206
16207	$.fn.owlCarousel.Constructor.Plugins.autoplay = Autoplay;
16208
16209})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document);
16210
16211/**
16212 * Navigation Plugin
16213 * @version 2.3.4
16214 * @author Artus Kolanowski
16215 * @author David Deutsch
16216 * @license The MIT License (MIT)
16217 */
16218;(function($, window, document, undefined) {
16219	'use strict';
16220
16221	/**
16222	 * Creates the navigation plugin.
16223	 * @class The Navigation Plugin
16224	 * @param {Owl} carousel - The Owl Carousel.
16225	 */
16226	var Navigation = function(carousel) {
16227		/**
16228		 * Reference to the core.
16229		 * @protected
16230		 * @type {Owl}
16231		 */
16232		this._core = carousel;
16233
16234		/**
16235		 * Indicates whether the plugin is initialized or not.
16236		 * @protected
16237		 * @type {Boolean}
16238		 */
16239		this._initialized = false;
16240
16241		/**
16242		 * The current paging indexes.
16243		 * @protected
16244		 * @type {Array}
16245		 */
16246		this._pages = [];
16247
16248		/**
16249		 * All DOM elements of the user interface.
16250		 * @protected
16251		 * @type {Object}
16252		 */
16253		this._controls = {};
16254
16255		/**
16256		 * Markup for an indicator.
16257		 * @protected
16258		 * @type {Array.<String>}
16259		 */
16260		this._templates = [];
16261
16262		/**
16263		 * The carousel element.
16264		 * @type {jQuery}
16265		 */
16266		this.$element = this._core.$element;
16267
16268		/**
16269		 * Overridden methods of the carousel.
16270		 * @protected
16271		 * @type {Object}
16272		 */
16273		this._overrides = {
16274			next: this._core.next,
16275			prev: this._core.prev,
16276			to: this._core.to
16277		};
16278
16279		/**
16280		 * All event handlers.
16281		 * @protected
16282		 * @type {Object}
16283		 */
16284		this._handlers = {
16285			'prepared.owl.carousel': $.proxy(function(e) {
16286				if (e.namespace && this._core.settings.dotsData) {
16287					this._templates.push('<div class="' + this._core.settings.dotClass + '">' +
16288						$(e.content).find('[data-dot]').addBack('[data-dot]').attr('data-dot') + '</div>');
16289				}
16290			}, this),
16291			'added.owl.carousel': $.proxy(function(e) {
16292				if (e.namespace && this._core.settings.dotsData) {
16293					this._templates.splice(e.position, 0, this._templates.pop());
16294				}
16295			}, this),
16296			'remove.owl.carousel': $.proxy(function(e) {
16297				if (e.namespace && this._core.settings.dotsData) {
16298					this._templates.splice(e.position, 1);
16299				}
16300			}, this),
16301			'changed.owl.carousel': $.proxy(function(e) {
16302				if (e.namespace && e.property.name == 'position') {
16303					this.draw();
16304				}
16305			}, this),
16306			'initialized.owl.carousel': $.proxy(function(e) {
16307				if (e.namespace && !this._initialized) {
16308					this._core.trigger('initialize', null, 'navigation');
16309					this.initialize();
16310					this.update();
16311					this.draw();
16312					this._initialized = true;
16313					this._core.trigger('initialized', null, 'navigation');
16314				}
16315			}, this),
16316			'refreshed.owl.carousel': $.proxy(function(e) {
16317				if (e.namespace && this._initialized) {
16318					this._core.trigger('refresh', null, 'navigation');
16319					this.update();
16320					this.draw();
16321					this._core.trigger('refreshed', null, 'navigation');
16322				}
16323			}, this)
16324		};
16325
16326		// set default options
16327		this._core.options = $.extend({}, Navigation.Defaults, this._core.options);
16328
16329		// register event handlers
16330		this.$element.on(this._handlers);
16331	};
16332
16333	/**
16334	 * Default options.
16335	 * @public
16336	 * @todo Rename `slideBy` to `navBy`
16337	 */
16338	Navigation.Defaults = {
16339		nav: false,
16340		navText: [
16341			'<span aria-label="' + 'Previous' + '">&#x2039;</span>',
16342			'<span aria-label="' + 'Next' + '">&#x203a;</span>'
16343		],
16344		navSpeed: false,
16345		navElement: 'button type="button" role="presentation"',
16346		navContainer: false,
16347		navContainerClass: 'owl-nav',
16348		navClass: [
16349			'owl-prev',
16350			'owl-next'
16351		],
16352		slideBy: 1,
16353		dotClass: 'owl-dot',
16354		dotsClass: 'owl-dots',
16355		dots: true,
16356		dotsEach: false,
16357		dotsData: false,
16358		dotsSpeed: false,
16359		dotsContainer: false
16360	};
16361
16362	/**
16363	 * Initializes the layout of the plugin and extends the carousel.
16364	 * @protected
16365	 */
16366	Navigation.prototype.initialize = function() {
16367		var override,
16368			settings = this._core.settings;
16369
16370		// create DOM structure for relative navigation
16371		this._controls.$relative = (settings.navContainer ? $(settings.navContainer)
16372			: $('<div>').addClass(settings.navContainerClass).appendTo(this.$element)).addClass('disabled');
16373
16374		this._controls.$previous = $('<' + settings.navElement + '>')
16375			.addClass(settings.navClass[0])
16376			.html(settings.navText[0])
16377			.prependTo(this._controls.$relative)
16378			.on('click', $.proxy(function(e) {
16379				this.prev(settings.navSpeed);
16380			}, this));
16381		this._controls.$next = $('<' + settings.navElement + '>')
16382			.addClass(settings.navClass[1])
16383			.html(settings.navText[1])
16384			.appendTo(this._controls.$relative)
16385			.on('click', $.proxy(function(e) {
16386				this.next(settings.navSpeed);
16387			}, this));
16388
16389		// create DOM structure for absolute navigation
16390		if (!settings.dotsData) {
16391			this._templates = [ $('<button role="button">')
16392				.addClass(settings.dotClass)
16393				.append($('<span>'))
16394				.prop('outerHTML') ];
16395		}
16396
16397		this._controls.$absolute = (settings.dotsContainer ? $(settings.dotsContainer)
16398			: $('<div>').addClass(settings.dotsClass).appendTo(this.$element)).addClass('disabled');
16399
16400		this._controls.$absolute.on('click', 'button', $.proxy(function(e) {
16401			var index = $(e.target).parent().is(this._controls.$absolute)
16402				? $(e.target).index() : $(e.target).parent().index();
16403
16404			e.preventDefault();
16405
16406			this.to(index, settings.dotsSpeed);
16407		}, this));
16408
16409		/*$el.on('focusin', function() {
16410			$(document).off(".carousel");
16411
16412			$(document).on('keydown.carousel', function(e) {
16413				if(e.keyCode == 37) {
16414					$el.trigger('prev.owl')
16415				}
16416				if(e.keyCode == 39) {
16417					$el.trigger('next.owl')
16418				}
16419			});
16420		});*/
16421
16422		// override public methods of the carousel
16423		for (override in this._overrides) {
16424			this._core[override] = $.proxy(this[override], this);
16425		}
16426	};
16427
16428	/**
16429	 * Destroys the plugin.
16430	 * @protected
16431	 */
16432	Navigation.prototype.destroy = function() {
16433		var handler, control, property, override, settings;
16434		settings = this._core.settings;
16435
16436		for (handler in this._handlers) {
16437			this.$element.off(handler, this._handlers[handler]);
16438		}
16439		for (control in this._controls) {
16440			if (control === '$relative' && settings.navContainer) {
16441				this._controls[control].html('');
16442			} else {
16443				this._controls[control].remove();
16444			}
16445		}
16446		for (override in this.overides) {
16447			this._core[override] = this._overrides[override];
16448		}
16449		for (property in Object.getOwnPropertyNames(this)) {
16450			typeof this[property] != 'function' && (this[property] = null);
16451		}
16452	};
16453
16454	/**
16455	 * Updates the internal state.
16456	 * @protected
16457	 */
16458	Navigation.prototype.update = function() {
16459		var i, j, k,
16460			lower = this._core.clones().length / 2,
16461			upper = lower + this._core.items().length,
16462			maximum = this._core.maximum(true),
16463			settings = this._core.settings,
16464			size = settings.center || settings.autoWidth || settings.dotsData
16465				? 1 : settings.dotsEach || settings.items;
16466
16467		if (settings.slideBy !== 'page') {
16468			settings.slideBy = Math.min(settings.slideBy, settings.items);
16469		}
16470
16471		if (settings.dots || settings.slideBy == 'page') {
16472			this._pages = [];
16473
16474			for (i = lower, j = 0, k = 0; i < upper; i++) {
16475				if (j >= size || j === 0) {
16476					this._pages.push({
16477						start: Math.min(maximum, i - lower),
16478						end: i - lower + size - 1
16479					});
16480					if (Math.min(maximum, i - lower) === maximum) {
16481						break;
16482					}
16483					j = 0, ++k;
16484				}
16485				j += this._core.mergers(this._core.relative(i));
16486			}
16487		}
16488	};
16489
16490	/**
16491	 * Draws the user interface.
16492	 * @todo The option `dotsData` wont work.
16493	 * @protected
16494	 */
16495	Navigation.prototype.draw = function() {
16496		var difference,
16497			settings = this._core.settings,
16498			disabled = this._core.items().length <= settings.items,
16499			index = this._core.relative(this._core.current()),
16500			loop = settings.loop || settings.rewind;
16501
16502		this._controls.$relative.toggleClass('disabled', !settings.nav || disabled);
16503
16504		if (settings.nav) {
16505			this._controls.$previous.toggleClass('disabled', !loop && index <= this._core.minimum(true));
16506			this._controls.$next.toggleClass('disabled', !loop && index >= this._core.maximum(true));
16507		}
16508
16509		this._controls.$absolute.toggleClass('disabled', !settings.dots || disabled);
16510
16511		if (settings.dots) {
16512			difference = this._pages.length - this._controls.$absolute.children().length;
16513
16514			if (settings.dotsData && difference !== 0) {
16515				this._controls.$absolute.html(this._templates.join(''));
16516			} else if (difference > 0) {
16517				this._controls.$absolute.append(new Array(difference + 1).join(this._templates[0]));
16518			} else if (difference < 0) {
16519				this._controls.$absolute.children().slice(difference).remove();
16520			}
16521
16522			this._controls.$absolute.find('.active').removeClass('active');
16523			this._controls.$absolute.children().eq($.inArray(this.current(), this._pages)).addClass('active');
16524		}
16525	};
16526
16527	/**
16528	 * Extends event data.
16529	 * @protected
16530	 * @param {Event} event - The event object which gets thrown.
16531	 */
16532	Navigation.prototype.onTrigger = function(event) {
16533		var settings = this._core.settings;
16534
16535		event.page = {
16536			index: $.inArray(this.current(), this._pages),
16537			count: this._pages.length,
16538			size: settings && (settings.center || settings.autoWidth || settings.dotsData
16539				? 1 : settings.dotsEach || settings.items)
16540		};
16541	};
16542
16543	/**
16544	 * Gets the current page position of the carousel.
16545	 * @protected
16546	 * @returns {Number}
16547	 */
16548	Navigation.prototype.current = function() {
16549		var current = this._core.relative(this._core.current());
16550		return $.grep(this._pages, $.proxy(function(page, index) {
16551			return page.start <= current && page.end >= current;
16552		}, this)).pop();
16553	};
16554
16555	/**
16556	 * Gets the current succesor/predecessor position.
16557	 * @protected
16558	 * @returns {Number}
16559	 */
16560	Navigation.prototype.getPosition = function(successor) {
16561		var position, length,
16562			settings = this._core.settings;
16563
16564		if (settings.slideBy == 'page') {
16565			position = $.inArray(this.current(), this._pages);
16566			length = this._pages.length;
16567			successor ? ++position : --position;
16568			position = this._pages[((position % length) + length) % length].start;
16569		} else {
16570			position = this._core.relative(this._core.current());
16571			length = this._core.items().length;
16572			successor ? position += settings.slideBy : position -= settings.slideBy;
16573		}
16574
16575		return position;
16576	};
16577
16578	/**
16579	 * Slides to the next item or page.
16580	 * @public
16581	 * @param {Number} [speed=false] - The time in milliseconds for the transition.
16582	 */
16583	Navigation.prototype.next = function(speed) {
16584		$.proxy(this._overrides.to, this._core)(this.getPosition(true), speed);
16585	};
16586
16587	/**
16588	 * Slides to the previous item or page.
16589	 * @public
16590	 * @param {Number} [speed=false] - The time in milliseconds for the transition.
16591	 */
16592	Navigation.prototype.prev = function(speed) {
16593		$.proxy(this._overrides.to, this._core)(this.getPosition(false), speed);
16594	};
16595
16596	/**
16597	 * Slides to the specified item or page.
16598	 * @public
16599	 * @param {Number} position - The position of the item or page.
16600	 * @param {Number} [speed] - The time in milliseconds for the transition.
16601	 * @param {Boolean} [standard=false] - Whether to use the standard behaviour or not.
16602	 */
16603	Navigation.prototype.to = function(position, speed, standard) {
16604		var length;
16605
16606		if (!standard && this._pages.length) {
16607			length = this._pages.length;
16608			$.proxy(this._overrides.to, this._core)(this._pages[((position % length) + length) % length].start, speed);
16609		} else {
16610			$.proxy(this._overrides.to, this._core)(position, speed);
16611		}
16612	};
16613
16614	$.fn.owlCarousel.Constructor.Plugins.Navigation = Navigation;
16615
16616})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document);
16617
16618/**
16619 * Hash Plugin
16620 * @version 2.3.4
16621 * @author Artus Kolanowski
16622 * @author David Deutsch
16623 * @license The MIT License (MIT)
16624 */
16625;(function($, window, document, undefined) {
16626	'use strict';
16627
16628	/**
16629	 * Creates the hash plugin.
16630	 * @class The Hash Plugin
16631	 * @param {Owl} carousel - The Owl Carousel
16632	 */
16633	var Hash = function(carousel) {
16634		/**
16635		 * Reference to the core.
16636		 * @protected
16637		 * @type {Owl}
16638		 */
16639		this._core = carousel;
16640
16641		/**
16642		 * Hash index for the items.
16643		 * @protected
16644		 * @type {Object}
16645		 */
16646		this._hashes = {};
16647
16648		/**
16649		 * The carousel element.
16650		 * @type {jQuery}
16651		 */
16652		this.$element = this._core.$element;
16653
16654		/**
16655		 * All event handlers.
16656		 * @protected
16657		 * @type {Object}
16658		 */
16659		this._handlers = {
16660			'initialized.owl.carousel': $.proxy(function(e) {
16661				if (e.namespace && this._core.settings.startPosition === 'URLHash') {
16662					$(window).trigger('hashchange.owl.navigation');
16663				}
16664			}, this),
16665			'prepared.owl.carousel': $.proxy(function(e) {
16666				if (e.namespace) {
16667					var hash = $(e.content).find('[data-hash]').addBack('[data-hash]').attr('data-hash');
16668
16669					if (!hash) {
16670						return;
16671					}
16672
16673					this._hashes[hash] = e.content;
16674				}
16675			}, this),
16676			'changed.owl.carousel': $.proxy(function(e) {
16677				if (e.namespace && e.property.name === 'position') {
16678					var current = this._core.items(this._core.relative(this._core.current())),
16679						hash = $.map(this._hashes, function(item, hash) {
16680							return item === current ? hash : null;
16681						}).join();
16682
16683					if (!hash || window.location.hash.slice(1) === hash) {
16684						return;
16685					}
16686
16687					window.location.hash = hash;
16688				}
16689			}, this)
16690		};
16691
16692		// set default options
16693		this._core.options = $.extend({}, Hash.Defaults, this._core.options);
16694
16695		// register the event handlers
16696		this.$element.on(this._handlers);
16697
16698		// register event listener for hash navigation
16699		$(window).on('hashchange.owl.navigation', $.proxy(function(e) {
16700			var hash = window.location.hash.substring(1),
16701				items = this._core.$stage.children(),
16702				position = this._hashes[hash] && items.index(this._hashes[hash]);
16703
16704			if (position === undefined || position === this._core.current()) {
16705				return;
16706			}
16707
16708			this._core.to(this._core.relative(position), false, true);
16709		}, this));
16710	};
16711
16712	/**
16713	 * Default options.
16714	 * @public
16715	 */
16716	Hash.Defaults = {
16717		URLhashListener: false
16718	};
16719
16720	/**
16721	 * Destroys the plugin.
16722	 * @public
16723	 */
16724	Hash.prototype.destroy = function() {
16725		var handler, property;
16726
16727		$(window).off('hashchange.owl.navigation');
16728
16729		for (handler in this._handlers) {
16730			this._core.$element.off(handler, this._handlers[handler]);
16731		}
16732		for (property in Object.getOwnPropertyNames(this)) {
16733			typeof this[property] != 'function' && (this[property] = null);
16734		}
16735	};
16736
16737	$.fn.owlCarousel.Constructor.Plugins.Hash = Hash;
16738
16739})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document);
16740
16741/**
16742 * Support Plugin
16743 *
16744 * @version 2.3.4
16745 * @author Vivid Planet Software GmbH
16746 * @author Artus Kolanowski
16747 * @author David Deutsch
16748 * @license The MIT License (MIT)
16749 */
16750;(function($, window, document, undefined) {
16751
16752	var style = $('<support>').get(0).style,
16753		prefixes = 'Webkit Moz O ms'.split(' '),
16754		events = {
16755			transition: {
16756				end: {
16757					WebkitTransition: 'webkitTransitionEnd',
16758					MozTransition: 'transitionend',
16759					OTransition: 'oTransitionEnd',
16760					transition: 'transitionend'
16761				}
16762			},
16763			animation: {
16764				end: {
16765					WebkitAnimation: 'webkitAnimationEnd',
16766					MozAnimation: 'animationend',
16767					OAnimation: 'oAnimationEnd',
16768					animation: 'animationend'
16769				}
16770			}
16771		},
16772		tests = {
16773			csstransforms: function() {
16774				return !!test('transform');
16775			},
16776			csstransforms3d: function() {
16777				return !!test('perspective');
16778			},
16779			csstransitions: function() {
16780				return !!test('transition');
16781			},
16782			cssanimations: function() {
16783				return !!test('animation');
16784			}
16785		};
16786
16787	function test(property, prefixed) {
16788		var result = false,
16789			upper = property.charAt(0).toUpperCase() + property.slice(1);
16790
16791		$.each((property + ' ' + prefixes.join(upper + ' ') + upper).split(' '), function(i, property) {
16792			if (style[property] !== undefined) {
16793				result = prefixed ? property : true;
16794				return false;
16795			}
16796		});
16797
16798		return result;
16799	}
16800
16801	function prefixed(property) {
16802		return test(property, true);
16803	}
16804
16805	if (tests.csstransitions()) {
16806		/* jshint -W053 */
16807		$.support.transition = new String(prefixed('transition'))
16808		$.support.transition.end = events.transition.end[ $.support.transition ];
16809	}
16810
16811	if (tests.cssanimations()) {
16812		/* jshint -W053 */
16813		$.support.animation = new String(prefixed('animation'))
16814		$.support.animation.end = events.animation.end[ $.support.animation ];
16815	}
16816
16817	if (tests.csstransforms()) {
16818		/* jshint -W053 */
16819		$.support.transform = new String(prefixed('transform'));
16820		$.support.transform3d = tests.csstransforms3d();
16821	}
16822
16823})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document);
16824
16825/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! jquery */ "../node_modules/jquery/dist/jquery.js"), __webpack_require__(/*! jquery */ "../node_modules/jquery/dist/jquery.js")))
16826
16827/***/ }),
16828
vendor: 1,896 bytes, lines 16829-16882
16829/***/ "../node_modules/set-function-length/index.js":
16830/*!****************************************************!*\
16831  !*** ../node_modules/set-function-length/index.js ***!
16832  \****************************************************/
16833/*! no static exports found */
16834/***/ (function(module, exports, __webpack_require__) {
16835
16836"use strict";
16837
16838
16839var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "../node_modules/get-intrinsic/index.js");
16840var define = __webpack_require__(/*! define-data-property */ "../node_modules/define-data-property/index.js");
16841var hasDescriptors = __webpack_require__(/*! has-property-descriptors */ "../node_modules/has-property-descriptors/index.js")();
16842var gOPD = __webpack_require__(/*! gopd */ "../node_modules/gopd/index.js");
16843
16844var $TypeError = __webpack_require__(/*! es-errors/type */ "../node_modules/es-errors/type.js");
16845var $floor = GetIntrinsic('%Math.floor%');
16846
16847/** @type {import('.')} */
16848module.exports = function setFunctionLength(fn, length) {
16849	if (typeof fn !== 'function') {
16850		throw new $TypeError('`fn` is not a function');
16851	}
16852	if (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) {
16853		throw new $TypeError('`length` must be a positive 32-bit integer');
16854	}
16855
16856	var loose = arguments.length > 2 && !!arguments[2];
16857
16858	var functionLengthIsConfigurable = true;
16859	var functionLengthIsWritable = true;
16860	if ('length' in fn && gOPD) {
16861		var desc = gOPD(fn, 'length');
16862		if (desc && !desc.configurable) {
16863			functionLengthIsConfigurable = false;
16864		}
16865		if (desc && !desc.writable) {
16866			functionLengthIsWritable = false;
16867		}
16868	}
16869
16870	if (functionLengthIsConfigurable || functionLengthIsWritable || !loose) {
16871		if (hasDescriptors) {
16872			define(/** @type {Parameters<define>[0]} */ (fn), 'length', length, true, true);
16873		} else {
16874			define(/** @type {Parameters<define>[0]} */ (fn), 'length', length);
16875		}
16876	}
16877	return fn;
16878};
16879
16880
16881/***/ }),
16882
vendor: 4,475 bytes, lines 16883-17023
16883/***/ "../node_modules/side-channel/index.js":
16884/*!*********************************************!*\
16885  !*** ../node_modules/side-channel/index.js ***!
16886  \*********************************************/
16887/*! no static exports found */
16888/***/ (function(module, exports, __webpack_require__) {
16889
16890"use strict";
16891
16892
16893var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "../node_modules/get-intrinsic/index.js");
16894var callBound = __webpack_require__(/*! call-bind/callBound */ "../node_modules/call-bind/callBound.js");
16895var inspect = __webpack_require__(/*! object-inspect */ "../node_modules/object-inspect/index.js");
16896
16897var $TypeError = __webpack_require__(/*! es-errors/type */ "../node_modules/es-errors/type.js");
16898var $WeakMap = GetIntrinsic('%WeakMap%', true);
16899var $Map = GetIntrinsic('%Map%', true);
16900
16901var $weakMapGet = callBound('WeakMap.prototype.get', true);
16902var $weakMapSet = callBound('WeakMap.prototype.set', true);
16903var $weakMapHas = callBound('WeakMap.prototype.has', true);
16904var $mapGet = callBound('Map.prototype.get', true);
16905var $mapSet = callBound('Map.prototype.set', true);
16906var $mapHas = callBound('Map.prototype.has', true);
16907
16908/*
16909* This function traverses the list returning the node corresponding to the given key.
16910*
16911* That node is also moved to the head of the list, so that if it's accessed again we don't need to traverse the whole list. By doing so, all the recently used nodes can be accessed relatively quickly.
16912*/
16913/** @type {import('.').listGetNode} */
16914var listGetNode = function (list, key) { // eslint-disable-line consistent-return
16915	/** @type {typeof list | NonNullable<(typeof list)['next']>} */
16916	var prev = list;
16917	/** @type {(typeof list)['next']} */
16918	var curr;
16919	for (; (curr = prev.next) !== null; prev = curr) {
16920		if (curr.key === key) {
16921			prev.next = curr.next;
16922			// eslint-disable-next-line no-extra-parens
16923			curr.next = /** @type {NonNullable<typeof list.next>} */ (list.next);
16924			list.next = curr; // eslint-disable-line no-param-reassign
16925			return curr;
16926		}
16927	}
16928};
16929
16930/** @type {import('.').listGet} */
16931var listGet = function (objects, key) {
16932	var node = listGetNode(objects, key);
16933	return node && node.value;
16934};
16935/** @type {import('.').listSet} */
16936var listSet = function (objects, key, value) {
16937	var node = listGetNode(objects, key);
16938	if (node) {
16939		node.value = value;
16940	} else {
16941		// Prepend the new node to the beginning of the list
16942		objects.next = /** @type {import('.').ListNode<typeof value>} */ ({ // eslint-disable-line no-param-reassign, no-extra-parens
16943			key: key,
16944			next: objects.next,
16945			value: value
16946		});
16947	}
16948};
16949/** @type {import('.').listHas} */
16950var listHas = function (objects, key) {
16951	return !!listGetNode(objects, key);
16952};
16953
16954/** @type {import('.')} */
16955module.exports = function getSideChannel() {
16956	/** @type {WeakMap<object, unknown>} */ var $wm;
16957	/** @type {Map<object, unknown>} */ var $m;
16958	/** @type {import('.').RootNode<unknown>} */ var $o;
16959
16960	/** @type {import('.').Channel} */
16961	var channel = {
16962		assert: function (key) {
16963			if (!channel.has(key)) {
16964				throw new $TypeError('Side channel does not contain ' + inspect(key));
16965			}
16966		},
16967		get: function (key) { // eslint-disable-line consistent-return
16968			if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {
16969				if ($wm) {
16970					return $weakMapGet($wm, key);
16971				}
16972			} else if ($Map) {
16973				if ($m) {
16974					return $mapGet($m, key);
16975				}
16976			} else {
16977				if ($o) { // eslint-disable-line no-lonely-if
16978					return listGet($o, key);
16979				}
16980			}
16981		},
16982		has: function (key) {
16983			if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {
16984				if ($wm) {
16985					return $weakMapHas($wm, key);
16986				}
16987			} else if ($Map) {
16988				if ($m) {
16989					return $mapHas($m, key);
16990				}
16991			} else {
16992				if ($o) { // eslint-disable-line no-lonely-if
16993					return listHas($o, key);
16994				}
16995			}
16996			return false;
16997		},
16998		set: function (key, value) {
16999			if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {
17000				if (!$wm) {
17001					$wm = new $WeakMap();
17002				}
17003				$weakMapSet($wm, key, value);
17004			} else if ($Map) {
17005				if (!$m) {
17006					$m = new $Map();
17007				}
17008				$mapSet($m, key, value);
17009			} else {
17010				if (!$o) {
17011					// Initialize the linked list as an empty node, so that we don't have to special-case handling of the first node: we can always refer to it as (previous node).next, instead of something like (list).head
17012					$o = { key: {}, next: null };
17013				}
17014				listSet($o, key, value);
17015			}
17016		}
17017	};
17018	return channel;
17019};
17020
17021
17022/***/ }),
17023
vendor: 829 bytes, lines 17024-17058
17024/***/ "../node_modules/url/node_modules/qs/lib/formats.js":
17025/*!**********************************************************!*\
17026  !*** ../node_modules/url/node_modules/qs/lib/formats.js ***!
17027  \**********************************************************/
17028/*! no static exports found */
17029/***/ (function(module, exports, __webpack_require__) {
17030
17031"use strict";
17032
17033
17034var replace = String.prototype.replace;
17035var percentTwenties = /%20/g;
17036
17037var Format = {
17038    RFC1738: 'RFC1738',
17039    RFC3986: 'RFC3986'
17040};
17041
17042module.exports = {
17043    'default': Format.RFC3986,
17044    formatters: {
17045        RFC1738: function (value) {
17046            return replace.call(value, percentTwenties, '+');
17047        },
17048        RFC3986: function (value) {
17049            return String(value);
17050        }
17051    },
17052    RFC1738: Format.RFC1738,
17053    RFC3986: Format.RFC3986
17054};
17055
17056
17057/***/ }),
17058
vendor: 766 bytes, lines 17059-17081
17059/***/ "../node_modules/url/node_modules/qs/lib/index.js":
17060/*!********************************************************!*\
17061  !*** ../node_modules/url/node_modules/qs/lib/index.js ***!
17062  \********************************************************/
17063/*! no static exports found */
17064/***/ (function(module, exports, __webpack_require__) {
17065
17066"use strict";
17067
17068
17069var stringify = __webpack_require__(/*! ./stringify */ "../node_modules/url/node_modules/qs/lib/stringify.js");
17070var parse = __webpack_require__(/*! ./parse */ "../node_modules/url/node_modules/qs/lib/parse.js");
17071var formats = __webpack_require__(/*! ./formats */ "../node_modules/url/node_modules/qs/lib/formats.js");
17072
17073module.exports = {
17074    formats: formats,
17075    parse: parse,
17076    stringify: stringify
17077};
17078
17079
17080/***/ }),
17081
vendor: 11,234 bytes, lines 17082-17381
17082/***/ "../node_modules/url/node_modules/qs/lib/parse.js":
17083/*!********************************************************!*\
17084  !*** ../node_modules/url/node_modules/qs/lib/parse.js ***!
17085  \********************************************************/
17086/*! no static exports found */
17087/***/ (function(module, exports, __webpack_require__) {
17088
17089"use strict";
17090
17091
17092var utils = __webpack_require__(/*! ./utils */ "../node_modules/url/node_modules/qs/lib/utils.js");
17093
17094var has = Object.prototype.hasOwnProperty;
17095var isArray = Array.isArray;
17096
17097var defaults = {
17098    allowDots: false,
17099    allowEmptyArrays: false,
17100    allowPrototypes: false,
17101    allowSparse: false,
17102    arrayLimit: 20,
17103    charset: 'utf-8',
17104    charsetSentinel: false,
17105    comma: false,
17106    decodeDotInKeys: true,
17107    decoder: utils.decode,
17108    delimiter: '&',
17109    depth: 5,
17110    duplicates: 'combine',
17111    ignoreQueryPrefix: false,
17112    interpretNumericEntities: false,
17113    parameterLimit: 1000,
17114    parseArrays: true,
17115    plainObjects: false,
17116    strictNullHandling: false
17117};
17118
17119var interpretNumericEntities = function (str) {
17120    return str.replace(/&#(\d+);/g, function ($0, numberStr) {
17121        return String.fromCharCode(parseInt(numberStr, 10));
17122    });
17123};
17124
17125var parseArrayValue = function (val, options) {
17126    if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {
17127        return val.split(',');
17128    }
17129
17130    return val;
17131};
17132
17133// This is what browsers will submit when the ✓ character occurs in an
17134// application/x-www-form-urlencoded body and the encoding of the page containing
17135// the form is iso-8859-1, or when the submitted form has an accept-charset
17136// attribute of iso-8859-1. Presumably also with other charsets that do not contain
17137// the ✓ character, such as us-ascii.
17138var isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('&#10003;')
17139
17140// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.
17141var charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓')
17142
17143var parseValues = function parseQueryStringValues(str, options) {
17144    var obj = { __proto__: null };
17145
17146    var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\?/, '') : str;
17147    var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;
17148    var parts = cleanStr.split(options.delimiter, limit);
17149    var skipIndex = -1; // Keep track of where the utf8 sentinel was found
17150    var i;
17151
17152    var charset = options.charset;
17153    if (options.charsetSentinel) {
17154        for (i = 0; i < parts.length; ++i) {
17155            if (parts[i].indexOf('utf8=') === 0) {
17156                if (parts[i] === charsetSentinel) {
17157                    charset = 'utf-8';
17158                } else if (parts[i] === isoSentinel) {
17159                    charset = 'iso-8859-1';
17160                }
17161                skipIndex = i;
17162                i = parts.length; // The eslint settings do not allow break;
17163            }
17164        }
17165    }
17166
17167    for (i = 0; i < parts.length; ++i) {
17168        if (i === skipIndex) {
17169            continue;
17170        }
17171        var part = parts[i];
17172
17173        var bracketEqualsPos = part.indexOf(']=');
17174        var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;
17175
17176        var key, val;
17177        if (pos === -1) {
17178            key = options.decoder(part, defaults.decoder, charset, 'key');
17179            val = options.strictNullHandling ? null : '';
17180        } else {
17181            key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');
17182            val = utils.maybeMap(
17183                parseArrayValue(part.slice(pos + 1), options),
17184                function (encodedVal) {
17185                    return options.decoder(encodedVal, defaults.decoder, charset, 'value');
17186                }
17187            );
17188        }
17189
17190        if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {
17191            val = interpretNumericEntities(val);
17192        }
17193
17194        if (part.indexOf('[]=') > -1) {
17195            val = isArray(val) ? [val] : val;
17196        }
17197
17198        var existing = has.call(obj, key);
17199        if (existing && options.duplicates === 'combine') {
17200            obj[key] = utils.combine(obj[key], val);
17201        } else if (!existing || options.duplicates === 'last') {
17202            obj[key] = val;
17203        }
17204    }
17205
17206    return obj;
17207};
17208
17209var parseObject = function (chain, val, options, valuesParsed) {
17210    var leaf = valuesParsed ? val : parseArrayValue(val, options);
17211
17212    for (var i = chain.length - 1; i >= 0; --i) {
17213        var obj;
17214        var root = chain[i];
17215
17216        if (root === '[]' && options.parseArrays) {
17217            obj = options.allowEmptyArrays && leaf === '' ? [] : [].concat(leaf);
17218        } else {
17219            obj = options.plainObjects ? Object.create(null) : {};
17220            var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;
17221            var decodedRoot = options.decodeDotInKeys ? cleanRoot.replace(/%2E/g, '.') : cleanRoot;
17222            var index = parseInt(decodedRoot, 10);
17223            if (!options.parseArrays && decodedRoot === '') {
17224                obj = { 0: leaf };
17225            } else if (
17226                !isNaN(index)
17227                && root !== decodedRoot
17228                && String(index) === decodedRoot
17229                && index >= 0
17230                && (options.parseArrays && index <= options.arrayLimit)
17231            ) {
17232                obj = [];
17233                obj[index] = leaf;
17234            } else if (decodedRoot !== '__proto__') {
17235                obj[decodedRoot] = leaf;
17236            }
17237        }
17238
17239        leaf = obj;
17240    }
17241
17242    return leaf;
17243};
17244
17245var parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {
17246    if (!givenKey) {
17247        return;
17248    }
17249
17250    // Transform dot notation to bracket notation
17251    var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey;
17252
17253    // The regex chunks
17254
17255    var brackets = /(\[[^[\]]*])/;
17256    var child = /(\[[^[\]]*])/g;
17257
17258    // Get the parent
17259
17260    var segment = options.depth > 0 && brackets.exec(key);
17261    var parent = segment ? key.slice(0, segment.index) : key;
17262
17263    // Stash the parent if it exists
17264
17265    var keys = [];
17266    if (parent) {
17267        // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties
17268        if (!options.plainObjects && has.call(Object.prototype, parent)) {
17269            if (!options.allowPrototypes) {
17270                return;
17271            }
17272        }
17273
17274        keys.push(parent);
17275    }
17276
17277    // Loop through children appending to the array until we hit depth
17278
17279    var i = 0;
17280    while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) {
17281        i += 1;
17282        if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {
17283            if (!options.allowPrototypes) {
17284                return;
17285            }
17286        }
17287        keys.push(segment[1]);
17288    }
17289
17290    // If there's a remainder, just add whatever is left
17291
17292    if (segment) {
17293        keys.push('[' + key.slice(segment.index) + ']');
17294    }
17295
17296    return parseObject(keys, val, options, valuesParsed);
17297};
17298
17299var normalizeParseOptions = function normalizeParseOptions(opts) {
17300    if (!opts) {
17301        return defaults;
17302    }
17303
17304    if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {
17305        throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');
17306    }
17307
17308    if (typeof opts.decodeDotInKeys !== 'undefined' && typeof opts.decodeDotInKeys !== 'boolean') {
17309        throw new TypeError('`decodeDotInKeys` option can only be `true` or `false`, when provided');
17310    }
17311
17312    if (opts.decoder !== null && typeof opts.decoder !== 'undefined' && typeof opts.decoder !== 'function') {
17313        throw new TypeError('Decoder has to be a function.');
17314    }
17315
17316    if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {
17317        throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');
17318    }
17319    var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;
17320
17321    var duplicates = typeof opts.duplicates === 'undefined' ? defaults.duplicates : opts.duplicates;
17322
17323    if (duplicates !== 'combine' && duplicates !== 'first' && duplicates !== 'last') {
17324        throw new TypeError('The duplicates option must be either combine, first, or last');
17325    }
17326
17327    var allowDots = typeof opts.allowDots === 'undefined' ? opts.decodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;
17328
17329    return {
17330        allowDots: allowDots,
17331        allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,
17332        allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,
17333        allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse,
17334        arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,
17335        charset: charset,
17336        charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,
17337        comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,
17338        decodeDotInKeys: typeof opts.decodeDotInKeys === 'boolean' ? opts.decodeDotInKeys : defaults.decodeDotInKeys,
17339        decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,
17340        delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,
17341        // eslint-disable-next-line no-implicit-coercion, no-extra-parens
17342        depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,
17343        duplicates: duplicates,
17344        ignoreQueryPrefix: opts.ignoreQueryPrefix === true,
17345        interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,
17346        parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,
17347        parseArrays: opts.parseArrays !== false,
17348        plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,
17349        strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling
17350    };
17351};
17352
17353module.exports = function (str, opts) {
17354    var options = normalizeParseOptions(opts);
17355
17356    if (str === '' || str === null || typeof str === 'undefined') {
17357        return options.plainObjects ? Object.create(null) : {};
17358    }
17359
17360    var tempObj = typeof str === 'string' ? parseValues(str, options) : str;
17361    var obj = options.plainObjects ? Object.create(null) : {};
17362
17363    // Iterate over the keys and setup the new object
17364
17365    var keys = Object.keys(tempObj);
17366    for (var i = 0; i < keys.length; ++i) {
17367        var key = keys[i];
17368        var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');
17369        obj = utils.merge(obj, newObj, options);
17370    }
17371
17372    if (options.allowSparse === true) {
17373        return obj;
17374    }
17375
17376    return utils.compact(obj);
17377};
17378
17379
17380/***/ }),
17381
vendor: 11,887 bytes, lines 17382-17744
17382/***/ "../node_modules/url/node_modules/qs/lib/stringify.js":
17383/*!************************************************************!*\
17384  !*** ../node_modules/url/node_modules/qs/lib/stringify.js ***!
17385  \************************************************************/
17386/*! no static exports found */
17387/***/ (function(module, exports, __webpack_require__) {
17388
17389"use strict";
17390
17391
17392var getSideChannel = __webpack_require__(/*! side-channel */ "../node_modules/side-channel/index.js");
17393var utils = __webpack_require__(/*! ./utils */ "../node_modules/url/node_modules/qs/lib/utils.js");
17394var formats = __webpack_require__(/*! ./formats */ "../node_modules/url/node_modules/qs/lib/formats.js");
17395var has = Object.prototype.hasOwnProperty;
17396
17397var arrayPrefixGenerators = {
17398    brackets: function brackets(prefix) {
17399        return prefix + '[]';
17400    },
17401    comma: 'comma',
17402    indices: function indices(prefix, key) {
17403        return prefix + '[' + key + ']';
17404    },
17405    repeat: function repeat(prefix) {
17406        return prefix;
17407    }
17408};
17409
17410var isArray = Array.isArray;
17411var push = Array.prototype.push;
17412var pushToArray = function (arr, valueOrArray) {
17413    push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);
17414};
17415
17416var toISO = Date.prototype.toISOString;
17417
17418var defaultFormat = formats['default'];
17419var defaults = {
17420    addQueryPrefix: false,
17421    allowDots: false,
17422    allowEmptyArrays: false,
17423    arrayFormat: 'indices',
17424    charset: 'utf-8',
17425    charsetSentinel: false,
17426    delimiter: '&',
17427    encode: true,
17428    encodeDotInKeys: false,
17429    encoder: utils.encode,
17430    encodeValuesOnly: false,
17431    format: defaultFormat,
17432    formatter: formats.formatters[defaultFormat],
17433    // deprecated
17434    indices: false,
17435    serializeDate: function serializeDate(date) {
17436        return toISO.call(date);
17437    },
17438    skipNulls: false,
17439    strictNullHandling: false
17440};
17441
17442var isNonNullishPrimitive = function isNonNullishPrimitive(v) {
17443    return typeof v === 'string'
17444        || typeof v === 'number'
17445        || typeof v === 'boolean'
17446        || typeof v === 'symbol'
17447        || typeof v === 'bigint';
17448};
17449
17450var sentinel = {};
17451
17452var stringify = function stringify(
17453    object,
17454    prefix,
17455    generateArrayPrefix,
17456    commaRoundTrip,
17457    allowEmptyArrays,
17458    strictNullHandling,
17459    skipNulls,
17460    encodeDotInKeys,
17461    encoder,
17462    filter,
17463    sort,
17464    allowDots,
17465    serializeDate,
17466    format,
17467    formatter,
17468    encodeValuesOnly,
17469    charset,
17470    sideChannel
17471) {
17472    var obj = object;
17473
17474    var tmpSc = sideChannel;
17475    var step = 0;
17476    var findFlag = false;
17477    while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) {
17478        // Where object last appeared in the ref tree
17479        var pos = tmpSc.get(object);
17480        step += 1;
17481        if (typeof pos !== 'undefined') {
17482            if (pos === step) {
17483                throw new RangeError('Cyclic object value');
17484            } else {
17485                findFlag = true; // Break while
17486            }
17487        }
17488        if (typeof tmpSc.get(sentinel) === 'undefined') {
17489            step = 0;
17490        }
17491    }
17492
17493    if (typeof filter === 'function') {
17494        obj = filter(prefix, obj);
17495    } else if (obj instanceof Date) {
17496        obj = serializeDate(obj);
17497    } else if (generateArrayPrefix === 'comma' && isArray(obj)) {
17498        obj = utils.maybeMap(obj, function (value) {
17499            if (value instanceof Date) {
17500                return serializeDate(value);
17501            }
17502            return value;
17503        });
17504    }
17505
17506    if (obj === null) {
17507        if (strictNullHandling) {
17508            return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix;
17509        }
17510
17511        obj = '';
17512    }
17513
17514    if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {
17515        if (encoder) {
17516            var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format);
17517            return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))];
17518        }
17519        return [formatter(prefix) + '=' + formatter(String(obj))];
17520    }
17521
17522    var values = [];
17523
17524    if (typeof obj === 'undefined') {
17525        return values;
17526    }
17527
17528    var objKeys;
17529    if (generateArrayPrefix === 'comma' && isArray(obj)) {
17530        // we need to join elements in
17531        if (encodeValuesOnly && encoder) {
17532            obj = utils.maybeMap(obj, encoder);
17533        }
17534        objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];
17535    } else if (isArray(filter)) {
17536        objKeys = filter;
17537    } else {
17538        var keys = Object.keys(obj);
17539        objKeys = sort ? keys.sort(sort) : keys;
17540    }
17541
17542    var encodedPrefix = encodeDotInKeys ? prefix.replace(/\./g, '%2E') : prefix;
17543
17544    var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encodedPrefix + '[]' : encodedPrefix;
17545
17546    if (allowEmptyArrays && isArray(obj) && obj.length === 0) {
17547        return adjustedPrefix + '[]';
17548    }
17549
17550    for (var j = 0; j < objKeys.length; ++j) {
17551        var key = objKeys[j];
17552        var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];
17553
17554        if (skipNulls && value === null) {
17555            continue;
17556        }
17557
17558        var encodedKey = allowDots && encodeDotInKeys ? key.replace(/\./g, '%2E') : key;
17559        var keyPrefix = isArray(obj)
17560            ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, encodedKey) : adjustedPrefix
17561            : adjustedPrefix + (allowDots ? '.' + encodedKey : '[' + encodedKey + ']');
17562
17563        sideChannel.set(object, step);
17564        var valueSideChannel = getSideChannel();
17565        valueSideChannel.set(sentinel, sideChannel);
17566        pushToArray(values, stringify(
17567            value,
17568            keyPrefix,
17569            generateArrayPrefix,
17570            commaRoundTrip,
17571            allowEmptyArrays,
17572            strictNullHandling,
17573            skipNulls,
17574            encodeDotInKeys,
17575            generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder,
17576            filter,
17577            sort,
17578            allowDots,
17579            serializeDate,
17580            format,
17581            formatter,
17582            encodeValuesOnly,
17583            charset,
17584            valueSideChannel
17585        ));
17586    }
17587
17588    return values;
17589};
17590
17591var normalizeStringifyOptions = function normalizeStringifyOptions(opts) {
17592    if (!opts) {
17593        return defaults;
17594    }
17595
17596    if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {
17597        throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');
17598    }
17599
17600    if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {
17601        throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');
17602    }
17603
17604    if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {
17605        throw new TypeError('Encoder has to be a function.');
17606    }
17607
17608    var charset = opts.charset || defaults.charset;
17609    if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {
17610        throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');
17611    }
17612
17613    var format = formats['default'];
17614    if (typeof opts.format !== 'undefined') {
17615        if (!has.call(formats.formatters, opts.format)) {
17616            throw new TypeError('Unknown format option provided.');
17617        }
17618        format = opts.format;
17619    }
17620    var formatter = formats.formatters[format];
17621
17622    var filter = defaults.filter;
17623    if (typeof opts.filter === 'function' || isArray(opts.filter)) {
17624        filter = opts.filter;
17625    }
17626
17627    var arrayFormat;
17628    if (opts.arrayFormat in arrayPrefixGenerators) {
17629        arrayFormat = opts.arrayFormat;
17630    } else if ('indices' in opts) {
17631        arrayFormat = opts.indices ? 'indices' : 'repeat';
17632    } else {
17633        arrayFormat = defaults.arrayFormat;
17634    }
17635
17636    if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {
17637        throw new TypeError('`commaRoundTrip` must be a boolean, or absent');
17638    }
17639
17640    var allowDots = typeof opts.allowDots === 'undefined' ? opts.encodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;
17641
17642    return {
17643        addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,
17644        allowDots: allowDots,
17645        allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,
17646        arrayFormat: arrayFormat,
17647        charset: charset,
17648        charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,
17649        commaRoundTrip: opts.commaRoundTrip,
17650        delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,
17651        encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,
17652        encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,
17653        encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,
17654        encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,
17655        filter: filter,
17656        format: format,
17657        formatter: formatter,
17658        serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,
17659        skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,
17660        sort: typeof opts.sort === 'function' ? opts.sort : null,
17661        strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling
17662    };
17663};
17664
17665module.exports = function (object, opts) {
17666    var obj = object;
17667    var options = normalizeStringifyOptions(opts);
17668
17669    var objKeys;
17670    var filter;
17671
17672    if (typeof options.filter === 'function') {
17673        filter = options.filter;
17674        obj = filter('', obj);
17675    } else if (isArray(options.filter)) {
17676        filter = options.filter;
17677        objKeys = filter;
17678    }
17679
17680    var keys = [];
17681
17682    if (typeof obj !== 'object' || obj === null) {
17683        return '';
17684    }
17685
17686    var generateArrayPrefix = arrayPrefixGenerators[options.arrayFormat];
17687    var commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;
17688
17689    if (!objKeys) {
17690        objKeys = Object.keys(obj);
17691    }
17692
17693    if (options.sort) {
17694        objKeys.sort(options.sort);
17695    }
17696
17697    var sideChannel = getSideChannel();
17698    for (var i = 0; i < objKeys.length; ++i) {
17699        var key = objKeys[i];
17700
17701        if (options.skipNulls && obj[key] === null) {
17702            continue;
17703        }
17704        pushToArray(keys, stringify(
17705            obj[key],
17706            key,
17707            generateArrayPrefix,
17708            commaRoundTrip,
17709            options.allowEmptyArrays,
17710            options.strictNullHandling,
17711            options.skipNulls,
17712            options.encodeDotInKeys,
17713            options.encode ? options.encoder : null,
17714            options.filter,
17715            options.sort,
17716            options.allowDots,
17717            options.serializeDate,
17718            options.format,
17719            options.formatter,
17720            options.encodeValuesOnly,
17721            options.charset,
17722            sideChannel
17723        ));
17724    }
17725
17726    var joined = keys.join(options.delimiter);
17727    var prefix = options.addQueryPrefix === true ? '?' : '';
17728
17729    if (options.charsetSentinel) {
17730        if (options.charset === 'iso-8859-1') {
17731            // encodeURIComponent('&#10003;'), the "numeric entity" representation of a checkmark
17732            prefix += 'utf8=%26%2310003%3B&';
17733        } else {
17734            // encodeURIComponent('✓')
17735            prefix += 'utf8=%E2%9C%93&';
17736        }
17737    }
17738
17739    return joined.length > 0 ? prefix + joined : '';
17740};
17741
17742
17743/***/ }),
17744
vendor: 7,238 bytes, lines 17745-18008
17745/***/ "../node_modules/url/node_modules/qs/lib/utils.js":
17746/*!********************************************************!*\
17747  !*** ../node_modules/url/node_modules/qs/lib/utils.js ***!
17748  \********************************************************/
17749/*! no static exports found */
17750/***/ (function(module, exports, __webpack_require__) {
17751
17752"use strict";
17753
17754
17755var formats = __webpack_require__(/*! ./formats */ "../node_modules/url/node_modules/qs/lib/formats.js");
17756
17757var has = Object.prototype.hasOwnProperty;
17758var isArray = Array.isArray;
17759
17760var hexTable = (function () {
17761    var array = [];
17762    for (var i = 0; i < 256; ++i) {
17763        array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());
17764    }
17765
17766    return array;
17767}());
17768
17769var compactQueue = function compactQueue(queue) {
17770    while (queue.length > 1) {
17771        var item = queue.pop();
17772        var obj = item.obj[item.prop];
17773
17774        if (isArray(obj)) {
17775            var compacted = [];
17776
17777            for (var j = 0; j < obj.length; ++j) {
17778                if (typeof obj[j] !== 'undefined') {
17779                    compacted.push(obj[j]);
17780                }
17781            }
17782
17783            item.obj[item.prop] = compacted;
17784        }
17785    }
17786};
17787
17788var arrayToObject = function arrayToObject(source, options) {
17789    var obj = options && options.plainObjects ? Object.create(null) : {};
17790    for (var i = 0; i < source.length; ++i) {
17791        if (typeof source[i] !== 'undefined') {
17792            obj[i] = source[i];
17793        }
17794    }
17795
17796    return obj;
17797};
17798
17799var merge = function merge(target, source, options) {
17800    /* eslint no-param-reassign: 0 */
17801    if (!source) {
17802        return target;
17803    }
17804
17805    if (typeof source !== 'object') {
17806        if (isArray(target)) {
17807            target.push(source);
17808        } else if (target && typeof target === 'object') {
17809            if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) {
17810                target[source] = true;
17811            }
17812        } else {
17813            return [target, source];
17814        }
17815
17816        return target;
17817    }
17818
17819    if (!target || typeof target !== 'object') {
17820        return [target].concat(source);
17821    }
17822
17823    var mergeTarget = target;
17824    if (isArray(target) && !isArray(source)) {
17825        mergeTarget = arrayToObject(target, options);
17826    }
17827
17828    if (isArray(target) && isArray(source)) {
17829        source.forEach(function (item, i) {
17830            if (has.call(target, i)) {
17831                var targetItem = target[i];
17832                if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {
17833                    target[i] = merge(targetItem, item, options);
17834                } else {
17835                    target.push(item);
17836                }
17837            } else {
17838                target[i] = item;
17839            }
17840        });
17841        return target;
17842    }
17843
17844    return Object.keys(source).reduce(function (acc, key) {
17845        var value = source[key];
17846
17847        if (has.call(acc, key)) {
17848            acc[key] = merge(acc[key], value, options);
17849        } else {
17850            acc[key] = value;
17851        }
17852        return acc;
17853    }, mergeTarget);
17854};
17855
17856var assign = function assignSingleSource(target, source) {
17857    return Object.keys(source).reduce(function (acc, key) {
17858        acc[key] = source[key];
17859        return acc;
17860    }, target);
17861};
17862
17863var decode = function (str, decoder, charset) {
17864    var strWithoutPlus = str.replace(/\+/g, ' ');
17865    if (charset === 'iso-8859-1') {
17866        // unescape never throws, no try...catch needed:
17867        return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);
17868    }
17869    // utf-8
17870    try {
17871        return decodeURIComponent(strWithoutPlus);
17872    } catch (e) {
17873        return strWithoutPlus;
17874    }
17875};
17876
17877var encode = function encode(str, defaultEncoder, charset, kind, format) {
17878    // This code was originally written by Brian White (mscdex) for the io.js core querystring library.
17879    // It has been adapted here for stricter adherence to RFC 3986
17880    if (str.length === 0) {
17881        return str;
17882    }
17883
17884    var string = str;
17885    if (typeof str === 'symbol') {
17886        string = Symbol.prototype.toString.call(str);
17887    } else if (typeof str !== 'string') {
17888        string = String(str);
17889    }
17890
17891    if (charset === 'iso-8859-1') {
17892        return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {
17893            return '%26%23' + parseInt($0.slice(2), 16) + '%3B';
17894        });
17895    }
17896
17897    var out = '';
17898    for (var i = 0; i < string.length; ++i) {
17899        var c = string.charCodeAt(i);
17900
17901        if (
17902            c === 0x2D // -
17903            || c === 0x2E // .
17904            || c === 0x5F // _
17905            || c === 0x7E // ~
17906            || (c >= 0x30 && c <= 0x39) // 0-9
17907            || (c >= 0x41 && c <= 0x5A) // a-z
17908            || (c >= 0x61 && c <= 0x7A) // A-Z
17909            || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( )
17910        ) {
17911            out += string.charAt(i);
17912            continue;
17913        }
17914
17915        if (c < 0x80) {
17916            out = out + hexTable[c];
17917            continue;
17918        }
17919
17920        if (c < 0x800) {
17921            out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);
17922            continue;
17923        }
17924
17925        if (c < 0xD800 || c >= 0xE000) {
17926            out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);
17927            continue;
17928        }
17929
17930        i += 1;
17931        c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));
17932        /* eslint operator-linebreak: [2, "before"] */
17933        out += hexTable[0xF0 | (c >> 18)]
17934            + hexTable[0x80 | ((c >> 12) & 0x3F)]
17935            + hexTable[0x80 | ((c >> 6) & 0x3F)]
17936            + hexTable[0x80 | (c & 0x3F)];
17937    }
17938
17939    return out;
17940};
17941
17942var compact = function compact(value) {
17943    var queue = [{ obj: { o: value }, prop: 'o' }];
17944    var refs = [];
17945
17946    for (var i = 0; i < queue.length; ++i) {
17947        var item = queue[i];
17948        var obj = item.obj[item.prop];
17949
17950        var keys = Object.keys(obj);
17951        for (var j = 0; j < keys.length; ++j) {
17952            var key = keys[j];
17953            var val = obj[key];
17954            if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {
17955                queue.push({ obj: obj, prop: key });
17956                refs.push(val);
17957            }
17958        }
17959    }
17960
17961    compactQueue(queue);
17962
17963    return value;
17964};
17965
17966var isRegExp = function isRegExp(obj) {
17967    return Object.prototype.toString.call(obj) === '[object RegExp]';
17968};
17969
17970var isBuffer = function isBuffer(obj) {
17971    if (!obj || typeof obj !== 'object') {
17972        return false;
17973    }
17974
17975    return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));
17976};
17977
17978var combine = function combine(a, b) {
17979    return [].concat(a, b);
17980};
17981
17982var maybeMap = function maybeMap(val, fn) {
17983    if (isArray(val)) {
17984        var mapped = [];
17985        for (var i = 0; i < val.length; i += 1) {
17986            mapped.push(fn(val[i]));
17987        }
17988        return mapped;
17989    }
17990    return fn(val);
17991};
17992
17993module.exports = {
17994    arrayToObject: arrayToObject,
17995    assign: assign,
17996    combine: combine,
17997    compact: compact,
17998    decode: decode,
17999    encode: encode,
18000    isBuffer: isBuffer,
18001    isRegExp: isRegExp,
18002    maybeMap: maybeMap,
18003    merge: merge
18004};
18005
18006
18007/***/ }),
18008
vendor: 23,945 bytes, lines 18009-18796
18009/***/ "../node_modules/url/url.js":
18010/*!**********************************!*\
18011  !*** ../node_modules/url/url.js ***!
18012  \**********************************/
18013/*! no static exports found */
18014/***/ (function(module, exports, __webpack_require__) {
18015
18016"use strict";
18017/*
18018 * Copyright Joyent, Inc. and other Node contributors.
18019 *
18020 * Permission is hereby granted, free of charge, to any person obtaining a
18021 * copy of this software and associated documentation files (the
18022 * "Software"), to deal in the Software without restriction, including
18023 * without limitation the rights to use, copy, modify, merge, publish,
18024 * distribute, sublicense, and/or sell copies of the Software, and to permit
18025 * persons to whom the Software is furnished to do so, subject to the
18026 * following conditions:
18027 *
18028 * The above copyright notice and this permission notice shall be included
18029 * in all copies or substantial portions of the Software.
18030 *
18031 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18032 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18033 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
18034 * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18035 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
18036 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
18037 * USE OR OTHER DEALINGS IN THE SOFTWARE.
18038 */
18039
18040
18041
18042var punycode = __webpack_require__(/*! punycode */ "../node_modules/node-libs-browser/node_modules/punycode/punycode.js");
18043
18044function Url() {
18045  this.protocol = null;
18046  this.slashes = null;
18047  this.auth = null;
18048  this.host = null;
18049  this.port = null;
18050  this.hostname = null;
18051  this.hash = null;
18052  this.search = null;
18053  this.query = null;
18054  this.pathname = null;
18055  this.path = null;
18056  this.href = null;
18057}
18058
18059// Reference: RFC 3986, RFC 1808, RFC 2396
18060
18061/*
18062 * define these here so at least they only have to be
18063 * compiled once on the first module load.
18064 */
18065var protocolPattern = /^([a-z0-9.+-]+:)/i,
18066  portPattern = /:[0-9]*$/,
18067
18068  // Special case for a simple path URL
18069  simplePathPattern = /^(\/\/?(?!\/)[^?\s]*)(\?[^\s]*)?$/,
18070
18071  /*
18072   * RFC 2396: characters reserved for delimiting URLs.
18073   * We actually just auto-escape these.
18074   */
18075  delims = [
18076    '<', '>', '"', '`', ' ', '\r', '\n', '\t'
18077  ],
18078
18079  // RFC 2396: characters not allowed for various reasons.
18080  unwise = [
18081    '{', '}', '|', '\\', '^', '`'
18082  ].concat(delims),
18083
18084  // Allowed by RFCs, but cause of XSS attacks.  Always escape these.
18085  autoEscape = ['\''].concat(unwise),
18086  /*
18087   * Characters that are never ever allowed in a hostname.
18088   * Note that any invalid chars are also handled, but these
18089   * are the ones that are *expected* to be seen, so we fast-path
18090   * them.
18091   */
18092  nonHostChars = [
18093    '%', '/', '?', ';', '#'
18094  ].concat(autoEscape),
18095  hostEndingChars = [
18096    '/', '?', '#'
18097  ],
18098  hostnameMaxLen = 255,
18099  hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,
18100  hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,
18101  // protocols that can allow "unsafe" and "unwise" chars.
18102  unsafeProtocol = {
18103    javascript: true,
18104    'javascript:': true
18105  },
18106  // protocols that never have a hostname.
18107  hostlessProtocol = {
18108    javascript: true,
18109    'javascript:': true
18110  },
18111  // protocols that always contain a // bit.
18112  slashedProtocol = {
18113    http: true,
18114    https: true,
18115    ftp: true,
18116    gopher: true,
18117    file: true,
18118    'http:': true,
18119    'https:': true,
18120    'ftp:': true,
18121    'gopher:': true,
18122    'file:': true
18123  },
18124  querystring = __webpack_require__(/*! qs */ "../node_modules/url/node_modules/qs/lib/index.js");
18125
18126function urlParse(url, parseQueryString, slashesDenoteHost) {
18127  if (url && typeof url === 'object' && url instanceof Url) { return url; }
18128
18129  var u = new Url();
18130  u.parse(url, parseQueryString, slashesDenoteHost);
18131  return u;
18132}
18133
18134Url.prototype.parse = function (url, parseQueryString, slashesDenoteHost) {
18135  if (typeof url !== 'string') {
18136    throw new TypeError("Parameter 'url' must be a string, not " + typeof url);
18137  }
18138
18139  /*
18140   * Copy chrome, IE, opera backslash-handling behavior.
18141   * Back slashes before the query string get converted to forward slashes
18142   * See: https://code.google.com/p/chromium/issues/detail?id=25916
18143   */
18144  var queryIndex = url.indexOf('?'),
18145    splitter = queryIndex !== -1 && queryIndex < url.indexOf('#') ? '?' : '#',
18146    uSplit = url.split(splitter),
18147    slashRegex = /\\/g;
18148  uSplit[0] = uSplit[0].replace(slashRegex, '/');
18149  url = uSplit.join(splitter);
18150
18151  var rest = url;
18152
18153  /*
18154   * trim before proceeding.
18155   * This is to support parse stuff like "  http://foo.com  \n"
18156   */
18157  rest = rest.trim();
18158
18159  if (!slashesDenoteHost && url.split('#').length === 1) {
18160    // Try fast path regexp
18161    var simplePath = simplePathPattern.exec(rest);
18162    if (simplePath) {
18163      this.path = rest;
18164      this.href = rest;
18165      this.pathname = simplePath[1];
18166      if (simplePath[2]) {
18167        this.search = simplePath[2];
18168        if (parseQueryString) {
18169          this.query = querystring.parse(this.search.substr(1));
18170        } else {
18171          this.query = this.search.substr(1);
18172        }
18173      } else if (parseQueryString) {
18174        this.search = '';
18175        this.query = {};
18176      }
18177      return this;
18178    }
18179  }
18180
18181  var proto = protocolPattern.exec(rest);
18182  if (proto) {
18183    proto = proto[0];
18184    var lowerProto = proto.toLowerCase();
18185    this.protocol = lowerProto;
18186    rest = rest.substr(proto.length);
18187  }
18188
18189  /*
18190   * figure out if it's got a host
18191   * user@server is *always* interpreted as a hostname, and url
18192   * resolution will treat //foo/bar as host=foo,path=bar because that's
18193   * how the browser resolves relative URLs.
18194   */
18195  if (slashesDenoteHost || proto || rest.match(/^\/\/[^@/]+@[^@/]+/)) {
18196    var slashes = rest.substr(0, 2) === '//';
18197    if (slashes && !(proto && hostlessProtocol[proto])) {
18198      rest = rest.substr(2);
18199      this.slashes = true;
18200    }
18201  }
18202
18203  if (!hostlessProtocol[proto] && (slashes || (proto && !slashedProtocol[proto]))) {
18204
18205    /*
18206     * there's a hostname.
18207     * the first instance of /, ?, ;, or # ends the host.
18208     *
18209     * If there is an @ in the hostname, then non-host chars *are* allowed
18210     * to the left of the last @ sign, unless some host-ending character
18211     * comes *before* the @-sign.
18212     * URLs are obnoxious.
18213     *
18214     * ex:
18215     * http://a@b@c/ => user:a@b host:c
18216     * http://a@b?@c => user:a host:c path:/?@c
18217     */
18218
18219    /*
18220     * v0.12 TODO(isaacs): This is not quite how Chrome does things.
18221     * Review our test case against browsers more comprehensively.
18222     */
18223
18224    // find the first instance of any hostEndingChars
18225    var hostEnd = -1;
18226    for (var i = 0; i < hostEndingChars.length; i++) {
18227      var hec = rest.indexOf(hostEndingChars[i]);
18228      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { hostEnd = hec; }
18229    }
18230
18231    /*
18232     * at this point, either we have an explicit point where the
18233     * auth portion cannot go past, or the last @ char is the decider.
18234     */
18235    var auth, atSign;
18236    if (hostEnd === -1) {
18237      // atSign can be anywhere.
18238      atSign = rest.lastIndexOf('@');
18239    } else {
18240      /*
18241       * atSign must be in auth portion.
18242       * http://a@b/c@d => host:b auth:a path:/c@d
18243       */
18244      atSign = rest.lastIndexOf('@', hostEnd);
18245    }
18246
18247    /*
18248     * Now we have a portion which is definitely the auth.
18249     * Pull that off.
18250     */
18251    if (atSign !== -1) {
18252      auth = rest.slice(0, atSign);
18253      rest = rest.slice(atSign + 1);
18254      this.auth = decodeURIComponent(auth);
18255    }
18256
18257    // the host is the remaining to the left of the first non-host char
18258    hostEnd = -1;
18259    for (var i = 0; i < nonHostChars.length; i++) {
18260      var hec = rest.indexOf(nonHostChars[i]);
18261      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { hostEnd = hec; }
18262    }
18263    // if we still have not hit it, then the entire thing is a host.
18264    if (hostEnd === -1) { hostEnd = rest.length; }
18265
18266    this.host = rest.slice(0, hostEnd);
18267    rest = rest.slice(hostEnd);
18268
18269    // pull out port.
18270    this.parseHost();
18271
18272    /*
18273     * we've indicated that there is a hostname,
18274     * so even if it's empty, it has to be present.
18275     */
18276    this.hostname = this.hostname || '';
18277
18278    /*
18279     * if hostname begins with [ and ends with ]
18280     * assume that it's an IPv6 address.
18281     */
18282    var ipv6Hostname = this.hostname[0] === '[' && this.hostname[this.hostname.length - 1] === ']';
18283
18284    // validate a little.
18285    if (!ipv6Hostname) {
18286      var hostparts = this.hostname.split(/\./);
18287      for (var i = 0, l = hostparts.length; i < l; i++) {
18288        var part = hostparts[i];
18289        if (!part) { continue; }
18290        if (!part.match(hostnamePartPattern)) {
18291          var newpart = '';
18292          for (var j = 0, k = part.length; j < k; j++) {
18293            if (part.charCodeAt(j) > 127) {
18294              /*
18295               * we replace non-ASCII char with a temporary placeholder
18296               * we need this to make sure size of hostname is not
18297               * broken by replacing non-ASCII by nothing
18298               */
18299              newpart += 'x';
18300            } else {
18301              newpart += part[j];
18302            }
18303          }
18304          // we test again with ASCII char only
18305          if (!newpart.match(hostnamePartPattern)) {
18306            var validParts = hostparts.slice(0, i);
18307            var notHost = hostparts.slice(i + 1);
18308            var bit = part.match(hostnamePartStart);
18309            if (bit) {
18310              validParts.push(bit[1]);
18311              notHost.unshift(bit[2]);
18312            }
18313            if (notHost.length) {
18314              rest = '/' + notHost.join('.') + rest;
18315            }
18316            this.hostname = validParts.join('.');
18317            break;
18318          }
18319        }
18320      }
18321    }
18322
18323    if (this.hostname.length > hostnameMaxLen) {
18324      this.hostname = '';
18325    } else {
18326      // hostnames are always lower case.
18327      this.hostname = this.hostname.toLowerCase();
18328    }
18329
18330    if (!ipv6Hostname) {
18331      /*
18332       * IDNA Support: Returns a punycoded representation of "domain".
18333       * It only converts parts of the domain name that
18334       * have non-ASCII characters, i.e. it doesn't matter if
18335       * you call it with a domain that already is ASCII-only.
18336       */
18337      this.hostname = punycode.toASCII(this.hostname);
18338    }
18339
18340    var p = this.port ? ':' + this.port : '';
18341    var h = this.hostname || '';
18342    this.host = h + p;
18343    this.href += this.host;
18344
18345    /*
18346     * strip [ and ] from the hostname
18347     * the host field still retains them, though
18348     */
18349    if (ipv6Hostname) {
18350      this.hostname = this.hostname.substr(1, this.hostname.length - 2);
18351      if (rest[0] !== '/') {
18352        rest = '/' + rest;
18353      }
18354    }
18355  }
18356
18357  /*
18358   * now rest is set to the post-host stuff.
18359   * chop off any delim chars.
18360   */
18361  if (!unsafeProtocol[lowerProto]) {
18362
18363    /*
18364     * First, make 100% sure that any "autoEscape" chars get
18365     * escaped, even if encodeURIComponent doesn't think they
18366     * need to be.
18367     */
18368    for (var i = 0, l = autoEscape.length; i < l; i++) {
18369      var ae = autoEscape[i];
18370      if (rest.indexOf(ae) === -1) { continue; }
18371      var esc = encodeURIComponent(ae);
18372      if (esc === ae) {
18373        esc = escape(ae);
18374      }
18375      rest = rest.split(ae).join(esc);
18376    }
18377  }
18378
18379  // chop off from the tail first.
18380  var hash = rest.indexOf('#');
18381  if (hash !== -1) {
18382    // got a fragment string.
18383    this.hash = rest.substr(hash);
18384    rest = rest.slice(0, hash);
18385  }
18386  var qm = rest.indexOf('?');
18387  if (qm !== -1) {
18388    this.search = rest.substr(qm);
18389    this.query = rest.substr(qm + 1);
18390    if (parseQueryString) {
18391      this.query = querystring.parse(this.query);
18392    }
18393    rest = rest.slice(0, qm);
18394  } else if (parseQueryString) {
18395    // no query string, but parseQueryString still requested
18396    this.search = '';
18397    this.query = {};
18398  }
18399  if (rest) { this.pathname = rest; }
18400  if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) {
18401    this.pathname = '/';
18402  }
18403
18404  // to support http.request
18405  if (this.pathname || this.search) {
18406    var p = this.pathname || '';
18407    var s = this.search || '';
18408    this.path = p + s;
18409  }
18410
18411  // finally, reconstruct the href based on what has been validated.
18412  this.href = this.format();
18413  return this;
18414};
18415
18416// format a parsed object into a url string
18417function urlFormat(obj) {
18418  /*
18419   * ensure it's an object, and not a string url.
18420   * If it's an obj, this is a no-op.
18421   * this way, you can call url_format() on strings
18422   * to clean up potentially wonky urls.
18423   */
18424  if (typeof obj === 'string') { obj = urlParse(obj); }
18425  if (!(obj instanceof Url)) { return Url.prototype.format.call(obj); }
18426  return obj.format();
18427}
18428
18429Url.prototype.format = function () {
18430  var auth = this.auth || '';
18431  if (auth) {
18432    auth = encodeURIComponent(auth);
18433    auth = auth.replace(/%3A/i, ':');
18434    auth += '@';
18435  }
18436
18437  var protocol = this.protocol || '',
18438    pathname = this.pathname || '',
18439    hash = this.hash || '',
18440    host = false,
18441    query = '';
18442
18443  if (this.host) {
18444    host = auth + this.host;
18445  } else if (this.hostname) {
18446    host = auth + (this.hostname.indexOf(':') === -1 ? this.hostname : '[' + this.hostname + ']');
18447    if (this.port) {
18448      host += ':' + this.port;
18449    }
18450  }
18451
18452  if (this.query && typeof this.query === 'object' && Object.keys(this.query).length) {
18453    query = querystring.stringify(this.query, {
18454      arrayFormat: 'repeat',
18455      addQueryPrefix: false
18456    });
18457  }
18458
18459  var search = this.search || (query && ('?' + query)) || '';
18460
18461  if (protocol && protocol.substr(-1) !== ':') { protocol += ':'; }
18462
18463  /*
18464   * only the slashedProtocols get the //.  Not mailto:, xmpp:, etc.
18465   * unless they had them to begin with.
18466   */
18467  if (this.slashes || (!protocol || slashedProtocol[protocol]) && host !== false) {
18468    host = '//' + (host || '');
18469    if (pathname && pathname.charAt(0) !== '/') { pathname = '/' + pathname; }
18470  } else if (!host) {
18471    host = '';
18472  }
18473
18474  if (hash && hash.charAt(0) !== '#') { hash = '#' + hash; }
18475  if (search && search.charAt(0) !== '?') { search = '?' + search; }
18476
18477  pathname = pathname.replace(/[?#]/g, function (match) {
18478    return encodeURIComponent(match);
18479  });
18480  search = search.replace('#', '%23');
18481
18482  return protocol + host + pathname + search + hash;
18483};
18484
18485function urlResolve(source, relative) {
18486  return urlParse(source, false, true).resolve(relative);
18487}
18488
18489Url.prototype.resolve = function (relative) {
18490  return this.resolveObject(urlParse(relative, false, true)).format();
18491};
18492
18493function urlResolveObject(source, relative) {
18494  if (!source) { return relative; }
18495  return urlParse(source, false, true).resolveObject(relative);
18496}
18497
18498Url.prototype.resolveObject = function (relative) {
18499  if (typeof relative === 'string') {
18500    var rel = new Url();
18501    rel.parse(relative, false, true);
18502    relative = rel;
18503  }
18504
18505  var result = new Url();
18506  var tkeys = Object.keys(this);
18507  for (var tk = 0; tk < tkeys.length; tk++) {
18508    var tkey = tkeys[tk];
18509    result[tkey] = this[tkey];
18510  }
18511
18512  /*
18513   * hash is always overridden, no matter what.
18514   * even href="" will remove it.
18515   */
18516  result.hash = relative.hash;
18517
18518  // if the relative url is empty, then there's nothing left to do here.
18519  if (relative.href === '') {
18520    result.href = result.format();
18521    return result;
18522  }
18523
18524  // hrefs like //foo/bar always cut to the protocol.
18525  if (relative.slashes && !relative.protocol) {
18526    // take everything except the protocol from relative
18527    var rkeys = Object.keys(relative);
18528    for (var rk = 0; rk < rkeys.length; rk++) {
18529      var rkey = rkeys[rk];
18530      if (rkey !== 'protocol') { result[rkey] = relative[rkey]; }
18531    }
18532
18533    // urlParse appends trailing / to urls like http://www.example.com
18534    if (slashedProtocol[result.protocol] && result.hostname && !result.pathname) {
18535      result.pathname = '/';
18536      result.path = result.pathname;
18537    }
18538
18539    result.href = result.format();
18540    return result;
18541  }
18542
18543  if (relative.protocol && relative.protocol !== result.protocol) {
18544    /*
18545     * if it's a known url protocol, then changing
18546     * the protocol does weird things
18547     * first, if it's not file:, then we MUST have a host,
18548     * and if there was a path
18549     * to begin with, then we MUST have a path.
18550     * if it is file:, then the host is dropped,
18551     * because that's known to be hostless.
18552     * anything else is assumed to be absolute.
18553     */
18554    if (!slashedProtocol[relative.protocol]) {
18555      var keys = Object.keys(relative);
18556      for (var v = 0; v < keys.length; v++) {
18557        var k = keys[v];
18558        result[k] = relative[k];
18559      }
18560      result.href = result.format();
18561      return result;
18562    }
18563
18564    result.protocol = relative.protocol;
18565    if (!relative.host && !hostlessProtocol[relative.protocol]) {
18566      var relPath = (relative.pathname || '').split('/');
18567      while (relPath.length && !(relative.host = relPath.shift())) { }
18568      if (!relative.host) { relative.host = ''; }
18569      if (!relative.hostname) { relative.hostname = ''; }
18570      if (relPath[0] !== '') { relPath.unshift(''); }
18571      if (relPath.length < 2) { relPath.unshift(''); }
18572      result.pathname = relPath.join('/');
18573    } else {
18574      result.pathname = relative.pathname;
18575    }
18576    result.search = relative.search;
18577    result.query = relative.query;
18578    result.host = relative.host || '';
18579    result.auth = relative.auth;
18580    result.hostname = relative.hostname || relative.host;
18581    result.port = relative.port;
18582    // to support http.request
18583    if (result.pathname || result.search) {
18584      var p = result.pathname || '';
18585      var s = result.search || '';
18586      result.path = p + s;
18587    }
18588    result.slashes = result.slashes || relative.slashes;
18589    result.href = result.format();
18590    return result;
18591  }
18592
18593  var isSourceAbs = result.pathname && result.pathname.charAt(0) === '/',
18594    isRelAbs = relative.host || relative.pathname && relative.pathname.charAt(0) === '/',
18595    mustEndAbs = isRelAbs || isSourceAbs || (result.host && relative.pathname),
18596    removeAllDots = mustEndAbs,
18597    srcPath = result.pathname && result.pathname.split('/') || [],
18598    relPath = relative.pathname && relative.pathname.split('/') || [],
18599    psychotic = result.protocol && !slashedProtocol[result.protocol];
18600
18601  /*
18602   * if the url is a non-slashed url, then relative
18603   * links like ../.. should be able
18604   * to crawl up to the hostname, as well.  This is strange.
18605   * result.protocol has already been set by now.
18606   * Later on, put the first path part into the host field.
18607   */
18608  if (psychotic) {
18609    result.hostname = '';
18610    result.port = null;
18611    if (result.host) {
18612      if (srcPath[0] === '') { srcPath[0] = result.host; } else { srcPath.unshift(result.host); }
18613    }
18614    result.host = '';
18615    if (relative.protocol) {
18616      relative.hostname = null;
18617      relative.port = null;
18618      if (relative.host) {
18619        if (relPath[0] === '') { relPath[0] = relative.host; } else { relPath.unshift(relative.host); }
18620      }
18621      relative.host = null;
18622    }
18623    mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');
18624  }
18625
18626  if (isRelAbs) {
18627    // it's absolute.
18628    result.host = relative.host || relative.host === '' ? relative.host : result.host;
18629    result.hostname = relative.hostname || relative.hostname === '' ? relative.hostname : result.hostname;
18630    result.search = relative.search;
18631    result.query = relative.query;
18632    srcPath = relPath;
18633    // fall through to the dot-handling below.
18634  } else if (relPath.length) {
18635    /*
18636     * it's relative
18637     * throw away the existing file, and take the new path instead.
18638     */
18639    if (!srcPath) { srcPath = []; }
18640    srcPath.pop();
18641    srcPath = srcPath.concat(relPath);
18642    result.search = relative.search;
18643    result.query = relative.query;
18644  } else if (relative.search != null) {
18645    /*
18646     * just pull out the search.
18647     * like href='?foo'.
18648     * Put this after the other two cases because it simplifies the booleans
18649     */
18650    if (psychotic) {
18651      result.host = srcPath.shift();
18652      result.hostname = result.host;
18653      /*
18654       * occationaly the auth can get stuck only in host
18655       * this especially happens in cases like
18656       * url.resolveObject('mailto:local1@domain1', 'local2@domain2')
18657       */
18658      var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;
18659      if (authInHost) {
18660        result.auth = authInHost.shift();
18661        result.hostname = authInHost.shift();
18662        result.host = result.hostname;
18663      }
18664    }
18665    result.search = relative.search;
18666    result.query = relative.query;
18667    // to support http.request
18668    if (result.pathname !== null || result.search !== null) {
18669      result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');
18670    }
18671    result.href = result.format();
18672    return result;
18673  }
18674
18675  if (!srcPath.length) {
18676    /*
18677     * no path at all.  easy.
18678     * we've already handled the other stuff above.
18679     */
18680    result.pathname = null;
18681    // to support http.request
18682    if (result.search) {
18683      result.path = '/' + result.search;
18684    } else {
18685      result.path = null;
18686    }
18687    result.href = result.format();
18688    return result;
18689  }
18690
18691  /*
18692   * if a url ENDs in . or .., then it must get a trailing slash.
18693   * however, if it ends in anything else non-slashy,
18694   * then it must NOT get a trailing slash.
18695   */
18696  var last = srcPath.slice(-1)[0];
18697  var hasTrailingSlash = (result.host || relative.host || srcPath.length > 1) && (last === '.' || last === '..') || last === '';
18698
18699  /*
18700   * strip single dots, resolve double dots to parent dir
18701   * if the path tries to go above the root, `up` ends up > 0
18702   */
18703  var up = 0;
18704  for (var i = srcPath.length; i >= 0; i--) {
18705    last = srcPath[i];
18706    if (last === '.') {
18707      srcPath.splice(i, 1);
18708    } else if (last === '..') {
18709      srcPath.splice(i, 1);
18710      up++;
18711    } else if (up) {
18712      srcPath.splice(i, 1);
18713      up--;
18714    }
18715  }
18716
18717  // if the path is allowed to go above the root, restore leading ..s
18718  if (!mustEndAbs && !removeAllDots) {
18719    for (; up--; up) {
18720      srcPath.unshift('..');
18721    }
18722  }
18723
18724  if (mustEndAbs && srcPath[0] !== '' && (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {
18725    srcPath.unshift('');
18726  }
18727
18728  if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {
18729    srcPath.push('');
18730  }
18731
18732  var isAbsolute = srcPath[0] === '' || (srcPath[0] && srcPath[0].charAt(0) === '/');
18733
18734  // put the host back
18735  if (psychotic) {
18736    result.hostname = isAbsolute ? '' : srcPath.length ? srcPath.shift() : '';
18737    result.host = result.hostname;
18738    /*
18739     * occationaly the auth can get stuck only in host
18740     * this especially happens in cases like
18741     * url.resolveObject('mailto:local1@domain1', 'local2@domain2')
18742     */
18743    var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;
18744    if (authInHost) {
18745      result.auth = authInHost.shift();
18746      result.hostname = authInHost.shift();
18747      result.host = result.hostname;
18748    }
18749  }
18750
18751  mustEndAbs = mustEndAbs || (result.host && srcPath.length);
18752
18753  if (mustEndAbs && !isAbsolute) {
18754    srcPath.unshift('');
18755  }
18756
18757  if (srcPath.length > 0) {
18758    result.pathname = srcPath.join('/');
18759  } else {
18760    result.pathname = null;
18761    result.path = null;
18762  }
18763
18764  // to support request.http
18765  if (result.pathname !== null || result.search !== null) {
18766    result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');
18767  }
18768  result.auth = relative.auth || result.auth;
18769  result.slashes = result.slashes || relative.slashes;
18770  result.href = result.format();
18771  return result;
18772};
18773
18774Url.prototype.parseHost = function () {
18775  var host = this.host;
18776  var port = portPattern.exec(host);
18777  if (port) {
18778    port = port[0];
18779    if (port !== ':') {
18780      this.port = port.substr(1);
18781    }
18782    host = host.substr(0, host.length - port.length);
18783  }
18784  if (host) { this.hostname = host; }
18785};
18786
18787exports.parse = urlParse;
18788exports.resolve = urlResolve;
18789exports.resolveObject = urlResolveObject;
18790exports.format = urlFormat;
18791
18792exports.Url = Url;
18793
18794
18795/***/ }),
18796
vendor: 767 bytes, lines 18797-18827
18797/***/ "../node_modules/webpack/buildin/global.js":
18798/*!*************************************************!*\
18799  !*** ../node_modules/webpack/buildin/global.js ***!
18800  \*************************************************/
18801/*! no static exports found */
18802/***/ (function(module, exports) {
18803
18804var g;
18805
18806// This works in non-strict mode
18807g = (function() {
18808	return this;
18809})();
18810
18811try {
18812	// This works if eval is allowed (see CSP)
18813	g = g || new Function("return this")();
18814} catch (e) {
18815	// This works if the window reference is available
18816	if (typeof window === "object") g = window;
18817}
18818
18819// g can still be undefined, but nothing to do about it...
18820// We return undefined, instead of nothing here, so it's
18821// easier to handle this case. if(!global) { ...}
18822
18823module.exports = g;
18824
18825
18826/***/ }),
18827
vendor: 792 bytes, lines 18828-18860
18828/***/ "../node_modules/webpack/buildin/module.js":
18829/*!*************************************************!*\
18830  !*** ../node_modules/webpack/buildin/module.js ***!
18831  \*************************************************/
18832/*! no static exports found */
18833/***/ (function(module, exports) {
18834
18835module.exports = function(module) {
18836	if (!module.webpackPolyfill) {
18837		module.deprecate = function() {};
18838		module.paths = [];
18839		// module.parent = undefined by default
18840		if (!module.children) module.children = [];
18841		Object.defineProperty(module, "loaded", {
18842			enumerable: true,
18843			get: function() {
18844				return module.l;
18845			}
18846		});
18847		Object.defineProperty(module, "id", {
18848			enumerable: true,
18849			get: function() {
18850				return module.i;
18851			}
18852		});
18853		module.webpackPolyfill = 1;
18854	}
18855	return module;
18856};
18857
18858
18859/***/ }),
18860
18861/***/ "./assets/js/app.js":
18862/*!**************************!*\
18863  !*** ./assets/js/app.js ***!
18864  \**************************/
18865/*! no exports provided */
18866/***/ (function(module, __webpack_exports__, __webpack_require__) {
18867
18868"use strict";
18869__webpack_require__.r(__webpack_exports__);
18870/* WEBPACK VAR INJECTION */(function(jQuery) {/* harmony import */ var _app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./app/jquery-shim.js */ "./assets/js/app/jquery-shim.js");
18871/* harmony import */ var _app_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./app/utils.js */ "./assets/js/app/utils.js");
18872/* harmony import */ var _app_accordion_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./app/accordion.js */ "./assets/js/app/accordion.js");
18873/* harmony import */ var _app_anchor_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./app/anchor.js */ "./assets/js/app/anchor.js");
18874/* harmony import */ var _app_fixedheader_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./app/fixedheader.js */ "./assets/js/app/fixedheader.js");
18875/* harmony import */ var _app_heightline_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./app/heightline.js */ "./assets/js/app/heightline.js");
18876/* harmony import */ var _app_responsive_table_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./app/responsive-table.js */ "./assets/js/app/responsive-table.js");
18877/* harmony import */ var _app_slidebar_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./app/slidebar.js */ "./assets/js/app/slidebar.js");
18878/* harmony import */ var _app_tab_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./app/tab.js */ "./assets/js/app/tab.js");
18879/* harmony import */ var _app_current_nav_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./app/current-nav.js */ "./assets/js/app/current-nav.js");
18880/* harmony import */ var _app_format_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./app/format.js */ "./assets/js/app/format.js");
18881/* harmony import */ var owl_carousel__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! owl.carousel */ "../node_modules/owl.carousel/dist/owl.carousel.js");
18882/* harmony import */ var owl_carousel__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(owl_carousel__WEBPACK_IMPORTED_MODULE_11__);
18883/* harmony import */ var font_awesome_scss_font_awesome_scss__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! font-awesome/scss/font-awesome.scss */ "../node_modules/font-awesome/scss/font-awesome.scss");
18884/* harmony import */ var font_awesome_scss_font_awesome_scss__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(font_awesome_scss_font_awesome_scss__WEBPACK_IMPORTED_MODULE_12__);
18885/* harmony import */ var owl_carousel_dist_assets_owl_carousel_css__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! owl.carousel/dist/assets/owl.carousel.css */ "../node_modules/owl.carousel/dist/assets/owl.carousel.css");
18886/* harmony import */ var owl_carousel_dist_assets_owl_carousel_css__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(owl_carousel_dist_assets_owl_carousel_css__WEBPACK_IMPORTED_MODULE_13__);
18887/* harmony import */ var owl_carousel_dist_assets_owl_theme_default_css__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! owl.carousel/dist/assets/owl.theme.default.css */ "../node_modules/owl.carousel/dist/assets/owl.theme.default.css");
18888/* harmony import */ var owl_carousel_dist_assets_owl_theme_default_css__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(owl_carousel_dist_assets_owl_theme_default_css__WEBPACK_IMPORTED_MODULE_14__);
18889function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
18890function _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, _toPropertyKey(descriptor.key), descriptor); } }
18891function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
18892function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
18893function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
18894function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
18895
18896
18897
18898
18899
18900
18901
18902
18903
18904
18905
18906
18907
18908
18909
18910var App = /*#__PURE__*/_createClass(function App() {
18911  _classCallCheck(this, App);
18912  this.Utils = new _app_utils_js__WEBPACK_IMPORTED_MODULE_1__["default"]();
18913  this.Accordion = new _app_accordion_js__WEBPACK_IMPORTED_MODULE_2__["default"]();
18914  this.Anchor = new _app_anchor_js__WEBPACK_IMPORTED_MODULE_3__["default"]();
18915  this.FixedHeader = new _app_fixedheader_js__WEBPACK_IMPORTED_MODULE_4__["default"]();
18916  this.HeightLine = new _app_heightline_js__WEBPACK_IMPORTED_MODULE_5__["default"]();
18917  this.ResponsiveTable = new _app_responsive_table_js__WEBPACK_IMPORTED_MODULE_6__["default"]();
18918  this.Slidebar = new _app_slidebar_js__WEBPACK_IMPORTED_MODULE_7__["default"]();
18919  this.CurrentNav = new _app_current_nav_js__WEBPACK_IMPORTED_MODULE_9__["default"]();
18920  this.Tab = new _app_tab_js__WEBPACK_IMPORTED_MODULE_8__["default"]();
18921
18922  //SPメニューの高さ取得
18923  function menuHight() {
18924    var win = Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(window).innerWidth();
18925    if (win > 750) {
18926      return false;
18927    }
18928    var $smpHeaderHeight = Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.l-header').height();
18929    var windowHeight = window.innerHeight;
18930    var winH = windowHeight - $smpHeaderHeight;
18931    console.log($smpHeaderHeight);
18932
18933    //動かすターゲットを取得
18934    var targetSlidebarWrap = Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.c-slidebar-menu'),
18935      targetSlidebarMenu = Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.c-slidebar__parent'),
18936      targetSlidebarBtn = Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.c-slidebar-menu__parent');
18937
18938    //いざ実行(クリックしたら処理を実行する)
18939    targetSlidebarBtn.on('click', function () {
18940      Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.c-slidebar-menu').toggleClass('is-active');
18941    });
18942  }
18943
18944  //フッターメニューSPスライド
18945  function menuSlide() {
18946    var win = Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(window).innerWidth();
18947    if (win > 750) {
18948      return false;
18949    }
18950    Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.l-footer__block').on('click', function () {
18951      Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this).children(".l-footer__menutitle").toggleClass('is-open');
18952      Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this).children(".l-footer__menulist.is-sub").slideToggle();
18953    });
18954  }
18955  //owlcarousel
18956  function owlCarousel() {
18957    var owls = Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.owl-carousel');
18958    if (owls.length === 0) {
18959      return false;
18960    }
18961    //->スライダー
18962    owls.imagesLoaded(function () {
18963      Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.c-main-visual__slider').owlCarousel({
18964        items: 3,
18965        margin: 0,
18966        dots: true,
18967        loop: true,
18968        nav: true,
18969        autoplayHoverPause: true,
18970        autoplay: true,
18971        autoplaySpeed: 500,
18972        center: true,
18973        navText: ['<img src="/wp-content/themes/glasiaous-co-html/dist/assets/images/img-mainvisual-prev.png" />', '<img src="/wp-content/themes/glasiaous-co-html/dist/assets/images/img-mainvisual-next.png" />'],
18974        //navText: ['<img src="/assets/images/img-mainvisual-prev.png" />','<img src="/assets/images/img-mainvisual-next.png" />'],
18975        responsive: {
18976          // breakpoint from 0 up
18977          0: {
18978            items: 1,
18979            autoWidth: false,
18980            autoHeight: false,
18981            nav: false
18982          },
18983          // breakpoint from 750 up
18984          950: {
18985            items: 3,
18986            autoWidth: true,
18987            autoHeight: true,
18988            nav: true
18989          }
18990        }
18991      });
18992    });
18993
18994    //->カルーセル
18995    owls.imagesLoaded(function () {
18996      Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.c-main-visual__carousel').owlCarousel({
18997        items: 1,
18998        margin: 16,
18999        dots: true,
19000        loop: true,
19001        nav: true,
19002        autoplayHoverPause: true,
19003        autoplay: false,
19004        autoplaySpeed: 500,
19005        autoWidth: false,
19006        autoHeight: false,
19007        center: true,
19008        navText: ['<div class="c-main-visual__nav is-left"><i class="fa fa-angle-left" aria-hidden="true"></i></div>', '<div class="c-main-visual__nav is-right"><i class="fa fa-angle-right" aria-hidden="true"></i></div>'],
19009        responsive: {
19010          // breakpoint from 0 up
19011          0: {
19012            stagePadding: 32
19013          },
19014          // breakpoint from 750  up
19015          750: {
19016            stagePadding: 64
19017          },
19018          // breakpoint from 950 up
19019          950: {
19020            stagePadding: 156
19021          },
19022          1400: {
19023            stagePadding: 312
19024          }
19025        }
19026      });
19027    });
19028    //->カルーセル_ノーマル
19029    owls.imagesLoaded(function () {
19030      Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.c-main-visual__carousel.is-normal').owlCarousel({
19031        items: 1,
19032        margin: 8,
19033        dots: true,
19034        loop: true,
19035        nav: true,
19036        autoplayHoverPause: true,
19037        autoplay: false,
19038        autoplaySpeed: 500,
19039        autoWidth: false,
19040        autoHeight: false,
19041        center: true,
19042        navText: ['<div class="c-main-visual__nav is-left"><i class="fa fa-angle-left" aria-hidden="true"></i></div>', '<div class="c-main-visual__nav is-right"><i class="fa fa-angle-right" aria-hidden="true"></i></div>'],
19043        responsive: {
19044          // breakpoint from 0 up
19045          0: {
19046            stagePadding: 32
19047          },
19048          // breakpoint from 750  up
19049          750: {
19050            stagePadding: 64
19051          },
19052          // breakpoint from 950 up
19053          950: {
19054            stagePadding: 156
19055          },
19056          1400: {
19057            stagePadding: 312
19058          }
19059        }
19060      });
19061    });
19062    //->カルーセル_レイヤー
19063    owls.imagesLoaded(function () {
19064      Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.c-main-visual-layer__carousel').owlCarousel({
19065        items: 1,
19066        margin: 0,
19067        dots: true,
19068        loop: true,
19069        nav: false,
19070        autoplayHoverPause: true,
19071        autoplay: true,
19072        autoplaySpeed: 500,
19073        autoWidth: false,
19074        autoHeight: false,
19075        center: true,
19076        navText: ['<img src="/wp-content/themes/glasiaous-co-html/dist/assets/images/icon-slider-prev.svg" />', '<img src="/wp-content/themes/glasiaous-co-html/dist/assets/images/icon-slider-next.svg" />']
19077        //navText: ['<img src="/assets/images/icon-slider-prev.svg" />','<img src="/assets/images/icon-slider-next.svg" />'],
19078      });
19079    });
19080    //->カード_カルーセル
19081    owls.imagesLoaded(function () {
19082      Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.js-card-slider').owlCarousel({
19083        margin: 36,
19084        dots: false,
19085        loop: true,
19086        nav: false,
19087        autoplayHoverPause: true,
19088        autoplay: false,
19089        autoplaySpeed: 500,
19090        autoWidth: false,
19091        autoHeight: true,
19092        navText: ['<img src="/wp-content/themes/glasiaous-co-html/dist/assets/images/icon-slider-prev.svg" />', '<img src="/wp-content/themes/glasiaous-co-html/dist/assets/images/icon-slider-next.svg" />'],
19093        //navText: ['<img src="/assets/images/icon-slider-prev.svg" />','<img src="/assets/images/icon-slider-next.svg" />'],
19094        responsive: {
19095          // breakpoint from 0 up
19096          0: {
19097            margin: 16,
19098            items: 1,
19099            loop: true,
19100            stagePadding: 50
19101          },
19102          // breakpoint from 750 up
19103          750: {
19104            margin: 36,
19105            items: 3,
19106            loop: true,
19107            stagePadding: 0
19108          }
19109        }
19110      });
19111    });
19112    owls.imagesLoaded(function () {
19113      var $sliderItem = Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.js-pickup');
19114      if (!$sliderItem) return false;
19115      if ($sliderItem.find('.c-banner-pickup__item').length < 3) {
19116        $sliderItem.toggleClass('owl-carousel');
19117        return false;
19118      }
19119      $sliderItem.owlCarousel({
19120        margin: 30,
19121        dots: true,
19122        loop: true,
19123        nav: true,
19124        autoplayHoverPause: true,
19125        autoplay: true,
19126        autoplaySpeed: 500,
19127        autoWidth: true,
19128        autoHeight: false,
19129        navText: ['<span class="is-slide-prev"></span>', '<span class="is-slide-next"></span>'],
19130        responsive: {
19131          // breakpoint from 0 up
19132          0: {
19133            items: 1,
19134            center: true,
19135            stagePadding: 20,
19136            navText: ['<span class="is-slide-prev"></span>', '<span class="is-slide-next"></span>']
19137          },
19138          // breakpoint from 750 up
19139          750: {
19140            margin: 30,
19141            navText: ['<span class="is-slide-prev"></span>', '<span class="is-slide-next"></span>']
19142          }
19143        }
19144      });
19145    });
19146  }
19147  Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function () {
19148    menuSlide();
19149    owlCarousel();
19150  });
19151});
19152window.GApp = new App();
19153(function ($) {
19154  var growApp = function growApp() {};
19155  /*
19156   * userAgent取得
19157   * */
19158  var Agent = window.navigator.userAgent.toLowerCase();
19159  var _ua = function (u) {
19160    return {
19161      Tablet: u.indexOf("windows") != -1 && u.indexOf("touch") != -1 && u.indexOf("tablet pc") == -1 || u.indexOf("ipad") != -1 || u.indexOf("android") != -1 && u.indexOf("mobile") == -1 || u.indexOf("firefox") != -1 && u.indexOf("tablet") != -1 || u.indexOf("kindle") != -1 || u.indexOf("silk") != -1 || u.indexOf("playbook") != -1,
19162      Mobile: u.indexOf("windows") != -1 && u.indexOf("phone") != -1 || u.indexOf("iphone") != -1 || u.indexOf("ipod") != -1 || u.indexOf("android") != -1 && u.indexOf("mobile") != -1 || u.indexOf("firefox") != -1 && u.indexOf("mobile") != -1 || u.indexOf("blackberry") != -1
19163    };
19164  }(Agent);
19165  growApp.prototype.changeViewPort = function () {};
19166
19167  /*
19168  *
19169  * スマホメニューの高さを取得する
19170  *
19171  * */
19172  growApp.prototype.menuHight = function () {
19173    var win = $(window).innerWidth();
19174    if (win > 750) {
19175      return false;
19176    }
19177    var $smpHeaderHeight = $('.l-header').height();
19178    var windowHeight = window.innerHeight;
19179    var winH = windowHeight - $smpHeaderHeight;
19180    console.log($smpHeaderHeight);
19181
19182    //動かすターゲットを取得
19183    var targetSlidebarWrap = $('.c-slidebar-menu'),
19184      targetSlidebarMenu = $('.c-slidebar__parent'),
19185      targetSlidebarBtn = $('.c-slidebar-menu__parent');
19186
19187    //いざ実行(クリックしたら処理を実行する)
19188    targetSlidebarBtn.on('click', function () {
19189      $('.c-slidebar-menu').toggleClass('is-active');
19190    });
19191  };
19192  growApp.prototype.footerMenu = function () {
19193    var win = $(window).innerWidth();
19194    if (win > 750) {
19195      return false;
19196    }
19197    $('.c-footer-menu__block').on('click', function () {
19198      $(this).children(".c-footer-menu__title").toggleClass('is-open');
19199      $(this).children(".c-footer-menu__list.is-sub").slideToggle();
19200    });
19201  };
19202  growApp.prototype.buttonWrap = function () {
19203    var button = $(".c-button");
19204    button.wrapInner("<span></span>");
19205  };
19206  growApp.prototype.addScrollClass = function () {
19207    $(window).on('scroll', function () {
19208      var scrollPosition = $(this).scrollTop();
19209      var body = $("body");
19210      if (scrollPosition > 0) {
19211        body.addClass("is-scroll");
19212      } else {
19213        body.removeClass("is-scroll");
19214      }
19215    });
19216  };
19217  growApp.prototype.diagnosisBannerClose = function () {
19218    $(".c-banner-diagnosis__close").on("click", function () {
19219      $(".c-banner-diagnosis").fadeOut(300);
19220    });
19221  };
19222  $(function () {
19223    var app = new growApp();
19224    app.changeViewPort();
19225    // app.menuHight();
19226    app.footerMenu();
19227    app.buttonWrap();
19228    app.addScrollClass();
19229    app.diagnosisBannerClose();
19230  });
19231})(jQuery);
19232/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! jquery */ "../node_modules/jquery/dist/jquery.js")))
19233
19234/***/ }),
19235
19236/***/ "./assets/js/app/accordion.js":
19237/*!************************************!*\
19238  !*** ./assets/js/app/accordion.js ***!
19239  \************************************/
19240/*! exports provided: default */
19241/***/ (function(module, __webpack_exports__, __webpack_require__) {
19242
19243"use strict";
19244__webpack_require__.r(__webpack_exports__);
19245/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Accordion; });
19246/* harmony import */ var _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jquery-shim.js */ "./assets/js/app/jquery-shim.js");
19247function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
19248function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
19249function _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, _toPropertyKey(descriptor.key), descriptor); } }
19250function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
19251function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
19252function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
19253/*
19254 * ====================================================================
19255 * Grow Template
19256 * @package  Grow Template
19257 * @author   GrowGroup.Inc <[email protected]>
19258 * @license  MIT Licence
19259 * ====================================================================
19260 *
19261 * # example:
19262 * <div class="c-panel js-accordion">
19263 *     <div class="c-panel__title" data-accordion-title>
19264 *         Title
19265 *     </div>
19266 *     <div class="c-panel__content" data-accordion-content>
19267 *         Content
19268 *     </div>
19269 * </div>
19270 *
19271 */
19272
19273
19274var defaultOptions = {
19275  selector: '.js-accordion',
19276  titleTargetAttr: 'data-accordion-title',
19277  contentTargetAttr: 'data-accordion-content',
19278  speed: 300,
19279  defaultOpen: false
19280};
19281var Accordion = /*#__PURE__*/function () {
19282  /**
19283   * 初期化
19284   * @param options
19285   */
19286  function Accordion(options) {
19287    _classCallCheck(this, Accordion);
19288    this.options = _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].extend(defaultOptions, options);
19289    this.init();
19290  }
19291
19292  /**
19293   * 初期化
19294   */
19295  return _createClass(Accordion, [{
19296    key: "init",
19297    value: function init() {
19298      // ターゲットを取得する
19299      this.targetAll = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.options.selector);
19300
19301      // ターゲットが存在しない場合は実行しない
19302      if (!this.targetAll.length) {
19303        return false;
19304      }
19305      // 実行する
19306      this.run();
19307    }
19308
19309    /**
19310     * 実行する
19311     */
19312  }, {
19313    key: "run",
19314    value: function run() {
19315      for (var i = 0; i < this.targetAll.length; i++) {
19316        var target = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.targetAll[i]);
19317        target.title = target.find('*[' + this.options.titleTargetAttr + ']');
19318        target.content = target.find('*[' + this.options.contentTargetAttr + ']');
19319        this.accordion(target);
19320        if (this.options.defaultOpen) {
19321          target.content.slideDown();
19322        }
19323      }
19324    }
19325
19326    /**
19327     * アコーディオンの動作
19328     * @param el
19329     */
19330  }, {
19331    key: "accordion",
19332    value: function accordion(el) {
19333      var _this = this;
19334      Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(el.title).on('click', function (e) {
19335        e.preventDefault();
19336        el.content.slideToggle(_this.options.speed);
19337        el.content.closest(_this.options.selector).toggleClass('is-open');
19338      });
19339      Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(el.title).on('mouseover', function (e) {
19340        Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(_this).css('cursor', 'pointer');
19341      });
19342    }
19343  }]);
19344}();
19345
19346
19347/***/ }),
19348
19349/***/ "./assets/js/app/anchor.js":
19350/*!*********************************!*\
19351  !*** ./assets/js/app/anchor.js ***!
19352  \*********************************/
19353/*! exports provided: default */
19354/***/ (function(module, __webpack_exports__, __webpack_require__) {
19355
19356"use strict";
19357__webpack_require__.r(__webpack_exports__);
19358/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Anchor; });
19359/* harmony import */ var _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jquery-shim.js */ "./assets/js/app/jquery-shim.js");
19360/*
19361 * ====================================================================
19362 * Grow Template
19363 * @package  Grow Template
19364 * @author   GrowGroup.Inc <[email protected]>
19365 * @license  MIT Licence
19366 * ====================================================================
19367 * # example:
19368 * <a class="js-anchor" data-anchor-taget=".target-selector">
19369 *     Link
19370 * </a>
19371 *
19372 */
19373
19374
19375function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
19376function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
19377function _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, _toPropertyKey(descriptor.key), descriptor); } }
19378function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
19379function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
19380function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
19381
19382
19383/**
19384 * デフォルトオプション
19385 * @type {{}}
19386 */
19387var defaultOptions = {
19388  selector: '.js-anchor',
19389  dataSelector: 'anchor-target',
19390  scrollSpeed: 300,
19391  easing: 'linear'
19392};
19393var Anchor = /*#__PURE__*/function () {
19394  function Anchor(options) {
19395    _classCallCheck(this, Anchor);
19396    // オプションをセット
19397    this.options = _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].extend(defaultOptions, options);
19398    this.init();
19399  }
19400
19401  /**
19402   * 初期化
19403   * @param e ターゲットとなるエレメント
19404   */
19405  return _createClass(Anchor, [{
19406    key: "init",
19407    value: function init() {
19408      this.target = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.options.selector);
19409      this.onClick();
19410    }
19411
19412    /**
19413     * クリック時のイベント
19414     */
19415  }, {
19416    key: "onClick",
19417    value: function onClick() {
19418      var self = this;
19419      this.target.on('click', function (e) {
19420        e.preventDefault();
19421
19422        // スクロール先のターゲットを指定
19423        var anchorTargetSelector = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this).data(self.options.dataSelector);
19424        if (typeof anchorTargetSelector === 'undefined') {
19425          var href = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this).attr('href');
19426          var anchorTargetSelector = href.match(/#(\S*)/g);
19427          if (typeof anchorTargetSelector[0] === 'undefined') {
19428            throw new Error('ターゲットとなる要素を取得できませんでした。');
19429            return false;
19430          }
19431          anchorTargetSelector = anchorTargetSelector[0];
19432        }
19433        var anchorTarget = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(anchorTargetSelector);
19434        if (anchorTarget.length === 0) {
19435          throw new Error('ターゲットとなる要素を取得できませんでした。');
19436          return false;
19437        }
19438        var top = anchorTarget.offset().top - 72;
19439
19440        // スクロールさせる
19441        Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('body,html').animate({
19442          scrollTop: top
19443        }, {
19444          duration: self.options.scrollSpeed,
19445          easing: self.options.easing
19446        });
19447      });
19448    }
19449  }]);
19450}();
19451
19452
19453/***/ }),
19454
19455/***/ "./assets/js/app/current-nav.js":
19456/*!**************************************!*\
19457  !*** ./assets/js/app/current-nav.js ***!
19458  \**************************************/
19459/*! exports provided: default */
19460/***/ (function(module, __webpack_exports__, __webpack_require__) {
19461
19462"use strict";
19463__webpack_require__.r(__webpack_exports__);
19464/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return CurrentNav; });
19465/* harmony import */ var _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jquery-shim.js */ "./assets/js/app/jquery-shim.js");
19466/* harmony import */ var url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! url */ "../node_modules/url/url.js");
19467/* harmony import */ var url__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(url__WEBPACK_IMPORTED_MODULE_1__);
19468function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
19469function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
19470function _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, _toPropertyKey(descriptor.key), descriptor); } }
19471function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
19472function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
19473function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
19474
19475
19476var defaultOptions = {
19477  targetSelector: '.js-current-nav',
19478  // 実行するセレクタ
19479  activeClass: "is-current",
19480  // 付与するクラス
19481  include_children: true
19482};
19483var CurrentNav = /*#__PURE__*/function () {
19484  function CurrentNav(options) {
19485    _classCallCheck(this, CurrentNav);
19486    this.options = _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].extend(defaultOptions, options);
19487    this.init();
19488  }
19489  return _createClass(CurrentNav, [{
19490    key: "init",
19491    value: function init() {
19492      // ナビゲーションのターゲット
19493      this.target = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.options.targetSelector);
19494
19495      // 付与するクラス
19496      this.activeClass = this.options.activeClass;
19497
19498      // 現在のURLのパス
19499      this.currentPathname = window.location.pathname;
19500      if (this.target.length === 0 || typeof this.currentPathname === "undefined") {
19501        return false;
19502      }
19503      this.run();
19504    }
19505
19506    /**
19507     * ターゲットをセット
19508     * @param selector
19509     */
19510  }, {
19511    key: "setTarget",
19512    value: function setTarget(selector) {
19513      this.target = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(selector);
19514    }
19515
19516    /**
19517     * リセット
19518     */
19519  }, {
19520    key: "reset",
19521    value: function reset() {
19522      this.target.removeClass("is-current");
19523    }
19524
19525    /**
19526     * 実行
19527     */
19528  }, {
19529    key: "run",
19530    value: function run() {
19531      this.reset();
19532      for (var i = this.target.length - 1; i >= 0; i--) {
19533        var href = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.target[i]).attr('href');
19534        var href = this.isHttp(href);
19535        href = this.isIndexPage(href);
19536        if (this.isMatch(href)) {
19537          Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.target[i]).addClass(this.activeClass);
19538        }
19539      }
19540    }
19541  }, {
19542    key: "isMatch",
19543    value: function isMatch(path) {
19544      path = path.replace(/^(.*(?:\.\.?))/, '');
19545      if (this.currentPathname === path) {
19546        return true;
19547      }
19548      if (this.options.include_children === true) {
19549        if (path === "/") {
19550          return false;
19551        }
19552        if (this.currentPathname.match(path) || this.currentPathname === path) {
19553          return true;
19554        }
19555      }
19556      return false;
19557    }
19558  }, {
19559    key: "isHttp",
19560    value: function isHttp(targetHref) {
19561      var match = targetHref.match(/^http/g);
19562      if (!_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].isEmptyObject(match) && match[0] === "http") {
19563        return url__WEBPACK_IMPORTED_MODULE_1___default.a.parse(targetHref).pathname;
19564      }
19565      return targetHref;
19566    }
19567  }, {
19568    key: "isIndexPage",
19569    value: function isIndexPage(targetHref) {
19570      var targetMatch = targetHref.substr(-1, 1);
19571      var locationMatch = this.currentPathname.substr(-1, 1);
19572      if (targetMatch === "/" && locationMatch === "/") {
19573        return targetHref;
19574      }
19575      if (targetMatch === "l" && locationMatch === "/") {
19576        this.currentPathname = this.currentPathname + "index.html";
19577      }
19578      if (targetMatch === "/" && locationMatch === "l") {
19579        return targetHref + "index.html";
19580      }
19581      return targetHref;
19582    }
19583  }]);
19584}();
19585
19586
19587/***/ }),
19588
19589/***/ "./assets/js/app/fixedheader.js":
19590/*!**************************************!*\
19591  !*** ./assets/js/app/fixedheader.js ***!
19592  \**************************************/
19593/*! exports provided: default */
19594/***/ (function(module, __webpack_exports__, __webpack_require__) {
19595
19596"use strict";
19597__webpack_require__.r(__webpack_exports__);
19598/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Fixedheader; });
19599/* harmony import */ var _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jquery-shim.js */ "./assets/js/app/jquery-shim.js");
19600function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
19601function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
19602function _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, _toPropertyKey(descriptor.key), descriptor); } }
19603function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
19604function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
19605function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
19606/*
19607 * ====================================================================
19608 * Grow Template
19609 * @package  Grow Template
19610 * @author   GrowGroup.Inc <[email protected]>
19611 * @license  MIT Licence
19612 * ====================================================================
19613 *
19614 * # example:
19615 * <header class="l-header js-fixedheader">
19616 *     Content
19617 * </header>
19618 *
19619 */
19620
19621var defaultOptions = {
19622  selector: '.js-fixedheader',
19623  // 実行するセレクタ
19624  offset: 50,
19625  // 実行するオフセットピクセル数,
19626  cssClass: ".l-global-navigation",
19627  // CSSが定義されているクラス
19628  activeClass: "is-fixed",
19629  // 有効な時に付与するクラス
19630  mobile: false // モバイル時にどう動作するか
19631};
19632var Fixedheader = /*#__PURE__*/function () {
19633  function Fixedheader(options) {
19634    _classCallCheck(this, Fixedheader);
19635    this.options = _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].extend(defaultOptions, options);
19636    this.init();
19637  }
19638
19639  /**
19640   * 初期化する
19641   */
19642  return _createClass(Fixedheader, [{
19643    key: "init",
19644    value: function init() {
19645      this.target = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.options.selector);
19646      this.isFixed = this.isFixed.bind(this);
19647      this.run = this.run.bind(this);
19648      if (screen.width > 768 && this.options.mobile || this.options.mobile === false) {
19649        window.requestAnimationFrame(this.run);
19650      }
19651    }
19652
19653    /**
19654     * 実行
19655     */
19656  }, {
19657    key: "run",
19658    value: function run() {
19659      if (this.isFixed()) {
19660        this.target.addClass(this.options.activeClass);
19661      } else {
19662        this.target.removeClass(this.options.activeClass);
19663      }
19664      window.requestAnimationFrame(this.run);
19665    }
19666
19667    /**
19668     * 判断する
19669     * @returns {boolean}
19670     */
19671  }, {
19672    key: "isFixed",
19673    value: function isFixed() {
19674      // オフセットより高いか判断する
19675      return window.pageYOffset > this.options.offset ? true : false;
19676    }
19677  }]);
19678}();
19679
19680
19681/***/ }),
19682
19683/***/ "./assets/js/app/format.js":
19684/*!*********************************!*\
19685  !*** ./assets/js/app/format.js ***!
19686  \*********************************/
19687/*! exports provided: default */
19688/***/ (function(module, __webpack_exports__, __webpack_require__) {
19689
19690"use strict";
19691__webpack_require__.r(__webpack_exports__);
19692/* harmony import */ var _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jquery-shim.js */ "./assets/js/app/jquery-shim.js");
19693
19694var buildFormat = function buildFormat() {
19695  var $toc = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<div />', {
19696    id: 'toc_container'
19697  });
19698  var $list = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<ul />', {
19699    "class": 'toc_list'
19700  });
19701  var $groups = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.u-format-group');
19702  if ($groups.length === 0) {
19703    return false;
19704  }
19705  // フォーマットグループごとの処理
19706  for (var i = 0; i < $groups.length; i++) {
19707    var $_list = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<ul />');
19708    var $group = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])($groups[i]);
19709    var group_title = $group.find('.u-format-group__title').text();
19710    var $group_li = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<li />');
19711    var groupid = 'formatgroup_' + (i + 1);
19712    $group.attr('id', groupid);
19713    $list.append($group_li.append(Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<a />', {
19714      text: i + 1 + '. ' + group_title,
19715      href: '#' + groupid
19716    })));
19717    // フォーマットごとの処理
19718    var $formats = $group.find('.u-format-group__content').find('.u-format');
19719    var $_ul = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<ul />');
19720    for (var m = 0; m < $formats.length; m++) {
19721      var $format = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])($formats[m]);
19722      var $format_title = $format.find('.u-format__title');
19723      var $format_content = $format.find('.u-format__content');
19724      var formatid = 'format_' + (i + 1) + (m + 1);
19725      $format.find('.u-format__title').attr('id', formatid);
19726      var format_title = $format_title.text();
19727      var format_number = i + 1 + '.' + (m + 1) + '. ';
19728      $format_title.text(format_number + format_title);
19729      $_ul.append(Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<li />').append(Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<a />', {
19730        href: '#' + formatid,
19731        text: format_number + format_title
19732      })));
19733
19734      // コードを追加
19735      var $code = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<div />', {
19736        "class": 'u-format__code'
19737      });
19738      $code.append(Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<div />', {
19739        "class": 'u-format__code__title',
19740        text: format_number + format_title
19741      }));
19742      var formathtml = $format.find('.u-format__content').html();
19743      $code.append(Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<pre />', {
19744        text: formathtml.trim()
19745      }));
19746      $format.append($code);
19747    }
19748    $group_li.append($_ul);
19749    $_list.append($group_li);
19750    $list.append($_list);
19751  }
19752  $toc.append($list);
19753  Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.c-breadcrumb').after(Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<div />', {
19754    "class": 'l-container'
19755  }).append($toc));
19756};
19757/* harmony default export */ __webpack_exports__["default"] = (buildFormat);
19758
19759/***/ }),
19760
19761/***/ "./assets/js/app/heightline.js":
19762/*!*************************************!*\
19763  !*** ./assets/js/app/heightline.js ***!
19764  \*************************************/
19765/*! exports provided: default */
19766/***/ (function(module, __webpack_exports__, __webpack_require__) {
19767
19768"use strict";
19769__webpack_require__.r(__webpack_exports__);
19770/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Heightline; });
19771/* harmony import */ var _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jquery-shim.js */ "./assets/js/app/jquery-shim.js");
19772/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils.js */ "./assets/js/app/utils.js");
19773/* harmony import */ var imagesloaded__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! imagesloaded */ "../node_modules/imagesloaded/imagesloaded.js");
19774/* harmony import */ var imagesloaded__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(imagesloaded__WEBPACK_IMPORTED_MODULE_2__);
19775function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
19776function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
19777function _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, _toPropertyKey(descriptor.key), descriptor); } }
19778function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
19779function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
19780function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
19781/*
19782 * ====================================================================
19783 * Grow Template
19784 * @package  Grow Template
19785 * @author   GrowGroup.Inc <[email protected]>
19786 * @license  MIT Licence
19787 * ====================================================================
19788 *
19789 * # example:
19790 * <div class="js-heightline"></div>
19791 * <div class="js-heightline"></div>
19792 * <div class="js-heightline"></div>
19793 *
19794 * or
19795 *
19796 * <div class="c-example" data-heightline-group="example1"></div>
19797 * <div class="c-example" data-heightline-group="example1"></div>
19798 * <div class="c-example" data-heightline-group="example1"></div>
19799 * <div class="c-example" data-heightline-group="example2"></div>
19800 * <div class="c-example" data-heightline-group="example2"></div>
19801 * <div class="c-example" data-heightline-group="example2"></div>
19802 *
19803 */
19804
19805
19806
19807imagesloaded__WEBPACK_IMPORTED_MODULE_2___default.a.makeJQueryPlugin(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"]);
19808var util = new _utils_js__WEBPACK_IMPORTED_MODULE_1__["default"]();
19809var defaultOptions = {
19810  columns: 3,
19811  selector: ".js-heightline",
19812  dataAttribute: "heightline-group",
19813  property: "minHeight",
19814  // or min-height
19815  mobile: true,
19816  responsive: {
19817    "640": {
19818      columns: 2
19819    }
19820  }
19821};
19822var Heightline = /*#__PURE__*/function () {
19823  /**
19824   * 初期化
19825   * @param options
19826   */
19827  function Heightline(options) {
19828    _classCallCheck(this, Heightline);
19829    this.options = _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].extend(defaultOptions, options);
19830    this.init();
19831  }
19832
19833  /**
19834   * 初期化
19835   */
19836  return _createClass(Heightline, [{
19837    key: "init",
19838    value: function init() {
19839      var _this = this;
19840      // ターゲットとなる要素をセットする
19841
19842      this.elements = document.querySelectorAll(this.options.selector);
19843      this.bulkElements = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])("*[data-" + this.options.dataAttribute + "]");
19844      // 最大の高さを格納
19845      this.maxHeight = 0;
19846      this.currentColumns = 0;
19847      this.setResposiveOption();
19848      if (this.options.mobile === false && util.isMobile()) {
19849        return false;
19850      }
19851      Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.options.selector + "," + "*[data-" + this.options.dataAttribute + "]").imagesLoaded(function () {
19852        _this.run();
19853        _this.bulkRun();
19854      });
19855    }
19856
19857    /**
19858     * レスポンシブの設定
19859     */
19860  }, {
19861    key: "setResposiveOption",
19862    value: function setResposiveOption() {
19863      if (this.options.responsive) {
19864        for (var width in this.options.responsive) {
19865          if (screen.width < width) {
19866            this.options = _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].extend(this.options.responsive[width], this.options);
19867          }
19868        }
19869      }
19870    }
19871
19872    /**
19873     * 実行する
19874     */
19875  }, {
19876    key: "run",
19877    value: function run() {
19878      var tempElements = [];
19879      var currentColumns = 0;
19880      var columns = this.options.columns;
19881      for (var i = 0; i < this.elements.length; i++) {
19882        var element = this.elements[i];
19883        if (this.maxHeight < element.clientHeight) {
19884          this.maxHeight = element.clientHeight;
19885        }
19886        element.originalHeight = element.clientHeight;
19887        tempElements.push(element);
19888        currentColumns++;
19889        // カラムを判定し、最後のカラムだったら実行する
19890        if (columns && (currentColumns % columns === 0 || i + 1 === this.elements.length)) {
19891          for (var it = 0; it < tempElements.length; it++) {
19892            tempElements[it].style[this.options.property] = this.maxHeight + "px";
19893          }
19894          this.maxHeight = 0;
19895          tempElements = [];
19896        }
19897      }
19898
19899      // カラムが指定されていない時
19900      if (typeof columns === "undefined" || columns) {
19901        for (var i = 0; i < this.elements.length; i++) {
19902          this.elements[i].style[this.options.property] = this.maxHeight + "px";
19903        }
19904      }
19905    }
19906
19907    /**
19908     * データ属性のグループに応じて高さをあわせる
19909     */
19910  }, {
19911    key: "bulkRun",
19912    value: function bulkRun() {
19913      var els = {};
19914      var elColumn = this.options.columns;
19915      var self = this;
19916      for (var i = 0; i < this.bulkElements.length; i++) {
19917        var el = this.bulkElements[i];
19918        var groupKey = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(el).data(this.options.dataAttribute);
19919        var groupcolumns = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(el).data("heightline-column");
19920        if (!_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].isArray(els[groupKey])) {
19921          els[groupKey] = [];
19922        }
19923        if (typeof groupcolumns === "undefined") {
19924          groupcolumns = elColumn;
19925        }
19926        els[groupKey].push({
19927          columns: groupcolumns,
19928          el: el
19929        });
19930      }
19931      for (var key in els) {
19932        var tempElements = [];
19933        var currentColumns = 0;
19934        var columns;
19935        var groupEl = els[key];
19936        for (var gi = 0; gi < groupEl.length; gi++) {
19937          var singleEl = groupEl[gi].el;
19938          if (this.maxHeight < singleEl.clientHeight) {
19939            this.maxHeight = singleEl.clientHeight;
19940          }
19941          singleEl.originalHeight = singleEl.clientHeight;
19942          tempElements.push(singleEl);
19943          columns = groupEl[gi].columns;
19944          currentColumns++;
19945          if (columns && (currentColumns % columns === 0 || i + 1 === tempElements.length)) {
19946            for (var it = 0; it < tempElements.length; it++) {
19947              tempElements[it].style[this.options.property] = this.maxHeight + "px";
19948            }
19949            this.maxHeight = 0;
19950            tempElements = [];
19951          }
19952        }
19953        if (typeof columns === "undefined" || columns) {
19954          for (var gi = 0; gi < tempElements.length; gi++) {
19955            Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(tempElements[gi]).css(this.options.property, this.maxHeight + "px");
19956          }
19957        }
19958        this.maxHeight = 0;
19959      }
19960    }
19961
19962    /**
19963     * リセット
19964     */
19965  }, {
19966    key: "reset",
19967    value: function reset() {
19968      for (var i = 0; i < this.elements.length; i++) {
19969        this.elements[i].style[this.options.property] = this.elements[i].originalHeight + "px";
19970      }
19971    }
19972  }]);
19973}();
19974
19975
19976/***/ }),
19977
19978/***/ "./assets/js/app/jquery-shim.js":
19979/*!**************************************!*\
19980  !*** ./assets/js/app/jquery-shim.js ***!
19981  \**************************************/
19982/*! exports provided: default */
19983/***/ (function(module, __webpack_exports__, __webpack_require__) {
19984
19985"use strict";
19986__webpack_require__.r(__webpack_exports__);
19987/* WEBPACK VAR INJECTION */(function(__webpack_provided_window_dot_jQuery) {var $ = __webpack_provided_window_dot_jQuery;
19988/* harmony default export */ __webpack_exports__["default"] = ($);
19989/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! jquery */ "../node_modules/jquery/dist/jquery.js")))
19990
19991/***/ }),
19992
19993/***/ "./assets/js/app/responsive-table.js":
19994/*!*******************************************!*\
19995  !*** ./assets/js/app/responsive-table.js ***!
19996  \*******************************************/
19997/*! exports provided: default */
19998/***/ (function(module, __webpack_exports__, __webpack_require__) {
19999
20000"use strict";
20001__webpack_require__.r(__webpack_exports__);
20002/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ResponsiveTable; });
20003/* harmony import */ var _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jquery-shim.js */ "./assets/js/app/jquery-shim.js");
20004function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
20005function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
20006function _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, _toPropertyKey(descriptor.key), descriptor); } }
20007function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
20008function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
20009function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
20010/*
20011 * ====================================================================
20012 * Grow Template
20013 * @package  Grow Template
20014 * @author   GrowGroup.Inc <[email protected]>
20015 * @license  MIT Licence
20016 * ====================================================================
20017 *
20018 * # example:
20019 * <table class="c-table js-table">
20020 *     <tbody>
20021 *         <tr>
20022 *             <th>
20023 *                 title
20024 *             </th>
20025 *             <td>
20026 *                 content
20027 *             </td>
20028 *         </tr>
20029 *     </tbody>
20030 * </table>
20031 *
20032 */
20033
20034var defaultOptions = {
20035  selector: ".js-table,.tablepress"
20036};
20037var ResponsiveTable = /*#__PURE__*/function () {
20038  function ResponsiveTable(options) {
20039    _classCallCheck(this, ResponsiveTable);
20040    this.options = _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].extend(defaultOptions, options);
20041    this.init();
20042  }
20043
20044  /**
20045   * 初期化
20046   */
20047  return _createClass(ResponsiveTable, [{
20048    key: "init",
20049    value: function init() {
20050      this.tables = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.options.selector);
20051      this.run();
20052    }
20053
20054    /**
20055     * 実行
20056     */
20057  }, {
20058    key: "run",
20059    value: function run() {
20060      for (var i = 0; i < this.tables.length; i++) {
20061        var wrapper = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<div class="js-responsive-table"></div>');
20062        var table = this.tables[i];
20063        wrapper.append(Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(table).clone());
20064        Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(table).after(wrapper);
20065        Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(table).remove();
20066      }
20067    }
20068  }]);
20069}();
20070
20071
20072/***/ }),
20073
20074/***/ "./assets/js/app/slidebar.js":
20075/*!***********************************!*\
20076  !*** ./assets/js/app/slidebar.js ***!
20077  \***********************************/
20078/*! exports provided: default */
20079/***/ (function(module, __webpack_exports__, __webpack_require__) {
20080
20081"use strict";
20082__webpack_require__.r(__webpack_exports__);
20083/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Slidebar; });
20084/* harmony import */ var _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jquery-shim.js */ "./assets/js/app/jquery-shim.js");
20085function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
20086function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
20087function _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, _toPropertyKey(descriptor.key), descriptor); } }
20088function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
20089function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
20090function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
20091/*
20092 * ====================================================================
20093 * Grow Template
20094 * @package  Grow Template
20095 * @author   GrowGroup.Inc <[email protected]>
20096 * @license  MIT Licence
20097 * ====================================================================
20098 *
20099 * # example:
20100 *
20101 * <div class="js-slidebar-menu">
20102 *    <ul>
20103 *        <li>menu</li>
20104 *        <li>menu</li>
20105 *        <li>menu</li>
20106 *    </ul>
20107 * </div>
20108 *
20109 * <a href="#" class="js-slidebar-button"><i class="fa fa-bars"></i></a>
20110 *
20111 * <div class="js-slidebar-container">
20112 *     content
20113 * </div>
20114 *
20115 */
20116
20117
20118
20119/**
20120 * デフォルトオプション
20121 * @type {{}}
20122 */
20123var defaultOptions = {
20124  containerSelector: '.js-slidebar-container',
20125  buttonSelector: '.js-slidebar-button',
20126  menuSelector: '.js-slidebar-menu',
20127  slideSpeed: 500
20128};
20129var Slidebar = /*#__PURE__*/function () {
20130  function Slidebar(options) {
20131    _classCallCheck(this, Slidebar);
20132    // オプションをセット
20133    this.options = _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].extend(defaultOptions, options);
20134    // オープン
20135    this.isActive = false;
20136    this.init();
20137  }
20138
20139  /**
20140   * 初期化
20141   */
20142  return _createClass(Slidebar, [{
20143    key: "init",
20144    value: function init() {
20145      this.menu = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.options.menuSelector);
20146      this.button = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.options.buttonSelector);
20147      this.container = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.options.containerSelector);
20148      this.trigger();
20149      this.bodyTrigger();
20150      this.toggle = this.toggle.bind(this);
20151      Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])("body").addClass('slidebar-init');
20152    }
20153
20154    /**
20155     * クリック時のトリガー
20156     */
20157  }, {
20158    key: "trigger",
20159    value: function trigger() {
20160      var self = this;
20161      Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(document).on('click', this.options.buttonSelector, function (e) {
20162        e.preventDefault();
20163        self.toggle();
20164      });
20165    }
20166
20167    /**
20168     * 開閉動作
20169     */
20170  }, {
20171    key: "toggle",
20172    value: function toggle() {
20173      if (this.isActive === false) {
20174        this.open();
20175      } else {
20176        this.close();
20177      }
20178    }
20179  }, {
20180    key: "bodyTrigger",
20181    value: function bodyTrigger() {
20182      var self = this;
20183      Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(document).on('click', this.options.containerSelector, function (e) {
20184        if (self.isActive) {
20185          self.close();
20186        }
20187      });
20188    }
20189  }, {
20190    key: "open",
20191    value: function open() {
20192      Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])("body").addClass('is-slidebar-active');
20193      this.isActive = true;
20194    }
20195  }, {
20196    key: "close",
20197    value: function close() {
20198      Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])("body").removeClass('is-slidebar-active');
20199      this.isActive = false;
20200    }
20201  }]);
20202}();
20203
20204
20205/***/ }),
20206
20207/***/ "./assets/js/app/tab.js":
20208/*!******************************!*\
20209  !*** ./assets/js/app/tab.js ***!
20210  \******************************/
20211/*! exports provided: default */
20212/***/ (function(module, __webpack_exports__, __webpack_require__) {
20213
20214"use strict";
20215__webpack_require__.r(__webpack_exports__);
20216/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Tab; });
20217/* harmony import */ var _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jquery-shim.js */ "./assets/js/app/jquery-shim.js");
20218function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
20219function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
20220function _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, _toPropertyKey(descriptor.key), descriptor); } }
20221function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
20222function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
20223function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
20224/*
20225 * ====================================================================
20226 * Grow Template
20227 * @package  Grow Template
20228 * @author   GrowGroup.Inc <[email protected]>
20229 * @license  MIT Licence
20230 * ====================================================================
20231 */
20232
20233var defaultOptions = {
20234  selector: '.js-tabs',
20235  // 実行するタブを包括するセレクタ
20236  activeClass: 'is-active',
20237  // 有効時に付与する class
20238  navsClass: '.c-tabs__navs,.js-tabs-nav',
20239  // ナビゲーションのクラス
20240  navTargetAttr: 'data-tab-target',
20241  paneNameAttr: 'data-tab-name',
20242  paneClass: '.c-tabs__content,.js-tabs-content'
20243};
20244var Tab = /*#__PURE__*/function () {
20245  function Tab(options) {
20246    _classCallCheck(this, Tab);
20247    this.$tabs = null;
20248    this.options = _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].extend(options, defaultOptions);
20249    this.init();
20250  }
20251
20252  /**
20253   * 初期化
20254   */
20255  return _createClass(Tab, [{
20256    key: "init",
20257    value: function init() {
20258      this.$tabs = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.options.selector);
20259      for (var i = 0; i < this.$tabs.length; i++) {
20260        var $tab = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.$tabs[i]);
20261        var $navs = $tab.find('*[' + this.options.navTargetAttr + ']');
20262        var $panes = $tab.find('*[' + this.options.paneNameAttr + ']');
20263        if (!$navs.eq(0).hasClass(this.options.activeClass)) {
20264          $navs.eq(0).addClass(this.options.activeClass);
20265        }
20266        if (!$panes.eq(0).hasClass(this.options.activeClass)) {
20267          $panes.eq(0).addClass(this.options.activeClass);
20268        }
20269        this.onClick($navs, $panes);
20270      }
20271    }
20272
20273    /**
20274     * クリック時の動作
20275     */
20276  }, {
20277    key: "onClick",
20278    value: function onClick($navs, $panes) {
20279      var self = this;
20280      $navs.on('click', function (e) {
20281        e.preventDefault();
20282        $panes.removeClass(self.options.activeClass);
20283        $navs.removeClass(self.options.activeClass);
20284        Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this).addClass(self.options.activeClass);
20285        var targetName = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this).attr(self.options.navTargetAttr);
20286        for (var i = 0; i < $panes.length; i++) {
20287          if (targetName === Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])($panes[i]).attr(self.options.paneNameAttr)) {
20288            Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])($panes[i]).addClass(self.options.activeClass);
20289          }
20290        }
20291      });
20292    }
20293  }]);
20294}();
20295
20296
20297/***/ }),
20298
20299/***/ "./assets/js/app/utils.js":
20300/*!********************************!*\
20301  !*** ./assets/js/app/utils.js ***!
20302  \********************************/
20303/*! exports provided: default */
20304/***/ (function(module, __webpack_exports__, __webpack_require__) {
20305
20306"use strict";
20307__webpack_require__.r(__webpack_exports__);
20308/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Utils; });
20309/* harmony import */ var _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jquery-shim.js */ "./assets/js/app/jquery-shim.js");
20310function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
20311function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
20312function _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, _toPropertyKey(descriptor.key), descriptor); } }
20313function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
20314function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
20315function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
20316/*
20317 * ====================================================================
20318 * Grow Template
20319 * @package  Grow Template
20320 * @author   GrowGroup.Inc <[email protected]>
20321 * @license  MIT Licence
20322 * ====================================================================
20323 */
20324
20325
20326var toString = Object.prototype.toString;
20327var nativeIsArray = Array.isArray;
20328var nativeKeys = Object.keys;
20329var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
20330var Utils = /*#__PURE__*/function () {
20331  function Utils() {
20332    var _this = this;
20333    _classCallCheck(this, Utils);
20334    _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function (key, name) {
20335      _this['is' + name] = function (obj) {
20336        return toString.call(obj) === '[object ' + name + ']';
20337      };
20338    });
20339  }
20340
20341  /**
20342   * 単位を変換
20343   * @param i
20344   * @param units
20345   */
20346  return _createClass(Utils, [{
20347    key: "unit",
20348    value: function unit(i, units) {
20349      if (typeof i === "string" && !i.match(/^[\-0-9\.]+$/)) {
20350        return i;
20351      } else {
20352        return "" + i + units;
20353      }
20354    }
20355
20356    /**
20357     *
20358     * 配列かどうか
20359     * @param collection
20360     * @returns {boolean}
20361     */
20362  }, {
20363    key: "isArrayLike",
20364    value: function isArrayLike(collection) {
20365      var length = collection.length;
20366      return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;
20367    }
20368
20369    /**
20370     * オブジェクトかどうか
20371     * @param obj
20372     * @returns {boolean}
20373     */
20374  }, {
20375    key: "isObject",
20376    value: function isObject(obj) {
20377      var type = _typeof(obj);
20378      return type === 'function' || type === 'object' && !!obj;
20379    }
20380
20381    /**
20382     * 配列か判別
20383     * @type {*|Function}
20384     */
20385  }, {
20386    key: "isArray",
20387    value: function isArray(obj) {
20388      return nativeIsArray || function (obj) {
20389        return toString.call(obj) === '[object Array]';
20390      };
20391    }
20392  }, {
20393    key: "keys",
20394    value: function keys(obj) {
20395      if (!this.isObject(obj)) return [];
20396      if (nativeKeys) return nativeKeys(obj);
20397      var keys = [];
20398      for (var key in obj) if (_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].inArray(obj, key)) keys.push(key);
20399      return keys;
20400    }
20401
20402    /**
20403     * オブジェクトが空かどうか判断
20404     * @param obj
20405     * @returns {boolean}
20406     */
20407  }, {
20408    key: "isEmpty",
20409    value: function isEmpty(obj) {
20410      if (obj == null) return true;
20411      if (this.isArrayLike(obj) && (this.isArray(obj) || this.isString(obj) || this.isArguments(obj))) return obj.length === 0;
20412      return this.keys(obj).length === 0;
20413    }
20414  }, {
20415    key: "isMobile",
20416    value: function isMobile() {
20417      var ua = navigator.userAgent;
20418      if (screen.width < 768) {
20419        return true;
20420      }
20421      var isMobile = {
20422        Android: function Android() {
20423          return ua.match(/Android/i);
20424        },
20425        BlackBerry: function BlackBerry() {
20426          return ua.match(/BlackBerry/i);
20427        },
20428        iPhone: function iPhone() {
20429          return ua.match(/iPhone/i);
20430        },
20431        Opera: function Opera() {
20432          return ua.match(/Opera Mini/i);
20433        },
20434        Windows: function Windows() {
20435          return ua.match(/IEMobile/i);
20436        },
20437        any: function any() {
20438          return isMobile.Android() || isMobile.BlackBerry() || isMobile.iPhone() || isMobile.Opera() || isMobile.Windows();
20439        }
20440      };
20441      if (!this.isEmpty(isMobile.any())) {
20442        return true;
20443      }
20444      return false;
20445    }
20446
20447    /**
20448     * クエリをパース
20449     * @param string
20450     * @returns {{}}
20451     */
20452  }, {
20453    key: "parseQueryString",
20454    value: function parseQueryString(string) {
20455      var parsed = {};
20456      string = string !== undefined ? string : window.location.search;
20457      if (typeof string === "string" && string.length > 0) {
20458        if (string[0] === '?') {
20459          string = string.substring(1);
20460        }
20461        string = string.split('&');
20462        for (var i = 0, length = string.length; i < length; i++) {
20463          var element = string[i],
20464            eqPos = element.indexOf('='),
20465            keyValue,
20466            elValue;
20467          if (eqPos >= 0) {
20468            keyValue = element.substr(0, eqPos);
20469            elValue = element.substr(eqPos + 1);
20470          } else {
20471            keyValue = element;
20472            elValue = '';
20473          }
20474          elValue = decodeURIComponent(elValue);
20475          if (parsed[keyValue] === undefined) {
20476            parsed[keyValue] = elValue;
20477          } else if (parsed[keyValue] instanceof Array) {
20478            parsed[keyValue].push(elValue);
20479          } else {
20480            parsed[keyValue] = [parsed[keyValue], elValue];
20481          }
20482        }
20483      }
20484      return parsed;
20485    }
20486
20487    /**
20488     * クエリを指定したキーから取得する
20489     * @param key
20490     * @param string
20491     * @returns {boolean}
20492     */
20493  }, {
20494    key: "getQueryString",
20495    value: function getQueryString(key, string) {
20496      var string = string !== undefined ? string : window.location.search;
20497      var queries = this.parseQueryString();
20498      var match = false;
20499      _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].each(queries, function (qkey, value) {
20500        if (key === qkey) {
20501          match = value;
20502          return false;
20503        }
20504      });
20505      return match;
20506    }
20507  }, {
20508    key: "requestAnimationFrame",
20509    value: function requestAnimationFrame() {
20510      var requestAnimFrame = window.requestAnimationFrame;
20511      var lastTime = Date.now();
20512      if (this.isMobile() || !requestAnimFrame) {
20513        requestAnimFrame = function requestAnimFrame(callback) {
20514          var deltaTime = Date.now() - lastTime;
20515          var delay = Math.max(0, 1000 / 60 - deltaTime);
20516          return window.setTimeout(function () {
20517            lastTime = Date.now();
20518            callback();
20519          }, delay);
20520        };
20521      }
20522      return requestAnimFrame;
20523    }
20524  }]);
20525}();
20526
20527
20528/***/ })
20528,
20529
20530/***/ 0:
20531/*!********************************!*\
20532  !*** ./util.inspect (ignored) ***!
20533  \********************************/
20534/*! no static exports found */
20535/***/ (function(module, exports) {
20536
20537/* (ignored) */
20538
20539/***/ })
20540
20541/******/ });
20542//# sourceMappingURL=app.js.map

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