PageSourceSearch

https://www.renewrome.com/etc.clientlibs/acea-corporate/clientlibs…-31e44e843109658d90b8b6f48d9a69eb-lc.min.js

js renewrome.com collected 2026-10-04 03:31:25 UTC 590,457 bytes, 18,422 lines download raw bytes

1/******/ (function() { // webpackBootstrap
2/******/ 	var __webpack_modules__ = ({
3
vendor: 9,994 bytes, lines 4-227
4/***/ "./node_modules/@popperjs/core/lib/createPopper.js":
5/*!*********************************************************!*\
6  !*** ./node_modules/@popperjs/core/lib/createPopper.js ***!
7  \*********************************************************/
8/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
9
10"use strict";
11__webpack_require__.r(__webpack_exports__);
12/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13/* harmony export */   createPopper: function() { return /* binding */ createPopper; },
14/* harmony export */   detectOverflow: function() { return /* reexport safe */ _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_8__["default"]; },
15/* harmony export */   popperGenerator: function() { return /* binding */ popperGenerator; }
16/* harmony export */ });
17/* harmony import */ var _dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dom-utils/getCompositeRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js");
18/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js");
19/* harmony import */ var _dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dom-utils/listScrollParents.js */ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js");
20/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js");
21/* harmony import */ var _utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/orderModifiers.js */ "./node_modules/@popperjs/core/lib/utils/orderModifiers.js");
22/* harmony import */ var _utils_debounce_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/debounce.js */ "./node_modules/@popperjs/core/lib/utils/debounce.js");
23/* harmony import */ var _utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/mergeByName.js */ "./node_modules/@popperjs/core/lib/utils/mergeByName.js");
24/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
25/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
26
27
28
29
30
31
32
33
34
35var DEFAULT_OPTIONS = {
36  placement: 'bottom',
37  modifiers: [],
38  strategy: 'absolute'
39};
40
41function areValidElements() {
42  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
43    args[_key] = arguments[_key];
44  }
45
46  return !args.some(function (element) {
47    return !(element && typeof element.getBoundingClientRect === 'function');
48  });
49}
50
51function popperGenerator(generatorOptions) {
52  if (generatorOptions === void 0) {
53    generatorOptions = {};
54  }
55
56  var _generatorOptions = generatorOptions,
57      _generatorOptions$def = _generatorOptions.defaultModifiers,
58      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,
59      _generatorOptions$def2 = _generatorOptions.defaultOptions,
60      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
61  return function createPopper(reference, popper, options) {
62    if (options === void 0) {
63      options = defaultOptions;
64    }
65
66    var state = {
67      placement: 'bottom',
68      orderedModifiers: [],
69      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
70      modifiersData: {},
71      elements: {
72        reference: reference,
73        popper: popper
74      },
75      attributes: {},
76      styles: {}
77    };
78    var effectCleanupFns = [];
79    var isDestroyed = false;
80    var instance = {
81      state: state,
82      setOptions: function setOptions(setOptionsAction) {
83        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;
84        cleanupModifierEffects();
85        state.options = Object.assign({}, defaultOptions, state.options, options);
86        state.scrollParents = {
87          reference: (0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(reference) ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__["default"])(reference) : reference.contextElement ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__["default"])(reference.contextElement) : [],
88          popper: (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__["default"])(popper)
89        }; // Orders the modifiers based on their dependencies and `phase`
90        // properties
91
92        var orderedModifiers = (0,_utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_3__["default"])([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers
93
94        state.orderedModifiers = orderedModifiers.filter(function (m) {
95          return m.enabled;
96        });
97        runModifierEffects();
98        return instance.update();
99      },
100      // Sync update – it will always be executed, even if not necessary. This
101      // is useful for low frequency updates where sync behavior simplifies the
102      // logic.
103      // For high frequency updates (e.g. `resize` and `scroll` events), always
104      // prefer the async Popper#update method
105      forceUpdate: function forceUpdate() {
106        if (isDestroyed) {
107          return;
108        }
109
110        var _state$elements = state.elements,
111            reference = _state$elements.reference,
112            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements
113        // anymore
114
115        if (!areValidElements(reference, popper)) {
116          return;
117        } // Store the reference and popper rects to be read by modifiers
118
119
120        state.rects = {
121          reference: (0,_dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_4__["default"])(reference, (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(popper), state.options.strategy === 'fixed'),
122          popper: (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__["default"])(popper)
123        }; // Modifiers have the ability to reset the current update cycle. The
124        // most common use case for this is the `flip` modifier changing the
125        // placement, which then needs to re-run all the modifiers, because the
126        // logic was previously ran for the previous placement and is therefore
127        // stale/incorrect
128
129        state.reset = false;
130        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier
131        // is filled with the initial data specified by the modifier. This means
132        // it doesn't persist and is fresh on each update.
133        // To ensure persistent data, use `${name}#persistent`
134
135        state.orderedModifiers.forEach(function (modifier) {
136          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
137        });
138
139        for (var index = 0; index < state.orderedModifiers.length; index++) {
140          if (state.reset === true) {
141            state.reset = false;
142            index = -1;
143            continue;
144          }
145
146          var _state$orderedModifie = state.orderedModifiers[index],
147              fn = _state$orderedModifie.fn,
148              _state$orderedModifie2 = _state$orderedModifie.options,
149              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,
150              name = _state$orderedModifie.name;
151
152          if (typeof fn === 'function') {
153            state = fn({
154              state: state,
155              options: _options,
156              name: name,
157              instance: instance
158            }) || state;
159          }
160        }
161      },
162      // Async and optimistically optimized update – it will not be executed if
163      // not necessary (debounced to run at most once-per-tick)
164      update: (0,_utils_debounce_js__WEBPACK_IMPORTED_MODULE_7__["default"])(function () {
165        return new Promise(function (resolve) {
166          instance.forceUpdate();
167          resolve(state);
168        });
169      }),
170      destroy: function destroy() {
171        cleanupModifierEffects();
172        isDestroyed = true;
173      }
174    };
175
176    if (!areValidElements(reference, popper)) {
177      return instance;
178    }
179
180    instance.setOptions(options).then(function (state) {
181      if (!isDestroyed && options.onFirstUpdate) {
182        options.onFirstUpdate(state);
183      }
184    }); // Modifiers have the ability to execute arbitrary code before the first
185    // update cycle runs. They will be executed in the same order as the update
186    // cycle. This is useful when a modifier adds some persistent data that
187    // other modifiers need to use, but the modifier is run after the dependent
188    // one.
189
190    function runModifierEffects() {
191      state.orderedModifiers.forEach(function (_ref) {
192        var name = _ref.name,
193            _ref$options = _ref.options,
194            options = _ref$options === void 0 ? {} : _ref$options,
195            effect = _ref.effect;
196
197        if (typeof effect === 'function') {
198          var cleanupFn = effect({
199            state: state,
200            name: name,
201            instance: instance,
202            options: options
203          });
204
205          var noopFn = function noopFn() {};
206
207          effectCleanupFns.push(cleanupFn || noopFn);
208        }
209      });
210    }
211
212    function cleanupModifierEffects() {
213      effectCleanupFns.forEach(function (fn) {
214        return fn();
215      });
216      effectCleanupFns = [];
217    }
218
219    return instance;
220  };
221}
222var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules
223
224
225
226/***/ }),
227
vendor: 1,438 bytes, lines 228-265
228/***/ "./node_modules/@popperjs/core/lib/dom-utils/contains.js":
229/*!***************************************************************!*\
230  !*** ./node_modules/@popperjs/core/lib/dom-utils/contains.js ***!
231  \***************************************************************/
232/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
233
234"use strict";
235__webpack_require__.r(__webpack_exports__);
236/* harmony export */ __webpack_require__.d(__webpack_exports__, {
237/* harmony export */   "default": function() { return /* binding */ contains; }
238/* harmony export */ });
239/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
240
241function contains(parent, child) {
242  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method
243
244  if (parent.contains(child)) {
245    return true;
246  } // then fallback to custom implementation with Shadow DOM support
247  else if (rootNode && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(rootNode)) {
248      var next = child;
249
250      do {
251        if (next && parent.isSameNode(next)) {
252          return true;
253        } // $FlowFixMe[prop-missing]: need a better way to handle this...
254
255
256        next = next.parentNode || next.host;
257      } while (next);
258    } // Give up, the result is false
259
260
261  return false;
262}
263
264/***/ }),
265
vendor: 2,826 bytes, lines 266-324
266/***/ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js":
267/*!****************************************************************************!*\
268  !*** ./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js ***!
269  \****************************************************************************/
270/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
271
272"use strict";
273__webpack_require__.r(__webpack_exports__);
274/* harmony export */ __webpack_require__.d(__webpack_exports__, {
275/* harmony export */   "default": function() { return /* binding */ getBoundingClientRect; }
276/* harmony export */ });
277/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
278/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");
279/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
280/* harmony import */ var _isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isLayoutViewport.js */ "./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js");
281
282
283
284
285function getBoundingClientRect(element, includeScale, isFixedStrategy) {
286  if (includeScale === void 0) {
287    includeScale = false;
288  }
289
290  if (isFixedStrategy === void 0) {
291    isFixedStrategy = false;
292  }
293
294  var clientRect = element.getBoundingClientRect();
295  var scaleX = 1;
296  var scaleY = 1;
297
298  if (includeScale && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element)) {
299    scaleX = element.offsetWidth > 0 ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(clientRect.width) / element.offsetWidth || 1 : 1;
300    scaleY = element.offsetHeight > 0 ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(clientRect.height) / element.offsetHeight || 1 : 1;
301  }
302
303  var _ref = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element) : window,
304      visualViewport = _ref.visualViewport;
305
306  var addVisualOffsets = !(0,_isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_3__["default"])() && isFixedStrategy;
307  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;
308  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;
309  var width = clientRect.width / scaleX;
310  var height = clientRect.height / scaleY;
311  return {
312    width: width,
313    height: height,
314    top: y,
315    right: x + width,
316    bottom: y + height,
317    left: x,
318    x: x,
319    y: y
320  };
321}
322
323/***/ }),
324
vendor: 6,936 bytes, lines 325-422
325/***/ "./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js":
326/*!**********************************************************************!*\
327  !*** ./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js ***!
328  \**********************************************************************/
329/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
330
331"use strict";
332__webpack_require__.r(__webpack_exports__);
333/* harmony export */ __webpack_require__.d(__webpack_exports__, {
334/* harmony export */   "default": function() { return /* binding */ getClippingRect; }
335/* harmony export */ });
336/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
337/* harmony import */ var _getViewportRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getViewportRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js");
338/* harmony import */ var _getDocumentRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getDocumentRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js");
339/* harmony import */ var _listScrollParents_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./listScrollParents.js */ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js");
340/* harmony import */ var _getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js");
341/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
342/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js");
343/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
344/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js");
345/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js");
346/* harmony import */ var _contains_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./contains.js */ "./node_modules/@popperjs/core/lib/dom-utils/contains.js");
347/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");
348/* harmony import */ var _utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/rectToClientRect.js */ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js");
349/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365function getInnerBoundingClientRect(element, strategy) {
366  var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element, false, strategy === 'fixed');
367  rect.top = rect.top + element.clientTop;
368  rect.left = rect.left + element.clientLeft;
369  rect.bottom = rect.top + element.clientHeight;
370  rect.right = rect.left + element.clientWidth;
371  rect.width = element.clientWidth;
372  rect.height = element.clientHeight;
373  rect.x = rect.left;
374  rect.y = rect.top;
375  return rect;
376}
377
378function getClientRectFromMixedType(element, clippingParent, strategy) {
379  return clippingParent === _enums_js__WEBPACK_IMPORTED_MODULE_1__.viewport ? (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_getViewportRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element, strategy)) : (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_getDocumentRect_js__WEBPACK_IMPORTED_MODULE_5__["default"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_6__["default"])(element)));
380} // A "clipping parent" is an overflowable container with the characteristic of
381// clipping (or hiding) overflowing elements with a position different from
382// `initial`
383
384
385function getClippingParents(element) {
386  var clippingParents = (0,_listScrollParents_js__WEBPACK_IMPORTED_MODULE_7__["default"])((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_8__["default"])(element));
387  var canEscapeClipping = ['absolute', 'fixed'].indexOf((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_9__["default"])(element).position) >= 0;
388  var clipperElement = canEscapeClipping && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isHTMLElement)(element) ? (0,_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__["default"])(element) : element;
389
390  if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clipperElement)) {
391    return [];
392  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
393
394
395  return clippingParents.filter(function (clippingParent) {
396    return (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clippingParent) && (0,_contains_js__WEBPACK_IMPORTED_MODULE_11__["default"])(clippingParent, clipperElement) && (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_12__["default"])(clippingParent) !== 'body';
397  });
398} // Gets the maximum area that the element is visible in due to any number of
399// clipping parents
400
401
402function getClippingRect(element, boundary, rootBoundary, strategy) {
403  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
404  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
405  var firstClippingParent = clippingParents[0];
406  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
407    var rect = getClientRectFromMixedType(element, clippingParent, strategy);
408    accRect.top = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.top, accRect.top);
409    accRect.right = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.right, accRect.right);
410    accRect.bottom = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.bottom, accRect.bottom);
411    accRect.left = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.left, accRect.left);
412    return accRect;
413  }, getClientRectFromMixedType(element, firstClippingParent, strategy));
414  clippingRect.width = clippingRect.right - clippingRect.left;
415  clippingRect.height = clippingRect.bottom - clippingRect.top;
416  clippingRect.x = clippingRect.left;
417  clippingRect.y = clippingRect.top;
418  return clippingRect;
419}
420
421/***/ }),
422
vendor: 4,372 bytes, lines 423-502
423/***/ "./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js":
424/*!***********************************************************************!*\
425  !*** ./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js ***!
426  \***********************************************************************/
427/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
428
429"use strict";
430__webpack_require__.r(__webpack_exports__);
431/* harmony export */ __webpack_require__.d(__webpack_exports__, {
432/* harmony export */   "default": function() { return /* binding */ getCompositeRect; }
433/* harmony export */ });
434/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js");
435/* harmony import */ var _getNodeScroll_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getNodeScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js");
436/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");
437/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
438/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js");
439/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
440/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js");
441/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");
442
443
444
445
446
447
448
449
450
451function isElementScaled(element) {
452  var rect = element.getBoundingClientRect();
453  var scaleX = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(rect.width) / element.offsetWidth || 1;
454  var scaleY = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(rect.height) / element.offsetHeight || 1;
455  return scaleX !== 1 || scaleY !== 1;
456} // Returns the composite rect of an element relative to its offsetParent.
457// Composite means it takes into account transforms as well as layout.
458
459
460function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
461  if (isFixed === void 0) {
462    isFixed = false;
463  }
464
465  var isOffsetParentAnElement = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent);
466  var offsetParentIsScaled = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent) && isElementScaled(offsetParent);
467  var documentElement = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(offsetParent);
468  var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])(elementOrVirtualElement, offsetParentIsScaled, isFixed);
469  var scroll = {
470    scrollLeft: 0,
471    scrollTop: 0
472  };
473  var offsets = {
474    x: 0,
475    y: 0
476  };
477
478  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
479    if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__["default"])(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
480    (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(documentElement)) {
481      scroll = (0,_getNodeScroll_js__WEBPACK_IMPORTED_MODULE_6__["default"])(offsetParent);
482    }
483
484    if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent)) {
485      offsets = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])(offsetParent, true);
486      offsets.x += offsetParent.clientLeft;
487      offsets.y += offsetParent.clientTop;
488    } else if (documentElement) {
489      offsets.x = (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_7__["default"])(documentElement);
490    }
491  }
492
493  return {
494    x: rect.left + scroll.scrollLeft - offsets.x,
495    y: rect.top + scroll.scrollTop - offsets.y,
496    width: rect.width,
497    height: rect.height
498  };
499}
500
501/***/ }),
502
vendor: 954 bytes, lines 503-521
503/***/ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js":
504/*!***********************************************************************!*\
505  !*** ./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js ***!
506  \***********************************************************************/
507/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
508
509"use strict";
510__webpack_require__.r(__webpack_exports__);
511/* harmony export */ __webpack_require__.d(__webpack_exports__, {
512/* harmony export */   "default": function() { return /* binding */ getComputedStyle; }
513/* harmony export */ });
514/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
515
516function getComputedStyle(element) {
517  return (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element).getComputedStyle(element);
518}
519
520/***/ }),
521
vendor: 1,125 bytes, lines 522-542
522/***/ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js":
523/*!*************************************************************************!*\
524  !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js ***!
525  \*************************************************************************/
526/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
527
528"use strict";
529__webpack_require__.r(__webpack_exports__);
530/* harmony export */ __webpack_require__.d(__webpack_exports__, {
531/* harmony export */   "default": function() { return /* binding */ getDocumentElement; }
532/* harmony export */ });
533/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
534
535function getDocumentElement(element) {
536  // $FlowFixMe[incompatible-return]: assume body is always available
537  return (((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]
538  element.document) || window.document).documentElement;
539}
540
541/***/ }),
542
vendor: 2,878 bytes, lines 543-590
543/***/ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js":
544/*!**********************************************************************!*\
545  !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js ***!
546  \**********************************************************************/
547/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
548
549"use strict";
550__webpack_require__.r(__webpack_exports__);
551/* harmony export */ __webpack_require__.d(__webpack_exports__, {
552/* harmony export */   "default": function() { return /* binding */ getDocumentRect; }
553/* harmony export */ });
554/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
555/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js");
556/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js");
557/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js");
558/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");
559
560
561
562
563 // Gets the entire size of the scrollable document area, even extending outside
564// of the `<html>` and `<body>` rect bounds if horizontally scrollable
565
566function getDocumentRect(element) {
567  var _element$ownerDocumen;
568
569  var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element);
570  var winScroll = (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element);
571  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
572  var width = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
573  var height = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
574  var x = -winScroll.scrollLeft + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element);
575  var y = -winScroll.scrollTop;
576
577  if ((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__["default"])(body || html).direction === 'rtl') {
578    x += (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.clientWidth, body ? body.clientWidth : 0) - width;
579  }
580
581  return {
582    width: width,
583    height: height,
584    x: x,
585    y: y
586  };
587}
588
589/***/ }),
590
vendor: 786 bytes, lines 591-610
591/***/ "./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js":
592/*!***************************************************************************!*\
593  !*** ./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js ***!
594  \***************************************************************************/
595/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
596
597"use strict";
598__webpack_require__.r(__webpack_exports__);
599/* harmony export */ __webpack_require__.d(__webpack_exports__, {
600/* harmony export */   "default": function() { return /* binding */ getHTMLElementScroll; }
601/* harmony export */ });
602function getHTMLElementScroll(element) {
603  return {
604    scrollLeft: element.scrollLeft,
605    scrollTop: element.scrollTop
606  };
607}
608
609/***/ }),
610
vendor: 1,570 bytes, lines 611-650
611/***/ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js":
612/*!********************************************************************!*\
613  !*** ./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js ***!
614  \********************************************************************/
615/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
616
617"use strict";
618__webpack_require__.r(__webpack_exports__);
619/* harmony export */ __webpack_require__.d(__webpack_exports__, {
620/* harmony export */   "default": function() { return /* binding */ getLayoutRect; }
621/* harmony export */ });
622/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js");
623 // Returns the layout rect of an element relative to its offsetParent. Layout
624// means it doesn't take into account transforms.
625
626function getLayoutRect(element) {
627  var clientRect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element); // Use the clientRect sizes if it's not been transformed.
628  // Fixes https://github.com/popperjs/popper-core/issues/1223
629
630  var width = element.offsetWidth;
631  var height = element.offsetHeight;
632
633  if (Math.abs(clientRect.width - width) <= 1) {
634    width = clientRect.width;
635  }
636
637  if (Math.abs(clientRect.height - height) <= 1) {
638    height = clientRect.height;
639  }
640
641  return {
642    x: element.offsetLeft,
643    y: element.offsetTop,
644    width: width,
645    height: height
646  };
647}
648
649/***/ }),
650
vendor: 713 bytes, lines 651-667
651/***/ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js":
652/*!******************************************************************!*\
653  !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js ***!
654  \******************************************************************/
655/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
656
657"use strict";
658__webpack_require__.r(__webpack_exports__);
659/* harmony export */ __webpack_require__.d(__webpack_exports__, {
660/* harmony export */   "default": function() { return /* binding */ getNodeName; }
661/* harmony export */ });
662function getNodeName(element) {
663  return element ? (element.nodeName || '').toLowerCase() : null;
664}
665
666/***/ }),
667
vendor: 1,744 bytes, lines 668-696
668/***/ "./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js":
669/*!********************************************************************!*\
670  !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js ***!
671  \********************************************************************/
672/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
673
674"use strict";
675__webpack_require__.r(__webpack_exports__);
676/* harmony export */ __webpack_require__.d(__webpack_exports__, {
677/* harmony export */   "default": function() { return /* binding */ getNodeScroll; }
678/* harmony export */ });
679/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js");
680/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
681/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
682/* harmony import */ var _getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getHTMLElementScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js");
683
684
685
686
687function getNodeScroll(node) {
688  if (node === (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node) || !(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(node)) {
689    return (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__["default"])(node);
690  } else {
691    return (0,_getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__["default"])(node);
692  }
693}
694
695/***/ }),
696
vendor: 4,992 bytes, lines 697-786
697/***/ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js":
698/*!**********************************************************************!*\
699  !*** ./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js ***!
700  \**********************************************************************/
701/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
702
703"use strict";
704__webpack_require__.r(__webpack_exports__);
705/* harmony export */ __webpack_require__.d(__webpack_exports__, {
706/* harmony export */   "default": function() { return /* binding */ getOffsetParent; }
707/* harmony export */ });
708/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
709/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");
710/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js");
711/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
712/* harmony import */ var _isTableElement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./isTableElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js");
713/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js");
714/* harmony import */ var _utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/userAgent.js */ "./node_modules/@popperjs/core/lib/utils/userAgent.js");
715
716
717
718
719
720
721
722
723function getTrueOffsetParent(element) {
724  if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || // https://github.com/popperjs/popper-core/issues/837
725  (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element).position === 'fixed') {
726    return null;
727  }
728
729  return element.offsetParent;
730} // `.offsetParent` reports `null` for fixed elements, while absolute elements
731// return the containing block
732
733
734function getContainingBlock(element) {
735  var isFirefox = /firefox/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__["default"])());
736  var isIE = /Trident/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__["default"])());
737
738  if (isIE && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element)) {
739    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
740    var elementCss = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element);
741
742    if (elementCss.position === 'fixed') {
743      return null;
744    }
745  }
746
747  var currentNode = (0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element);
748
749  if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(currentNode)) {
750    currentNode = currentNode.host;
751  }
752
753  while ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(currentNode) && ['html', 'body'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__["default"])(currentNode)) < 0) {
754    var css = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(currentNode); // This is non-exhaustive but covers the most common CSS properties that
755    // create a containing block.
756    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
757
758    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {
759      return currentNode;
760    } else {
761      currentNode = currentNode.parentNode;
762    }
763  }
764
765  return null;
766} // Gets the closest ancestor positioned element. Handles some edge cases,
767// such as table ancestors and cross browser bugs.
768
769
770function getOffsetParent(element) {
771  var window = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_5__["default"])(element);
772  var offsetParent = getTrueOffsetParent(element);
773
774  while (offsetParent && (0,_isTableElement_js__WEBPACK_IMPORTED_MODULE_6__["default"])(offsetParent) && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(offsetParent).position === 'static') {
775    offsetParent = getTrueOffsetParent(offsetParent);
776  }
777
778  if (offsetParent && ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__["default"])(offsetParent) === 'html' || (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__["default"])(offsetParent) === 'body' && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(offsetParent).position === 'static')) {
779    return window;
780  }
781
782  return offsetParent || getContainingBlock(element) || window;
783}
784
785/***/ }),
786
vendor: 1,920 bytes, lines 787-822
787/***/ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js":
788/*!********************************************************************!*\
789  !*** ./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js ***!
790  \********************************************************************/
791/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
792
793"use strict";
794__webpack_require__.r(__webpack_exports__);
795/* harmony export */ __webpack_require__.d(__webpack_exports__, {
796/* harmony export */   "default": function() { return /* binding */ getParentNode; }
797/* harmony export */ });
798/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");
799/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
800/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
801
802
803
804function getParentNode(element) {
805  if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element) === 'html') {
806    return element;
807  }
808
809  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle
810    // $FlowFixMe[incompatible-return]
811    // $FlowFixMe[prop-missing]
812    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
813    element.parentNode || ( // DOM Element detected
814    (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isShadowRoot)(element) ? element.host : null) || // ShadowRoot detected
815    // $FlowFixMe[incompatible-call]: HTMLElement is a Node
816    (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element) // fallback
817
818  );
819}
820
821/***/ }),
822
vendor: 1,898 bytes, lines 823-856
823/***/ "./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js":
824/*!**********************************************************************!*\
825  !*** ./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js ***!
826  \**********************************************************************/
827/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
828
829"use strict";
830__webpack_require__.r(__webpack_exports__);
831/* harmony export */ __webpack_require__.d(__webpack_exports__, {
832/* harmony export */   "default": function() { return /* binding */ getScrollParent; }
833/* harmony export */ });
834/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js");
835/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js");
836/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");
837/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
838
839
840
841
842function getScrollParent(node) {
843  if (['html', 'body', '#document'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node)) >= 0) {
844    // $FlowFixMe[incompatible-return]: assume body is always available
845    return node.ownerDocument.body;
846  }
847
848  if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(node) && (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(node)) {
849    return node;
850  }
851
852  return getScrollParent((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__["default"])(node));
853}
854
855/***/ }),
856
vendor: 2,254 bytes, lines 857-905
857/***/ "./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js":
858/*!**********************************************************************!*\
859  !*** ./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js ***!
860  \**********************************************************************/
861/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
862
863"use strict";
864__webpack_require__.r(__webpack_exports__);
865/* harmony export */ __webpack_require__.d(__webpack_exports__, {
866/* harmony export */   "default": function() { return /* binding */ getViewportRect; }
867/* harmony export */ });
868/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
869/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
870/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js");
871/* harmony import */ var _isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isLayoutViewport.js */ "./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js");
872
873
874
875
876function getViewportRect(element, strategy) {
877  var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element);
878  var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element);
879  var visualViewport = win.visualViewport;
880  var width = html.clientWidth;
881  var height = html.clientHeight;
882  var x = 0;
883  var y = 0;
884
885  if (visualViewport) {
886    width = visualViewport.width;
887    height = visualViewport.height;
888    var layoutViewport = (0,_isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_2__["default"])();
889
890    if (layoutViewport || !layoutViewport && strategy === 'fixed') {
891      x = visualViewport.offsetLeft;
892      y = visualViewport.offsetTop;
893    }
894  }
895
896  return {
897    width: width,
898    height: height,
899    x: x + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element),
900    y: y
901  };
902}
903
904/***/ }),
905
vendor: 862 bytes, lines 906-931
906/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js":
907/*!****************************************************************!*\
908  !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindow.js ***!
909  \****************************************************************/
910/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
911
912"use strict";
913__webpack_require__.r(__webpack_exports__);
914/* harmony export */ __webpack_require__.d(__webpack_exports__, {
915/* harmony export */   "default": function() { return /* binding */ getWindow; }
916/* harmony export */ });
917function getWindow(node) {
918  if (node == null) {
919    return window;
920  }
921
922  if (node.toString() !== '[object Window]') {
923    var ownerDocument = node.ownerDocument;
924    return ownerDocument ? ownerDocument.defaultView || window : window;
925  }
926
927  return node;
928}
929
930/***/ }),
931
vendor: 1,059 bytes, lines 932-956
932/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js":
933/*!**********************************************************************!*\
934  !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js ***!
935  \**********************************************************************/
936/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
937
938"use strict";
939__webpack_require__.r(__webpack_exports__);
940/* harmony export */ __webpack_require__.d(__webpack_exports__, {
941/* harmony export */   "default": function() { return /* binding */ getWindowScroll; }
942/* harmony export */ });
943/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
944
945function getWindowScroll(node) {
946  var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node);
947  var scrollLeft = win.pageXOffset;
948  var scrollTop = win.pageYOffset;
949  return {
950    scrollLeft: scrollLeft,
951    scrollTop: scrollTop
952  };
953}
954
955/***/ }),
956
vendor: 1,933 bytes, lines 957-986
957/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js":
958/*!**************************************************************************!*\
959  !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js ***!
960  \**************************************************************************/
961/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
962
963"use strict";
964__webpack_require__.r(__webpack_exports__);
965/* harmony export */ __webpack_require__.d(__webpack_exports__, {
966/* harmony export */   "default": function() { return /* binding */ getWindowScrollBarX; }
967/* harmony export */ });
968/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js");
969/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
970/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js");
971
972
973
974function getWindowScrollBarX(element) {
975  // If <html> has a CSS width greater than the viewport, then this will be
976  // incorrect for RTL.
977  // Popper 1 is broken in this case and never had a bug report so let's assume
978  // it's not an issue. I don't think anyone ever specifies width on <html>
979  // anyway.
980  // Browsers where the left scrollbar doesn't cause an issue report `0` for
981  // this (e.g. Edge 2019, IE11, Safari)
982  return (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element)).left + (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element).scrollLeft;
983}
984
985/***/ }),
986
vendor: 1,635 bytes, lines 987-1026
987/***/ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js":
988/*!*****************************************************************!*\
989  !*** ./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js ***!
990  \*****************************************************************/
991/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
992
993"use strict";
994__webpack_require__.r(__webpack_exports__);
995/* harmony export */ __webpack_require__.d(__webpack_exports__, {
996/* harmony export */   isElement: function() { return /* binding */ isElement; },
997/* harmony export */   isHTMLElement: function() { return /* binding */ isHTMLElement; },
998/* harmony export */   isShadowRoot: function() { return /* binding */ isShadowRoot; }
999/* harmony export */ });
1000/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
1001
1002
1003function isElement(node) {
1004  var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).Element;
1005  return node instanceof OwnElement || node instanceof Element;
1006}
1007
1008function isHTMLElement(node) {
1009  var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).HTMLElement;
1010  return node instanceof OwnElement || node instanceof HTMLElement;
1011}
1012
1013function isShadowRoot(node) {
1014  // IE 11 has no ShadowRoot
1015  if (typeof ShadowRoot === 'undefined') {
1016    return false;
1017  }
1018
1019  var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).ShadowRoot;
1020  return node instanceof OwnElement || node instanceof ShadowRoot;
1021}
1022
1023
1024
1025/***/ }),
1026
vendor: 969 bytes, lines 1027-1045
1027/***/ "./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js":
1028/*!***********************************************************************!*\
1029  !*** ./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js ***!
1030  \***********************************************************************/
1031/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1032
1033"use strict";
1034__webpack_require__.r(__webpack_exports__);
1035/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1036/* harmony export */   "default": function() { return /* binding */ isLayoutViewport; }
1037/* harmony export */ });
1038/* harmony import */ var _utils_userAgent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/userAgent.js */ "./node_modules/@popperjs/core/lib/utils/userAgent.js");
1039
1040function isLayoutViewport() {
1041  return !/^((?!chrome|android).)*safari/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_0__["default"])());
1042}
1043
1044/***/ }),
1045
vendor: 1,243 bytes, lines 1046-1070
1046/***/ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js":
1047/*!*********************************************************************!*\
1048  !*** ./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js ***!
1049  \*********************************************************************/
1050/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1051
1052"use strict";
1053__webpack_require__.r(__webpack_exports__);
1054/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1055/* harmony export */   "default": function() { return /* binding */ isScrollParent; }
1056/* harmony export */ });
1057/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js");
1058
1059function isScrollParent(element) {
1060  // Firefox wants us to check `-x` and `-y` variations as well
1061  var _getComputedStyle = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element),
1062      overflow = _getComputedStyle.overflow,
1063      overflowX = _getComputedStyle.overflowX,
1064      overflowY = _getComputedStyle.overflowY;
1065
1066  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
1067}
1068
1069/***/ }),
1070
vendor: 960 bytes, lines 1071-1089
1071/***/ "./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js":
1072/*!*********************************************************************!*\
1073  !*** ./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js ***!
1074  \*********************************************************************/
1075/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1076
1077"use strict";
1078__webpack_require__.r(__webpack_exports__);
1079/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1080/* harmony export */   "default": function() { return /* binding */ isTableElement; }
1081/* harmony export */ });
1082/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");
1083
1084function isTableElement(element) {
1085  return ['table', 'td', 'th'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element)) >= 0;
1086}
1087
1088/***/ }),
1089
vendor: 2,549 bytes, lines 1090-1133
1090/***/ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js":
1091/*!************************************************************************!*\
1092  !*** ./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js ***!
1093  \************************************************************************/
1094/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1095
1096"use strict";
1097__webpack_require__.r(__webpack_exports__);
1098/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1099/* harmony export */   "default": function() { return /* binding */ listScrollParents; }
1100/* harmony export */ });
1101/* harmony import */ var _getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js");
1102/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js");
1103/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
1104/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js");
1105
1106
1107
1108
1109/*
1110given a DOM element, return the list of all scroll parents, up the list of ancesors
1111until we get to the top window object. This list is what we attach scroll listeners
1112to, because if any of these parent elements scroll, we'll need to re-calculate the
1113reference element's position.
1114*/
1115
1116function listScrollParents(element, list) {
1117  var _element$ownerDocumen;
1118
1119  if (list === void 0) {
1120    list = [];
1121  }
1122
1123  var scrollParent = (0,_getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element);
1124  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
1125  var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scrollParent);
1126  var target = isBody ? [win].concat(win.visualViewport || [], (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(scrollParent) ? scrollParent : []) : scrollParent;
1127  var updatedList = list.concat(target);
1128  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
1129  updatedList.concat(listScrollParents((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__["default"])(target)));
1130}
1131
1132/***/ }),
1133
vendor: 3,563 bytes, lines 1134-1201
1134/***/ "./node_modules/@popperjs/core/lib/enums.js":
1135/*!**************************************************!*\
1136  !*** ./node_modules/@popperjs/core/lib/enums.js ***!
1137  \**************************************************/
1138/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1139
1140"use strict";
1141__webpack_require__.r(__webpack_exports__);
1142/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1143/* harmony export */   afterMain: function() { return /* binding */ afterMain; },
1144/* harmony export */   afterRead: function() { return /* binding */ afterRead; },
1145/* harmony export */   afterWrite: function() { return /* binding */ afterWrite; },
1146/* harmony export */   auto: function() { return /* binding */ auto; },
1147/* harmony export */   basePlacements: function() { return /* binding */ basePlacements; },
1148/* harmony export */   beforeMain: function() { return /* binding */ beforeMain; },
1149/* harmony export */   beforeRead: function() { return /* binding */ beforeRead; },
1150/* harmony export */   beforeWrite: function() { return /* binding */ beforeWrite; },
1151/* harmony export */   bottom: function() { return /* binding */ bottom; },
1152/* harmony export */   clippingParents: function() { return /* binding */ clippingParents; },
1153/* harmony export */   end: function() { return /* binding */ end; },
1154/* harmony export */   left: function() { return /* binding */ left; },
1155/* harmony export */   main: function() { return /* binding */ main; },
1156/* harmony export */   modifierPhases: function() { return /* binding */ modifierPhases; },
1157/* harmony export */   placements: function() { return /* binding */ placements; },
1158/* harmony export */   popper: function() { return /* binding */ popper; },
1159/* harmony export */   read: function() { return /* binding */ read; },
1160/* harmony export */   reference: function() { return /* binding */ reference; },
1161/* harmony export */   right: function() { return /* binding */ right; },
1162/* harmony export */   start: function() { return /* binding */ start; },
1163/* harmony export */   top: function() { return /* binding */ top; },
1164/* harmony export */   variationPlacements: function() { return /* binding */ variationPlacements; },
1165/* harmony export */   viewport: function() { return /* binding */ viewport; },
1166/* harmony export */   write: function() { return /* binding */ write; }
1167/* harmony export */ });
1168var top = 'top';
1169var bottom = 'bottom';
1170var right = 'right';
1171var left = 'left';
1172var auto = 'auto';
1173var basePlacements = [top, bottom, right, left];
1174var start = 'start';
1175var end = 'end';
1176var clippingParents = 'clippingParents';
1177var viewport = 'viewport';
1178var popper = 'popper';
1179var reference = 'reference';
1180var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {
1181  return acc.concat([placement + "-" + start, placement + "-" + end]);
1182}, []);
1183var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {
1184  return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
1185}, []); // modifiers that need to read the DOM
1186
1187var beforeRead = 'beforeRead';
1188var read = 'read';
1189var afterRead = 'afterRead'; // pure-logic modifiers
1190
1191var beforeMain = 'beforeMain';
1192var main = 'main';
1193var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
1194
1195var beforeWrite = 'beforeWrite';
1196var write = 'write';
1197var afterWrite = 'afterWrite';
1198var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
1199
1200/***/ }),
1201
vendor: 6,597 bytes, lines 1202-1266
1202/***/ "./node_modules/@popperjs/core/lib/index.js":
1203/*!**************************************************!*\
1204  !*** ./node_modules/@popperjs/core/lib/index.js ***!
1205  \**************************************************/
1206/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1207
1208"use strict";
1209__webpack_require__.r(__webpack_exports__);
1210/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1211/* harmony export */   afterMain: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterMain; },
1212/* harmony export */   afterRead: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterRead; },
1213/* harmony export */   afterWrite: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterWrite; },
1214/* harmony export */   applyStyles: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.applyStyles; },
1215/* harmony export */   arrow: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.arrow; },
1216/* harmony export */   auto: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.auto; },
1217/* harmony export */   basePlacements: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements; },
1218/* harmony export */   beforeMain: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeMain; },
1219/* harmony export */   beforeRead: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeRead; },
1220/* harmony export */   beforeWrite: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeWrite; },
1221/* harmony export */   bottom: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom; },
1222/* harmony export */   clippingParents: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.clippingParents; },
1223/* harmony export */   computeStyles: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.computeStyles; },
1224/* harmony export */   createPopper: function() { return /* reexport safe */ _popper_js__WEBPACK_IMPORTED_MODULE_4__.createPopper; },
1225/* harmony export */   createPopperBase: function() { return /* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_2__.createPopper; },
1226/* harmony export */   createPopperLite: function() { return /* reexport safe */ _popper_lite_js__WEBPACK_IMPORTED_MODULE_5__.createPopper; },
1227/* harmony export */   detectOverflow: function() { return /* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_3__["default"]; },
1228/* harmony export */   end: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.end; },
1229/* harmony export */   eventListeners: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.eventListeners; },
1230/* harmony export */   flip: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.flip; },
1231/* harmony export */   hide: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.hide; },
1232/* harmony export */   left: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.left; },
1233/* harmony export */   main: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.main; },
1234/* harmony export */   modifierPhases: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.modifierPhases; },
1235/* harmony export */   offset: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.offset; },
1236/* harmony export */   placements: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.placements; },
1237/* harmony export */   popper: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper; },
1238/* harmony export */   popperGenerator: function() { return /* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_2__.popperGenerator; },
1239/* harmony export */   popperOffsets: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.popperOffsets; },
1240/* harmony export */   preventOverflow: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.preventOverflow; },
1241/* harmony export */   read: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.read; },
1242/* harmony export */   reference: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.reference; },
1243/* harmony export */   right: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.right; },
1244/* harmony export */   start: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.start; },
1245/* harmony export */   top: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.top; },
1246/* harmony export */   variationPlacements: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements; },
1247/* harmony export */   viewport: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.viewport; },
1248/* harmony export */   write: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.write; }
1249/* harmony export */ });
1250/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
1251/* harmony import */ var _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/index.js */ "./node_modules/@popperjs/core/lib/modifiers/index.js");
1252/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/createPopper.js");
1253/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
1254/* harmony import */ var _popper_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./popper.js */ "./node_modules/@popperjs/core/lib/popper.js");
1255/* harmony import */ var _popper_lite_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./popper-lite.js */ "./node_modules/@popperjs/core/lib/popper-lite.js");
1256
1257 // eslint-disable-next-line import/no-unused-modules
1258
1259 // eslint-disable-next-line import/no-unused-modules
1260
1261 // eslint-disable-next-line import/no-unused-modules
1262
1263
1264
1265/***/ }),
1266
vendor: 3,532 bytes, lines 1267-1363
1267/***/ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js":
1268/*!******************************************************************!*\
1269  !*** ./node_modules/@popperjs/core/lib/modifiers/applyStyles.js ***!
1270  \******************************************************************/
1271/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1272
1273"use strict";
1274__webpack_require__.r(__webpack_exports__);
1275/* harmony import */ var _dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom-utils/getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");
1276/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
1277
1278 // This modifier takes the styles prepared by the `computeStyles` modifier
1279// and applies them to the HTMLElements such as popper and arrow
1280
1281function applyStyles(_ref) {
1282  var state = _ref.state;
1283  Object.keys(state.elements).forEach(function (name) {
1284    var style = state.styles[name] || {};
1285    var attributes = state.attributes[name] || {};
1286    var element = state.elements[name]; // arrow is optional + virtual elements
1287
1288    if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element)) {
1289      return;
1290    } // Flow doesn't support to extend this property, but it's the most
1291    // effective way to apply styles to an HTMLElement
1292    // $FlowFixMe[cannot-write]
1293
1294
1295    Object.assign(element.style, style);
1296    Object.keys(attributes).forEach(function (name) {
1297      var value = attributes[name];
1298
1299      if (value === false) {
1300        element.removeAttribute(name);
1301      } else {
1302        element.setAttribute(name, value === true ? '' : value);
1303      }
1304    });
1305  });
1306}
1307
1308function effect(_ref2) {
1309  var state = _ref2.state;
1310  var initialStyles = {
1311    popper: {
1312      position: state.options.strategy,
1313      left: '0',
1314      top: '0',
1315      margin: '0'
1316    },
1317    arrow: {
1318      position: 'absolute'
1319    },
1320    reference: {}
1321  };
1322  Object.assign(state.elements.popper.style, initialStyles.popper);
1323  state.styles = initialStyles;
1324
1325  if (state.elements.arrow) {
1326    Object.assign(state.elements.arrow.style, initialStyles.arrow);
1327  }
1328
1329  return function () {
1330    Object.keys(state.elements).forEach(function (name) {
1331      var element = state.elements[name];
1332      var attributes = state.attributes[name] || {};
1333      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them
1334
1335      var style = styleProperties.reduce(function (style, property) {
1336        style[property] = '';
1337        return style;
1338      }, {}); // arrow is optional + virtual elements
1339
1340      if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element)) {
1341        return;
1342      }
1343
1344      Object.assign(element.style, style);
1345      Object.keys(attributes).forEach(function (attribute) {
1346        element.removeAttribute(attribute);
1347      });
1348    });
1349  };
1350} // eslint-disable-next-line import/no-unused-modules
1351
1352
1353/* harmony default export */ __webpack_exports__["default"] = ({
1354  name: 'applyStyles',
1355  enabled: true,
1356  phase: 'write',
1357  fn: applyStyles,
1358  effect: effect,
1359  requires: ['computeStyles']
1360});
1361
1362/***/ }),
1363
vendor: 5,833 bytes, lines 1364-1473
1364/***/ "./node_modules/@popperjs/core/lib/modifiers/arrow.js":
1365/*!************************************************************!*\
1366  !*** ./node_modules/@popperjs/core/lib/modifiers/arrow.js ***!
1367  \************************************************************/
1368/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1369
1370"use strict";
1371__webpack_require__.r(__webpack_exports__);
1372/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");
1373/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js");
1374/* harmony import */ var _dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../dom-utils/contains.js */ "./node_modules/@popperjs/core/lib/dom-utils/contains.js");
1375/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js");
1376/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js");
1377/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/within.js */ "./node_modules/@popperjs/core/lib/utils/within.js");
1378/* harmony import */ var _utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/mergePaddingObject.js */ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js");
1379/* harmony import */ var _utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/expandToHashMap.js */ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js");
1380/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
1381
1382
1383
1384
1385
1386
1387
1388
1389 // eslint-disable-next-line import/no-unused-modules
1390
1391var toPaddingObject = function toPaddingObject(padding, state) {
1392  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {
1393    placement: state.placement
1394  })) : padding;
1395  return (0,_utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_0__["default"])(typeof padding !== 'number' ? padding : (0,_utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_1__["default"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_2__.basePlacements));
1396};
1397
1398function arrow(_ref) {
1399  var _state$modifiersData$;
1400
1401  var state = _ref.state,
1402      name = _ref.name,
1403      options = _ref.options;
1404  var arrowElement = state.elements.arrow;
1405  var popperOffsets = state.modifiersData.popperOffsets;
1406  var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(state.placement);
1407  var axis = (0,_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(basePlacement);
1408  var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_2__.left, _enums_js__WEBPACK_IMPORTED_MODULE_2__.right].indexOf(basePlacement) >= 0;
1409  var len = isVertical ? 'height' : 'width';
1410
1411  if (!arrowElement || !popperOffsets) {
1412    return;
1413  }
1414
1415  var paddingObject = toPaddingObject(options.padding, state);
1416  var arrowRect = (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__["default"])(arrowElement);
1417  var minProp = axis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_2__.top : _enums_js__WEBPACK_IMPORTED_MODULE_2__.left;
1418  var maxProp = axis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_2__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_2__.right;
1419  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];
1420  var startDiff = popperOffsets[axis] - state.rects.reference[axis];
1421  var arrowOffsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__["default"])(arrowElement);
1422  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
1423  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is
1424  // outside of the popper bounds
1425
1426  var min = paddingObject[minProp];
1427  var max = clientSize - arrowRect[len] - paddingObject[maxProp];
1428  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
1429  var offset = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_7__.within)(min, center, max); // Prevents breaking syntax highlighting...
1430
1431  var axisProp = axis;
1432  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);
1433}
1434
1435function effect(_ref2) {
1436  var state = _ref2.state,
1437      options = _ref2.options;
1438  var _options$element = options.element,
1439      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;
1440
1441  if (arrowElement == null) {
1442    return;
1443  } // CSS selector
1444
1445
1446  if (typeof arrowElement === 'string') {
1447    arrowElement = state.elements.popper.querySelector(arrowElement);
1448
1449    if (!arrowElement) {
1450      return;
1451    }
1452  }
1453
1454  if (!(0,_dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_8__["default"])(state.elements.popper, arrowElement)) {
1455    return;
1456  }
1457
1458  state.elements.arrow = arrowElement;
1459} // eslint-disable-next-line import/no-unused-modules
1460
1461
1462/* harmony default export */ __webpack_exports__["default"] = ({
1463  name: 'arrow',
1464  enabled: true,
1465  phase: 'main',
1466  fn: arrow,
1467  effect: effect,
1468  requires: ['popperOffsets'],
1469  requiresIfExists: ['preventOverflow']
1470});
1471
1472/***/ }),
1473
vendor: 8,437 bytes, lines 1474-1664
1474/***/ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js":
1475/*!********************************************************************!*\
1476  !*** ./node_modules/@popperjs/core/lib/modifiers/computeStyles.js ***!
1477  \********************************************************************/
1478/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1479
1480"use strict";
1481__webpack_require__.r(__webpack_exports__);
1482/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1483/* harmony export */   mapToStyles: function() { return /* binding */ mapToStyles; }
1484/* harmony export */ });
1485/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
1486/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js");
1487/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
1488/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
1489/* harmony import */ var _dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js");
1490/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");
1491/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js");
1492/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");
1493
1494
1495
1496
1497
1498
1499
1500 // eslint-disable-next-line import/no-unused-modules
1501
1502var unsetSides = {
1503  top: 'auto',
1504  right: 'auto',
1505  bottom: 'auto',
1506  left: 'auto'
1507}; // Round the offsets to the nearest suitable subpixel based on the DPR.
1508// Zooming can change the DPR, but it seems to report a value that will
1509// cleanly divide the values into the appropriate subpixels.
1510
1511function roundOffsetsByDPR(_ref, win) {
1512  var x = _ref.x,
1513      y = _ref.y;
1514  var dpr = win.devicePixelRatio || 1;
1515  return {
1516    x: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(x * dpr) / dpr || 0,
1517    y: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(y * dpr) / dpr || 0
1518  };
1519}
1520
1521function mapToStyles(_ref2) {
1522  var _Object$assign2;
1523
1524  var popper = _ref2.popper,
1525      popperRect = _ref2.popperRect,
1526      placement = _ref2.placement,
1527      variation = _ref2.variation,
1528      offsets = _ref2.offsets,
1529      position = _ref2.position,
1530      gpuAcceleration = _ref2.gpuAcceleration,
1531      adaptive = _ref2.adaptive,
1532      roundOffsets = _ref2.roundOffsets,
1533      isFixed = _ref2.isFixed;
1534  var _offsets$x = offsets.x,
1535      x = _offsets$x === void 0 ? 0 : _offsets$x,
1536      _offsets$y = offsets.y,
1537      y = _offsets$y === void 0 ? 0 : _offsets$y;
1538
1539  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({
1540    x: x,
1541    y: y
1542  }) : {
1543    x: x,
1544    y: y
1545  };
1546
1547  x = _ref3.x;
1548  y = _ref3.y;
1549  var hasX = offsets.hasOwnProperty('x');
1550  var hasY = offsets.hasOwnProperty('y');
1551  var sideX = _enums_js__WEBPACK_IMPORTED_MODULE_1__.left;
1552  var sideY = _enums_js__WEBPACK_IMPORTED_MODULE_1__.top;
1553  var win = window;
1554
1555  if (adaptive) {
1556    var offsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(popper);
1557    var heightProp = 'clientHeight';
1558    var widthProp = 'clientWidth';
1559
1560    if (offsetParent === (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__["default"])(popper)) {
1561      offsetParent = (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(popper);
1562
1563      if ((0,_dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__["default"])(offsetParent).position !== 'static' && position === 'absolute') {
1564        heightProp = 'scrollHeight';
1565        widthProp = 'scrollWidth';
1566      }
1567    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it
1568
1569
1570    offsetParent = offsetParent;
1571
1572    if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.top || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.left || placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.right) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_1__.end) {
1573      sideY = _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom;
1574      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]
1575      offsetParent[heightProp];
1576      y -= offsetY - popperRect.height;
1577      y *= gpuAcceleration ? 1 : -1;
1578    }
1579
1580    if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.left || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.top || placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_1__.end) {
1581      sideX = _enums_js__WEBPACK_IMPORTED_MODULE_1__.right;
1582      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]
1583      offsetParent[widthProp];
1584      x -= offsetX - popperRect.width;
1585      x *= gpuAcceleration ? 1 : -1;
1586    }
1587  }
1588
1589  var commonStyles = Object.assign({
1590    position: position
1591  }, adaptive && unsetSides);
1592
1593  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({
1594    x: x,
1595    y: y
1596  }, (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__["default"])(popper)) : {
1597    x: x,
1598    y: y
1599  };
1600
1601  x = _ref4.x;
1602  y = _ref4.y;
1603
1604  if (gpuAcceleration) {
1605    var _Object$assign;
1606
1607    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
1608  }
1609
1610  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2));
1611}
1612
1613function computeStyles(_ref5) {
1614  var state = _ref5.state,
1615      options = _ref5.options;
1616  var _options$gpuAccelerat = options.gpuAcceleration,
1617      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,
1618      _options$adaptive = options.adaptive,
1619      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,
1620      _options$roundOffsets = options.roundOffsets,
1621      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
1622  var commonStyles = {
1623    placement: (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state.placement),
1624    variation: (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_7__["default"])(state.placement),
1625    popper: state.elements.popper,
1626    popperRect: state.rects.popper,
1627    gpuAcceleration: gpuAcceleration,
1628    isFixed: state.options.strategy === 'fixed'
1629  };
1630
1631  if (state.modifiersData.popperOffsets != null) {
1632    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
1633      offsets: state.modifiersData.popperOffsets,
1634      position: state.options.strategy,
1635      adaptive: adaptive,
1636      roundOffsets: roundOffsets
1637    })));
1638  }
1639
1640  if (state.modifiersData.arrow != null) {
1641    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
1642      offsets: state.modifiersData.arrow,
1643      position: 'absolute',
1644      adaptive: false,
1645      roundOffsets: roundOffsets
1646    })));
1647  }
1648
1649  state.attributes.popper = Object.assign({}, state.attributes.popper, {
1650    'data-popper-placement': state.placement
1651  });
1652} // eslint-disable-next-line import/no-unused-modules
1653
1654
1655/* harmony default export */ __webpack_exports__["default"] = ({
1656  name: 'computeStyles',
1657  enabled: true,
1658  phase: 'beforeWrite',
1659  fn: computeStyles,
1660  data: {}
1661});
1662
1663/***/ }),
1664
vendor: 2,033 bytes, lines 1665-1725
1665/***/ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js":
1666/*!*********************************************************************!*\
1667  !*** ./node_modules/@popperjs/core/lib/modifiers/eventListeners.js ***!
1668  \*********************************************************************/
1669/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1670
1671"use strict";
1672__webpack_require__.r(__webpack_exports__);
1673/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
1674 // eslint-disable-next-line import/no-unused-modules
1675
1676var passive = {
1677  passive: true
1678};
1679
1680function effect(_ref) {
1681  var state = _ref.state,
1682      instance = _ref.instance,
1683      options = _ref.options;
1684  var _options$scroll = options.scroll,
1685      scroll = _options$scroll === void 0 ? true : _options$scroll,
1686      _options$resize = options.resize,
1687      resize = _options$resize === void 0 ? true : _options$resize;
1688  var window = (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(state.elements.popper);
1689  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
1690
1691  if (scroll) {
1692    scrollParents.forEach(function (scrollParent) {
1693      scrollParent.addEventListener('scroll', instance.update, passive);
1694    });
1695  }
1696
1697  if (resize) {
1698    window.addEventListener('resize', instance.update, passive);
1699  }
1700
1701  return function () {
1702    if (scroll) {
1703      scrollParents.forEach(function (scrollParent) {
1704        scrollParent.removeEventListener('scroll', instance.update, passive);
1705      });
1706    }
1707
1708    if (resize) {
1709      window.removeEventListener('resize', instance.update, passive);
1710    }
1711  };
1712} // eslint-disable-next-line import/no-unused-modules
1713
1714
1715/* harmony default export */ __webpack_exports__["default"] = ({
1716  name: 'eventListeners',
1717  enabled: true,
1718  phase: 'write',
1719  fn: function fn() {},
1720  effect: effect,
1721  data: {}
1722});
1723
1724/***/ }),
1725
vendor: 7,381 bytes, lines 1726-1890
1726/***/ "./node_modules/@popperjs/core/lib/modifiers/flip.js":
1727/*!***********************************************************!*\
1728  !*** ./node_modules/@popperjs/core/lib/modifiers/flip.js ***!
1729  \***********************************************************/
1730/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1731
1732"use strict";
1733__webpack_require__.r(__webpack_exports__);
1734/* harmony import */ var _utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getOppositePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js");
1735/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");
1736/* harmony import */ var _utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getOppositeVariationPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js");
1737/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
1738/* harmony import */ var _utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/computeAutoPlacement.js */ "./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js");
1739/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
1740/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js");
1741
1742
1743
1744
1745
1746
1747 // eslint-disable-next-line import/no-unused-modules
1748
1749function getExpandedFallbackPlacements(placement) {
1750  if ((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.auto) {
1751    return [];
1752  }
1753
1754  var oppositePlacement = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(placement);
1755  return [(0,_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(placement), oppositePlacement, (0,_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(oppositePlacement)];
1756}
1757
1758function flip(_ref) {
1759  var state = _ref.state,
1760      options = _ref.options,
1761      name = _ref.name;
1762
1763  if (state.modifiersData[name]._skip) {
1764    return;
1765  }
1766
1767  var _options$mainAxis = options.mainAxis,
1768      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
1769      _options$altAxis = options.altAxis,
1770      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,
1771      specifiedFallbackPlacements = options.fallbackPlacements,
1772      padding = options.padding,
1773      boundary = options.boundary,
1774      rootBoundary = options.rootBoundary,
1775      altBoundary = options.altBoundary,
1776      _options$flipVariatio = options.flipVariations,
1777      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,
1778      allowedAutoPlacements = options.allowedAutoPlacements;
1779  var preferredPlacement = state.options.placement;
1780  var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(preferredPlacement);
1781  var isBasePlacement = basePlacement === preferredPlacement;
1782  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [(0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
1783  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {
1784    return acc.concat((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.auto ? (0,_utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(state, {
1785      placement: placement,
1786      boundary: boundary,
1787      rootBoundary: rootBoundary,
1788      padding: padding,
1789      flipVariations: flipVariations,
1790      allowedAutoPlacements: allowedAutoPlacements
1791    }) : placement);
1792  }, []);
1793  var referenceRect = state.rects.reference;
1794  var popperRect = state.rects.popper;
1795  var checksMap = new Map();
1796  var makeFallbackChecks = true;
1797  var firstFittingPlacement = placements[0];
1798
1799  for (var i = 0; i < placements.length; i++) {
1800    var placement = placements[i];
1801
1802    var _basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement);
1803
1804    var isStartVariation = (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_5__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.start;
1805    var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_1__.top, _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom].indexOf(_basePlacement) >= 0;
1806    var len = isVertical ? 'width' : 'height';
1807    var overflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state, {
1808      placement: placement,
1809      boundary: boundary,
1810      rootBoundary: rootBoundary,
1811      altBoundary: altBoundary,
1812      padding: padding
1813    });
1814    var mainVariationSide = isVertical ? isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_1__.right : _enums_js__WEBPACK_IMPORTED_MODULE_1__.left : isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_1__.top;
1815
1816    if (referenceRect[len] > popperRect[len]) {
1817      mainVariationSide = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(mainVariationSide);
1818    }
1819
1820    var altVariationSide = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(mainVariationSide);
1821    var checks = [];
1822
1823    if (checkMainAxis) {
1824      checks.push(overflow[_basePlacement] <= 0);
1825    }
1826
1827    if (checkAltAxis) {
1828      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
1829    }
1830
1831    if (checks.every(function (check) {
1832      return check;
1833    })) {
1834      firstFittingPlacement = placement;
1835      makeFallbackChecks = false;
1836      break;
1837    }
1838
1839    checksMap.set(placement, checks);
1840  }
1841
1842  if (makeFallbackChecks) {
1843    // `2` may be desired in some cases – research later
1844    var numberOfChecks = flipVariations ? 3 : 1;
1845
1846    var _loop = function _loop(_i) {
1847      var fittingPlacement = placements.find(function (placement) {
1848        var checks = checksMap.get(placement);
1849
1850        if (checks) {
1851          return checks.slice(0, _i).every(function (check) {
1852            return check;
1853          });
1854        }
1855      });
1856
1857      if (fittingPlacement) {
1858        firstFittingPlacement = fittingPlacement;
1859        return "break";
1860      }
1861    };
1862
1863    for (var _i = numberOfChecks; _i > 0; _i--) {
1864      var _ret = _loop(_i);
1865
1866      if (_ret === "break") break;
1867    }
1868  }
1869
1870  if (state.placement !== firstFittingPlacement) {
1871    state.modifiersData[name]._skip = true;
1872    state.placement = firstFittingPlacement;
1873    state.reset = true;
1874  }
1875} // eslint-disable-next-line import/no-unused-modules
1876
1877
1878/* harmony default export */ __webpack_exports__["default"] = ({
1879  name: 'flip',
1880  enabled: true,
1881  phase: 'main',
1882  fn: flip,
1883  requiresIfExists: ['offset'],
1884  data: {
1885    _skip: false
1886  }
1887});
1888
1889/***/ }),
1890
vendor: 2,917 bytes, lines 1891-1964
1891/***/ "./node_modules/@popperjs/core/lib/modifiers/hide.js":
1892/*!***********************************************************!*\
1893  !*** ./node_modules/@popperjs/core/lib/modifiers/hide.js ***!
1894  \***********************************************************/
1895/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1896
1897"use strict";
1898__webpack_require__.r(__webpack_exports__);
1899/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
1900/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
1901
1902
1903
1904function getSideOffsets(overflow, rect, preventedOffsets) {
1905  if (preventedOffsets === void 0) {
1906    preventedOffsets = {
1907      x: 0,
1908      y: 0
1909    };
1910  }
1911
1912  return {
1913    top: overflow.top - rect.height - preventedOffsets.y,
1914    right: overflow.right - rect.width + preventedOffsets.x,
1915    bottom: overflow.bottom - rect.height + preventedOffsets.y,
1916    left: overflow.left - rect.width - preventedOffsets.x
1917  };
1918}
1919
1920function isAnySideFullyClipped(overflow) {
1921  return [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.right, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom, _enums_js__WEBPACK_IMPORTED_MODULE_0__.left].some(function (side) {
1922    return overflow[side] >= 0;
1923  });
1924}
1925
1926function hide(_ref) {
1927  var state = _ref.state,
1928      name = _ref.name;
1929  var referenceRect = state.rects.reference;
1930  var popperRect = state.rects.popper;
1931  var preventedOffsets = state.modifiersData.preventOverflow;
1932  var referenceOverflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state, {
1933    elementContext: 'reference'
1934  });
1935  var popperAltOverflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state, {
1936    altBoundary: true
1937  });
1938  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
1939  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
1940  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
1941  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
1942  state.modifiersData[name] = {
1943    referenceClippingOffsets: referenceClippingOffsets,
1944    popperEscapeOffsets: popperEscapeOffsets,
1945    isReferenceHidden: isReferenceHidden,
1946    hasPopperEscaped: hasPopperEscaped
1947  };
1948  state.attributes.popper = Object.assign({}, state.attributes.popper, {
1949    'data-popper-reference-hidden': isReferenceHidden,
1950    'data-popper-escaped': hasPopperEscaped
1951  });
1952} // eslint-disable-next-line import/no-unused-modules
1953
1954
1955/* harmony default export */ __webpack_exports__["default"] = ({
1956  name: 'hide',
1957  enabled: true,
1958  phase: 'main',
1959  requiresIfExists: ['preventOverflow'],
1960  fn: hide
1961});
1962
1963/***/ }),
1964
vendor: 3,279 bytes, lines 1965-2004
1965/***/ "./node_modules/@popperjs/core/lib/modifiers/index.js":
1966/*!************************************************************!*\
1967  !*** ./node_modules/@popperjs/core/lib/modifiers/index.js ***!
1968  \************************************************************/
1969/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1970
1971"use strict";
1972__webpack_require__.r(__webpack_exports__);
1973/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1974/* harmony export */   applyStyles: function() { return /* reexport safe */ _applyStyles_js__WEBPACK_IMPORTED_MODULE_0__["default"]; },
1975/* harmony export */   arrow: function() { return /* reexport safe */ _arrow_js__WEBPACK_IMPORTED_MODULE_1__["default"]; },
1976/* harmony export */   computeStyles: function() { return /* reexport safe */ _computeStyles_js__WEBPACK_IMPORTED_MODULE_2__["default"]; },
1977/* harmony export */   eventListeners: function() { return /* reexport safe */ _eventListeners_js__WEBPACK_IMPORTED_MODULE_3__["default"]; },
1978/* harmony export */   flip: function() { return /* reexport safe */ _flip_js__WEBPACK_IMPORTED_MODULE_4__["default"]; },
1979/* harmony export */   hide: function() { return /* reexport safe */ _hide_js__WEBPACK_IMPORTED_MODULE_5__["default"]; },
1980/* harmony export */   offset: function() { return /* reexport safe */ _offset_js__WEBPACK_IMPORTED_MODULE_6__["default"]; },
1981/* harmony export */   popperOffsets: function() { return /* reexport safe */ _popperOffsets_js__WEBPACK_IMPORTED_MODULE_7__["default"]; },
1982/* harmony export */   preventOverflow: function() { return /* reexport safe */ _preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__["default"]; }
1983/* harmony export */ });
1984/* harmony import */ var _applyStyles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./applyStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js");
1985/* harmony import */ var _arrow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./arrow.js */ "./node_modules/@popperjs/core/lib/modifiers/arrow.js");
1986/* harmony import */ var _computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./computeStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js");
1987/* harmony import */ var _eventListeners_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./eventListeners.js */ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js");
1988/* harmony import */ var _flip_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./flip.js */ "./node_modules/@popperjs/core/lib/modifiers/flip.js");
1989/* harmony import */ var _hide_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hide.js */ "./node_modules/@popperjs/core/lib/modifiers/hide.js");
1990/* harmony import */ var _offset_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./offset.js */ "./node_modules/@popperjs/core/lib/modifiers/offset.js");
1991/* harmony import */ var _popperOffsets_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./popperOffsets.js */ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js");
1992/* harmony import */ var _preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./preventOverflow.js */ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js");
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003/***/ }),
2004
vendor: 2,760 bytes, lines 2005-2074
2005/***/ "./node_modules/@popperjs/core/lib/modifiers/offset.js":
2006/*!*************************************************************!*\
2007  !*** ./node_modules/@popperjs/core/lib/modifiers/offset.js ***!
2008  \*************************************************************/
2009/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2010
2011"use strict";
2012__webpack_require__.r(__webpack_exports__);
2013/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2014/* harmony export */   distanceAndSkiddingToXY: function() { return /* binding */ distanceAndSkiddingToXY; }
2015/* harmony export */ });
2016/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");
2017/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
2018
2019 // eslint-disable-next-line import/no-unused-modules
2020
2021function distanceAndSkiddingToXY(placement, rects, offset) {
2022  var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement);
2023  var invertDistance = [_enums_js__WEBPACK_IMPORTED_MODULE_1__.left, _enums_js__WEBPACK_IMPORTED_MODULE_1__.top].indexOf(basePlacement) >= 0 ? -1 : 1;
2024
2025  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {
2026    placement: placement
2027  })) : offset,
2028      skidding = _ref[0],
2029      distance = _ref[1];
2030
2031  skidding = skidding || 0;
2032  distance = (distance || 0) * invertDistance;
2033  return [_enums_js__WEBPACK_IMPORTED_MODULE_1__.left, _enums_js__WEBPACK_IMPORTED_MODULE_1__.right].indexOf(basePlacement) >= 0 ? {
2034    x: distance,
2035    y: skidding
2036  } : {
2037    x: skidding,
2038    y: distance
2039  };
2040}
2041
2042function offset(_ref2) {
2043  var state = _ref2.state,
2044      options = _ref2.options,
2045      name = _ref2.name;
2046  var _options$offset = options.offset,
2047      offset = _options$offset === void 0 ? [0, 0] : _options$offset;
2048  var data = _enums_js__WEBPACK_IMPORTED_MODULE_1__.placements.reduce(function (acc, placement) {
2049    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);
2050    return acc;
2051  }, {});
2052  var _data$state$placement = data[state.placement],
2053      x = _data$state$placement.x,
2054      y = _data$state$placement.y;
2055
2056  if (state.modifiersData.popperOffsets != null) {
2057    state.modifiersData.popperOffsets.x += x;
2058    state.modifiersData.popperOffsets.y += y;
2059  }
2060
2061  state.modifiersData[name] = data;
2062} // eslint-disable-next-line import/no-unused-modules
2063
2064
2065/* harmony default export */ __webpack_exports__["default"] = ({
2066  name: 'offset',
2067  enabled: true,
2068  phase: 'main',
2069  requires: ['popperOffsets'],
2070  fn: offset
2071});
2072
2073/***/ }),
2074
vendor: 1,398 bytes, lines 2075-2111
2075/***/ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js":
2076/*!********************************************************************!*\
2077  !*** ./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js ***!
2078  \********************************************************************/
2079/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2080
2081"use strict";
2082__webpack_require__.r(__webpack_exports__);
2083/* harmony import */ var _utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/computeOffsets.js */ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js");
2084
2085
2086function popperOffsets(_ref) {
2087  var state = _ref.state,
2088      name = _ref.name;
2089  // Offsets are the actual position the popper needs to have to be
2090  // properly positioned near its reference element
2091  // This is the most basic placement, and will be adjusted by
2092  // the modifiers in the next step
2093  state.modifiersData[name] = (0,_utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__["default"])({
2094    reference: state.rects.reference,
2095    element: state.rects.popper,
2096    strategy: 'absolute',
2097    placement: state.placement
2098  });
2099} // eslint-disable-next-line import/no-unused-modules
2100
2101
2102/* harmony default export */ __webpack_exports__["default"] = ({
2103  name: 'popperOffsets',
2104  enabled: true,
2105  phase: 'read',
2106  fn: popperOffsets,
2107  data: {}
2108});
2109
2110/***/ }),
2111
vendor: 9,747 bytes, lines 2112-2275
2112/***/ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js":
2113/*!**********************************************************************!*\
2114  !*** ./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js ***!
2115  \**********************************************************************/
2116/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2117
2118"use strict";
2119__webpack_require__.r(__webpack_exports__);
2120/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
2121/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");
2122/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js");
2123/* harmony import */ var _utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/getAltAxis.js */ "./node_modules/@popperjs/core/lib/utils/getAltAxis.js");
2124/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/within.js */ "./node_modules/@popperjs/core/lib/utils/within.js");
2125/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js");
2126/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js");
2127/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
2128/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js");
2129/* harmony import */ var _utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/getFreshSideObject.js */ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js");
2130/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143function preventOverflow(_ref) {
2144  var state = _ref.state,
2145      options = _ref.options,
2146      name = _ref.name;
2147  var _options$mainAxis = options.mainAxis,
2148      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
2149      _options$altAxis = options.altAxis,
2150      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,
2151      boundary = options.boundary,
2152      rootBoundary = options.rootBoundary,
2153      altBoundary = options.altBoundary,
2154      padding = options.padding,
2155      _options$tether = options.tether,
2156      tether = _options$tether === void 0 ? true : _options$tether,
2157      _options$tetherOffset = options.tetherOffset,
2158      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
2159  var overflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(state, {
2160    boundary: boundary,
2161    rootBoundary: rootBoundary,
2162    padding: padding,
2163    altBoundary: altBoundary
2164  });
2165  var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state.placement);
2166  var variation = (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_2__["default"])(state.placement);
2167  var isBasePlacement = !variation;
2168  var mainAxis = (0,_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(basePlacement);
2169  var altAxis = (0,_utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_4__["default"])(mainAxis);
2170  var popperOffsets = state.modifiersData.popperOffsets;
2171  var referenceRect = state.rects.reference;
2172  var popperRect = state.rects.popper;
2173  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {
2174    placement: state.placement
2175  })) : tetherOffset;
2176  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {
2177    mainAxis: tetherOffsetValue,
2178    altAxis: tetherOffsetValue
2179  } : Object.assign({
2180    mainAxis: 0,
2181    altAxis: 0
2182  }, tetherOffsetValue);
2183  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;
2184  var data = {
2185    x: 0,
2186    y: 0
2187  };
2188
2189  if (!popperOffsets) {
2190    return;
2191  }
2192
2193  if (checkMainAxis) {
2194    var _offsetModifierState$;
2195
2196    var mainSide = mainAxis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.top : _enums_js__WEBPACK_IMPORTED_MODULE_5__.left;
2197    var altSide = mainAxis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_5__.right;
2198    var len = mainAxis === 'y' ? 'height' : 'width';
2199    var offset = popperOffsets[mainAxis];
2200    var min = offset + overflow[mainSide];
2201    var max = offset - overflow[altSide];
2202    var additive = tether ? -popperRect[len] / 2 : 0;
2203    var minLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_5__.start ? referenceRect[len] : popperRect[len];
2204    var maxLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_5__.start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go
2205    // outside the reference bounds
2206
2207    var arrowElement = state.elements.arrow;
2208    var arrowRect = tether && arrowElement ? (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__["default"])(arrowElement) : {
2209      width: 0,
2210      height: 0
2211    };
2212    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : (0,_utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_7__["default"])();
2213    var arrowPaddingMin = arrowPaddingObject[mainSide];
2214    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want
2215    // to include its full size in the calculation. If the reference is small
2216    // and near the edge of a boundary, the popper can overflow even if the
2217    // reference is not overflowing as well (e.g. virtual elements with no
2218    // width or height)
2219
2220    var arrowLen = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(0, referenceRect[len], arrowRect[len]);
2221    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;
2222    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;
2223    var arrowOffsetParent = state.elements.arrow && (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_9__["default"])(state.elements.arrow);
2224    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
2225    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;
2226    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;
2227    var tetherMax = offset + maxOffset - offsetModifierValue;
2228    var preventedOffset = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(tether ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_10__.min)(min, tetherMin) : min, offset, tether ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_10__.max)(max, tetherMax) : max);
2229    popperOffsets[mainAxis] = preventedOffset;
2230    data[mainAxis] = preventedOffset - offset;
2231  }
2232
2233  if (checkAltAxis) {
2234    var _offsetModifierState$2;
2235
2236    var _mainSide = mainAxis === 'x' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.top : _enums_js__WEBPACK_IMPORTED_MODULE_5__.left;
2237
2238    var _altSide = mainAxis === 'x' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_5__.right;
2239
2240    var _offset = popperOffsets[altAxis];
2241
2242    var _len = altAxis === 'y' ? 'height' : 'width';
2243
2244    var _min = _offset + overflow[_mainSide];
2245
2246    var _max = _offset - overflow[_altSide];
2247
2248    var isOriginSide = [_enums_js__WEBPACK_IMPORTED_MODULE_5__.top, _enums_js__WEBPACK_IMPORTED_MODULE_5__.left].indexOf(basePlacement) !== -1;
2249
2250    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;
2251
2252    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;
2253
2254    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;
2255
2256    var _preventedOffset = tether && isOriginSide ? (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.withinMaxClamp)(_tetherMin, _offset, _tetherMax) : (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);
2257
2258    popperOffsets[altAxis] = _preventedOffset;
2259    data[altAxis] = _preventedOffset - _offset;
2260  }
2261
2262  state.modifiersData[name] = data;
2263} // eslint-disable-next-line import/no-unused-modules
2264
2265
2266/* harmony default export */ __webpack_exports__["default"] = ({
2267  name: 'preventOverflow',
2268  enabled: true,
2269  phase: 'main',
2270  fn: preventOverflow,
2271  requiresIfExists: ['offset']
2272});
2273
2274/***/ }),
2275
vendor: 2,629 bytes, lines 2276-2309
2276/***/ "./node_modules/@popperjs/core/lib/popper-lite.js":
2277/*!********************************************************!*\
2278  !*** ./node_modules/@popperjs/core/lib/popper-lite.js ***!
2279  \********************************************************/
2280/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2281
2282"use strict";
2283__webpack_require__.r(__webpack_exports__);
2284/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2285/* harmony export */   createPopper: function() { return /* binding */ createPopper; },
2286/* harmony export */   defaultModifiers: function() { return /* binding */ defaultModifiers; },
2287/* harmony export */   detectOverflow: function() { return /* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_5__["default"]; },
2288/* harmony export */   popperGenerator: function() { return /* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_4__.popperGenerator; }
2289/* harmony export */ });
2290/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/createPopper.js");
2291/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
2292/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js");
2293/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js");
2294/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js");
2295/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js");
2296
2297
2298
2299
2300
2301var defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__["default"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__["default"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__["default"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__["default"]];
2302var createPopper = /*#__PURE__*/(0,_createPopper_js__WEBPACK_IMPORTED_MODULE_4__.popperGenerator)({
2303  defaultModifiers: defaultModifiers
2304}); // eslint-disable-next-line import/no-unused-modules
2305
2306
2307
2308/***/ }),
2309
vendor: 5,718 bytes, lines 2310-2369
2310/***/ "./node_modules/@popperjs/core/lib/popper.js":
2311/*!***************************************************!*\
2312  !*** ./node_modules/@popperjs/core/lib/popper.js ***!
2313  \***************************************************/
2314/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2315
2316"use strict";
2317__webpack_require__.r(__webpack_exports__);
2318/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2319/* harmony export */   applyStyles: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.applyStyles; },
2320/* harmony export */   arrow: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.arrow; },
2321/* harmony export */   computeStyles: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.computeStyles; },
2322/* harmony export */   createPopper: function() { return /* binding */ createPopper; },
2323/* harmony export */   createPopperLite: function() { return /* reexport safe */ _popper_lite_js__WEBPACK_IMPORTED_MODULE_11__.createPopper; },
2324/* harmony export */   defaultModifiers: function() { return /* binding */ defaultModifiers; },
2325/* harmony export */   detectOverflow: function() { return /* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_10__["default"]; },
2326/* harmony export */   eventListeners: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.eventListeners; },
2327/* harmony export */   flip: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.flip; },
2328/* harmony export */   hide: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.hide; },
2329/* harmony export */   offset: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.offset; },
2330/* harmony export */   popperGenerator: function() { return /* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_9__.popperGenerator; },
2331/* harmony export */   popperOffsets: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.popperOffsets; },
2332/* harmony export */   preventOverflow: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.preventOverflow; }
2333/* harmony export */ });
2334/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/createPopper.js");
2335/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
2336/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js");
2337/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js");
2338/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js");
2339/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js");
2340/* harmony import */ var _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modifiers/offset.js */ "./node_modules/@popperjs/core/lib/modifiers/offset.js");
2341/* harmony import */ var _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modifiers/flip.js */ "./node_modules/@popperjs/core/lib/modifiers/flip.js");
2342/* harmony import */ var _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modifiers/preventOverflow.js */ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js");
2343/* harmony import */ var _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modifiers/arrow.js */ "./node_modules/@popperjs/core/lib/modifiers/arrow.js");
2344/* harmony import */ var _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modifiers/hide.js */ "./node_modules/@popperjs/core/lib/modifiers/hide.js");
2345/* harmony import */ var _popper_lite_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./popper-lite.js */ "./node_modules/@popperjs/core/lib/popper-lite.js");
2346/* harmony import */ var _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modifiers/index.js */ "./node_modules/@popperjs/core/lib/modifiers/index.js");
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357var defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__["default"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__["default"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__["default"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__["default"], _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_4__["default"], _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_5__["default"], _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_6__["default"], _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_7__["default"], _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_8__["default"]];
2358var createPopper = /*#__PURE__*/(0,_createPopper_js__WEBPACK_IMPORTED_MODULE_9__.popperGenerator)({
2359  defaultModifiers: defaultModifiers
2360}); // eslint-disable-next-line import/no-unused-modules
2361
2362 // eslint-disable-next-line import/no-unused-modules
2363
2364 // eslint-disable-next-line import/no-unused-modules
2365
2366
2367
2368/***/ }),
2369
vendor: 3,116 bytes, lines 2370-2430
2370/***/ "./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js":
2371/*!***********************************************************************!*\
2372  !*** ./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js ***!
2373  \***********************************************************************/
2374/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2375
2376"use strict";
2377__webpack_require__.r(__webpack_exports__);
2378/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2379/* harmony export */   "default": function() { return /* binding */ computeAutoPlacement; }
2380/* harmony export */ });
2381/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js");
2382/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
2383/* harmony import */ var _detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
2384/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");
2385
2386
2387
2388
2389function computeAutoPlacement(state, options) {
2390  if (options === void 0) {
2391    options = {};
2392  }
2393
2394  var _options = options,
2395      placement = _options.placement,
2396      boundary = _options.boundary,
2397      rootBoundary = _options.rootBoundary,
2398      padding = _options.padding,
2399      flipVariations = _options.flipVariations,
2400      _options$allowedAutoP = _options.allowedAutoPlacements,
2401      allowedAutoPlacements = _options$allowedAutoP === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.placements : _options$allowedAutoP;
2402  var variation = (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement);
2403  var placements = variation ? flipVariations ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements : _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements.filter(function (placement) {
2404    return (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement) === variation;
2405  }) : _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements;
2406  var allowedPlacements = placements.filter(function (placement) {
2407    return allowedAutoPlacements.indexOf(placement) >= 0;
2408  });
2409
2410  if (allowedPlacements.length === 0) {
2411    allowedPlacements = placements;
2412  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...
2413
2414
2415  var overflows = allowedPlacements.reduce(function (acc, placement) {
2416    acc[placement] = (0,_detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__["default"])(state, {
2417      placement: placement,
2418      boundary: boundary,
2419      rootBoundary: rootBoundary,
2420      padding: padding
2421    })[(0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(placement)];
2422    return acc;
2423  }, {});
2424  return Object.keys(overflows).sort(function (a, b) {
2425    return overflows[a] - overflows[b];
2426  });
2427}
2428
2429/***/ }),
2430
vendor: 3,214 bytes, lines 2431-2518
2431/***/ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js":
2432/*!*****************************************************************!*\
2433  !*** ./node_modules/@popperjs/core/lib/utils/computeOffsets.js ***!
2434  \*****************************************************************/
2435/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2436
2437"use strict";
2438__webpack_require__.r(__webpack_exports__);
2439/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2440/* harmony export */   "default": function() { return /* binding */ computeOffsets; }
2441/* harmony export */ });
2442/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");
2443/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js");
2444/* harmony import */ var _getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js");
2445/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
2446
2447
2448
2449
2450function computeOffsets(_ref) {
2451  var reference = _ref.reference,
2452      element = _ref.element,
2453      placement = _ref.placement;
2454  var basePlacement = placement ? (0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) : null;
2455  var variation = placement ? (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement) : null;
2456  var commonX = reference.x + reference.width / 2 - element.width / 2;
2457  var commonY = reference.y + reference.height / 2 - element.height / 2;
2458  var offsets;
2459
2460  switch (basePlacement) {
2461    case _enums_js__WEBPACK_IMPORTED_MODULE_2__.top:
2462      offsets = {
2463        x: commonX,
2464        y: reference.y - element.height
2465      };
2466      break;
2467
2468    case _enums_js__WEBPACK_IMPORTED_MODULE_2__.bottom:
2469      offsets = {
2470        x: commonX,
2471        y: reference.y + reference.height
2472      };
2473      break;
2474
2475    case _enums_js__WEBPACK_IMPORTED_MODULE_2__.right:
2476      offsets = {
2477        x: reference.x + reference.width,
2478        y: commonY
2479      };
2480      break;
2481
2482    case _enums_js__WEBPACK_IMPORTED_MODULE_2__.left:
2483      offsets = {
2484        x: reference.x - element.width,
2485        y: commonY
2486      };
2487      break;
2488
2489    default:
2490      offsets = {
2491        x: reference.x,
2492        y: reference.y
2493      };
2494  }
2495
2496  var mainAxis = basePlacement ? (0,_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(basePlacement) : null;
2497
2498  if (mainAxis != null) {
2499    var len = mainAxis === 'y' ? 'height' : 'width';
2500
2501    switch (variation) {
2502      case _enums_js__WEBPACK_IMPORTED_MODULE_2__.start:
2503        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
2504        break;
2505
2506      case _enums_js__WEBPACK_IMPORTED_MODULE_2__.end:
2507        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
2508        break;
2509
2510      default:
2511    }
2512  }
2513
2514  return offsets;
2515}
2516
2517/***/ }),
2518
vendor: 870 bytes, lines 2519-2547
2519/***/ "./node_modules/@popperjs/core/lib/utils/debounce.js":
2520/*!***********************************************************!*\
2521  !*** ./node_modules/@popperjs/core/lib/utils/debounce.js ***!
2522  \***********************************************************/
2523/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2524
2525"use strict";
2526__webpack_require__.r(__webpack_exports__);
2527/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2528/* harmony export */   "default": function() { return /* binding */ debounce; }
2529/* harmony export */ });
2530function debounce(fn) {
2531  var pending;
2532  return function () {
2533    if (!pending) {
2534      pending = new Promise(function (resolve) {
2535        Promise.resolve().then(function () {
2536          pending = undefined;
2537          resolve(fn());
2538        });
2539      });
2540    }
2541
2542    return pending;
2543  };
2544}
2545
2546/***/ }),
2547
vendor: 6,246 bytes, lines 2548-2635
2548/***/ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js":
2549/*!*****************************************************************!*\
2550  !*** ./node_modules/@popperjs/core/lib/utils/detectOverflow.js ***!
2551  \*****************************************************************/
2552/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2553
2554"use strict";
2555__webpack_require__.r(__webpack_exports__);
2556/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2557/* harmony export */   "default": function() { return /* binding */ detectOverflow; }
2558/* harmony export */ });
2559/* harmony import */ var _dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getClippingRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js");
2560/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
2561/* harmony import */ var _dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js");
2562/* harmony import */ var _computeOffsets_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./computeOffsets.js */ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js");
2563/* harmony import */ var _rectToClientRect_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./rectToClientRect.js */ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js");
2564/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
2565/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
2566/* harmony import */ var _mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mergePaddingObject.js */ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js");
2567/* harmony import */ var _expandToHashMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./expandToHashMap.js */ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js");
2568
2569
2570
2571
2572
2573
2574
2575
2576 // eslint-disable-next-line import/no-unused-modules
2577
2578function detectOverflow(state, options) {
2579  if (options === void 0) {
2580    options = {};
2581  }
2582
2583  var _options = options,
2584      _options$placement = _options.placement,
2585      placement = _options$placement === void 0 ? state.placement : _options$placement,
2586      _options$strategy = _options.strategy,
2587      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,
2588      _options$boundary = _options.boundary,
2589      boundary = _options$boundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.clippingParents : _options$boundary,
2590      _options$rootBoundary = _options.rootBoundary,
2591      rootBoundary = _options$rootBoundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.viewport : _options$rootBoundary,
2592      _options$elementConte = _options.elementContext,
2593      elementContext = _options$elementConte === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper : _options$elementConte,
2594      _options$altBoundary = _options.altBoundary,
2595      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,
2596      _options$padding = _options.padding,
2597      padding = _options$padding === void 0 ? 0 : _options$padding;
2598  var paddingObject = (0,_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_1__["default"])(typeof padding !== 'number' ? padding : (0,_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_2__["default"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements));
2599  var altContext = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.reference : _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper;
2600  var popperRect = state.rects.popper;
2601  var element = state.elements[altBoundary ? altContext : elementContext];
2602  var clippingClientRect = (0,_dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])((0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(element) ? element : element.contextElement || (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__["default"])(state.elements.popper), boundary, rootBoundary, strategy);
2603  var referenceClientRect = (0,_dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state.elements.reference);
2604  var popperOffsets = (0,_computeOffsets_js__WEBPACK_IMPORTED_MODULE_7__["default"])({
2605    reference: referenceClientRect,
2606    element: popperRect,
2607    strategy: 'absolute',
2608    placement: placement
2609  });
2610  var popperClientRect = (0,_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_8__["default"])(Object.assign({}, popperRect, popperOffsets));
2611  var elementClientRect = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect
2612  // 0 or negative = within the clipping rect
2613
2614  var overflowOffsets = {
2615    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
2616    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
2617    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
2618    right: elementClientRect.right - clippingClientRect.right + paddingObject.right
2619  };
2620  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element
2621
2622  if (elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper && offsetData) {
2623    var offset = offsetData[placement];
2624    Object.keys(overflowOffsets).forEach(function (key) {
2625      var multiply = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.right, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom].indexOf(key) >= 0 ? 1 : -1;
2626      var axis = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom].indexOf(key) >= 0 ? 'y' : 'x';
2627      overflowOffsets[key] += offset[axis] * multiply;
2628    });
2629  }
2630
2631  return overflowOffsets;
2632}
2633
2634/***/ }),
2635
vendor: 762 bytes, lines 2636-2655
2636/***/ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js":
2637/*!******************************************************************!*\
2638  !*** ./node_modules/@popperjs/core/lib/utils/expandToHashMap.js ***!
2639  \******************************************************************/
2640/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2641
2642"use strict";
2643__webpack_require__.r(__webpack_exports__);
2644/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2645/* harmony export */   "default": function() { return /* binding */ expandToHashMap; }
2646/* harmony export */ });
2647function expandToHashMap(value, keys) {
2648  return keys.reduce(function (hashMap, key) {
2649    hashMap[key] = value;
2650    return hashMap;
2651  }, {});
2652}
2653
2654/***/ }),
2655
vendor: 657 bytes, lines 2656-2672
2656/***/ "./node_modules/@popperjs/core/lib/utils/getAltAxis.js":
2657/*!*************************************************************!*\
2658  !*** ./node_modules/@popperjs/core/lib/utils/getAltAxis.js ***!
2659  \*************************************************************/
2660/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2661
2662"use strict";
2663__webpack_require__.r(__webpack_exports__);
2664/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2665/* harmony export */   "default": function() { return /* binding */ getAltAxis; }
2666/* harmony export */ });
2667function getAltAxis(axis) {
2668  return axis === 'x' ? 'y' : 'x';
2669}
2670
2671/***/ }),
2672
vendor: 698 bytes, lines 2673-2690
2673/***/ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js":
2674/*!*******************************************************************!*\
2675  !*** ./node_modules/@popperjs/core/lib/utils/getBasePlacement.js ***!
2676  \*******************************************************************/
2677/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2678
2679"use strict";
2680__webpack_require__.r(__webpack_exports__);
2681/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2682/* harmony export */   "default": function() { return /* binding */ getBasePlacement; }
2683/* harmony export */ });
2684
2685function getBasePlacement(placement) {
2686  return placement.split('-')[0];
2687}
2688
2689/***/ }),
2690
vendor: 735 bytes, lines 2691-2712
2691/***/ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js":
2692/*!*********************************************************************!*\
2693  !*** ./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js ***!
2694  \*********************************************************************/
2695/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2696
2697"use strict";
2698__webpack_require__.r(__webpack_exports__);
2699/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2700/* harmony export */   "default": function() { return /* binding */ getFreshSideObject; }
2701/* harmony export */ });
2702function getFreshSideObject() {
2703  return {
2704    top: 0,
2705    right: 0,
2706    bottom: 0,
2707    left: 0
2708  };
2709}
2710
2711/***/ }),
2712
vendor: 775 bytes, lines 2713-2729
2713/***/ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js":
2714/*!***************************************************************************!*\
2715  !*** ./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js ***!
2716  \***************************************************************************/
2717/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2718
2719"use strict";
2720__webpack_require__.r(__webpack_exports__);
2721/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2722/* harmony export */   "default": function() { return /* binding */ getMainAxisFromPlacement; }
2723/* harmony export */ });
2724function getMainAxisFromPlacement(placement) {
2725  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
2726}
2727
2728/***/ }),
2729
vendor: 876 bytes, lines 2730-2754
2730/***/ "./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js":
2731/*!***********************************************************************!*\
2732  !*** ./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js ***!
2733  \***********************************************************************/
2734/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2735
2736"use strict";
2737__webpack_require__.r(__webpack_exports__);
2738/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2739/* harmony export */   "default": function() { return /* binding */ getOppositePlacement; }
2740/* harmony export */ });
2741var hash = {
2742  left: 'right',
2743  right: 'left',
2744  bottom: 'top',
2745  top: 'bottom'
2746};
2747function getOppositePlacement(placement) {
2748  return placement.replace(/left|right|bottom|top/g, function (matched) {
2749    return hash[matched];
2750  });
2751}
2752
2753/***/ }),
2754
vendor: 882 bytes, lines 2755-2777
2755/***/ "./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js":
2756/*!********************************************************************************!*\
2757  !*** ./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js ***!
2758  \********************************************************************************/
2759/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2760
2761"use strict";
2762__webpack_require__.r(__webpack_exports__);
2763/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2764/* harmony export */   "default": function() { return /* binding */ getOppositeVariationPlacement; }
2765/* harmony export */ });
2766var hash = {
2767  start: 'end',
2768  end: 'start'
2769};
2770function getOppositeVariationPlacement(placement) {
2771  return placement.replace(/start|end/g, function (matched) {
2772    return hash[matched];
2773  });
2774}
2775
2776/***/ }),
2777
vendor: 673 bytes, lines 2778-2794
2778/***/ "./node_modules/@popperjs/core/lib/utils/getVariation.js":
2779/*!***************************************************************!*\
2780  !*** ./node_modules/@popperjs/core/lib/utils/getVariation.js ***!
2781  \***************************************************************/
2782/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2783
2784"use strict";
2785__webpack_require__.r(__webpack_exports__);
2786/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2787/* harmony export */   "default": function() { return /* binding */ getVariation; }
2788/* harmony export */ });
2789function getVariation(placement) {
2790  return placement.split('-')[1];
2791}
2792
2793/***/ }),
2794
vendor: 763 bytes, lines 2795-2813
2795/***/ "./node_modules/@popperjs/core/lib/utils/math.js":
2796/*!*******************************************************!*\
2797  !*** ./node_modules/@popperjs/core/lib/utils/math.js ***!
2798  \*******************************************************/
2799/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2800
2801"use strict";
2802__webpack_require__.r(__webpack_exports__);
2803/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2804/* harmony export */   max: function() { return /* binding */ max; },
2805/* harmony export */   min: function() { return /* binding */ min; },
2806/* harmony export */   round: function() { return /* binding */ round; }
2807/* harmony export */ });
2808var max = Math.max;
2809var min = Math.min;
2810var round = Math.round;
2811
2812/***/ }),
2813
vendor: 1,107 bytes, lines 2814-2841
2814/***/ "./node_modules/@popperjs/core/lib/utils/mergeByName.js":
2815/*!**************************************************************!*\
2816  !*** ./node_modules/@popperjs/core/lib/utils/mergeByName.js ***!
2817  \**************************************************************/
2818/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2819
2820"use strict";
2821__webpack_require__.r(__webpack_exports__);
2822/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2823/* harmony export */   "default": function() { return /* binding */ mergeByName; }
2824/* harmony export */ });
2825function mergeByName(modifiers) {
2826  var merged = modifiers.reduce(function (merged, current) {
2827    var existing = merged[current.name];
2828    merged[current.name] = existing ? Object.assign({}, existing, current, {
2829      options: Object.assign({}, existing.options, current.options),
2830      data: Object.assign({}, existing.data, current.data)
2831    }) : current;
2832    return merged;
2833  }, {}); // IE11 does not support Object.values
2834
2835  return Object.keys(merged).map(function (key) {
2836    return merged[key];
2837  });
2838}
2839
2840/***/ }),
2841
vendor: 989 bytes, lines 2842-2860
2842/***/ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js":
2843/*!*********************************************************************!*\
2844  !*** ./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js ***!
2845  \*********************************************************************/
2846/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2847
2848"use strict";
2849__webpack_require__.r(__webpack_exports__);
2850/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2851/* harmony export */   "default": function() { return /* binding */ mergePaddingObject; }
2852/* harmony export */ });
2853/* harmony import */ var _getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getFreshSideObject.js */ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js");
2854
2855function mergePaddingObject(paddingObject) {
2856  return Object.assign({}, (0,_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__["default"])(), paddingObject);
2857}
2858
2859/***/ }),
2860
vendor: 1,984 bytes, lines 2861-2919
2861/***/ "./node_modules/@popperjs/core/lib/utils/orderModifiers.js":
2862/*!*****************************************************************!*\
2863  !*** ./node_modules/@popperjs/core/lib/utils/orderModifiers.js ***!
2864  \*****************************************************************/
2865/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2866
2867"use strict";
2868__webpack_require__.r(__webpack_exports__);
2869/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2870/* harmony export */   "default": function() { return /* binding */ orderModifiers; }
2871/* harmony export */ });
2872/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
2873 // source: https://stackoverflow.com/questions/49875255
2874
2875function order(modifiers) {
2876  var map = new Map();
2877  var visited = new Set();
2878  var result = [];
2879  modifiers.forEach(function (modifier) {
2880    map.set(modifier.name, modifier);
2881  }); // On visiting object, check for its dependencies and visit them recursively
2882
2883  function sort(modifier) {
2884    visited.add(modifier.name);
2885    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
2886    requires.forEach(function (dep) {
2887      if (!visited.has(dep)) {
2888        var depModifier = map.get(dep);
2889
2890        if (depModifier) {
2891          sort(depModifier);
2892        }
2893      }
2894    });
2895    result.push(modifier);
2896  }
2897
2898  modifiers.forEach(function (modifier) {
2899    if (!visited.has(modifier.name)) {
2900      // check for visited object
2901      sort(modifier);
2902    }
2903  });
2904  return result;
2905}
2906
2907function orderModifiers(modifiers) {
2908  // order based on dependencies
2909  var orderedModifiers = order(modifiers); // order based on phase
2910
2911  return _enums_js__WEBPACK_IMPORTED_MODULE_0__.modifierPhases.reduce(function (acc, phase) {
2912    return acc.concat(orderedModifiers.filter(function (modifier) {
2913      return modifier.phase === phase;
2914    }));
2915  }, []);
2916}
2917
2918/***/ }),
2919
vendor: 799 bytes, lines 2920-2941
2920/***/ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js":
2921/*!*******************************************************************!*\
2922  !*** ./node_modules/@popperjs/core/lib/utils/rectToClientRect.js ***!
2923  \*******************************************************************/
2924/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2925
2926"use strict";
2927__webpack_require__.r(__webpack_exports__);
2928/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2929/* harmony export */   "default": function() { return /* binding */ rectToClientRect; }
2930/* harmony export */ });
2931function rectToClientRect(rect) {
2932  return Object.assign({}, rect, {
2933    left: rect.x,
2934    top: rect.y,
2935    right: rect.x + rect.width,
2936    bottom: rect.y + rect.height
2937  });
2938}
2939
2940/***/ }),
2941
vendor: 876 bytes, lines 2942-2966
2942/***/ "./node_modules/@popperjs/core/lib/utils/userAgent.js":
2943/*!************************************************************!*\
2944  !*** ./node_modules/@popperjs/core/lib/utils/userAgent.js ***!
2945  \************************************************************/
2946/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2947
2948"use strict";
2949__webpack_require__.r(__webpack_exports__);
2950/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2951/* harmony export */   "default": function() { return /* binding */ getUAString; }
2952/* harmony export */ });
2953function getUAString() {
2954  var uaData = navigator.userAgentData;
2955
2956  if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {
2957    return uaData.brands.map(function (item) {
2958      return item.brand + "/" + item.version;
2959    }).join(' ');
2960  }
2961
2962  return navigator.userAgent;
2963}
2964
2965/***/ }),
2966
vendor: 1,081 bytes, lines 2967-2990
2967/***/ "./node_modules/@popperjs/core/lib/utils/within.js":
2968/*!*********************************************************!*\
2969  !*** ./node_modules/@popperjs/core/lib/utils/within.js ***!
2970  \*********************************************************/
2971/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2972
2973"use strict";
2974__webpack_require__.r(__webpack_exports__);
2975/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2976/* harmony export */   within: function() { return /* binding */ within; },
2977/* harmony export */   withinMaxClamp: function() { return /* binding */ withinMaxClamp; }
2978/* harmony export */ });
2979/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");
2980
2981function within(min, value, max) {
2982  return (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.max)(min, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.min)(value, max));
2983}
2984function withinMaxClamp(min, value, max) {
2985  var v = within(min, value, max);
2986  return v > max ? max : v;
2987}
2988
2989/***/ }),
2990
vendor: 145,731 bytes, lines 2991-7494
2991/***/ "./node_modules/bootstrap/dist/js/bootstrap.js":
2992/*!*****************************************************!*\
2993  !*** ./node_modules/bootstrap/dist/js/bootstrap.js ***!
2994  \*****************************************************/
2995/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
2996
2997/* provided dependency */ var __webpack_provided_window_dot_jQuery = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery-exposed-exposed.js");
2998/*!
2999  * Bootstrap v5.3.3 (https://getbootstrap.com/)
3000  * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
3001  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3002  */
3003(function (global, factory) {
3004   true ? module.exports = factory(__webpack_require__(/*! @popperjs/core */ "./node_modules/@popperjs/core/lib/index.js")) :
3005  0;
3006})(this, (function (Popper) { 'use strict';
3007
3008  function _interopNamespaceDefault(e) {
3009    const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
3010    if (e) {
3011      for (const k in e) {
3012        if (k !== 'default') {
3013          const d = Object.getOwnPropertyDescriptor(e, k);
3014          Object.defineProperty(n, k, d.get ? d : {
3015            enumerable: true,
3016            get: () => e[k]
3017          });
3018        }
3019      }
3020    }
3021    n.default = e;
3022    return Object.freeze(n);
3023  }
3024
3025  const Popper__namespace = /*#__PURE__*/_interopNamespaceDefault(Popper);
3026
3027  /**
3028   * --------------------------------------------------------------------------
3029   * Bootstrap dom/data.js
3030   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3031   * --------------------------------------------------------------------------
3032   */
3033
3034  /**
3035   * Constants
3036   */
3037
3038  const elementMap = new Map();
3039  const Data = {
3040    set(element, key, instance) {
3041      if (!elementMap.has(element)) {
3042        elementMap.set(element, new Map());
3043      }
3044      const instanceMap = elementMap.get(element);
3045
3046      // make it clear we only want one instance per element
3047      // can be removed later when multiple key/instances are fine to be used
3048      if (!instanceMap.has(key) && instanceMap.size !== 0) {
3049        // eslint-disable-next-line no-console
3050        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
3051        return;
3052      }
3053      instanceMap.set(key, instance);
3054    },
3055    get(element, key) {
3056      if (elementMap.has(element)) {
3057        return elementMap.get(element).get(key) || null;
3058      }
3059      return null;
3060    },
3061    remove(element, key) {
3062      if (!elementMap.has(element)) {
3063        return;
3064      }
3065      const instanceMap = elementMap.get(element);
3066      instanceMap.delete(key);
3067
3068      // free up element references if there are no instances left for an element
3069      if (instanceMap.size === 0) {
3070        elementMap.delete(element);
3071      }
3072    }
3073  };
3074
3075  /**
3076   * --------------------------------------------------------------------------
3077   * Bootstrap util/index.js
3078   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3079   * --------------------------------------------------------------------------
3080   */
3081
3082  const MAX_UID = 1000000;
3083  const MILLISECONDS_MULTIPLIER = 1000;
3084  const TRANSITION_END = 'transitionend';
3085
3086  /**
3087   * Properly escape IDs selectors to handle weird IDs
3088   * @param {string} selector
3089   * @returns {string}
3090   */
3091  const parseSelector = selector => {
3092    if (selector && window.CSS && window.CSS.escape) {
3093      // document.querySelector needs escaping to handle IDs (html5+) containing for instance /
3094      selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`);
3095    }
3096    return selector;
3097  };
3098
3099  // Shout-out Angus Croll (https://goo.gl/pxwQGp)
3100  const toType = object => {
3101    if (object === null || object === undefined) {
3102      return `${object}`;
3103    }
3104    return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
3105  };
3106
3107  /**
3108   * Public Util API
3109   */
3110
3111  const getUID = prefix => {
3112    do {
3113      prefix += Math.floor(Math.random() * MAX_UID);
3114    } while (document.getElementById(prefix));
3115    return prefix;
3116  };
3117  const getTransitionDurationFromElement = element => {
3118    if (!element) {
3119      return 0;
3120    }
3121
3122    // Get transition-duration of the element
3123    let {
3124      transitionDuration,
3125      transitionDelay
3126    } = window.getComputedStyle(element);
3127    const floatTransitionDuration = Number.parseFloat(transitionDuration);
3128    const floatTransitionDelay = Number.parseFloat(transitionDelay);
3129
3130    // Return 0 if element or transition duration is not found
3131    if (!floatTransitionDuration && !floatTransitionDelay) {
3132      return 0;
3133    }
3134
3135    // If multiple durations are defined, take the first
3136    transitionDuration = transitionDuration.split(',')[0];
3137    transitionDelay = transitionDelay.split(',')[0];
3138    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
3139  };
3140  const triggerTransitionEnd = element => {
3141    element.dispatchEvent(new Event(TRANSITION_END));
3142  };
3143  const isElement = object => {
3144    if (!object || typeof object !== 'object') {
3145      return false;
3146    }
3147    if (typeof object.jquery !== 'undefined') {
3148      object = object[0];
3149    }
3150    return typeof object.nodeType !== 'undefined';
3151  };
3152  const getElement = object => {
3153    // it's a jQuery object or a node element
3154    if (isElement(object)) {
3155      return object.jquery ? object[0] : object;
3156    }
3157    if (typeof object === 'string' && object.length > 0) {
3158      return document.querySelector(parseSelector(object));
3159    }
3160    return null;
3161  };
3162  const isVisible = element => {
3163    if (!isElement(element) || element.getClientRects().length === 0) {
3164      return false;
3165    }
3166    const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';
3167    // Handle `details` element as its content may falsie appear visible when it is closed
3168    const closedDetails = element.closest('details:not([open])');
3169    if (!closedDetails) {
3170      return elementIsVisible;
3171    }
3172    if (closedDetails !== element) {
3173      const summary = element.closest('summary');
3174      if (summary && summary.parentNode !== closedDetails) {
3175        return false;
3176      }
3177      if (summary === null) {
3178        return false;
3179      }
3180    }
3181    return elementIsVisible;
3182  };
3183  const isDisabled = element => {
3184    if (!element || element.nodeType !== Node.ELEMENT_NODE) {
3185      return true;
3186    }
3187    if (element.classList.contains('disabled')) {
3188      return true;
3189    }
3190    if (typeof element.disabled !== 'undefined') {
3191      return element.disabled;
3192    }
3193    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
3194  };
3195  const findShadowRoot = element => {
3196    if (!document.documentElement.attachShadow) {
3197      return null;
3198    }
3199
3200    // Can find the shadow root otherwise it'll return the document
3201    if (typeof element.getRootNode === 'function') {
3202      const root = element.getRootNode();
3203      return root instanceof ShadowRoot ? root : null;
3204    }
3205    if (element instanceof ShadowRoot) {
3206      return element;
3207    }
3208
3209    // when we don't find a shadow root
3210    if (!element.parentNode) {
3211      return null;
3212    }
3213    return findShadowRoot(element.parentNode);
3214  };
3215  const noop = () => {};
3216
3217  /**
3218   * Trick to restart an element's animation
3219   *
3220   * @param {HTMLElement} element
3221   * @return void
3222   *
3223   * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
3224   */
3225  const reflow = element => {
3226    element.offsetHeight; // eslint-disable-line no-unused-expressions
3227  };
3228  const getjQuery = () => {
3229    if (__webpack_provided_window_dot_jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
3230      return __webpack_provided_window_dot_jQuery;
3231    }
3232    return null;
3233  };
3234  const DOMContentLoadedCallbacks = [];
3235  const onDOMContentLoaded = callback => {
3236    if (document.readyState === 'loading') {
3237      // add listener on the first call when the document is in loading state
3238      if (!DOMContentLoadedCallbacks.length) {
3239        document.addEventListener('DOMContentLoaded', () => {
3240          for (const callback of DOMContentLoadedCallbacks) {
3241            callback();
3242          }
3243        });
3244      }
3245      DOMContentLoadedCallbacks.push(callback);
3246    } else {
3247      callback();
3248    }
3249  };
3250  const isRTL = () => document.documentElement.dir === 'rtl';
3251  const defineJQueryPlugin = plugin => {
3252    onDOMContentLoaded(() => {
3253      const $ = getjQuery();
3254      /* istanbul ignore if */
3255      if ($) {
3256        const name = plugin.NAME;
3257        const JQUERY_NO_CONFLICT = $.fn[name];
3258        $.fn[name] = plugin.jQueryInterface;
3259        $.fn[name].Constructor = plugin;
3260        $.fn[name].noConflict = () => {
3261          $.fn[name] = JQUERY_NO_CONFLICT;
3262          return plugin.jQueryInterface;
3263        };
3264      }
3265    });
3266  };
3267  const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
3268    return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;
3269  };
3270  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
3271    if (!waitForTransition) {
3272      execute(callback);
3273      return;
3274    }
3275    const durationPadding = 5;
3276    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
3277    let called = false;
3278    const handler = ({
3279      target
3280    }) => {
3281      if (target !== transitionElement) {
3282        return;
3283      }
3284      called = true;
3285      transitionElement.removeEventListener(TRANSITION_END, handler);
3286      execute(callback);
3287    };
3288    transitionElement.addEventListener(TRANSITION_END, handler);
3289    setTimeout(() => {
3290      if (!called) {
3291        triggerTransitionEnd(transitionElement);
3292      }
3293    }, emulatedDuration);
3294  };
3295
3296  /**
3297   * Return the previous/next element of a list.
3298   *
3299   * @param {array} list    The list of elements
3300   * @param activeElement   The active element
3301   * @param shouldGetNext   Choose to get next or previous element
3302   * @param isCycleAllowed
3303   * @return {Element|elem} The proper element
3304   */
3305  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
3306    const listLength = list.length;
3307    let index = list.indexOf(activeElement);
3308
3309    // if the element does not exist in the list return an element
3310    // depending on the direction and if cycle is allowed
3311    if (index === -1) {
3312      return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];
3313    }
3314    index += shouldGetNext ? 1 : -1;
3315    if (isCycleAllowed) {
3316      index = (index + listLength) % listLength;
3317    }
3318    return list[Math.max(0, Math.min(index, listLength - 1))];
3319  };
3320
3321  /**
3322   * --------------------------------------------------------------------------
3323   * Bootstrap dom/event-handler.js
3324   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3325   * --------------------------------------------------------------------------
3326   */
3327
3328
3329  /**
3330   * Constants
3331   */
3332
3333  const namespaceRegex = /[^.]*(?=\..*)\.|.*/;
3334  const stripNameRegex = /\..*/;
3335  const stripUidRegex = /::\d+$/;
3336  const eventRegistry = {}; // Events storage
3337  let uidEvent = 1;
3338  const customEvents = {
3339    mouseenter: 'mouseover',
3340    mouseleave: 'mouseout'
3341  };
3342  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);
3343
3344  /**
3345   * Private methods
3346   */
3347
3348  function makeEventUid(element, uid) {
3349    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
3350  }
3351  function getElementEvents(element) {
3352    const uid = makeEventUid(element);
3353    element.uidEvent = uid;
3354    eventRegistry[uid] = eventRegistry[uid] || {};
3355    return eventRegistry[uid];
3356  }
3357  function bootstrapHandler(element, fn) {
3358    return function handler(event) {
3359      hydrateObj(event, {
3360        delegateTarget: element
3361      });
3362      if (handler.oneOff) {
3363        EventHandler.off(element, event.type, fn);
3364      }
3365      return fn.apply(element, [event]);
3366    };
3367  }
3368  function bootstrapDelegationHandler(element, selector, fn) {
3369    return function handler(event) {
3370      const domElements = element.querySelectorAll(selector);
3371      for (let {
3372        target
3373      } = event; target && target !== this; target = target.parentNode) {
3374        for (const domElement of domElements) {
3375          if (domElement !== target) {
3376            continue;
3377          }
3378          hydrateObj(event, {
3379            delegateTarget: target
3380          });
3381          if (handler.oneOff) {
3382            EventHandler.off(element, event.type, selector, fn);
3383          }
3384          return fn.apply(target, [event]);
3385        }
3386      }
3387    };
3388  }
3389  function findHandler(events, callable, delegationSelector = null) {
3390    return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);
3391  }
3392  function normalizeParameters(originalTypeEvent, handler, delegationFunction) {
3393    const isDelegated = typeof handler === 'string';
3394    // TODO: tooltip passes `false` instead of selector, so we need to check
3395    const callable = isDelegated ? delegationFunction : handler || delegationFunction;
3396    let typeEvent = getTypeEvent(originalTypeEvent);
3397    if (!nativeEvents.has(typeEvent)) {
3398      typeEvent = originalTypeEvent;
3399    }
3400    return [isDelegated, callable, typeEvent];
3401  }
3402  function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {
3403    if (typeof originalTypeEvent !== 'string' || !element) {
3404      return;
3405    }
3406    let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
3407
3408    // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
3409    // this prevents the handler from being dispatched the same way as mouseover or mouseout does
3410    if (originalTypeEvent in customEvents) {
3411      const wrapFunction = fn => {
3412        return function (event) {
3413          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {
3414            return fn.call(this, event);
3415          }
3416        };
3417      };
3418      callable = wrapFunction(callable);
3419    }
3420    const events = getElementEvents(element);
3421    const handlers = events[typeEvent] || (events[typeEvent] = {});
3422    const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);
3423    if (previousFunction) {
3424      previousFunction.oneOff = previousFunction.oneOff && oneOff;
3425      return;
3426    }
3427    const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));
3428    const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);
3429    fn.delegationSelector = isDelegated ? handler : null;
3430    fn.callable = callable;
3431    fn.oneOff = oneOff;
3432    fn.uidEvent = uid;
3433    handlers[uid] = fn;
3434    element.addEventListener(typeEvent, fn, isDelegated);
3435  }
3436  function removeHandler(element, events, typeEvent, handler, delegationSelector) {
3437    const fn = findHandler(events[typeEvent], handler, delegationSelector);
3438    if (!fn) {
3439      return;
3440    }
3441    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));
3442    delete events[typeEvent][fn.uidEvent];
3443  }
3444  function removeNamespacedHandlers(element, events, typeEvent, namespace) {
3445    const storeElementEvent = events[typeEvent] || {};
3446    for (const [handlerKey, event] of Object.entries(storeElementEvent)) {
3447      if (handlerKey.includes(namespace)) {
3448        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
3449      }
3450    }
3451  }
3452  function getTypeEvent(event) {
3453    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')
3454    event = event.replace(stripNameRegex, '');
3455    return customEvents[event] || event;
3456  }
3457  const EventHandler = {
3458    on(element, event, handler, delegationFunction) {
3459      addHandler(element, event, handler, delegationFunction, false);
3460    },
3461    one(element, event, handler, delegationFunction) {
3462      addHandler(element, event, handler, delegationFunction, true);
3463    },
3464    off(element, originalTypeEvent, handler, delegationFunction) {
3465      if (typeof originalTypeEvent !== 'string' || !element) {
3466        return;
3467      }
3468      const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
3469      const inNamespace = typeEvent !== originalTypeEvent;
3470      const events = getElementEvents(element);
3471      const storeElementEvent = events[typeEvent] || {};
3472      const isNamespace = originalTypeEvent.startsWith('.');
3473      if (typeof callable !== 'undefined') {
3474        // Simplest case: handler is passed, remove that listener ONLY.
3475        if (!Object.keys(storeElementEvent).length) {
3476          return;
3477        }
3478        removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);
3479        return;
3480      }
3481      if (isNamespace) {
3482        for (const elementEvent of Object.keys(events)) {
3483          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
3484        }
3485      }
3486      for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {
3487        const handlerKey = keyHandlers.replace(stripUidRegex, '');
3488        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
3489          removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
3490        }
3491      }
3492    },
3493    trigger(element, event, args) {
3494      if (typeof event !== 'string' || !element) {
3495        return null;
3496      }
3497      const $ = getjQuery();
3498      const typeEvent = getTypeEvent(event);
3499      const inNamespace = event !== typeEvent;
3500      let jQueryEvent = null;
3501      let bubbles = true;
3502      let nativeDispatch = true;
3503      let defaultPrevented = false;
3504      if (inNamespace && $) {
3505        jQueryEvent = $.Event(event, args);
3506        $(element).trigger(jQueryEvent);
3507        bubbles = !jQueryEvent.isPropagationStopped();
3508        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
3509        defaultPrevented = jQueryEvent.isDefaultPrevented();
3510      }
3511      const evt = hydrateObj(new Event(event, {
3512        bubbles,
3513        cancelable: true
3514      }), args);
3515      if (defaultPrevented) {
3516        evt.preventDefault();
3517      }
3518      if (nativeDispatch) {
3519        element.dispatchEvent(evt);
3520      }
3521      if (evt.defaultPrevented && jQueryEvent) {
3522        jQueryEvent.preventDefault();
3523      }
3524      return evt;
3525    }
3526  };
3527  function hydrateObj(obj, meta = {}) {
3528    for (const [key, value] of Object.entries(meta)) {
3529      try {
3530        obj[key] = value;
3531      } catch (_unused) {
3532        Object.defineProperty(obj, key, {
3533          configurable: true,
3534          get() {
3535            return value;
3536          }
3537        });
3538      }
3539    }
3540    return obj;
3541  }
3542
3543  /**
3544   * --------------------------------------------------------------------------
3545   * Bootstrap dom/manipulator.js
3546   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3547   * --------------------------------------------------------------------------
3548   */
3549
3550  function normalizeData(value) {
3551    if (value === 'true') {
3552      return true;
3553    }
3554    if (value === 'false') {
3555      return false;
3556    }
3557    if (value === Number(value).toString()) {
3558      return Number(value);
3559    }
3560    if (value === '' || value === 'null') {
3561      return null;
3562    }
3563    if (typeof value !== 'string') {
3564      return value;
3565    }
3566    try {
3567      return JSON.parse(decodeURIComponent(value));
3568    } catch (_unused) {
3569      return value;
3570    }
3571  }
3572  function normalizeDataKey(key) {
3573    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);
3574  }
3575  const Manipulator = {
3576    setDataAttribute(element, key, value) {
3577      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
3578    },
3579    removeDataAttribute(element, key) {
3580      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
3581    },
3582    getDataAttributes(element) {
3583      if (!element) {
3584        return {};
3585      }
3586      const attributes = {};
3587      const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));
3588      for (const key of bsKeys) {
3589        let pureKey = key.replace(/^bs/, '');
3590        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
3591        attributes[pureKey] = normalizeData(element.dataset[key]);
3592      }
3593      return attributes;
3594    },
3595    getDataAttribute(element, key) {
3596      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
3597    }
3598  };
3599
3600  /**
3601   * --------------------------------------------------------------------------
3602   * Bootstrap util/config.js
3603   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3604   * --------------------------------------------------------------------------
3605   */
3606
3607
3608  /**
3609   * Class definition
3610   */
3611
3612  class Config {
3613    // Getters
3614    static get Default() {
3615      return {};
3616    }
3617    static get DefaultType() {
3618      return {};
3619    }
3620    static get NAME() {
3621      throw new Error('You have to implement the static method "NAME", for each component!');
3622    }
3623    _getConfig(config) {
3624      config = this._mergeConfigObj(config);
3625      config = this._configAfterMerge(config);
3626      this._typeCheckConfig(config);
3627      return config;
3628    }
3629    _configAfterMerge(config) {
3630      return config;
3631    }
3632    _mergeConfigObj(config, element) {
3633      const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse
3634
3635      return {
3636        ...this.constructor.Default,
3637        ...(typeof jsonConfig === 'object' ? jsonConfig : {}),
3638        ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),
3639        ...(typeof config === 'object' ? config : {})
3640      };
3641    }
3642    _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {
3643      for (const [property, expectedTypes] of Object.entries(configTypes)) {
3644        const value = config[property];
3645        const valueType = isElement(value) ? 'element' : toType(value);
3646        if (!new RegExp(expectedTypes).test(valueType)) {
3647          throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
3648        }
3649      }
3650    }
3651  }
3652
3653  /**
3654   * --------------------------------------------------------------------------
3655   * Bootstrap base-component.js
3656   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3657   * --------------------------------------------------------------------------
3658   */
3659
3660
3661  /**
3662   * Constants
3663   */
3664
3665  const VERSION = '5.3.3';
3666
3667  /**
3668   * Class definition
3669   */
3670
3671  class BaseComponent extends Config {
3672    constructor(element, config) {
3673      super();
3674      element = getElement(element);
3675      if (!element) {
3676        return;
3677      }
3678      this._element = element;
3679      this._config = this._getConfig(config);
3680      Data.set(this._element, this.constructor.DATA_KEY, this);
3681    }
3682
3683    // Public
3684    dispose() {
3685      Data.remove(this._element, this.constructor.DATA_KEY);
3686      EventHandler.off(this._element, this.constructor.EVENT_KEY);
3687      for (const propertyName of Object.getOwnPropertyNames(this)) {
3688        this[propertyName] = null;
3689      }
3690    }
3691    _queueCallback(callback, element, isAnimated = true) {
3692      executeAfterTransition(callback, element, isAnimated);
3693    }
3694    _getConfig(config) {
3695      config = this._mergeConfigObj(config, this._element);
3696      config = this._configAfterMerge(config);
3697      this._typeCheckConfig(config);
3698      return config;
3699    }
3700
3701    // Static
3702    static getInstance(element) {
3703      return Data.get(getElement(element), this.DATA_KEY);
3704    }
3705    static getOrCreateInstance(element, config = {}) {
3706      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);
3707    }
3708    static get VERSION() {
3709      return VERSION;
3710    }
3711    static get DATA_KEY() {
3712      return `bs.${this.NAME}`;
3713    }
3714    static get EVENT_KEY() {
3715      return `.${this.DATA_KEY}`;
3716    }
3717    static eventName(name) {
3718      return `${name}${this.EVENT_KEY}`;
3719    }
3720  }
3721
3722  /**
3723   * --------------------------------------------------------------------------
3724   * Bootstrap dom/selector-engine.js
3725   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3726   * --------------------------------------------------------------------------
3727   */
3728
3729  const getSelector = element => {
3730    let selector = element.getAttribute('data-bs-target');
3731    if (!selector || selector === '#') {
3732      let hrefAttribute = element.getAttribute('href');
3733
3734      // The only valid content that could double as a selector are IDs or classes,
3735      // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
3736      // `document.querySelector` will rightfully complain it is invalid.
3737      // See https://github.com/twbs/bootstrap/issues/32273
3738      if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {
3739        return null;
3740      }
3741
3742      // Just in case some CMS puts out a full URL with the anchor appended
3743      if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
3744        hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
3745      }
3746      selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
3747    }
3748    return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null;
3749  };
3750  const SelectorEngine = {
3751    find(selector, element = document.documentElement) {
3752      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
3753    },
3754    findOne(selector, element = document.documentElement) {
3755      return Element.prototype.querySelector.call(element, selector);
3756    },
3757    children(element, selector) {
3758      return [].concat(...element.children).filter(child => child.matches(selector));
3759    },
3760    parents(element, selector) {
3761      const parents = [];
3762      let ancestor = element.parentNode.closest(selector);
3763      while (ancestor) {
3764        parents.push(ancestor);
3765        ancestor = ancestor.parentNode.closest(selector);
3766      }
3767      return parents;
3768    },
3769    prev(element, selector) {
3770      let previous = element.previousElementSibling;
3771      while (previous) {
3772        if (previous.matches(selector)) {
3773          return [previous];
3774        }
3775        previous = previous.previousElementSibling;
3776      }
3777      return [];
3778    },
3779    // TODO: this is now unused; remove later along with prev()
3780    next(element, selector) {
3781      let next = element.nextElementSibling;
3782      while (next) {
3783        if (next.matches(selector)) {
3784          return [next];
3785        }
3786        next = next.nextElementSibling;
3787      }
3788      return [];
3789    },
3790    focusableChildren(element) {
3791      const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(',');
3792      return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
3793    },
3794    getSelectorFromElement(element) {
3795      const selector = getSelector(element);
3796      if (selector) {
3797        return SelectorEngine.findOne(selector) ? selector : null;
3798      }
3799      return null;
3800    },
3801    getElementFromSelector(element) {
3802      const selector = getSelector(element);
3803      return selector ? SelectorEngine.findOne(selector) : null;
3804    },
3805    getMultipleElementsFromSelector(element) {
3806      const selector = getSelector(element);
3807      return selector ? SelectorEngine.find(selector) : [];
3808    }
3809  };
3810
3811  /**
3812   * --------------------------------------------------------------------------
3813   * Bootstrap util/component-functions.js
3814   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3815   * --------------------------------------------------------------------------
3816   */
3817
3818  const enableDismissTrigger = (component, method = 'hide') => {
3819    const clickEvent = `click.dismiss${component.EVENT_KEY}`;
3820    const name = component.NAME;
3821    EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) {
3822      if (['A', 'AREA'].includes(this.tagName)) {
3823        event.preventDefault();
3824      }
3825      if (isDisabled(this)) {
3826        return;
3827      }
3828      const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);
3829      const instance = component.getOrCreateInstance(target);
3830
3831      // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
3832      instance[method]();
3833    });
3834  };
3835
3836  /**
3837   * --------------------------------------------------------------------------
3838   * Bootstrap alert.js
3839   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3840   * --------------------------------------------------------------------------
3841   */
3842
3843
3844  /**
3845   * Constants
3846   */
3847
3848  const NAME$f = 'alert';
3849  const DATA_KEY$a = 'bs.alert';
3850  const EVENT_KEY$b = `.${DATA_KEY$a}`;
3851  const EVENT_CLOSE = `close${EVENT_KEY$b}`;
3852  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;
3853  const CLASS_NAME_FADE$5 = 'fade';
3854  const CLASS_NAME_SHOW$8 = 'show';
3855
3856  /**
3857   * Class definition
3858   */
3859
3860  class Alert extends BaseComponent {
3861    // Getters
3862    static get NAME() {
3863      return NAME$f;
3864    }
3865
3866    // Public
3867    close() {
3868      const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);
3869      if (closeEvent.defaultPrevented) {
3870        return;
3871      }
3872      this._element.classList.remove(CLASS_NAME_SHOW$8);
3873      const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);
3874      this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
3875    }
3876
3877    // Private
3878    _destroyElement() {
3879      this._element.remove();
3880      EventHandler.trigger(this._element, EVENT_CLOSED);
3881      this.dispose();
3882    }
3883
3884    // Static
3885    static jQueryInterface(config) {
3886      return this.each(function () {
3887        const data = Alert.getOrCreateInstance(this);
3888        if (typeof config !== 'string') {
3889          return;
3890        }
3891        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
3892          throw new TypeError(`No method named "${config}"`);
3893        }
3894        data[config](this);
3895      });
3896    }
3897  }
3898
3899  /**
3900   * Data API implementation
3901   */
3902
3903  enableDismissTrigger(Alert, 'close');
3904
3905  /**
3906   * jQuery
3907   */
3908
3909  defineJQueryPlugin(Alert);
3910
3911  /**
3912   * --------------------------------------------------------------------------
3913   * Bootstrap button.js
3914   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3915   * --------------------------------------------------------------------------
3916   */
3917
3918
3919  /**
3920   * Constants
3921   */
3922
3923  const NAME$e = 'button';
3924  const DATA_KEY$9 = 'bs.button';
3925  const EVENT_KEY$a = `.${DATA_KEY$9}`;
3926  const DATA_API_KEY$6 = '.data-api';
3927  const CLASS_NAME_ACTIVE$3 = 'active';
3928  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]';
3929  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;
3930
3931  /**
3932   * Class definition
3933   */
3934
3935  class Button extends BaseComponent {
3936    // Getters
3937    static get NAME() {
3938      return NAME$e;
3939    }
3940
3941    // Public
3942    toggle() {
3943      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
3944      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
3945    }
3946
3947    // Static
3948    static jQueryInterface(config) {
3949      return this.each(function () {
3950        const data = Button.getOrCreateInstance(this);
3951        if (config === 'toggle') {
3952          data[config]();
3953        }
3954      });
3955    }
3956  }
3957
3958  /**
3959   * Data API implementation
3960   */
3961
3962  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {
3963    event.preventDefault();
3964    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);
3965    const data = Button.getOrCreateInstance(button);
3966    data.toggle();
3967  });
3968
3969  /**
3970   * jQuery
3971   */
3972
3973  defineJQueryPlugin(Button);
3974
3975  /**
3976   * --------------------------------------------------------------------------
3977   * Bootstrap util/swipe.js
3978   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3979   * --------------------------------------------------------------------------
3980   */
3981
3982
3983  /**
3984   * Constants
3985   */
3986
3987  const NAME$d = 'swipe';
3988  const EVENT_KEY$9 = '.bs.swipe';
3989  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;
3990  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;
3991  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;
3992  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;
3993  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;
3994  const POINTER_TYPE_TOUCH = 'touch';
3995  const POINTER_TYPE_PEN = 'pen';
3996  const CLASS_NAME_POINTER_EVENT = 'pointer-event';
3997  const SWIPE_THRESHOLD = 40;
3998  const Default$c = {
3999    endCallback: null,
4000    leftCallback: null,
4001    rightCallback: null
4002  };
4003  const DefaultType$c = {
4004    endCallback: '(function|null)',
4005    leftCallback: '(function|null)',
4006    rightCallback: '(function|null)'
4007  };
4008
4009  /**
4010   * Class definition
4011   */
4012
4013  class Swipe extends Config {
4014    constructor(element, config) {
4015      super();
4016      this._element = element;
4017      if (!element || !Swipe.isSupported()) {
4018        return;
4019      }
4020      this._config = this._getConfig(config);
4021      this._deltaX = 0;
4022      this._supportPointerEvents = Boolean(window.PointerEvent);
4023      this._initEvents();
4024    }
4025
4026    // Getters
4027    static get Default() {
4028      return Default$c;
4029    }
4030    static get DefaultType() {
4031      return DefaultType$c;
4032    }
4033    static get NAME() {
4034      return NAME$d;
4035    }
4036
4037    // Public
4038    dispose() {
4039      EventHandler.off(this._element, EVENT_KEY$9);
4040    }
4041
4042    // Private
4043    _start(event) {
4044      if (!this._supportPointerEvents) {
4045        this._deltaX = event.touches[0].clientX;
4046        return;
4047      }
4048      if (this._eventIsPointerPenTouch(event)) {
4049        this._deltaX = event.clientX;
4050      }
4051    }
4052    _end(event) {
4053      if (this._eventIsPointerPenTouch(event)) {
4054        this._deltaX = event.clientX - this._deltaX;
4055      }
4056      this._handleSwipe();
4057      execute(this._config.endCallback);
4058    }
4059    _move(event) {
4060      this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;
4061    }
4062    _handleSwipe() {
4063      const absDeltaX = Math.abs(this._deltaX);
4064      if (absDeltaX <= SWIPE_THRESHOLD) {
4065        return;
4066      }
4067      const direction = absDeltaX / this._deltaX;
4068      this._deltaX = 0;
4069      if (!direction) {
4070        return;
4071      }
4072      execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);
4073    }
4074    _initEvents() {
4075      if (this._supportPointerEvents) {
4076        EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));
4077        EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));
4078        this._element.classList.add(CLASS_NAME_POINTER_EVENT);
4079      } else {
4080        EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));
4081        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));
4082        EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));
4083      }
4084    }
4085    _eventIsPointerPenTouch(event) {
4086      return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);
4087    }
4088
4089    // Static
4090    static isSupported() {
4091      return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
4092    }
4093  }
4094
4095  /**
4096   * --------------------------------------------------------------------------
4097   * Bootstrap carousel.js
4098   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4099   * --------------------------------------------------------------------------
4100   */
4101
4102
4103  /**
4104   * Constants
4105   */
4106
4107  const NAME$c = 'carousel';
4108  const DATA_KEY$8 = 'bs.carousel';
4109  const EVENT_KEY$8 = `.${DATA_KEY$8}`;
4110  const DATA_API_KEY$5 = '.data-api';
4111  const ARROW_LEFT_KEY$1 = 'ArrowLeft';
4112  const ARROW_RIGHT_KEY$1 = 'ArrowRight';
4113  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
4114
4115  const ORDER_NEXT = 'next';
4116  const ORDER_PREV = 'prev';
4117  const DIRECTION_LEFT = 'left';
4118  const DIRECTION_RIGHT = 'right';
4119  const EVENT_SLIDE = `slide${EVENT_KEY$8}`;
4120  const EVENT_SLID = `slid${EVENT_KEY$8}`;
4121  const EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;
4122  const EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;
4123  const EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;
4124  const EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;
4125  const EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;
4126  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;
4127  const CLASS_NAME_CAROUSEL = 'carousel';
4128  const CLASS_NAME_ACTIVE$2 = 'active';
4129  const CLASS_NAME_SLIDE = 'slide';
4130  const CLASS_NAME_END = 'carousel-item-end';
4131  const CLASS_NAME_START = 'carousel-item-start';
4132  const CLASS_NAME_NEXT = 'carousel-item-next';
4133  const CLASS_NAME_PREV = 'carousel-item-prev';
4134  const SELECTOR_ACTIVE = '.active';
4135  const SELECTOR_ITEM = '.carousel-item';
4136  const SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;
4137  const SELECTOR_ITEM_IMG = '.carousel-item img';
4138  const SELECTOR_INDICATORS = '.carousel-indicators';
4139  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';
4140  const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]';
4141  const KEY_TO_DIRECTION = {
4142    [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,
4143    [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT
4144  };
4145  const Default$b = {
4146    interval: 5000,
4147    keyboard: true,
4148    pause: 'hover',
4149    ride: false,
4150    touch: true,
4151    wrap: true
4152  };
4153  const DefaultType$b = {
4154    interval: '(number|boolean)',
4155    // TODO:v6 remove boolean support
4156    keyboard: 'boolean',
4157    pause: '(string|boolean)',
4158    ride: '(boolean|string)',
4159    touch: 'boolean',
4160    wrap: 'boolean'
4161  };
4162
4163  /**
4164   * Class definition
4165   */
4166
4167  class Carousel extends BaseComponent {
4168    constructor(element, config) {
4169      super(element, config);
4170      this._interval = null;
4171      this._activeElement = null;
4172      this._isSliding = false;
4173      this.touchTimeout = null;
4174      this._swipeHelper = null;
4175      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);
4176      this._addEventListeners();
4177      if (this._config.ride === CLASS_NAME_CAROUSEL) {
4178        this.cycle();
4179      }
4180    }
4181
4182    // Getters
4183    static get Default() {
4184      return Default$b;
4185    }
4186    static get DefaultType() {
4187      return DefaultType$b;
4188    }
4189    static get NAME() {
4190      return NAME$c;
4191    }
4192
4193    // Public
4194    next() {
4195      this._slide(ORDER_NEXT);
4196    }
4197    nextWhenVisible() {
4198      // FIXME TODO use `document.visibilityState`
4199      // Don't call next when the page isn't visible
4200      // or the carousel or its parent isn't visible
4201      if (!document.hidden && isVisible(this._element)) {
4202        this.next();
4203      }
4204    }
4205    prev() {
4206      this._slide(ORDER_PREV);
4207    }
4208    pause() {
4209      if (this._isSliding) {
4210        triggerTransitionEnd(this._element);
4211      }
4212      this._clearInterval();
4213    }
4214    cycle() {
4215      this._clearInterval();
4216      this._updateInterval();
4217      this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);
4218    }
4219    _maybeEnableCycle() {
4220      if (!this._config.ride) {
4221        return;
4222      }
4223      if (this._isSliding) {
4224        EventHandler.one(this._element, EVENT_SLID, () => this.cycle());
4225        return;
4226      }
4227      this.cycle();
4228    }
4229    to(index) {
4230      const items = this._getItems();
4231      if (index > items.length - 1 || index < 0) {
4232        return;
4233      }
4234      if (this._isSliding) {
4235        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));
4236        return;
4237      }
4238      const activeIndex = this._getItemIndex(this._getActive());
4239      if (activeIndex === index) {
4240        return;
4241      }
4242      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;
4243      this._slide(order, items[index]);
4244    }
4245    dispose() {
4246      if (this._swipeHelper) {
4247        this._swipeHelper.dispose();
4248      }
4249      super.dispose();
4250    }
4251
4252    // Private
4253    _configAfterMerge(config) {
4254      config.defaultInterval = config.interval;
4255      return config;
4256    }
4257    _addEventListeners() {
4258      if (this._config.keyboard) {
4259        EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));
4260      }
4261      if (this._config.pause === 'hover') {
4262        EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());
4263        EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());
4264      }
4265      if (this._config.touch && Swipe.isSupported()) {
4266        this._addTouchEventListeners();
4267      }
4268    }
4269    _addTouchEventListeners() {
4270      for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {
4271        EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());
4272      }
4273      const endCallBack = () => {
4274        if (this._config.pause !== 'hover') {
4275          return;
4276        }
4277
4278        // If it's a touch-enabled device, mouseenter/leave are fired as
4279        // part of the mouse compatibility events on first tap - the carousel
4280        // would stop cycling until user tapped out of it;
4281        // here, we listen for touchend, explicitly pause the carousel
4282        // (as if it's the second time we tap on it, mouseenter compat event
4283        // is NOT fired) and after a timeout (to allow for mouse compatibility
4284        // events to fire) we explicitly restart cycling
4285
4286        this.pause();
4287        if (this.touchTimeout) {
4288          clearTimeout(this.touchTimeout);
4289        }
4290        this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);
4291      };
4292      const swipeConfig = {
4293        leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),
4294        rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),
4295        endCallback: endCallBack
4296      };
4297      this._swipeHelper = new Swipe(this._element, swipeConfig);
4298    }
4299    _keydown(event) {
4300      if (/input|textarea/i.test(event.target.tagName)) {
4301        return;
4302      }
4303      const direction = KEY_TO_DIRECTION[event.key];
4304      if (direction) {
4305        event.preventDefault();
4306        this._slide(this._directionToOrder(direction));
4307      }
4308    }
4309    _getItemIndex(element) {
4310      return this._getItems().indexOf(element);
4311    }
4312    _setActiveIndicatorElement(index) {
4313      if (!this._indicatorsElement) {
4314        return;
4315      }
4316      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);
4317      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);
4318      activeIndicator.removeAttribute('aria-current');
4319      const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement);
4320      if (newActiveIndicator) {
4321        newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);
4322        newActiveIndicator.setAttribute('aria-current', 'true');
4323      }
4324    }
4325    _updateInterval() {
4326      const element = this._activeElement || this._getActive();
4327      if (!element) {
4328        return;
4329      }
4330      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);
4331      this._config.interval = elementInterval || this._config.defaultInterval;
4332    }
4333    _slide(order, element = null) {
4334      if (this._isSliding) {
4335        return;
4336      }
4337      const activeElement = this._getActive();
4338      const isNext = order === ORDER_NEXT;
4339      const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);
4340      if (nextElement === activeElement) {
4341        return;
4342      }
4343      const nextElementIndex = this._getItemIndex(nextElement);
4344      const triggerEvent = eventName => {
4345        return EventHandler.trigger(this._element, eventName, {
4346          relatedTarget: nextElement,
4347          direction: this._orderToDirection(order),
4348          from: this._getItemIndex(activeElement),
4349          to: nextElementIndex
4350        });
4351      };
4352      const slideEvent = triggerEvent(EVENT_SLIDE);
4353      if (slideEvent.defaultPrevented) {
4354        return;
4355      }
4356      if (!activeElement || !nextElement) {
4357        // Some weirdness is happening, so we bail
4358        // TODO: change tests that use empty divs to avoid this check
4359        return;
4360      }
4361      const isCycling = Boolean(this._interval);
4362      this.pause();
4363      this._isSliding = true;
4364      this._setActiveIndicatorElement(nextElementIndex);
4365      this._activeElement = nextElement;
4366      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;
4367      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;
4368      nextElement.classList.add(orderClassName);
4369      reflow(nextElement);
4370      activeElement.classList.add(directionalClassName);
4371      nextElement.classList.add(directionalClassName);
4372      const completeCallBack = () => {
4373        nextElement.classList.remove(directionalClassName, orderClassName);
4374        nextElement.classList.add(CLASS_NAME_ACTIVE$2);
4375        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);
4376        this._isSliding = false;
4377        triggerEvent(EVENT_SLID);
4378      };
4379      this._queueCallback(completeCallBack, activeElement, this._isAnimated());
4380      if (isCycling) {
4381        this.cycle();
4382      }
4383    }
4384    _isAnimated() {
4385      return this._element.classList.contains(CLASS_NAME_SLIDE);
4386    }
4387    _getActive() {
4388      return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
4389    }
4390    _getItems() {
4391      return SelectorEngine.find(SELECTOR_ITEM, this._element);
4392    }
4393    _clearInterval() {
4394      if (this._interval) {
4395        clearInterval(this._interval);
4396        this._interval = null;
4397      }
4398    }
4399    _directionToOrder(direction) {
4400      if (isRTL()) {
4401        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;
4402      }
4403      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;
4404    }
4405    _orderToDirection(order) {
4406      if (isRTL()) {
4407        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;
4408      }
4409      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
4410    }
4411
4412    // Static
4413    static jQueryInterface(config) {
4414      return this.each(function () {
4415        const data = Carousel.getOrCreateInstance(this, config);
4416        if (typeof config === 'number') {
4417          data.to(config);
4418          return;
4419        }
4420        if (typeof config === 'string') {
4421          if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
4422            throw new TypeError(`No method named "${config}"`);
4423          }
4424          data[config]();
4425        }
4426      });
4427    }
4428  }
4429
4430  /**
4431   * Data API implementation
4432   */
4433
4434  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {
4435    const target = SelectorEngine.getElementFromSelector(this);
4436    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
4437      return;
4438    }
4439    event.preventDefault();
4440    const carousel = Carousel.getOrCreateInstance(target);
4441    const slideIndex = this.getAttribute('data-bs-slide-to');
4442    if (slideIndex) {
4443      carousel.to(slideIndex);
4444      carousel._maybeEnableCycle();
4445      return;
4446    }
4447    if (Manipulator.getDataAttribute(this, 'slide') === 'next') {
4448      carousel.next();
4449      carousel._maybeEnableCycle();
4450      return;
4451    }
4452    carousel.prev();
4453    carousel._maybeEnableCycle();
4454  });
4455  EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {
4456    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);
4457    for (const carousel of carousels) {
4458      Carousel.getOrCreateInstance(carousel);
4459    }
4460  });
4461
4462  /**
4463   * jQuery
4464   */
4465
4466  defineJQueryPlugin(Carousel);
4467
4468  /**
4469   * --------------------------------------------------------------------------
4470   * Bootstrap collapse.js
4471   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4472   * --------------------------------------------------------------------------
4473   */
4474
4475
4476  /**
4477   * Constants
4478   */
4479
4480  const NAME$b = 'collapse';
4481  const DATA_KEY$7 = 'bs.collapse';
4482  const EVENT_KEY$7 = `.${DATA_KEY$7}`;
4483  const DATA_API_KEY$4 = '.data-api';
4484  const EVENT_SHOW$6 = `show${EVENT_KEY$7}`;
4485  const EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;
4486  const EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;
4487  const EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;
4488  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;
4489  const CLASS_NAME_SHOW$7 = 'show';
4490  const CLASS_NAME_COLLAPSE = 'collapse';
4491  const CLASS_NAME_COLLAPSING = 'collapsing';
4492  const CLASS_NAME_COLLAPSED = 'collapsed';
4493  const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;
4494  const CLASS_NAME_HORIZONTAL = 'collapse-horizontal';
4495  const WIDTH = 'width';
4496  const HEIGHT = 'height';
4497  const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';
4498  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]';
4499  const Default$a = {
4500    parent: null,
4501    toggle: true
4502  };
4503  const DefaultType$a = {
4504    parent: '(null|element)',
4505    toggle: 'boolean'
4506  };
4507
4508  /**
4509   * Class definition
4510   */
4511
4512  class Collapse extends BaseComponent {
4513    constructor(element, config) {
4514      super(element, config);
4515      this._isTransitioning = false;
4516      this._triggerArray = [];
4517      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);
4518      for (const elem of toggleList) {
4519        const selector = SelectorEngine.getSelectorFromElement(elem);
4520        const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);
4521        if (selector !== null && filterElement.length) {
4522          this._triggerArray.push(elem);
4523        }
4524      }
4525      this._initializeChildren();
4526      if (!this._config.parent) {
4527        this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
4528      }
4529      if (this._config.toggle) {
4530        this.toggle();
4531      }
4532    }
4533
4534    // Getters
4535    static get Default() {
4536      return Default$a;
4537    }
4538    static get DefaultType() {
4539      return DefaultType$a;
4540    }
4541    static get NAME() {
4542      return NAME$b;
4543    }
4544
4545    // Public
4546    toggle() {
4547      if (this._isShown()) {
4548        this.hide();
4549      } else {
4550        this.show();
4551      }
4552    }
4553    show() {
4554      if (this._isTransitioning || this._isShown()) {
4555        return;
4556      }
4557      let activeChildren = [];
4558
4559      // find active children
4560      if (this._config.parent) {
4561        activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {
4562          toggle: false
4563        }));
4564      }
4565      if (activeChildren.length && activeChildren[0]._isTransitioning) {
4566        return;
4567      }
4568      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);
4569      if (startEvent.defaultPrevented) {
4570        return;
4571      }
4572      for (const activeInstance of activeChildren) {
4573        activeInstance.hide();
4574      }
4575      const dimension = this._getDimension();
4576      this._element.classList.remove(CLASS_NAME_COLLAPSE);
4577      this._element.classList.add(CLASS_NAME_COLLAPSING);
4578      this._element.style[dimension] = 0;
4579      this._addAriaAndCollapsedClass(this._triggerArray, true);
4580      this._isTransitioning = true;
4581      const complete = () => {
4582        this._isTransitioning = false;
4583        this._element.classList.remove(CLASS_NAME_COLLAPSING);
4584        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
4585        this._element.style[dimension] = '';
4586        EventHandler.trigger(this._element, EVENT_SHOWN$6);
4587      };
4588      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
4589      const scrollSize = `scroll${capitalizedDimension}`;
4590      this._queueCallback(complete, this._element, true);
4591      this._element.style[dimension] = `${this._element[scrollSize]}px`;
4592    }
4593    hide() {
4594      if (this._isTransitioning || !this._isShown()) {
4595        return;
4596      }
4597      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);
4598      if (startEvent.defaultPrevented) {
4599        return;
4600      }
4601      const dimension = this._getDimension();
4602      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
4603      reflow(this._element);
4604      this._element.classList.add(CLASS_NAME_COLLAPSING);
4605      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
4606      for (const trigger of this._triggerArray) {
4607        const element = SelectorEngine.getElementFromSelector(trigger);
4608        if (element && !this._isShown(element)) {
4609          this._addAriaAndCollapsedClass([trigger], false);
4610        }
4611      }
4612      this._isTransitioning = true;
4613      const complete = () => {
4614        this._isTransitioning = false;
4615        this._element.classList.remove(CLASS_NAME_COLLAPSING);
4616        this._element.classList.add(CLASS_NAME_COLLAPSE);
4617        EventHandler.trigger(this._element, EVENT_HIDDEN$6);
4618      };
4619      this._element.style[dimension] = '';
4620      this._queueCallback(complete, this._element, true);
4621    }
4622    _isShown(element = this._element) {
4623      return element.classList.contains(CLASS_NAME_SHOW$7);
4624    }
4625
4626    // Private
4627    _configAfterMerge(config) {
4628      config.toggle = Boolean(config.toggle); // Coerce string values
4629      config.parent = getElement(config.parent);
4630      return config;
4631    }
4632    _getDimension() {
4633      return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
4634    }
4635    _initializeChildren() {
4636      if (!this._config.parent) {
4637        return;
4638      }
4639      const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);
4640      for (const element of children) {
4641        const selected = SelectorEngine.getElementFromSelector(element);
4642        if (selected) {
4643          this._addAriaAndCollapsedClass([element], this._isShown(selected));
4644        }
4645      }
4646    }
4647    _getFirstLevelChildren(selector) {
4648      const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
4649      // remove children if greater depth
4650      return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));
4651    }
4652    _addAriaAndCollapsedClass(triggerArray, isOpen) {
4653      if (!triggerArray.length) {
4654        return;
4655      }
4656      for (const element of triggerArray) {
4657        element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);
4658        element.setAttribute('aria-expanded', isOpen);
4659      }
4660    }
4661
4662    // Static
4663    static jQueryInterface(config) {
4664      const _config = {};
4665      if (typeof config === 'string' && /show|hide/.test(config)) {
4666        _config.toggle = false;
4667      }
4668      return this.each(function () {
4669        const data = Collapse.getOrCreateInstance(this, _config);
4670        if (typeof config === 'string') {
4671          if (typeof data[config] === 'undefined') {
4672            throw new TypeError(`No method named "${config}"`);
4673          }
4674          data[config]();
4675        }
4676      });
4677    }
4678  }
4679
4680  /**
4681   * Data API implementation
4682   */
4683
4684  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {
4685    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
4686    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
4687      event.preventDefault();
4688    }
4689    for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {
4690      Collapse.getOrCreateInstance(element, {
4691        toggle: false
4692      }).toggle();
4693    }
4694  });
4695
4696  /**
4697   * jQuery
4698   */
4699
4700  defineJQueryPlugin(Collapse);
4701
4702  /**
4703   * --------------------------------------------------------------------------
4704   * Bootstrap dropdown.js
4705   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4706   * --------------------------------------------------------------------------
4707   */
4708
4709
4710  /**
4711   * Constants
4712   */
4713
4714  const NAME$a = 'dropdown';
4715  const DATA_KEY$6 = 'bs.dropdown';
4716  const EVENT_KEY$6 = `.${DATA_KEY$6}`;
4717  const DATA_API_KEY$3 = '.data-api';
4718  const ESCAPE_KEY$2 = 'Escape';
4719  const TAB_KEY$1 = 'Tab';
4720  const ARROW_UP_KEY$1 = 'ArrowUp';
4721  const ARROW_DOWN_KEY$1 = 'ArrowDown';
4722  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button
4723
4724  const EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;
4725  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;
4726  const EVENT_SHOW$5 = `show${EVENT_KEY$6}`;
4727  const EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;
4728  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;
4729  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;
4730  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;
4731  const CLASS_NAME_SHOW$6 = 'show';
4732  const CLASS_NAME_DROPUP = 'dropup';
4733  const CLASS_NAME_DROPEND = 'dropend';
4734  const CLASS_NAME_DROPSTART = 'dropstart';
4735  const CLASS_NAME_DROPUP_CENTER = 'dropup-center';
4736  const CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';
4737  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)';
4738  const SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;
4739  const SELECTOR_MENU = '.dropdown-menu';
4740  const SELECTOR_NAVBAR = '.navbar';
4741  const SELECTOR_NAVBAR_NAV = '.navbar-nav';
4742  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
4743  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';
4744  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';
4745  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';
4746  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';
4747  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';
4748  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';
4749  const PLACEMENT_TOPCENTER = 'top';
4750  const PLACEMENT_BOTTOMCENTER = 'bottom';
4751  const Default$9 = {
4752    autoClose: true,
4753    boundary: 'clippingParents',
4754    display: 'dynamic',
4755    offset: [0, 2],
4756    popperConfig: null,
4757    reference: 'toggle'
4758  };
4759  const DefaultType$9 = {
4760    autoClose: '(boolean|string)',
4761    boundary: '(string|element)',
4762    display: 'string',
4763    offset: '(array|string|function)',
4764    popperConfig: '(null|object|function)',
4765    reference: '(string|element|object)'
4766  };
4767
4768  /**
4769   * Class definition
4770   */
4771
4772  class Dropdown extends BaseComponent {
4773    constructor(element, config) {
4774      super(element, config);
4775      this._popper = null;
4776      this._parent = this._element.parentNode; // dropdown wrapper
4777      // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
4778      this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);
4779      this._inNavbar = this._detectNavbar();
4780    }
4781
4782    // Getters
4783    static get Default() {
4784      return Default$9;
4785    }
4786    static get DefaultType() {
4787      return DefaultType$9;
4788    }
4789    static get NAME() {
4790      return NAME$a;
4791    }
4792
4793    // Public
4794    toggle() {
4795      return this._isShown() ? this.hide() : this.show();
4796    }
4797    show() {
4798      if (isDisabled(this._element) || this._isShown()) {
4799        return;
4800      }
4801      const relatedTarget = {
4802        relatedTarget: this._element
4803      };
4804      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);
4805      if (showEvent.defaultPrevented) {
4806        return;
4807      }
4808      this._createPopper();
4809
4810      // If this is a touch-enabled device we add extra
4811      // empty mouseover listeners to the body's immediate children;
4812      // only needed because of broken event delegation on iOS
4813      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
4814      if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {
4815        for (const element of [].concat(...document.body.children)) {
4816          EventHandler.on(element, 'mouseover', noop);
4817        }
4818      }
4819      this._element.focus();
4820      this._element.setAttribute('aria-expanded', true);
4821      this._menu.classList.add(CLASS_NAME_SHOW$6);
4822      this._element.classList.add(CLASS_NAME_SHOW$6);
4823      EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);
4824    }
4825    hide() {
4826      if (isDisabled(this._element) || !this._isShown()) {
4827        return;
4828      }
4829      const relatedTarget = {
4830        relatedTarget: this._element
4831      };
4832      this._completeHide(relatedTarget);
4833    }
4834    dispose() {
4835      if (this._popper) {
4836        this._popper.destroy();
4837      }
4838      super.dispose();
4839    }
4840    update() {
4841      this._inNavbar = this._detectNavbar();
4842      if (this._popper) {
4843        this._popper.update();
4844      }
4845    }
4846
4847    // Private
4848    _completeHide(relatedTarget) {
4849      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);
4850      if (hideEvent.defaultPrevented) {
4851        return;
4852      }
4853
4854      // If this is a touch-enabled device we remove the extra
4855      // empty mouseover listeners we added for iOS support
4856      if ('ontouchstart' in document.documentElement) {
4857        for (const element of [].concat(...document.body.children)) {
4858          EventHandler.off(element, 'mouseover', noop);
4859        }
4860      }
4861      if (this._popper) {
4862        this._popper.destroy();
4863      }
4864      this._menu.classList.remove(CLASS_NAME_SHOW$6);
4865      this._element.classList.remove(CLASS_NAME_SHOW$6);
4866      this._element.setAttribute('aria-expanded', 'false');
4867      Manipulator.removeDataAttribute(this._menu, 'popper');
4868      EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);
4869    }
4870    _getConfig(config) {
4871      config = super._getConfig(config);
4872      if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
4873        // Popper virtual elements require a getBoundingClientRect method
4874        throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
4875      }
4876      return config;
4877    }
4878    _createPopper() {
4879      if (typeof Popper__namespace === 'undefined') {
4880        throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
4881      }
4882      let referenceElement = this._element;
4883      if (this._config.reference === 'parent') {
4884        referenceElement = this._parent;
4885      } else if (isElement(this._config.reference)) {
4886        referenceElement = getElement(this._config.reference);
4887      } else if (typeof this._config.reference === 'object') {
4888        referenceElement = this._config.reference;
4889      }
4890      const popperConfig = this._getPopperConfig();
4891      this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);
4892    }
4893    _isShown() {
4894      return this._menu.classList.contains(CLASS_NAME_SHOW$6);
4895    }
4896    _getPlacement() {
4897      const parentDropdown = this._parent;
4898      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
4899        return PLACEMENT_RIGHT;
4900      }
4901      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
4902        return PLACEMENT_LEFT;
4903      }
4904      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {
4905        return PLACEMENT_TOPCENTER;
4906      }
4907      if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {
4908        return PLACEMENT_BOTTOMCENTER;
4909      }
4910
4911      // We need to trim the value because custom properties can also include spaces
4912      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';
4913      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
4914        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
4915      }
4916      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
4917    }
4918    _detectNavbar() {
4919      return this._element.closest(SELECTOR_NAVBAR) !== null;
4920    }
4921    _getOffset() {
4922      const {
4923        offset
4924      } = this._config;
4925      if (typeof offset === 'string') {
4926        return offset.split(',').map(value => Number.parseInt(value, 10));
4927      }
4928      if (typeof offset === 'function') {
4929        return popperData => offset(popperData, this._element);
4930      }
4931      return offset;
4932    }
4933    _getPopperConfig() {
4934      const defaultBsPopperConfig = {
4935        placement: this._getPlacement(),
4936        modifiers: [{
4937          name: 'preventOverflow',
4938          options: {
4939            boundary: this._config.boundary
4940          }
4941        }, {
4942          name: 'offset',
4943          options: {
4944            offset: this._getOffset()
4945          }
4946        }]
4947      };
4948
4949      // Disable Popper if we have a static display or Dropdown is in Navbar
4950      if (this._inNavbar || this._config.display === 'static') {
4951        Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove
4952        defaultBsPopperConfig.modifiers = [{
4953          name: 'applyStyles',
4954          enabled: false
4955        }];
4956      }
4957      return {
4958        ...defaultBsPopperConfig,
4959        ...execute(this._config.popperConfig, [defaultBsPopperConfig])
4960      };
4961    }
4962    _selectMenuItem({
4963      key,
4964      target
4965    }) {
4966      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));
4967      if (!items.length) {
4968        return;
4969      }
4970
4971      // if target isn't included in items (e.g. when expanding the dropdown)
4972      // allow cycling to get the last item in case key equals ARROW_UP_KEY
4973      getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();
4974    }
4975
4976    // Static
4977    static jQueryInterface(config) {
4978      return this.each(function () {
4979        const data = Dropdown.getOrCreateInstance(this, config);
4980        if (typeof config !== 'string') {
4981          return;
4982        }
4983        if (typeof data[config] === 'undefined') {
4984          throw new TypeError(`No method named "${config}"`);
4985        }
4986        data[config]();
4987      });
4988    }
4989    static clearMenus(event) {
4990      if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {
4991        return;
4992      }
4993      const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);
4994      for (const toggle of openToggles) {
4995        const context = Dropdown.getInstance(toggle);
4996        if (!context || context._config.autoClose === false) {
4997          continue;
4998        }
4999        const composedPath = event.composedPath();
5000        const isMenuTarget = composedPath.includes(context._menu);
5001        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {
5002          continue;
5003        }
5004
5005        // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
5006        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {
5007          continue;
5008        }
5009        const relatedTarget = {
5010          relatedTarget: context._element
5011        };
5012        if (event.type === 'click') {
5013          relatedTarget.clickEvent = event;
5014        }
5015        context._completeHide(relatedTarget);
5016      }
5017    }
5018    static dataApiKeydownHandler(event) {
5019      // If not an UP | DOWN | ESCAPE key => not a dropdown command
5020      // If input/textarea && if key is other than ESCAPE => not a dropdown command
5021
5022      const isInput = /input|textarea/i.test(event.target.tagName);
5023      const isEscapeEvent = event.key === ESCAPE_KEY$2;
5024      const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);
5025      if (!isUpOrDownEvent && !isEscapeEvent) {
5026        return;
5027      }
5028      if (isInput && !isEscapeEvent) {
5029        return;
5030      }
5031      event.preventDefault();
5032
5033      // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
5034      const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);
5035      const instance = Dropdown.getOrCreateInstance(getToggleButton);
5036      if (isUpOrDownEvent) {
5037        event.stopPropagation();
5038        instance.show();
5039        instance._selectMenuItem(event);
5040        return;
5041      }
5042      if (instance._isShown()) {
5043        // else is escape and we check if it is shown
5044        event.stopPropagation();
5045        instance.hide();
5046        getToggleButton.focus();
5047      }
5048    }
5049  }
5050
5051  /**
5052   * Data API implementation
5053   */
5054
5055  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);
5056  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
5057  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);
5058  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
5059  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {
5060    event.preventDefault();
5061    Dropdown.getOrCreateInstance(this).toggle();
5062  });
5063
5064  /**
5065   * jQuery
5066   */
5067
5068  defineJQueryPlugin(Dropdown);
5069
5070  /**
5071   * --------------------------------------------------------------------------
5072   * Bootstrap util/backdrop.js
5073   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5074   * --------------------------------------------------------------------------
5075   */
5076
5077
5078  /**
5079   * Constants
5080   */
5081
5082  const NAME$9 = 'backdrop';
5083  const CLASS_NAME_FADE$4 = 'fade';
5084  const CLASS_NAME_SHOW$5 = 'show';
5085  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;
5086  const Default$8 = {
5087    className: 'modal-backdrop',
5088    clickCallback: null,
5089    isAnimated: false,
5090    isVisible: true,
5091    // if false, we use the backdrop helper without adding any element to the dom
5092    rootElement: 'body' // give the choice to place backdrop under different elements
5093  };
5094  const DefaultType$8 = {
5095    className: 'string',
5096    clickCallback: '(function|null)',
5097    isAnimated: 'boolean',
5098    isVisible: 'boolean',
5099    rootElement: '(element|string)'
5100  };
5101
5102  /**
5103   * Class definition
5104   */
5105
5106  class Backdrop extends Config {
5107    constructor(config) {
5108      super();
5109      this._config = this._getConfig(config);
5110      this._isAppended = false;
5111      this._element = null;
5112    }
5113
5114    // Getters
5115    static get Default() {
5116      return Default$8;
5117    }
5118    static get DefaultType() {
5119      return DefaultType$8;
5120    }
5121    static get NAME() {
5122      return NAME$9;
5123    }
5124
5125    // Public
5126    show(callback) {
5127      if (!this._config.isVisible) {
5128        execute(callback);
5129        return;
5130      }
5131      this._append();
5132      const element = this._getElement();
5133      if (this._config.isAnimated) {
5134        reflow(element);
5135      }
5136      element.classList.add(CLASS_NAME_SHOW$5);
5137      this._emulateAnimation(() => {
5138        execute(callback);
5139      });
5140    }
5141    hide(callback) {
5142      if (!this._config.isVisible) {
5143        execute(callback);
5144        return;
5145      }
5146      this._getElement().classList.remove(CLASS_NAME_SHOW$5);
5147      this._emulateAnimation(() => {
5148        this.dispose();
5149        execute(callback);
5150      });
5151    }
5152    dispose() {
5153      if (!this._isAppended) {
5154        return;
5155      }
5156      EventHandler.off(this._element, EVENT_MOUSEDOWN);
5157      this._element.remove();
5158      this._isAppended = false;
5159    }
5160
5161    // Private
5162    _getElement() {
5163      if (!this._element) {
5164        const backdrop = document.createElement('div');
5165        backdrop.className = this._config.className;
5166        if (this._config.isAnimated) {
5167          backdrop.classList.add(CLASS_NAME_FADE$4);
5168        }
5169        this._element = backdrop;
5170      }
5171      return this._element;
5172    }
5173    _configAfterMerge(config) {
5174      // use getElement() with the default "body" to get a fresh Element on each instantiation
5175      config.rootElement = getElement(config.rootElement);
5176      return config;
5177    }
5178    _append() {
5179      if (this._isAppended) {
5180        return;
5181      }
5182      const element = this._getElement();
5183      this._config.rootElement.append(element);
5184      EventHandler.on(element, EVENT_MOUSEDOWN, () => {
5185        execute(this._config.clickCallback);
5186      });
5187      this._isAppended = true;
5188    }
5189    _emulateAnimation(callback) {
5190      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);
5191    }
5192  }
5193
5194  /**
5195   * --------------------------------------------------------------------------
5196   * Bootstrap util/focustrap.js
5197   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5198   * --------------------------------------------------------------------------
5199   */
5200
5201
5202  /**
5203   * Constants
5204   */
5205
5206  const NAME$8 = 'focustrap';
5207  const DATA_KEY$5 = 'bs.focustrap';
5208  const EVENT_KEY$5 = `.${DATA_KEY$5}`;
5209  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;
5210  const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;
5211  const TAB_KEY = 'Tab';
5212  const TAB_NAV_FORWARD = 'forward';
5213  const TAB_NAV_BACKWARD = 'backward';
5214  const Default$7 = {
5215    autofocus: true,
5216    trapElement: null // The element to trap focus inside of
5217  };
5218  const DefaultType$7 = {
5219    autofocus: 'boolean',
5220    trapElement: 'element'
5221  };
5222
5223  /**
5224   * Class definition
5225   */
5226
5227  class FocusTrap extends Config {
5228    constructor(config) {
5229      super();
5230      this._config = this._getConfig(config);
5231      this._isActive = false;
5232      this._lastTabNavDirection = null;
5233    }
5234
5235    // Getters
5236    static get Default() {
5237      return Default$7;
5238    }
5239    static get DefaultType() {
5240      return DefaultType$7;
5241    }
5242    static get NAME() {
5243      return NAME$8;
5244    }
5245
5246    // Public
5247    activate() {
5248      if (this._isActive) {
5249        return;
5250      }
5251      if (this._config.autofocus) {
5252        this._config.trapElement.focus();
5253      }
5254      EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop
5255      EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));
5256      EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
5257      this._isActive = true;
5258    }
5259    deactivate() {
5260      if (!this._isActive) {
5261        return;
5262      }
5263      this._isActive = false;
5264      EventHandler.off(document, EVENT_KEY$5);
5265    }
5266
5267    // Private
5268    _handleFocusin(event) {
5269      const {
5270        trapElement
5271      } = this._config;
5272      if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {
5273        return;
5274      }
5275      const elements = SelectorEngine.focusableChildren(trapElement);
5276      if (elements.length === 0) {
5277        trapElement.focus();
5278      } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
5279        elements[elements.length - 1].focus();
5280      } else {
5281        elements[0].focus();
5282      }
5283    }
5284    _handleKeydown(event) {
5285      if (event.key !== TAB_KEY) {
5286        return;
5287      }
5288      this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
5289    }
5290  }
5291
5292  /**
5293   * --------------------------------------------------------------------------
5294   * Bootstrap util/scrollBar.js
5295   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5296   * --------------------------------------------------------------------------
5297   */
5298
5299
5300  /**
5301   * Constants
5302   */
5303
5304  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
5305  const SELECTOR_STICKY_CONTENT = '.sticky-top';
5306  const PROPERTY_PADDING = 'padding-right';
5307  const PROPERTY_MARGIN = 'margin-right';
5308
5309  /**
5310   * Class definition
5311   */
5312
5313  class ScrollBarHelper {
5314    constructor() {
5315      this._element = document.body;
5316    }
5317
5318    // Public
5319    getWidth() {
5320      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
5321      const documentWidth = document.documentElement.clientWidth;
5322      return Math.abs(window.innerWidth - documentWidth);
5323    }
5324    hide() {
5325      const width = this.getWidth();
5326      this._disableOverFlow();
5327      // give padding to element to balance the hidden scrollbar width
5328      this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
5329      // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
5330      this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
5331      this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);
5332    }
5333    reset() {
5334      this._resetElementAttributes(this._element, 'overflow');
5335      this._resetElementAttributes(this._element, PROPERTY_PADDING);
5336      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);
5337      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);
5338    }
5339    isOverflowing() {
5340      return this.getWidth() > 0;
5341    }
5342
5343    // Private
5344    _disableOverFlow() {
5345      this._saveInitialAttribute(this._element, 'overflow');
5346      this._element.style.overflow = 'hidden';
5347    }
5348    _setElementAttributes(selector, styleProperty, callback) {
5349      const scrollbarWidth = this.getWidth();
5350      const manipulationCallBack = element => {
5351        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
5352          return;
5353        }
5354        this._saveInitialAttribute(element, styleProperty);
5355        const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);
5356        element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);
5357      };
5358      this._applyManipulationCallback(selector, manipulationCallBack);
5359    }
5360    _saveInitialAttribute(element, styleProperty) {
5361      const actualValue = element.style.getPropertyValue(styleProperty);
5362      if (actualValue) {
5363        Manipulator.setDataAttribute(element, styleProperty, actualValue);
5364      }
5365    }
5366    _resetElementAttributes(selector, styleProperty) {
5367      const manipulationCallBack = element => {
5368        const value = Manipulator.getDataAttribute(element, styleProperty);
5369        // We only want to remove the property if the value is `null`; the value can also be zero
5370        if (value === null) {
5371          element.style.removeProperty(styleProperty);
5372          return;
5373        }
5374        Manipulator.removeDataAttribute(element, styleProperty);
5375        element.style.setProperty(styleProperty, value);
5376      };
5377      this._applyManipulationCallback(selector, manipulationCallBack);
5378    }
5379    _applyManipulationCallback(selector, callBack) {
5380      if (isElement(selector)) {
5381        callBack(selector);
5382        return;
5383      }
5384      for (const sel of SelectorEngine.find(selector, this._element)) {
5385        callBack(sel);
5386      }
5387    }
5388  }
5389
5390  /**
5391   * --------------------------------------------------------------------------
5392   * Bootstrap modal.js
5393   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5394   * --------------------------------------------------------------------------
5395   */
5396
5397
5398  /**
5399   * Constants
5400   */
5401
5402  const NAME$7 = 'modal';
5403  const DATA_KEY$4 = 'bs.modal';
5404  const EVENT_KEY$4 = `.${DATA_KEY$4}`;
5405  const DATA_API_KEY$2 = '.data-api';
5406  const ESCAPE_KEY$1 = 'Escape';
5407  const EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;
5408  const EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;
5409  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;
5410  const EVENT_SHOW$4 = `show${EVENT_KEY$4}`;
5411  const EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;
5412  const EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;
5413  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;
5414  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;
5415  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;
5416  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;
5417  const CLASS_NAME_OPEN = 'modal-open';
5418  const CLASS_NAME_FADE$3 = 'fade';
5419  const CLASS_NAME_SHOW$4 = 'show';
5420  const CLASS_NAME_STATIC = 'modal-static';
5421  const OPEN_SELECTOR$1 = '.modal.show';
5422  const SELECTOR_DIALOG = '.modal-dialog';
5423  const SELECTOR_MODAL_BODY = '.modal-body';
5424  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]';
5425  const Default$6 = {
5426    backdrop: true,
5427    focus: true,
5428    keyboard: true
5429  };
5430  const DefaultType$6 = {
5431    backdrop: '(boolean|string)',
5432    focus: 'boolean',
5433    keyboard: 'boolean'
5434  };
5435
5436  /**
5437   * Class definition
5438   */
5439
5440  class Modal extends BaseComponent {
5441    constructor(element, config) {
5442      super(element, config);
5443      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);
5444      this._backdrop = this._initializeBackDrop();
5445      this._focustrap = this._initializeFocusTrap();
5446      this._isShown = false;
5447      this._isTransitioning = false;
5448      this._scrollBar = new ScrollBarHelper();
5449      this._addEventListeners();
5450    }
5451
5452    // Getters
5453    static get Default() {
5454      return Default$6;
5455    }
5456    static get DefaultType() {
5457      return DefaultType$6;
5458    }
5459    static get NAME() {
5460      return NAME$7;
5461    }
5462
5463    // Public
5464    toggle(relatedTarget) {
5465      return this._isShown ? this.hide() : this.show(relatedTarget);
5466    }
5467    show(relatedTarget) {
5468      if (this._isShown || this._isTransitioning) {
5469        return;
5470      }
5471      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {
5472        relatedTarget
5473      });
5474      if (showEvent.defaultPrevented) {
5475        return;
5476      }
5477      this._isShown = true;
5478      this._isTransitioning = true;
5479      this._scrollBar.hide();
5480      document.body.classList.add(CLASS_NAME_OPEN);
5481      this._adjustDialog();
5482      this._backdrop.show(() => this._showElement(relatedTarget));
5483    }
5484    hide() {
5485      if (!this._isShown || this._isTransitioning) {
5486        return;
5487      }
5488      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);
5489      if (hideEvent.defaultPrevented) {
5490        return;
5491      }
5492      this._isShown = false;
5493      this._isTransitioning = true;
5494      this._focustrap.deactivate();
5495      this._element.classList.remove(CLASS_NAME_SHOW$4);
5496      this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());
5497    }
5498    dispose() {
5499      EventHandler.off(window, EVENT_KEY$4);
5500      EventHandler.off(this._dialog, EVENT_KEY$4);
5501      this._backdrop.dispose();
5502      this._focustrap.deactivate();
5503      super.dispose();
5504    }
5505    handleUpdate() {
5506      this._adjustDialog();
5507    }
5508
5509    // Private
5510    _initializeBackDrop() {
5511      return new Backdrop({
5512        isVisible: Boolean(this._config.backdrop),
5513        // 'static' option will be translated to true, and booleans will keep their value,
5514        isAnimated: this._isAnimated()
5515      });
5516    }
5517    _initializeFocusTrap() {
5518      return new FocusTrap({
5519        trapElement: this._element
5520      });
5521    }
5522    _showElement(relatedTarget) {
5523      // try to append dynamic modal
5524      if (!document.body.contains(this._element)) {
5525        document.body.append(this._element);
5526      }
5527      this._element.style.display = 'block';
5528      this._element.removeAttribute('aria-hidden');
5529      this._element.setAttribute('aria-modal', true);
5530      this._element.setAttribute('role', 'dialog');
5531      this._element.scrollTop = 0;
5532      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
5533      if (modalBody) {
5534        modalBody.scrollTop = 0;
5535      }
5536      reflow(this._element);
5537      this._element.classList.add(CLASS_NAME_SHOW$4);
5538      const transitionComplete = () => {
5539        if (this._config.focus) {
5540          this._focustrap.activate();
5541        }
5542        this._isTransitioning = false;
5543        EventHandler.trigger(this._element, EVENT_SHOWN$4, {
5544          relatedTarget
5545        });
5546      };
5547      this._queueCallback(transitionComplete, this._dialog, this._isAnimated());
5548    }
5549    _addEventListeners() {
5550      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {
5551        if (event.key !== ESCAPE_KEY$1) {
5552          return;
5553        }
5554        if (this._config.keyboard) {
5555          this.hide();
5556          return;
5557        }
5558        this._triggerBackdropTransition();
5559      });
5560      EventHandler.on(window, EVENT_RESIZE$1, () => {
5561        if (this._isShown && !this._isTransitioning) {
5562          this._adjustDialog();
5563        }
5564      });
5565      EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {
5566        // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks
5567        EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {
5568          if (this._element !== event.target || this._element !== event2.target) {
5569            return;
5570          }
5571          if (this._config.backdrop === 'static') {
5572            this._triggerBackdropTransition();
5573            return;
5574          }
5575          if (this._config.backdrop) {
5576            this.hide();
5577          }
5578        });
5579      });
5580    }
5581    _hideModal() {
5582      this._element.style.display = 'none';
5583      this._element.setAttribute('aria-hidden', true);
5584      this._element.removeAttribute('aria-modal');
5585      this._element.removeAttribute('role');
5586      this._isTransitioning = false;
5587      this._backdrop.hide(() => {
5588        document.body.classList.remove(CLASS_NAME_OPEN);
5589        this._resetAdjustments();
5590        this._scrollBar.reset();
5591        EventHandler.trigger(this._element, EVENT_HIDDEN$4);
5592      });
5593    }
5594    _isAnimated() {
5595      return this._element.classList.contains(CLASS_NAME_FADE$3);
5596    }
5597    _triggerBackdropTransition() {
5598      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);
5599      if (hideEvent.defaultPrevented) {
5600        return;
5601      }
5602      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
5603      const initialOverflowY = this._element.style.overflowY;
5604      // return if the following background transition hasn't yet completed
5605      if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {
5606        return;
5607      }
5608      if (!isModalOverflowing) {
5609        this._element.style.overflowY = 'hidden';
5610      }
5611      this._element.classList.add(CLASS_NAME_STATIC);
5612      this._queueCallback(() => {
5613        this._element.classList.remove(CLASS_NAME_STATIC);
5614        this._queueCallback(() => {
5615          this._element.style.overflowY = initialOverflowY;
5616        }, this._dialog);
5617      }, this._dialog);
5618      this._element.focus();
5619    }
5620
5621    /**
5622     * The following methods are used to handle overflowing modals
5623     */
5624
5625    _adjustDialog() {
5626      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
5627      const scrollbarWidth = this._scrollBar.getWidth();
5628      const isBodyOverflowing = scrollbarWidth > 0;
5629      if (isBodyOverflowing && !isModalOverflowing) {
5630        const property = isRTL() ? 'paddingLeft' : 'paddingRight';
5631        this._element.style[property] = `${scrollbarWidth}px`;
5632      }
5633      if (!isBodyOverflowing && isModalOverflowing) {
5634        const property = isRTL() ? 'paddingRight' : 'paddingLeft';
5635        this._element.style[property] = `${scrollbarWidth}px`;
5636      }
5637    }
5638    _resetAdjustments() {
5639      this._element.style.paddingLeft = '';
5640      this._element.style.paddingRight = '';
5641    }
5642
5643    // Static
5644    static jQueryInterface(config, relatedTarget) {
5645      return this.each(function () {
5646        const data = Modal.getOrCreateInstance(this, config);
5647        if (typeof config !== 'string') {
5648          return;
5649        }
5650        if (typeof data[config] === 'undefined') {
5651          throw new TypeError(`No method named "${config}"`);
5652        }
5653        data[config](relatedTarget);
5654      });
5655    }
5656  }
5657
5658  /**
5659   * Data API implementation
5660   */
5661
5662  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {
5663    const target = SelectorEngine.getElementFromSelector(this);
5664    if (['A', 'AREA'].includes(this.tagName)) {
5665      event.preventDefault();
5666    }
5667    EventHandler.one(target, EVENT_SHOW$4, showEvent => {
5668      if (showEvent.defaultPrevented) {
5669        // only register focus restorer if modal will actually get shown
5670        return;
5671      }
5672      EventHandler.one(target, EVENT_HIDDEN$4, () => {
5673        if (isVisible(this)) {
5674          this.focus();
5675        }
5676      });
5677    });
5678
5679    // avoid conflict when clicking modal toggler while another one is open
5680    const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);
5681    if (alreadyOpen) {
5682      Modal.getInstance(alreadyOpen).hide();
5683    }
5684    const data = Modal.getOrCreateInstance(target);
5685    data.toggle(this);
5686  });
5687  enableDismissTrigger(Modal);
5688
5689  /**
5690   * jQuery
5691   */
5692
5693  defineJQueryPlugin(Modal);
5694
5695  /**
5696   * --------------------------------------------------------------------------
5697   * Bootstrap offcanvas.js
5698   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5699   * --------------------------------------------------------------------------
5700   */
5701
5702
5703  /**
5704   * Constants
5705   */
5706
5707  const NAME$6 = 'offcanvas';
5708  const DATA_KEY$3 = 'bs.offcanvas';
5709  const EVENT_KEY$3 = `.${DATA_KEY$3}`;
5710  const DATA_API_KEY$1 = '.data-api';
5711  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;
5712  const ESCAPE_KEY = 'Escape';
5713  const CLASS_NAME_SHOW$3 = 'show';
5714  const CLASS_NAME_SHOWING$1 = 'showing';
5715  const CLASS_NAME_HIDING = 'hiding';
5716  const CLASS_NAME_BACKDROP = 'offcanvas-backdrop';
5717  const OPEN_SELECTOR = '.offcanvas.show';
5718  const EVENT_SHOW$3 = `show${EVENT_KEY$3}`;
5719  const EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;
5720  const EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;
5721  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;
5722  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;
5723  const EVENT_RESIZE = `resize${EVENT_KEY$3}`;
5724  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;
5725  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;
5726  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]';
5727  const Default$5 = {
5728    backdrop: true,
5729    keyboard: true,
5730    scroll: false
5731  };
5732  const DefaultType$5 = {
5733    backdrop: '(boolean|string)',
5734    keyboard: 'boolean',
5735    scroll: 'boolean'
5736  };
5737
5738  /**
5739   * Class definition
5740   */
5741
5742  class Offcanvas extends BaseComponent {
5743    constructor(element, config) {
5744      super(element, config);
5745      this._isShown = false;
5746      this._backdrop = this._initializeBackDrop();
5747      this._focustrap = this._initializeFocusTrap();
5748      this._addEventListeners();
5749    }
5750
5751    // Getters
5752    static get Default() {
5753      return Default$5;
5754    }
5755    static get DefaultType() {
5756      return DefaultType$5;
5757    }
5758    static get NAME() {
5759      return NAME$6;
5760    }
5761
5762    // Public
5763    toggle(relatedTarget) {
5764      return this._isShown ? this.hide() : this.show(relatedTarget);
5765    }
5766    show(relatedTarget) {
5767      if (this._isShown) {
5768        return;
5769      }
5770      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {
5771        relatedTarget
5772      });
5773      if (showEvent.defaultPrevented) {
5774        return;
5775      }
5776      this._isShown = true;
5777      this._backdrop.show();
5778      if (!this._config.scroll) {
5779        new ScrollBarHelper().hide();
5780      }
5781      this._element.setAttribute('aria-modal', true);
5782      this._element.setAttribute('role', 'dialog');
5783      this._element.classList.add(CLASS_NAME_SHOWING$1);
5784      const completeCallBack = () => {
5785        if (!this._config.scroll || this._config.backdrop) {
5786          this._focustrap.activate();
5787        }
5788        this._element.classList.add(CLASS_NAME_SHOW$3);
5789        this._element.classList.remove(CLASS_NAME_SHOWING$1);
5790        EventHandler.trigger(this._element, EVENT_SHOWN$3, {
5791          relatedTarget
5792        });
5793      };
5794      this._queueCallback(completeCallBack, this._element, true);
5795    }
5796    hide() {
5797      if (!this._isShown) {
5798        return;
5799      }
5800      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);
5801      if (hideEvent.defaultPrevented) {
5802        return;
5803      }
5804      this._focustrap.deactivate();
5805      this._element.blur();
5806      this._isShown = false;
5807      this._element.classList.add(CLASS_NAME_HIDING);
5808      this._backdrop.hide();
5809      const completeCallback = () => {
5810        this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);
5811        this._element.removeAttribute('aria-modal');
5812        this._element.removeAttribute('role');
5813        if (!this._config.scroll) {
5814          new ScrollBarHelper().reset();
5815        }
5816        EventHandler.trigger(this._element, EVENT_HIDDEN$3);
5817      };
5818      this._queueCallback(completeCallback, this._element, true);
5819    }
5820    dispose() {
5821      this._backdrop.dispose();
5822      this._focustrap.deactivate();
5823      super.dispose();
5824    }
5825
5826    // Private
5827    _initializeBackDrop() {
5828      const clickCallback = () => {
5829        if (this._config.backdrop === 'static') {
5830          EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
5831          return;
5832        }
5833        this.hide();
5834      };
5835
5836      // 'static' option will be translated to true, and booleans will keep their value
5837      const isVisible = Boolean(this._config.backdrop);
5838      return new Backdrop({
5839        className: CLASS_NAME_BACKDROP,
5840        isVisible,
5841        isAnimated: true,
5842        rootElement: this._element.parentNode,
5843        clickCallback: isVisible ? clickCallback : null
5844      });
5845    }
5846    _initializeFocusTrap() {
5847      return new FocusTrap({
5848        trapElement: this._element
5849      });
5850    }
5851    _addEventListeners() {
5852      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
5853        if (event.key !== ESCAPE_KEY) {
5854          return;
5855        }
5856        if (this._config.keyboard) {
5857          this.hide();
5858          return;
5859        }
5860        EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
5861      });
5862    }
5863
5864    // Static
5865    static jQueryInterface(config) {
5866      return this.each(function () {
5867        const data = Offcanvas.getOrCreateInstance(this, config);
5868        if (typeof config !== 'string') {
5869          return;
5870        }
5871        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
5872          throw new TypeError(`No method named "${config}"`);
5873        }
5874        data[config](this);
5875      });
5876    }
5877  }
5878
5879  /**
5880   * Data API implementation
5881   */
5882
5883  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {
5884    const target = SelectorEngine.getElementFromSelector(this);
5885    if (['A', 'AREA'].includes(this.tagName)) {
5886      event.preventDefault();
5887    }
5888    if (isDisabled(this)) {
5889      return;
5890    }
5891    EventHandler.one(target, EVENT_HIDDEN$3, () => {
5892      // focus on trigger when it is closed
5893      if (isVisible(this)) {
5894        this.focus();
5895      }
5896    });
5897
5898    // avoid conflict when clicking a toggler of an offcanvas, while another is open
5899    const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
5900    if (alreadyOpen && alreadyOpen !== target) {
5901      Offcanvas.getInstance(alreadyOpen).hide();
5902    }
5903    const data = Offcanvas.getOrCreateInstance(target);
5904    data.toggle(this);
5905  });
5906  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {
5907    for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {
5908      Offcanvas.getOrCreateInstance(selector).show();
5909    }
5910  });
5911  EventHandler.on(window, EVENT_RESIZE, () => {
5912    for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {
5913      if (getComputedStyle(element).position !== 'fixed') {
5914        Offcanvas.getOrCreateInstance(element).hide();
5915      }
5916    }
5917  });
5918  enableDismissTrigger(Offcanvas);
5919
5920  /**
5921   * jQuery
5922   */
5923
5924  defineJQueryPlugin(Offcanvas);
5925
5926  /**
5927   * --------------------------------------------------------------------------
5928   * Bootstrap util/sanitizer.js
5929   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5930   * --------------------------------------------------------------------------
5931   */
5932
5933  // js-docs-start allow-list
5934  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
5935  const DefaultAllowlist = {
5936    // Global attributes allowed on any supplied element below.
5937    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
5938    a: ['target', 'href', 'title', 'rel'],
5939    area: [],
5940    b: [],
5941    br: [],
5942    col: [],
5943    code: [],
5944    dd: [],
5945    div: [],
5946    dl: [],
5947    dt: [],
5948    em: [],
5949    hr: [],
5950    h1: [],
5951    h2: [],
5952    h3: [],
5953    h4: [],
5954    h5: [],
5955    h6: [],
5956    i: [],
5957    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
5958    li: [],
5959    ol: [],
5960    p: [],
5961    pre: [],
5962    s: [],
5963    small: [],
5964    span: [],
5965    sub: [],
5966    sup: [],
5967    strong: [],
5968    u: [],
5969    ul: []
5970  };
5971  // js-docs-end allow-list
5972
5973  const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
5974
5975  /**
5976   * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation
5977   * contexts.
5978   *
5979   * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38
5980   */
5981  // eslint-disable-next-line unicorn/better-regex
5982  const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;
5983  const allowedAttribute = (attribute, allowedAttributeList) => {
5984    const attributeName = attribute.nodeName.toLowerCase();
5985    if (allowedAttributeList.includes(attributeName)) {
5986      if (uriAttributes.has(attributeName)) {
5987        return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));
5988      }
5989      return true;
5990    }
5991
5992    // Check if a regular expression validates the attribute.
5993    return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));
5994  };
5995  function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {
5996    if (!unsafeHtml.length) {
5997      return unsafeHtml;
5998    }
5999    if (sanitizeFunction && typeof sanitizeFunction === 'function') {
6000      return sanitizeFunction(unsafeHtml);
6001    }
6002    const domParser = new window.DOMParser();
6003    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
6004    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));
6005    for (const element of elements) {
6006      const elementName = element.nodeName.toLowerCase();
6007      if (!Object.keys(allowList).includes(elementName)) {
6008        element.remove();
6009        continue;
6010      }
6011      const attributeList = [].concat(...element.attributes);
6012      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);
6013      for (const attribute of attributeList) {
6014        if (!allowedAttribute(attribute, allowedAttributes)) {
6015          element.removeAttribute(attribute.nodeName);
6016        }
6017      }
6018    }
6019    return createdDocument.body.innerHTML;
6020  }
6021
6022  /**
6023   * --------------------------------------------------------------------------
6024   * Bootstrap util/template-factory.js
6025   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6026   * --------------------------------------------------------------------------
6027   */
6028
6029
6030  /**
6031   * Constants
6032   */
6033
6034  const NAME$5 = 'TemplateFactory';
6035  const Default$4 = {
6036    allowList: DefaultAllowlist,
6037    content: {},
6038    // { selector : text ,  selector2 : text2 , }
6039    extraClass: '',
6040    html: false,
6041    sanitize: true,
6042    sanitizeFn: null,
6043    template: '<div></div>'
6044  };
6045  const DefaultType$4 = {
6046    allowList: 'object',
6047    content: 'object',
6048    extraClass: '(string|function)',
6049    html: 'boolean',
6050    sanitize: 'boolean',
6051    sanitizeFn: '(null|function)',
6052    template: 'string'
6053  };
6054  const DefaultContentType = {
6055    entry: '(string|element|function|null)',
6056    selector: '(string|element)'
6057  };
6058
6059  /**
6060   * Class definition
6061   */
6062
6063  class TemplateFactory extends Config {
6064    constructor(config) {
6065      super();
6066      this._config = this._getConfig(config);
6067    }
6068
6069    // Getters
6070    static get Default() {
6071      return Default$4;
6072    }
6073    static get DefaultType() {
6074      return DefaultType$4;
6075    }
6076    static get NAME() {
6077      return NAME$5;
6078    }
6079
6080    // Public
6081    getContent() {
6082      return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);
6083    }
6084    hasContent() {
6085      return this.getContent().length > 0;
6086    }
6087    changeContent(content) {
6088      this._checkContent(content);
6089      this._config.content = {
6090        ...this._config.content,
6091        ...content
6092      };
6093      return this;
6094    }
6095    toHtml() {
6096      const templateWrapper = document.createElement('div');
6097      templateWrapper.innerHTML = this._maybeSanitize(this._config.template);
6098      for (const [selector, text] of Object.entries(this._config.content)) {
6099        this._setContent(templateWrapper, text, selector);
6100      }
6101      const template = templateWrapper.children[0];
6102      const extraClass = this._resolvePossibleFunction(this._config.extraClass);
6103      if (extraClass) {
6104        template.classList.add(...extraClass.split(' '));
6105      }
6106      return template;
6107    }
6108
6109    // Private
6110    _typeCheckConfig(config) {
6111      super._typeCheckConfig(config);
6112      this._checkContent(config.content);
6113    }
6114    _checkContent(arg) {
6115      for (const [selector, content] of Object.entries(arg)) {
6116        super._typeCheckConfig({
6117          selector,
6118          entry: content
6119        }, DefaultContentType);
6120      }
6121    }
6122    _setContent(template, content, selector) {
6123      const templateElement = SelectorEngine.findOne(selector, template);
6124      if (!templateElement) {
6125        return;
6126      }
6127      content = this._resolvePossibleFunction(content);
6128      if (!content) {
6129        templateElement.remove();
6130        return;
6131      }
6132      if (isElement(content)) {
6133        this._putElementInTemplate(getElement(content), templateElement);
6134        return;
6135      }
6136      if (this._config.html) {
6137        templateElement.innerHTML = this._maybeSanitize(content);
6138        return;
6139      }
6140      templateElement.textContent = content;
6141    }
6142    _maybeSanitize(arg) {
6143      return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
6144    }
6145    _resolvePossibleFunction(arg) {
6146      return execute(arg, [this]);
6147    }
6148    _putElementInTemplate(element, templateElement) {
6149      if (this._config.html) {
6150        templateElement.innerHTML = '';
6151        templateElement.append(element);
6152        return;
6153      }
6154      templateElement.textContent = element.textContent;
6155    }
6156  }
6157
6158  /**
6159   * --------------------------------------------------------------------------
6160   * Bootstrap tooltip.js
6161   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6162   * --------------------------------------------------------------------------
6163   */
6164
6165
6166  /**
6167   * Constants
6168   */
6169
6170  const NAME$4 = 'tooltip';
6171  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);
6172  const CLASS_NAME_FADE$2 = 'fade';
6173  const CLASS_NAME_MODAL = 'modal';
6174  const CLASS_NAME_SHOW$2 = 'show';
6175  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
6176  const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;
6177  const EVENT_MODAL_HIDE = 'hide.bs.modal';
6178  const TRIGGER_HOVER = 'hover';
6179  const TRIGGER_FOCUS = 'focus';
6180  const TRIGGER_CLICK = 'click';
6181  const TRIGGER_MANUAL = 'manual';
6182  const EVENT_HIDE$2 = 'hide';
6183  const EVENT_HIDDEN$2 = 'hidden';
6184  const EVENT_SHOW$2 = 'show';
6185  const EVENT_SHOWN$2 = 'shown';
6186  const EVENT_INSERTED = 'inserted';
6187  const EVENT_CLICK$1 = 'click';
6188  const EVENT_FOCUSIN$1 = 'focusin';
6189  const EVENT_FOCUSOUT$1 = 'focusout';
6190  const EVENT_MOUSEENTER = 'mouseenter';
6191  const EVENT_MOUSELEAVE = 'mouseleave';
6192  const AttachmentMap = {
6193    AUTO: 'auto',
6194    TOP: 'top',
6195    RIGHT: isRTL() ? 'left' : 'right',
6196    BOTTOM: 'bottom',
6197    LEFT: isRTL() ? 'right' : 'left'
6198  };
6199  const Default$3 = {
6200    allowList: DefaultAllowlist,
6201    animation: true,
6202    boundary: 'clippingParents',
6203    container: false,
6204    customClass: '',
6205    delay: 0,
6206    fallbackPlacements: ['top', 'right', 'bottom', 'left'],
6207    html: false,
6208    offset: [0, 6],
6209    placement: 'top',
6210    popperConfig: null,
6211    sanitize: true,
6212    sanitizeFn: null,
6213    selector: false,
6214    template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>',
6215    title: '',
6216    trigger: 'hover focus'
6217  };
6218  const DefaultType$3 = {
6219    allowList: 'object',
6220    animation: 'boolean',
6221    boundary: '(string|element)',
6222    container: '(string|element|boolean)',
6223    customClass: '(string|function)',
6224    delay: '(number|object)',
6225    fallbackPlacements: 'array',
6226    html: 'boolean',
6227    offset: '(array|string|function)',
6228    placement: '(string|function)',
6229    popperConfig: '(null|object|function)',
6230    sanitize: 'boolean',
6231    sanitizeFn: '(null|function)',
6232    selector: '(string|boolean)',
6233    template: 'string',
6234    title: '(string|element|function)',
6235    trigger: 'string'
6236  };
6237
6238  /**
6239   * Class definition
6240   */
6241
6242  class Tooltip extends BaseComponent {
6243    constructor(element, config) {
6244      if (typeof Popper__namespace === 'undefined') {
6245        throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
6246      }
6247      super(element, config);
6248
6249      // Private
6250      this._isEnabled = true;
6251      this._timeout = 0;
6252      this._isHovered = null;
6253      this._activeTrigger = {};
6254      this._popper = null;
6255      this._templateFactory = null;
6256      this._newContent = null;
6257
6258      // Protected
6259      this.tip = null;
6260      this._setListeners();
6261      if (!this._config.selector) {
6262        this._fixTitle();
6263      }
6264    }
6265
6266    // Getters
6267    static get Default() {
6268      return Default$3;
6269    }
6270    static get DefaultType() {
6271      return DefaultType$3;
6272    }
6273    static get NAME() {
6274      return NAME$4;
6275    }
6276
6277    // Public
6278    enable() {
6279      this._isEnabled = true;
6280    }
6281    disable() {
6282      this._isEnabled = false;
6283    }
6284    toggleEnabled() {
6285      this._isEnabled = !this._isEnabled;
6286    }
6287    toggle() {
6288      if (!this._isEnabled) {
6289        return;
6290      }
6291      this._activeTrigger.click = !this._activeTrigger.click;
6292      if (this._isShown()) {
6293        this._leave();
6294        return;
6295      }
6296      this._enter();
6297    }
6298    dispose() {
6299      clearTimeout(this._timeout);
6300      EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
6301      if (this._element.getAttribute('data-bs-original-title')) {
6302        this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));
6303      }
6304      this._disposePopper();
6305      super.dispose();
6306    }
6307    show() {
6308      if (this._element.style.display === 'none') {
6309        throw new Error('Please use show on visible elements');
6310      }
6311      if (!(this._isWithContent() && this._isEnabled)) {
6312        return;
6313      }
6314      const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));
6315      const shadowRoot = findShadowRoot(this._element);
6316      const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);
6317      if (showEvent.defaultPrevented || !isInTheDom) {
6318        return;
6319      }
6320
6321      // TODO: v6 remove this or make it optional
6322      this._disposePopper();
6323      const tip = this._getTipElement();
6324      this._element.setAttribute('aria-describedby', tip.getAttribute('id'));
6325      const {
6326        container
6327      } = this._config;
6328      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
6329        container.append(tip);
6330        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));
6331      }
6332      this._popper = this._createPopper(tip);
6333      tip.classList.add(CLASS_NAME_SHOW$2);
6334
6335      // If this is a touch-enabled device we add extra
6336      // empty mouseover listeners to the body's immediate children;
6337      // only needed because of broken event delegation on iOS
6338      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
6339      if ('ontouchstart' in document.documentElement) {
6340        for (const element of [].concat(...document.body.children)) {
6341          EventHandler.on(element, 'mouseover', noop);
6342        }
6343      }
6344      const complete = () => {
6345        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));
6346        if (this._isHovered === false) {
6347          this._leave();
6348        }
6349        this._isHovered = false;
6350      };
6351      this._queueCallback(complete, this.tip, this._isAnimated());
6352    }
6353    hide() {
6354      if (!this._isShown()) {
6355        return;
6356      }
6357      const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));
6358      if (hideEvent.defaultPrevented) {
6359        return;
6360      }
6361      const tip = this._getTipElement();
6362      tip.classList.remove(CLASS_NAME_SHOW$2);
6363
6364      // If this is a touch-enabled device we remove the extra
6365      // empty mouseover listeners we added for iOS support
6366      if ('ontouchstart' in document.documentElement) {
6367        for (const element of [].concat(...document.body.children)) {
6368          EventHandler.off(element, 'mouseover', noop);
6369        }
6370      }
6371      this._activeTrigger[TRIGGER_CLICK] = false;
6372      this._activeTrigger[TRIGGER_FOCUS] = false;
6373      this._activeTrigger[TRIGGER_HOVER] = false;
6374      this._isHovered = null; // it is a trick to support manual triggering
6375
6376      const complete = () => {
6377        if (this._isWithActiveTrigger()) {
6378          return;
6379        }
6380        if (!this._isHovered) {
6381          this._disposePopper();
6382        }
6383        this._element.removeAttribute('aria-describedby');
6384        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));
6385      };
6386      this._queueCallback(complete, this.tip, this._isAnimated());
6387    }
6388    update() {
6389      if (this._popper) {
6390        this._popper.update();
6391      }
6392    }
6393
6394    // Protected
6395    _isWithContent() {
6396      return Boolean(this._getTitle());
6397    }
6398    _getTipElement() {
6399      if (!this.tip) {
6400        this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());
6401      }
6402      return this.tip;
6403    }
6404    _createTipElement(content) {
6405      const tip = this._getTemplateFactory(content).toHtml();
6406
6407      // TODO: remove this check in v6
6408      if (!tip) {
6409        return null;
6410      }
6411      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);
6412      // TODO: v6 the following can be achieved with CSS only
6413      tip.classList.add(`bs-${this.constructor.NAME}-auto`);
6414      const tipId = getUID(this.constructor.NAME).toString();
6415      tip.setAttribute('id', tipId);
6416      if (this._isAnimated()) {
6417        tip.classList.add(CLASS_NAME_FADE$2);
6418      }
6419      return tip;
6420    }
6421    setContent(content) {
6422      this._newContent = content;
6423      if (this._isShown()) {
6424        this._disposePopper();
6425        this.show();
6426      }
6427    }
6428    _getTemplateFactory(content) {
6429      if (this._templateFactory) {
6430        this._templateFactory.changeContent(content);
6431      } else {
6432        this._templateFactory = new TemplateFactory({
6433          ...this._config,
6434          // the `content` var has to be after `this._config`
6435          // to override config.content in case of popover
6436          content,
6437          extraClass: this._resolvePossibleFunction(this._config.customClass)
6438        });
6439      }
6440      return this._templateFactory;
6441    }
6442    _getContentForTemplate() {
6443      return {
6444        [SELECTOR_TOOLTIP_INNER]: this._getTitle()
6445      };
6446    }
6447    _getTitle() {
6448      return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');
6449    }
6450
6451    // Private
6452    _initializeOnDelegatedTarget(event) {
6453      return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());
6454    }
6455    _isAnimated() {
6456      return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);
6457    }
6458    _isShown() {
6459      return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);
6460    }
6461    _createPopper(tip) {
6462      const placement = execute(this._config.placement, [this, tip, this._element]);
6463      const attachment = AttachmentMap[placement.toUpperCase()];
6464      return Popper__namespace.createPopper(this._element, tip, this._getPopperConfig(attachment));
6465    }
6466    _getOffset() {
6467      const {
6468        offset
6469      } = this._config;
6470      if (typeof offset === 'string') {
6471        return offset.split(',').map(value => Number.parseInt(value, 10));
6472      }
6473      if (typeof offset === 'function') {
6474        return popperData => offset(popperData, this._element);
6475      }
6476      return offset;
6477    }
6478    _resolvePossibleFunction(arg) {
6479      return execute(arg, [this._element]);
6480    }
6481    _getPopperConfig(attachment) {
6482      const defaultBsPopperConfig = {
6483        placement: attachment,
6484        modifiers: [{
6485          name: 'flip',
6486          options: {
6487            fallbackPlacements: this._config.fallbackPlacements
6488          }
6489        }, {
6490          name: 'offset',
6491          options: {
6492            offset: this._getOffset()
6493          }
6494        }, {
6495          name: 'preventOverflow',
6496          options: {
6497            boundary: this._config.boundary
6498          }
6499        }, {
6500          name: 'arrow',
6501          options: {
6502            element: `.${this.constructor.NAME}-arrow`
6503          }
6504        }, {
6505          name: 'preSetPlacement',
6506          enabled: true,
6507          phase: 'beforeMain',
6508          fn: data => {
6509            // Pre-set Popper's placement attribute in order to read the arrow sizes properly.
6510            // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement
6511            this._getTipElement().setAttribute('data-popper-placement', data.state.placement);
6512          }
6513        }]
6514      };
6515      return {
6516        ...defaultBsPopperConfig,
6517        ...execute(this._config.popperConfig, [defaultBsPopperConfig])
6518      };
6519    }
6520    _setListeners() {
6521      const triggers = this._config.trigger.split(' ');
6522      for (const trigger of triggers) {
6523        if (trigger === 'click') {
6524          EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {
6525            const context = this._initializeOnDelegatedTarget(event);
6526            context.toggle();
6527          });
6528        } else if (trigger !== TRIGGER_MANUAL) {
6529          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);
6530          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);
6531          EventHandler.on(this._element, eventIn, this._config.selector, event => {
6532            const context = this._initializeOnDelegatedTarget(event);
6533            context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
6534            context._enter();
6535          });
6536          EventHandler.on(this._element, eventOut, this._config.selector, event => {
6537            const context = this._initializeOnDelegatedTarget(event);
6538            context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);
6539            context._leave();
6540          });
6541        }
6542      }
6543      this._hideModalHandler = () => {
6544        if (this._element) {
6545          this.hide();
6546        }
6547      };
6548      EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
6549    }
6550    _fixTitle() {
6551      const title = this._element.getAttribute('title');
6552      if (!title) {
6553        return;
6554      }
6555      if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {
6556        this._element.setAttribute('aria-label', title);
6557      }
6558      this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility
6559      this._element.removeAttribute('title');
6560    }
6561    _enter() {
6562      if (this._isShown() || this._isHovered) {
6563        this._isHovered = true;
6564        return;
6565      }
6566      this._isHovered = true;
6567      this._setTimeout(() => {
6568        if (this._isHovered) {
6569          this.show();
6570        }
6571      }, this._config.delay.show);
6572    }
6573    _leave() {
6574      if (this._isWithActiveTrigger()) {
6575        return;
6576      }
6577      this._isHovered = false;
6578      this._setTimeout(() => {
6579        if (!this._isHovered) {
6580          this.hide();
6581        }
6582      }, this._config.delay.hide);
6583    }
6584    _setTimeout(handler, timeout) {
6585      clearTimeout(this._timeout);
6586      this._timeout = setTimeout(handler, timeout);
6587    }
6588    _isWithActiveTrigger() {
6589      return Object.values(this._activeTrigger).includes(true);
6590    }
6591    _getConfig(config) {
6592      const dataAttributes = Manipulator.getDataAttributes(this._element);
6593      for (const dataAttribute of Object.keys(dataAttributes)) {
6594        if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {
6595          delete dataAttributes[dataAttribute];
6596        }
6597      }
6598      config = {
6599        ...dataAttributes,
6600        ...(typeof config === 'object' && config ? config : {})
6601      };
6602      config = this._mergeConfigObj(config);
6603      config = this._configAfterMerge(config);
6604      this._typeCheckConfig(config);
6605      return config;
6606    }
6607    _configAfterMerge(config) {
6608      config.container = config.container === false ? document.body : getElement(config.container);
6609      if (typeof config.delay === 'number') {
6610        config.delay = {
6611          show: config.delay,
6612          hide: config.delay
6613        };
6614      }
6615      if (typeof config.title === 'number') {
6616        config.title = config.title.toString();
6617      }
6618      if (typeof config.content === 'number') {
6619        config.content = config.content.toString();
6620      }
6621      return config;
6622    }
6623    _getDelegateConfig() {
6624      const config = {};
6625      for (const [key, value] of Object.entries(this._config)) {
6626        if (this.constructor.Default[key] !== value) {
6627          config[key] = value;
6628        }
6629      }
6630      config.selector = false;
6631      config.trigger = 'manual';
6632
6633      // In the future can be replaced with:
6634      // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])
6635      // `Object.fromEntries(keysWithDifferentValues)`
6636      return config;
6637    }
6638    _disposePopper() {
6639      if (this._popper) {
6640        this._popper.destroy();
6641        this._popper = null;
6642      }
6643      if (this.tip) {
6644        this.tip.remove();
6645        this.tip = null;
6646      }
6647    }
6648
6649    // Static
6650    static jQueryInterface(config) {
6651      return this.each(function () {
6652        const data = Tooltip.getOrCreateInstance(this, config);
6653        if (typeof config !== 'string') {
6654          return;
6655        }
6656        if (typeof data[config] === 'undefined') {
6657          throw new TypeError(`No method named "${config}"`);
6658        }
6659        data[config]();
6660      });
6661    }
6662  }
6663
6664  /**
6665   * jQuery
6666   */
6667
6668  defineJQueryPlugin(Tooltip);
6669
6670  /**
6671   * --------------------------------------------------------------------------
6672   * Bootstrap popover.js
6673   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6674   * --------------------------------------------------------------------------
6675   */
6676
6677
6678  /**
6679   * Constants
6680   */
6681
6682  const NAME$3 = 'popover';
6683  const SELECTOR_TITLE = '.popover-header';
6684  const SELECTOR_CONTENT = '.popover-body';
6685  const Default$2 = {
6686    ...Tooltip.Default,
6687    content: '',
6688    offset: [0, 8],
6689    placement: 'right',
6690    template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>',
6691    trigger: 'click'
6692  };
6693  const DefaultType$2 = {
6694    ...Tooltip.DefaultType,
6695    content: '(null|string|element|function)'
6696  };
6697
6698  /**
6699   * Class definition
6700   */
6701
6702  class Popover extends Tooltip {
6703    // Getters
6704    static get Default() {
6705      return Default$2;
6706    }
6707    static get DefaultType() {
6708      return DefaultType$2;
6709    }
6710    static get NAME() {
6711      return NAME$3;
6712    }
6713
6714    // Overrides
6715    _isWithContent() {
6716      return this._getTitle() || this._getContent();
6717    }
6718
6719    // Private
6720    _getContentForTemplate() {
6721      return {
6722        [SELECTOR_TITLE]: this._getTitle(),
6723        [SELECTOR_CONTENT]: this._getContent()
6724      };
6725    }
6726    _getContent() {
6727      return this._resolvePossibleFunction(this._config.content);
6728    }
6729
6730    // Static
6731    static jQueryInterface(config) {
6732      return this.each(function () {
6733        const data = Popover.getOrCreateInstance(this, config);
6734        if (typeof config !== 'string') {
6735          return;
6736        }
6737        if (typeof data[config] === 'undefined') {
6738          throw new TypeError(`No method named "${config}"`);
6739        }
6740        data[config]();
6741      });
6742    }
6743  }
6744
6745  /**
6746   * jQuery
6747   */
6748
6749  defineJQueryPlugin(Popover);
6750
6751  /**
6752   * --------------------------------------------------------------------------
6753   * Bootstrap scrollspy.js
6754   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6755   * --------------------------------------------------------------------------
6756   */
6757
6758
6759  /**
6760   * Constants
6761   */
6762
6763  const NAME$2 = 'scrollspy';
6764  const DATA_KEY$2 = 'bs.scrollspy';
6765  const EVENT_KEY$2 = `.${DATA_KEY$2}`;
6766  const DATA_API_KEY = '.data-api';
6767  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;
6768  const EVENT_CLICK = `click${EVENT_KEY$2}`;
6769  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;
6770  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
6771  const CLASS_NAME_ACTIVE$1 = 'active';
6772  const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
6773  const SELECTOR_TARGET_LINKS = '[href]';
6774  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
6775  const SELECTOR_NAV_LINKS = '.nav-link';
6776  const SELECTOR_NAV_ITEMS = '.nav-item';
6777  const SELECTOR_LIST_ITEMS = '.list-group-item';
6778  const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;
6779  const SELECTOR_DROPDOWN = '.dropdown';
6780  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';
6781  const Default$1 = {
6782    offset: null,
6783    // TODO: v6 @deprecated, keep it for backwards compatibility reasons
6784    rootMargin: '0px 0px -25%',
6785    smoothScroll: false,
6786    target: null,
6787    threshold: [0.1, 0.5, 1]
6788  };
6789  const DefaultType$1 = {
6790    offset: '(number|null)',
6791    // TODO v6 @deprecated, keep it for backwards compatibility reasons
6792    rootMargin: 'string',
6793    smoothScroll: 'boolean',
6794    target: 'element',
6795    threshold: 'array'
6796  };
6797
6798  /**
6799   * Class definition
6800   */
6801
6802  class ScrollSpy extends BaseComponent {
6803    constructor(element, config) {
6804      super(element, config);
6805
6806      // this._element is the observablesContainer and config.target the menu links wrapper
6807      this._targetLinks = new Map();
6808      this._observableSections = new Map();
6809      this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;
6810      this._activeTarget = null;
6811      this._observer = null;
6812      this._previousScrollData = {
6813        visibleEntryTop: 0,
6814        parentScrollTop: 0
6815      };
6816      this.refresh(); // initialize
6817    }
6818
6819    // Getters
6820    static get Default() {
6821      return Default$1;
6822    }
6823    static get DefaultType() {
6824      return DefaultType$1;
6825    }
6826    static get NAME() {
6827      return NAME$2;
6828    }
6829
6830    // Public
6831    refresh() {
6832      this._initializeTargetsAndObservables();
6833      this._maybeEnableSmoothScroll();
6834      if (this._observer) {
6835        this._observer.disconnect();
6836      } else {
6837        this._observer = this._getNewObserver();
6838      }
6839      for (const section of this._observableSections.values()) {
6840        this._observer.observe(section);
6841      }
6842    }
6843    dispose() {
6844      this._observer.disconnect();
6845      super.dispose();
6846    }
6847
6848    // Private
6849    _configAfterMerge(config) {
6850      // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case
6851      config.target = getElement(config.target) || document.body;
6852
6853      // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only
6854      config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;
6855      if (typeof config.threshold === 'string') {
6856        config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));
6857      }
6858      return config;
6859    }
6860    _maybeEnableSmoothScroll() {
6861      if (!this._config.smoothScroll) {
6862        return;
6863      }
6864
6865      // unregister any previous listeners
6866      EventHandler.off(this._config.target, EVENT_CLICK);
6867      EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {
6868        const observableSection = this._observableSections.get(event.target.hash);
6869        if (observableSection) {
6870          event.preventDefault();
6871          const root = this._rootElement || window;
6872          const height = observableSection.offsetTop - this._element.offsetTop;
6873          if (root.scrollTo) {
6874            root.scrollTo({
6875              top: height,
6876              behavior: 'smooth'
6877            });
6878            return;
6879          }
6880
6881          // Chrome 60 doesn't support `scrollTo`
6882          root.scrollTop = height;
6883        }
6884      });
6885    }
6886    _getNewObserver() {
6887      const options = {
6888        root: this._rootElement,
6889        threshold: this._config.threshold,
6890        rootMargin: this._config.rootMargin
6891      };
6892      return new IntersectionObserver(entries => this._observerCallback(entries), options);
6893    }
6894
6895    // The logic of selection
6896    _observerCallback(entries) {
6897      const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);
6898      const activate = entry => {
6899        this._previousScrollData.visibleEntryTop = entry.target.offsetTop;
6900        this._process(targetElement(entry));
6901      };
6902      const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;
6903      const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;
6904      this._previousScrollData.parentScrollTop = parentScrollTop;
6905      for (const entry of entries) {
6906        if (!entry.isIntersecting) {
6907          this._activeTarget = null;
6908          this._clearActiveClass(targetElement(entry));
6909          continue;
6910        }
6911        const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;
6912        // if we are scrolling down, pick the bigger offsetTop
6913        if (userScrollsDown && entryIsLowerThanPrevious) {
6914          activate(entry);
6915          // if parent isn't scrolled, let's keep the first visible item, breaking the iteration
6916          if (!parentScrollTop) {
6917            return;
6918          }
6919          continue;
6920        }
6921
6922        // if we are scrolling up, pick the smallest offsetTop
6923        if (!userScrollsDown && !entryIsLowerThanPrevious) {
6924          activate(entry);
6925        }
6926      }
6927    }
6928    _initializeTargetsAndObservables() {
6929      this._targetLinks = new Map();
6930      this._observableSections = new Map();
6931      const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);
6932      for (const anchor of targetLinks) {
6933        // ensure that the anchor has an id and is not disabled
6934        if (!anchor.hash || isDisabled(anchor)) {
6935          continue;
6936        }
6937        const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);
6938
6939        // ensure that the observableSection exists & is visible
6940        if (isVisible(observableSection)) {
6941          this._targetLinks.set(decodeURI(anchor.hash), anchor);
6942          this._observableSections.set(anchor.hash, observableSection);
6943        }
6944      }
6945    }
6946    _process(target) {
6947      if (this._activeTarget === target) {
6948        return;
6949      }
6950      this._clearActiveClass(this._config.target);
6951      this._activeTarget = target;
6952      target.classList.add(CLASS_NAME_ACTIVE$1);
6953      this._activateParents(target);
6954      EventHandler.trigger(this._element, EVENT_ACTIVATE, {
6955        relatedTarget: target
6956      });
6957    }
6958    _activateParents(target) {
6959      // Activate dropdown parents
6960      if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
6961        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);
6962        return;
6963      }
6964      for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {
6965        // Set triggered links parents as active
6966        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
6967        for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {
6968          item.classList.add(CLASS_NAME_ACTIVE$1);
6969        }
6970      }
6971    }
6972    _clearActiveClass(parent) {
6973      parent.classList.remove(CLASS_NAME_ACTIVE$1);
6974      const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);
6975      for (const node of activeNodes) {
6976        node.classList.remove(CLASS_NAME_ACTIVE$1);
6977      }
6978    }
6979
6980    // Static
6981    static jQueryInterface(config) {
6982      return this.each(function () {
6983        const data = ScrollSpy.getOrCreateInstance(this, config);
6984        if (typeof config !== 'string') {
6985          return;
6986        }
6987        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
6988          throw new TypeError(`No method named "${config}"`);
6989        }
6990        data[config]();
6991      });
6992    }
6993  }
6994
6995  /**
6996   * Data API implementation
6997   */
6998
6999  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {
7000    for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {
7001      ScrollSpy.getOrCreateInstance(spy);
7002    }
7003  });
7004
7005  /**
7006   * jQuery
7007   */
7008
7009  defineJQueryPlugin(ScrollSpy);
7010
7011  /**
7012   * --------------------------------------------------------------------------
7013   * Bootstrap tab.js
7014   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
7015   * --------------------------------------------------------------------------
7016   */
7017
7018
7019  /**
7020   * Constants
7021   */
7022
7023  const NAME$1 = 'tab';
7024  const DATA_KEY$1 = 'bs.tab';
7025  const EVENT_KEY$1 = `.${DATA_KEY$1}`;
7026  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;
7027  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;
7028  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;
7029  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;
7030  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`;
7031  const EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`;
7032  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`;
7033  const ARROW_LEFT_KEY = 'ArrowLeft';
7034  const ARROW_RIGHT_KEY = 'ArrowRight';
7035  const ARROW_UP_KEY = 'ArrowUp';
7036  const ARROW_DOWN_KEY = 'ArrowDown';
7037  const HOME_KEY = 'Home';
7038  const END_KEY = 'End';
7039  const CLASS_NAME_ACTIVE = 'active';
7040  const CLASS_NAME_FADE$1 = 'fade';
7041  const CLASS_NAME_SHOW$1 = 'show';
7042  const CLASS_DROPDOWN = 'dropdown';
7043  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
7044  const SELECTOR_DROPDOWN_MENU = '.dropdown-menu';
7045  const NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;
7046  const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]';
7047  const SELECTOR_OUTER = '.nav-item, .list-group-item';
7048  const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;
7049  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; // TODO: could only be `tab` in v6
7050  const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;
7051  const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`;
7052
7053  /**
7054   * Class definition
7055   */
7056
7057  class Tab extends BaseComponent {
7058    constructor(element) {
7059      super(element);
7060      this._parent = this._element.closest(SELECTOR_TAB_PANEL);
7061      if (!this._parent) {
7062        return;
7063        // TODO: should throw exception in v6
7064        // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)
7065      }
7066
7067      // Set up initial aria attributes
7068      this._setInitialAttributes(this._parent, this._getChildren());
7069      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));
7070    }
7071
7072    // Getters
7073    static get NAME() {
7074      return NAME$1;
7075    }
7076
7077    // Public
7078    show() {
7079      // Shows this elem and deactivate the active sibling if exists
7080      const innerElem = this._element;
7081      if (this._elemIsActive(innerElem)) {
7082        return;
7083      }
7084
7085      // Search for active tab on same parent to deactivate it
7086      const active = this._getActiveElem();
7087      const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {
7088        relatedTarget: innerElem
7089      }) : null;
7090      const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {
7091        relatedTarget: active
7092      });
7093      if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {
7094        return;
7095      }
7096      this._deactivate(active, innerElem);
7097      this._activate(innerElem, active);
7098    }
7099
7100    // Private
7101    _activate(element, relatedElem) {
7102      if (!element) {
7103        return;
7104      }
7105      element.classList.add(CLASS_NAME_ACTIVE);
7106      this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section
7107
7108      const complete = () => {
7109        if (element.getAttribute('role') !== 'tab') {
7110          element.classList.add(CLASS_NAME_SHOW$1);
7111          return;
7112        }
7113        element.removeAttribute('tabindex');
7114        element.setAttribute('aria-selected', true);
7115        this._toggleDropDown(element, true);
7116        EventHandler.trigger(element, EVENT_SHOWN$1, {
7117          relatedTarget: relatedElem
7118        });
7119      };
7120      this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
7121    }
7122    _deactivate(element, relatedElem) {
7123      if (!element) {
7124        return;
7125      }
7126      element.classList.remove(CLASS_NAME_ACTIVE);
7127      element.blur();
7128      this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too
7129
7130      const complete = () => {
7131        if (element.getAttribute('role') !== 'tab') {
7132          element.classList.remove(CLASS_NAME_SHOW$1);
7133          return;
7134        }
7135        element.setAttribute('aria-selected', false);
7136        element.setAttribute('tabindex', '-1');
7137        this._toggleDropDown(element, false);
7138        EventHandler.trigger(element, EVENT_HIDDEN$1, {
7139          relatedTarget: relatedElem
7140        });
7141      };
7142      this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
7143    }
7144    _keydown(event) {
7145      if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) {
7146        return;
7147      }
7148      event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page
7149      event.preventDefault();
7150      const children = this._getChildren().filter(element => !isDisabled(element));
7151      let nextActiveElement;
7152      if ([HOME_KEY, END_KEY].includes(event.key)) {
7153        nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];
7154      } else {
7155        const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);
7156        nextActiveElement = getNextActiveElement(children, event.target, isNext, true);
7157      }
7158      if (nextActiveElement) {
7159        nextActiveElement.focus({
7160          preventScroll: true
7161        });
7162        Tab.getOrCreateInstance(nextActiveElement).show();
7163      }
7164    }
7165    _getChildren() {
7166      // collection of inner elements
7167      return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);
7168    }
7169    _getActiveElem() {
7170      return this._getChildren().find(child => this._elemIsActive(child)) || null;
7171    }
7172    _setInitialAttributes(parent, children) {
7173      this._setAttributeIfNotExists(parent, 'role', 'tablist');
7174      for (const child of children) {
7175        this._setInitialAttributesOnChild(child);
7176      }
7177    }
7178    _setInitialAttributesOnChild(child) {
7179      child = this._getInnerElement(child);
7180      const isActive = this._elemIsActive(child);
7181      const outerElem = this._getOuterElement(child);
7182      child.setAttribute('aria-selected', isActive);
7183      if (outerElem !== child) {
7184        this._setAttributeIfNotExists(outerElem, 'role', 'presentation');
7185      }
7186      if (!isActive) {
7187        child.setAttribute('tabindex', '-1');
7188      }
7189      this._setAttributeIfNotExists(child, 'role', 'tab');
7190
7191      // set attributes to the related panel too
7192      this._setInitialAttributesOnTargetPanel(child);
7193    }
7194    _setInitialAttributesOnTargetPanel(child) {
7195      const target = SelectorEngine.getElementFromSelector(child);
7196      if (!target) {
7197        return;
7198      }
7199      this._setAttributeIfNotExists(target, 'role', 'tabpanel');
7200      if (child.id) {
7201        this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);
7202      }
7203    }
7204    _toggleDropDown(element, open) {
7205      const outerElem = this._getOuterElement(element);
7206      if (!outerElem.classList.contains(CLASS_DROPDOWN)) {
7207        return;
7208      }
7209      const toggle = (selector, className) => {
7210        const element = SelectorEngine.findOne(selector, outerElem);
7211        if (element) {
7212          element.classList.toggle(className, open);
7213        }
7214      };
7215      toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);
7216      toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);
7217      outerElem.setAttribute('aria-expanded', open);
7218    }
7219    _setAttributeIfNotExists(element, attribute, value) {
7220      if (!element.hasAttribute(attribute)) {
7221        element.setAttribute(attribute, value);
7222      }
7223    }
7224    _elemIsActive(elem) {
7225      return elem.classList.contains(CLASS_NAME_ACTIVE);
7226    }
7227
7228    // Try to get the inner element (usually the .nav-link)
7229    _getInnerElement(elem) {
7230      return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);
7231    }
7232
7233    // Try to get the outer element (usually the .nav-item)
7234    _getOuterElement(elem) {
7235      return elem.closest(SELECTOR_OUTER) || elem;
7236    }
7237
7238    // Static
7239    static jQueryInterface(config) {
7240      return this.each(function () {
7241        const data = Tab.getOrCreateInstance(this);
7242        if (typeof config !== 'string') {
7243          return;
7244        }
7245        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
7246          throw new TypeError(`No method named "${config}"`);
7247        }
7248        data[config]();
7249      });
7250    }
7251  }
7252
7253  /**
7254   * Data API implementation
7255   */
7256
7257  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
7258    if (['A', 'AREA'].includes(this.tagName)) {
7259      event.preventDefault();
7260    }
7261    if (isDisabled(this)) {
7262      return;
7263    }
7264    Tab.getOrCreateInstance(this).show();
7265  });
7266
7267  /**
7268   * Initialize on focus
7269   */
7270  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
7271    for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {
7272      Tab.getOrCreateInstance(element);
7273    }
7274  });
7275  /**
7276   * jQuery
7277   */
7278
7279  defineJQueryPlugin(Tab);
7280
7281  /**
7282   * --------------------------------------------------------------------------
7283   * Bootstrap toast.js
7284   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
7285   * --------------------------------------------------------------------------
7286   */
7287
7288
7289  /**
7290   * Constants
7291   */
7292
7293  const NAME = 'toast';
7294  const DATA_KEY = 'bs.toast';
7295  const EVENT_KEY = `.${DATA_KEY}`;
7296  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;
7297  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;
7298  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
7299  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;
7300  const EVENT_HIDE = `hide${EVENT_KEY}`;
7301  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
7302  const EVENT_SHOW = `show${EVENT_KEY}`;
7303  const EVENT_SHOWN = `shown${EVENT_KEY}`;
7304  const CLASS_NAME_FADE = 'fade';
7305  const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
7306  const CLASS_NAME_SHOW = 'show';
7307  const CLASS_NAME_SHOWING = 'showing';
7308  const DefaultType = {
7309    animation: 'boolean',
7310    autohide: 'boolean',
7311    delay: 'number'
7312  };
7313  const Default = {
7314    animation: true,
7315    autohide: true,
7316    delay: 5000
7317  };
7318
7319  /**
7320   * Class definition
7321   */
7322
7323  class Toast extends BaseComponent {
7324    constructor(element, config) {
7325      super(element, config);
7326      this._timeout = null;
7327      this._hasMouseInteraction = false;
7328      this._hasKeyboardInteraction = false;
7329      this._setListeners();
7330    }
7331
7332    // Getters
7333    static get Default() {
7334      return Default;
7335    }
7336    static get DefaultType() {
7337      return DefaultType;
7338    }
7339    static get NAME() {
7340      return NAME;
7341    }
7342
7343    // Public
7344    show() {
7345      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);
7346      if (showEvent.defaultPrevented) {
7347        return;
7348      }
7349      this._clearTimeout();
7350      if (this._config.animation) {
7351        this._element.classList.add(CLASS_NAME_FADE);
7352      }
7353      const complete = () => {
7354        this._element.classList.remove(CLASS_NAME_SHOWING);
7355        EventHandler.trigger(this._element, EVENT_SHOWN);
7356        this._maybeScheduleHide();
7357      };
7358      this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
7359      reflow(this._element);
7360      this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);
7361      this._queueCallback(complete, this._element, this._config.animation);
7362    }
7363    hide() {
7364      if (!this.isShown()) {
7365        return;
7366      }
7367      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
7368      if (hideEvent.defaultPrevented) {
7369        return;
7370      }
7371      const complete = () => {
7372        this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
7373        this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);
7374        EventHandler.trigger(this._element, EVENT_HIDDEN);
7375      };
7376      this._element.classList.add(CLASS_NAME_SHOWING);
7377      this._queueCallback(complete, this._element, this._config.animation);
7378    }
7379    dispose() {
7380      this._clearTimeout();
7381      if (this.isShown()) {
7382        this._element.classList.remove(CLASS_NAME_SHOW);
7383      }
7384      super.dispose();
7385    }
7386    isShown() {
7387      return this._element.classList.contains(CLASS_NAME_SHOW);
7388    }
7389
7390    // Private
7391
7392    _maybeScheduleHide() {
7393      if (!this._config.autohide) {
7394        return;
7395      }
7396      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {
7397        return;
7398      }
7399      this._timeout = setTimeout(() => {
7400        this.hide();
7401      }, this._config.delay);
7402    }
7403    _onInteraction(event, isInteracting) {
7404      switch (event.type) {
7405        case 'mouseover':
7406        case 'mouseout':
7407          {
7408            this._hasMouseInteraction = isInteracting;
7409            break;
7410          }
7411        case 'focusin':
7412        case 'focusout':
7413          {
7414            this._hasKeyboardInteraction = isInteracting;
7415            break;
7416          }
7417      }
7418      if (isInteracting) {
7419        this._clearTimeout();
7420        return;
7421      }
7422      const nextElement = event.relatedTarget;
7423      if (this._element === nextElement || this._element.contains(nextElement)) {
7424        return;
7425      }
7426      this._maybeScheduleHide();
7427    }
7428    _setListeners() {
7429      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
7430      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
7431      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
7432      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
7433    }
7434    _clearTimeout() {
7435      clearTimeout(this._timeout);
7436      this._timeout = null;
7437    }
7438
7439    // Static
7440    static jQueryInterface(config) {
7441      return this.each(function () {
7442        const data = Toast.getOrCreateInstance(this, config);
7443        if (typeof config === 'string') {
7444          if (typeof data[config] === 'undefined') {
7445            throw new TypeError(`No method named "${config}"`);
7446          }
7447          data[config](this);
7448        }
7449      });
7450    }
7451  }
7452
7453  /**
7454   * Data API implementation
7455   */
7456
7457  enableDismissTrigger(Toast);
7458
7459  /**
7460   * jQuery
7461   */
7462
7463  defineJQueryPlugin(Toast);
7464
7465  /**
7466   * --------------------------------------------------------------------------
7467   * Bootstrap index.umd.js
7468   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
7469   * --------------------------------------------------------------------------
7470   */
7471
7472  const index_umd = {
7473    Alert,
7474    Button,
7475    Carousel,
7476    Collapse,
7477    Dropdown,
7478    Modal,
7479    Offcanvas,
7480    Popover,
7481    ScrollSpy,
7482    Tab,
7483    Toast,
7484    Tooltip
7485  };
7486
7487  return index_umd;
7488
7489}));
7490//# sourceMappingURL=bootstrap.js.map
7491
7492
7493/***/ }),
7494
vendor: 2,046 bytes, lines 7495-7524
7495/***/ "./node_modules/jquery/dist/jquery-exposed-exposed.js":
7496/*!************************************************************!*\
7497  !*** ./node_modules/jquery/dist/jquery-exposed-exposed.js ***!
7498  \************************************************************/
7499/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
7500
7501var ___EXPOSE_LOADER_IMPORT___ = __webpack_require__(/*! -!../../expose-loader/dist/cjs.js??ruleSet[1].rules[0].use[1]!./jquery.js */ "./node_modules/expose-loader/dist/cjs.js??ruleSet[1].rules[0].use[1]!./node_modules/jquery/dist/jquery-exposed.js");
7502var ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = __webpack_require__(/*! ../../expose-loader/dist/runtime/getGlobalThis.js */ "./node_modules/expose-loader/dist/runtime/getGlobalThis.js");
7503var ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;
7504___EXPOSE_LOADER_GLOBAL_THIS___["$"] = ___EXPOSE_LOADER_IMPORT___;
7505module.exports = ___EXPOSE_LOADER_IMPORT___;
7506
7507
7508/***/ }),
7509
7510/***/ "./node_modules/expose-loader/dist/cjs.js??ruleSet[1].rules[0].use[1]!./node_modules/jquery/dist/jquery-exposed.js":
7511/*!*************************************************************************************************************************!*\
7512  !*** ./node_modules/expose-loader/dist/cjs.js??ruleSet[1].rules[0].use[1]!./node_modules/jquery/dist/jquery-exposed.js ***!
7513  \*************************************************************************************************************************/
7514/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
7515
7516var ___EXPOSE_LOADER_IMPORT___ = __webpack_require__(/*! -!./jquery.js */ "./node_modules/jquery/dist/jquery.js");
7517var ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = __webpack_require__(/*! ../../expose-loader/dist/runtime/getGlobalThis.js */ "./node_modules/expose-loader/dist/runtime/getGlobalThis.js");
7518var ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;
7519___EXPOSE_LOADER_GLOBAL_THIS___["jQuery"] = ___EXPOSE_LOADER_IMPORT___;
7520module.exports = ___EXPOSE_LOADER_IMPORT___;
7521
7522
7523/***/ }),
7524
vendor: 1,103 bytes, lines 7525-7564
7525/***/ "./node_modules/expose-loader/dist/runtime/getGlobalThis.js":
7526/*!******************************************************************!*\
7527  !*** ./node_modules/expose-loader/dist/runtime/getGlobalThis.js ***!
7528  \******************************************************************/
7529/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
7530
7531"use strict";
7532
7533
7534// eslint-disable-next-line func-names
7535module.exports = function () {
7536  if (typeof globalThis === "object") {
7537    return globalThis;
7538  }
7539  var g;
7540  try {
7541    // This works if eval is allowed (see CSP)
7542    // eslint-disable-next-line no-new-func
7543    g = this || new Function("return this")();
7544  } catch (e) {
7545    // This works if the window reference is available
7546    if (typeof window === "object") {
7547      return window;
7548    }
7549
7550    // This works if the self reference is available
7551    if (typeof self === "object") {
7552      return self;
7553    }
7554
7555    // This works if the global reference is available
7556    if (typeof __webpack_require__.g !== "undefined") {
7557      return __webpack_require__.g;
7558    }
7559  }
7560  return g;
7561}();
7562
7563/***/ }),
7564
vendor: 285,755 bytes, lines 7565-18291
7565/***/ "./node_modules/jquery/dist/jquery.js":
7566/*!********************************************!*\
7567  !*** ./node_modules/jquery/dist/jquery.js ***!
7568  \********************************************/
7569/***/ (function(module, exports) {
7570
7571var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
7572 * jQuery JavaScript Library v3.7.1
7573 * https://jquery.com/
7574 *
7575 * Copyright OpenJS Foundation and other contributors
7576 * Released under the MIT license
7577 * https://jquery.org/license
7578 *
7579 * Date: 2023-08-28T13:37Z
7580 */
7581( function( global, factory ) {
7582
7583	"use strict";
7584
7585	if (  true && typeof module.exports === "object" ) {
7586
7587		// For CommonJS and CommonJS-like environments where a proper `window`
7588		// is present, execute the factory and get jQuery.
7589		// For environments that do not have a `window` with a `document`
7590		// (such as Node.js), expose a factory as module.exports.
7591		// This accentuates the need for the creation of a real `window`.
7592		// e.g. var jQuery = require("jquery")(window);
7593		// See ticket trac-14549 for more info.
7594		module.exports = global.document ?
7595			factory( global, true ) :
7596			function( w ) {
7597				if ( !w.document ) {
7598					throw new Error( "jQuery requires a window with a document" );
7599				}
7600				return factory( w );
7601			};
7602	} else {
7603		factory( global );
7604	}
7605
7606// Pass this if window is not defined yet
7607} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
7608
7609// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
7610// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
7611// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
7612// enough that all such attempts are guarded in a try block.
7613"use strict";
7614
7615var arr = [];
7616
7617var getProto = Object.getPrototypeOf;
7618
7619var slice = arr.slice;
7620
7621var flat = arr.flat ? function( array ) {
7622	return arr.flat.call( array );
7623} : function( array ) {
7624	return arr.concat.apply( [], array );
7625};
7626
7627
7628var push = arr.push;
7629
7630var indexOf = arr.indexOf;
7631
7632var class2type = {};
7633
7634var toString = class2type.toString;
7635
7636var hasOwn = class2type.hasOwnProperty;
7637
7638var fnToString = hasOwn.toString;
7639
7640var ObjectFunctionString = fnToString.call( Object );
7641
7642var support = {};
7643
7644var isFunction = function isFunction( obj ) {
7645
7646		// Support: Chrome <=57, Firefox <=52
7647		// In some browsers, typeof returns "function" for HTML <object> elements
7648		// (i.e., `typeof document.createElement( "object" ) === "function"`).
7649		// We don't want to classify *any* DOM node as a function.
7650		// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5
7651		// Plus for old WebKit, typeof returns "function" for HTML collections
7652		// (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)
7653		return typeof obj === "function" && typeof obj.nodeType !== "number" &&
7654			typeof obj.item !== "function";
7655	};
7656
7657
7658var isWindow = function isWindow( obj ) {
7659		return obj != null && obj === obj.window;
7660	};
7661
7662
7663var document = window.document;
7664
7665
7666
7667	var preservedScriptAttributes = {
7668		type: true,
7669		src: true,
7670		nonce: true,
7671		noModule: true
7672	};
7673
7674	function DOMEval( code, node, doc ) {
7675		doc = doc || document;
7676
7677		var i, val,
7678			script = doc.createElement( "script" );
7679
7680		script.text = code;
7681		if ( node ) {
7682			for ( i in preservedScriptAttributes ) {
7683
7684				// Support: Firefox 64+, Edge 18+
7685				// Some browsers don't support the "nonce" property on scripts.
7686				// On the other hand, just using `getAttribute` is not enough as
7687				// the `nonce` attribute is reset to an empty string whenever it
7688				// becomes browsing-context connected.
7689				// See https://github.com/whatwg/html/issues/2369
7690				// See https://html.spec.whatwg.org/#nonce-attributes
7691				// The `node.getAttribute` check was added for the sake of
7692				// `jQuery.globalEval` so that it can fake a nonce-containing node
7693				// via an object.
7694				val = node[ i ] || node.getAttribute && node.getAttribute( i );
7695				if ( val ) {
7696					script.setAttribute( i, val );
7697				}
7698			}
7699		}
7700		doc.head.appendChild( script ).parentNode.removeChild( script );
7701	}
7702
7703
7704function toType( obj ) {
7705	if ( obj == null ) {
7706		return obj + "";
7707	}
7708
7709	// Support: Android <=2.3 only (functionish RegExp)
7710	return typeof obj === "object" || typeof obj === "function" ?
7711		class2type[ toString.call( obj ) ] || "object" :
7712		typeof obj;
7713}
7714/* global Symbol */
7715// Defining this global in .eslintrc.json would create a danger of using the global
7716// unguarded in another place, it seems safer to define global only for this module
7717
7718
7719
7720var version = "3.7.1",
7721
7722	rhtmlSuffix = /HTML$/i,
7723
7724	// Define a local copy of jQuery
7725	jQuery = function( selector, context ) {
7726
7727		// The jQuery object is actually just the init constructor 'enhanced'
7728		// Need init if jQuery is called (just allow error to be thrown if not included)
7729		return new jQuery.fn.init( selector, context );
7730	};
7731
7732jQuery.fn = jQuery.prototype = {
7733
7734	// The current version of jQuery being used
7735	jquery: version,
7736
7737	constructor: jQuery,
7738
7739	// The default length of a jQuery object is 0
7740	length: 0,
7741
7742	toArray: function() {
7743		return slice.call( this );
7744	},
7745
7746	// Get the Nth element in the matched element set OR
7747	// Get the whole matched element set as a clean array
7748	get: function( num ) {
7749
7750		// Return all the elements in a clean array
7751		if ( num == null ) {
7752			return slice.call( this );
7753		}
7754
7755		// Return just the one element from the set
7756		return num < 0 ? this[ num + this.length ] : this[ num ];
7757	},
7758
7759	// Take an array of elements and push it onto the stack
7760	// (returning the new matched element set)
7761	pushStack: function( elems ) {
7762
7763		// Build a new jQuery matched element set
7764		var ret = jQuery.merge( this.constructor(), elems );
7765
7766		// Add the old object onto the stack (as a reference)
7767		ret.prevObject = this;
7768
7769		// Return the newly-formed element set
7770		return ret;
7771	},
7772
7773	// Execute a callback for every element in the matched set.
7774	each: function( callback ) {
7775		return jQuery.each( this, callback );
7776	},
7777
7778	map: function( callback ) {
7779		return this.pushStack( jQuery.map( this, function( elem, i ) {
7780			return callback.call( elem, i, elem );
7781		} ) );
7782	},
7783
7784	slice: function() {
7785		return this.pushStack( slice.apply( this, arguments ) );
7786	},
7787
7788	first: function() {
7789		return this.eq( 0 );
7790	},
7791
7792	last: function() {
7793		return this.eq( -1 );
7794	},
7795
7796	even: function() {
7797		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
7798			return ( i + 1 ) % 2;
7799		} ) );
7800	},
7801
7802	odd: function() {
7803		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
7804			return i % 2;
7805		} ) );
7806	},
7807
7808	eq: function( i ) {
7809		var len = this.length,
7810			j = +i + ( i < 0 ? len : 0 );
7811		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
7812	},
7813
7814	end: function() {
7815		return this.prevObject || this.constructor();
7816	},
7817
7818	// For internal use only.
7819	// Behaves like an Array's method, not like a jQuery method.
7820	push: push,
7821	sort: arr.sort,
7822	splice: arr.splice
7823};
7824
7825jQuery.extend = jQuery.fn.extend = function() {
7826	var options, name, src, copy, copyIsArray, clone,
7827		target = arguments[ 0 ] || {},
7828		i = 1,
7829		length = arguments.length,
7830		deep = false;
7831
7832	// Handle a deep copy situation
7833	if ( typeof target === "boolean" ) {
7834		deep = target;
7835
7836		// Skip the boolean and the target
7837		target = arguments[ i ] || {};
7838		i++;
7839	}
7840
7841	// Handle case when target is a string or something (possible in deep copy)
7842	if ( typeof target !== "object" && !isFunction( target ) ) {
7843		target = {};
7844	}
7845
7846	// Extend jQuery itself if only one argument is passed
7847	if ( i === length ) {
7848		target = this;
7849		i--;
7850	}
7851
7852	for ( ; i < length; i++ ) {
7853
7854		// Only deal with non-null/undefined values
7855		if ( ( options = arguments[ i ] ) != null ) {
7856
7857			// Extend the base object
7858			for ( name in options ) {
7859				copy = options[ name ];
7860
7861				// Prevent Object.prototype pollution
7862				// Prevent never-ending loop
7863				if ( name === "__proto__" || target === copy ) {
7864					continue;
7865				}
7866
7867				// Recurse if we're merging plain objects or arrays
7868				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
7869					( copyIsArray = Array.isArray( copy ) ) ) ) {
7870					src = target[ name ];
7871
7872					// Ensure proper type for the source value
7873					if ( copyIsArray && !Array.isArray( src ) ) {
7874						clone = [];
7875					} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
7876						clone = {};
7877					} else {
7878						clone = src;
7879					}
7880					copyIsArray = false;
7881
7882					// Never move original objects, clone them
7883					target[ name ] = jQuery.extend( deep, clone, copy );
7884
7885				// Don't bring in undefined values
7886				} else if ( copy !== undefined ) {
7887					target[ name ] = copy;
7888				}
7889			}
7890		}
7891	}
7892
7893	// Return the modified object
7894	return target;
7895};
7896
7897jQuery.extend( {
7898
7899	// Unique for each copy of jQuery on the page
7900	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
7901
7902	// Assume jQuery is ready without the ready module
7903	isReady: true,
7904
7905	error: function( msg ) {
7906		throw new Error( msg );
7907	},
7908
7909	noop: function() {},
7910
7911	isPlainObject: function( obj ) {
7912		var proto, Ctor;
7913
7914		// Detect obvious negatives
7915		// Use toString instead of jQuery.type to catch host objects
7916		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
7917			return false;
7918		}
7919
7920		proto = getProto( obj );
7921
7922		// Objects with no prototype (e.g., `Object.create( null )`) are plain
7923		if ( !proto ) {
7924			return true;
7925		}
7926
7927		// Objects with prototype are plain iff they were constructed by a global Object function
7928		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
7929		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
7930	},
7931
7932	isEmptyObject: function( obj ) {
7933		var name;
7934
7935		for ( name in obj ) {
7936			return false;
7937		}
7938		return true;
7939	},
7940
7941	// Evaluates a script in a provided context; falls back to the global one
7942	// if not specified.
7943	globalEval: function( code, options, doc ) {
7944		DOMEval( code, { nonce: options && options.nonce }, doc );
7945	},
7946
7947	each: function( obj, callback ) {
7948		var length, i = 0;
7949
7950		if ( isArrayLike( obj ) ) {
7951			length = obj.length;
7952			for ( ; i < length; i++ ) {
7953				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
7954					break;
7955				}
7956			}
7957		} else {
7958			for ( i in obj ) {
7959				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
7960					break;
7961				}
7962			}
7963		}
7964
7965		return obj;
7966	},
7967
7968
7969	// Retrieve the text value of an array of DOM nodes
7970	text: function( elem ) {
7971		var node,
7972			ret = "",
7973			i = 0,
7974			nodeType = elem.nodeType;
7975
7976		if ( !nodeType ) {
7977
7978			// If no nodeType, this is expected to be an array
7979			while ( ( node = elem[ i++ ] ) ) {
7980
7981				// Do not traverse comment nodes
7982				ret += jQuery.text( node );
7983			}
7984		}
7985		if ( nodeType === 1 || nodeType === 11 ) {
7986			return elem.textContent;
7987		}
7988		if ( nodeType === 9 ) {
7989			return elem.documentElement.textContent;
7990		}
7991		if ( nodeType === 3 || nodeType === 4 ) {
7992			return elem.nodeValue;
7993		}
7994
7995		// Do not include comment or processing instruction nodes
7996
7997		return ret;
7998	},
7999
8000	// results is for internal usage only
8001	makeArray: function( arr, results ) {
8002		var ret = results || [];
8003
8004		if ( arr != null ) {
8005			if ( isArrayLike( Object( arr ) ) ) {
8006				jQuery.merge( ret,
8007					typeof arr === "string" ?
8008						[ arr ] : arr
8009				);
8010			} else {
8011				push.call( ret, arr );
8012			}
8013		}
8014
8015		return ret;
8016	},
8017
8018	inArray: function( elem, arr, i ) {
8019		return arr == null ? -1 : indexOf.call( arr, elem, i );
8020	},
8021
8022	isXMLDoc: function( elem ) {
8023		var namespace = elem && elem.namespaceURI,
8024			docElem = elem && ( elem.ownerDocument || elem ).documentElement;
8025
8026		// Assume HTML when documentElement doesn't yet exist, such as inside
8027		// document fragments.
8028		return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" );
8029	},
8030
8031	// Support: Android <=4.0 only, PhantomJS 1 only
8032	// push.apply(_, arraylike) throws on ancient WebKit
8033	merge: function( first, second ) {
8034		var len = +second.length,
8035			j = 0,
8036			i = first.length;
8037
8038		for ( ; j < len; j++ ) {
8039			first[ i++ ] = second[ j ];
8040		}
8041
8042		first.length = i;
8043
8044		return first;
8045	},
8046
8047	grep: function( elems, callback, invert ) {
8048		var callbackInverse,
8049			matches = [],
8050			i = 0,
8051			length = elems.length,
8052			callbackExpect = !invert;
8053
8054		// Go through the array, only saving the items
8055		// that pass the validator function
8056		for ( ; i < length; i++ ) {
8057			callbackInverse = !callback( elems[ i ], i );
8058			if ( callbackInverse !== callbackExpect ) {
8059				matches.push( elems[ i ] );
8060			}
8061		}
8062
8063		return matches;
8064	},
8065
8066	// arg is for internal usage only
8067	map: function( elems, callback, arg ) {
8068		var length, value,
8069			i = 0,
8070			ret = [];
8071
8072		// Go through the array, translating each of the items to their new values
8073		if ( isArrayLike( elems ) ) {
8074			length = elems.length;
8075			for ( ; i < length; i++ ) {
8076				value = callback( elems[ i ], i, arg );
8077
8078				if ( value != null ) {
8079					ret.push( value );
8080				}
8081			}
8082
8083		// Go through every key on the object,
8084		} else {
8085			for ( i in elems ) {
8086				value = callback( elems[ i ], i, arg );
8087
8088				if ( value != null ) {
8089					ret.push( value );
8090				}
8091			}
8092		}
8093
8094		// Flatten any nested arrays
8095		return flat( ret );
8096	},
8097
8098	// A global GUID counter for objects
8099	guid: 1,
8100
8101	// jQuery.support is not used in Core but other projects attach their
8102	// properties to it so it needs to exist.
8103	support: support
8104} );
8105
8106if ( typeof Symbol === "function" ) {
8107	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
8108}
8109
8110// Populate the class2type map
8111jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
8112	function( _i, name ) {
8113		class2type[ "[object " + name + "]" ] = name.toLowerCase();
8114	} );
8115
8116function isArrayLike( obj ) {
8117
8118	// Support: real iOS 8.2 only (not reproducible in simulator)
8119	// `in` check used to prevent JIT error (gh-2145)
8120	// hasOwn isn't used here due to false negatives
8121	// regarding Nodelist length in IE
8122	var length = !!obj && "length" in obj && obj.length,
8123		type = toType( obj );
8124
8125	if ( isFunction( obj ) || isWindow( obj ) ) {
8126		return false;
8127	}
8128
8129	return type === "array" || length === 0 ||
8130		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
8131}
8132
8133
8134function nodeName( elem, name ) {
8135
8136	return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
8137
8138}
8139var pop = arr.pop;
8140
8141
8142var sort = arr.sort;
8143
8144
8145var splice = arr.splice;
8146
8147
8148var whitespace = "[\\x20\\t\\r\\n\\f]";
8149
8150
8151var rtrimCSS = new RegExp(
8152	"^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$",
8153	"g"
8154);
8155
8156
8157
8158
8159// Note: an element does not contain itself
8160jQuery.contains = function( a, b ) {
8161	var bup = b && b.parentNode;
8162
8163	return a === bup || !!( bup && bup.nodeType === 1 && (
8164
8165		// Support: IE 9 - 11+
8166		// IE doesn't have `contains` on SVG.
8167		a.contains ?
8168			a.contains( bup ) :
8169			a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
8170	) );
8171};
8172
8173
8174
8175
8176// CSS string/identifier serialization
8177// https://drafts.csswg.org/cssom/#common-serializing-idioms
8178var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
8179
8180function fcssescape( ch, asCodePoint ) {
8181	if ( asCodePoint ) {
8182
8183		// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
8184		if ( ch === "\0" ) {
8185			return "\uFFFD";
8186		}
8187
8188		// Control characters and (dependent upon position) numbers get escaped as code points
8189		return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
8190	}
8191
8192	// Other potentially-special ASCII characters get backslash-escaped
8193	return "\\" + ch;
8194}
8195
8196jQuery.escapeSelector = function( sel ) {
8197	return ( sel + "" ).replace( rcssescape, fcssescape );
8198};
8199
8200
8201
8202
8203var preferredDoc = document,
8204	pushNative = push;
8205
8206( function() {
8207
8208var i,
8209	Expr,
8210	outermostContext,
8211	sortInput,
8212	hasDuplicate,
8213	push = pushNative,
8214
8215	// Local document vars
8216	document,
8217	documentElement,
8218	documentIsHTML,
8219	rbuggyQSA,
8220	matches,
8221
8222	// Instance-specific data
8223	expando = jQuery.expando,
8224	dirruns = 0,
8225	done = 0,
8226	classCache = createCache(),
8227	tokenCache = createCache(),
8228	compilerCache = createCache(),
8229	nonnativeSelectorCache = createCache(),
8230	sortOrder = function( a, b ) {
8231		if ( a === b ) {
8232			hasDuplicate = true;
8233		}
8234		return 0;
8235	},
8236
8237	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" +
8238		"loop|multiple|open|readonly|required|scoped",
8239
8240	// Regular expressions
8241
8242	// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
8243	identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
8244		"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
8245
8246	// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors
8247	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
8248
8249		// Operator (capture 2)
8250		"*([*^$|!~]?=)" + whitespace +
8251
8252		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
8253		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
8254		whitespace + "*\\]",
8255
8256	pseudos = ":(" + identifier + ")(?:\\((" +
8257
8258		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
8259		// 1. quoted (capture 3; capture 4 or capture 5)
8260		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
8261
8262		// 2. simple (capture 6)
8263		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
8264
8265		// 3. anything else (capture 2)
8266		".*" +
8267		")\\)|)",
8268
8269	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
8270	rwhitespace = new RegExp( whitespace + "+", "g" ),
8271
8272	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
8273	rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" +
8274		whitespace + "*" ),
8275	rdescend = new RegExp( whitespace + "|>" ),
8276
8277	rpseudo = new RegExp( pseudos ),
8278	ridentifier = new RegExp( "^" + identifier + "$" ),
8279
8280	matchExpr = {
8281		ID: new RegExp( "^#(" + identifier + ")" ),
8282		CLASS: new RegExp( "^\\.(" + identifier + ")" ),
8283		TAG: new RegExp( "^(" + identifier + "|[*])" ),
8284		ATTR: new RegExp( "^" + attributes ),
8285		PSEUDO: new RegExp( "^" + pseudos ),
8286		CHILD: new RegExp(
8287			"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
8288				whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
8289				whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
8290		bool: new RegExp( "^(?:" + booleans + ")$", "i" ),
8291
8292		// For use in libraries implementing .is()
8293		// We use this for POS matching in `select`
8294		needsContext: new RegExp( "^" + whitespace +
8295			"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
8296			"*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
8297	},
8298
8299	rinputs = /^(?:input|select|textarea|button)$/i,
8300	rheader = /^h\d$/i,
8301
8302	// Easily-parseable/retrievable ID or TAG or CLASS selectors
8303	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
8304
8305	rsibling = /[+~]/,
8306
8307	// CSS escapes
8308	// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters
8309	runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace +
8310		"?|\\\\([^\\r\\n\\f])", "g" ),
8311	funescape = function( escape, nonHex ) {
8312		var high = "0x" + escape.slice( 1 ) - 0x10000;
8313
8314		if ( nonHex ) {
8315
8316			// Strip the backslash prefix from a non-hex escape sequence
8317			return nonHex;
8318		}
8319
8320		// Replace a hexadecimal escape sequence with the encoded Unicode code point
8321		// Support: IE <=11+
8322		// For values outside the Basic Multilingual Plane (BMP), manually construct a
8323		// surrogate pair
8324		return high < 0 ?
8325			String.fromCharCode( high + 0x10000 ) :
8326			String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
8327	},
8328
8329	// Used for iframes; see `setDocument`.
8330	// Support: IE 9 - 11+, Edge 12 - 18+
8331	// Removing the function wrapper causes a "Permission Denied"
8332	// error in IE/Edge.
8333	unloadHandler = function() {
8334		setDocument();
8335	},
8336
8337	inDisabledFieldset = addCombinator(
8338		function( elem ) {
8339			return elem.disabled === true && nodeName( elem, "fieldset" );
8340		},
8341		{ dir: "parentNode", next: "legend" }
8342	);
8343
8344// Support: IE <=9 only
8345// Accessing document.activeElement can throw unexpectedly
8346// https://bugs.jquery.com/ticket/13393
8347function safeActiveElement() {
8348	try {
8349		return document.activeElement;
8350	} catch ( err ) { }
8351}
8352
8353// Optimize for push.apply( _, NodeList )
8354try {
8355	push.apply(
8356		( arr = slice.call( preferredDoc.childNodes ) ),
8357		preferredDoc.childNodes
8358	);
8359
8360	// Support: Android <=4.0
8361	// Detect silently failing push.apply
8362	// eslint-disable-next-line no-unused-expressions
8363	arr[ preferredDoc.childNodes.length ].nodeType;
8364} catch ( e ) {
8365	push = {
8366		apply: function( target, els ) {
8367			pushNative.apply( target, slice.call( els ) );
8368		},
8369		call: function( target ) {
8370			pushNative.apply( target, slice.call( arguments, 1 ) );
8371		}
8372	};
8373}
8374
8375function find( selector, context, results, seed ) {
8376	var m, i, elem, nid, match, groups, newSelector,
8377		newContext = context && context.ownerDocument,
8378
8379		// nodeType defaults to 9, since context defaults to document
8380		nodeType = context ? context.nodeType : 9;
8381
8382	results = results || [];
8383
8384	// Return early from calls with invalid selector or context
8385	if ( typeof selector !== "string" || !selector ||
8386		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
8387
8388		return results;
8389	}
8390
8391	// Try to shortcut find operations (as opposed to filters) in HTML documents
8392	if ( !seed ) {
8393		setDocument( context );
8394		context = context || document;
8395
8396		if ( documentIsHTML ) {
8397
8398			// If the selector is sufficiently simple, try using a "get*By*" DOM method
8399			// (excepting DocumentFragment context, where the methods don't exist)
8400			if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {
8401
8402				// ID selector
8403				if ( ( m = match[ 1 ] ) ) {
8404
8405					// Document context
8406					if ( nodeType === 9 ) {
8407						if ( ( elem = context.getElementById( m ) ) ) {
8408
8409							// Support: IE 9 only
8410							// getElementById can match elements by name instead of ID
8411							if ( elem.id === m ) {
8412								push.call( results, elem );
8413								return results;
8414							}
8415						} else {
8416							return results;
8417						}
8418
8419					// Element context
8420					} else {
8421
8422						// Support: IE 9 only
8423						// getElementById can match elements by name instead of ID
8424						if ( newContext && ( elem = newContext.getElementById( m ) ) &&
8425							find.contains( context, elem ) &&
8426							elem.id === m ) {
8427
8428							push.call( results, elem );
8429							return results;
8430						}
8431					}
8432
8433				// Type selector
8434				} else if ( match[ 2 ] ) {
8435					push.apply( results, context.getElementsByTagName( selector ) );
8436					return results;
8437
8438				// Class selector
8439				} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {
8440					push.apply( results, context.getElementsByClassName( m ) );
8441					return results;
8442				}
8443			}
8444
8445			// Take advantage of querySelectorAll
8446			if ( !nonnativeSelectorCache[ selector + " " ] &&
8447				( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {
8448
8449				newSelector = selector;
8450				newContext = context;
8451
8452				// qSA considers elements outside a scoping root when evaluating child or
8453				// descendant combinators, which is not what we want.
8454				// In such cases, we work around the behavior by prefixing every selector in the
8455				// list with an ID selector referencing the scope context.
8456				// The technique has to be used as well when a leading combinator is used
8457				// as such selectors are not recognized by querySelectorAll.
8458				// Thanks to Andrew Dupont for this technique.
8459				if ( nodeType === 1 &&
8460					( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {
8461
8462					// Expand context for sibling selectors
8463					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
8464						context;
8465
8466					// We can use :scope instead of the ID hack if the browser
8467					// supports it & if we're not changing the context.
8468					// Support: IE 11+, Edge 17 - 18+
8469					// IE/Edge sometimes throw a "Permission denied" error when
8470					// strict-comparing two documents; shallow comparisons work.
8471					// eslint-disable-next-line eqeqeq
8472					if ( newContext != context || !support.scope ) {
8473
8474						// Capture the context ID, setting it first if necessary
8475						if ( ( nid = context.getAttribute( "id" ) ) ) {
8476							nid = jQuery.escapeSelector( nid );
8477						} else {
8478							context.setAttribute( "id", ( nid = expando ) );
8479						}
8480					}
8481
8482					// Prefix every selector in the list
8483					groups = tokenize( selector );
8484					i = groups.length;
8485					while ( i-- ) {
8486						groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
8487							toSelector( groups[ i ] );
8488					}
8489					newSelector = groups.join( "," );
8490				}
8491
8492				try {
8493					push.apply( results,
8494						newContext.querySelectorAll( newSelector )
8495					);
8496					return results;
8497				} catch ( qsaError ) {
8498					nonnativeSelectorCache( selector, true );
8499				} finally {
8500					if ( nid === expando ) {
8501						context.removeAttribute( "id" );
8502					}
8503				}
8504			}
8505		}
8506	}
8507
8508	// All others
8509	return select( selector.replace( rtrimCSS, "$1" ), context, results, seed );
8510}
8511
8512/**
8513 * Create key-value caches of limited size
8514 * @returns {function(string, object)} Returns the Object data after storing it on itself with
8515 *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
8516 *	deleting the oldest entry
8517 */
8518function createCache() {
8519	var keys = [];
8520
8521	function cache( key, value ) {
8522
8523		// Use (key + " ") to avoid collision with native prototype properties
8524		// (see https://github.com/jquery/sizzle/issues/157)
8525		if ( keys.push( key + " " ) > Expr.cacheLength ) {
8526
8527			// Only keep the most recent entries
8528			delete cache[ keys.shift() ];
8529		}
8530		return ( cache[ key + " " ] = value );
8531	}
8532	return cache;
8533}
8534
8535/**
8536 * Mark a function for special use by jQuery selector module
8537 * @param {Function} fn The function to mark
8538 */
8539function markFunction( fn ) {
8540	fn[ expando ] = true;
8541	return fn;
8542}
8543
8544/**
8545 * Support testing using an element
8546 * @param {Function} fn Passed the created element and returns a boolean result
8547 */
8548function assert( fn ) {
8549	var el = document.createElement( "fieldset" );
8550
8551	try {
8552		return !!fn( el );
8553	} catch ( e ) {
8554		return false;
8555	} finally {
8556
8557		// Remove from its parent by default
8558		if ( el.parentNode ) {
8559			el.parentNode.removeChild( el );
8560		}
8561
8562		// release memory in IE
8563		el = null;
8564	}
8565}
8566
8567/**
8568 * Returns a function to use in pseudos for input types
8569 * @param {String} type
8570 */
8571function createInputPseudo( type ) {
8572	return function( elem ) {
8573		return nodeName( elem, "input" ) && elem.type === type;
8574	};
8575}
8576
8577/**
8578 * Returns a function to use in pseudos for buttons
8579 * @param {String} type
8580 */
8581function createButtonPseudo( type ) {
8582	return function( elem ) {
8583		return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) &&
8584			elem.type === type;
8585	};
8586}
8587
8588/**
8589 * Returns a function to use in pseudos for :enabled/:disabled
8590 * @param {Boolean} disabled true for :disabled; false for :enabled
8591 */
8592function createDisabledPseudo( disabled ) {
8593
8594	// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
8595	return function( elem ) {
8596
8597		// Only certain elements can match :enabled or :disabled
8598		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
8599		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
8600		if ( "form" in elem ) {
8601
8602			// Check for inherited disabledness on relevant non-disabled elements:
8603			// * listed form-associated elements in a disabled fieldset
8604			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
8605			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
8606			// * option elements in a disabled optgroup
8607			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
8608			// All such elements have a "form" property.
8609			if ( elem.parentNode && elem.disabled === false ) {
8610
8611				// Option elements defer to a parent optgroup if present
8612				if ( "label" in elem ) {
8613					if ( "label" in elem.parentNode ) {
8614						return elem.parentNode.disabled === disabled;
8615					} else {
8616						return elem.disabled === disabled;
8617					}
8618				}
8619
8620				// Support: IE 6 - 11+
8621				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
8622				return elem.isDisabled === disabled ||
8623
8624					// Where there is no isDisabled, check manually
8625					elem.isDisabled !== !disabled &&
8626						inDisabledFieldset( elem ) === disabled;
8627			}
8628
8629			return elem.disabled === disabled;
8630
8631		// Try to winnow out elements that can't be disabled before trusting the disabled property.
8632		// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
8633		// even exist on them, let alone have a boolean value.
8634		} else if ( "label" in elem ) {
8635			return elem.disabled === disabled;
8636		}
8637
8638		// Remaining elements are neither :enabled nor :disabled
8639		return false;
8640	};
8641}
8642
8643/**
8644 * Returns a function to use in pseudos for positionals
8645 * @param {Function} fn
8646 */
8647function createPositionalPseudo( fn ) {
8648	return markFunction( function( argument ) {
8649		argument = +argument;
8650		return markFunction( function( seed, matches ) {
8651			var j,
8652				matchIndexes = fn( [], seed.length, argument ),
8653				i = matchIndexes.length;
8654
8655			// Match elements found at the specified indexes
8656			while ( i-- ) {
8657				if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
8658					seed[ j ] = !( matches[ j ] = seed[ j ] );
8659				}
8660			}
8661		} );
8662	} );
8663}
8664
8665/**
8666 * Checks a node for validity as a jQuery selector context
8667 * @param {Element|Object=} context
8668 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
8669 */
8670function testContext( context ) {
8671	return context && typeof context.getElementsByTagName !== "undefined" && context;
8672}
8673
8674/**
8675 * Sets document-related variables once based on the current document
8676 * @param {Element|Object} [node] An element or document object to use to set the document
8677 * @returns {Object} Returns the current document
8678 */
8679function setDocument( node ) {
8680	var subWindow,
8681		doc = node ? node.ownerDocument || node : preferredDoc;
8682
8683	// Return early if doc is invalid or already selected
8684	// Support: IE 11+, Edge 17 - 18+
8685	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
8686	// two documents; shallow comparisons work.
8687	// eslint-disable-next-line eqeqeq
8688	if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
8689		return document;
8690	}
8691
8692	// Update global variables
8693	document = doc;
8694	documentElement = document.documentElement;
8695	documentIsHTML = !jQuery.isXMLDoc( document );
8696
8697	// Support: iOS 7 only, IE 9 - 11+
8698	// Older browsers didn't support unprefixed `matches`.
8699	matches = documentElement.matches ||
8700		documentElement.webkitMatchesSelector ||
8701		documentElement.msMatchesSelector;
8702
8703	// Support: IE 9 - 11+, Edge 12 - 18+
8704	// Accessing iframe documents after unload throws "permission denied" errors
8705	// (see trac-13936).
8706	// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,
8707	// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.
8708	if ( documentElement.msMatchesSelector &&
8709
8710		// Support: IE 11+, Edge 17 - 18+
8711		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
8712		// two documents; shallow comparisons work.
8713		// eslint-disable-next-line eqeqeq
8714		preferredDoc != document &&
8715		( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
8716
8717		// Support: IE 9 - 11+, Edge 12 - 18+
8718		subWindow.addEventListener( "unload", unloadHandler );
8719	}
8720
8721	// Support: IE <10
8722	// Check if getElementById returns elements by name
8723	// The broken getElementById methods don't pick up programmatically-set names,
8724	// so use a roundabout getElementsByName test
8725	support.getById = assert( function( el ) {
8726		documentElement.appendChild( el ).id = jQuery.expando;
8727		return !document.getElementsByName ||
8728			!document.getElementsByName( jQuery.expando ).length;
8729	} );
8730
8731	// Support: IE 9 only
8732	// Check to see if it's possible to do matchesSelector
8733	// on a disconnected node.
8734	support.disconnectedMatch = assert( function( el ) {
8735		return matches.call( el, "*" );
8736	} );
8737
8738	// Support: IE 9 - 11+, Edge 12 - 18+
8739	// IE/Edge don't support the :scope pseudo-class.
8740	support.scope = assert( function() {
8741		return document.querySelectorAll( ":scope" );
8742	} );
8743
8744	// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only
8745	// Make sure the `:has()` argument is parsed unforgivingly.
8746	// We include `*` in the test to detect buggy implementations that are
8747	// _selectively_ forgiving (specifically when the list includes at least
8748	// one valid selector).
8749	// Note that we treat complete lack of support for `:has()` as if it were
8750	// spec-compliant support, which is fine because use of `:has()` in such
8751	// environments will fail in the qSA path and fall back to jQuery traversal
8752	// anyway.
8753	support.cssHas = assert( function() {
8754		try {
8755			document.querySelector( ":has(*,:jqfake)" );
8756			return false;
8757		} catch ( e ) {
8758			return true;
8759		}
8760	} );
8761
8762	// ID filter and find
8763	if ( support.getById ) {
8764		Expr.filter.ID = function( id ) {
8765			var attrId = id.replace( runescape, funescape );
8766			return function( elem ) {
8767				return elem.getAttribute( "id" ) === attrId;
8768			};
8769		};
8770		Expr.find.ID = function( id, context ) {
8771			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
8772				var elem = context.getElementById( id );
8773				return elem ? [ elem ] : [];
8774			}
8775		};
8776	} else {
8777		Expr.filter.ID =  function( id ) {
8778			var attrId = id.replace( runescape, funescape );
8779			return function( elem ) {
8780				var node = typeof elem.getAttributeNode !== "undefined" &&
8781					elem.getAttributeNode( "id" );
8782				return node && node.value === attrId;
8783			};
8784		};
8785
8786		// Support: IE 6 - 7 only
8787		// getElementById is not reliable as a find shortcut
8788		Expr.find.ID = function( id, context ) {
8789			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
8790				var node, i, elems,
8791					elem = context.getElementById( id );
8792
8793				if ( elem ) {
8794
8795					// Verify the id attribute
8796					node = elem.getAttributeNode( "id" );
8797					if ( node && node.value === id ) {
8798						return [ elem ];
8799					}
8800
8801					// Fall back on getElementsByName
8802					elems = context.getElementsByName( id );
8803					i = 0;
8804					while ( ( elem = elems[ i++ ] ) ) {
8805						node = elem.getAttributeNode( "id" );
8806						if ( node && node.value === id ) {
8807							return [ elem ];
8808						}
8809					}
8810				}
8811
8812				return [];
8813			}
8814		};
8815	}
8816
8817	// Tag
8818	Expr.find.TAG = function( tag, context ) {
8819		if ( typeof context.getElementsByTagName !== "undefined" ) {
8820			return context.getElementsByTagName( tag );
8821
8822		// DocumentFragment nodes don't have gEBTN
8823		} else {
8824			return context.querySelectorAll( tag );
8825		}
8826	};
8827
8828	// Class
8829	Expr.find.CLASS = function( className, context ) {
8830		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
8831			return context.getElementsByClassName( className );
8832		}
8833	};
8834
8835	/* QSA/matchesSelector
8836	---------------------------------------------------------------------- */
8837
8838	// QSA and matchesSelector support
8839
8840	rbuggyQSA = [];
8841
8842	// Build QSA regex
8843	// Regex strategy adopted from Diego Perini
8844	assert( function( el ) {
8845
8846		var input;
8847
8848		documentElement.appendChild( el ).innerHTML =
8849			"<a id='" + expando + "' href='' disabled='disabled'></a>" +
8850			"<select id='" + expando + "-\r\\' disabled='disabled'>" +
8851			"<option selected=''></option></select>";
8852
8853		// Support: iOS <=7 - 8 only
8854		// Boolean attributes and "value" are not treated correctly in some XML documents
8855		if ( !el.querySelectorAll( "[selected]" ).length ) {
8856			rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
8857		}
8858
8859		// Support: iOS <=7 - 8 only
8860		if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
8861			rbuggyQSA.push( "~=" );
8862		}
8863
8864		// Support: iOS 8 only
8865		// https://bugs.webkit.org/show_bug.cgi?id=136851
8866		// In-page `selector#id sibling-combinator selector` fails
8867		if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
8868			rbuggyQSA.push( ".#.+[+~]" );
8869		}
8870
8871		// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+
8872		// In some of the document kinds, these selectors wouldn't work natively.
8873		// This is probably OK but for backwards compatibility we want to maintain
8874		// handling them through jQuery traversal in jQuery 3.x.
8875		if ( !el.querySelectorAll( ":checked" ).length ) {
8876			rbuggyQSA.push( ":checked" );
8877		}
8878
8879		// Support: Windows 8 Native Apps
8880		// The type and name attributes are restricted during .innerHTML assignment
8881		input = document.createElement( "input" );
8882		input.setAttribute( "type", "hidden" );
8883		el.appendChild( input ).setAttribute( "name", "D" );
8884
8885		// Support: IE 9 - 11+
8886		// IE's :disabled selector does not pick up the children of disabled fieldsets
8887		// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+
8888		// In some of the document kinds, these selectors wouldn't work natively.
8889		// This is probably OK but for backwards compatibility we want to maintain
8890		// handling them through jQuery traversal in jQuery 3.x.
8891		documentElement.appendChild( el ).disabled = true;
8892		if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
8893			rbuggyQSA.push( ":enabled", ":disabled" );
8894		}
8895
8896		// Support: IE 11+, Edge 15 - 18+
8897		// IE 11/Edge don't find elements on a `[name='']` query in some cases.
8898		// Adding a temporary attribute to the document before the selection works
8899		// around the issue.
8900		// Interestingly, IE 10 & older don't seem to have the issue.
8901		input = document.createElement( "input" );
8902		input.setAttribute( "name", "" );
8903		el.appendChild( input );
8904		if ( !el.querySelectorAll( "[name='']" ).length ) {
8905			rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
8906				whitespace + "*(?:''|\"\")" );
8907		}
8908	} );
8909
8910	if ( !support.cssHas ) {
8911
8912		// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+
8913		// Our regular `try-catch` mechanism fails to detect natively-unsupported
8914		// pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`)
8915		// in browsers that parse the `:has()` argument as a forgiving selector list.
8916		// https://drafts.csswg.org/selectors/#relational now requires the argument
8917		// to be parsed unforgivingly, but browsers have not yet fully adjusted.
8918		rbuggyQSA.push( ":has" );
8919	}
8920
8921	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
8922
8923	/* Sorting
8924	---------------------------------------------------------------------- */
8925
8926	// Document order sorting
8927	sortOrder = function( a, b ) {
8928
8929		// Flag for duplicate removal
8930		if ( a === b ) {
8931			hasDuplicate = true;
8932			return 0;
8933		}
8934
8935		// Sort on method existence if only one input has compareDocumentPosition
8936		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
8937		if ( compare ) {
8938			return compare;
8939		}
8940
8941		// Calculate position if both inputs belong to the same document
8942		// Support: IE 11+, Edge 17 - 18+
8943		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
8944		// two documents; shallow comparisons work.
8945		// eslint-disable-next-line eqeqeq
8946		compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
8947			a.compareDocumentPosition( b ) :
8948
8949			// Otherwise we know they are disconnected
8950			1;
8951
8952		// Disconnected nodes
8953		if ( compare & 1 ||
8954			( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
8955
8956			// Choose the first element that is related to our preferred document
8957			// Support: IE 11+, Edge 17 - 18+
8958			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
8959			// two documents; shallow comparisons work.
8960			// eslint-disable-next-line eqeqeq
8961			if ( a === document || a.ownerDocument == preferredDoc &&
8962				find.contains( preferredDoc, a ) ) {
8963				return -1;
8964			}
8965
8966			// Support: IE 11+, Edge 17 - 18+
8967			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
8968			// two documents; shallow comparisons work.
8969			// eslint-disable-next-line eqeqeq
8970			if ( b === document || b.ownerDocument == preferredDoc &&
8971				find.contains( preferredDoc, b ) ) {
8972				return 1;
8973			}
8974
8975			// Maintain original order
8976			return sortInput ?
8977				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
8978				0;
8979		}
8980
8981		return compare & 4 ? -1 : 1;
8982	};
8983
8984	return document;
8985}
8986
8987find.matches = function( expr, elements ) {
8988	return find( expr, null, null, elements );
8989};
8990
8991find.matchesSelector = function( elem, expr ) {
8992	setDocument( elem );
8993
8994	if ( documentIsHTML &&
8995		!nonnativeSelectorCache[ expr + " " ] &&
8996		( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
8997
8998		try {
8999			var ret = matches.call( elem, expr );
9000
9001			// IE 9's matchesSelector returns false on disconnected nodes
9002			if ( ret || support.disconnectedMatch ||
9003
9004					// As well, disconnected nodes are said to be in a document
9005					// fragment in IE 9
9006					elem.document && elem.document.nodeType !== 11 ) {
9007				return ret;
9008			}
9009		} catch ( e ) {
9010			nonnativeSelectorCache( expr, true );
9011		}
9012	}
9013
9014	return find( expr, document, null, [ elem ] ).length > 0;
9015};
9016
9017find.contains = function( context, elem ) {
9018
9019	// Set document vars if needed
9020	// Support: IE 11+, Edge 17 - 18+
9021	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
9022	// two documents; shallow comparisons work.
9023	// eslint-disable-next-line eqeqeq
9024	if ( ( context.ownerDocument || context ) != document ) {
9025		setDocument( context );
9026	}
9027	return jQuery.contains( context, elem );
9028};
9029
9030
9031find.attr = function( elem, name ) {
9032
9033	// Set document vars if needed
9034	// Support: IE 11+, Edge 17 - 18+
9035	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
9036	// two documents; shallow comparisons work.
9037	// eslint-disable-next-line eqeqeq
9038	if ( ( elem.ownerDocument || elem ) != document ) {
9039		setDocument( elem );
9040	}
9041
9042	var fn = Expr.attrHandle[ name.toLowerCase() ],
9043
9044		// Don't get fooled by Object.prototype properties (see trac-13807)
9045		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
9046			fn( elem, name, !documentIsHTML ) :
9047			undefined;
9048
9049	if ( val !== undefined ) {
9050		return val;
9051	}
9052
9053	return elem.getAttribute( name );
9054};
9055
9056find.error = function( msg ) {
9057	throw new Error( "Syntax error, unrecognized expression: " + msg );
9058};
9059
9060/**
9061 * Document sorting and removing duplicates
9062 * @param {ArrayLike} results
9063 */
9064jQuery.uniqueSort = function( results ) {
9065	var elem,
9066		duplicates = [],
9067		j = 0,
9068		i = 0;
9069
9070	// Unless we *know* we can detect duplicates, assume their presence
9071	//
9072	// Support: Android <=4.0+
9073	// Testing for detecting duplicates is unpredictable so instead assume we can't
9074	// depend on duplicate detection in all browsers without a stable sort.
9075	hasDuplicate = !support.sortStable;
9076	sortInput = !support.sortStable && slice.call( results, 0 );
9077	sort.call( results, sortOrder );
9078
9079	if ( hasDuplicate ) {
9080		while ( ( elem = results[ i++ ] ) ) {
9081			if ( elem === results[ i ] ) {
9082				j = duplicates.push( i );
9083			}
9084		}
9085		while ( j-- ) {
9086			splice.call( results, duplicates[ j ], 1 );
9087		}
9088	}
9089
9090	// Clear input after sorting to release objects
9091	// See https://github.com/jquery/sizzle/pull/225
9092	sortInput = null;
9093
9094	return results;
9095};
9096
9097jQuery.fn.uniqueSort = function() {
9098	return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );
9099};
9100
9101Expr = jQuery.expr = {
9102
9103	// Can be adjusted by the user
9104	cacheLength: 50,
9105
9106	createPseudo: markFunction,
9107
9108	match: matchExpr,
9109
9110	attrHandle: {},
9111
9112	find: {},
9113
9114	relative: {
9115		">": { dir: "parentNode", first: true },
9116		" ": { dir: "parentNode" },
9117		"+": { dir: "previousSibling", first: true },
9118		"~": { dir: "previousSibling" }
9119	},
9120
9121	preFilter: {
9122		ATTR: function( match ) {
9123			match[ 1 ] = match[ 1 ].replace( runescape, funescape );
9124
9125			// Move the given value to match[3] whether quoted or unquoted
9126			match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" )
9127				.replace( runescape, funescape );
9128
9129			if ( match[ 2 ] === "~=" ) {
9130				match[ 3 ] = " " + match[ 3 ] + " ";
9131			}
9132
9133			return match.slice( 0, 4 );
9134		},
9135
9136		CHILD: function( match ) {
9137
9138			/* matches from matchExpr["CHILD"]
9139				1 type (only|nth|...)
9140				2 what (child|of-type)
9141				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
9142				4 xn-component of xn+y argument ([+-]?\d*n|)
9143				5 sign of xn-component
9144				6 x of xn-component
9145				7 sign of y-component
9146				8 y of y-component
9147			*/
9148			match[ 1 ] = match[ 1 ].toLowerCase();
9149
9150			if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
9151
9152				// nth-* requires argument
9153				if ( !match[ 3 ] ) {
9154					find.error( match[ 0 ] );
9155				}
9156
9157				// numeric x and y parameters for Expr.filter.CHILD
9158				// remember that false/true cast respectively to 0/1
9159				match[ 4 ] = +( match[ 4 ] ?
9160					match[ 5 ] + ( match[ 6 ] || 1 ) :
9161					2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" )
9162				);
9163				match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
9164
9165			// other types prohibit arguments
9166			} else if ( match[ 3 ] ) {
9167				find.error( match[ 0 ] );
9168			}
9169
9170			return match;
9171		},
9172
9173		PSEUDO: function( match ) {
9174			var excess,
9175				unquoted = !match[ 6 ] && match[ 2 ];
9176
9177			if ( matchExpr.CHILD.test( match[ 0 ] ) ) {
9178				return null;
9179			}
9180
9181			// Accept quoted arguments as-is
9182			if ( match[ 3 ] ) {
9183				match[ 2 ] = match[ 4 ] || match[ 5 ] || "";
9184
9185			// Strip excess characters from unquoted arguments
9186			} else if ( unquoted && rpseudo.test( unquoted ) &&
9187
9188				// Get excess from tokenize (recursively)
9189				( excess = tokenize( unquoted, true ) ) &&
9190
9191				// advance to the next closing parenthesis
9192				( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
9193
9194				// excess is a negative index
9195				match[ 0 ] = match[ 0 ].slice( 0, excess );
9196				match[ 2 ] = unquoted.slice( 0, excess );
9197			}
9198
9199			// Return only captures needed by the pseudo filter method (type and argument)
9200			return match.slice( 0, 3 );
9201		}
9202	},
9203
9204	filter: {
9205
9206		TAG: function( nodeNameSelector ) {
9207			var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
9208			return nodeNameSelector === "*" ?
9209				function() {
9210					return true;
9211				} :
9212				function( elem ) {
9213					return nodeName( elem, expectedNodeName );
9214				};
9215		},
9216
9217		CLASS: function( className ) {
9218			var pattern = classCache[ className + " " ];
9219
9220			return pattern ||
9221				( pattern = new RegExp( "(^|" + whitespace + ")" + className +
9222					"(" + whitespace + "|$)" ) ) &&
9223				classCache( className, function( elem ) {
9224					return pattern.test(
9225						typeof elem.className === "string" && elem.className ||
9226							typeof elem.getAttribute !== "undefined" &&
9227								elem.getAttribute( "class" ) ||
9228							""
9229					);
9230				} );
9231		},
9232
9233		ATTR: function( name, operator, check ) {
9234			return function( elem ) {
9235				var result = find.attr( elem, name );
9236
9237				if ( result == null ) {
9238					return operator === "!=";
9239				}
9240				if ( !operator ) {
9241					return true;
9242				}
9243
9244				result += "";
9245
9246				if ( operator === "=" ) {
9247					return result === check;
9248				}
9249				if ( operator === "!=" ) {
9250					return result !== check;
9251				}
9252				if ( operator === "^=" ) {
9253					return check && result.indexOf( check ) === 0;
9254				}
9255				if ( operator === "*=" ) {
9256					return check && result.indexOf( check ) > -1;
9257				}
9258				if ( operator === "$=" ) {
9259					return check && result.slice( -check.length ) === check;
9260				}
9261				if ( operator === "~=" ) {
9262					return ( " " + result.replace( rwhitespace, " " ) + " " )
9263						.indexOf( check ) > -1;
9264				}
9265				if ( operator === "|=" ) {
9266					return result === check || result.slice( 0, check.length + 1 ) === check + "-";
9267				}
9268
9269				return false;
9270			};
9271		},
9272
9273		CHILD: function( type, what, _argument, first, last ) {
9274			var simple = type.slice( 0, 3 ) !== "nth",
9275				forward = type.slice( -4 ) !== "last",
9276				ofType = what === "of-type";
9277
9278			return first === 1 && last === 0 ?
9279
9280				// Shortcut for :nth-*(n)
9281				function( elem ) {
9282					return !!elem.parentNode;
9283				} :
9284
9285				function( elem, _context, xml ) {
9286					var cache, outerCache, node, nodeIndex, start,
9287						dir = simple !== forward ? "nextSibling" : "previousSibling",
9288						parent = elem.parentNode,
9289						name = ofType && elem.nodeName.toLowerCase(),
9290						useCache = !xml && !ofType,
9291						diff = false;
9292
9293					if ( parent ) {
9294
9295						// :(first|last|only)-(child|of-type)
9296						if ( simple ) {
9297							while ( dir ) {
9298								node = elem;
9299								while ( ( node = node[ dir ] ) ) {
9300									if ( ofType ?
9301										nodeName( node, name ) :
9302										node.nodeType === 1 ) {
9303
9304										return false;
9305									}
9306								}
9307
9308								// Reverse direction for :only-* (if we haven't yet done so)
9309								start = dir = type === "only" && !start && "nextSibling";
9310							}
9311							return true;
9312						}
9313
9314						start = [ forward ? parent.firstChild : parent.lastChild ];
9315
9316						// non-xml :nth-child(...) stores cache data on `parent`
9317						if ( forward && useCache ) {
9318
9319							// Seek `elem` from a previously-cached index
9320							outerCache = parent[ expando ] || ( parent[ expando ] = {} );
9321							cache = outerCache[ type ] || [];
9322							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
9323							diff = nodeIndex && cache[ 2 ];
9324							node = nodeIndex && parent.childNodes[ nodeIndex ];
9325
9326							while ( ( node = ++nodeIndex && node && node[ dir ] ||
9327
9328								// Fallback to seeking `elem` from the start
9329								( diff = nodeIndex = 0 ) || start.pop() ) ) {
9330
9331								// When found, cache indexes on `parent` and break
9332								if ( node.nodeType === 1 && ++diff && node === elem ) {
9333									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
9334									break;
9335								}
9336							}
9337
9338						} else {
9339
9340							// Use previously-cached element index if available
9341							if ( useCache ) {
9342								outerCache = elem[ expando ] || ( elem[ expando ] = {} );
9343								cache = outerCache[ type ] || [];
9344								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
9345								diff = nodeIndex;
9346							}
9347
9348							// xml :nth-child(...)
9349							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
9350							if ( diff === false ) {
9351
9352								// Use the same loop as above to seek `elem` from the start
9353								while ( ( node = ++nodeIndex && node && node[ dir ] ||
9354									( diff = nodeIndex = 0 ) || start.pop() ) ) {
9355
9356									if ( ( ofType ?
9357										nodeName( node, name ) :
9358										node.nodeType === 1 ) &&
9359										++diff ) {
9360
9361										// Cache the index of each encountered element
9362										if ( useCache ) {
9363											outerCache = node[ expando ] ||
9364												( node[ expando ] = {} );
9365											outerCache[ type ] = [ dirruns, diff ];
9366										}
9367
9368										if ( node === elem ) {
9369											break;
9370										}
9371									}
9372								}
9373							}
9374						}
9375
9376						// Incorporate the offset, then check against cycle size
9377						diff -= last;
9378						return diff === first || ( diff % first === 0 && diff / first >= 0 );
9379					}
9380				};
9381		},
9382
9383		PSEUDO: function( pseudo, argument ) {
9384
9385			// pseudo-class names are case-insensitive
9386			// https://www.w3.org/TR/selectors/#pseudo-classes
9387			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
9388			// Remember that setFilters inherits from pseudos
9389			var args,
9390				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
9391					find.error( "unsupported pseudo: " + pseudo );
9392
9393			// The user may use createPseudo to indicate that
9394			// arguments are needed to create the filter function
9395			// just as jQuery does
9396			if ( fn[ expando ] ) {
9397				return fn( argument );
9398			}
9399
9400			// But maintain support for old signatures
9401			if ( fn.length > 1 ) {
9402				args = [ pseudo, pseudo, "", argument ];
9403				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
9404					markFunction( function( seed, matches ) {
9405						var idx,
9406							matched = fn( seed, argument ),
9407							i = matched.length;
9408						while ( i-- ) {
9409							idx = indexOf.call( seed, matched[ i ] );
9410							seed[ idx ] = !( matches[ idx ] = matched[ i ] );
9411						}
9412					} ) :
9413					function( elem ) {
9414						return fn( elem, 0, args );
9415					};
9416			}
9417
9418			return fn;
9419		}
9420	},
9421
9422	pseudos: {
9423
9424		// Potentially complex pseudos
9425		not: markFunction( function( selector ) {
9426
9427			// Trim the selector passed to compile
9428			// to avoid treating leading and trailing
9429			// spaces as combinators
9430			var input = [],
9431				results = [],
9432				matcher = compile( selector.replace( rtrimCSS, "$1" ) );
9433
9434			return matcher[ expando ] ?
9435				markFunction( function( seed, matches, _context, xml ) {
9436					var elem,
9437						unmatched = matcher( seed, null, xml, [] ),
9438						i = seed.length;
9439
9440					// Match elements unmatched by `matcher`
9441					while ( i-- ) {
9442						if ( ( elem = unmatched[ i ] ) ) {
9443							seed[ i ] = !( matches[ i ] = elem );
9444						}
9445					}
9446				} ) :
9447				function( elem, _context, xml ) {
9448					input[ 0 ] = elem;
9449					matcher( input, null, xml, results );
9450
9451					// Don't keep the element
9452					// (see https://github.com/jquery/sizzle/issues/299)
9453					input[ 0 ] = null;
9454					return !results.pop();
9455				};
9456		} ),
9457
9458		has: markFunction( function( selector ) {
9459			return function( elem ) {
9460				return find( selector, elem ).length > 0;
9461			};
9462		} ),
9463
9464		contains: markFunction( function( text ) {
9465			text = text.replace( runescape, funescape );
9466			return function( elem ) {
9467				return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;
9468			};
9469		} ),
9470
9471		// "Whether an element is represented by a :lang() selector
9472		// is based solely on the element's language value
9473		// being equal to the identifier C,
9474		// or beginning with the identifier C immediately followed by "-".
9475		// The matching of C against the element's language value is performed case-insensitively.
9476		// The identifier C does not have to be a valid language name."
9477		// https://www.w3.org/TR/selectors/#lang-pseudo
9478		lang: markFunction( function( lang ) {
9479
9480			// lang value must be a valid identifier
9481			if ( !ridentifier.test( lang || "" ) ) {
9482				find.error( "unsupported lang: " + lang );
9483			}
9484			lang = lang.replace( runescape, funescape ).toLowerCase();
9485			return function( elem ) {
9486				var elemLang;
9487				do {
9488					if ( ( elemLang = documentIsHTML ?
9489						elem.lang :
9490						elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) {
9491
9492						elemLang = elemLang.toLowerCase();
9493						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
9494					}
9495				} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );
9496				return false;
9497			};
9498		} ),
9499
9500		// Miscellaneous
9501		target: function( elem ) {
9502			var hash = window.location && window.location.hash;
9503			return hash && hash.slice( 1 ) === elem.id;
9504		},
9505
9506		root: function( elem ) {
9507			return elem === documentElement;
9508		},
9509
9510		focus: function( elem ) {
9511			return elem === safeActiveElement() &&
9512				document.hasFocus() &&
9513				!!( elem.type || elem.href || ~elem.tabIndex );
9514		},
9515
9516		// Boolean properties
9517		enabled: createDisabledPseudo( false ),
9518		disabled: createDisabledPseudo( true ),
9519
9520		checked: function( elem ) {
9521
9522			// In CSS3, :checked should return both checked and selected elements
9523			// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
9524			return ( nodeName( elem, "input" ) && !!elem.checked ) ||
9525				( nodeName( elem, "option" ) && !!elem.selected );
9526		},
9527
9528		selected: function( elem ) {
9529
9530			// Support: IE <=11+
9531			// Accessing the selectedIndex property
9532			// forces the browser to treat the default option as
9533			// selected when in an optgroup.
9534			if ( elem.parentNode ) {
9535				// eslint-disable-next-line no-unused-expressions
9536				elem.parentNode.selectedIndex;
9537			}
9538
9539			return elem.selected === true;
9540		},
9541
9542		// Contents
9543		empty: function( elem ) {
9544
9545			// https://www.w3.org/TR/selectors/#empty-pseudo
9546			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
9547			//   but not by others (comment: 8; processing instruction: 7; etc.)
9548			// nodeType < 6 works because attributes (2) do not appear as children
9549			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
9550				if ( elem.nodeType < 6 ) {
9551					return false;
9552				}
9553			}
9554			return true;
9555		},
9556
9557		parent: function( elem ) {
9558			return !Expr.pseudos.empty( elem );
9559		},
9560
9561		// Element/input types
9562		header: function( elem ) {
9563			return rheader.test( elem.nodeName );
9564		},
9565
9566		input: function( elem ) {
9567			return rinputs.test( elem.nodeName );
9568		},
9569
9570		button: function( elem ) {
9571			return nodeName( elem, "input" ) && elem.type === "button" ||
9572				nodeName( elem, "button" );
9573		},
9574
9575		text: function( elem ) {
9576			var attr;
9577			return nodeName( elem, "input" ) && elem.type === "text" &&
9578
9579				// Support: IE <10 only
9580				// New HTML5 attribute values (e.g., "search") appear
9581				// with elem.type === "text"
9582				( ( attr = elem.getAttribute( "type" ) ) == null ||
9583					attr.toLowerCase() === "text" );
9584		},
9585
9586		// Position-in-collection
9587		first: createPositionalPseudo( function() {
9588			return [ 0 ];
9589		} ),
9590
9591		last: createPositionalPseudo( function( _matchIndexes, length ) {
9592			return [ length - 1 ];
9593		} ),
9594
9595		eq: createPositionalPseudo( function( _matchIndexes, length, argument ) {
9596			return [ argument < 0 ? argument + length : argument ];
9597		} ),
9598
9599		even: createPositionalPseudo( function( matchIndexes, length ) {
9600			var i = 0;
9601			for ( ; i < length; i += 2 ) {
9602				matchIndexes.push( i );
9603			}
9604			return matchIndexes;
9605		} ),
9606
9607		odd: createPositionalPseudo( function( matchIndexes, length ) {
9608			var i = 1;
9609			for ( ; i < length; i += 2 ) {
9610				matchIndexes.push( i );
9611			}
9612			return matchIndexes;
9613		} ),
9614
9615		lt: createPositionalPseudo( function( matchIndexes, length, argument ) {
9616			var i;
9617
9618			if ( argument < 0 ) {
9619				i = argument + length;
9620			} else if ( argument > length ) {
9621				i = length;
9622			} else {
9623				i = argument;
9624			}
9625
9626			for ( ; --i >= 0; ) {
9627				matchIndexes.push( i );
9628			}
9629			return matchIndexes;
9630		} ),
9631
9632		gt: createPositionalPseudo( function( matchIndexes, length, argument ) {
9633			var i = argument < 0 ? argument + length : argument;
9634			for ( ; ++i < length; ) {
9635				matchIndexes.push( i );
9636			}
9637			return matchIndexes;
9638		} )
9639	}
9640};
9641
9642Expr.pseudos.nth = Expr.pseudos.eq;
9643
9644// Add button/input type pseudos
9645for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
9646	Expr.pseudos[ i ] = createInputPseudo( i );
9647}
9648for ( i in { submit: true, reset: true } ) {
9649	Expr.pseudos[ i ] = createButtonPseudo( i );
9650}
9651
9652// Easy API for creating new setFilters
9653function setFilters() {}
9654setFilters.prototype = Expr.filters = Expr.pseudos;
9655Expr.setFilters = new setFilters();
9656
9657function tokenize( selector, parseOnly ) {
9658	var matched, match, tokens, type,
9659		soFar, groups, preFilters,
9660		cached = tokenCache[ selector + " " ];
9661
9662	if ( cached ) {
9663		return parseOnly ? 0 : cached.slice( 0 );
9664	}
9665
9666	soFar = selector;
9667	groups = [];
9668	preFilters = Expr.preFilter;
9669
9670	while ( soFar ) {
9671
9672		// Comma and first run
9673		if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
9674			if ( match ) {
9675
9676				// Don't consume trailing commas as valid
9677				soFar = soFar.slice( match[ 0 ].length ) || soFar;
9678			}
9679			groups.push( ( tokens = [] ) );
9680		}
9681
9682		matched = false;
9683
9684		// Combinators
9685		if ( ( match = rleadingCombinator.exec( soFar ) ) ) {
9686			matched = match.shift();
9687			tokens.push( {
9688				value: matched,
9689
9690				// Cast descendant combinators to space
9691				type: match[ 0 ].replace( rtrimCSS, " " )
9692			} );
9693			soFar = soFar.slice( matched.length );
9694		}
9695
9696		// Filters
9697		for ( type in Expr.filter ) {
9698			if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||
9699				( match = preFilters[ type ]( match ) ) ) ) {
9700				matched = match.shift();
9701				tokens.push( {
9702					value: matched,
9703					type: type,
9704					matches: match
9705				} );
9706				soFar = soFar.slice( matched.length );
9707			}
9708		}
9709
9710		if ( !matched ) {
9711			break;
9712		}
9713	}
9714
9715	// Return the length of the invalid excess
9716	// if we're just parsing
9717	// Otherwise, throw an error or return tokens
9718	if ( parseOnly ) {
9719		return soFar.length;
9720	}
9721
9722	return soFar ?
9723		find.error( selector ) :
9724
9725		// Cache the tokens
9726		tokenCache( selector, groups ).slice( 0 );
9727}
9728
9729function toSelector( tokens ) {
9730	var i = 0,
9731		len = tokens.length,
9732		selector = "";
9733	for ( ; i < len; i++ ) {
9734		selector += tokens[ i ].value;
9735	}
9736	return selector;
9737}
9738
9739function addCombinator( matcher, combinator, base ) {
9740	var dir = combinator.dir,
9741		skip = combinator.next,
9742		key = skip || dir,
9743		checkNonElements = base && key === "parentNode",
9744		doneName = done++;
9745
9746	return combinator.first ?
9747
9748		// Check against closest ancestor/preceding element
9749		function( elem, context, xml ) {
9750			while ( ( elem = elem[ dir ] ) ) {
9751				if ( elem.nodeType === 1 || checkNonElements ) {
9752					return matcher( elem, context, xml );
9753				}
9754			}
9755			return false;
9756		} :
9757
9758		// Check against all ancestor/preceding elements
9759		function( elem, context, xml ) {
9760			var oldCache, outerCache,
9761				newCache = [ dirruns, doneName ];
9762
9763			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
9764			if ( xml ) {
9765				while ( ( elem = elem[ dir ] ) ) {
9766					if ( elem.nodeType === 1 || checkNonElements ) {
9767						if ( matcher( elem, context, xml ) ) {
9768							return true;
9769						}
9770					}
9771				}
9772			} else {
9773				while ( ( elem = elem[ dir ] ) ) {
9774					if ( elem.nodeType === 1 || checkNonElements ) {
9775						outerCache = elem[ expando ] || ( elem[ expando ] = {} );
9776
9777						if ( skip && nodeName( elem, skip ) ) {
9778							elem = elem[ dir ] || elem;
9779						} else if ( ( oldCache = outerCache[ key ] ) &&
9780							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
9781
9782							// Assign to newCache so results back-propagate to previous elements
9783							return ( newCache[ 2 ] = oldCache[ 2 ] );
9784						} else {
9785
9786							// Reuse newcache so results back-propagate to previous elements
9787							outerCache[ key ] = newCache;
9788
9789							// A match means we're done; a fail means we have to keep checking
9790							if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
9791								return true;
9792							}
9793						}
9794					}
9795				}
9796			}
9797			return false;
9798		};
9799}
9800
9801function elementMatcher( matchers ) {
9802	return matchers.length > 1 ?
9803		function( elem, context, xml ) {
9804			var i = matchers.length;
9805			while ( i-- ) {
9806				if ( !matchers[ i ]( elem, context, xml ) ) {
9807					return false;
9808				}
9809			}
9810			return true;
9811		} :
9812		matchers[ 0 ];
9813}
9814
9815function multipleContexts( selector, contexts, results ) {
9816	var i = 0,
9817		len = contexts.length;
9818	for ( ; i < len; i++ ) {
9819		find( selector, contexts[ i ], results );
9820	}
9821	return results;
9822}
9823
9824function condense( unmatched, map, filter, context, xml ) {
9825	var elem,
9826		newUnmatched = [],
9827		i = 0,
9828		len = unmatched.length,
9829		mapped = map != null;
9830
9831	for ( ; i < len; i++ ) {
9832		if ( ( elem = unmatched[ i ] ) ) {
9833			if ( !filter || filter( elem, context, xml ) ) {
9834				newUnmatched.push( elem );
9835				if ( mapped ) {
9836					map.push( i );
9837				}
9838			}
9839		}
9840	}
9841
9842	return newUnmatched;
9843}
9844
9845function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
9846	if ( postFilter && !postFilter[ expando ] ) {
9847		postFilter = setMatcher( postFilter );
9848	}
9849	if ( postFinder && !postFinder[ expando ] ) {
9850		postFinder = setMatcher( postFinder, postSelector );
9851	}
9852	return markFunction( function( seed, results, context, xml ) {
9853		var temp, i, elem, matcherOut,
9854			preMap = [],
9855			postMap = [],
9856			preexisting = results.length,
9857
9858			// Get initial elements from seed or context
9859			elems = seed ||
9860				multipleContexts( selector || "*",
9861					context.nodeType ? [ context ] : context, [] ),
9862
9863			// Prefilter to get matcher input, preserving a map for seed-results synchronization
9864			matcherIn = preFilter && ( seed || !selector ) ?
9865				condense( elems, preMap, preFilter, context, xml ) :
9866				elems;
9867
9868		if ( matcher ) {
9869
9870			// If we have a postFinder, or filtered seed, or non-seed postFilter
9871			// or preexisting results,
9872			matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
9873
9874				// ...intermediate processing is necessary
9875				[] :
9876
9877				// ...otherwise use results directly
9878				results;
9879
9880			// Find primary matches
9881			matcher( matcherIn, matcherOut, context, xml );
9882		} else {
9883			matcherOut = matcherIn;
9884		}
9885
9886		// Apply postFilter
9887		if ( postFilter ) {
9888			temp = condense( matcherOut, postMap );
9889			postFilter( temp, [], context, xml );
9890
9891			// Un-match failing elements by moving them back to matcherIn
9892			i = temp.length;
9893			while ( i-- ) {
9894				if ( ( elem = temp[ i ] ) ) {
9895					matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );
9896				}
9897			}
9898		}
9899
9900		if ( seed ) {
9901			if ( postFinder || preFilter ) {
9902				if ( postFinder ) {
9903
9904					// Get the final matcherOut by condensing this intermediate into postFinder contexts
9905					temp = [];
9906					i = matcherOut.length;
9907					while ( i-- ) {
9908						if ( ( elem = matcherOut[ i ] ) ) {
9909
9910							// Restore matcherIn since elem is not yet a final match
9911							temp.push( ( matcherIn[ i ] = elem ) );
9912						}
9913					}
9914					postFinder( null, ( matcherOut = [] ), temp, xml );
9915				}
9916
9917				// Move matched elements from seed to results to keep them synchronized
9918				i = matcherOut.length;
9919				while ( i-- ) {
9920					if ( ( elem = matcherOut[ i ] ) &&
9921						( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {
9922
9923						seed[ temp ] = !( results[ temp ] = elem );
9924					}
9925				}
9926			}
9927
9928		// Add elements to results, through postFinder if defined
9929		} else {
9930			matcherOut = condense(
9931				matcherOut === results ?
9932					matcherOut.splice( preexisting, matcherOut.length ) :
9933					matcherOut
9934			);
9935			if ( postFinder ) {
9936				postFinder( null, results, matcherOut, xml );
9937			} else {
9938				push.apply( results, matcherOut );
9939			}
9940		}
9941	} );
9942}
9943
9944function matcherFromTokens( tokens ) {
9945	var checkContext, matcher, j,
9946		len = tokens.length,
9947		leadingRelative = Expr.relative[ tokens[ 0 ].type ],
9948		implicitRelative = leadingRelative || Expr.relative[ " " ],
9949		i = leadingRelative ? 1 : 0,
9950
9951		// The foundational matcher ensures that elements are reachable from top-level context(s)
9952		matchContext = addCombinator( function( elem ) {
9953			return elem === checkContext;
9954		}, implicitRelative, true ),
9955		matchAnyContext = addCombinator( function( elem ) {
9956			return indexOf.call( checkContext, elem ) > -1;
9957		}, implicitRelative, true ),
9958		matchers = [ function( elem, context, xml ) {
9959
9960			// Support: IE 11+, Edge 17 - 18+
9961			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
9962			// two documents; shallow comparisons work.
9963			// eslint-disable-next-line eqeqeq
9964			var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (
9965				( checkContext = context ).nodeType ?
9966					matchContext( elem, context, xml ) :
9967					matchAnyContext( elem, context, xml ) );
9968
9969			// Avoid hanging onto element
9970			// (see https://github.com/jquery/sizzle/issues/299)
9971			checkContext = null;
9972			return ret;
9973		} ];
9974
9975	for ( ; i < len; i++ ) {
9976		if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {
9977			matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
9978		} else {
9979			matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );
9980
9981			// Return special upon seeing a positional matcher
9982			if ( matcher[ expando ] ) {
9983
9984				// Find the next relative operator (if any) for proper handling
9985				j = ++i;
9986				for ( ; j < len; j++ ) {
9987					if ( Expr.relative[ tokens[ j ].type ] ) {
9988						break;
9989					}
9990				}
9991				return setMatcher(
9992					i > 1 && elementMatcher( matchers ),
9993					i > 1 && toSelector(
9994
9995						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
9996						tokens.slice( 0, i - 1 )
9997							.concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
9998					).replace( rtrimCSS, "$1" ),
9999					matcher,
10000					i < j && matcherFromTokens( tokens.slice( i, j ) ),
10001					j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
10002					j < len && toSelector( tokens )
10003				);
10004			}
10005			matchers.push( matcher );
10006		}
10007	}
10008
10009	return elementMatcher( matchers );
10010}
10011
10012function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
10013	var bySet = setMatchers.length > 0,
10014		byElement = elementMatchers.length > 0,
10015		superMatcher = function( seed, context, xml, results, outermost ) {
10016			var elem, j, matcher,
10017				matchedCount = 0,
10018				i = "0",
10019				unmatched = seed && [],
10020				setMatched = [],
10021				contextBackup = outermostContext,
10022
10023				// We must always have either seed elements or outermost context
10024				elems = seed || byElement && Expr.find.TAG( "*", outermost ),
10025
10026				// Use integer dirruns iff this is the outermost matcher
10027				dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
10028				len = elems.length;
10029
10030			if ( outermost ) {
10031
10032				// Support: IE 11+, Edge 17 - 18+
10033				// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
10034				// two documents; shallow comparisons work.
10035				// eslint-disable-next-line eqeqeq
10036				outermostContext = context == document || context || outermost;
10037			}
10038
10039			// Add elements passing elementMatchers directly to results
10040			// Support: iOS <=7 - 9 only
10041			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching
10042			// elements by id. (see trac-14142)
10043			for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
10044				if ( byElement && elem ) {
10045					j = 0;
10046
10047					// Support: IE 11+, Edge 17 - 18+
10048					// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
10049					// two documents; shallow comparisons work.
10050					// eslint-disable-next-line eqeqeq
10051					if ( !context && elem.ownerDocument != document ) {
10052						setDocument( elem );
10053						xml = !documentIsHTML;
10054					}
10055					while ( ( matcher = elementMatchers[ j++ ] ) ) {
10056						if ( matcher( elem, context || document, xml ) ) {
10057							push.call( results, elem );
10058							break;
10059						}
10060					}
10061					if ( outermost ) {
10062						dirruns = dirrunsUnique;
10063					}
10064				}
10065
10066				// Track unmatched elements for set filters
10067				if ( bySet ) {
10068
10069					// They will have gone through all possible matchers
10070					if ( ( elem = !matcher && elem ) ) {
10071						matchedCount--;
10072					}
10073
10074					// Lengthen the array for every element, matched or not
10075					if ( seed ) {
10076						unmatched.push( elem );
10077					}
10078				}
10079			}
10080
10081			// `i` is now the count of elements visited above, and adding it to `matchedCount`
10082			// makes the latter nonnegative.
10083			matchedCount += i;
10084
10085			// Apply set filters to unmatched elements
10086			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
10087			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
10088			// no element matchers and no seed.
10089			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
10090			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
10091			// numerically zero.
10092			if ( bySet && i !== matchedCount ) {
10093				j = 0;
10094				while ( ( matcher = setMatchers[ j++ ] ) ) {
10095					matcher( unmatched, setMatched, context, xml );
10096				}
10097
10098				if ( seed ) {
10099
10100					// Reintegrate element matches to eliminate the need for sorting
10101					if ( matchedCount > 0 ) {
10102						while ( i-- ) {
10103							if ( !( unmatched[ i ] || setMatched[ i ] ) ) {
10104								setMatched[ i ] = pop.call( results );
10105							}
10106						}
10107					}
10108
10109					// Discard index placeholder values to get only actual matches
10110					setMatched = condense( setMatched );
10111				}
10112
10113				// Add matches to results
10114				push.apply( results, setMatched );
10115
10116				// Seedless set matches succeeding multiple successful matchers stipulate sorting
10117				if ( outermost && !seed && setMatched.length > 0 &&
10118					( matchedCount + setMatchers.length ) > 1 ) {
10119
10120					jQuery.uniqueSort( results );
10121				}
10122			}
10123
10124			// Override manipulation of globals by nested matchers
10125			if ( outermost ) {
10126				dirruns = dirrunsUnique;
10127				outermostContext = contextBackup;
10128			}
10129
10130			return unmatched;
10131		};
10132
10133	return bySet ?
10134		markFunction( superMatcher ) :
10135		superMatcher;
10136}
10137
10138function compile( selector, match /* Internal Use Only */ ) {
10139	var i,
10140		setMatchers = [],
10141		elementMatchers = [],
10142		cached = compilerCache[ selector + " " ];
10143
10144	if ( !cached ) {
10145
10146		// Generate a function of recursive functions that can be used to check each element
10147		if ( !match ) {
10148			match = tokenize( selector );
10149		}
10150		i = match.length;
10151		while ( i-- ) {
10152			cached = matcherFromTokens( match[ i ] );
10153			if ( cached[ expando ] ) {
10154				setMatchers.push( cached );
10155			} else {
10156				elementMatchers.push( cached );
10157			}
10158		}
10159
10160		// Cache the compiled function
10161		cached = compilerCache( selector,
10162			matcherFromGroupMatchers( elementMatchers, setMatchers ) );
10163
10164		// Save selector and tokenization
10165		cached.selector = selector;
10166	}
10167	return cached;
10168}
10169
10170/**
10171 * A low-level selection function that works with jQuery's compiled
10172 *  selector functions
10173 * @param {String|Function} selector A selector or a pre-compiled
10174 *  selector function built with jQuery selector compile
10175 * @param {Element} context
10176 * @param {Array} [results]
10177 * @param {Array} [seed] A set of elements to match against
10178 */
10179function select( selector, context, results, seed ) {
10180	var i, tokens, token, type, find,
10181		compiled = typeof selector === "function" && selector,
10182		match = !seed && tokenize( ( selector = compiled.selector || selector ) );
10183
10184	results = results || [];
10185
10186	// Try to minimize operations if there is only one selector in the list and no seed
10187	// (the latter of which guarantees us context)
10188	if ( match.length === 1 ) {
10189
10190		// Reduce context if the leading compound selector is an ID
10191		tokens = match[ 0 ] = match[ 0 ].slice( 0 );
10192		if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
10193				context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
10194
10195			context = ( Expr.find.ID(
10196				token.matches[ 0 ].replace( runescape, funescape ),
10197				context
10198			) || [] )[ 0 ];
10199			if ( !context ) {
10200				return results;
10201
10202			// Precompiled matchers will still verify ancestry, so step up a level
10203			} else if ( compiled ) {
10204				context = context.parentNode;
10205			}
10206
10207			selector = selector.slice( tokens.shift().value.length );
10208		}
10209
10210		// Fetch a seed set for right-to-left matching
10211		i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;
10212		while ( i-- ) {
10213			token = tokens[ i ];
10214
10215			// Abort if we hit a combinator
10216			if ( Expr.relative[ ( type = token.type ) ] ) {
10217				break;
10218			}
10219			if ( ( find = Expr.find[ type ] ) ) {
10220
10221				// Search, expanding context for leading sibling combinators
10222				if ( ( seed = find(
10223					token.matches[ 0 ].replace( runescape, funescape ),
10224					rsibling.test( tokens[ 0 ].type ) &&
10225						testContext( context.parentNode ) || context
10226				) ) ) {
10227
10228					// If seed is empty or no tokens remain, we can return early
10229					tokens.splice( i, 1 );
10230					selector = seed.length && toSelector( tokens );
10231					if ( !selector ) {
10232						push.apply( results, seed );
10233						return results;
10234					}
10235
10236					break;
10237				}
10238			}
10239		}
10240	}
10241
10242	// Compile and execute a filtering function if one is not provided
10243	// Provide `match` to avoid retokenization if we modified the selector above
10244	( compiled || compile( selector, match ) )(
10245		seed,
10246		context,
10247		!documentIsHTML,
10248		results,
10249		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
10250	);
10251	return results;
10252}
10253
10254// One-time assignments
10255
10256// Support: Android <=4.0 - 4.1+
10257// Sort stability
10258support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;
10259
10260// Initialize against the default document
10261setDocument();
10262
10263// Support: Android <=4.0 - 4.1+
10264// Detached nodes confoundingly follow *each other*
10265support.sortDetached = assert( function( el ) {
10266
10267	// Should return 1, but returns 4 (following)
10268	return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
10269} );
10270
10271jQuery.find = find;
10272
10273// Deprecated
10274jQuery.expr[ ":" ] = jQuery.expr.pseudos;
10275jQuery.unique = jQuery.uniqueSort;
10276
10277// These have always been private, but they used to be documented as part of
10278// Sizzle so let's maintain them for now for backwards compatibility purposes.
10279find.compile = compile;
10280find.select = select;
10281find.setDocument = setDocument;
10282find.tokenize = tokenize;
10283
10284find.escape = jQuery.escapeSelector;
10285find.getText = jQuery.text;
10286find.isXML = jQuery.isXMLDoc;
10287find.selectors = jQuery.expr;
10288find.support = jQuery.support;
10289find.uniqueSort = jQuery.uniqueSort;
10290
10291	/* eslint-enable */
10292
10293} )();
10294
10295
10296var dir = function( elem, dir, until ) {
10297	var matched = [],
10298		truncate = until !== undefined;
10299
10300	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
10301		if ( elem.nodeType === 1 ) {
10302			if ( truncate && jQuery( elem ).is( until ) ) {
10303				break;
10304			}
10305			matched.push( elem );
10306		}
10307	}
10308	return matched;
10309};
10310
10311
10312var siblings = function( n, elem ) {
10313	var matched = [];
10314
10315	for ( ; n; n = n.nextSibling ) {
10316		if ( n.nodeType === 1 && n !== elem ) {
10317			matched.push( n );
10318		}
10319	}
10320
10321	return matched;
10322};
10323
10324
10325var rneedsContext = jQuery.expr.match.needsContext;
10326
10327var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
10328
10329
10330
10331// Implement the identical functionality for filter and not
10332function winnow( elements, qualifier, not ) {
10333	if ( isFunction( qualifier ) ) {
10334		return jQuery.grep( elements, function( elem, i ) {
10335			return !!qualifier.call( elem, i, elem ) !== not;
10336		} );
10337	}
10338
10339	// Single element
10340	if ( qualifier.nodeType ) {
10341		return jQuery.grep( elements, function( elem ) {
10342			return ( elem === qualifier ) !== not;
10343		} );
10344	}
10345
10346	// Arraylike of elements (jQuery, arguments, Array)
10347	if ( typeof qualifier !== "string" ) {
10348		return jQuery.grep( elements, function( elem ) {
10349			return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
10350		} );
10351	}
10352
10353	// Filtered directly for both simple and complex selectors
10354	return jQuery.filter( qualifier, elements, not );
10355}
10356
10357jQuery.filter = function( expr, elems, not ) {
10358	var elem = elems[ 0 ];
10359
10360	if ( not ) {
10361		expr = ":not(" + expr + ")";
10362	}
10363
10364	if ( elems.length === 1 && elem.nodeType === 1 ) {
10365		return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
10366	}
10367
10368	return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
10369		return elem.nodeType === 1;
10370	} ) );
10371};
10372
10373jQuery.fn.extend( {
10374	find: function( selector ) {
10375		var i, ret,
10376			len = this.length,
10377			self = this;
10378
10379		if ( typeof selector !== "string" ) {
10380			return this.pushStack( jQuery( selector ).filter( function() {
10381				for ( i = 0; i < len; i++ ) {
10382					if ( jQuery.contains( self[ i ], this ) ) {
10383						return true;
10384					}
10385				}
10386			} ) );
10387		}
10388
10389		ret = this.pushStack( [] );
10390
10391		for ( i = 0; i < len; i++ ) {
10392			jQuery.find( selector, self[ i ], ret );
10393		}
10394
10395		return len > 1 ? jQuery.uniqueSort( ret ) : ret;
10396	},
10397	filter: function( selector ) {
10398		return this.pushStack( winnow( this, selector || [], false ) );
10399	},
10400	not: function( selector ) {
10401		return this.pushStack( winnow( this, selector || [], true ) );
10402	},
10403	is: function( selector ) {
10404		return !!winnow(
10405			this,
10406
10407			// If this is a positional/relative selector, check membership in the returned set
10408			// so $("p:first").is("p:last") won't return true for a doc with two "p".
10409			typeof selector === "string" && rneedsContext.test( selector ) ?
10410				jQuery( selector ) :
10411				selector || [],
10412			false
10413		).length;
10414	}
10415} );
10416
10417
10418// Initialize a jQuery object
10419
10420
10421// A central reference to the root jQuery(document)
10422var rootjQuery,
10423
10424	// A simple way to check for HTML strings
10425	// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)
10426	// Strict HTML recognition (trac-11290: must start with <)
10427	// Shortcut simple #id case for speed
10428	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
10429
10430	init = jQuery.fn.init = function( selector, context, root ) {
10431		var match, elem;
10432
10433		// HANDLE: $(""), $(null), $(undefined), $(false)
10434		if ( !selector ) {
10435			return this;
10436		}
10437
10438		// Method init() accepts an alternate rootjQuery
10439		// so migrate can support jQuery.sub (gh-2101)
10440		root = root || rootjQuery;
10441
10442		// Handle HTML strings
10443		if ( typeof selector === "string" ) {
10444			if ( selector[ 0 ] === "<" &&
10445				selector[ selector.length - 1 ] === ">" &&
10446				selector.length >= 3 ) {
10447
10448				// Assume that strings that start and end with <> are HTML and skip the regex check
10449				match = [ null, selector, null ];
10450
10451			} else {
10452				match = rquickExpr.exec( selector );
10453			}
10454
10455			// Match html or make sure no context is specified for #id
10456			if ( match && ( match[ 1 ] || !context ) ) {
10457
10458				// HANDLE: $(html) -> $(array)
10459				if ( match[ 1 ] ) {
10460					context = context instanceof jQuery ? context[ 0 ] : context;
10461
10462					// Option to run scripts is true for back-compat
10463					// Intentionally let the error be thrown if parseHTML is not present
10464					jQuery.merge( this, jQuery.parseHTML(
10465						match[ 1 ],
10466						context && context.nodeType ? context.ownerDocument || context : document,
10467						true
10468					) );
10469
10470					// HANDLE: $(html, props)
10471					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
10472						for ( match in context ) {
10473
10474							// Properties of context are called as methods if possible
10475							if ( isFunction( this[ match ] ) ) {
10476								this[ match ]( context[ match ] );
10477
10478							// ...and otherwise set as attributes
10479							} else {
10480								this.attr( match, context[ match ] );
10481							}
10482						}
10483					}
10484
10485					return this;
10486
10487				// HANDLE: $(#id)
10488				} else {
10489					elem = document.getElementById( match[ 2 ] );
10490
10491					if ( elem ) {
10492
10493						// Inject the element directly into the jQuery object
10494						this[ 0 ] = elem;
10495						this.length = 1;
10496					}
10497					return this;
10498				}
10499
10500			// HANDLE: $(expr, $(...))
10501			} else if ( !context || context.jquery ) {
10502				return ( context || root ).find( selector );
10503
10504			// HANDLE: $(expr, context)
10505			// (which is just equivalent to: $(context).find(expr)
10506			} else {
10507				return this.constructor( context ).find( selector );
10508			}
10509
10510		// HANDLE: $(DOMElement)
10511		} else if ( selector.nodeType ) {
10512			this[ 0 ] = selector;
10513			this.length = 1;
10514			return this;
10515
10516		// HANDLE: $(function)
10517		// Shortcut for document ready
10518		} else if ( isFunction( selector ) ) {
10519			return root.ready !== undefined ?
10520				root.ready( selector ) :
10521
10522				// Execute immediately if ready is not present
10523				selector( jQuery );
10524		}
10525
10526		return jQuery.makeArray( selector, this );
10527	};
10528
10529// Give the init function the jQuery prototype for later instantiation
10530init.prototype = jQuery.fn;
10531
10532// Initialize central reference
10533rootjQuery = jQuery( document );
10534
10535
10536var rparentsprev = /^(?:parents|prev(?:Until|All))/,
10537
10538	// Methods guaranteed to produce a unique set when starting from a unique set
10539	guaranteedUnique = {
10540		children: true,
10541		contents: true,
10542		next: true,
10543		prev: true
10544	};
10545
10546jQuery.fn.extend( {
10547	has: function( target ) {
10548		var targets = jQuery( target, this ),
10549			l = targets.length;
10550
10551		return this.filter( function() {
10552			var i = 0;
10553			for ( ; i < l; i++ ) {
10554				if ( jQuery.contains( this, targets[ i ] ) ) {
10555					return true;
10556				}
10557			}
10558		} );
10559	},
10560
10561	closest: function( selectors, context ) {
10562		var cur,
10563			i = 0,
10564			l = this.length,
10565			matched = [],
10566			targets = typeof selectors !== "string" && jQuery( selectors );
10567
10568		// Positional selectors never match, since there's no _selection_ context
10569		if ( !rneedsContext.test( selectors ) ) {
10570			for ( ; i < l; i++ ) {
10571				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
10572
10573					// Always skip document fragments
10574					if ( cur.nodeType < 11 && ( targets ?
10575						targets.index( cur ) > -1 :
10576
10577						// Don't pass non-elements to jQuery#find
10578						cur.nodeType === 1 &&
10579							jQuery.find.matchesSelector( cur, selectors ) ) ) {
10580
10581						matched.push( cur );
10582						break;
10583					}
10584				}
10585			}
10586		}
10587
10588		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
10589	},
10590
10591	// Determine the position of an element within the set
10592	index: function( elem ) {
10593
10594		// No argument, return index in parent
10595		if ( !elem ) {
10596			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
10597		}
10598
10599		// Index in selector
10600		if ( typeof elem === "string" ) {
10601			return indexOf.call( jQuery( elem ), this[ 0 ] );
10602		}
10603
10604		// Locate the position of the desired element
10605		return indexOf.call( this,
10606
10607			// If it receives a jQuery object, the first element is used
10608			elem.jquery ? elem[ 0 ] : elem
10609		);
10610	},
10611
10612	add: function( selector, context ) {
10613		return this.pushStack(
10614			jQuery.uniqueSort(
10615				jQuery.merge( this.get(), jQuery( selector, context ) )
10616			)
10617		);
10618	},
10619
10620	addBack: function( selector ) {
10621		return this.add( selector == null ?
10622			this.prevObject : this.prevObject.filter( selector )
10623		);
10624	}
10625} );
10626
10627function sibling( cur, dir ) {
10628	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
10629	return cur;
10630}
10631
10632jQuery.each( {
10633	parent: function( elem ) {
10634		var parent = elem.parentNode;
10635		return parent && parent.nodeType !== 11 ? parent : null;
10636	},
10637	parents: function( elem ) {
10638		return dir( elem, "parentNode" );
10639	},
10640	parentsUntil: function( elem, _i, until ) {
10641		return dir( elem, "parentNode", until );
10642	},
10643	next: function( elem ) {
10644		return sibling( elem, "nextSibling" );
10645	},
10646	prev: function( elem ) {
10647		return sibling( elem, "previousSibling" );
10648	},
10649	nextAll: function( elem ) {
10650		return dir( elem, "nextSibling" );
10651	},
10652	prevAll: function( elem ) {
10653		return dir( elem, "previousSibling" );
10654	},
10655	nextUntil: function( elem, _i, until ) {
10656		return dir( elem, "nextSibling", until );
10657	},
10658	prevUntil: function( elem, _i, until ) {
10659		return dir( elem, "previousSibling", until );
10660	},
10661	siblings: function( elem ) {
10662		return siblings( ( elem.parentNode || {} ).firstChild, elem );
10663	},
10664	children: function( elem ) {
10665		return siblings( elem.firstChild );
10666	},
10667	contents: function( elem ) {
10668		if ( elem.contentDocument != null &&
10669
10670			// Support: IE 11+
10671			// <object> elements with no `data` attribute has an object
10672			// `contentDocument` with a `null` prototype.
10673			getProto( elem.contentDocument ) ) {
10674
10675			return elem.contentDocument;
10676		}
10677
10678		// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
10679		// Treat the template element as a regular one in browsers that
10680		// don't support it.
10681		if ( nodeName( elem, "template" ) ) {
10682			elem = elem.content || elem;
10683		}
10684
10685		return jQuery.merge( [], elem.childNodes );
10686	}
10687}, function( name, fn ) {
10688	jQuery.fn[ name ] = function( until, selector ) {
10689		var matched = jQuery.map( this, fn, until );
10690
10691		if ( name.slice( -5 ) !== "Until" ) {
10692			selector = until;
10693		}
10694
10695		if ( selector && typeof selector === "string" ) {
10696			matched = jQuery.filter( selector, matched );
10697		}
10698
10699		if ( this.length > 1 ) {
10700
10701			// Remove duplicates
10702			if ( !guaranteedUnique[ name ] ) {
10703				jQuery.uniqueSort( matched );
10704			}
10705
10706			// Reverse order for parents* and prev-derivatives
10707			if ( rparentsprev.test( name ) ) {
10708				matched.reverse();
10709			}
10710		}
10711
10712		return this.pushStack( matched );
10713	};
10714} );
10715var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
10716
10717
10718
10719// Convert String-formatted options into Object-formatted ones
10720function createOptions( options ) {
10721	var object = {};
10722	jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
10723		object[ flag ] = true;
10724	} );
10725	return object;
10726}
10727
10728/*
10729 * Create a callback list using the following parameters:
10730 *
10731 *	options: an optional list of space-separated options that will change how
10732 *			the callback list behaves or a more traditional option object
10733 *
10734 * By default a callback list will act like an event callback list and can be
10735 * "fired" multiple times.
10736 *
10737 * Possible options:
10738 *
10739 *	once:			will ensure the callback list can only be fired once (like a Deferred)
10740 *
10741 *	memory:			will keep track of previous values and will call any callback added
10742 *					after the list has been fired right away with the latest "memorized"
10743 *					values (like a Deferred)
10744 *
10745 *	unique:			will ensure a callback can only be added once (no duplicate in the list)
10746 *
10747 *	stopOnFalse:	interrupt callings when a callback returns false
10748 *
10749 */
10750jQuery.Callbacks = function( options ) {
10751
10752	// Convert options from String-formatted to Object-formatted if needed
10753	// (we check in cache first)
10754	options = typeof options === "string" ?
10755		createOptions( options ) :
10756		jQuery.extend( {}, options );
10757
10758	var // Flag to know if list is currently firing
10759		firing,
10760
10761		// Last fire value for non-forgettable lists
10762		memory,
10763
10764		// Flag to know if list was already fired
10765		fired,
10766
10767		// Flag to prevent firing
10768		locked,
10769
10770		// Actual callback list
10771		list = [],
10772
10773		// Queue of execution data for repeatable lists
10774		queue = [],
10775
10776		// Index of currently firing callback (modified by add/remove as needed)
10777		firingIndex = -1,
10778
10779		// Fire callbacks
10780		fire = function() {
10781
10782			// Enforce single-firing
10783			locked = locked || options.once;
10784
10785			// Execute callbacks for all pending executions,
10786			// respecting firingIndex overrides and runtime changes
10787			fired = firing = true;
10788			for ( ; queue.length; firingIndex = -1 ) {
10789				memory = queue.shift();
10790				while ( ++firingIndex < list.length ) {
10791
10792					// Run callback and check for early termination
10793					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
10794						options.stopOnFalse ) {
10795
10796						// Jump to end and forget the data so .add doesn't re-fire
10797						firingIndex = list.length;
10798						memory = false;
10799					}
10800				}
10801			}
10802
10803			// Forget the data if we're done with it
10804			if ( !options.memory ) {
10805				memory = false;
10806			}
10807
10808			firing = false;
10809
10810			// Clean up if we're done firing for good
10811			if ( locked ) {
10812
10813				// Keep an empty list if we have data for future add calls
10814				if ( memory ) {
10815					list = [];
10816
10817				// Otherwise, this object is spent
10818				} else {
10819					list = "";
10820				}
10821			}
10822		},
10823
10824		// Actual Callbacks object
10825		self = {
10826
10827			// Add a callback or a collection of callbacks to the list
10828			add: function() {
10829				if ( list ) {
10830
10831					// If we have memory from a past run, we should fire after adding
10832					if ( memory && !firing ) {
10833						firingIndex = list.length - 1;
10834						queue.push( memory );
10835					}
10836
10837					( function add( args ) {
10838						jQuery.each( args, function( _, arg ) {
10839							if ( isFunction( arg ) ) {
10840								if ( !options.unique || !self.has( arg ) ) {
10841									list.push( arg );
10842								}
10843							} else if ( arg && arg.length && toType( arg ) !== "string" ) {
10844
10845								// Inspect recursively
10846								add( arg );
10847							}
10848						} );
10849					} )( arguments );
10850
10851					if ( memory && !firing ) {
10852						fire();
10853					}
10854				}
10855				return this;
10856			},
10857
10858			// Remove a callback from the list
10859			remove: function() {
10860				jQuery.each( arguments, function( _, arg ) {
10861					var index;
10862					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
10863						list.splice( index, 1 );
10864
10865						// Handle firing indexes
10866						if ( index <= firingIndex ) {
10867							firingIndex--;
10868						}
10869					}
10870				} );
10871				return this;
10872			},
10873
10874			// Check if a given callback is in the list.
10875			// If no argument is given, return whether or not list has callbacks attached.
10876			has: function( fn ) {
10877				return fn ?
10878					jQuery.inArray( fn, list ) > -1 :
10879					list.length > 0;
10880			},
10881
10882			// Remove all callbacks from the list
10883			empty: function() {
10884				if ( list ) {
10885					list = [];
10886				}
10887				return this;
10888			},
10889
10890			// Disable .fire and .add
10891			// Abort any current/pending executions
10892			// Clear all callbacks and values
10893			disable: function() {
10894				locked = queue = [];
10895				list = memory = "";
10896				return this;
10897			},
10898			disabled: function() {
10899				return !list;
10900			},
10901
10902			// Disable .fire
10903			// Also disable .add unless we have memory (since it would have no effect)
10904			// Abort any pending executions
10905			lock: function() {
10906				locked = queue = [];
10907				if ( !memory && !firing ) {
10908					list = memory = "";
10909				}
10910				return this;
10911			},
10912			locked: function() {
10913				return !!locked;
10914			},
10915
10916			// Call all callbacks with the given context and arguments
10917			fireWith: function( context, args ) {
10918				if ( !locked ) {
10919					args = args || [];
10920					args = [ context, args.slice ? args.slice() : args ];
10921					queue.push( args );
10922					if ( !firing ) {
10923						fire();
10924					}
10925				}
10926				return this;
10927			},
10928
10929			// Call all the callbacks with the given arguments
10930			fire: function() {
10931				self.fireWith( this, arguments );
10932				return this;
10933			},
10934
10935			// To know if the callbacks have already been called at least once
10936			fired: function() {
10937				return !!fired;
10938			}
10939		};
10940
10941	return self;
10942};
10943
10944
10945function Identity( v ) {
10946	return v;
10947}
10948function Thrower( ex ) {
10949	throw ex;
10950}
10951
10952function adoptValue( value, resolve, reject, noValue ) {
10953	var method;
10954
10955	try {
10956
10957		// Check for promise aspect first to privilege synchronous behavior
10958		if ( value && isFunction( ( method = value.promise ) ) ) {
10959			method.call( value ).done( resolve ).fail( reject );
10960
10961		// Other thenables
10962		} else if ( value && isFunction( ( method = value.then ) ) ) {
10963			method.call( value, resolve, reject );
10964
10965		// Other non-thenables
10966		} else {
10967
10968			// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
10969			// * false: [ value ].slice( 0 ) => resolve( value )
10970			// * true: [ value ].slice( 1 ) => resolve()
10971			resolve.apply( undefined, [ value ].slice( noValue ) );
10972		}
10973
10974	// For Promises/A+, convert exceptions into rejections
10975	// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
10976	// Deferred#then to conditionally suppress rejection.
10977	} catch ( value ) {
10978
10979		// Support: Android 4.0 only
10980		// Strict mode functions invoked without .call/.apply get global-object context
10981		reject.apply( undefined, [ value ] );
10982	}
10983}
10984
10985jQuery.extend( {
10986
10987	Deferred: function( func ) {
10988		var tuples = [
10989
10990				// action, add listener, callbacks,
10991				// ... .then handlers, argument index, [final state]
10992				[ "notify", "progress", jQuery.Callbacks( "memory" ),
10993					jQuery.Callbacks( "memory" ), 2 ],
10994				[ "resolve", "done", jQuery.Callbacks( "once memory" ),
10995					jQuery.Callbacks( "once memory" ), 0, "resolved" ],
10996				[ "reject", "fail", jQuery.Callbacks( "once memory" ),
10997					jQuery.Callbacks( "once memory" ), 1, "rejected" ]
10998			],
10999			state = "pending",
11000			promise = {
11001				state: function() {
11002					return state;
11003				},
11004				always: function() {
11005					deferred.done( arguments ).fail( arguments );
11006					return this;
11007				},
11008				"catch": function( fn ) {
11009					return promise.then( null, fn );
11010				},
11011
11012				// Keep pipe for back-compat
11013				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
11014					var fns = arguments;
11015
11016					return jQuery.Deferred( function( newDefer ) {
11017						jQuery.each( tuples, function( _i, tuple ) {
11018
11019							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
11020							var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
11021
11022							// deferred.progress(function() { bind to newDefer or newDefer.notify })
11023							// deferred.done(function() { bind to newDefer or newDefer.resolve })
11024							// deferred.fail(function() { bind to newDefer or newDefer.reject })
11025							deferred[ tuple[ 1 ] ]( function() {
11026								var returned = fn && fn.apply( this, arguments );
11027								if ( returned && isFunction( returned.promise ) ) {
11028									returned.promise()
11029										.progress( newDefer.notify )
11030										.done( newDefer.resolve )
11031										.fail( newDefer.reject );
11032								} else {
11033									newDefer[ tuple[ 0 ] + "With" ](
11034										this,
11035										fn ? [ returned ] : arguments
11036									);
11037								}
11038							} );
11039						} );
11040						fns = null;
11041					} ).promise();
11042				},
11043				then: function( onFulfilled, onRejected, onProgress ) {
11044					var maxDepth = 0;
11045					function resolve( depth, deferred, handler, special ) {
11046						return function() {
11047							var that = this,
11048								args = arguments,
11049								mightThrow = function() {
11050									var returned, then;
11051
11052									// Support: Promises/A+ section 2.3.3.3.3
11053									// https://promisesaplus.com/#point-59
11054									// Ignore double-resolution attempts
11055									if ( depth < maxDepth ) {
11056										return;
11057									}
11058
11059									returned = handler.apply( that, args );
11060
11061									// Support: Promises/A+ section 2.3.1
11062									// https://promisesaplus.com/#point-48
11063									if ( returned === deferred.promise() ) {
11064										throw new TypeError( "Thenable self-resolution" );
11065									}
11066
11067									// Support: Promises/A+ sections 2.3.3.1, 3.5
11068									// https://promisesaplus.com/#point-54
11069									// https://promisesaplus.com/#point-75
11070									// Retrieve `then` only once
11071									then = returned &&
11072
11073										// Support: Promises/A+ section 2.3.4
11074										// https://promisesaplus.com/#point-64
11075										// Only check objects and functions for thenability
11076										( typeof returned === "object" ||
11077											typeof returned === "function" ) &&
11078										returned.then;
11079
11080									// Handle a returned thenable
11081									if ( isFunction( then ) ) {
11082
11083										// Special processors (notify) just wait for resolution
11084										if ( special ) {
11085											then.call(
11086												returned,
11087												resolve( maxDepth, deferred, Identity, special ),
11088												resolve( maxDepth, deferred, Thrower, special )
11089											);
11090
11091										// Normal processors (resolve) also hook into progress
11092										} else {
11093
11094											// ...and disregard older resolution values
11095											maxDepth++;
11096
11097											then.call(
11098												returned,
11099												resolve( maxDepth, deferred, Identity, special ),
11100												resolve( maxDepth, deferred, Thrower, special ),
11101												resolve( maxDepth, deferred, Identity,
11102													deferred.notifyWith )
11103											);
11104										}
11105
11106									// Handle all other returned values
11107									} else {
11108
11109										// Only substitute handlers pass on context
11110										// and multiple values (non-spec behavior)
11111										if ( handler !== Identity ) {
11112											that = undefined;
11113											args = [ returned ];
11114										}
11115
11116										// Process the value(s)
11117										// Default process is resolve
11118										( special || deferred.resolveWith )( that, args );
11119									}
11120								},
11121
11122								// Only normal processors (resolve) catch and reject exceptions
11123								process = special ?
11124									mightThrow :
11125									function() {
11126										try {
11127											mightThrow();
11128										} catch ( e ) {
11129
11130											if ( jQuery.Deferred.exceptionHook ) {
11131												jQuery.Deferred.exceptionHook( e,
11132													process.error );
11133											}
11134
11135											// Support: Promises/A+ section 2.3.3.3.4.1
11136											// https://promisesaplus.com/#point-61
11137											// Ignore post-resolution exceptions
11138											if ( depth + 1 >= maxDepth ) {
11139
11140												// Only substitute handlers pass on context
11141												// and multiple values (non-spec behavior)
11142												if ( handler !== Thrower ) {
11143													that = undefined;
11144													args = [ e ];
11145												}
11146
11147												deferred.rejectWith( that, args );
11148											}
11149										}
11150									};
11151
11152							// Support: Promises/A+ section 2.3.3.3.1
11153							// https://promisesaplus.com/#point-57
11154							// Re-resolve promises immediately to dodge false rejection from
11155							// subsequent errors
11156							if ( depth ) {
11157								process();
11158							} else {
11159
11160								// Call an optional hook to record the error, in case of exception
11161								// since it's otherwise lost when execution goes async
11162								if ( jQuery.Deferred.getErrorHook ) {
11163									process.error = jQuery.Deferred.getErrorHook();
11164
11165								// The deprecated alias of the above. While the name suggests
11166								// returning the stack, not an error instance, jQuery just passes
11167								// it directly to `console.warn` so both will work; an instance
11168								// just better cooperates with source maps.
11169								} else if ( jQuery.Deferred.getStackHook ) {
11170									process.error = jQuery.Deferred.getStackHook();
11171								}
11172								window.setTimeout( process );
11173							}
11174						};
11175					}
11176
11177					return jQuery.Deferred( function( newDefer ) {
11178
11179						// progress_handlers.add( ... )
11180						tuples[ 0 ][ 3 ].add(
11181							resolve(
11182								0,
11183								newDefer,
11184								isFunction( onProgress ) ?
11185									onProgress :
11186									Identity,
11187								newDefer.notifyWith
11188							)
11189						);
11190
11191						// fulfilled_handlers.add( ... )
11192						tuples[ 1 ][ 3 ].add(
11193							resolve(
11194								0,
11195								newDefer,
11196								isFunction( onFulfilled ) ?
11197									onFulfilled :
11198									Identity
11199							)
11200						);
11201
11202						// rejected_handlers.add( ... )
11203						tuples[ 2 ][ 3 ].add(
11204							resolve(
11205								0,
11206								newDefer,
11207								isFunction( onRejected ) ?
11208									onRejected :
11209									Thrower
11210							)
11211						);
11212					} ).promise();
11213				},
11214
11215				// Get a promise for this deferred
11216				// If obj is provided, the promise aspect is added to the object
11217				promise: function( obj ) {
11218					return obj != null ? jQuery.extend( obj, promise ) : promise;
11219				}
11220			},
11221			deferred = {};
11222
11223		// Add list-specific methods
11224		jQuery.each( tuples, function( i, tuple ) {
11225			var list = tuple[ 2 ],
11226				stateString = tuple[ 5 ];
11227
11228			// promise.progress = list.add
11229			// promise.done = list.add
11230			// promise.fail = list.add
11231			promise[ tuple[ 1 ] ] = list.add;
11232
11233			// Handle state
11234			if ( stateString ) {
11235				list.add(
11236					function() {
11237
11238						// state = "resolved" (i.e., fulfilled)
11239						// state = "rejected"
11240						state = stateString;
11241					},
11242
11243					// rejected_callbacks.disable
11244					// fulfilled_callbacks.disable
11245					tuples[ 3 - i ][ 2 ].disable,
11246
11247					// rejected_handlers.disable
11248					// fulfilled_handlers.disable
11249					tuples[ 3 - i ][ 3 ].disable,
11250
11251					// progress_callbacks.lock
11252					tuples[ 0 ][ 2 ].lock,
11253
11254					// progress_handlers.lock
11255					tuples[ 0 ][ 3 ].lock
11256				);
11257			}
11258
11259			// progress_handlers.fire
11260			// fulfilled_handlers.fire
11261			// rejected_handlers.fire
11262			list.add( tuple[ 3 ].fire );
11263
11264			// deferred.notify = function() { deferred.notifyWith(...) }
11265			// deferred.resolve = function() { deferred.resolveWith(...) }
11266			// deferred.reject = function() { deferred.rejectWith(...) }
11267			deferred[ tuple[ 0 ] ] = function() {
11268				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
11269				return this;
11270			};
11271
11272			// deferred.notifyWith = list.fireWith
11273			// deferred.resolveWith = list.fireWith
11274			// deferred.rejectWith = list.fireWith
11275			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
11276		} );
11277
11278		// Make the deferred a promise
11279		promise.promise( deferred );
11280
11281		// Call given func if any
11282		if ( func ) {
11283			func.call( deferred, deferred );
11284		}
11285
11286		// All done!
11287		return deferred;
11288	},
11289
11290	// Deferred helper
11291	when: function( singleValue ) {
11292		var
11293
11294			// count of uncompleted subordinates
11295			remaining = arguments.length,
11296
11297			// count of unprocessed arguments
11298			i = remaining,
11299
11300			// subordinate fulfillment data
11301			resolveContexts = Array( i ),
11302			resolveValues = slice.call( arguments ),
11303
11304			// the primary Deferred
11305			primary = jQuery.Deferred(),
11306
11307			// subordinate callback factory
11308			updateFunc = function( i ) {
11309				return function( value ) {
11310					resolveContexts[ i ] = this;
11311					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
11312					if ( !( --remaining ) ) {
11313						primary.resolveWith( resolveContexts, resolveValues );
11314					}
11315				};
11316			};
11317
11318		// Single- and empty arguments are adopted like Promise.resolve
11319		if ( remaining <= 1 ) {
11320			adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,
11321				!remaining );
11322
11323			// Use .then() to unwrap secondary thenables (cf. gh-3000)
11324			if ( primary.state() === "pending" ||
11325				isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
11326
11327				return primary.then();
11328			}
11329		}
11330
11331		// Multiple arguments are aggregated like Promise.all array elements
11332		while ( i-- ) {
11333			adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );
11334		}
11335
11336		return primary.promise();
11337	}
11338} );
11339
11340
11341// These usually indicate a programmer mistake during development,
11342// warn about them ASAP rather than swallowing them by default.
11343var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
11344
11345// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error
11346// captured before the async barrier to get the original error cause
11347// which may otherwise be hidden.
11348jQuery.Deferred.exceptionHook = function( error, asyncError ) {
11349
11350	// Support: IE 8 - 9 only
11351	// Console exists when dev tools are open, which can happen at any time
11352	if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
11353		window.console.warn( "jQuery.Deferred exception: " + error.message,
11354			error.stack, asyncError );
11355	}
11356};
11357
11358
11359
11360
11361jQuery.readyException = function( error ) {
11362	window.setTimeout( function() {
11363		throw error;
11364	} );
11365};
11366
11367
11368
11369
11370// The deferred used on DOM ready
11371var readyList = jQuery.Deferred();
11372
11373jQuery.fn.ready = function( fn ) {
11374
11375	readyList
11376		.then( fn )
11377
11378		// Wrap jQuery.readyException in a function so that the lookup
11379		// happens at the time of error handling instead of callback
11380		// registration.
11381		.catch( function( error ) {
11382			jQuery.readyException( error );
11383		} );
11384
11385	return this;
11386};
11387
11388jQuery.extend( {
11389
11390	// Is the DOM ready to be used? Set to true once it occurs.
11391	isReady: false,
11392
11393	// A counter to track how many items to wait for before
11394	// the ready event fires. See trac-6781
11395	readyWait: 1,
11396
11397	// Handle when the DOM is ready
11398	ready: function( wait ) {
11399
11400		// Abort if there are pending holds or we're already ready
11401		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
11402			return;
11403		}
11404
11405		// Remember that the DOM is ready
11406		jQuery.isReady = true;
11407
11408		// If a normal DOM Ready event fired, decrement, and wait if need be
11409		if ( wait !== true && --jQuery.readyWait > 0 ) {
11410			return;
11411		}
11412
11413		// If there are functions bound, to execute
11414		readyList.resolveWith( document, [ jQuery ] );
11415	}
11416} );
11417
11418jQuery.ready.then = readyList.then;
11419
11420// The ready event handler and self cleanup method
11421function completed() {
11422	document.removeEventListener( "DOMContentLoaded", completed );
11423	window.removeEventListener( "load", completed );
11424	jQuery.ready();
11425}
11426
11427// Catch cases where $(document).ready() is called
11428// after the browser event has already occurred.
11429// Support: IE <=9 - 10 only
11430// Older IE sometimes signals "interactive" too soon
11431if ( document.readyState === "complete" ||
11432	( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
11433
11434	// Handle it asynchronously to allow scripts the opportunity to delay ready
11435	window.setTimeout( jQuery.ready );
11436
11437} else {
11438
11439	// Use the handy event callback
11440	document.addEventListener( "DOMContentLoaded", completed );
11441
11442	// A fallback to window.onload, that will always work
11443	window.addEventListener( "load", completed );
11444}
11445
11446
11447
11448
11449// Multifunctional method to get and set values of a collection
11450// The value/s can optionally be executed if it's a function
11451var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
11452	var i = 0,
11453		len = elems.length,
11454		bulk = key == null;
11455
11456	// Sets many values
11457	if ( toType( key ) === "object" ) {
11458		chainable = true;
11459		for ( i in key ) {
11460			access( elems, fn, i, key[ i ], true, emptyGet, raw );
11461		}
11462
11463	// Sets one value
11464	} else if ( value !== undefined ) {
11465		chainable = true;
11466
11467		if ( !isFunction( value ) ) {
11468			raw = true;
11469		}
11470
11471		if ( bulk ) {
11472
11473			// Bulk operations run against the entire set
11474			if ( raw ) {
11475				fn.call( elems, value );
11476				fn = null;
11477
11478			// ...except when executing function values
11479			} else {
11480				bulk = fn;
11481				fn = function( elem, _key, value ) {
11482					return bulk.call( jQuery( elem ), value );
11483				};
11484			}
11485		}
11486
11487		if ( fn ) {
11488			for ( ; i < len; i++ ) {
11489				fn(
11490					elems[ i ], key, raw ?
11491						value :
11492						value.call( elems[ i ], i, fn( elems[ i ], key ) )
11493				);
11494			}
11495		}
11496	}
11497
11498	if ( chainable ) {
11499		return elems;
11500	}
11501
11502	// Gets
11503	if ( bulk ) {
11504		return fn.call( elems );
11505	}
11506
11507	return len ? fn( elems[ 0 ], key ) : emptyGet;
11508};
11509
11510
11511// Matches dashed string for camelizing
11512var rmsPrefix = /^-ms-/,
11513	rdashAlpha = /-([a-z])/g;
11514
11515// Used by camelCase as callback to replace()
11516function fcamelCase( _all, letter ) {
11517	return letter.toUpperCase();
11518}
11519
11520// Convert dashed to camelCase; used by the css and data modules
11521// Support: IE <=9 - 11, Edge 12 - 15
11522// Microsoft forgot to hump their vendor prefix (trac-9572)
11523function camelCase( string ) {
11524	return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
11525}
11526var acceptData = function( owner ) {
11527
11528	// Accepts only:
11529	//  - Node
11530	//    - Node.ELEMENT_NODE
11531	//    - Node.DOCUMENT_NODE
11532	//  - Object
11533	//    - Any
11534	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
11535};
11536
11537
11538
11539
11540function Data() {
11541	this.expando = jQuery.expando + Data.uid++;
11542}
11543
11544Data.uid = 1;
11545
11546Data.prototype = {
11547
11548	cache: function( owner ) {
11549
11550		// Check if the owner object already has a cache
11551		var value = owner[ this.expando ];
11552
11553		// If not, create one
11554		if ( !value ) {
11555			value = {};
11556
11557			// We can accept data for non-element nodes in modern browsers,
11558			// but we should not, see trac-8335.
11559			// Always return an empty object.
11560			if ( acceptData( owner ) ) {
11561
11562				// If it is a node unlikely to be stringify-ed or looped over
11563				// use plain assignment
11564				if ( owner.nodeType ) {
11565					owner[ this.expando ] = value;
11566
11567				// Otherwise secure it in a non-enumerable property
11568				// configurable must be true to allow the property to be
11569				// deleted when data is removed
11570				} else {
11571					Object.defineProperty( owner, this.expando, {
11572						value: value,
11573						configurable: true
11574					} );
11575				}
11576			}
11577		}
11578
11579		return value;
11580	},
11581	set: function( owner, data, value ) {
11582		var prop,
11583			cache = this.cache( owner );
11584
11585		// Handle: [ owner, key, value ] args
11586		// Always use camelCase key (gh-2257)
11587		if ( typeof data === "string" ) {
11588			cache[ camelCase( data ) ] = value;
11589
11590		// Handle: [ owner, { properties } ] args
11591		} else {
11592
11593			// Copy the properties one-by-one to the cache object
11594			for ( prop in data ) {
11595				cache[ camelCase( prop ) ] = data[ prop ];
11596			}
11597		}
11598		return cache;
11599	},
11600	get: function( owner, key ) {
11601		return key === undefined ?
11602			this.cache( owner ) :
11603
11604			// Always use camelCase key (gh-2257)
11605			owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
11606	},
11607	access: function( owner, key, value ) {
11608
11609		// In cases where either:
11610		//
11611		//   1. No key was specified
11612		//   2. A string key was specified, but no value provided
11613		//
11614		// Take the "read" path and allow the get method to determine
11615		// which value to return, respectively either:
11616		//
11617		//   1. The entire cache object
11618		//   2. The data stored at the key
11619		//
11620		if ( key === undefined ||
11621				( ( key && typeof key === "string" ) && value === undefined ) ) {
11622
11623			return this.get( owner, key );
11624		}
11625
11626		// When the key is not a string, or both a key and value
11627		// are specified, set or extend (existing objects) with either:
11628		//
11629		//   1. An object of properties
11630		//   2. A key and value
11631		//
11632		this.set( owner, key, value );
11633
11634		// Since the "set" path can have two possible entry points
11635		// return the expected data based on which path was taken[*]
11636		return value !== undefined ? value : key;
11637	},
11638	remove: function( owner, key ) {
11639		var i,
11640			cache = owner[ this.expando ];
11641
11642		if ( cache === undefined ) {
11643			return;
11644		}
11645
11646		if ( key !== undefined ) {
11647
11648			// Support array or space separated string of keys
11649			if ( Array.isArray( key ) ) {
11650
11651				// If key is an array of keys...
11652				// We always set camelCase keys, so remove that.
11653				key = key.map( camelCase );
11654			} else {
11655				key = camelCase( key );
11656
11657				// If a key with the spaces exists, use it.
11658				// Otherwise, create an array by matching non-whitespace
11659				key = key in cache ?
11660					[ key ] :
11661					( key.match( rnothtmlwhite ) || [] );
11662			}
11663
11664			i = key.length;
11665
11666			while ( i-- ) {
11667				delete cache[ key[ i ] ];
11668			}
11669		}
11670
11671		// Remove the expando if there's no more data
11672		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
11673
11674			// Support: Chrome <=35 - 45
11675			// Webkit & Blink performance suffers when deleting properties
11676			// from DOM nodes, so set to undefined instead
11677			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
11678			if ( owner.nodeType ) {
11679				owner[ this.expando ] = undefined;
11680			} else {
11681				delete owner[ this.expando ];
11682			}
11683		}
11684	},
11685	hasData: function( owner ) {
11686		var cache = owner[ this.expando ];
11687		return cache !== undefined && !jQuery.isEmptyObject( cache );
11688	}
11689};
11690var dataPriv = new Data();
11691
11692var dataUser = new Data();
11693
11694
11695
11696//	Implementation Summary
11697//
11698//	1. Enforce API surface and semantic compatibility with 1.9.x branch
11699//	2. Improve the module's maintainability by reducing the storage
11700//		paths to a single mechanism.
11701//	3. Use the same single mechanism to support "private" and "user" data.
11702//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
11703//	5. Avoid exposing implementation details on user objects (eg. expando properties)
11704//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
11705
11706var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
11707	rmultiDash = /[A-Z]/g;
11708
11709function getData( data ) {
11710	if ( data === "true" ) {
11711		return true;
11712	}
11713
11714	if ( data === "false" ) {
11715		return false;
11716	}
11717
11718	if ( data === "null" ) {
11719		return null;
11720	}
11721
11722	// Only convert to a number if it doesn't change the string
11723	if ( data === +data + "" ) {
11724		return +data;
11725	}
11726
11727	if ( rbrace.test( data ) ) {
11728		return JSON.parse( data );
11729	}
11730
11731	return data;
11732}
11733
11734function dataAttr( elem, key, data ) {
11735	var name;
11736
11737	// If nothing was found internally, try to fetch any
11738	// data from the HTML5 data-* attribute
11739	if ( data === undefined && elem.nodeType === 1 ) {
11740		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
11741		data = elem.getAttribute( name );
11742
11743		if ( typeof data === "string" ) {
11744			try {
11745				data = getData( data );
11746			} catch ( e ) {}
11747
11748			// Make sure we set the data so it isn't changed later
11749			dataUser.set( elem, key, data );
11750		} else {
11751			data = undefined;
11752		}
11753	}
11754	return data;
11755}
11756
11757jQuery.extend( {
11758	hasData: function( elem ) {
11759		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
11760	},
11761
11762	data: function( elem, name, data ) {
11763		return dataUser.access( elem, name, data );
11764	},
11765
11766	removeData: function( elem, name ) {
11767		dataUser.remove( elem, name );
11768	},
11769
11770	// TODO: Now that all calls to _data and _removeData have been replaced
11771	// with direct calls to dataPriv methods, these can be deprecated.
11772	_data: function( elem, name, data ) {
11773		return dataPriv.access( elem, name, data );
11774	},
11775
11776	_removeData: function( elem, name ) {
11777		dataPriv.remove( elem, name );
11778	}
11779} );
11780
11781jQuery.fn.extend( {
11782	data: function( key, value ) {
11783		var i, name, data,
11784			elem = this[ 0 ],
11785			attrs = elem && elem.attributes;
11786
11787		// Gets all values
11788		if ( key === undefined ) {
11789			if ( this.length ) {
11790				data = dataUser.get( elem );
11791
11792				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
11793					i = attrs.length;
11794					while ( i-- ) {
11795
11796						// Support: IE 11 only
11797						// The attrs elements can be null (trac-14894)
11798						if ( attrs[ i ] ) {
11799							name = attrs[ i ].name;
11800							if ( name.indexOf( "data-" ) === 0 ) {
11801								name = camelCase( name.slice( 5 ) );
11802								dataAttr( elem, name, data[ name ] );
11803							}
11804						}
11805					}
11806					dataPriv.set( elem, "hasDataAttrs", true );
11807				}
11808			}
11809
11810			return data;
11811		}
11812
11813		// Sets multiple values
11814		if ( typeof key === "object" ) {
11815			return this.each( function() {
11816				dataUser.set( this, key );
11817			} );
11818		}
11819
11820		return access( this, function( value ) {
11821			var data;
11822
11823			// The calling jQuery object (element matches) is not empty
11824			// (and therefore has an element appears at this[ 0 ]) and the
11825			// `value` parameter was not undefined. An empty jQuery object
11826			// will result in `undefined` for elem = this[ 0 ] which will
11827			// throw an exception if an attempt to read a data cache is made.
11828			if ( elem && value === undefined ) {
11829
11830				// Attempt to get data from the cache
11831				// The key will always be camelCased in Data
11832				data = dataUser.get( elem, key );
11833				if ( data !== undefined ) {
11834					return data;
11835				}
11836
11837				// Attempt to "discover" the data in
11838				// HTML5 custom data-* attrs
11839				data = dataAttr( elem, key );
11840				if ( data !== undefined ) {
11841					return data;
11842				}
11843
11844				// We tried really hard, but the data doesn't exist.
11845				return;
11846			}
11847
11848			// Set the data...
11849			this.each( function() {
11850
11851				// We always store the camelCased key
11852				dataUser.set( this, key, value );
11853			} );
11854		}, null, value, arguments.length > 1, null, true );
11855	},
11856
11857	removeData: function( key ) {
11858		return this.each( function() {
11859			dataUser.remove( this, key );
11860		} );
11861	}
11862} );
11863
11864
11865jQuery.extend( {
11866	queue: function( elem, type, data ) {
11867		var queue;
11868
11869		if ( elem ) {
11870			type = ( type || "fx" ) + "queue";
11871			queue = dataPriv.get( elem, type );
11872
11873			// Speed up dequeue by getting out quickly if this is just a lookup
11874			if ( data ) {
11875				if ( !queue || Array.isArray( data ) ) {
11876					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
11877				} else {
11878					queue.push( data );
11879				}
11880			}
11881			return queue || [];
11882		}
11883	},
11884
11885	dequeue: function( elem, type ) {
11886		type = type || "fx";
11887
11888		var queue = jQuery.queue( elem, type ),
11889			startLength = queue.length,
11890			fn = queue.shift(),
11891			hooks = jQuery._queueHooks( elem, type ),
11892			next = function() {
11893				jQuery.dequeue( elem, type );
11894			};
11895
11896		// If the fx queue is dequeued, always remove the progress sentinel
11897		if ( fn === "inprogress" ) {
11898			fn = queue.shift();
11899			startLength--;
11900		}
11901
11902		if ( fn ) {
11903
11904			// Add a progress sentinel to prevent the fx queue from being
11905			// automatically dequeued
11906			if ( type === "fx" ) {
11907				queue.unshift( "inprogress" );
11908			}
11909
11910			// Clear up the last queue stop function
11911			delete hooks.stop;
11912			fn.call( elem, next, hooks );
11913		}
11914
11915		if ( !startLength && hooks ) {
11916			hooks.empty.fire();
11917		}
11918	},
11919
11920	// Not public - generate a queueHooks object, or return the current one
11921	_queueHooks: function( elem, type ) {
11922		var key = type + "queueHooks";
11923		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
11924			empty: jQuery.Callbacks( "once memory" ).add( function() {
11925				dataPriv.remove( elem, [ type + "queue", key ] );
11926			} )
11927		} );
11928	}
11929} );
11930
11931jQuery.fn.extend( {
11932	queue: function( type, data ) {
11933		var setter = 2;
11934
11935		if ( typeof type !== "string" ) {
11936			data = type;
11937			type = "fx";
11938			setter--;
11939		}
11940
11941		if ( arguments.length < setter ) {
11942			return jQuery.queue( this[ 0 ], type );
11943		}
11944
11945		return data === undefined ?
11946			this :
11947			this.each( function() {
11948				var queue = jQuery.queue( this, type, data );
11949
11950				// Ensure a hooks for this queue
11951				jQuery._queueHooks( this, type );
11952
11953				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
11954					jQuery.dequeue( this, type );
11955				}
11956			} );
11957	},
11958	dequeue: function( type ) {
11959		return this.each( function() {
11960			jQuery.dequeue( this, type );
11961		} );
11962	},
11963	clearQueue: function( type ) {
11964		return this.queue( type || "fx", [] );
11965	},
11966
11967	// Get a promise resolved when queues of a certain type
11968	// are emptied (fx is the type by default)
11969	promise: function( type, obj ) {
11970		var tmp,
11971			count = 1,
11972			defer = jQuery.Deferred(),
11973			elements = this,
11974			i = this.length,
11975			resolve = function() {
11976				if ( !( --count ) ) {
11977					defer.resolveWith( elements, [ elements ] );
11978				}
11979			};
11980
11981		if ( typeof type !== "string" ) {
11982			obj = type;
11983			type = undefined;
11984		}
11985		type = type || "fx";
11986
11987		while ( i-- ) {
11988			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
11989			if ( tmp && tmp.empty ) {
11990				count++;
11991				tmp.empty.add( resolve );
11992			}
11993		}
11994		resolve();
11995		return defer.promise( obj );
11996	}
11997} );
11998var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
11999
12000var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
12001
12002
12003var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
12004
12005var documentElement = document.documentElement;
12006
12007
12008
12009	var isAttached = function( elem ) {
12010			return jQuery.contains( elem.ownerDocument, elem );
12011		},
12012		composed = { composed: true };
12013
12014	// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
12015	// Check attachment across shadow DOM boundaries when possible (gh-3504)
12016	// Support: iOS 10.0-10.2 only
12017	// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
12018	// leading to errors. We need to check for `getRootNode`.
12019	if ( documentElement.getRootNode ) {
12020		isAttached = function( elem ) {
12021			return jQuery.contains( elem.ownerDocument, elem ) ||
12022				elem.getRootNode( composed ) === elem.ownerDocument;
12023		};
12024	}
12025var isHiddenWithinTree = function( elem, el ) {
12026
12027		// isHiddenWithinTree might be called from jQuery#filter function;
12028		// in that case, element will be second argument
12029		elem = el || elem;
12030
12031		// Inline style trumps all
12032		return elem.style.display === "none" ||
12033			elem.style.display === "" &&
12034
12035			// Otherwise, check computed style
12036			// Support: Firefox <=43 - 45
12037			// Disconnected elements can have computed display: none, so first confirm that elem is
12038			// in the document.
12039			isAttached( elem ) &&
12040
12041			jQuery.css( elem, "display" ) === "none";
12042	};
12043
12044
12045
12046function adjustCSS( elem, prop, valueParts, tween ) {
12047	var adjusted, scale,
12048		maxIterations = 20,
12049		currentValue = tween ?
12050			function() {
12051				return tween.cur();
12052			} :
12053			function() {
12054				return jQuery.css( elem, prop, "" );
12055			},
12056		initial = currentValue(),
12057		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
12058
12059		// Starting value computation is required for potential unit mismatches
12060		initialInUnit = elem.nodeType &&
12061			( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
12062			rcssNum.exec( jQuery.css( elem, prop ) );
12063
12064	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
12065
12066		// Support: Firefox <=54
12067		// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
12068		initial = initial / 2;
12069
12070		// Trust units reported by jQuery.css
12071		unit = unit || initialInUnit[ 3 ];
12072
12073		// Iteratively approximate from a nonzero starting point
12074		initialInUnit = +initial || 1;
12075
12076		while ( maxIterations-- ) {
12077
12078			// Evaluate and update our best guess (doubling guesses that zero out).
12079			// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
12080			jQuery.style( elem, prop, initialInUnit + unit );
12081			if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
12082				maxIterations = 0;
12083			}
12084			initialInUnit = initialInUnit / scale;
12085
12086		}
12087
12088		initialInUnit = initialInUnit * 2;
12089		jQuery.style( elem, prop, initialInUnit + unit );
12090
12091		// Make sure we update the tween properties later on
12092		valueParts = valueParts || [];
12093	}
12094
12095	if ( valueParts ) {
12096		initialInUnit = +initialInUnit || +initial || 0;
12097
12098		// Apply relative offset (+=/-=) if specified
12099		adjusted = valueParts[ 1 ] ?
12100			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
12101			+valueParts[ 2 ];
12102		if ( tween ) {
12103			tween.unit = unit;
12104			tween.start = initialInUnit;
12105			tween.end = adjusted;
12106		}
12107	}
12108	return adjusted;
12109}
12110
12111
12112var defaultDisplayMap = {};
12113
12114function getDefaultDisplay( elem ) {
12115	var temp,
12116		doc = elem.ownerDocument,
12117		nodeName = elem.nodeName,
12118		display = defaultDisplayMap[ nodeName ];
12119
12120	if ( display ) {
12121		return display;
12122	}
12123
12124	temp = doc.body.appendChild( doc.createElement( nodeName ) );
12125	display = jQuery.css( temp, "display" );
12126
12127	temp.parentNode.removeChild( temp );
12128
12129	if ( display === "none" ) {
12130		display = "block";
12131	}
12132	defaultDisplayMap[ nodeName ] = display;
12133
12134	return display;
12135}
12136
12137function showHide( elements, show ) {
12138	var display, elem,
12139		values = [],
12140		index = 0,
12141		length = elements.length;
12142
12143	// Determine new display value for elements that need to change
12144	for ( ; index < length; index++ ) {
12145		elem = elements[ index ];
12146		if ( !elem.style ) {
12147			continue;
12148		}
12149
12150		display = elem.style.display;
12151		if ( show ) {
12152
12153			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
12154			// check is required in this first loop unless we have a nonempty display value (either
12155			// inline or about-to-be-restored)
12156			if ( display === "none" ) {
12157				values[ index ] = dataPriv.get( elem, "display" ) || null;
12158				if ( !values[ index ] ) {
12159					elem.style.display = "";
12160				}
12161			}
12162			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
12163				values[ index ] = getDefaultDisplay( elem );
12164			}
12165		} else {
12166			if ( display !== "none" ) {
12167				values[ index ] = "none";
12168
12169				// Remember what we're overwriting
12170				dataPriv.set( elem, "display", display );
12171			}
12172		}
12173	}
12174
12175	// Set the display of the elements in a second loop to avoid constant reflow
12176	for ( index = 0; index < length; index++ ) {
12177		if ( values[ index ] != null ) {
12178			elements[ index ].style.display = values[ index ];
12179		}
12180	}
12181
12182	return elements;
12183}
12184
12185jQuery.fn.extend( {
12186	show: function() {
12187		return showHide( this, true );
12188	},
12189	hide: function() {
12190		return showHide( this );
12191	},
12192	toggle: function( state ) {
12193		if ( typeof state === "boolean" ) {
12194			return state ? this.show() : this.hide();
12195		}
12196
12197		return this.each( function() {
12198			if ( isHiddenWithinTree( this ) ) {
12199				jQuery( this ).show();
12200			} else {
12201				jQuery( this ).hide();
12202			}
12203		} );
12204	}
12205} );
12206var rcheckableType = ( /^(?:checkbox|radio)$/i );
12207
12208var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
12209
12210var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
12211
12212
12213
12214( function() {
12215	var fragment = document.createDocumentFragment(),
12216		div = fragment.appendChild( document.createElement( "div" ) ),
12217		input = document.createElement( "input" );
12218
12219	// Support: Android 4.0 - 4.3 only
12220	// Check state lost if the name is set (trac-11217)
12221	// Support: Windows Web Apps (WWA)
12222	// `name` and `type` must use .setAttribute for WWA (trac-14901)
12223	input.setAttribute( "type", "radio" );
12224	input.setAttribute( "checked", "checked" );
12225	input.setAttribute( "name", "t" );
12226
12227	div.appendChild( input );
12228
12229	// Support: Android <=4.1 only
12230	// Older WebKit doesn't clone checked state correctly in fragments
12231	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
12232
12233	// Support: IE <=11 only
12234	// Make sure textarea (and checkbox) defaultValue is properly cloned
12235	div.innerHTML = "<textarea>x</textarea>";
12236	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
12237
12238	// Support: IE <=9 only
12239	// IE <=9 replaces <option> tags with their contents when inserted outside of
12240	// the select element.
12241	div.innerHTML = "<option></option>";
12242	support.option = !!div.lastChild;
12243} )();
12244
12245
12246// We have to close these tags to support XHTML (trac-13200)
12247var wrapMap = {
12248
12249	// XHTML parsers do not magically insert elements in the
12250	// same way that tag soup parsers do. So we cannot shorten
12251	// this by omitting <tbody> or other required elements.
12252	thead: [ 1, "<table>", "</table>" ],
12253	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
12254	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
12255	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
12256
12257	_default: [ 0, "", "" ]
12258};
12259
12260wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
12261wrapMap.th = wrapMap.td;
12262
12263// Support: IE <=9 only
12264if ( !support.option ) {
12265	wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ];
12266}
12267
12268
12269function getAll( context, tag ) {
12270
12271	// Support: IE <=9 - 11 only
12272	// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)
12273	var ret;
12274
12275	if ( typeof context.getElementsByTagName !== "undefined" ) {
12276		ret = context.getElementsByTagName( tag || "*" );
12277
12278	} else if ( typeof context.querySelectorAll !== "undefined" ) {
12279		ret = context.querySelectorAll( tag || "*" );
12280
12281	} else {
12282		ret = [];
12283	}
12284
12285	if ( tag === undefined || tag && nodeName( context, tag ) ) {
12286		return jQuery.merge( [ context ], ret );
12287	}
12288
12289	return ret;
12290}
12291
12292
12293// Mark scripts as having already been evaluated
12294function setGlobalEval( elems, refElements ) {
12295	var i = 0,
12296		l = elems.length;
12297
12298	for ( ; i < l; i++ ) {
12299		dataPriv.set(
12300			elems[ i ],
12301			"globalEval",
12302			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
12303		);
12304	}
12305}
12306
12307
12308var rhtml = /<|&#?\w+;/;
12309
12310function buildFragment( elems, context, scripts, selection, ignored ) {
12311	var elem, tmp, tag, wrap, attached, j,
12312		fragment = context.createDocumentFragment(),
12313		nodes = [],
12314		i = 0,
12315		l = elems.length;
12316
12317	for ( ; i < l; i++ ) {
12318		elem = elems[ i ];
12319
12320		if ( elem || elem === 0 ) {
12321
12322			// Add nodes directly
12323			if ( toType( elem ) === "object" ) {
12324
12325				// Support: Android <=4.0 only, PhantomJS 1 only
12326				// push.apply(_, arraylike) throws on ancient WebKit
12327				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
12328
12329			// Convert non-html into a text node
12330			} else if ( !rhtml.test( elem ) ) {
12331				nodes.push( context.createTextNode( elem ) );
12332
12333			// Convert html into DOM nodes
12334			} else {
12335				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
12336
12337				// Deserialize a standard representation
12338				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
12339				wrap = wrapMap[ tag ] || wrapMap._default;
12340				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
12341
12342				// Descend through wrappers to the right content
12343				j = wrap[ 0 ];
12344				while ( j-- ) {
12345					tmp = tmp.lastChild;
12346				}
12347
12348				// Support: Android <=4.0 only, PhantomJS 1 only
12349				// push.apply(_, arraylike) throws on ancient WebKit
12350				jQuery.merge( nodes, tmp.childNodes );
12351
12352				// Remember the top-level container
12353				tmp = fragment.firstChild;
12354
12355				// Ensure the created nodes are orphaned (trac-12392)
12356				tmp.textContent = "";
12357			}
12358		}
12359	}
12360
12361	// Remove wrapper from fragment
12362	fragment.textContent = "";
12363
12364	i = 0;
12365	while ( ( elem = nodes[ i++ ] ) ) {
12366
12367		// Skip elements already in the context collection (trac-4087)
12368		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
12369			if ( ignored ) {
12370				ignored.push( elem );
12371			}
12372			continue;
12373		}
12374
12375		attached = isAttached( elem );
12376
12377		// Append to fragment
12378		tmp = getAll( fragment.appendChild( elem ), "script" );
12379
12380		// Preserve script evaluation history
12381		if ( attached ) {
12382			setGlobalEval( tmp );
12383		}
12384
12385		// Capture executables
12386		if ( scripts ) {
12387			j = 0;
12388			while ( ( elem = tmp[ j++ ] ) ) {
12389				if ( rscriptType.test( elem.type || "" ) ) {
12390					scripts.push( elem );
12391				}
12392			}
12393		}
12394	}
12395
12396	return fragment;
12397}
12398
12399
12400var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
12401
12402function returnTrue() {
12403	return true;
12404}
12405
12406function returnFalse() {
12407	return false;
12408}
12409
12410function on( elem, types, selector, data, fn, one ) {
12411	var origFn, type;
12412
12413	// Types can be a map of types/handlers
12414	if ( typeof types === "object" ) {
12415
12416		// ( types-Object, selector, data )
12417		if ( typeof selector !== "string" ) {
12418
12419			// ( types-Object, data )
12420			data = data || selector;
12421			selector = undefined;
12422		}
12423		for ( type in types ) {
12424			on( elem, type, selector, data, types[ type ], one );
12425		}
12426		return elem;
12427	}
12428
12429	if ( data == null && fn == null ) {
12430
12431		// ( types, fn )
12432		fn = selector;
12433		data = selector = undefined;
12434	} else if ( fn == null ) {
12435		if ( typeof selector === "string" ) {
12436
12437			// ( types, selector, fn )
12438			fn = data;
12439			data = undefined;
12440		} else {
12441
12442			// ( types, data, fn )
12443			fn = data;
12444			data = selector;
12445			selector = undefined;
12446		}
12447	}
12448	if ( fn === false ) {
12449		fn = returnFalse;
12450	} else if ( !fn ) {
12451		return elem;
12452	}
12453
12454	if ( one === 1 ) {
12455		origFn = fn;
12456		fn = function( event ) {
12457
12458			// Can use an empty set, since event contains the info
12459			jQuery().off( event );
12460			return origFn.apply( this, arguments );
12461		};
12462
12463		// Use same guid so caller can remove using origFn
12464		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
12465	}
12466	return elem.each( function() {
12467		jQuery.event.add( this, types, fn, data, selector );
12468	} );
12469}
12470
12471/*
12472 * Helper functions for managing events -- not part of the public interface.
12473 * Props to Dean Edwards' addEvent library for many of the ideas.
12474 */
12475jQuery.event = {
12476
12477	global: {},
12478
12479	add: function( elem, types, handler, data, selector ) {
12480
12481		var handleObjIn, eventHandle, tmp,
12482			events, t, handleObj,
12483			special, handlers, type, namespaces, origType,
12484			elemData = dataPriv.get( elem );
12485
12486		// Only attach events to objects that accept data
12487		if ( !acceptData( elem ) ) {
12488			return;
12489		}
12490
12491		// Caller can pass in an object of custom data in lieu of the handler
12492		if ( handler.handler ) {
12493			handleObjIn = handler;
12494			handler = handleObjIn.handler;
12495			selector = handleObjIn.selector;
12496		}
12497
12498		// Ensure that invalid selectors throw exceptions at attach time
12499		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
12500		if ( selector ) {
12501			jQuery.find.matchesSelector( documentElement, selector );
12502		}
12503
12504		// Make sure that the handler has a unique ID, used to find/remove it later
12505		if ( !handler.guid ) {
12506			handler.guid = jQuery.guid++;
12507		}
12508
12509		// Init the element's event structure and main handler, if this is the first
12510		if ( !( events = elemData.events ) ) {
12511			events = elemData.events = Object.create( null );
12512		}
12513		if ( !( eventHandle = elemData.handle ) ) {
12514			eventHandle = elemData.handle = function( e ) {
12515
12516				// Discard the second event of a jQuery.event.trigger() and
12517				// when an event is called after a page has unloaded
12518				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
12519					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
12520			};
12521		}
12522
12523		// Handle multiple events separated by a space
12524		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
12525		t = types.length;
12526		while ( t-- ) {
12527			tmp = rtypenamespace.exec( types[ t ] ) || [];
12528			type = origType = tmp[ 1 ];
12529			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
12530
12531			// There *must* be a type, no attaching namespace-only handlers
12532			if ( !type ) {
12533				continue;
12534			}
12535
12536			// If event changes its type, use the special event handlers for the changed type
12537			special = jQuery.event.special[ type ] || {};
12538
12539			// If selector defined, determine special event api type, otherwise given type
12540			type = ( selector ? special.delegateType : special.bindType ) || type;
12541
12542			// Update special based on newly reset type
12543			special = jQuery.event.special[ type ] || {};
12544
12545			// handleObj is passed to all event handlers
12546			handleObj = jQuery.extend( {
12547				type: type,
12548				origType: origType,
12549				data: data,
12550				handler: handler,
12551				guid: handler.guid,
12552				selector: selector,
12553				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
12554				namespace: namespaces.join( "." )
12555			}, handleObjIn );
12556
12557			// Init the event handler queue if we're the first
12558			if ( !( handlers = events[ type ] ) ) {
12559				handlers = events[ type ] = [];
12560				handlers.delegateCount = 0;
12561
12562				// Only use addEventListener if the special events handler returns false
12563				if ( !special.setup ||
12564					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
12565
12566					if ( elem.addEventListener ) {
12567						elem.addEventListener( type, eventHandle );
12568					}
12569				}
12570			}
12571
12572			if ( special.add ) {
12573				special.add.call( elem, handleObj );
12574
12575				if ( !handleObj.handler.guid ) {
12576					handleObj.handler.guid = handler.guid;
12577				}
12578			}
12579
12580			// Add to the element's handler list, delegates in front
12581			if ( selector ) {
12582				handlers.splice( handlers.delegateCount++, 0, handleObj );
12583			} else {
12584				handlers.push( handleObj );
12585			}
12586
12587			// Keep track of which events have ever been used, for event optimization
12588			jQuery.event.global[ type ] = true;
12589		}
12590
12591	},
12592
12593	// Detach an event or set of events from an element
12594	remove: function( elem, types, handler, selector, mappedTypes ) {
12595
12596		var j, origCount, tmp,
12597			events, t, handleObj,
12598			special, handlers, type, namespaces, origType,
12599			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
12600
12601		if ( !elemData || !( events = elemData.events ) ) {
12602			return;
12603		}
12604
12605		// Once for each type.namespace in types; type may be omitted
12606		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
12607		t = types.length;
12608		while ( t-- ) {
12609			tmp = rtypenamespace.exec( types[ t ] ) || [];
12610			type = origType = tmp[ 1 ];
12611			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
12612
12613			// Unbind all events (on this namespace, if provided) for the element
12614			if ( !type ) {
12615				for ( type in events ) {
12616					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
12617				}
12618				continue;
12619			}
12620
12621			special = jQuery.event.special[ type ] || {};
12622			type = ( selector ? special.delegateType : special.bindType ) || type;
12623			handlers = events[ type ] || [];
12624			tmp = tmp[ 2 ] &&
12625				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
12626
12627			// Remove matching events
12628			origCount = j = handlers.length;
12629			while ( j-- ) {
12630				handleObj = handlers[ j ];
12631
12632				if ( ( mappedTypes || origType === handleObj.origType ) &&
12633					( !handler || handler.guid === handleObj.guid ) &&
12634					( !tmp || tmp.test( handleObj.namespace ) ) &&
12635					( !selector || selector === handleObj.selector ||
12636						selector === "**" && handleObj.selector ) ) {
12637					handlers.splice( j, 1 );
12638
12639					if ( handleObj.selector ) {
12640						handlers.delegateCount--;
12641					}
12642					if ( special.remove ) {
12643						special.remove.call( elem, handleObj );
12644					}
12645				}
12646			}
12647
12648			// Remove generic event handler if we removed something and no more handlers exist
12649			// (avoids potential for endless recursion during removal of special event handlers)
12650			if ( origCount && !handlers.length ) {
12651				if ( !special.teardown ||
12652					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
12653
12654					jQuery.removeEvent( elem, type, elemData.handle );
12655				}
12656
12657				delete events[ type ];
12658			}
12659		}
12660
12661		// Remove data and the expando if it's no longer used
12662		if ( jQuery.isEmptyObject( events ) ) {
12663			dataPriv.remove( elem, "handle events" );
12664		}
12665	},
12666
12667	dispatch: function( nativeEvent ) {
12668
12669		var i, j, ret, matched, handleObj, handlerQueue,
12670			args = new Array( arguments.length ),
12671
12672			// Make a writable jQuery.Event from the native event object
12673			event = jQuery.event.fix( nativeEvent ),
12674
12675			handlers = (
12676				dataPriv.get( this, "events" ) || Object.create( null )
12677			)[ event.type ] || [],
12678			special = jQuery.event.special[ event.type ] || {};
12679
12680		// Use the fix-ed jQuery.Event rather than the (read-only) native event
12681		args[ 0 ] = event;
12682
12683		for ( i = 1; i < arguments.length; i++ ) {
12684			args[ i ] = arguments[ i ];
12685		}
12686
12687		event.delegateTarget = this;
12688
12689		// Call the preDispatch hook for the mapped type, and let it bail if desired
12690		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
12691			return;
12692		}
12693
12694		// Determine handlers
12695		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
12696
12697		// Run delegates first; they may want to stop propagation beneath us
12698		i = 0;
12699		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
12700			event.currentTarget = matched.elem;
12701
12702			j = 0;
12703			while ( ( handleObj = matched.handlers[ j++ ] ) &&
12704				!event.isImmediatePropagationStopped() ) {
12705
12706				// If the event is namespaced, then each handler is only invoked if it is
12707				// specially universal or its namespaces are a superset of the event's.
12708				if ( !event.rnamespace || handleObj.namespace === false ||
12709					event.rnamespace.test( handleObj.namespace ) ) {
12710
12711					event.handleObj = handleObj;
12712					event.data = handleObj.data;
12713
12714					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
12715						handleObj.handler ).apply( matched.elem, args );
12716
12717					if ( ret !== undefined ) {
12718						if ( ( event.result = ret ) === false ) {
12719							event.preventDefault();
12720							event.stopPropagation();
12721						}
12722					}
12723				}
12724			}
12725		}
12726
12727		// Call the postDispatch hook for the mapped type
12728		if ( special.postDispatch ) {
12729			special.postDispatch.call( this, event );
12730		}
12731
12732		return event.result;
12733	},
12734
12735	handlers: function( event, handlers ) {
12736		var i, handleObj, sel, matchedHandlers, matchedSelectors,
12737			handlerQueue = [],
12738			delegateCount = handlers.delegateCount,
12739			cur = event.target;
12740
12741		// Find delegate handlers
12742		if ( delegateCount &&
12743
12744			// Support: IE <=9
12745			// Black-hole SVG <use> instance trees (trac-13180)
12746			cur.nodeType &&
12747
12748			// Support: Firefox <=42
12749			// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
12750			// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
12751			// Support: IE 11 only
12752			// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
12753			!( event.type === "click" && event.button >= 1 ) ) {
12754
12755			for ( ; cur !== this; cur = cur.parentNode || this ) {
12756
12757				// Don't check non-elements (trac-13208)
12758				// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)
12759				if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
12760					matchedHandlers = [];
12761					matchedSelectors = {};
12762					for ( i = 0; i < delegateCount; i++ ) {
12763						handleObj = handlers[ i ];
12764
12765						// Don't conflict with Object.prototype properties (trac-13203)
12766						sel = handleObj.selector + " ";
12767
12768						if ( matchedSelectors[ sel ] === undefined ) {
12769							matchedSelectors[ sel ] = handleObj.needsContext ?
12770								jQuery( sel, this ).index( cur ) > -1 :
12771								jQuery.find( sel, this, null, [ cur ] ).length;
12772						}
12773						if ( matchedSelectors[ sel ] ) {
12774							matchedHandlers.push( handleObj );
12775						}
12776					}
12777					if ( matchedHandlers.length ) {
12778						handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
12779					}
12780				}
12781			}
12782		}
12783
12784		// Add the remaining (directly-bound) handlers
12785		cur = this;
12786		if ( delegateCount < handlers.length ) {
12787			handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
12788		}
12789
12790		return handlerQueue;
12791	},
12792
12793	addProp: function( name, hook ) {
12794		Object.defineProperty( jQuery.Event.prototype, name, {
12795			enumerable: true,
12796			configurable: true,
12797
12798			get: isFunction( hook ) ?
12799				function() {
12800					if ( this.originalEvent ) {
12801						return hook( this.originalEvent );
12802					}
12803				} :
12804				function() {
12805					if ( this.originalEvent ) {
12806						return this.originalEvent[ name ];
12807					}
12808				},
12809
12810			set: function( value ) {
12811				Object.defineProperty( this, name, {
12812					enumerable: true,
12813					configurable: true,
12814					writable: true,
12815					value: value
12816				} );
12817			}
12818		} );
12819	},
12820
12821	fix: function( originalEvent ) {
12822		return originalEvent[ jQuery.expando ] ?
12823			originalEvent :
12824			new jQuery.Event( originalEvent );
12825	},
12826
12827	special: {
12828		load: {
12829
12830			// Prevent triggered image.load events from bubbling to window.load
12831			noBubble: true
12832		},
12833		click: {
12834
12835			// Utilize native event to ensure correct state for checkable inputs
12836			setup: function( data ) {
12837
12838				// For mutual compressibility with _default, replace `this` access with a local var.
12839				// `|| data` is dead code meant only to preserve the variable through minification.
12840				var el = this || data;
12841
12842				// Claim the first handler
12843				if ( rcheckableType.test( el.type ) &&
12844					el.click && nodeName( el, "input" ) ) {
12845
12846					// dataPriv.set( el, "click", ... )
12847					leverageNative( el, "click", true );
12848				}
12849
12850				// Return false to allow normal processing in the caller
12851				return false;
12852			},
12853			trigger: function( data ) {
12854
12855				// For mutual compressibility with _default, replace `this` access with a local var.
12856				// `|| data` is dead code meant only to preserve the variable through minification.
12857				var el = this || data;
12858
12859				// Force setup before triggering a click
12860				if ( rcheckableType.test( el.type ) &&
12861					el.click && nodeName( el, "input" ) ) {
12862
12863					leverageNative( el, "click" );
12864				}
12865
12866				// Return non-false to allow normal event-path propagation
12867				return true;
12868			},
12869
12870			// For cross-browser consistency, suppress native .click() on links
12871			// Also prevent it if we're currently inside a leveraged native-event stack
12872			_default: function( event ) {
12873				var target = event.target;
12874				return rcheckableType.test( target.type ) &&
12875					target.click && nodeName( target, "input" ) &&
12876					dataPriv.get( target, "click" ) ||
12877					nodeName( target, "a" );
12878			}
12879		},
12880
12881		beforeunload: {
12882			postDispatch: function( event ) {
12883
12884				// Support: Firefox 20+
12885				// Firefox doesn't alert if the returnValue field is not set.
12886				if ( event.result !== undefined && event.originalEvent ) {
12887					event.originalEvent.returnValue = event.result;
12888				}
12889			}
12890		}
12891	}
12892};
12893
12894// Ensure the presence of an event listener that handles manually-triggered
12895// synthetic events by interrupting progress until reinvoked in response to
12896// *native* events that it fires directly, ensuring that state changes have
12897// already occurred before other listeners are invoked.
12898function leverageNative( el, type, isSetup ) {
12899
12900	// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add
12901	if ( !isSetup ) {
12902		if ( dataPriv.get( el, type ) === undefined ) {
12903			jQuery.event.add( el, type, returnTrue );
12904		}
12905		return;
12906	}
12907
12908	// Register the controller as a special universal handler for all event namespaces
12909	dataPriv.set( el, type, false );
12910	jQuery.event.add( el, type, {
12911		namespace: false,
12912		handler: function( event ) {
12913			var result,
12914				saved = dataPriv.get( this, type );
12915
12916			if ( ( event.isTrigger & 1 ) && this[ type ] ) {
12917
12918				// Interrupt processing of the outer synthetic .trigger()ed event
12919				if ( !saved ) {
12920
12921					// Store arguments for use when handling the inner native event
12922					// There will always be at least one argument (an event object), so this array
12923					// will not be confused with a leftover capture object.
12924					saved = slice.call( arguments );
12925					dataPriv.set( this, type, saved );
12926
12927					// Trigger the native event and capture its result
12928					this[ type ]();
12929					result = dataPriv.get( this, type );
12930					dataPriv.set( this, type, false );
12931
12932					if ( saved !== result ) {
12933
12934						// Cancel the outer synthetic event
12935						event.stopImmediatePropagation();
12936						event.preventDefault();
12937
12938						return result;
12939					}
12940
12941				// If this is an inner synthetic event for an event with a bubbling surrogate
12942				// (focus or blur), assume that the surrogate already propagated from triggering
12943				// the native event and prevent that from happening again here.
12944				// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
12945				// bubbling surrogate propagates *after* the non-bubbling base), but that seems
12946				// less bad than duplication.
12947				} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
12948					event.stopPropagation();
12949				}
12950
12951			// If this is a native event triggered above, everything is now in order
12952			// Fire an inner synthetic event with the original arguments
12953			} else if ( saved ) {
12954
12955				// ...and capture the result
12956				dataPriv.set( this, type, jQuery.event.trigger(
12957					saved[ 0 ],
12958					saved.slice( 1 ),
12959					this
12960				) );
12961
12962				// Abort handling of the native event by all jQuery handlers while allowing
12963				// native handlers on the same element to run. On target, this is achieved
12964				// by stopping immediate propagation just on the jQuery event. However,
12965				// the native event is re-wrapped by a jQuery one on each level of the
12966				// propagation so the only way to stop it for jQuery is to stop it for
12967				// everyone via native `stopPropagation()`. This is not a problem for
12968				// focus/blur which don't bubble, but it does also stop click on checkboxes
12969				// and radios. We accept this limitation.
12970				event.stopPropagation();
12971				event.isImmediatePropagationStopped = returnTrue;
12972			}
12973		}
12974	} );
12975}
12976
12977jQuery.removeEvent = function( elem, type, handle ) {
12978
12979	// This "if" is needed for plain objects
12980	if ( elem.removeEventListener ) {
12981		elem.removeEventListener( type, handle );
12982	}
12983};
12984
12985jQuery.Event = function( src, props ) {
12986
12987	// Allow instantiation without the 'new' keyword
12988	if ( !( this instanceof jQuery.Event ) ) {
12989		return new jQuery.Event( src, props );
12990	}
12991
12992	// Event object
12993	if ( src && src.type ) {
12994		this.originalEvent = src;
12995		this.type = src.type;
12996
12997		// Events bubbling up the document may have been marked as prevented
12998		// by a handler lower down the tree; reflect the correct value.
12999		this.isDefaultPrevented = src.defaultPrevented ||
13000				src.defaultPrevented === undefined &&
13001
13002				// Support: Android <=2.3 only
13003				src.returnValue === false ?
13004			returnTrue :
13005			returnFalse;
13006
13007		// Create target properties
13008		// Support: Safari <=6 - 7 only
13009		// Target should not be a text node (trac-504, trac-13143)
13010		this.target = ( src.target && src.target.nodeType === 3 ) ?
13011			src.target.parentNode :
13012			src.target;
13013
13014		this.currentTarget = src.currentTarget;
13015		this.relatedTarget = src.relatedTarget;
13016
13017	// Event type
13018	} else {
13019		this.type = src;
13020	}
13021
13022	// Put explicitly provided properties onto the event object
13023	if ( props ) {
13024		jQuery.extend( this, props );
13025	}
13026
13027	// Create a timestamp if incoming event doesn't have one
13028	this.timeStamp = src && src.timeStamp || Date.now();
13029
13030	// Mark it as fixed
13031	this[ jQuery.expando ] = true;
13032};
13033
13034// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
13035// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
13036jQuery.Event.prototype = {
13037	constructor: jQuery.Event,
13038	isDefaultPrevented: returnFalse,
13039	isPropagationStopped: returnFalse,
13040	isImmediatePropagationStopped: returnFalse,
13041	isSimulated: false,
13042
13043	preventDefault: function() {
13044		var e = this.originalEvent;
13045
13046		this.isDefaultPrevented = returnTrue;
13047
13048		if ( e && !this.isSimulated ) {
13049			e.preventDefault();
13050		}
13051	},
13052	stopPropagation: function() {
13053		var e = this.originalEvent;
13054
13055		this.isPropagationStopped = returnTrue;
13056
13057		if ( e && !this.isSimulated ) {
13058			e.stopPropagation();
13059		}
13060	},
13061	stopImmediatePropagation: function() {
13062		var e = this.originalEvent;
13063
13064		this.isImmediatePropagationStopped = returnTrue;
13065
13066		if ( e && !this.isSimulated ) {
13067			e.stopImmediatePropagation();
13068		}
13069
13070		this.stopPropagation();
13071	}
13072};
13073
13074// Includes all common event props including KeyEvent and MouseEvent specific props
13075jQuery.each( {
13076	altKey: true,
13077	bubbles: true,
13078	cancelable: true,
13079	changedTouches: true,
13080	ctrlKey: true,
13081	detail: true,
13082	eventPhase: true,
13083	metaKey: true,
13084	pageX: true,
13085	pageY: true,
13086	shiftKey: true,
13087	view: true,
13088	"char": true,
13089	code: true,
13090	charCode: true,
13091	key: true,
13092	keyCode: true,
13093	button: true,
13094	buttons: true,
13095	clientX: true,
13096	clientY: true,
13097	offsetX: true,
13098	offsetY: true,
13099	pointerId: true,
13100	pointerType: true,
13101	screenX: true,
13102	screenY: true,
13103	targetTouches: true,
13104	toElement: true,
13105	touches: true,
13106	which: true
13107}, jQuery.event.addProp );
13108
13109jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
13110
13111	function focusMappedHandler( nativeEvent ) {
13112		if ( document.documentMode ) {
13113
13114			// Support: IE 11+
13115			// Attach a single focusin/focusout handler on the document while someone wants
13116			// focus/blur. This is because the former are synchronous in IE while the latter
13117			// are async. In other browsers, all those handlers are invoked synchronously.
13118
13119			// `handle` from private data would already wrap the event, but we need
13120			// to change the `type` here.
13121			var handle = dataPriv.get( this, "handle" ),
13122				event = jQuery.event.fix( nativeEvent );
13123			event.type = nativeEvent.type === "focusin" ? "focus" : "blur";
13124			event.isSimulated = true;
13125
13126			// First, handle focusin/focusout
13127			handle( nativeEvent );
13128
13129			// ...then, handle focus/blur
13130			//
13131			// focus/blur don't bubble while focusin/focusout do; simulate the former by only
13132			// invoking the handler at the lower level.
13133			if ( event.target === event.currentTarget ) {
13134
13135				// The setup part calls `leverageNative`, which, in turn, calls
13136				// `jQuery.event.add`, so event handle will already have been set
13137				// by this point.
13138				handle( event );
13139			}
13140		} else {
13141
13142			// For non-IE browsers, attach a single capturing handler on the document
13143			// while someone wants focusin/focusout.
13144			jQuery.event.simulate( delegateType, nativeEvent.target,
13145				jQuery.event.fix( nativeEvent ) );
13146		}
13147	}
13148
13149	jQuery.event.special[ type ] = {
13150
13151		// Utilize native event if possible so blur/focus sequence is correct
13152		setup: function() {
13153
13154			var attaches;
13155
13156			// Claim the first handler
13157			// dataPriv.set( this, "focus", ... )
13158			// dataPriv.set( this, "blur", ... )
13159			leverageNative( this, type, true );
13160
13161			if ( document.documentMode ) {
13162
13163				// Support: IE 9 - 11+
13164				// We use the same native handler for focusin & focus (and focusout & blur)
13165				// so we need to coordinate setup & teardown parts between those events.
13166				// Use `delegateType` as the key as `type` is already used by `leverageNative`.
13167				attaches = dataPriv.get( this, delegateType );
13168				if ( !attaches ) {
13169					this.addEventListener( delegateType, focusMappedHandler );
13170				}
13171				dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );
13172			} else {
13173
13174				// Return false to allow normal processing in the caller
13175				return false;
13176			}
13177		},
13178		trigger: function() {
13179
13180			// Force setup before trigger
13181			leverageNative( this, type );
13182
13183			// Return non-false to allow normal event-path propagation
13184			return true;
13185		},
13186
13187		teardown: function() {
13188			var attaches;
13189
13190			if ( document.documentMode ) {
13191				attaches = dataPriv.get( this, delegateType ) - 1;
13192				if ( !attaches ) {
13193					this.removeEventListener( delegateType, focusMappedHandler );
13194					dataPriv.remove( this, delegateType );
13195				} else {
13196					dataPriv.set( this, delegateType, attaches );
13197				}
13198			} else {
13199
13200				// Return false to indicate standard teardown should be applied
13201				return false;
13202			}
13203		},
13204
13205		// Suppress native focus or blur if we're currently inside
13206		// a leveraged native-event stack
13207		_default: function( event ) {
13208			return dataPriv.get( event.target, type );
13209		},
13210
13211		delegateType: delegateType
13212	};
13213
13214	// Support: Firefox <=44
13215	// Firefox doesn't have focus(in | out) events
13216	// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
13217	//
13218	// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
13219	// focus(in | out) events fire after focus & blur events,
13220	// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
13221	// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
13222	//
13223	// Support: IE 9 - 11+
13224	// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,
13225	// attach a single handler for both events in IE.
13226	jQuery.event.special[ delegateType ] = {
13227		setup: function() {
13228
13229			// Handle: regular nodes (via `this.ownerDocument`), window
13230			// (via `this.document`) & document (via `this`).
13231			var doc = this.ownerDocument || this.document || this,
13232				dataHolder = document.documentMode ? this : doc,
13233				attaches = dataPriv.get( dataHolder, delegateType );
13234
13235			// Support: IE 9 - 11+
13236			// We use the same native handler for focusin & focus (and focusout & blur)
13237			// so we need to coordinate setup & teardown parts between those events.
13238			// Use `delegateType` as the key as `type` is already used by `leverageNative`.
13239			if ( !attaches ) {
13240				if ( document.documentMode ) {
13241					this.addEventListener( delegateType, focusMappedHandler );
13242				} else {
13243					doc.addEventListener( type, focusMappedHandler, true );
13244				}
13245			}
13246			dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );
13247		},
13248		teardown: function() {
13249			var doc = this.ownerDocument || this.document || this,
13250				dataHolder = document.documentMode ? this : doc,
13251				attaches = dataPriv.get( dataHolder, delegateType ) - 1;
13252
13253			if ( !attaches ) {
13254				if ( document.documentMode ) {
13255					this.removeEventListener( delegateType, focusMappedHandler );
13256				} else {
13257					doc.removeEventListener( type, focusMappedHandler, true );
13258				}
13259				dataPriv.remove( dataHolder, delegateType );
13260			} else {
13261				dataPriv.set( dataHolder, delegateType, attaches );
13262			}
13263		}
13264	};
13265} );
13266
13267// Create mouseenter/leave events using mouseover/out and event-time checks
13268// so that event delegation works in jQuery.
13269// Do the same for pointerenter/pointerleave and pointerover/pointerout
13270//
13271// Support: Safari 7 only
13272// Safari sends mouseenter too often; see:
13273// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
13274// for the description of the bug (it existed in older Chrome versions as well).
13275jQuery.each( {
13276	mouseenter: "mouseover",
13277	mouseleave: "mouseout",
13278	pointerenter: "pointerover",
13279	pointerleave: "pointerout"
13280}, function( orig, fix ) {
13281	jQuery.event.special[ orig ] = {
13282		delegateType: fix,
13283		bindType: fix,
13284
13285		handle: function( event ) {
13286			var ret,
13287				target = this,
13288				related = event.relatedTarget,
13289				handleObj = event.handleObj;
13290
13291			// For mouseenter/leave call the handler if related is outside the target.
13292			// NB: No relatedTarget if the mouse left/entered the browser window
13293			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
13294				event.type = handleObj.origType;
13295				ret = handleObj.handler.apply( this, arguments );
13296				event.type = fix;
13297			}
13298			return ret;
13299		}
13300	};
13301} );
13302
13303jQuery.fn.extend( {
13304
13305	on: function( types, selector, data, fn ) {
13306		return on( this, types, selector, data, fn );
13307	},
13308	one: function( types, selector, data, fn ) {
13309		return on( this, types, selector, data, fn, 1 );
13310	},
13311	off: function( types, selector, fn ) {
13312		var handleObj, type;
13313		if ( types && types.preventDefault && types.handleObj ) {
13314
13315			// ( event )  dispatched jQuery.Event
13316			handleObj = types.handleObj;
13317			jQuery( types.delegateTarget ).off(
13318				handleObj.namespace ?
13319					handleObj.origType + "." + handleObj.namespace :
13320					handleObj.origType,
13321				handleObj.selector,
13322				handleObj.handler
13323			);
13324			return this;
13325		}
13326		if ( typeof types === "object" ) {
13327
13328			// ( types-object [, selector] )
13329			for ( type in types ) {
13330				this.off( type, selector, types[ type ] );
13331			}
13332			return this;
13333		}
13334		if ( selector === false || typeof selector === "function" ) {
13335
13336			// ( types [, fn] )
13337			fn = selector;
13338			selector = undefined;
13339		}
13340		if ( fn === false ) {
13341			fn = returnFalse;
13342		}
13343		return this.each( function() {
13344			jQuery.event.remove( this, types, fn, selector );
13345		} );
13346	}
13347} );
13348
13349
13350var
13351
13352	// Support: IE <=10 - 11, Edge 12 - 13 only
13353	// In IE/Edge using regex groups here causes severe slowdowns.
13354	// See https://connect.microsoft.com/IE/feedback/details/1736512/
13355	rnoInnerhtml = /<script|<style|<link/i,
13356
13357	// checked="checked" or checked
13358	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
13359
13360	rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g;
13361
13362// Prefer a tbody over its parent table for containing new rows
13363function manipulationTarget( elem, content ) {
13364	if ( nodeName( elem, "table" ) &&
13365		nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
13366
13367		return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
13368	}
13369
13370	return elem;
13371}
13372
13373// Replace/restore the type attribute of script elements for safe DOM manipulation
13374function disableScript( elem ) {
13375	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
13376	return elem;
13377}
13378function restoreScript( elem ) {
13379	if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
13380		elem.type = elem.type.slice( 5 );
13381	} else {
13382		elem.removeAttribute( "type" );
13383	}
13384
13385	return elem;
13386}
13387
13388function cloneCopyEvent( src, dest ) {
13389	var i, l, type, pdataOld, udataOld, udataCur, events;
13390
13391	if ( dest.nodeType !== 1 ) {
13392		return;
13393	}
13394
13395	// 1. Copy private data: events, handlers, etc.
13396	if ( dataPriv.hasData( src ) ) {
13397		pdataOld = dataPriv.get( src );
13398		events = pdataOld.events;
13399
13400		if ( events ) {
13401			dataPriv.remove( dest, "handle events" );
13402
13403			for ( type in events ) {
13404				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
13405					jQuery.event.add( dest, type, events[ type ][ i ] );
13406				}
13407			}
13408		}
13409	}
13410
13411	// 2. Copy user data
13412	if ( dataUser.hasData( src ) ) {
13413		udataOld = dataUser.access( src );
13414		udataCur = jQuery.extend( {}, udataOld );
13415
13416		dataUser.set( dest, udataCur );
13417	}
13418}
13419
13420// Fix IE bugs, see support tests
13421function fixInput( src, dest ) {
13422	var nodeName = dest.nodeName.toLowerCase();
13423
13424	// Fails to persist the checked state of a cloned checkbox or radio button.
13425	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
13426		dest.checked = src.checked;
13427
13428	// Fails to return the selected option to the default selected state when cloning options
13429	} else if ( nodeName === "input" || nodeName === "textarea" ) {
13430		dest.defaultValue = src.defaultValue;
13431	}
13432}
13433
13434function domManip( collection, args, callback, ignored ) {
13435
13436	// Flatten any nested arrays
13437	args = flat( args );
13438
13439	var fragment, first, scripts, hasScripts, node, doc,
13440		i = 0,
13441		l = collection.length,
13442		iNoClone = l - 1,
13443		value = args[ 0 ],
13444		valueIsFunction = isFunction( value );
13445
13446	// We can't cloneNode fragments that contain checked, in WebKit
13447	if ( valueIsFunction ||
13448			( l > 1 && typeof value === "string" &&
13449				!support.checkClone && rchecked.test( value ) ) ) {
13450		return collection.each( function( index ) {
13451			var self = collection.eq( index );
13452			if ( valueIsFunction ) {
13453				args[ 0 ] = value.call( this, index, self.html() );
13454			}
13455			domManip( self, args, callback, ignored );
13456		} );
13457	}
13458
13459	if ( l ) {
13460		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
13461		first = fragment.firstChild;
13462
13463		if ( fragment.childNodes.length === 1 ) {
13464			fragment = first;
13465		}
13466
13467		// Require either new content or an interest in ignored elements to invoke the callback
13468		if ( first || ignored ) {
13469			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
13470			hasScripts = scripts.length;
13471
13472			// Use the original fragment for the last item
13473			// instead of the first because it can end up
13474			// being emptied incorrectly in certain situations (trac-8070).
13475			for ( ; i < l; i++ ) {
13476				node = fragment;
13477
13478				if ( i !== iNoClone ) {
13479					node = jQuery.clone( node, true, true );
13480
13481					// Keep references to cloned scripts for later restoration
13482					if ( hasScripts ) {
13483
13484						// Support: Android <=4.0 only, PhantomJS 1 only
13485						// push.apply(_, arraylike) throws on ancient WebKit
13486						jQuery.merge( scripts, getAll( node, "script" ) );
13487					}
13488				}
13489
13490				callback.call( collection[ i ], node, i );
13491			}
13492
13493			if ( hasScripts ) {
13494				doc = scripts[ scripts.length - 1 ].ownerDocument;
13495
13496				// Re-enable scripts
13497				jQuery.map( scripts, restoreScript );
13498
13499				// Evaluate executable scripts on first document insertion
13500				for ( i = 0; i < hasScripts; i++ ) {
13501					node = scripts[ i ];
13502					if ( rscriptType.test( node.type || "" ) &&
13503						!dataPriv.access( node, "globalEval" ) &&
13504						jQuery.contains( doc, node ) ) {
13505
13506						if ( node.src && ( node.type || "" ).toLowerCase()  !== "module" ) {
13507
13508							// Optional AJAX dependency, but won't run scripts if not present
13509							if ( jQuery._evalUrl && !node.noModule ) {
13510								jQuery._evalUrl( node.src, {
13511									nonce: node.nonce || node.getAttribute( "nonce" )
13512								}, doc );
13513							}
13514						} else {
13515
13516							// Unwrap a CDATA section containing script contents. This shouldn't be
13517							// needed as in XML documents they're already not visible when
13518							// inspecting element contents and in HTML documents they have no
13519							// meaning but we're preserving that logic for backwards compatibility.
13520							// This will be removed completely in 4.0. See gh-4904.
13521							DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
13522						}
13523					}
13524				}
13525			}
13526		}
13527	}
13528
13529	return collection;
13530}
13531
13532function remove( elem, selector, keepData ) {
13533	var node,
13534		nodes = selector ? jQuery.filter( selector, elem ) : elem,
13535		i = 0;
13536
13537	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
13538		if ( !keepData && node.nodeType === 1 ) {
13539			jQuery.cleanData( getAll( node ) );
13540		}
13541
13542		if ( node.parentNode ) {
13543			if ( keepData && isAttached( node ) ) {
13544				setGlobalEval( getAll( node, "script" ) );
13545			}
13546			node.parentNode.removeChild( node );
13547		}
13548	}
13549
13550	return elem;
13551}
13552
13553jQuery.extend( {
13554	htmlPrefilter: function( html ) {
13555		return html;
13556	},
13557
13558	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
13559		var i, l, srcElements, destElements,
13560			clone = elem.cloneNode( true ),
13561			inPage = isAttached( elem );
13562
13563		// Fix IE cloning issues
13564		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
13565				!jQuery.isXMLDoc( elem ) ) {
13566
13567			// We eschew jQuery#find here for performance reasons:
13568			// https://jsperf.com/getall-vs-sizzle/2
13569			destElements = getAll( clone );
13570			srcElements = getAll( elem );
13571
13572			for ( i = 0, l = srcElements.length; i < l; i++ ) {
13573				fixInput( srcElements[ i ], destElements[ i ] );
13574			}
13575		}
13576
13577		// Copy the events from the original to the clone
13578		if ( dataAndEvents ) {
13579			if ( deepDataAndEvents ) {
13580				srcElements = srcElements || getAll( elem );
13581				destElements = destElements || getAll( clone );
13582
13583				for ( i = 0, l = srcElements.length; i < l; i++ ) {
13584					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
13585				}
13586			} else {
13587				cloneCopyEvent( elem, clone );
13588			}
13589		}
13590
13591		// Preserve script evaluation history
13592		destElements = getAll( clone, "script" );
13593		if ( destElements.length > 0 ) {
13594			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
13595		}
13596
13597		// Return the cloned set
13598		return clone;
13599	},
13600
13601	cleanData: function( elems ) {
13602		var data, elem, type,
13603			special = jQuery.event.special,
13604			i = 0;
13605
13606		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
13607			if ( acceptData( elem ) ) {
13608				if ( ( data = elem[ dataPriv.expando ] ) ) {
13609					if ( data.events ) {
13610						for ( type in data.events ) {
13611							if ( special[ type ] ) {
13612								jQuery.event.remove( elem, type );
13613
13614							// This is a shortcut to avoid jQuery.event.remove's overhead
13615							} else {
13616								jQuery.removeEvent( elem, type, data.handle );
13617							}
13618						}
13619					}
13620
13621					// Support: Chrome <=35 - 45+
13622					// Assign undefined instead of using delete, see Data#remove
13623					elem[ dataPriv.expando ] = undefined;
13624				}
13625				if ( elem[ dataUser.expando ] ) {
13626
13627					// Support: Chrome <=35 - 45+
13628					// Assign undefined instead of using delete, see Data#remove
13629					elem[ dataUser.expando ] = undefined;
13630				}
13631			}
13632		}
13633	}
13634} );
13635
13636jQuery.fn.extend( {
13637	detach: function( selector ) {
13638		return remove( this, selector, true );
13639	},
13640
13641	remove: function( selector ) {
13642		return remove( this, selector );
13643	},
13644
13645	text: function( value ) {
13646		return access( this, function( value ) {
13647			return value === undefined ?
13648				jQuery.text( this ) :
13649				this.empty().each( function() {
13650					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
13651						this.textContent = value;
13652					}
13653				} );
13654		}, null, value, arguments.length );
13655	},
13656
13657	append: function() {
13658		return domManip( this, arguments, function( elem ) {
13659			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
13660				var target = manipulationTarget( this, elem );
13661				target.appendChild( elem );
13662			}
13663		} );
13664	},
13665
13666	prepend: function() {
13667		return domManip( this, arguments, function( elem ) {
13668			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
13669				var target = manipulationTarget( this, elem );
13670				target.insertBefore( elem, target.firstChild );
13671			}
13672		} );
13673	},
13674
13675	before: function() {
13676		return domManip( this, arguments, function( elem ) {
13677			if ( this.parentNode ) {
13678				this.parentNode.insertBefore( elem, this );
13679			}
13680		} );
13681	},
13682
13683	after: function() {
13684		return domManip( this, arguments, function( elem ) {
13685			if ( this.parentNode ) {
13686				this.parentNode.insertBefore( elem, this.nextSibling );
13687			}
13688		} );
13689	},
13690
13691	empty: function() {
13692		var elem,
13693			i = 0;
13694
13695		for ( ; ( elem = this[ i ] ) != null; i++ ) {
13696			if ( elem.nodeType === 1 ) {
13697
13698				// Prevent memory leaks
13699				jQuery.cleanData( getAll( elem, false ) );
13700
13701				// Remove any remaining nodes
13702				elem.textContent = "";
13703			}
13704		}
13705
13706		return this;
13707	},
13708
13709	clone: function( dataAndEvents, deepDataAndEvents ) {
13710		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
13711		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
13712
13713		return this.map( function() {
13714			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
13715		} );
13716	},
13717
13718	html: function( value ) {
13719		return access( this, function( value ) {
13720			var elem = this[ 0 ] || {},
13721				i = 0,
13722				l = this.length;
13723
13724			if ( value === undefined && elem.nodeType === 1 ) {
13725				return elem.innerHTML;
13726			}
13727
13728			// See if we can take a shortcut and just use innerHTML
13729			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
13730				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
13731
13732				value = jQuery.htmlPrefilter( value );
13733
13734				try {
13735					for ( ; i < l; i++ ) {
13736						elem = this[ i ] || {};
13737
13738						// Remove element nodes and prevent memory leaks
13739						if ( elem.nodeType === 1 ) {
13740							jQuery.cleanData( getAll( elem, false ) );
13741							elem.innerHTML = value;
13742						}
13743					}
13744
13745					elem = 0;
13746
13747				// If using innerHTML throws an exception, use the fallback method
13748				} catch ( e ) {}
13749			}
13750
13751			if ( elem ) {
13752				this.empty().append( value );
13753			}
13754		}, null, value, arguments.length );
13755	},
13756
13757	replaceWith: function() {
13758		var ignored = [];
13759
13760		// Make the changes, replacing each non-ignored context element with the new content
13761		return domManip( this, arguments, function( elem ) {
13762			var parent = this.parentNode;
13763
13764			if ( jQuery.inArray( this, ignored ) < 0 ) {
13765				jQuery.cleanData( getAll( this ) );
13766				if ( parent ) {
13767					parent.replaceChild( elem, this );
13768				}
13769			}
13770
13771		// Force callback invocation
13772		}, ignored );
13773	}
13774} );
13775
13776jQuery.each( {
13777	appendTo: "append",
13778	prependTo: "prepend",
13779	insertBefore: "before",
13780	insertAfter: "after",
13781	replaceAll: "replaceWith"
13782}, function( name, original ) {
13783	jQuery.fn[ name ] = function( selector ) {
13784		var elems,
13785			ret = [],
13786			insert = jQuery( selector ),
13787			last = insert.length - 1,
13788			i = 0;
13789
13790		for ( ; i <= last; i++ ) {
13791			elems = i === last ? this : this.clone( true );
13792			jQuery( insert[ i ] )[ original ]( elems );
13793
13794			// Support: Android <=4.0 only, PhantomJS 1 only
13795			// .get() because push.apply(_, arraylike) throws on ancient WebKit
13796			push.apply( ret, elems.get() );
13797		}
13798
13799		return this.pushStack( ret );
13800	};
13801} );
13802var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
13803
13804var rcustomProp = /^--/;
13805
13806
13807var getStyles = function( elem ) {
13808
13809		// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)
13810		// IE throws on elements created in popups
13811		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
13812		var view = elem.ownerDocument.defaultView;
13813
13814		if ( !view || !view.opener ) {
13815			view = window;
13816		}
13817
13818		return view.getComputedStyle( elem );
13819	};
13820
13821var swap = function( elem, options, callback ) {
13822	var ret, name,
13823		old = {};
13824
13825	// Remember the old values, and insert the new ones
13826	for ( name in options ) {
13827		old[ name ] = elem.style[ name ];
13828		elem.style[ name ] = options[ name ];
13829	}
13830
13831	ret = callback.call( elem );
13832
13833	// Revert the old values
13834	for ( name in options ) {
13835		elem.style[ name ] = old[ name ];
13836	}
13837
13838	return ret;
13839};
13840
13841
13842var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
13843
13844
13845
13846( function() {
13847
13848	// Executing both pixelPosition & boxSizingReliable tests require only one layout
13849	// so they're executed at the same time to save the second computation.
13850	function computeStyleTests() {
13851
13852		// This is a singleton, we need to execute it only once
13853		if ( !div ) {
13854			return;
13855		}
13856
13857		container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
13858			"margin-top:1px;padding:0;border:0";
13859		div.style.cssText =
13860			"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
13861			"margin:auto;border:1px;padding:1px;" +
13862			"width:60%;top:1%";
13863		documentElement.appendChild( container ).appendChild( div );
13864
13865		var divStyle = window.getComputedStyle( div );
13866		pixelPositionVal = divStyle.top !== "1%";
13867
13868		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
13869		reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
13870
13871		// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
13872		// Some styles come back with percentage values, even though they shouldn't
13873		div.style.right = "60%";
13874		pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
13875
13876		// Support: IE 9 - 11 only
13877		// Detect misreporting of content dimensions for box-sizing:border-box elements
13878		boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
13879
13880		// Support: IE 9 only
13881		// Detect overflow:scroll screwiness (gh-3699)
13882		// Support: Chrome <=64
13883		// Don't get tricked when zoom affects offsetWidth (gh-4029)
13884		div.style.position = "absolute";
13885		scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
13886
13887		documentElement.removeChild( container );
13888
13889		// Nullify the div so it wouldn't be stored in the memory and
13890		// it will also be a sign that checks already performed
13891		div = null;
13892	}
13893
13894	function roundPixelMeasures( measure ) {
13895		return Math.round( parseFloat( measure ) );
13896	}
13897
13898	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
13899		reliableTrDimensionsVal, reliableMarginLeftVal,
13900		container = document.createElement( "div" ),
13901		div = document.createElement( "div" );
13902
13903	// Finish early in limited (non-browser) environments
13904	if ( !div.style ) {
13905		return;
13906	}
13907
13908	// Support: IE <=9 - 11 only
13909	// Style of cloned element affects source element cloned (trac-8908)
13910	div.style.backgroundClip = "content-box";
13911	div.cloneNode( true ).style.backgroundClip = "";
13912	support.clearCloneStyle = div.style.backgroundClip === "content-box";
13913
13914	jQuery.extend( support, {
13915		boxSizingReliable: function() {
13916			computeStyleTests();
13917			return boxSizingReliableVal;
13918		},
13919		pixelBoxStyles: function() {
13920			computeStyleTests();
13921			return pixelBoxStylesVal;
13922		},
13923		pixelPosition: function() {
13924			computeStyleTests();
13925			return pixelPositionVal;
13926		},
13927		reliableMarginLeft: function() {
13928			computeStyleTests();
13929			return reliableMarginLeftVal;
13930		},
13931		scrollboxSize: function() {
13932			computeStyleTests();
13933			return scrollboxSizeVal;
13934		},
13935
13936		// Support: IE 9 - 11+, Edge 15 - 18+
13937		// IE/Edge misreport `getComputedStyle` of table rows with width/height
13938		// set in CSS while `offset*` properties report correct values.
13939		// Behavior in IE 9 is more subtle than in newer versions & it passes
13940		// some versions of this test; make sure not to make it pass there!
13941		//
13942		// Support: Firefox 70+
13943		// Only Firefox includes border widths
13944		// in computed dimensions. (gh-4529)
13945		reliableTrDimensions: function() {
13946			var table, tr, trChild, trStyle;
13947			if ( reliableTrDimensionsVal == null ) {
13948				table = document.createElement( "table" );
13949				tr = document.createElement( "tr" );
13950				trChild = document.createElement( "div" );
13951
13952				table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
13953				tr.style.cssText = "box-sizing:content-box;border:1px solid";
13954
13955				// Support: Chrome 86+
13956				// Height set through cssText does not get applied.
13957				// Computed height then comes back as 0.
13958				tr.style.height = "1px";
13959				trChild.style.height = "9px";
13960
13961				// Support: Android 8 Chrome 86+
13962				// In our bodyBackground.html iframe,
13963				// display for all div elements is set to "inline",
13964				// which causes a problem only in Android 8 Chrome 86.
13965				// Ensuring the div is `display: block`
13966				// gets around this issue.
13967				trChild.style.display = "block";
13968
13969				documentElement
13970					.appendChild( table )
13971					.appendChild( tr )
13972					.appendChild( trChild );
13973
13974				trStyle = window.getComputedStyle( tr );
13975				reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
13976					parseInt( trStyle.borderTopWidth, 10 ) +
13977					parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
13978
13979				documentElement.removeChild( table );
13980			}
13981			return reliableTrDimensionsVal;
13982		}
13983	} );
13984} )();
13985
13986
13987function curCSS( elem, name, computed ) {
13988	var width, minWidth, maxWidth, ret,
13989		isCustomProp = rcustomProp.test( name ),
13990
13991		// Support: Firefox 51+
13992		// Retrieving style before computed somehow
13993		// fixes an issue with getting wrong values
13994		// on detached elements
13995		style = elem.style;
13996
13997	computed = computed || getStyles( elem );
13998
13999	// getPropertyValue is needed for:
14000	//   .css('filter') (IE 9 only, trac-12537)
14001	//   .css('--customProperty) (gh-3144)
14002	if ( computed ) {
14003
14004		// Support: IE <=9 - 11+
14005		// IE only supports `"float"` in `getPropertyValue`; in computed styles
14006		// it's only available as `"cssFloat"`. We no longer modify properties
14007		// sent to `.css()` apart from camelCasing, so we need to check both.
14008		// Normally, this would create difference in behavior: if
14009		// `getPropertyValue` returns an empty string, the value returned
14010		// by `.css()` would be `undefined`. This is usually the case for
14011		// disconnected elements. However, in IE even disconnected elements
14012		// with no styles return `"none"` for `getPropertyValue( "float" )`
14013		ret = computed.getPropertyValue( name ) || computed[ name ];
14014
14015		if ( isCustomProp && ret ) {
14016
14017			// Support: Firefox 105+, Chrome <=105+
14018			// Spec requires trimming whitespace for custom properties (gh-4926).
14019			// Firefox only trims leading whitespace. Chrome just collapses
14020			// both leading & trailing whitespace to a single space.
14021			//
14022			// Fall back to `undefined` if empty string returned.
14023			// This collapses a missing definition with property defined
14024			// and set to an empty string but there's no standard API
14025			// allowing us to differentiate them without a performance penalty
14026			// and returning `undefined` aligns with older jQuery.
14027			//
14028			// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED
14029			// as whitespace while CSS does not, but this is not a problem
14030			// because CSS preprocessing replaces them with U+000A LINE FEED
14031			// (which *is* CSS whitespace)
14032			// https://www.w3.org/TR/css-syntax-3/#input-preprocessing
14033			ret = ret.replace( rtrimCSS, "$1" ) || undefined;
14034		}
14035
14036		if ( ret === "" && !isAttached( elem ) ) {
14037			ret = jQuery.style( elem, name );
14038		}
14039
14040		// A tribute to the "awesome hack by Dean Edwards"
14041		// Android Browser returns percentage for some values,
14042		// but width seems to be reliably pixels.
14043		// This is against the CSSOM draft spec:
14044		// https://drafts.csswg.org/cssom/#resolved-values
14045		if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
14046
14047			// Remember the original values
14048			width = style.width;
14049			minWidth = style.minWidth;
14050			maxWidth = style.maxWidth;
14051
14052			// Put in the new values to get a computed value out
14053			style.minWidth = style.maxWidth = style.width = ret;
14054			ret = computed.width;
14055
14056			// Revert the changed values
14057			style.width = width;
14058			style.minWidth = minWidth;
14059			style.maxWidth = maxWidth;
14060		}
14061	}
14062
14063	return ret !== undefined ?
14064
14065		// Support: IE <=9 - 11 only
14066		// IE returns zIndex value as an integer.
14067		ret + "" :
14068		ret;
14069}
14070
14071
14072function addGetHookIf( conditionFn, hookFn ) {
14073
14074	// Define the hook, we'll check on the first run if it's really needed.
14075	return {
14076		get: function() {
14077			if ( conditionFn() ) {
14078
14079				// Hook not needed (or it's not possible to use it due
14080				// to missing dependency), remove it.
14081				delete this.get;
14082				return;
14083			}
14084
14085			// Hook needed; redefine it so that the support test is not executed again.
14086			return ( this.get = hookFn ).apply( this, arguments );
14087		}
14088	};
14089}
14090
14091
14092var cssPrefixes = [ "Webkit", "Moz", "ms" ],
14093	emptyStyle = document.createElement( "div" ).style,
14094	vendorProps = {};
14095
14096// Return a vendor-prefixed property or undefined
14097function vendorPropName( name ) {
14098
14099	// Check for vendor prefixed names
14100	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
14101		i = cssPrefixes.length;
14102
14103	while ( i-- ) {
14104		name = cssPrefixes[ i ] + capName;
14105		if ( name in emptyStyle ) {
14106			return name;
14107		}
14108	}
14109}
14110
14111// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
14112function finalPropName( name ) {
14113	var final = jQuery.cssProps[ name ] || vendorProps[ name ];
14114
14115	if ( final ) {
14116		return final;
14117	}
14118	if ( name in emptyStyle ) {
14119		return name;
14120	}
14121	return vendorProps[ name ] = vendorPropName( name ) || name;
14122}
14123
14124
14125var
14126
14127	// Swappable if display is none or starts with table
14128	// except "table", "table-cell", or "table-caption"
14129	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
14130	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
14131	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
14132	cssNormalTransform = {
14133		letterSpacing: "0",
14134		fontWeight: "400"
14135	};
14136
14137function setPositiveNumber( _elem, value, subtract ) {
14138
14139	// Any relative (+/-) values have already been
14140	// normalized at this point
14141	var matches = rcssNum.exec( value );
14142	return matches ?
14143
14144		// Guard against undefined "subtract", e.g., when used as in cssHooks
14145		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
14146		value;
14147}
14148
14149function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
14150	var i = dimension === "width" ? 1 : 0,
14151		extra = 0,
14152		delta = 0,
14153		marginDelta = 0;
14154
14155	// Adjustment may not be necessary
14156	if ( box === ( isBorderBox ? "border" : "content" ) ) {
14157		return 0;
14158	}
14159
14160	for ( ; i < 4; i += 2 ) {
14161
14162		// Both box models exclude margin
14163		// Count margin delta separately to only add it after scroll gutter adjustment.
14164		// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).
14165		if ( box === "margin" ) {
14166			marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
14167		}
14168
14169		// If we get here with a content-box, we're seeking "padding" or "border" or "margin"
14170		if ( !isBorderBox ) {
14171
14172			// Add padding
14173			delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
14174
14175			// For "border" or "margin", add border
14176			if ( box !== "padding" ) {
14177				delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
14178
14179			// But still keep track of it otherwise
14180			} else {
14181				extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
14182			}
14183
14184		// If we get here with a border-box (content + padding + border), we're seeking "content" or
14185		// "padding" or "margin"
14186		} else {
14187
14188			// For "content", subtract padding
14189			if ( box === "content" ) {
14190				delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
14191			}
14192
14193			// For "content" or "padding", subtract border
14194			if ( box !== "margin" ) {
14195				delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
14196			}
14197		}
14198	}
14199
14200	// Account for positive content-box scroll gutter when requested by providing computedVal
14201	if ( !isBorderBox && computedVal >= 0 ) {
14202
14203		// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
14204		// Assuming integer scroll gutter, subtract the rest and round down
14205		delta += Math.max( 0, Math.ceil(
14206			elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
14207			computedVal -
14208			delta -
14209			extra -
14210			0.5
14211
14212		// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
14213		// Use an explicit zero to avoid NaN (gh-3964)
14214		) ) || 0;
14215	}
14216
14217	return delta + marginDelta;
14218}
14219
14220function getWidthOrHeight( elem, dimension, extra ) {
14221
14222	// Start with computed style
14223	var styles = getStyles( elem ),
14224
14225		// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
14226		// Fake content-box until we know it's needed to know the true value.
14227		boxSizingNeeded = !support.boxSizingReliable() || extra,
14228		isBorderBox = boxSizingNeeded &&
14229			jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
14230		valueIsBorderBox = isBorderBox,
14231
14232		val = curCSS( elem, dimension, styles ),
14233		offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
14234
14235	// Support: Firefox <=54
14236	// Return a confounding non-pixel value or feign ignorance, as appropriate.
14237	if ( rnumnonpx.test( val ) ) {
14238		if ( !extra ) {
14239			return val;
14240		}
14241		val = "auto";
14242	}
14243
14244
14245	// Support: IE 9 - 11 only
14246	// Use offsetWidth/offsetHeight for when box sizing is unreliable.
14247	// In those cases, the computed value can be trusted to be border-box.
14248	if ( ( !support.boxSizingReliable() && isBorderBox ||
14249
14250		// Support: IE 10 - 11+, Edge 15 - 18+
14251		// IE/Edge misreport `getComputedStyle` of table rows with width/height
14252		// set in CSS while `offset*` properties report correct values.
14253		// Interestingly, in some cases IE 9 doesn't suffer from this issue.
14254		!support.reliableTrDimensions() && nodeName( elem, "tr" ) ||
14255
14256		// Fall back to offsetWidth/offsetHeight when value is "auto"
14257		// This happens for inline elements with no explicit setting (gh-3571)
14258		val === "auto" ||
14259
14260		// Support: Android <=4.1 - 4.3 only
14261		// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
14262		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
14263
14264		// Make sure the element is visible & connected
14265		elem.getClientRects().length ) {
14266
14267		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
14268
14269		// Where available, offsetWidth/offsetHeight approximate border box dimensions.
14270		// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
14271		// retrieved value as a content box dimension.
14272		valueIsBorderBox = offsetProp in elem;
14273		if ( valueIsBorderBox ) {
14274			val = elem[ offsetProp ];
14275		}
14276	}
14277
14278	// Normalize "" and auto
14279	val = parseFloat( val ) || 0;
14280
14281	// Adjust for the element's box model
14282	return ( val +
14283		boxModelAdjustment(
14284			elem,
14285			dimension,
14286			extra || ( isBorderBox ? "border" : "content" ),
14287			valueIsBorderBox,
14288			styles,
14289
14290			// Provide the current computed size to request scroll gutter calculation (gh-3589)
14291			val
14292		)
14293	) + "px";
14294}
14295
14296jQuery.extend( {
14297
14298	// Add in style property hooks for overriding the default
14299	// behavior of getting and setting a style property
14300	cssHooks: {
14301		opacity: {
14302			get: function( elem, computed ) {
14303				if ( computed ) {
14304
14305					// We should always get a number back from opacity
14306					var ret = curCSS( elem, "opacity" );
14307					return ret === "" ? "1" : ret;
14308				}
14309			}
14310		}
14311	},
14312
14313	// Don't automatically add "px" to these possibly-unitless properties
14314	cssNumber: {
14315		animationIterationCount: true,
14316		aspectRatio: true,
14317		borderImageSlice: true,
14318		columnCount: true,
14319		flexGrow: true,
14320		flexShrink: true,
14321		fontWeight: true,
14322		gridArea: true,
14323		gridColumn: true,
14324		gridColumnEnd: true,
14325		gridColumnStart: true,
14326		gridRow: true,
14327		gridRowEnd: true,
14328		gridRowStart: true,
14329		lineHeight: true,
14330		opacity: true,
14331		order: true,
14332		orphans: true,
14333		scale: true,
14334		widows: true,
14335		zIndex: true,
14336		zoom: true,
14337
14338		// SVG-related
14339		fillOpacity: true,
14340		floodOpacity: true,
14341		stopOpacity: true,
14342		strokeMiterlimit: true,
14343		strokeOpacity: true
14344	},
14345
14346	// Add in properties whose names you wish to fix before
14347	// setting or getting the value
14348	cssProps: {},
14349
14350	// Get and set the style property on a DOM Node
14351	style: function( elem, name, value, extra ) {
14352
14353		// Don't set styles on text and comment nodes
14354		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
14355			return;
14356		}
14357
14358		// Make sure that we're working with the right name
14359		var ret, type, hooks,
14360			origName = camelCase( name ),
14361			isCustomProp = rcustomProp.test( name ),
14362			style = elem.style;
14363
14364		// Make sure that we're working with the right name. We don't
14365		// want to query the value if it is a CSS custom property
14366		// since they are user-defined.
14367		if ( !isCustomProp ) {
14368			name = finalPropName( origName );
14369		}
14370
14371		// Gets hook for the prefixed version, then unprefixed version
14372		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
14373
14374		// Check if we're setting a value
14375		if ( value !== undefined ) {
14376			type = typeof value;
14377
14378			// Convert "+=" or "-=" to relative numbers (trac-7345)
14379			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
14380				value = adjustCSS( elem, name, ret );
14381
14382				// Fixes bug trac-9237
14383				type = "number";
14384			}
14385
14386			// Make sure that null and NaN values aren't set (trac-7116)
14387			if ( value == null || value !== value ) {
14388				return;
14389			}
14390
14391			// If a number was passed in, add the unit (except for certain CSS properties)
14392			// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
14393			// "px" to a few hardcoded values.
14394			if ( type === "number" && !isCustomProp ) {
14395				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
14396			}
14397
14398			// background-* props affect original clone's values
14399			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
14400				style[ name ] = "inherit";
14401			}
14402
14403			// If a hook was provided, use that value, otherwise just set the specified value
14404			if ( !hooks || !( "set" in hooks ) ||
14405				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
14406
14407				if ( isCustomProp ) {
14408					style.setProperty( name, value );
14409				} else {
14410					style[ name ] = value;
14411				}
14412			}
14413
14414		} else {
14415
14416			// If a hook was provided get the non-computed value from there
14417			if ( hooks && "get" in hooks &&
14418				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
14419
14420				return ret;
14421			}
14422
14423			// Otherwise just get the value from the style object
14424			return style[ name ];
14425		}
14426	},
14427
14428	css: function( elem, name, extra, styles ) {
14429		var val, num, hooks,
14430			origName = camelCase( name ),
14431			isCustomProp = rcustomProp.test( name );
14432
14433		// Make sure that we're working with the right name. We don't
14434		// want to modify the value if it is a CSS custom property
14435		// since they are user-defined.
14436		if ( !isCustomProp ) {
14437			name = finalPropName( origName );
14438		}
14439
14440		// Try prefixed name followed by the unprefixed name
14441		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
14442
14443		// If a hook was provided get the computed value from there
14444		if ( hooks && "get" in hooks ) {
14445			val = hooks.get( elem, true, extra );
14446		}
14447
14448		// Otherwise, if a way to get the computed value exists, use that
14449		if ( val === undefined ) {
14450			val = curCSS( elem, name, styles );
14451		}
14452
14453		// Convert "normal" to computed value
14454		if ( val === "normal" && name in cssNormalTransform ) {
14455			val = cssNormalTransform[ name ];
14456		}
14457
14458		// Make numeric if forced or a qualifier was provided and val looks numeric
14459		if ( extra === "" || extra ) {
14460			num = parseFloat( val );
14461			return extra === true || isFinite( num ) ? num || 0 : val;
14462		}
14463
14464		return val;
14465	}
14466} );
14467
14468jQuery.each( [ "height", "width" ], function( _i, dimension ) {
14469	jQuery.cssHooks[ dimension ] = {
14470		get: function( elem, computed, extra ) {
14471			if ( computed ) {
14472
14473				// Certain elements can have dimension info if we invisibly show them
14474				// but it must have a current display style that would benefit
14475				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
14476
14477					// Support: Safari 8+
14478					// Table columns in Safari have non-zero offsetWidth & zero
14479					// getBoundingClientRect().width unless display is changed.
14480					// Support: IE <=11 only
14481					// Running getBoundingClientRect on a disconnected node
14482					// in IE throws an error.
14483					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
14484					swap( elem, cssShow, function() {
14485						return getWidthOrHeight( elem, dimension, extra );
14486					} ) :
14487					getWidthOrHeight( elem, dimension, extra );
14488			}
14489		},
14490
14491		set: function( elem, value, extra ) {
14492			var matches,
14493				styles = getStyles( elem ),
14494
14495				// Only read styles.position if the test has a chance to fail
14496				// to avoid forcing a reflow.
14497				scrollboxSizeBuggy = !support.scrollboxSize() &&
14498					styles.position === "absolute",
14499
14500				// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
14501				boxSizingNeeded = scrollboxSizeBuggy || extra,
14502				isBorderBox = boxSizingNeeded &&
14503					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
14504				subtract = extra ?
14505					boxModelAdjustment(
14506						elem,
14507						dimension,
14508						extra,
14509						isBorderBox,
14510						styles
14511					) :
14512					0;
14513
14514			// Account for unreliable border-box dimensions by comparing offset* to computed and
14515			// faking a content-box to get border and padding (gh-3699)
14516			if ( isBorderBox && scrollboxSizeBuggy ) {
14517				subtract -= Math.ceil(
14518					elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
14519					parseFloat( styles[ dimension ] ) -
14520					boxModelAdjustment( elem, dimension, "border", false, styles ) -
14521					0.5
14522				);
14523			}
14524
14525			// Convert to pixels if value adjustment is needed
14526			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
14527				( matches[ 3 ] || "px" ) !== "px" ) {
14528
14529				elem.style[ dimension ] = value;
14530				value = jQuery.css( elem, dimension );
14531			}
14532
14533			return setPositiveNumber( elem, value, subtract );
14534		}
14535	};
14536} );
14537
14538jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
14539	function( elem, computed ) {
14540		if ( computed ) {
14541			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
14542				elem.getBoundingClientRect().left -
14543					swap( elem, { marginLeft: 0 }, function() {
14544						return elem.getBoundingClientRect().left;
14545					} )
14546			) + "px";
14547		}
14548	}
14549);
14550
14551// These hooks are used by animate to expand properties
14552jQuery.each( {
14553	margin: "",
14554	padding: "",
14555	border: "Width"
14556}, function( prefix, suffix ) {
14557	jQuery.cssHooks[ prefix + suffix ] = {
14558		expand: function( value ) {
14559			var i = 0,
14560				expanded = {},
14561
14562				// Assumes a single number if not a string
14563				parts = typeof value === "string" ? value.split( " " ) : [ value ];
14564
14565			for ( ; i < 4; i++ ) {
14566				expanded[ prefix + cssExpand[ i ] + suffix ] =
14567					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
14568			}
14569
14570			return expanded;
14571		}
14572	};
14573
14574	if ( prefix !== "margin" ) {
14575		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
14576	}
14577} );
14578
14579jQuery.fn.extend( {
14580	css: function( name, value ) {
14581		return access( this, function( elem, name, value ) {
14582			var styles, len,
14583				map = {},
14584				i = 0;
14585
14586			if ( Array.isArray( name ) ) {
14587				styles = getStyles( elem );
14588				len = name.length;
14589
14590				for ( ; i < len; i++ ) {
14591					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
14592				}
14593
14594				return map;
14595			}
14596
14597			return value !== undefined ?
14598				jQuery.style( elem, name, value ) :
14599				jQuery.css( elem, name );
14600		}, name, value, arguments.length > 1 );
14601	}
14602} );
14603
14604
14605function Tween( elem, options, prop, end, easing ) {
14606	return new Tween.prototype.init( elem, options, prop, end, easing );
14607}
14608jQuery.Tween = Tween;
14609
14610Tween.prototype = {
14611	constructor: Tween,
14612	init: function( elem, options, prop, end, easing, unit ) {
14613		this.elem = elem;
14614		this.prop = prop;
14615		this.easing = easing || jQuery.easing._default;
14616		this.options = options;
14617		this.start = this.now = this.cur();
14618		this.end = end;
14619		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
14620	},
14621	cur: function() {
14622		var hooks = Tween.propHooks[ this.prop ];
14623
14624		return hooks && hooks.get ?
14625			hooks.get( this ) :
14626			Tween.propHooks._default.get( this );
14627	},
14628	run: function( percent ) {
14629		var eased,
14630			hooks = Tween.propHooks[ this.prop ];
14631
14632		if ( this.options.duration ) {
14633			this.pos = eased = jQuery.easing[ this.easing ](
14634				percent, this.options.duration * percent, 0, 1, this.options.duration
14635			);
14636		} else {
14637			this.pos = eased = percent;
14638		}
14639		this.now = ( this.end - this.start ) * eased + this.start;
14640
14641		if ( this.options.step ) {
14642			this.options.step.call( this.elem, this.now, this );
14643		}
14644
14645		if ( hooks && hooks.set ) {
14646			hooks.set( this );
14647		} else {
14648			Tween.propHooks._default.set( this );
14649		}
14650		return this;
14651	}
14652};
14653
14654Tween.prototype.init.prototype = Tween.prototype;
14655
14656Tween.propHooks = {
14657	_default: {
14658		get: function( tween ) {
14659			var result;
14660
14661			// Use a property on the element directly when it is not a DOM element,
14662			// or when there is no matching style property that exists.
14663			if ( tween.elem.nodeType !== 1 ||
14664				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
14665				return tween.elem[ tween.prop ];
14666			}
14667
14668			// Passing an empty string as a 3rd parameter to .css will automatically
14669			// attempt a parseFloat and fallback to a string if the parse fails.
14670			// Simple values such as "10px" are parsed to Float;
14671			// complex values such as "rotate(1rad)" are returned as-is.
14672			result = jQuery.css( tween.elem, tween.prop, "" );
14673
14674			// Empty strings, null, undefined and "auto" are converted to 0.
14675			return !result || result === "auto" ? 0 : result;
14676		},
14677		set: function( tween ) {
14678
14679			// Use step hook for back compat.
14680			// Use cssHook if its there.
14681			// Use .style if available and use plain properties where available.
14682			if ( jQuery.fx.step[ tween.prop ] ) {
14683				jQuery.fx.step[ tween.prop ]( tween );
14684			} else if ( tween.elem.nodeType === 1 && (
14685				jQuery.cssHooks[ tween.prop ] ||
14686					tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
14687				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
14688			} else {
14689				tween.elem[ tween.prop ] = tween.now;
14690			}
14691		}
14692	}
14693};
14694
14695// Support: IE <=9 only
14696// Panic based approach to setting things on disconnected nodes
14697Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
14698	set: function( tween ) {
14699		if ( tween.elem.nodeType && tween.elem.parentNode ) {
14700			tween.elem[ tween.prop ] = tween.now;
14701		}
14702	}
14703};
14704
14705jQuery.easing = {
14706	linear: function( p ) {
14707		return p;
14708	},
14709	swing: function( p ) {
14710		return 0.5 - Math.cos( p * Math.PI ) / 2;
14711	},
14712	_default: "swing"
14713};
14714
14715jQuery.fx = Tween.prototype.init;
14716
14717// Back compat <1.8 extension point
14718jQuery.fx.step = {};
14719
14720
14721
14722
14723var
14724	fxNow, inProgress,
14725	rfxtypes = /^(?:toggle|show|hide)$/,
14726	rrun = /queueHooks$/;
14727
14728function schedule() {
14729	if ( inProgress ) {
14730		if ( document.hidden === false && window.requestAnimationFrame ) {
14731			window.requestAnimationFrame( schedule );
14732		} else {
14733			window.setTimeout( schedule, jQuery.fx.interval );
14734		}
14735
14736		jQuery.fx.tick();
14737	}
14738}
14739
14740// Animations created synchronously will run synchronously
14741function createFxNow() {
14742	window.setTimeout( function() {
14743		fxNow = undefined;
14744	} );
14745	return ( fxNow = Date.now() );
14746}
14747
14748// Generate parameters to create a standard animation
14749function genFx( type, includeWidth ) {
14750	var which,
14751		i = 0,
14752		attrs = { height: type };
14753
14754	// If we include width, step value is 1 to do all cssExpand values,
14755	// otherwise step value is 2 to skip over Left and Right
14756	includeWidth = includeWidth ? 1 : 0;
14757	for ( ; i < 4; i += 2 - includeWidth ) {
14758		which = cssExpand[ i ];
14759		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
14760	}
14761
14762	if ( includeWidth ) {
14763		attrs.opacity = attrs.width = type;
14764	}
14765
14766	return attrs;
14767}
14768
14769function createTween( value, prop, animation ) {
14770	var tween,
14771		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
14772		index = 0,
14773		length = collection.length;
14774	for ( ; index < length; index++ ) {
14775		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
14776
14777			// We're done with this property
14778			return tween;
14779		}
14780	}
14781}
14782
14783function defaultPrefilter( elem, props, opts ) {
14784	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
14785		isBox = "width" in props || "height" in props,
14786		anim = this,
14787		orig = {},
14788		style = elem.style,
14789		hidden = elem.nodeType && isHiddenWithinTree( elem ),
14790		dataShow = dataPriv.get( elem, "fxshow" );
14791
14792	// Queue-skipping animations hijack the fx hooks
14793	if ( !opts.queue ) {
14794		hooks = jQuery._queueHooks( elem, "fx" );
14795		if ( hooks.unqueued == null ) {
14796			hooks.unqueued = 0;
14797			oldfire = hooks.empty.fire;
14798			hooks.empty.fire = function() {
14799				if ( !hooks.unqueued ) {
14800					oldfire();
14801				}
14802			};
14803		}
14804		hooks.unqueued++;
14805
14806		anim.always( function() {
14807
14808			// Ensure the complete handler is called before this completes
14809			anim.always( function() {
14810				hooks.unqueued--;
14811				if ( !jQuery.queue( elem, "fx" ).length ) {
14812					hooks.empty.fire();
14813				}
14814			} );
14815		} );
14816	}
14817
14818	// Detect show/hide animations
14819	for ( prop in props ) {
14820		value = props[ prop ];
14821		if ( rfxtypes.test( value ) ) {
14822			delete props[ prop ];
14823			toggle = toggle || value === "toggle";
14824			if ( value === ( hidden ? "hide" : "show" ) ) {
14825
14826				// Pretend to be hidden if this is a "show" and
14827				// there is still data from a stopped show/hide
14828				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
14829					hidden = true;
14830
14831				// Ignore all other no-op show/hide data
14832				} else {
14833					continue;
14834				}
14835			}
14836			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
14837		}
14838	}
14839
14840	// Bail out if this is a no-op like .hide().hide()
14841	propTween = !jQuery.isEmptyObject( props );
14842	if ( !propTween && jQuery.isEmptyObject( orig ) ) {
14843		return;
14844	}
14845
14846	// Restrict "overflow" and "display" styles during box animations
14847	if ( isBox && elem.nodeType === 1 ) {
14848
14849		// Support: IE <=9 - 11, Edge 12 - 15
14850		// Record all 3 overflow attributes because IE does not infer the shorthand
14851		// from identically-valued overflowX and overflowY and Edge just mirrors
14852		// the overflowX value there.
14853		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
14854
14855		// Identify a display type, preferring old show/hide data over the CSS cascade
14856		restoreDisplay = dataShow && dataShow.display;
14857		if ( restoreDisplay == null ) {
14858			restoreDisplay = dataPriv.get( elem, "display" );
14859		}
14860		display = jQuery.css( elem, "display" );
14861		if ( display === "none" ) {
14862			if ( restoreDisplay ) {
14863				display = restoreDisplay;
14864			} else {
14865
14866				// Get nonempty value(s) by temporarily forcing visibility
14867				showHide( [ elem ], true );
14868				restoreDisplay = elem.style.display || restoreDisplay;
14869				display = jQuery.css( elem, "display" );
14870				showHide( [ elem ] );
14871			}
14872		}
14873
14874		// Animate inline elements as inline-block
14875		if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
14876			if ( jQuery.css( elem, "float" ) === "none" ) {
14877
14878				// Restore the original display value at the end of pure show/hide animations
14879				if ( !propTween ) {
14880					anim.done( function() {
14881						style.display = restoreDisplay;
14882					} );
14883					if ( restoreDisplay == null ) {
14884						display = style.display;
14885						restoreDisplay = display === "none" ? "" : display;
14886					}
14887				}
14888				style.display = "inline-block";
14889			}
14890		}
14891	}
14892
14893	if ( opts.overflow ) {
14894		style.overflow = "hidden";
14895		anim.always( function() {
14896			style.overflow = opts.overflow[ 0 ];
14897			style.overflowX = opts.overflow[ 1 ];
14898			style.overflowY = opts.overflow[ 2 ];
14899		} );
14900	}
14901
14902	// Implement show/hide animations
14903	propTween = false;
14904	for ( prop in orig ) {
14905
14906		// General show/hide setup for this element animation
14907		if ( !propTween ) {
14908			if ( dataShow ) {
14909				if ( "hidden" in dataShow ) {
14910					hidden = dataShow.hidden;
14911				}
14912			} else {
14913				dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
14914			}
14915
14916			// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
14917			if ( toggle ) {
14918				dataShow.hidden = !hidden;
14919			}
14920
14921			// Show elements before animating them
14922			if ( hidden ) {
14923				showHide( [ elem ], true );
14924			}
14925
14926			/* eslint-disable no-loop-func */
14927
14928			anim.done( function() {
14929
14930				/* eslint-enable no-loop-func */
14931
14932				// The final step of a "hide" animation is actually hiding the element
14933				if ( !hidden ) {
14934					showHide( [ elem ] );
14935				}
14936				dataPriv.remove( elem, "fxshow" );
14937				for ( prop in orig ) {
14938					jQuery.style( elem, prop, orig[ prop ] );
14939				}
14940			} );
14941		}
14942
14943		// Per-property setup
14944		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
14945		if ( !( prop in dataShow ) ) {
14946			dataShow[ prop ] = propTween.start;
14947			if ( hidden ) {
14948				propTween.end = propTween.start;
14949				propTween.start = 0;
14950			}
14951		}
14952	}
14953}
14954
14955function propFilter( props, specialEasing ) {
14956	var index, name, easing, value, hooks;
14957
14958	// camelCase, specialEasing and expand cssHook pass
14959	for ( index in props ) {
14960		name = camelCase( index );
14961		easing = specialEasing[ name ];
14962		value = props[ index ];
14963		if ( Array.isArray( value ) ) {
14964			easing = value[ 1 ];
14965			value = props[ index ] = value[ 0 ];
14966		}
14967
14968		if ( index !== name ) {
14969			props[ name ] = value;
14970			delete props[ index ];
14971		}
14972
14973		hooks = jQuery.cssHooks[ name ];
14974		if ( hooks && "expand" in hooks ) {
14975			value = hooks.expand( value );
14976			delete props[ name ];
14977
14978			// Not quite $.extend, this won't overwrite existing keys.
14979			// Reusing 'index' because we have the correct "name"
14980			for ( index in value ) {
14981				if ( !( index in props ) ) {
14982					props[ index ] = value[ index ];
14983					specialEasing[ index ] = easing;
14984				}
14985			}
14986		} else {
14987			specialEasing[ name ] = easing;
14988		}
14989	}
14990}
14991
14992function Animation( elem, properties, options ) {
14993	var result,
14994		stopped,
14995		index = 0,
14996		length = Animation.prefilters.length,
14997		deferred = jQuery.Deferred().always( function() {
14998
14999			// Don't match elem in the :animated selector
15000			delete tick.elem;
15001		} ),
15002		tick = function() {
15003			if ( stopped ) {
15004				return false;
15005			}
15006			var currentTime = fxNow || createFxNow(),
15007				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
15008
15009				// Support: Android 2.3 only
15010				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)
15011				temp = remaining / animation.duration || 0,
15012				percent = 1 - temp,
15013				index = 0,
15014				length = animation.tweens.length;
15015
15016			for ( ; index < length; index++ ) {
15017				animation.tweens[ index ].run( percent );
15018			}
15019
15020			deferred.notifyWith( elem, [ animation, percent, remaining ] );
15021
15022			// If there's more to do, yield
15023			if ( percent < 1 && length ) {
15024				return remaining;
15025			}
15026
15027			// If this was an empty animation, synthesize a final progress notification
15028			if ( !length ) {
15029				deferred.notifyWith( elem, [ animation, 1, 0 ] );
15030			}
15031
15032			// Resolve the animation and report its conclusion
15033			deferred.resolveWith( elem, [ animation ] );
15034			return false;
15035		},
15036		animation = deferred.promise( {
15037			elem: elem,
15038			props: jQuery.extend( {}, properties ),
15039			opts: jQuery.extend( true, {
15040				specialEasing: {},
15041				easing: jQuery.easing._default
15042			}, options ),
15043			originalProperties: properties,
15044			originalOptions: options,
15045			startTime: fxNow || createFxNow(),
15046			duration: options.duration,
15047			tweens: [],
15048			createTween: function( prop, end ) {
15049				var tween = jQuery.Tween( elem, animation.opts, prop, end,
15050					animation.opts.specialEasing[ prop ] || animation.opts.easing );
15051				animation.tweens.push( tween );
15052				return tween;
15053			},
15054			stop: function( gotoEnd ) {
15055				var index = 0,
15056
15057					// If we are going to the end, we want to run all the tweens
15058					// otherwise we skip this part
15059					length = gotoEnd ? animation.tweens.length : 0;
15060				if ( stopped ) {
15061					return this;
15062				}
15063				stopped = true;
15064				for ( ; index < length; index++ ) {
15065					animation.tweens[ index ].run( 1 );
15066				}
15067
15068				// Resolve when we played the last frame; otherwise, reject
15069				if ( gotoEnd ) {
15070					deferred.notifyWith( elem, [ animation, 1, 0 ] );
15071					deferred.resolveWith( elem, [ animation, gotoEnd ] );
15072				} else {
15073					deferred.rejectWith( elem, [ animation, gotoEnd ] );
15074				}
15075				return this;
15076			}
15077		} ),
15078		props = animation.props;
15079
15080	propFilter( props, animation.opts.specialEasing );
15081
15082	for ( ; index < length; index++ ) {
15083		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
15084		if ( result ) {
15085			if ( isFunction( result.stop ) ) {
15086				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
15087					result.stop.bind( result );
15088			}
15089			return result;
15090		}
15091	}
15092
15093	jQuery.map( props, createTween, animation );
15094
15095	if ( isFunction( animation.opts.start ) ) {
15096		animation.opts.start.call( elem, animation );
15097	}
15098
15099	// Attach callbacks from options
15100	animation
15101		.progress( animation.opts.progress )
15102		.done( animation.opts.done, animation.opts.complete )
15103		.fail( animation.opts.fail )
15104		.always( animation.opts.always );
15105
15106	jQuery.fx.timer(
15107		jQuery.extend( tick, {
15108			elem: elem,
15109			anim: animation,
15110			queue: animation.opts.queue
15111		} )
15112	);
15113
15114	return animation;
15115}
15116
15117jQuery.Animation = jQuery.extend( Animation, {
15118
15119	tweeners: {
15120		"*": [ function( prop, value ) {
15121			var tween = this.createTween( prop, value );
15122			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
15123			return tween;
15124		} ]
15125	},
15126
15127	tweener: function( props, callback ) {
15128		if ( isFunction( props ) ) {
15129			callback = props;
15130			props = [ "*" ];
15131		} else {
15132			props = props.match( rnothtmlwhite );
15133		}
15134
15135		var prop,
15136			index = 0,
15137			length = props.length;
15138
15139		for ( ; index < length; index++ ) {
15140			prop = props[ index ];
15141			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
15142			Animation.tweeners[ prop ].unshift( callback );
15143		}
15144	},
15145
15146	prefilters: [ defaultPrefilter ],
15147
15148	prefilter: function( callback, prepend ) {
15149		if ( prepend ) {
15150			Animation.prefilters.unshift( callback );
15151		} else {
15152			Animation.prefilters.push( callback );
15153		}
15154	}
15155} );
15156
15157jQuery.speed = function( speed, easing, fn ) {
15158	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
15159		complete: fn || !fn && easing ||
15160			isFunction( speed ) && speed,
15161		duration: speed,
15162		easing: fn && easing || easing && !isFunction( easing ) && easing
15163	};
15164
15165	// Go to the end state if fx are off
15166	if ( jQuery.fx.off ) {
15167		opt.duration = 0;
15168
15169	} else {
15170		if ( typeof opt.duration !== "number" ) {
15171			if ( opt.duration in jQuery.fx.speeds ) {
15172				opt.duration = jQuery.fx.speeds[ opt.duration ];
15173
15174			} else {
15175				opt.duration = jQuery.fx.speeds._default;
15176			}
15177		}
15178	}
15179
15180	// Normalize opt.queue - true/undefined/null -> "fx"
15181	if ( opt.queue == null || opt.queue === true ) {
15182		opt.queue = "fx";
15183	}
15184
15185	// Queueing
15186	opt.old = opt.complete;
15187
15188	opt.complete = function() {
15189		if ( isFunction( opt.old ) ) {
15190			opt.old.call( this );
15191		}
15192
15193		if ( opt.queue ) {
15194			jQuery.dequeue( this, opt.queue );
15195		}
15196	};
15197
15198	return opt;
15199};
15200
15201jQuery.fn.extend( {
15202	fadeTo: function( speed, to, easing, callback ) {
15203
15204		// Show any hidden elements after setting opacity to 0
15205		return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
15206
15207			// Animate to the value specified
15208			.end().animate( { opacity: to }, speed, easing, callback );
15209	},
15210	animate: function( prop, speed, easing, callback ) {
15211		var empty = jQuery.isEmptyObject( prop ),
15212			optall = jQuery.speed( speed, easing, callback ),
15213			doAnimation = function() {
15214
15215				// Operate on a copy of prop so per-property easing won't be lost
15216				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
15217
15218				// Empty animations, or finishing resolves immediately
15219				if ( empty || dataPriv.get( this, "finish" ) ) {
15220					anim.stop( true );
15221				}
15222			};
15223
15224		doAnimation.finish = doAnimation;
15225
15226		return empty || optall.queue === false ?
15227			this.each( doAnimation ) :
15228			this.queue( optall.queue, doAnimation );
15229	},
15230	stop: function( type, clearQueue, gotoEnd ) {
15231		var stopQueue = function( hooks ) {
15232			var stop = hooks.stop;
15233			delete hooks.stop;
15234			stop( gotoEnd );
15235		};
15236
15237		if ( typeof type !== "string" ) {
15238			gotoEnd = clearQueue;
15239			clearQueue = type;
15240			type = undefined;
15241		}
15242		if ( clearQueue ) {
15243			this.queue( type || "fx", [] );
15244		}
15245
15246		return this.each( function() {
15247			var dequeue = true,
15248				index = type != null && type + "queueHooks",
15249				timers = jQuery.timers,
15250				data = dataPriv.get( this );
15251
15252			if ( index ) {
15253				if ( data[ index ] && data[ index ].stop ) {
15254					stopQueue( data[ index ] );
15255				}
15256			} else {
15257				for ( index in data ) {
15258					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
15259						stopQueue( data[ index ] );
15260					}
15261				}
15262			}
15263
15264			for ( index = timers.length; index--; ) {
15265				if ( timers[ index ].elem === this &&
15266					( type == null || timers[ index ].queue === type ) ) {
15267
15268					timers[ index ].anim.stop( gotoEnd );
15269					dequeue = false;
15270					timers.splice( index, 1 );
15271				}
15272			}
15273
15274			// Start the next in the queue if the last step wasn't forced.
15275			// Timers currently will call their complete callbacks, which
15276			// will dequeue but only if they were gotoEnd.
15277			if ( dequeue || !gotoEnd ) {
15278				jQuery.dequeue( this, type );
15279			}
15280		} );
15281	},
15282	finish: function( type ) {
15283		if ( type !== false ) {
15284			type = type || "fx";
15285		}
15286		return this.each( function() {
15287			var index,
15288				data = dataPriv.get( this ),
15289				queue = data[ type + "queue" ],
15290				hooks = data[ type + "queueHooks" ],
15291				timers = jQuery.timers,
15292				length = queue ? queue.length : 0;
15293
15294			// Enable finishing flag on private data
15295			data.finish = true;
15296
15297			// Empty the queue first
15298			jQuery.queue( this, type, [] );
15299
15300			if ( hooks && hooks.stop ) {
15301				hooks.stop.call( this, true );
15302			}
15303
15304			// Look for any active animations, and finish them
15305			for ( index = timers.length; index--; ) {
15306				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
15307					timers[ index ].anim.stop( true );
15308					timers.splice( index, 1 );
15309				}
15310			}
15311
15312			// Look for any animations in the old queue and finish them
15313			for ( index = 0; index < length; index++ ) {
15314				if ( queue[ index ] && queue[ index ].finish ) {
15315					queue[ index ].finish.call( this );
15316				}
15317			}
15318
15319			// Turn off finishing flag
15320			delete data.finish;
15321		} );
15322	}
15323} );
15324
15325jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) {
15326	var cssFn = jQuery.fn[ name ];
15327	jQuery.fn[ name ] = function( speed, easing, callback ) {
15328		return speed == null || typeof speed === "boolean" ?
15329			cssFn.apply( this, arguments ) :
15330			this.animate( genFx( name, true ), speed, easing, callback );
15331	};
15332} );
15333
15334// Generate shortcuts for custom animations
15335jQuery.each( {
15336	slideDown: genFx( "show" ),
15337	slideUp: genFx( "hide" ),
15338	slideToggle: genFx( "toggle" ),
15339	fadeIn: { opacity: "show" },
15340	fadeOut: { opacity: "hide" },
15341	fadeToggle: { opacity: "toggle" }
15342}, function( name, props ) {
15343	jQuery.fn[ name ] = function( speed, easing, callback ) {
15344		return this.animate( props, speed, easing, callback );
15345	};
15346} );
15347
15348jQuery.timers = [];
15349jQuery.fx.tick = function() {
15350	var timer,
15351		i = 0,
15352		timers = jQuery.timers;
15353
15354	fxNow = Date.now();
15355
15356	for ( ; i < timers.length; i++ ) {
15357		timer = timers[ i ];
15358
15359		// Run the timer and safely remove it when done (allowing for external removal)
15360		if ( !timer() && timers[ i ] === timer ) {
15361			timers.splice( i--, 1 );
15362		}
15363	}
15364
15365	if ( !timers.length ) {
15366		jQuery.fx.stop();
15367	}
15368	fxNow = undefined;
15369};
15370
15371jQuery.fx.timer = function( timer ) {
15372	jQuery.timers.push( timer );
15373	jQuery.fx.start();
15374};
15375
15376jQuery.fx.interval = 13;
15377jQuery.fx.start = function() {
15378	if ( inProgress ) {
15379		return;
15380	}
15381
15382	inProgress = true;
15383	schedule();
15384};
15385
15386jQuery.fx.stop = function() {
15387	inProgress = null;
15388};
15389
15390jQuery.fx.speeds = {
15391	slow: 600,
15392	fast: 200,
15393
15394	// Default speed
15395	_default: 400
15396};
15397
15398
15399// Based off of the plugin by Clint Helfers, with permission.
15400jQuery.fn.delay = function( time, type ) {
15401	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
15402	type = type || "fx";
15403
15404	return this.queue( type, function( next, hooks ) {
15405		var timeout = window.setTimeout( next, time );
15406		hooks.stop = function() {
15407			window.clearTimeout( timeout );
15408		};
15409	} );
15410};
15411
15412
15413( function() {
15414	var input = document.createElement( "input" ),
15415		select = document.createElement( "select" ),
15416		opt = select.appendChild( document.createElement( "option" ) );
15417
15418	input.type = "checkbox";
15419
15420	// Support: Android <=4.3 only
15421	// Default value for a checkbox should be "on"
15422	support.checkOn = input.value !== "";
15423
15424	// Support: IE <=11 only
15425	// Must access selectedIndex to make default options select
15426	support.optSelected = opt.selected;
15427
15428	// Support: IE <=11 only
15429	// An input loses its value after becoming a radio
15430	input = document.createElement( "input" );
15431	input.value = "t";
15432	input.type = "radio";
15433	support.radioValue = input.value === "t";
15434} )();
15435
15436
15437var boolHook,
15438	attrHandle = jQuery.expr.attrHandle;
15439
15440jQuery.fn.extend( {
15441	attr: function( name, value ) {
15442		return access( this, jQuery.attr, name, value, arguments.length > 1 );
15443	},
15444
15445	removeAttr: function( name ) {
15446		return this.each( function() {
15447			jQuery.removeAttr( this, name );
15448		} );
15449	}
15450} );
15451
15452jQuery.extend( {
15453	attr: function( elem, name, value ) {
15454		var ret, hooks,
15455			nType = elem.nodeType;
15456
15457		// Don't get/set attributes on text, comment and attribute nodes
15458		if ( nType === 3 || nType === 8 || nType === 2 ) {
15459			return;
15460		}
15461
15462		// Fallback to prop when attributes are not supported
15463		if ( typeof elem.getAttribute === "undefined" ) {
15464			return jQuery.prop( elem, name, value );
15465		}
15466
15467		// Attribute hooks are determined by the lowercase version
15468		// Grab necessary hook if one is defined
15469		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
15470			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
15471				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
15472		}
15473
15474		if ( value !== undefined ) {
15475			if ( value === null ) {
15476				jQuery.removeAttr( elem, name );
15477				return;
15478			}
15479
15480			if ( hooks && "set" in hooks &&
15481				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
15482				return ret;
15483			}
15484
15485			elem.setAttribute( name, value + "" );
15486			return value;
15487		}
15488
15489		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
15490			return ret;
15491		}
15492
15493		ret = jQuery.find.attr( elem, name );
15494
15495		// Non-existent attributes return null, we normalize to undefined
15496		return ret == null ? undefined : ret;
15497	},
15498
15499	attrHooks: {
15500		type: {
15501			set: function( elem, value ) {
15502				if ( !support.radioValue && value === "radio" &&
15503					nodeName( elem, "input" ) ) {
15504					var val = elem.value;
15505					elem.setAttribute( "type", value );
15506					if ( val ) {
15507						elem.value = val;
15508					}
15509					return value;
15510				}
15511			}
15512		}
15513	},
15514
15515	removeAttr: function( elem, value ) {
15516		var name,
15517			i = 0,
15518
15519			// Attribute names can contain non-HTML whitespace characters
15520			// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
15521			attrNames = value && value.match( rnothtmlwhite );
15522
15523		if ( attrNames && elem.nodeType === 1 ) {
15524			while ( ( name = attrNames[ i++ ] ) ) {
15525				elem.removeAttribute( name );
15526			}
15527		}
15528	}
15529} );
15530
15531// Hooks for boolean attributes
15532boolHook = {
15533	set: function( elem, value, name ) {
15534		if ( value === false ) {
15535
15536			// Remove boolean attributes when set to false
15537			jQuery.removeAttr( elem, name );
15538		} else {
15539			elem.setAttribute( name, name );
15540		}
15541		return name;
15542	}
15543};
15544
15545jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) {
15546	var getter = attrHandle[ name ] || jQuery.find.attr;
15547
15548	attrHandle[ name ] = function( elem, name, isXML ) {
15549		var ret, handle,
15550			lowercaseName = name.toLowerCase();
15551
15552		if ( !isXML ) {
15553
15554			// Avoid an infinite loop by temporarily removing this function from the getter
15555			handle = attrHandle[ lowercaseName ];
15556			attrHandle[ lowercaseName ] = ret;
15557			ret = getter( elem, name, isXML ) != null ?
15558				lowercaseName :
15559				null;
15560			attrHandle[ lowercaseName ] = handle;
15561		}
15562		return ret;
15563	};
15564} );
15565
15566
15567
15568
15569var rfocusable = /^(?:input|select|textarea|button)$/i,
15570	rclickable = /^(?:a|area)$/i;
15571
15572jQuery.fn.extend( {
15573	prop: function( name, value ) {
15574		return access( this, jQuery.prop, name, value, arguments.length > 1 );
15575	},
15576
15577	removeProp: function( name ) {
15578		return this.each( function() {
15579			delete this[ jQuery.propFix[ name ] || name ];
15580		} );
15581	}
15582} );
15583
15584jQuery.extend( {
15585	prop: function( elem, name, value ) {
15586		var ret, hooks,
15587			nType = elem.nodeType;
15588
15589		// Don't get/set properties on text, comment and attribute nodes
15590		if ( nType === 3 || nType === 8 || nType === 2 ) {
15591			return;
15592		}
15593
15594		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
15595
15596			// Fix name and attach hooks
15597			name = jQuery.propFix[ name ] || name;
15598			hooks = jQuery.propHooks[ name ];
15599		}
15600
15601		if ( value !== undefined ) {
15602			if ( hooks && "set" in hooks &&
15603				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
15604				return ret;
15605			}
15606
15607			return ( elem[ name ] = value );
15608		}
15609
15610		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
15611			return ret;
15612		}
15613
15614		return elem[ name ];
15615	},
15616
15617	propHooks: {
15618		tabIndex: {
15619			get: function( elem ) {
15620
15621				// Support: IE <=9 - 11 only
15622				// elem.tabIndex doesn't always return the
15623				// correct value when it hasn't been explicitly set
15624				// Use proper attribute retrieval (trac-12072)
15625				var tabindex = jQuery.find.attr( elem, "tabindex" );
15626
15627				if ( tabindex ) {
15628					return parseInt( tabindex, 10 );
15629				}
15630
15631				if (
15632					rfocusable.test( elem.nodeName ) ||
15633					rclickable.test( elem.nodeName ) &&
15634					elem.href
15635				) {
15636					return 0;
15637				}
15638
15639				return -1;
15640			}
15641		}
15642	},
15643
15644	propFix: {
15645		"for": "htmlFor",
15646		"class": "className"
15647	}
15648} );
15649
15650// Support: IE <=11 only
15651// Accessing the selectedIndex property
15652// forces the browser to respect setting selected
15653// on the option
15654// The getter ensures a default option is selected
15655// when in an optgroup
15656// eslint rule "no-unused-expressions" is disabled for this code
15657// since it considers such accessions noop
15658if ( !support.optSelected ) {
15659	jQuery.propHooks.selected = {
15660		get: function( elem ) {
15661
15662			/* eslint no-unused-expressions: "off" */
15663
15664			var parent = elem.parentNode;
15665			if ( parent && parent.parentNode ) {
15666				parent.parentNode.selectedIndex;
15667			}
15668			return null;
15669		},
15670		set: function( elem ) {
15671
15672			/* eslint no-unused-expressions: "off" */
15673
15674			var parent = elem.parentNode;
15675			if ( parent ) {
15676				parent.selectedIndex;
15677
15678				if ( parent.parentNode ) {
15679					parent.parentNode.selectedIndex;
15680				}
15681			}
15682		}
15683	};
15684}
15685
15686jQuery.each( [
15687	"tabIndex",
15688	"readOnly",
15689	"maxLength",
15690	"cellSpacing",
15691	"cellPadding",
15692	"rowSpan",
15693	"colSpan",
15694	"useMap",
15695	"frameBorder",
15696	"contentEditable"
15697], function() {
15698	jQuery.propFix[ this.toLowerCase() ] = this;
15699} );
15700
15701
15702
15703
15704	// Strip and collapse whitespace according to HTML spec
15705	// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
15706	function stripAndCollapse( value ) {
15707		var tokens = value.match( rnothtmlwhite ) || [];
15708		return tokens.join( " " );
15709	}
15710
15711
15712function getClass( elem ) {
15713	return elem.getAttribute && elem.getAttribute( "class" ) || "";
15714}
15715
15716function classesToArray( value ) {
15717	if ( Array.isArray( value ) ) {
15718		return value;
15719	}
15720	if ( typeof value === "string" ) {
15721		return value.match( rnothtmlwhite ) || [];
15722	}
15723	return [];
15724}
15725
15726jQuery.fn.extend( {
15727	addClass: function( value ) {
15728		var classNames, cur, curValue, className, i, finalValue;
15729
15730		if ( isFunction( value ) ) {
15731			return this.each( function( j ) {
15732				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
15733			} );
15734		}
15735
15736		classNames = classesToArray( value );
15737
15738		if ( classNames.length ) {
15739			return this.each( function() {
15740				curValue = getClass( this );
15741				cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
15742
15743				if ( cur ) {
15744					for ( i = 0; i < classNames.length; i++ ) {
15745						className = classNames[ i ];
15746						if ( cur.indexOf( " " + className + " " ) < 0 ) {
15747							cur += className + " ";
15748						}
15749					}
15750
15751					// Only assign if different to avoid unneeded rendering.
15752					finalValue = stripAndCollapse( cur );
15753					if ( curValue !== finalValue ) {
15754						this.setAttribute( "class", finalValue );
15755					}
15756				}
15757			} );
15758		}
15759
15760		return this;
15761	},
15762
15763	removeClass: function( value ) {
15764		var classNames, cur, curValue, className, i, finalValue;
15765
15766		if ( isFunction( value ) ) {
15767			return this.each( function( j ) {
15768				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
15769			} );
15770		}
15771
15772		if ( !arguments.length ) {
15773			return this.attr( "class", "" );
15774		}
15775
15776		classNames = classesToArray( value );
15777
15778		if ( classNames.length ) {
15779			return this.each( function() {
15780				curValue = getClass( this );
15781
15782				// This expression is here for better compressibility (see addClass)
15783				cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
15784
15785				if ( cur ) {
15786					for ( i = 0; i < classNames.length; i++ ) {
15787						className = classNames[ i ];
15788
15789						// Remove *all* instances
15790						while ( cur.indexOf( " " + className + " " ) > -1 ) {
15791							cur = cur.replace( " " + className + " ", " " );
15792						}
15793					}
15794
15795					// Only assign if different to avoid unneeded rendering.
15796					finalValue = stripAndCollapse( cur );
15797					if ( curValue !== finalValue ) {
15798						this.setAttribute( "class", finalValue );
15799					}
15800				}
15801			} );
15802		}
15803
15804		return this;
15805	},
15806
15807	toggleClass: function( value, stateVal ) {
15808		var classNames, className, i, self,
15809			type = typeof value,
15810			isValidValue = type === "string" || Array.isArray( value );
15811
15812		if ( isFunction( value ) ) {
15813			return this.each( function( i ) {
15814				jQuery( this ).toggleClass(
15815					value.call( this, i, getClass( this ), stateVal ),
15816					stateVal
15817				);
15818			} );
15819		}
15820
15821		if ( typeof stateVal === "boolean" && isValidValue ) {
15822			return stateVal ? this.addClass( value ) : this.removeClass( value );
15823		}
15824
15825		classNames = classesToArray( value );
15826
15827		return this.each( function() {
15828			if ( isValidValue ) {
15829
15830				// Toggle individual class names
15831				self = jQuery( this );
15832
15833				for ( i = 0; i < classNames.length; i++ ) {
15834					className = classNames[ i ];
15835
15836					// Check each className given, space separated list
15837					if ( self.hasClass( className ) ) {
15838						self.removeClass( className );
15839					} else {
15840						self.addClass( className );
15841					}
15842				}
15843
15844			// Toggle whole class name
15845			} else if ( value === undefined || type === "boolean" ) {
15846				className = getClass( this );
15847				if ( className ) {
15848
15849					// Store className if set
15850					dataPriv.set( this, "__className__", className );
15851				}
15852
15853				// If the element has a class name or if we're passed `false`,
15854				// then remove the whole classname (if there was one, the above saved it).
15855				// Otherwise bring back whatever was previously saved (if anything),
15856				// falling back to the empty string if nothing was stored.
15857				if ( this.setAttribute ) {
15858					this.setAttribute( "class",
15859						className || value === false ?
15860							"" :
15861							dataPriv.get( this, "__className__" ) || ""
15862					);
15863				}
15864			}
15865		} );
15866	},
15867
15868	hasClass: function( selector ) {
15869		var className, elem,
15870			i = 0;
15871
15872		className = " " + selector + " ";
15873		while ( ( elem = this[ i++ ] ) ) {
15874			if ( elem.nodeType === 1 &&
15875				( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
15876				return true;
15877			}
15878		}
15879
15880		return false;
15881	}
15882} );
15883
15884
15885
15886
15887var rreturn = /\r/g;
15888
15889jQuery.fn.extend( {
15890	val: function( value ) {
15891		var hooks, ret, valueIsFunction,
15892			elem = this[ 0 ];
15893
15894		if ( !arguments.length ) {
15895			if ( elem ) {
15896				hooks = jQuery.valHooks[ elem.type ] ||
15897					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
15898
15899				if ( hooks &&
15900					"get" in hooks &&
15901					( ret = hooks.get( elem, "value" ) ) !== undefined
15902				) {
15903					return ret;
15904				}
15905
15906				ret = elem.value;
15907
15908				// Handle most common string cases
15909				if ( typeof ret === "string" ) {
15910					return ret.replace( rreturn, "" );
15911				}
15912
15913				// Handle cases where value is null/undef or number
15914				return ret == null ? "" : ret;
15915			}
15916
15917			return;
15918		}
15919
15920		valueIsFunction = isFunction( value );
15921
15922		return this.each( function( i ) {
15923			var val;
15924
15925			if ( this.nodeType !== 1 ) {
15926				return;
15927			}
15928
15929			if ( valueIsFunction ) {
15930				val = value.call( this, i, jQuery( this ).val() );
15931			} else {
15932				val = value;
15933			}
15934
15935			// Treat null/undefined as ""; convert numbers to string
15936			if ( val == null ) {
15937				val = "";
15938
15939			} else if ( typeof val === "number" ) {
15940				val += "";
15941
15942			} else if ( Array.isArray( val ) ) {
15943				val = jQuery.map( val, function( value ) {
15944					return value == null ? "" : value + "";
15945				} );
15946			}
15947
15948			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
15949
15950			// If set returns undefined, fall back to normal setting
15951			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
15952				this.value = val;
15953			}
15954		} );
15955	}
15956} );
15957
15958jQuery.extend( {
15959	valHooks: {
15960		option: {
15961			get: function( elem ) {
15962
15963				var val = jQuery.find.attr( elem, "value" );
15964				return val != null ?
15965					val :
15966
15967					// Support: IE <=10 - 11 only
15968					// option.text throws exceptions (trac-14686, trac-14858)
15969					// Strip and collapse whitespace
15970					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
15971					stripAndCollapse( jQuery.text( elem ) );
15972			}
15973		},
15974		select: {
15975			get: function( elem ) {
15976				var value, option, i,
15977					options = elem.options,
15978					index = elem.selectedIndex,
15979					one = elem.type === "select-one",
15980					values = one ? null : [],
15981					max = one ? index + 1 : options.length;
15982
15983				if ( index < 0 ) {
15984					i = max;
15985
15986				} else {
15987					i = one ? index : 0;
15988				}
15989
15990				// Loop through all the selected options
15991				for ( ; i < max; i++ ) {
15992					option = options[ i ];
15993
15994					// Support: IE <=9 only
15995					// IE8-9 doesn't update selected after form reset (trac-2551)
15996					if ( ( option.selected || i === index ) &&
15997
15998							// Don't return options that are disabled or in a disabled optgroup
15999							!option.disabled &&
16000							( !option.parentNode.disabled ||
16001								!nodeName( option.parentNode, "optgroup" ) ) ) {
16002
16003						// Get the specific value for the option
16004						value = jQuery( option ).val();
16005
16006						// We don't need an array for one selects
16007						if ( one ) {
16008							return value;
16009						}
16010
16011						// Multi-Selects return an array
16012						values.push( value );
16013					}
16014				}
16015
16016				return values;
16017			},
16018
16019			set: function( elem, value ) {
16020				var optionSet, option,
16021					options = elem.options,
16022					values = jQuery.makeArray( value ),
16023					i = options.length;
16024
16025				while ( i-- ) {
16026					option = options[ i ];
16027
16028					/* eslint-disable no-cond-assign */
16029
16030					if ( option.selected =
16031						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
16032					) {
16033						optionSet = true;
16034					}
16035
16036					/* eslint-enable no-cond-assign */
16037				}
16038
16039				// Force browsers to behave consistently when non-matching value is set
16040				if ( !optionSet ) {
16041					elem.selectedIndex = -1;
16042				}
16043				return values;
16044			}
16045		}
16046	}
16047} );
16048
16049// Radios and checkboxes getter/setter
16050jQuery.each( [ "radio", "checkbox" ], function() {
16051	jQuery.valHooks[ this ] = {
16052		set: function( elem, value ) {
16053			if ( Array.isArray( value ) ) {
16054				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
16055			}
16056		}
16057	};
16058	if ( !support.checkOn ) {
16059		jQuery.valHooks[ this ].get = function( elem ) {
16060			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
16061		};
16062	}
16063} );
16064
16065
16066
16067
16068// Return jQuery for attributes-only inclusion
16069var location = window.location;
16070
16071var nonce = { guid: Date.now() };
16072
16073var rquery = ( /\?/ );
16074
16075
16076
16077// Cross-browser xml parsing
16078jQuery.parseXML = function( data ) {
16079	var xml, parserErrorElem;
16080	if ( !data || typeof data !== "string" ) {
16081		return null;
16082	}
16083
16084	// Support: IE 9 - 11 only
16085	// IE throws on parseFromString with invalid input.
16086	try {
16087		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
16088	} catch ( e ) {}
16089
16090	parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];
16091	if ( !xml || parserErrorElem ) {
16092		jQuery.error( "Invalid XML: " + (
16093			parserErrorElem ?
16094				jQuery.map( parserErrorElem.childNodes, function( el ) {
16095					return el.textContent;
16096				} ).join( "\n" ) :
16097				data
16098		) );
16099	}
16100	return xml;
16101};
16102
16103
16104var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
16105	stopPropagationCallback = function( e ) {
16106		e.stopPropagation();
16107	};
16108
16109jQuery.extend( jQuery.event, {
16110
16111	trigger: function( event, data, elem, onlyHandlers ) {
16112
16113		var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
16114			eventPath = [ elem || document ],
16115			type = hasOwn.call( event, "type" ) ? event.type : event,
16116			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
16117
16118		cur = lastElement = tmp = elem = elem || document;
16119
16120		// Don't do events on text and comment nodes
16121		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
16122			return;
16123		}
16124
16125		// focus/blur morphs to focusin/out; ensure we're not firing them right now
16126		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
16127			return;
16128		}
16129
16130		if ( type.indexOf( "." ) > -1 ) {
16131
16132			// Namespaced trigger; create a regexp to match event type in handle()
16133			namespaces = type.split( "." );
16134			type = namespaces.shift();
16135			namespaces.sort();
16136		}
16137		ontype = type.indexOf( ":" ) < 0 && "on" + type;
16138
16139		// Caller can pass in a jQuery.Event object, Object, or just an event type string
16140		event = event[ jQuery.expando ] ?
16141			event :
16142			new jQuery.Event( type, typeof event === "object" && event );
16143
16144		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
16145		event.isTrigger = onlyHandlers ? 2 : 3;
16146		event.namespace = namespaces.join( "." );
16147		event.rnamespace = event.namespace ?
16148			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
16149			null;
16150
16151		// Clean up the event in case it is being reused
16152		event.result = undefined;
16153		if ( !event.target ) {
16154			event.target = elem;
16155		}
16156
16157		// Clone any incoming data and prepend the event, creating the handler arg list
16158		data = data == null ?
16159			[ event ] :
16160			jQuery.makeArray( data, [ event ] );
16161
16162		// Allow special events to draw outside the lines
16163		special = jQuery.event.special[ type ] || {};
16164		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
16165			return;
16166		}
16167
16168		// Determine event propagation path in advance, per W3C events spec (trac-9951)
16169		// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)
16170		if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
16171
16172			bubbleType = special.delegateType || type;
16173			if ( !rfocusMorph.test( bubbleType + type ) ) {
16174				cur = cur.parentNode;
16175			}
16176			for ( ; cur; cur = cur.parentNode ) {
16177				eventPath.push( cur );
16178				tmp = cur;
16179			}
16180
16181			// Only add window if we got to document (e.g., not plain obj or detached DOM)
16182			if ( tmp === ( elem.ownerDocument || document ) ) {
16183				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
16184			}
16185		}
16186
16187		// Fire handlers on the event path
16188		i = 0;
16189		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
16190			lastElement = cur;
16191			event.type = i > 1 ?
16192				bubbleType :
16193				special.bindType || type;
16194
16195			// jQuery handler
16196			handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] &&
16197				dataPriv.get( cur, "handle" );
16198			if ( handle ) {
16199				handle.apply( cur, data );
16200			}
16201
16202			// Native handler
16203			handle = ontype && cur[ ontype ];
16204			if ( handle && handle.apply && acceptData( cur ) ) {
16205				event.result = handle.apply( cur, data );
16206				if ( event.result === false ) {
16207					event.preventDefault();
16208				}
16209			}
16210		}
16211		event.type = type;
16212
16213		// If nobody prevented the default action, do it now
16214		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
16215
16216			if ( ( !special._default ||
16217				special._default.apply( eventPath.pop(), data ) === false ) &&
16218				acceptData( elem ) ) {
16219
16220				// Call a native DOM method on the target with the same name as the event.
16221				// Don't do default actions on window, that's where global variables be (trac-6170)
16222				if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
16223
16224					// Don't re-trigger an onFOO event when we call its FOO() method
16225					tmp = elem[ ontype ];
16226
16227					if ( tmp ) {
16228						elem[ ontype ] = null;
16229					}
16230
16231					// Prevent re-triggering of the same event, since we already bubbled it above
16232					jQuery.event.triggered = type;
16233
16234					if ( event.isPropagationStopped() ) {
16235						lastElement.addEventListener( type, stopPropagationCallback );
16236					}
16237
16238					elem[ type ]();
16239
16240					if ( event.isPropagationStopped() ) {
16241						lastElement.removeEventListener( type, stopPropagationCallback );
16242					}
16243
16244					jQuery.event.triggered = undefined;
16245
16246					if ( tmp ) {
16247						elem[ ontype ] = tmp;
16248					}
16249				}
16250			}
16251		}
16252
16253		return event.result;
16254	},
16255
16256	// Piggyback on a donor event to simulate a different one
16257	// Used only for `focus(in | out)` events
16258	simulate: function( type, elem, event ) {
16259		var e = jQuery.extend(
16260			new jQuery.Event(),
16261			event,
16262			{
16263				type: type,
16264				isSimulated: true
16265			}
16266		);
16267
16268		jQuery.event.trigger( e, null, elem );
16269	}
16270
16271} );
16272
16273jQuery.fn.extend( {
16274
16275	trigger: function( type, data ) {
16276		return this.each( function() {
16277			jQuery.event.trigger( type, data, this );
16278		} );
16279	},
16280	triggerHandler: function( type, data ) {
16281		var elem = this[ 0 ];
16282		if ( elem ) {
16283			return jQuery.event.trigger( type, data, elem, true );
16284		}
16285	}
16286} );
16287
16288
16289var
16290	rbracket = /\[\]$/,
16291	rCRLF = /\r?\n/g,
16292	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
16293	rsubmittable = /^(?:input|select|textarea|keygen)/i;
16294
16295function buildParams( prefix, obj, traditional, add ) {
16296	var name;
16297
16298	if ( Array.isArray( obj ) ) {
16299
16300		// Serialize array item.
16301		jQuery.each( obj, function( i, v ) {
16302			if ( traditional || rbracket.test( prefix ) ) {
16303
16304				// Treat each array item as a scalar.
16305				add( prefix, v );
16306
16307			} else {
16308
16309				// Item is non-scalar (array or object), encode its numeric index.
16310				buildParams(
16311					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
16312					v,
16313					traditional,
16314					add
16315				);
16316			}
16317		} );
16318
16319	} else if ( !traditional && toType( obj ) === "object" ) {
16320
16321		// Serialize object item.
16322		for ( name in obj ) {
16323			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
16324		}
16325
16326	} else {
16327
16328		// Serialize scalar item.
16329		add( prefix, obj );
16330	}
16331}
16332
16333// Serialize an array of form elements or a set of
16334// key/values into a query string
16335jQuery.param = function( a, traditional ) {
16336	var prefix,
16337		s = [],
16338		add = function( key, valueOrFunction ) {
16339
16340			// If value is a function, invoke it and use its return value
16341			var value = isFunction( valueOrFunction ) ?
16342				valueOrFunction() :
16343				valueOrFunction;
16344
16345			s[ s.length ] = encodeURIComponent( key ) + "=" +
16346				encodeURIComponent( value == null ? "" : value );
16347		};
16348
16349	if ( a == null ) {
16350		return "";
16351	}
16352
16353	// If an array was passed in, assume that it is an array of form elements.
16354	if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
16355
16356		// Serialize the form elements
16357		jQuery.each( a, function() {
16358			add( this.name, this.value );
16359		} );
16360
16361	} else {
16362
16363		// If traditional, encode the "old" way (the way 1.3.2 or older
16364		// did it), otherwise encode params recursively.
16365		for ( prefix in a ) {
16366			buildParams( prefix, a[ prefix ], traditional, add );
16367		}
16368	}
16369
16370	// Return the resulting serialization
16371	return s.join( "&" );
16372};
16373
16374jQuery.fn.extend( {
16375	serialize: function() {
16376		return jQuery.param( this.serializeArray() );
16377	},
16378	serializeArray: function() {
16379		return this.map( function() {
16380
16381			// Can add propHook for "elements" to filter or add form elements
16382			var elements = jQuery.prop( this, "elements" );
16383			return elements ? jQuery.makeArray( elements ) : this;
16384		} ).filter( function() {
16385			var type = this.type;
16386
16387			// Use .is( ":disabled" ) so that fieldset[disabled] works
16388			return this.name && !jQuery( this ).is( ":disabled" ) &&
16389				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
16390				( this.checked || !rcheckableType.test( type ) );
16391		} ).map( function( _i, elem ) {
16392			var val = jQuery( this ).val();
16393
16394			if ( val == null ) {
16395				return null;
16396			}
16397
16398			if ( Array.isArray( val ) ) {
16399				return jQuery.map( val, function( val ) {
16400					return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
16401				} );
16402			}
16403
16404			return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
16405		} ).get();
16406	}
16407} );
16408
16409
16410var
16411	r20 = /%20/g,
16412	rhash = /#.*$/,
16413	rantiCache = /([?&])_=[^&]*/,
16414	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
16415
16416	// trac-7653, trac-8125, trac-8152: local protocol detection
16417	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
16418	rnoContent = /^(?:GET|HEAD)$/,
16419	rprotocol = /^\/\//,
16420
16421	/* Prefilters
16422	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
16423	 * 2) These are called:
16424	 *    - BEFORE asking for a transport
16425	 *    - AFTER param serialization (s.data is a string if s.processData is true)
16426	 * 3) key is the dataType
16427	 * 4) the catchall symbol "*" can be used
16428	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
16429	 */
16430	prefilters = {},
16431
16432	/* Transports bindings
16433	 * 1) key is the dataType
16434	 * 2) the catchall symbol "*" can be used
16435	 * 3) selection will start with transport dataType and THEN go to "*" if needed
16436	 */
16437	transports = {},
16438
16439	// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression
16440	allTypes = "*/".concat( "*" ),
16441
16442	// Anchor tag for parsing the document origin
16443	originAnchor = document.createElement( "a" );
16444
16445originAnchor.href = location.href;
16446
16447// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
16448function addToPrefiltersOrTransports( structure ) {
16449
16450	// dataTypeExpression is optional and defaults to "*"
16451	return function( dataTypeExpression, func ) {
16452
16453		if ( typeof dataTypeExpression !== "string" ) {
16454			func = dataTypeExpression;
16455			dataTypeExpression = "*";
16456		}
16457
16458		var dataType,
16459			i = 0,
16460			dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
16461
16462		if ( isFunction( func ) ) {
16463
16464			// For each dataType in the dataTypeExpression
16465			while ( ( dataType = dataTypes[ i++ ] ) ) {
16466
16467				// Prepend if requested
16468				if ( dataType[ 0 ] === "+" ) {
16469					dataType = dataType.slice( 1 ) || "*";
16470					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
16471
16472				// Otherwise append
16473				} else {
16474					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
16475				}
16476			}
16477		}
16478	};
16479}
16480
16481// Base inspection function for prefilters and transports
16482function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
16483
16484	var inspected = {},
16485		seekingTransport = ( structure === transports );
16486
16487	function inspect( dataType ) {
16488		var selected;
16489		inspected[ dataType ] = true;
16490		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
16491			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
16492			if ( typeof dataTypeOrTransport === "string" &&
16493				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
16494
16495				options.dataTypes.unshift( dataTypeOrTransport );
16496				inspect( dataTypeOrTransport );
16497				return false;
16498			} else if ( seekingTransport ) {
16499				return !( selected = dataTypeOrTransport );
16500			}
16501		} );
16502		return selected;
16503	}
16504
16505	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
16506}
16507
16508// A special extend for ajax options
16509// that takes "flat" options (not to be deep extended)
16510// Fixes trac-9887
16511function ajaxExtend( target, src ) {
16512	var key, deep,
16513		flatOptions = jQuery.ajaxSettings.flatOptions || {};
16514
16515	for ( key in src ) {
16516		if ( src[ key ] !== undefined ) {
16517			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
16518		}
16519	}
16520	if ( deep ) {
16521		jQuery.extend( true, target, deep );
16522	}
16523
16524	return target;
16525}
16526
16527/* Handles responses to an ajax request:
16528 * - finds the right dataType (mediates between content-type and expected dataType)
16529 * - returns the corresponding response
16530 */
16531function ajaxHandleResponses( s, jqXHR, responses ) {
16532
16533	var ct, type, finalDataType, firstDataType,
16534		contents = s.contents,
16535		dataTypes = s.dataTypes;
16536
16537	// Remove auto dataType and get content-type in the process
16538	while ( dataTypes[ 0 ] === "*" ) {
16539		dataTypes.shift();
16540		if ( ct === undefined ) {
16541			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
16542		}
16543	}
16544
16545	// Check if we're dealing with a known content-type
16546	if ( ct ) {
16547		for ( type in contents ) {
16548			if ( contents[ type ] && contents[ type ].test( ct ) ) {
16549				dataTypes.unshift( type );
16550				break;
16551			}
16552		}
16553	}
16554
16555	// Check to see if we have a response for the expected dataType
16556	if ( dataTypes[ 0 ] in responses ) {
16557		finalDataType = dataTypes[ 0 ];
16558	} else {
16559
16560		// Try convertible dataTypes
16561		for ( type in responses ) {
16562			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
16563				finalDataType = type;
16564				break;
16565			}
16566			if ( !firstDataType ) {
16567				firstDataType = type;
16568			}
16569		}
16570
16571		// Or just use first one
16572		finalDataType = finalDataType || firstDataType;
16573	}
16574
16575	// If we found a dataType
16576	// We add the dataType to the list if needed
16577	// and return the corresponding response
16578	if ( finalDataType ) {
16579		if ( finalDataType !== dataTypes[ 0 ] ) {
16580			dataTypes.unshift( finalDataType );
16581		}
16582		return responses[ finalDataType ];
16583	}
16584}
16585
16586/* Chain conversions given the request and the original response
16587 * Also sets the responseXXX fields on the jqXHR instance
16588 */
16589function ajaxConvert( s, response, jqXHR, isSuccess ) {
16590	var conv2, current, conv, tmp, prev,
16591		converters = {},
16592
16593		// Work with a copy of dataTypes in case we need to modify it for conversion
16594		dataTypes = s.dataTypes.slice();
16595
16596	// Create converters map with lowercased keys
16597	if ( dataTypes[ 1 ] ) {
16598		for ( conv in s.converters ) {
16599			converters[ conv.toLowerCase() ] = s.converters[ conv ];
16600		}
16601	}
16602
16603	current = dataTypes.shift();
16604
16605	// Convert to each sequential dataType
16606	while ( current ) {
16607
16608		if ( s.responseFields[ current ] ) {
16609			jqXHR[ s.responseFields[ current ] ] = response;
16610		}
16611
16612		// Apply the dataFilter if provided
16613		if ( !prev && isSuccess && s.dataFilter ) {
16614			response = s.dataFilter( response, s.dataType );
16615		}
16616
16617		prev = current;
16618		current = dataTypes.shift();
16619
16620		if ( current ) {
16621
16622			// There's only work to do if current dataType is non-auto
16623			if ( current === "*" ) {
16624
16625				current = prev;
16626
16627			// Convert response if prev dataType is non-auto and differs from current
16628			} else if ( prev !== "*" && prev !== current ) {
16629
16630				// Seek a direct converter
16631				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
16632
16633				// If none found, seek a pair
16634				if ( !conv ) {
16635					for ( conv2 in converters ) {
16636
16637						// If conv2 outputs current
16638						tmp = conv2.split( " " );
16639						if ( tmp[ 1 ] === current ) {
16640
16641							// If prev can be converted to accepted input
16642							conv = converters[ prev + " " + tmp[ 0 ] ] ||
16643								converters[ "* " + tmp[ 0 ] ];
16644							if ( conv ) {
16645
16646								// Condense equivalence converters
16647								if ( conv === true ) {
16648									conv = converters[ conv2 ];
16649
16650								// Otherwise, insert the intermediate dataType
16651								} else if ( converters[ conv2 ] !== true ) {
16652									current = tmp[ 0 ];
16653									dataTypes.unshift( tmp[ 1 ] );
16654								}
16655								break;
16656							}
16657						}
16658					}
16659				}
16660
16661				// Apply converter (if not an equivalence)
16662				if ( conv !== true ) {
16663
16664					// Unless errors are allowed to bubble, catch and return them
16665					if ( conv && s.throws ) {
16666						response = conv( response );
16667					} else {
16668						try {
16669							response = conv( response );
16670						} catch ( e ) {
16671							return {
16672								state: "parsererror",
16673								error: conv ? e : "No conversion from " + prev + " to " + current
16674							};
16675						}
16676					}
16677				}
16678			}
16679		}
16680	}
16681
16682	return { state: "success", data: response };
16683}
16684
16685jQuery.extend( {
16686
16687	// Counter for holding the number of active queries
16688	active: 0,
16689
16690	// Last-Modified header cache for next request
16691	lastModified: {},
16692	etag: {},
16693
16694	ajaxSettings: {
16695		url: location.href,
16696		type: "GET",
16697		isLocal: rlocalProtocol.test( location.protocol ),
16698		global: true,
16699		processData: true,
16700		async: true,
16701		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
16702
16703		/*
16704		timeout: 0,
16705		data: null,
16706		dataType: null,
16707		username: null,
16708		password: null,
16709		cache: null,
16710		throws: false,
16711		traditional: false,
16712		headers: {},
16713		*/
16714
16715		accepts: {
16716			"*": allTypes,
16717			text: "text/plain",
16718			html: "text/html",
16719			xml: "application/xml, text/xml",
16720			json: "application/json, text/javascript"
16721		},
16722
16723		contents: {
16724			xml: /\bxml\b/,
16725			html: /\bhtml/,
16726			json: /\bjson\b/
16727		},
16728
16729		responseFields: {
16730			xml: "responseXML",
16731			text: "responseText",
16732			json: "responseJSON"
16733		},
16734
16735		// Data converters
16736		// Keys separate source (or catchall "*") and destination types with a single space
16737		converters: {
16738
16739			// Convert anything to text
16740			"* text": String,
16741
16742			// Text to html (true = no transformation)
16743			"text html": true,
16744
16745			// Evaluate text as a json expression
16746			"text json": JSON.parse,
16747
16748			// Parse text as xml
16749			"text xml": jQuery.parseXML
16750		},
16751
16752		// For options that shouldn't be deep extended:
16753		// you can add your own custom options here if
16754		// and when you create one that shouldn't be
16755		// deep extended (see ajaxExtend)
16756		flatOptions: {
16757			url: true,
16758			context: true
16759		}
16760	},
16761
16762	// Creates a full fledged settings object into target
16763	// with both ajaxSettings and settings fields.
16764	// If target is omitted, writes into ajaxSettings.
16765	ajaxSetup: function( target, settings ) {
16766		return settings ?
16767
16768			// Building a settings object
16769			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
16770
16771			// Extending ajaxSettings
16772			ajaxExtend( jQuery.ajaxSettings, target );
16773	},
16774
16775	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
16776	ajaxTransport: addToPrefiltersOrTransports( transports ),
16777
16778	// Main method
16779	ajax: function( url, options ) {
16780
16781		// If url is an object, simulate pre-1.5 signature
16782		if ( typeof url === "object" ) {
16783			options = url;
16784			url = undefined;
16785		}
16786
16787		// Force options to be an object
16788		options = options || {};
16789
16790		var transport,
16791
16792			// URL without anti-cache param
16793			cacheURL,
16794
16795			// Response headers
16796			responseHeadersString,
16797			responseHeaders,
16798
16799			// timeout handle
16800			timeoutTimer,
16801
16802			// Url cleanup var
16803			urlAnchor,
16804
16805			// Request state (becomes false upon send and true upon completion)
16806			completed,
16807
16808			// To know if global events are to be dispatched
16809			fireGlobals,
16810
16811			// Loop variable
16812			i,
16813
16814			// uncached part of the url
16815			uncached,
16816
16817			// Create the final options object
16818			s = jQuery.ajaxSetup( {}, options ),
16819
16820			// Callbacks context
16821			callbackContext = s.context || s,
16822
16823			// Context for global events is callbackContext if it is a DOM node or jQuery collection
16824			globalEventContext = s.context &&
16825				( callbackContext.nodeType || callbackContext.jquery ) ?
16826				jQuery( callbackContext ) :
16827				jQuery.event,
16828
16829			// Deferreds
16830			deferred = jQuery.Deferred(),
16831			completeDeferred = jQuery.Callbacks( "once memory" ),
16832
16833			// Status-dependent callbacks
16834			statusCode = s.statusCode || {},
16835
16836			// Headers (they are sent all at once)
16837			requestHeaders = {},
16838			requestHeadersNames = {},
16839
16840			// Default abort message
16841			strAbort = "canceled",
16842
16843			// Fake xhr
16844			jqXHR = {
16845				readyState: 0,
16846
16847				// Builds headers hashtable if needed
16848				getResponseHeader: function( key ) {
16849					var match;
16850					if ( completed ) {
16851						if ( !responseHeaders ) {
16852							responseHeaders = {};
16853							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
16854								responseHeaders[ match[ 1 ].toLowerCase() + " " ] =
16855									( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
16856										.concat( match[ 2 ] );
16857							}
16858						}
16859						match = responseHeaders[ key.toLowerCase() + " " ];
16860					}
16861					return match == null ? null : match.join( ", " );
16862				},
16863
16864				// Raw string
16865				getAllResponseHeaders: function() {
16866					return completed ? responseHeadersString : null;
16867				},
16868
16869				// Caches the header
16870				setRequestHeader: function( name, value ) {
16871					if ( completed == null ) {
16872						name = requestHeadersNames[ name.toLowerCase() ] =
16873							requestHeadersNames[ name.toLowerCase() ] || name;
16874						requestHeaders[ name ] = value;
16875					}
16876					return this;
16877				},
16878
16879				// Overrides response content-type header
16880				overrideMimeType: function( type ) {
16881					if ( completed == null ) {
16882						s.mimeType = type;
16883					}
16884					return this;
16885				},
16886
16887				// Status-dependent callbacks
16888				statusCode: function( map ) {
16889					var code;
16890					if ( map ) {
16891						if ( completed ) {
16892
16893							// Execute the appropriate callbacks
16894							jqXHR.always( map[ jqXHR.status ] );
16895						} else {
16896
16897							// Lazy-add the new callbacks in a way that preserves old ones
16898							for ( code in map ) {
16899								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
16900							}
16901						}
16902					}
16903					return this;
16904				},
16905
16906				// Cancel the request
16907				abort: function( statusText ) {
16908					var finalText = statusText || strAbort;
16909					if ( transport ) {
16910						transport.abort( finalText );
16911					}
16912					done( 0, finalText );
16913					return this;
16914				}
16915			};
16916
16917		// Attach deferreds
16918		deferred.promise( jqXHR );
16919
16920		// Add protocol if not provided (prefilters might expect it)
16921		// Handle falsy url in the settings object (trac-10093: consistency with old signature)
16922		// We also use the url parameter if available
16923		s.url = ( ( url || s.url || location.href ) + "" )
16924			.replace( rprotocol, location.protocol + "//" );
16925
16926		// Alias method option to type as per ticket trac-12004
16927		s.type = options.method || options.type || s.method || s.type;
16928
16929		// Extract dataTypes list
16930		s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
16931
16932		// A cross-domain request is in order when the origin doesn't match the current origin.
16933		if ( s.crossDomain == null ) {
16934			urlAnchor = document.createElement( "a" );
16935
16936			// Support: IE <=8 - 11, Edge 12 - 15
16937			// IE throws exception on accessing the href property if url is malformed,
16938			// e.g. http://example.com:80x/
16939			try {
16940				urlAnchor.href = s.url;
16941
16942				// Support: IE <=8 - 11 only
16943				// Anchor's host property isn't correctly set when s.url is relative
16944				urlAnchor.href = urlAnchor.href;
16945				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
16946					urlAnchor.protocol + "//" + urlAnchor.host;
16947			} catch ( e ) {
16948
16949				// If there is an error parsing the URL, assume it is crossDomain,
16950				// it can be rejected by the transport if it is invalid
16951				s.crossDomain = true;
16952			}
16953		}
16954
16955		// Convert data if not already a string
16956		if ( s.data && s.processData && typeof s.data !== "string" ) {
16957			s.data = jQuery.param( s.data, s.traditional );
16958		}
16959
16960		// Apply prefilters
16961		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
16962
16963		// If request was aborted inside a prefilter, stop there
16964		if ( completed ) {
16965			return jqXHR;
16966		}
16967
16968		// We can fire global events as of now if asked to
16969		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)
16970		fireGlobals = jQuery.event && s.global;
16971
16972		// Watch for a new set of requests
16973		if ( fireGlobals && jQuery.active++ === 0 ) {
16974			jQuery.event.trigger( "ajaxStart" );
16975		}
16976
16977		// Uppercase the type
16978		s.type = s.type.toUpperCase();
16979
16980		// Determine if request has content
16981		s.hasContent = !rnoContent.test( s.type );
16982
16983		// Save the URL in case we're toying with the If-Modified-Since
16984		// and/or If-None-Match header later on
16985		// Remove hash to simplify url manipulation
16986		cacheURL = s.url.replace( rhash, "" );
16987
16988		// More options handling for requests with no content
16989		if ( !s.hasContent ) {
16990
16991			// Remember the hash so we can put it back
16992			uncached = s.url.slice( cacheURL.length );
16993
16994			// If data is available and should be processed, append data to url
16995			if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
16996				cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
16997
16998				// trac-9682: remove data so that it's not used in an eventual retry
16999				delete s.data;
17000			}
17001
17002			// Add or update anti-cache param if needed
17003			if ( s.cache === false ) {
17004				cacheURL = cacheURL.replace( rantiCache, "$1" );
17005				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) +
17006					uncached;
17007			}
17008
17009			// Put hash and anti-cache on the URL that will be requested (gh-1732)
17010			s.url = cacheURL + uncached;
17011
17012		// Change '%20' to '+' if this is encoded form body content (gh-2658)
17013		} else if ( s.data && s.processData &&
17014			( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
17015			s.data = s.data.replace( r20, "+" );
17016		}
17017
17018		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
17019		if ( s.ifModified ) {
17020			if ( jQuery.lastModified[ cacheURL ] ) {
17021				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
17022			}
17023			if ( jQuery.etag[ cacheURL ] ) {
17024				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
17025			}
17026		}
17027
17028		// Set the correct header, if data is being sent
17029		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
17030			jqXHR.setRequestHeader( "Content-Type", s.contentType );
17031		}
17032
17033		// Set the Accepts header for the server, depending on the dataType
17034		jqXHR.setRequestHeader(
17035			"Accept",
17036			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
17037				s.accepts[ s.dataTypes[ 0 ] ] +
17038					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
17039				s.accepts[ "*" ]
17040		);
17041
17042		// Check for headers option
17043		for ( i in s.headers ) {
17044			jqXHR.setRequestHeader( i, s.headers[ i ] );
17045		}
17046
17047		// Allow custom headers/mimetypes and early abort
17048		if ( s.beforeSend &&
17049			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
17050
17051			// Abort if not done already and return
17052			return jqXHR.abort();
17053		}
17054
17055		// Aborting is no longer a cancellation
17056		strAbort = "abort";
17057
17058		// Install callbacks on deferreds
17059		completeDeferred.add( s.complete );
17060		jqXHR.done( s.success );
17061		jqXHR.fail( s.error );
17062
17063		// Get transport
17064		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
17065
17066		// If no transport, we auto-abort
17067		if ( !transport ) {
17068			done( -1, "No Transport" );
17069		} else {
17070			jqXHR.readyState = 1;
17071
17072			// Send global event
17073			if ( fireGlobals ) {
17074				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
17075			}
17076
17077			// If request was aborted inside ajaxSend, stop there
17078			if ( completed ) {
17079				return jqXHR;
17080			}
17081
17082			// Timeout
17083			if ( s.async && s.timeout > 0 ) {
17084				timeoutTimer = window.setTimeout( function() {
17085					jqXHR.abort( "timeout" );
17086				}, s.timeout );
17087			}
17088
17089			try {
17090				completed = false;
17091				transport.send( requestHeaders, done );
17092			} catch ( e ) {
17093
17094				// Rethrow post-completion exceptions
17095				if ( completed ) {
17096					throw e;
17097				}
17098
17099				// Propagate others as results
17100				done( -1, e );
17101			}
17102		}
17103
17104		// Callback for when everything is done
17105		function done( status, nativeStatusText, responses, headers ) {
17106			var isSuccess, success, error, response, modified,
17107				statusText = nativeStatusText;
17108
17109			// Ignore repeat invocations
17110			if ( completed ) {
17111				return;
17112			}
17113
17114			completed = true;
17115
17116			// Clear timeout if it exists
17117			if ( timeoutTimer ) {
17118				window.clearTimeout( timeoutTimer );
17119			}
17120
17121			// Dereference transport for early garbage collection
17122			// (no matter how long the jqXHR object will be used)
17123			transport = undefined;
17124
17125			// Cache response headers
17126			responseHeadersString = headers || "";
17127
17128			// Set readyState
17129			jqXHR.readyState = status > 0 ? 4 : 0;
17130
17131			// Determine if successful
17132			isSuccess = status >= 200 && status < 300 || status === 304;
17133
17134			// Get response data
17135			if ( responses ) {
17136				response = ajaxHandleResponses( s, jqXHR, responses );
17137			}
17138
17139			// Use a noop converter for missing script but not if jsonp
17140			if ( !isSuccess &&
17141				jQuery.inArray( "script", s.dataTypes ) > -1 &&
17142				jQuery.inArray( "json", s.dataTypes ) < 0 ) {
17143				s.converters[ "text script" ] = function() {};
17144			}
17145
17146			// Convert no matter what (that way responseXXX fields are always set)
17147			response = ajaxConvert( s, response, jqXHR, isSuccess );
17148
17149			// If successful, handle type chaining
17150			if ( isSuccess ) {
17151
17152				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
17153				if ( s.ifModified ) {
17154					modified = jqXHR.getResponseHeader( "Last-Modified" );
17155					if ( modified ) {
17156						jQuery.lastModified[ cacheURL ] = modified;
17157					}
17158					modified = jqXHR.getResponseHeader( "etag" );
17159					if ( modified ) {
17160						jQuery.etag[ cacheURL ] = modified;
17161					}
17162				}
17163
17164				// if no content
17165				if ( status === 204 || s.type === "HEAD" ) {
17166					statusText = "nocontent";
17167
17168				// if not modified
17169				} else if ( status === 304 ) {
17170					statusText = "notmodified";
17171
17172				// If we have data, let's convert it
17173				} else {
17174					statusText = response.state;
17175					success = response.data;
17176					error = response.error;
17177					isSuccess = !error;
17178				}
17179			} else {
17180
17181				// Extract error from statusText and normalize for non-aborts
17182				error = statusText;
17183				if ( status || !statusText ) {
17184					statusText = "error";
17185					if ( status < 0 ) {
17186						status = 0;
17187					}
17188				}
17189			}
17190
17191			// Set data for the fake xhr object
17192			jqXHR.status = status;
17193			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
17194
17195			// Success/Error
17196			if ( isSuccess ) {
17197				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
17198			} else {
17199				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
17200			}
17201
17202			// Status-dependent callbacks
17203			jqXHR.statusCode( statusCode );
17204			statusCode = undefined;
17205
17206			if ( fireGlobals ) {
17207				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
17208					[ jqXHR, s, isSuccess ? success : error ] );
17209			}
17210
17211			// Complete
17212			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
17213
17214			if ( fireGlobals ) {
17215				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
17216
17217				// Handle the global AJAX counter
17218				if ( !( --jQuery.active ) ) {
17219					jQuery.event.trigger( "ajaxStop" );
17220				}
17221			}
17222		}
17223
17224		return jqXHR;
17225	},
17226
17227	getJSON: function( url, data, callback ) {
17228		return jQuery.get( url, data, callback, "json" );
17229	},
17230
17231	getScript: function( url, callback ) {
17232		return jQuery.get( url, undefined, callback, "script" );
17233	}
17234} );
17235
17236jQuery.each( [ "get", "post" ], function( _i, method ) {
17237	jQuery[ method ] = function( url, data, callback, type ) {
17238
17239		// Shift arguments if data argument was omitted
17240		if ( isFunction( data ) ) {
17241			type = type || callback;
17242			callback = data;
17243			data = undefined;
17244		}
17245
17246		// The url can be an options object (which then must have .url)
17247		return jQuery.ajax( jQuery.extend( {
17248			url: url,
17249			type: method,
17250			dataType: type,
17251			data: data,
17252			success: callback
17253		}, jQuery.isPlainObject( url ) && url ) );
17254	};
17255} );
17256
17257jQuery.ajaxPrefilter( function( s ) {
17258	var i;
17259	for ( i in s.headers ) {
17260		if ( i.toLowerCase() === "content-type" ) {
17261			s.contentType = s.headers[ i ] || "";
17262		}
17263	}
17264} );
17265
17266
17267jQuery._evalUrl = function( url, options, doc ) {
17268	return jQuery.ajax( {
17269		url: url,
17270
17271		// Make this explicit, since user can override this through ajaxSetup (trac-11264)
17272		type: "GET",
17273		dataType: "script",
17274		cache: true,
17275		async: false,
17276		global: false,
17277
17278		// Only evaluate the response if it is successful (gh-4126)
17279		// dataFilter is not invoked for failure responses, so using it instead
17280		// of the default converter is kludgy but it works.
17281		converters: {
17282			"text script": function() {}
17283		},
17284		dataFilter: function( response ) {
17285			jQuery.globalEval( response, options, doc );
17286		}
17287	} );
17288};
17289
17290
17291jQuery.fn.extend( {
17292	wrapAll: function( html ) {
17293		var wrap;
17294
17295		if ( this[ 0 ] ) {
17296			if ( isFunction( html ) ) {
17297				html = html.call( this[ 0 ] );
17298			}
17299
17300			// The elements to wrap the target around
17301			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
17302
17303			if ( this[ 0 ].parentNode ) {
17304				wrap.insertBefore( this[ 0 ] );
17305			}
17306
17307			wrap.map( function() {
17308				var elem = this;
17309
17310				while ( elem.firstElementChild ) {
17311					elem = elem.firstElementChild;
17312				}
17313
17314				return elem;
17315			} ).append( this );
17316		}
17317
17318		return this;
17319	},
17320
17321	wrapInner: function( html ) {
17322		if ( isFunction( html ) ) {
17323			return this.each( function( i ) {
17324				jQuery( this ).wrapInner( html.call( this, i ) );
17325			} );
17326		}
17327
17328		return this.each( function() {
17329			var self = jQuery( this ),
17330				contents = self.contents();
17331
17332			if ( contents.length ) {
17333				contents.wrapAll( html );
17334
17335			} else {
17336				self.append( html );
17337			}
17338		} );
17339	},
17340
17341	wrap: function( html ) {
17342		var htmlIsFunction = isFunction( html );
17343
17344		return this.each( function( i ) {
17345			jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
17346		} );
17347	},
17348
17349	unwrap: function( selector ) {
17350		this.parent( selector ).not( "body" ).each( function() {
17351			jQuery( this ).replaceWith( this.childNodes );
17352		} );
17353		return this;
17354	}
17355} );
17356
17357
17358jQuery.expr.pseudos.hidden = function( elem ) {
17359	return !jQuery.expr.pseudos.visible( elem );
17360};
17361jQuery.expr.pseudos.visible = function( elem ) {
17362	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
17363};
17364
17365
17366
17367
17368jQuery.ajaxSettings.xhr = function() {
17369	try {
17370		return new window.XMLHttpRequest();
17371	} catch ( e ) {}
17372};
17373
17374var xhrSuccessStatus = {
17375
17376		// File protocol always yields status code 0, assume 200
17377		0: 200,
17378
17379		// Support: IE <=9 only
17380		// trac-1450: sometimes IE returns 1223 when it should be 204
17381		1223: 204
17382	},
17383	xhrSupported = jQuery.ajaxSettings.xhr();
17384
17385support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
17386support.ajax = xhrSupported = !!xhrSupported;
17387
17388jQuery.ajaxTransport( function( options ) {
17389	var callback, errorCallback;
17390
17391	// Cross domain only allowed if supported through XMLHttpRequest
17392	if ( support.cors || xhrSupported && !options.crossDomain ) {
17393		return {
17394			send: function( headers, complete ) {
17395				var i,
17396					xhr = options.xhr();
17397
17398				xhr.open(
17399					options.type,
17400					options.url,
17401					options.async,
17402					options.username,
17403					options.password
17404				);
17405
17406				// Apply custom fields if provided
17407				if ( options.xhrFields ) {
17408					for ( i in options.xhrFields ) {
17409						xhr[ i ] = options.xhrFields[ i ];
17410					}
17411				}
17412
17413				// Override mime type if needed
17414				if ( options.mimeType && xhr.overrideMimeType ) {
17415					xhr.overrideMimeType( options.mimeType );
17416				}
17417
17418				// X-Requested-With header
17419				// For cross-domain requests, seeing as conditions for a preflight are
17420				// akin to a jigsaw puzzle, we simply never set it to be sure.
17421				// (it can always be set on a per-request basis or even using ajaxSetup)
17422				// For same-domain requests, won't change header if already provided.
17423				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
17424					headers[ "X-Requested-With" ] = "XMLHttpRequest";
17425				}
17426
17427				// Set headers
17428				for ( i in headers ) {
17429					xhr.setRequestHeader( i, headers[ i ] );
17430				}
17431
17432				// Callback
17433				callback = function( type ) {
17434					return function() {
17435						if ( callback ) {
17436							callback = errorCallback = xhr.onload =
17437								xhr.onerror = xhr.onabort = xhr.ontimeout =
17438									xhr.onreadystatechange = null;
17439
17440							if ( type === "abort" ) {
17441								xhr.abort();
17442							} else if ( type === "error" ) {
17443
17444								// Support: IE <=9 only
17445								// On a manual native abort, IE9 throws
17446								// errors on any property access that is not readyState
17447								if ( typeof xhr.status !== "number" ) {
17448									complete( 0, "error" );
17449								} else {
17450									complete(
17451
17452										// File: protocol always yields status 0; see trac-8605, trac-14207
17453										xhr.status,
17454										xhr.statusText
17455									);
17456								}
17457							} else {
17458								complete(
17459									xhrSuccessStatus[ xhr.status ] || xhr.status,
17460									xhr.statusText,
17461
17462									// Support: IE <=9 only
17463									// IE9 has no XHR2 but throws on binary (trac-11426)
17464									// For XHR2 non-text, let the caller handle it (gh-2498)
17465									( xhr.responseType || "text" ) !== "text"  ||
17466									typeof xhr.responseText !== "string" ?
17467										{ binary: xhr.response } :
17468										{ text: xhr.responseText },
17469									xhr.getAllResponseHeaders()
17470								);
17471							}
17472						}
17473					};
17474				};
17475
17476				// Listen to events
17477				xhr.onload = callback();
17478				errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
17479
17480				// Support: IE 9 only
17481				// Use onreadystatechange to replace onabort
17482				// to handle uncaught aborts
17483				if ( xhr.onabort !== undefined ) {
17484					xhr.onabort = errorCallback;
17485				} else {
17486					xhr.onreadystatechange = function() {
17487
17488						// Check readyState before timeout as it changes
17489						if ( xhr.readyState === 4 ) {
17490
17491							// Allow onerror to be called first,
17492							// but that will not handle a native abort
17493							// Also, save errorCallback to a variable
17494							// as xhr.onerror cannot be accessed
17495							window.setTimeout( function() {
17496								if ( callback ) {
17497									errorCallback();
17498								}
17499							} );
17500						}
17501					};
17502				}
17503
17504				// Create the abort callback
17505				callback = callback( "abort" );
17506
17507				try {
17508
17509					// Do send the request (this may raise an exception)
17510					xhr.send( options.hasContent && options.data || null );
17511				} catch ( e ) {
17512
17513					// trac-14683: Only rethrow if this hasn't been notified as an error yet
17514					if ( callback ) {
17515						throw e;
17516					}
17517				}
17518			},
17519
17520			abort: function() {
17521				if ( callback ) {
17522					callback();
17523				}
17524			}
17525		};
17526	}
17527} );
17528
17529
17530
17531
17532// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
17533jQuery.ajaxPrefilter( function( s ) {
17534	if ( s.crossDomain ) {
17535		s.contents.script = false;
17536	}
17537} );
17538
17539// Install script dataType
17540jQuery.ajaxSetup( {
17541	accepts: {
17542		script: "text/javascript, application/javascript, " +
17543			"application/ecmascript, application/x-ecmascript"
17544	},
17545	contents: {
17546		script: /\b(?:java|ecma)script\b/
17547	},
17548	converters: {
17549		"text script": function( text ) {
17550			jQuery.globalEval( text );
17551			return text;
17552		}
17553	}
17554} );
17555
17556// Handle cache's special case and crossDomain
17557jQuery.ajaxPrefilter( "script", function( s ) {
17558	if ( s.cache === undefined ) {
17559		s.cache = false;
17560	}
17561	if ( s.crossDomain ) {
17562		s.type = "GET";
17563	}
17564} );
17565
17566// Bind script tag hack transport
17567jQuery.ajaxTransport( "script", function( s ) {
17568
17569	// This transport only deals with cross domain or forced-by-attrs requests
17570	if ( s.crossDomain || s.scriptAttrs ) {
17571		var script, callback;
17572		return {
17573			send: function( _, complete ) {
17574				script = jQuery( "<script>" )
17575					.attr( s.scriptAttrs || {} )
17576					.prop( { charset: s.scriptCharset, src: s.url } )
17577					.on( "load error", callback = function( evt ) {
17578						script.remove();
17579						callback = null;
17580						if ( evt ) {
17581							complete( evt.type === "error" ? 404 : 200, evt.type );
17582						}
17583					} );
17584
17585				// Use native DOM manipulation to avoid our domManip AJAX trickery
17586				document.head.appendChild( script[ 0 ] );
17587			},
17588			abort: function() {
17589				if ( callback ) {
17590					callback();
17591				}
17592			}
17593		};
17594	}
17595} );
17596
17597
17598
17599
17600var oldCallbacks = [],
17601	rjsonp = /(=)\?(?=&|$)|\?\?/;
17602
17603// Default jsonp settings
17604jQuery.ajaxSetup( {
17605	jsonp: "callback",
17606	jsonpCallback: function() {
17607		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) );
17608		this[ callback ] = true;
17609		return callback;
17610	}
17611} );
17612
17613// Detect, normalize options and install callbacks for jsonp requests
17614jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
17615
17616	var callbackName, overwritten, responseContainer,
17617		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
17618			"url" :
17619			typeof s.data === "string" &&
17620				( s.contentType || "" )
17621					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
17622				rjsonp.test( s.data ) && "data"
17623		);
17624
17625	// Handle iff the expected data type is "jsonp" or we have a parameter to set
17626	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
17627
17628		// Get callback name, remembering preexisting value associated with it
17629		callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
17630			s.jsonpCallback() :
17631			s.jsonpCallback;
17632
17633		// Insert callback into url or form data
17634		if ( jsonProp ) {
17635			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
17636		} else if ( s.jsonp !== false ) {
17637			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
17638		}
17639
17640		// Use data converter to retrieve json after script execution
17641		s.converters[ "script json" ] = function() {
17642			if ( !responseContainer ) {
17643				jQuery.error( callbackName + " was not called" );
17644			}
17645			return responseContainer[ 0 ];
17646		};
17647
17648		// Force json dataType
17649		s.dataTypes[ 0 ] = "json";
17650
17651		// Install callback
17652		overwritten = window[ callbackName ];
17653		window[ callbackName ] = function() {
17654			responseContainer = arguments;
17655		};
17656
17657		// Clean-up function (fires after converters)
17658		jqXHR.always( function() {
17659
17660			// If previous value didn't exist - remove it
17661			if ( overwritten === undefined ) {
17662				jQuery( window ).removeProp( callbackName );
17663
17664			// Otherwise restore preexisting value
17665			} else {
17666				window[ callbackName ] = overwritten;
17667			}
17668
17669			// Save back as free
17670			if ( s[ callbackName ] ) {
17671
17672				// Make sure that re-using the options doesn't screw things around
17673				s.jsonpCallback = originalSettings.jsonpCallback;
17674
17675				// Save the callback name for future use
17676				oldCallbacks.push( callbackName );
17677			}
17678
17679			// Call if it was a function and we have a response
17680			if ( responseContainer && isFunction( overwritten ) ) {
17681				overwritten( responseContainer[ 0 ] );
17682			}
17683
17684			responseContainer = overwritten = undefined;
17685		} );
17686
17687		// Delegate to script
17688		return "script";
17689	}
17690} );
17691
17692
17693
17694
17695// Support: Safari 8 only
17696// In Safari 8 documents created via document.implementation.createHTMLDocument
17697// collapse sibling forms: the second one becomes a child of the first one.
17698// Because of that, this security measure has to be disabled in Safari 8.
17699// https://bugs.webkit.org/show_bug.cgi?id=137337
17700support.createHTMLDocument = ( function() {
17701	var body = document.implementation.createHTMLDocument( "" ).body;
17702	body.innerHTML = "<form></form><form></form>";
17703	return body.childNodes.length === 2;
17704} )();
17705
17706
17707// Argument "data" should be string of html
17708// context (optional): If specified, the fragment will be created in this context,
17709// defaults to document
17710// keepScripts (optional): If true, will include scripts passed in the html string
17711jQuery.parseHTML = function( data, context, keepScripts ) {
17712	if ( typeof data !== "string" ) {
17713		return [];
17714	}
17715	if ( typeof context === "boolean" ) {
17716		keepScripts = context;
17717		context = false;
17718	}
17719
17720	var base, parsed, scripts;
17721
17722	if ( !context ) {
17723
17724		// Stop scripts or inline event handlers from being executed immediately
17725		// by using document.implementation
17726		if ( support.createHTMLDocument ) {
17727			context = document.implementation.createHTMLDocument( "" );
17728
17729			// Set the base href for the created document
17730			// so any parsed elements with URLs
17731			// are based on the document's URL (gh-2965)
17732			base = context.createElement( "base" );
17733			base.href = document.location.href;
17734			context.head.appendChild( base );
17735		} else {
17736			context = document;
17737		}
17738	}
17739
17740	parsed = rsingleTag.exec( data );
17741	scripts = !keepScripts && [];
17742
17743	// Single tag
17744	if ( parsed ) {
17745		return [ context.createElement( parsed[ 1 ] ) ];
17746	}
17747
17748	parsed = buildFragment( [ data ], context, scripts );
17749
17750	if ( scripts && scripts.length ) {
17751		jQuery( scripts ).remove();
17752	}
17753
17754	return jQuery.merge( [], parsed.childNodes );
17755};
17756
17757
17758/**
17759 * Load a url into a page
17760 */
17761jQuery.fn.load = function( url, params, callback ) {
17762	var selector, type, response,
17763		self = this,
17764		off = url.indexOf( " " );
17765
17766	if ( off > -1 ) {
17767		selector = stripAndCollapse( url.slice( off ) );
17768		url = url.slice( 0, off );
17769	}
17770
17771	// If it's a function
17772	if ( isFunction( params ) ) {
17773
17774		// We assume that it's the callback
17775		callback = params;
17776		params = undefined;
17777
17778	// Otherwise, build a param string
17779	} else if ( params && typeof params === "object" ) {
17780		type = "POST";
17781	}
17782
17783	// If we have elements to modify, make the request
17784	if ( self.length > 0 ) {
17785		jQuery.ajax( {
17786			url: url,
17787
17788			// If "type" variable is undefined, then "GET" method will be used.
17789			// Make value of this field explicit since
17790			// user can override it through ajaxSetup method
17791			type: type || "GET",
17792			dataType: "html",
17793			data: params
17794		} ).done( function( responseText ) {
17795
17796			// Save response for use in complete callback
17797			response = arguments;
17798
17799			self.html( selector ?
17800
17801				// If a selector was specified, locate the right elements in a dummy div
17802				// Exclude scripts to avoid IE 'Permission Denied' errors
17803				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
17804
17805				// Otherwise use the full result
17806				responseText );
17807
17808		// If the request succeeds, this function gets "data", "status", "jqXHR"
17809		// but they are ignored because response was set above.
17810		// If it fails, this function gets "jqXHR", "status", "error"
17811		} ).always( callback && function( jqXHR, status ) {
17812			self.each( function() {
17813				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
17814			} );
17815		} );
17816	}
17817
17818	return this;
17819};
17820
17821
17822
17823
17824jQuery.expr.pseudos.animated = function( elem ) {
17825	return jQuery.grep( jQuery.timers, function( fn ) {
17826		return elem === fn.elem;
17827	} ).length;
17828};
17829
17830
17831
17832
17833jQuery.offset = {
17834	setOffset: function( elem, options, i ) {
17835		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
17836			position = jQuery.css( elem, "position" ),
17837			curElem = jQuery( elem ),
17838			props = {};
17839
17840		// Set position first, in-case top/left are set even on static elem
17841		if ( position === "static" ) {
17842			elem.style.position = "relative";
17843		}
17844
17845		curOffset = curElem.offset();
17846		curCSSTop = jQuery.css( elem, "top" );
17847		curCSSLeft = jQuery.css( elem, "left" );
17848		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
17849			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
17850
17851		// Need to be able to calculate position if either
17852		// top or left is auto and position is either absolute or fixed
17853		if ( calculatePosition ) {
17854			curPosition = curElem.position();
17855			curTop = curPosition.top;
17856			curLeft = curPosition.left;
17857
17858		} else {
17859			curTop = parseFloat( curCSSTop ) || 0;
17860			curLeft = parseFloat( curCSSLeft ) || 0;
17861		}
17862
17863		if ( isFunction( options ) ) {
17864
17865			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
17866			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
17867		}
17868
17869		if ( options.top != null ) {
17870			props.top = ( options.top - curOffset.top ) + curTop;
17871		}
17872		if ( options.left != null ) {
17873			props.left = ( options.left - curOffset.left ) + curLeft;
17874		}
17875
17876		if ( "using" in options ) {
17877			options.using.call( elem, props );
17878
17879		} else {
17880			curElem.css( props );
17881		}
17882	}
17883};
17884
17885jQuery.fn.extend( {
17886
17887	// offset() relates an element's border box to the document origin
17888	offset: function( options ) {
17889
17890		// Preserve chaining for setter
17891		if ( arguments.length ) {
17892			return options === undefined ?
17893				this :
17894				this.each( function( i ) {
17895					jQuery.offset.setOffset( this, options, i );
17896				} );
17897		}
17898
17899		var rect, win,
17900			elem = this[ 0 ];
17901
17902		if ( !elem ) {
17903			return;
17904		}
17905
17906		// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
17907		// Support: IE <=11 only
17908		// Running getBoundingClientRect on a
17909		// disconnected node in IE throws an error
17910		if ( !elem.getClientRects().length ) {
17911			return { top: 0, left: 0 };
17912		}
17913
17914		// Get document-relative position by adding viewport scroll to viewport-relative gBCR
17915		rect = elem.getBoundingClientRect();
17916		win = elem.ownerDocument.defaultView;
17917		return {
17918			top: rect.top + win.pageYOffset,
17919			left: rect.left + win.pageXOffset
17920		};
17921	},
17922
17923	// position() relates an element's margin box to its offset parent's padding box
17924	// This corresponds to the behavior of CSS absolute positioning
17925	position: function() {
17926		if ( !this[ 0 ] ) {
17927			return;
17928		}
17929
17930		var offsetParent, offset, doc,
17931			elem = this[ 0 ],
17932			parentOffset = { top: 0, left: 0 };
17933
17934		// position:fixed elements are offset from the viewport, which itself always has zero offset
17935		if ( jQuery.css( elem, "position" ) === "fixed" ) {
17936
17937			// Assume position:fixed implies availability of getBoundingClientRect
17938			offset = elem.getBoundingClientRect();
17939
17940		} else {
17941			offset = this.offset();
17942
17943			// Account for the *real* offset parent, which can be the document or its root element
17944			// when a statically positioned element is identified
17945			doc = elem.ownerDocument;
17946			offsetParent = elem.offsetParent || doc.documentElement;
17947			while ( offsetParent &&
17948				( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
17949				jQuery.css( offsetParent, "position" ) === "static" ) {
17950
17951				offsetParent = offsetParent.parentNode;
17952			}
17953			if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
17954
17955				// Incorporate borders into its offset, since they are outside its content origin
17956				parentOffset = jQuery( offsetParent ).offset();
17957				parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
17958				parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
17959			}
17960		}
17961
17962		// Subtract parent offsets and element margins
17963		return {
17964			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
17965			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
17966		};
17967	},
17968
17969	// This method will return documentElement in the following cases:
17970	// 1) For the element inside the iframe without offsetParent, this method will return
17971	//    documentElement of the parent window
17972	// 2) For the hidden or detached element
17973	// 3) For body or html element, i.e. in case of the html node - it will return itself
17974	//
17975	// but those exceptions were never presented as a real life use-cases
17976	// and might be considered as more preferable results.
17977	//
17978	// This logic, however, is not guaranteed and can change at any point in the future
17979	offsetParent: function() {
17980		return this.map( function() {
17981			var offsetParent = this.offsetParent;
17982
17983			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
17984				offsetParent = offsetParent.offsetParent;
17985			}
17986
17987			return offsetParent || documentElement;
17988		} );
17989	}
17990} );
17991
17992// Create scrollLeft and scrollTop methods
17993jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
17994	var top = "pageYOffset" === prop;
17995
17996	jQuery.fn[ method ] = function( val ) {
17997		return access( this, function( elem, method, val ) {
17998
17999			// Coalesce documents and windows
18000			var win;
18001			if ( isWindow( elem ) ) {
18002				win = elem;
18003			} else if ( elem.nodeType === 9 ) {
18004				win = elem.defaultView;
18005			}
18006
18007			if ( val === undefined ) {
18008				return win ? win[ prop ] : elem[ method ];
18009			}
18010
18011			if ( win ) {
18012				win.scrollTo(
18013					!top ? val : win.pageXOffset,
18014					top ? val : win.pageYOffset
18015				);
18016
18017			} else {
18018				elem[ method ] = val;
18019			}
18020		}, method, val, arguments.length );
18021	};
18022} );
18023
18024// Support: Safari <=7 - 9.1, Chrome <=37 - 49
18025// Add the top/left cssHooks using jQuery.fn.position
18026// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
18027// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
18028// getComputedStyle returns percent when specified for top/left/bottom/right;
18029// rather than make the css module depend on the offset module, just check for it here
18030jQuery.each( [ "top", "left" ], function( _i, prop ) {
18031	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
18032		function( elem, computed ) {
18033			if ( computed ) {
18034				computed = curCSS( elem, prop );
18035
18036				// If curCSS returns percentage, fallback to offset
18037				return rnumnonpx.test( computed ) ?
18038					jQuery( elem ).position()[ prop ] + "px" :
18039					computed;
18040			}
18041		}
18042	);
18043} );
18044
18045
18046// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
18047jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
18048	jQuery.each( {
18049		padding: "inner" + name,
18050		content: type,
18051		"": "outer" + name
18052	}, function( defaultExtra, funcName ) {
18053
18054		// Margin is only for outerHeight, outerWidth
18055		jQuery.fn[ funcName ] = function( margin, value ) {
18056			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
18057				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
18058
18059			return access( this, function( elem, type, value ) {
18060				var doc;
18061
18062				if ( isWindow( elem ) ) {
18063
18064					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
18065					return funcName.indexOf( "outer" ) === 0 ?
18066						elem[ "inner" + name ] :
18067						elem.document.documentElement[ "client" + name ];
18068				}
18069
18070				// Get document width or height
18071				if ( elem.nodeType === 9 ) {
18072					doc = elem.documentElement;
18073
18074					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
18075					// whichever is greatest
18076					return Math.max(
18077						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
18078						elem.body[ "offset" + name ], doc[ "offset" + name ],
18079						doc[ "client" + name ]
18080					);
18081				}
18082
18083				return value === undefined ?
18084
18085					// Get width or height on the element, requesting but not forcing parseFloat
18086					jQuery.css( elem, type, extra ) :
18087
18088					// Set width or height on the element
18089					jQuery.style( elem, type, value, extra );
18090			}, type, chainable ? margin : undefined, chainable );
18091		};
18092	} );
18093} );
18094
18095
18096jQuery.each( [
18097	"ajaxStart",
18098	"ajaxStop",
18099	"ajaxComplete",
18100	"ajaxError",
18101	"ajaxSuccess",
18102	"ajaxSend"
18103], function( _i, type ) {
18104	jQuery.fn[ type ] = function( fn ) {
18105		return this.on( type, fn );
18106	};
18107} );
18108
18109
18110
18111
18112jQuery.fn.extend( {
18113
18114	bind: function( types, data, fn ) {
18115		return this.on( types, null, data, fn );
18116	},
18117	unbind: function( types, fn ) {
18118		return this.off( types, null, fn );
18119	},
18120
18121	delegate: function( selector, types, data, fn ) {
18122		return this.on( types, selector, data, fn );
18123	},
18124	undelegate: function( selector, types, fn ) {
18125
18126		// ( namespace ) or ( selector, types [, fn] )
18127		return arguments.length === 1 ?
18128			this.off( selector, "**" ) :
18129			this.off( types, selector || "**", fn );
18130	},
18131
18132	hover: function( fnOver, fnOut ) {
18133		return this
18134			.on( "mouseenter", fnOver )
18135			.on( "mouseleave", fnOut || fnOver );
18136	}
18137} );
18138
18139jQuery.each(
18140	( "blur focus focusin focusout resize scroll click dblclick " +
18141	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
18142	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
18143	function( _i, name ) {
18144
18145		// Handle event binding
18146		jQuery.fn[ name ] = function( data, fn ) {
18147			return arguments.length > 0 ?
18148				this.on( name, null, data, fn ) :
18149				this.trigger( name );
18150		};
18151	}
18152);
18153
18154
18155
18156
18157// Support: Android <=4.0 only
18158// Make sure we trim BOM and NBSP
18159// Require that the "whitespace run" starts from a non-whitespace
18160// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position.
18161var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
18162
18163// Bind a function to a context, optionally partially applying any
18164// arguments.
18165// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
18166// However, it is not slated for removal any time soon
18167jQuery.proxy = function( fn, context ) {
18168	var tmp, args, proxy;
18169
18170	if ( typeof context === "string" ) {
18171		tmp = fn[ context ];
18172		context = fn;
18173		fn = tmp;
18174	}
18175
18176	// Quick check to determine if target is callable, in the spec
18177	// this throws a TypeError, but we will just return undefined.
18178	if ( !isFunction( fn ) ) {
18179		return undefined;
18180	}
18181
18182	// Simulated bind
18183	args = slice.call( arguments, 2 );
18184	proxy = function() {
18185		return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
18186	};
18187
18188	// Set the guid of unique handler to the same of original handler, so it can be removed
18189	proxy.guid = fn.guid = fn.guid || jQuery.guid++;
18190
18191	return proxy;
18192};
18193
18194jQuery.holdReady = function( hold ) {
18195	if ( hold ) {
18196		jQuery.readyWait++;
18197	} else {
18198		jQuery.ready( true );
18199	}
18200};
18201jQuery.isArray = Array.isArray;
18202jQuery.parseJSON = JSON.parse;
18203jQuery.nodeName = nodeName;
18204jQuery.isFunction = isFunction;
18205jQuery.isWindow = isWindow;
18206jQuery.camelCase = camelCase;
18207jQuery.type = toType;
18208
18209jQuery.now = Date.now;
18210
18211jQuery.isNumeric = function( obj ) {
18212
18213	// As of jQuery 3.0, isNumeric is limited to
18214	// strings and numbers (primitives or objects)
18215	// that can be coerced to finite numbers (gh-2662)
18216	var type = jQuery.type( obj );
18217	return ( type === "number" || type === "string" ) &&
18218
18219		// parseFloat NaNs numeric-cast false positives ("")
18220		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
18221		// subtraction forces infinities to NaN
18222		!isNaN( obj - parseFloat( obj ) );
18223};
18224
18225jQuery.trim = function( text ) {
18226	return text == null ?
18227		"" :
18228		( text + "" ).replace( rtrim, "$1" );
18229};
18230
18231
18232
18233// Register as a named AMD module, since jQuery can be concatenated with other
18234// files that may use define, but not via a proper concatenation script that
18235// understands anonymous AMD modules. A named AMD is safest and most robust
18236// way to register. Lowercase jquery is used because AMD module names are
18237// derived from file names, and jQuery is normally delivered in a lowercase
18238// file name. Do this after creating the global so that if an AMD module wants
18239// to call noConflict to hide this version of jQuery, it will work.
18240
18241// Note that for maximum portability, libraries that are not jQuery should
18242// declare themselves as anonymous modules, and avoid setting a global if an
18243// AMD loader is present. jQuery is a special case. For more information, see
18244// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
18245
18246if ( true ) {
18247	!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {
18248		return jQuery;
18249	}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
18250		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
18251}
18252
18253
18254
18255
18256var
18257
18258	// Map over jQuery in case of overwrite
18259	_jQuery = window.jQuery,
18260
18261	// Map over the $ in case of overwrite
18262	_$ = window.$;
18263
18264jQuery.noConflict = function( deep ) {
18265	if ( window.$ === jQuery ) {
18266		window.$ = _$;
18267	}
18268
18269	if ( deep && window.jQuery === jQuery ) {
18270		window.jQuery = _jQuery;
18271	}
18272
18273	return jQuery;
18274};
18275
18276// Expose jQuery and $ identifiers, even in AMD
18277// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)
18278// and CommonJS for browser emulators (trac-13566)
18279if ( typeof noGlobal === "undefined" ) {
18280	window.jQuery = window.$ = jQuery;
18281}
18282
18283
18284
18285
18286return jQuery;
18287} );
18288
18289
18290/***/ }),
18291
18292/***/ "./src/main/webpack/dependencies/main.scss":
18293/*!*************************************************!*\
18294  !*** ./src/main/webpack/dependencies/main.scss ***!
18295  \*************************************************/
18296/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
18297
18298"use strict";
18299__webpack_require__.r(__webpack_exports__);
18300// extracted by mini-css-extract-plugin
18301
18302
18303/***/ }),
18304
18305/***/ "./src/main/webpack/dependencies/main.ts":
18306/*!***********************************************!*\
18307  !*** ./src/main/webpack/dependencies/main.ts ***!
18308  \***********************************************/
18309/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
18310
18311"use strict";
18312__webpack_require__.r(__webpack_exports__);
18313/* harmony import */ var _main_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./main.scss */ "./src/main/webpack/dependencies/main.scss");
18314/* harmony import */ var _vendor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./vendor.js */ "./src/main/webpack/dependencies/vendor.js");
18315/* harmony import */ var _vendor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_vendor_js__WEBPACK_IMPORTED_MODULE_1__);
18316
18317
18318
18319
18320/***/ }),
18321
18322/***/ "./src/main/webpack/dependencies/vendor.js":
18323/*!*************************************************!*\
18324  !*** ./src/main/webpack/dependencies/vendor.js ***!
18325  \*************************************************/
18326/***/ (function() {
18327
18328
18329
18330/***/ })
vendor: 3,722 bytes, lines 18330-18422
18330
18331
18332/******/ 	});
18333/************************************************************************/
18334/******/ 	// The module cache
18335/******/ 	var __webpack_module_cache__ = {};
18336/******/ 	
18337/******/ 	// The require function
18338/******/ 	function __webpack_require__(moduleId) {
18339/******/ 		// Check if module is in cache
18340/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
18341/******/ 		if (cachedModule !== undefined) {
18342/******/ 			return cachedModule.exports;
18343/******/ 		}
18344/******/ 		// Create a new module (and put it into the cache)
18345/******/ 		var module = __webpack_module_cache__[moduleId] = {
18346/******/ 			// no module.id needed
18347/******/ 			// no module.loaded needed
18348/******/ 			exports: {}
18349/******/ 		};
18350/******/ 	
18351/******/ 		// Execute the module function
18352/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
18353/******/ 	
18354/******/ 		// Return the exports of the module
18355/******/ 		return module.exports;
18356/******/ 	}
18357/******/ 	
18358/************************************************************************/
18359/******/ 	/* webpack/runtime/compat get default export */
18360/******/ 	!function() {
18361/******/ 		// getDefaultExport function for compatibility with non-harmony modules
18362/******/ 		__webpack_require__.n = function(module) {
18363/******/ 			var getter = module && module.__esModule ?
18364/******/ 				function() { return module['default']; } :
18365/******/ 				function() { return module; };
18366/******/ 			__webpack_require__.d(getter, { a: getter });
18367/******/ 			return getter;
18368/******/ 		};
18369/******/ 	}();
18370/******/ 	
18371/******/ 	/* webpack/runtime/define property getters */
18372/******/ 	!function() {
18373/******/ 		// define getter functions for harmony exports
18374/******/ 		__webpack_require__.d = function(exports, definition) {
18375/******/ 			for(var key in definition) {
18376/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
18377/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
18378/******/ 				}
18379/******/ 			}
18380/******/ 		};
18381/******/ 	}();
18382/******/ 	
18383/******/ 	/* webpack/runtime/global */
18384/******/ 	!function() {
18385/******/ 		__webpack_require__.g = (function() {
18386/******/ 			if (typeof globalThis === 'object') return globalThis;
18387/******/ 			try {
18388/******/ 				return this || new Function('return this')();
18389/******/ 			} catch (e) {
18390/******/ 				if (typeof window === 'object') return window;
18391/******/ 			}
18392/******/ 		})();
18393/******/ 	}();
18394/******/ 	
18395/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
18396/******/ 	!function() {
18397/******/ 		__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
18398/******/ 	}();
18399/******/ 	
18400/******/ 	/* webpack/runtime/make namespace object */
18401/******/ 	!function() {
18402/******/ 		// define __esModule on exports
18403/******/ 		__webpack_require__.r = function(exports) {
18404/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
18405/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
18406/******/ 			}
18407/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
18408/******/ 		};
18409/******/ 	}();
18410/******/ 	
18411/************************************************************************/
18412/******/ 	
18413/******/ 	// startup
18414/******/ 	// Load entry module and return exports
18415/******/ 	// This entry module is referenced by other modules so it can't be inlined
18416/******/ 	__webpack_require__("./node_modules/jquery/dist/jquery-exposed-exposed.js");
18417/******/ 	__webpack_require__("./node_modules/bootstrap/dist/js/bootstrap.js");
18418/******/ 	var __webpack_exports__ = __webpack_require__("./src/main/webpack/dependencies/main.ts");
18419/******/ 	
18420/******/ })()
18421;
18422//# sourceMappingURL=dependencies.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.